17dd7cddfSDavid du Colombier #include <u.h>
27dd7cddfSDavid du Colombier #include <libc.h>
37dd7cddfSDavid du Colombier #include <auth.h>
4*9a747e4fSDavid du Colombier #include <authsrv.h>
5*9a747e4fSDavid du Colombier
6*9a747e4fSDavid du Colombier /* deprecated.
7*9a747e4fSDavid du Colombier This is the mechanism that put entries in /sys/lib/httpd.rewrite
8*9a747e4fSDavid du Colombier and passwords on the authserver in /sys/lib/httppasswords, which
9*9a747e4fSDavid du Colombier was awkward to administer. Instead, use local .httplogin files,
10*9a747e4fSDavid du Colombier which are implemented in sys/src/cmd/ip/httpd/authorize.c */
117dd7cddfSDavid du Colombier
127dd7cddfSDavid du Colombier int
httpauth(char * name,char * password)137dd7cddfSDavid du Colombier httpauth(char *name, char *password)
147dd7cddfSDavid du Colombier {
157dd7cddfSDavid du Colombier int afd;
167dd7cddfSDavid du Colombier Ticketreq tr;
177dd7cddfSDavid du Colombier Ticket t;
187dd7cddfSDavid du Colombier char key[DESKEYLEN];
197dd7cddfSDavid du Colombier char buf[512];
207dd7cddfSDavid du Colombier
21*9a747e4fSDavid du Colombier afd = authdial(nil, nil);
227dd7cddfSDavid du Colombier if(afd < 0)
237dd7cddfSDavid du Colombier return -1;
247dd7cddfSDavid du Colombier
257dd7cddfSDavid du Colombier /* send ticket request to AS */
267dd7cddfSDavid du Colombier memset(&tr, 0, sizeof(tr));
277dd7cddfSDavid du Colombier strcpy(tr.uid, name);
287dd7cddfSDavid du Colombier tr.type = AuthHttp;
297dd7cddfSDavid du Colombier convTR2M(&tr, buf);
307dd7cddfSDavid du Colombier if(write(afd, buf, TICKREQLEN) != TICKREQLEN){
317dd7cddfSDavid du Colombier close(afd);
327dd7cddfSDavid du Colombier return -1;
337dd7cddfSDavid du Colombier }
347dd7cddfSDavid du Colombier if(_asrdresp(afd, buf, TICKETLEN) < 0){
357dd7cddfSDavid du Colombier close(afd);
367dd7cddfSDavid du Colombier return -1;
377dd7cddfSDavid du Colombier }
387dd7cddfSDavid du Colombier close(afd);
397dd7cddfSDavid du Colombier
407dd7cddfSDavid du Colombier /*
417dd7cddfSDavid du Colombier * use password and try to decrypt the
427dd7cddfSDavid du Colombier * ticket. If it doesn't work we've got a bad password,
437dd7cddfSDavid du Colombier * give up.
447dd7cddfSDavid du Colombier */
457dd7cddfSDavid du Colombier passtokey(key, password);
467dd7cddfSDavid du Colombier convM2T(buf, &t, key);
477dd7cddfSDavid du Colombier if(t.num != AuthHr || strcmp(t.cuid, tr.uid))
487dd7cddfSDavid du Colombier return -1;
497dd7cddfSDavid du Colombier
507dd7cddfSDavid du Colombier return 0;
517dd7cddfSDavid du Colombier }
52