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