xref: /plan9/sys/src/cmd/unix/drawterm/libauth/httpauth.c (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
1*8ccd4a63SDavid du Colombier #include <u.h>
2*8ccd4a63SDavid du Colombier #include <libc.h>
3*8ccd4a63SDavid du Colombier #include <auth.h>
4*8ccd4a63SDavid du Colombier #include <authsrv.h>
5*8ccd4a63SDavid du Colombier 
6*8ccd4a63SDavid du Colombier /* deprecated.
7*8ccd4a63SDavid du Colombier 	This is the mechanism that put entries in /sys/lib/httpd.rewrite
8*8ccd4a63SDavid du Colombier 	and passwords on the authserver in /sys/lib/httppasswords, which
9*8ccd4a63SDavid du Colombier 	was awkward to administer.  Instead, use local .httplogin files,
10*8ccd4a63SDavid du Colombier 	which are implemented in sys/src/cmd/ip/httpd/authorize.c */
11*8ccd4a63SDavid du Colombier 
12*8ccd4a63SDavid du Colombier int
httpauth(char * name,char * password)13*8ccd4a63SDavid du Colombier httpauth(char *name, char *password)
14*8ccd4a63SDavid du Colombier {
15*8ccd4a63SDavid du Colombier 	int afd;
16*8ccd4a63SDavid du Colombier 	Ticketreq tr;
17*8ccd4a63SDavid du Colombier 	Ticket	t;
18*8ccd4a63SDavid du Colombier 	char key[DESKEYLEN];
19*8ccd4a63SDavid du Colombier 	char buf[512];
20*8ccd4a63SDavid du Colombier 
21*8ccd4a63SDavid du Colombier 	afd = authdial(nil, nil);
22*8ccd4a63SDavid du Colombier 	if(afd < 0)
23*8ccd4a63SDavid du Colombier 		return -1;
24*8ccd4a63SDavid du Colombier 
25*8ccd4a63SDavid du Colombier 	/* send ticket request to AS */
26*8ccd4a63SDavid du Colombier 	memset(&tr, 0, sizeof(tr));
27*8ccd4a63SDavid du Colombier 	strcpy(tr.uid, name);
28*8ccd4a63SDavid du Colombier 	tr.type = AuthHttp;
29*8ccd4a63SDavid du Colombier 	convTR2M(&tr, buf);
30*8ccd4a63SDavid du Colombier 	if(write(afd, buf, TICKREQLEN) != TICKREQLEN){
31*8ccd4a63SDavid du Colombier 		close(afd);
32*8ccd4a63SDavid du Colombier 		return -1;
33*8ccd4a63SDavid du Colombier 	}
34*8ccd4a63SDavid du Colombier 	if(_asrdresp(afd, buf, TICKETLEN) < 0){
35*8ccd4a63SDavid du Colombier 		close(afd);
36*8ccd4a63SDavid du Colombier 		return -1;
37*8ccd4a63SDavid du Colombier 	}
38*8ccd4a63SDavid du Colombier 	close(afd);
39*8ccd4a63SDavid du Colombier 
40*8ccd4a63SDavid du Colombier 	/*
41*8ccd4a63SDavid du Colombier 	 *  use password and try to decrypt the
42*8ccd4a63SDavid du Colombier 	 *  ticket.  If it doesn't work we've got a bad password,
43*8ccd4a63SDavid du Colombier 	 *  give up.
44*8ccd4a63SDavid du Colombier 	 */
45*8ccd4a63SDavid du Colombier 	passtokey(key, password);
46*8ccd4a63SDavid du Colombier 	convM2T(buf, &t, key);
47*8ccd4a63SDavid du Colombier 	if(t.num != AuthHr || strcmp(t.cuid, tr.uid))
48*8ccd4a63SDavid du Colombier 		return -1;
49*8ccd4a63SDavid du Colombier 
50*8ccd4a63SDavid du Colombier 	return 0;
51*8ccd4a63SDavid du Colombier }
52