plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

httpauth.c (1059B)


      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 }