Add real factotum.
This commit is contained in:
51
libauth/httpauth.c
Normal file
51
libauth/httpauth.c
Normal file
@ -0,0 +1,51 @@
|
||||
#include <u.h>
|
||||
#include <libc.h>
|
||||
#include <auth.h>
|
||||
#include <authsrv.h>
|
||||
|
||||
/* deprecated.
|
||||
This is the mechanism that put entries in /sys/lib/httpd.rewrite
|
||||
and passwords on the authserver in /sys/lib/httppasswords, which
|
||||
was awkward to administer. Instead, use local .httplogin files,
|
||||
which are implemented in sys/src/cmd/ip/httpd/authorize.c */
|
||||
|
||||
int
|
||||
httpauth(char *name, char *password)
|
||||
{
|
||||
int afd;
|
||||
Ticketreq tr;
|
||||
Ticket t;
|
||||
char key[DESKEYLEN];
|
||||
char buf[512];
|
||||
|
||||
afd = authdial(nil, nil);
|
||||
if(afd < 0)
|
||||
return -1;
|
||||
|
||||
/* send ticket request to AS */
|
||||
memset(&tr, 0, sizeof(tr));
|
||||
strcpy(tr.uid, name);
|
||||
tr.type = AuthHttp;
|
||||
convTR2M(&tr, buf);
|
||||
if(write(afd, buf, TICKREQLEN) != TICKREQLEN){
|
||||
close(afd);
|
||||
return -1;
|
||||
}
|
||||
if(_asrdresp(afd, buf, TICKETLEN) < 0){
|
||||
close(afd);
|
||||
return -1;
|
||||
}
|
||||
close(afd);
|
||||
|
||||
/*
|
||||
* use password and try to decrypt the
|
||||
* ticket. If it doesn't work we've got a bad password,
|
||||
* give up.
|
||||
*/
|
||||
passtokey(key, password);
|
||||
convM2T(buf, &t, key);
|
||||
if(t.num != AuthHr || strcmp(t.cuid, tr.uid))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user