mirror of
https://github.com/0intro/conterm
synced 2024-12-01 17:57:03 +03:00
52 lines
1.0 KiB
C
52 lines
1.0 KiB
C
|
#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;
|
||
|
}
|