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