1 #include <u.h> 2 #include <libc.h> 3 #include <auth.h> 4 5 void 6 usage(void) 7 { 8 fprint(2, "usage: auth/challenge 'params'\n"); 9 exits("usage"); 10 } 11 12 void 13 main(int argc, char **argv) 14 { 15 char buf[128], bufu[128]; 16 int afd, n; 17 AuthInfo *ai; 18 AuthRpc *rpc; 19 Chalstate *c; 20 21 ARGBEGIN{ 22 default: 23 usage(); 24 }ARGEND 25 26 if(argc != 1) 27 usage(); 28 29 if((afd = open("/mnt/factotum/rpc", ORDWR)) < 0) 30 sysfatal("open /mnt/factotum/rpc: %r"); 31 32 rpc = auth_allocrpc(afd); 33 if(rpc == nil) 34 sysfatal("auth_allocrpc: %r"); 35 36 if((c = auth_challenge("%s", argv[0])) == nil) 37 sysfatal("auth_challenge: %r"); 38 39 print("challenge: %s\n", c->chal); 40 print("user:"); 41 n = read(0, bufu, sizeof bufu); 42 if(n > 0){ 43 bufu[n-1] = '\0'; 44 c->user = bufu; 45 } 46 47 print("response: "); 48 n = read(0, buf, sizeof buf); 49 if(n < 0) 50 sysfatal("read: %r"); 51 if(n == 0) 52 exits(nil); 53 c->nresp = n-1; 54 c->resp = buf; 55 if((ai = auth_response(c)) == nil) 56 sysfatal("auth_response: %r"); 57 58 print("%s %s\n", ai->cuid, ai->suid); 59 } 60