ref: a57a6e511f15c02b4fd2690197b6f1333b171193
dir: /sys/src/cmd/auth/challenge.c/
#include <u.h> #include <libc.h> #include <auth.h> void usage(void) { fprint(2, "usage: auth/challenge 'params'\n"); exits("usage"); } void main(int argc, char **argv) { char buf[128], bufu[128]; int afd, n; AuthInfo *ai; AuthRpc *rpc; Chalstate *c; ARGBEGIN{ default: usage(); }ARGEND if(argc != 1) usage(); if((afd = open("/mnt/factotum/rpc", ORDWR)) < 0) sysfatal("open /mnt/factotum/rpc: %r"); rpc = auth_allocrpc(afd); if(rpc == nil) sysfatal("auth_allocrpc: %r"); if((c = auth_challenge("%s", argv[0])) == nil) sysfatal("auth_challenge: %r"); print("challenge: %s\n", c->chal); print("user:"); n = read(0, bufu, sizeof bufu); if(n > 0){ bufu[n-1] = '\0'; c->user = bufu; } print("response: "); n = read(0, buf, sizeof buf); if(n < 0) sysfatal("read: %r"); if(n == 0) exits(nil); c->nresp = n-1; c->resp = buf; if((ai = auth_response(c)) == nil) sysfatal("auth_response: %r"); print("%s %s\n", ai->cuid, ai->suid); }