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