]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libauth/httpauth.c
merge
[plan9front.git] / sys / src / libauth / httpauth.c
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
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 }