Blame


1 6e527fbc 2005-02-13 devnull #include <u.h>
2 6e527fbc 2005-02-13 devnull #include <libc.h>
3 6e527fbc 2005-02-13 devnull #include <auth.h>
4 6e527fbc 2005-02-13 devnull
5 6e527fbc 2005-02-13 devnull typedef struct Test Test;
6 6e527fbc 2005-02-13 devnull
7 6e527fbc 2005-02-13 devnull struct Test
8 6e527fbc 2005-02-13 devnull {
9 6e527fbc 2005-02-13 devnull char *name;
10 6e527fbc 2005-02-13 devnull int (*server)(Test*, AuthRpc*, int);
11 6e527fbc 2005-02-13 devnull int (*client)(Test*, int);
12 6e527fbc 2005-02-13 devnull };
13 6e527fbc 2005-02-13 devnull
14 6e527fbc 2005-02-13 devnull int
15 6e527fbc 2005-02-13 devnull ai2status(AuthInfo *ai)
16 6e527fbc 2005-02-13 devnull {
17 6e527fbc 2005-02-13 devnull if(ai == nil)
18 6e527fbc 2005-02-13 devnull return -1;
19 6e527fbc 2005-02-13 devnull auth_freeAI(ai);
20 6e527fbc 2005-02-13 devnull return 0;
21 6e527fbc 2005-02-13 devnull }
22 6e527fbc 2005-02-13 devnull
23 6e527fbc 2005-02-13 devnull int
24 6e527fbc 2005-02-13 devnull proxyserver(Test *t, AuthRpc *rpc, int fd)
25 6e527fbc 2005-02-13 devnull {
26 6e527fbc 2005-02-13 devnull char buf[1024];
27 6e527fbc 2005-02-13 devnull
28 6e527fbc 2005-02-13 devnull sprint(buf, "proto=%q role=server", t->name);
29 6e527fbc 2005-02-13 devnull return ai2status(fauth_proxy(fd, rpc, nil, buf));
30 6e527fbc 2005-02-13 devnull }
31 6e527fbc 2005-02-13 devnull
32 6e527fbc 2005-02-13 devnull int
33 6e527fbc 2005-02-13 devnull proxyclient(Test *t, int fd)
34 6e527fbc 2005-02-13 devnull {
35 6e527fbc 2005-02-13 devnull return ai2status(auth_proxy(fd, auth_getkey, "proto=%q role=client", t->name));
36 6e527fbc 2005-02-13 devnull }
37 6e527fbc 2005-02-13 devnull
38 6e527fbc 2005-02-13 devnull Test test[] =
39 6e527fbc 2005-02-13 devnull {
40 6e527fbc 2005-02-13 devnull "apop", proxyserver, proxyclient,
41 6e527fbc 2005-02-13 devnull "cram", proxyserver, proxyclient,
42 6e527fbc 2005-02-13 devnull "p9sk1", proxyserver, proxyclient,
43 6e527fbc 2005-02-13 devnull "p9sk2", proxyserver, proxyclient,
44 cbeb0b26 2006-04-01 devnull "p9any", proxyserver, proxyclient
45 6e527fbc 2005-02-13 devnull };
46 6e527fbc 2005-02-13 devnull
47 6e527fbc 2005-02-13 devnull void
48 6e527fbc 2005-02-13 devnull usage(void)
49 6e527fbc 2005-02-13 devnull {
50 6e527fbc 2005-02-13 devnull fprint(2, "usage: test [name]...\n");
51 6e527fbc 2005-02-13 devnull exits("usage");
52 6e527fbc 2005-02-13 devnull }
53 6e527fbc 2005-02-13 devnull
54 6e527fbc 2005-02-13 devnull void
55 6e527fbc 2005-02-13 devnull runtest(AuthRpc *srpc, Test *t)
56 6e527fbc 2005-02-13 devnull {
57 6e527fbc 2005-02-13 devnull int p[2], bad;
58 6e527fbc 2005-02-13 devnull Waitmsg *w;
59 6e527fbc 2005-02-13 devnull
60 6e527fbc 2005-02-13 devnull if(pipe(p) < 0)
61 6e527fbc 2005-02-13 devnull sysfatal("pipe: %r");
62 6e527fbc 2005-02-13 devnull
63 6e527fbc 2005-02-13 devnull print("%s...", t->name);
64 6e527fbc 2005-02-13 devnull
65 6e527fbc 2005-02-13 devnull switch(fork()){
66 6e527fbc 2005-02-13 devnull case -1:
67 6e527fbc 2005-02-13 devnull sysfatal("fork: %r");
68 6e527fbc 2005-02-13 devnull
69 6e527fbc 2005-02-13 devnull case 0:
70 6e527fbc 2005-02-13 devnull close(p[0]);
71 6e527fbc 2005-02-13 devnull if((*t->server)(t, srpc, p[1]) < 0){
72 6e527fbc 2005-02-13 devnull print("\n\tserver: %r");
73 6e527fbc 2005-02-13 devnull _exits("oops");
74 6e527fbc 2005-02-13 devnull }
75 6e527fbc 2005-02-13 devnull close(p[1]);
76 6e527fbc 2005-02-13 devnull _exits(nil);
77 6e527fbc 2005-02-13 devnull default:
78 6e527fbc 2005-02-13 devnull close(p[1]);
79 6e527fbc 2005-02-13 devnull if((*t->client)(t, p[0]) < 0){
80 6e527fbc 2005-02-13 devnull print("\n\tclient: %r");
81 6e527fbc 2005-02-13 devnull bad = 1;
82 6e527fbc 2005-02-13 devnull }
83 6e527fbc 2005-02-13 devnull close(p[0]);
84 6e527fbc 2005-02-13 devnull break;
85 6e527fbc 2005-02-13 devnull }
86 6e527fbc 2005-02-13 devnull w = wait();
87 6e527fbc 2005-02-13 devnull if(w->msg[0])
88 6e527fbc 2005-02-13 devnull bad = 1;
89 6e527fbc 2005-02-13 devnull print("\n");
90 6e527fbc 2005-02-13 devnull }
91 6e527fbc 2005-02-13 devnull
92 6e527fbc 2005-02-13 devnull void
93 6e527fbc 2005-02-13 devnull main(int argc, char **argv)
94 6e527fbc 2005-02-13 devnull {
95 6e527fbc 2005-02-13 devnull int i, j;
96 6e527fbc 2005-02-13 devnull int afd;
97 6e527fbc 2005-02-13 devnull AuthRpc *srpc;
98 6e527fbc 2005-02-13 devnull
99 6e527fbc 2005-02-13 devnull ARGBEGIN{
100 6e527fbc 2005-02-13 devnull default:
101 6e527fbc 2005-02-13 devnull usage();
102 6e527fbc 2005-02-13 devnull }ARGEND
103 6e527fbc 2005-02-13 devnull
104 6e527fbc 2005-02-13 devnull quotefmtinstall();
105 6e527fbc 2005-02-13 devnull afd = open("/n/kremvax/factotum/rpc", ORDWR);
106 6e527fbc 2005-02-13 devnull if(afd < 0)
107 6e527fbc 2005-02-13 devnull sysfatal("open /n/kremvax/factotum/rpc: %r");
108 6e527fbc 2005-02-13 devnull srpc = auth_allocrpc(afd);
109 6e527fbc 2005-02-13 devnull if(srpc == nil)
110 6e527fbc 2005-02-13 devnull sysfatal("auth_allocrpc: %r");
111 6e527fbc 2005-02-13 devnull
112 6e527fbc 2005-02-13 devnull if(argc == 0)
113 6e527fbc 2005-02-13 devnull for(i=0; i<nelem(test); i++)
114 6e527fbc 2005-02-13 devnull runtest(srpc, &test[i]);
115 6e527fbc 2005-02-13 devnull else
116 6e527fbc 2005-02-13 devnull for(i=0; i<argc; i++)
117 6e527fbc 2005-02-13 devnull for(j=0; j<nelem(test); j++)
118 6e527fbc 2005-02-13 devnull if(strcmp(argv[i], test[j].name) == 0)
119 6e527fbc 2005-02-13 devnull runtest(srpc, &test[j]);
120 6e527fbc 2005-02-13 devnull exits(nil);
121 6e527fbc 2005-02-13 devnull }