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>
5 2277c5d7 2004-03-21 devnull typedef struct Test Test;
7 2277c5d7 2004-03-21 devnull struct Test
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);
15 2277c5d7 2004-03-21 devnull ai2status(AuthInfo *ai)
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;
24 2277c5d7 2004-03-21 devnull proxyserver(Test *t, AuthRpc *rpc, int fd)
26 2277c5d7 2004-03-21 devnull char buf[1024];
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));
33 2277c5d7 2004-03-21 devnull proxyclient(Test *t, int fd)
35 2277c5d7 2004-03-21 devnull return ai2status(auth_proxy(fd, auth_getkey, "proto=%q role=client", t->name));
38 2277c5d7 2004-03-21 devnull Test test[] =
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,
48 2277c5d7 2004-03-21 devnull usage(void)
50 2277c5d7 2004-03-21 devnull fprint(2, "usage: test [name]...\n");
51 2277c5d7 2004-03-21 devnull exits("usage");
55 2277c5d7 2004-03-21 devnull runtest(AuthRpc *srpc, Test *t)
57 2277c5d7 2004-03-21 devnull int p[2], bad;
58 2277c5d7 2004-03-21 devnull Waitmsg *w;
60 2277c5d7 2004-03-21 devnull if(pipe(p) < 0)
61 2277c5d7 2004-03-21 devnull sysfatal("pipe: %r");
63 2277c5d7 2004-03-21 devnull print("%s...", t->name);
65 2277c5d7 2004-03-21 devnull switch(fork()){
67 2277c5d7 2004-03-21 devnull sysfatal("fork: %r");
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");
75 2277c5d7 2004-03-21 devnull close(p[1]);
76 2277c5d7 2004-03-21 devnull _exits(nil);
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");
83 2277c5d7 2004-03-21 devnull close(p[0]);
86 2277c5d7 2004-03-21 devnull w = wait();
87 2277c5d7 2004-03-21 devnull if(w->msg[0])
89 2277c5d7 2004-03-21 devnull print("\n");
93 2277c5d7 2004-03-21 devnull main(int argc, char **argv)
95 2277c5d7 2004-03-21 devnull int i, j;
97 2277c5d7 2004-03-21 devnull AuthRpc *srpc;
99 2277c5d7 2004-03-21 devnull ARGBEGIN{
100 2277c5d7 2004-03-21 devnull default:
101 2277c5d7 2004-03-21 devnull usage();
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");
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]);
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);