xref: /plan9/sys/src/libauth/httpauth.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
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