Blame


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