1*8ccd4a63SDavid du Colombier #ifdef PLAN9 2*8ccd4a63SDavid du Colombier #pragma src "/sys/src/libauth" 3*8ccd4a63SDavid du Colombier #pragma lib "libauth.a" 4*8ccd4a63SDavid du Colombier #endif 5*8ccd4a63SDavid du Colombier 6*8ccd4a63SDavid du Colombier /* 7*8ccd4a63SDavid du Colombier * Interface for typical callers. 8*8ccd4a63SDavid du Colombier */ 9*8ccd4a63SDavid du Colombier 10*8ccd4a63SDavid du Colombier typedef struct AuthInfo AuthInfo; 11*8ccd4a63SDavid du Colombier typedef struct Chalstate Chalstate; 12*8ccd4a63SDavid du Colombier typedef struct Chapreply Chapreply; 13*8ccd4a63SDavid du Colombier typedef struct MSchapreply MSchapreply; 14*8ccd4a63SDavid du Colombier typedef struct UserPasswd UserPasswd; 15*8ccd4a63SDavid du Colombier typedef struct AuthRpc AuthRpc; 16*8ccd4a63SDavid du Colombier 17*8ccd4a63SDavid du Colombier enum 18*8ccd4a63SDavid du Colombier { 19*8ccd4a63SDavid du Colombier MAXCHLEN= 256, /* max challenge length */ 20*8ccd4a63SDavid du Colombier MAXNAMELEN= 256, /* maximum name length */ 21*8ccd4a63SDavid du Colombier MD5LEN= 16, 22*8ccd4a63SDavid du Colombier 23*8ccd4a63SDavid du Colombier ARok = 0, /* rpc return values */ 24*8ccd4a63SDavid du Colombier ARdone, 25*8ccd4a63SDavid du Colombier ARerror, 26*8ccd4a63SDavid du Colombier ARneedkey, 27*8ccd4a63SDavid du Colombier ARbadkey, 28*8ccd4a63SDavid du Colombier ARwritenext, 29*8ccd4a63SDavid du Colombier ARtoosmall, 30*8ccd4a63SDavid du Colombier ARtoobig, 31*8ccd4a63SDavid du Colombier ARrpcfailure, 32*8ccd4a63SDavid du Colombier ARphase, 33*8ccd4a63SDavid du Colombier 34*8ccd4a63SDavid du Colombier AuthRpcMax = 4096, 35*8ccd4a63SDavid du Colombier }; 36*8ccd4a63SDavid du Colombier 37*8ccd4a63SDavid du Colombier struct AuthRpc 38*8ccd4a63SDavid du Colombier { 39*8ccd4a63SDavid du Colombier int afd; 40*8ccd4a63SDavid du Colombier char ibuf[AuthRpcMax]; 41*8ccd4a63SDavid du Colombier char obuf[AuthRpcMax]; 42*8ccd4a63SDavid du Colombier char *arg; 43*8ccd4a63SDavid du Colombier uint narg; 44*8ccd4a63SDavid du Colombier }; 45*8ccd4a63SDavid du Colombier 46*8ccd4a63SDavid du Colombier struct AuthInfo 47*8ccd4a63SDavid du Colombier { 48*8ccd4a63SDavid du Colombier char *cuid; /* caller id */ 49*8ccd4a63SDavid du Colombier char *suid; /* server id */ 50*8ccd4a63SDavid du Colombier char *cap; /* capability (only valid on server side) */ 51*8ccd4a63SDavid du Colombier int nsecret; /* length of secret */ 52*8ccd4a63SDavid du Colombier uchar *secret; /* secret */ 53*8ccd4a63SDavid du Colombier }; 54*8ccd4a63SDavid du Colombier 55*8ccd4a63SDavid du Colombier struct Chalstate 56*8ccd4a63SDavid du Colombier { 57*8ccd4a63SDavid du Colombier char *user; 58*8ccd4a63SDavid du Colombier char chal[MAXCHLEN]; 59*8ccd4a63SDavid du Colombier int nchal; 60*8ccd4a63SDavid du Colombier void *resp; 61*8ccd4a63SDavid du Colombier int nresp; 62*8ccd4a63SDavid du Colombier 63*8ccd4a63SDavid du Colombier /* for implementation only */ 64*8ccd4a63SDavid du Colombier int afd; /* to factotum */ 65*8ccd4a63SDavid du Colombier AuthRpc *rpc; /* to factotum */ 66*8ccd4a63SDavid du Colombier char userbuf[MAXNAMELEN]; /* temp space if needed */ 67*8ccd4a63SDavid du Colombier int userinchal; /* user was sent to obtain challenge */ 68*8ccd4a63SDavid du Colombier }; 69*8ccd4a63SDavid du Colombier 70*8ccd4a63SDavid du Colombier struct Chapreply /* for protocol "chap" */ 71*8ccd4a63SDavid du Colombier { 72*8ccd4a63SDavid du Colombier uchar id; 73*8ccd4a63SDavid du Colombier char resp[MD5LEN]; 74*8ccd4a63SDavid du Colombier }; 75*8ccd4a63SDavid du Colombier 76*8ccd4a63SDavid du Colombier struct MSchapreply /* for protocol "mschap" */ 77*8ccd4a63SDavid du Colombier { 78*8ccd4a63SDavid du Colombier char LMresp[24]; /* Lan Manager response */ 79*8ccd4a63SDavid du Colombier char NTresp[24]; /* NT response */ 80*8ccd4a63SDavid du Colombier }; 81*8ccd4a63SDavid du Colombier 82*8ccd4a63SDavid du Colombier struct UserPasswd 83*8ccd4a63SDavid du Colombier { 84*8ccd4a63SDavid du Colombier char *user; 85*8ccd4a63SDavid du Colombier char *passwd; 86*8ccd4a63SDavid du Colombier }; 87*8ccd4a63SDavid du Colombier 88*8ccd4a63SDavid du Colombier extern int newns(char*, char*); 89*8ccd4a63SDavid du Colombier extern int addns(char*, char*); 90*8ccd4a63SDavid du Colombier 91*8ccd4a63SDavid du Colombier extern int noworld(char*); 92*8ccd4a63SDavid du Colombier extern int amount(int, char*, int, char*); 93*8ccd4a63SDavid du Colombier 94*8ccd4a63SDavid du Colombier /* these two may get generalized away -rsc */ 95*8ccd4a63SDavid du Colombier extern int login(char*, char*, char*); 96*8ccd4a63SDavid du Colombier extern int httpauth(char*, char*); 97*8ccd4a63SDavid du Colombier 98*8ccd4a63SDavid du Colombier typedef struct Attr Attr; 99*8ccd4a63SDavid du Colombier typedef struct String String; 100*8ccd4a63SDavid du Colombier enum { 101*8ccd4a63SDavid du Colombier AttrNameval, /* name=val -- when matching, must have name=val */ 102*8ccd4a63SDavid du Colombier AttrQuery, /* name? -- when matching, must be present */ 103*8ccd4a63SDavid du Colombier AttrDefault, /* name:=val -- when matching, if present must match INTERNAL */ 104*8ccd4a63SDavid du Colombier }; 105*8ccd4a63SDavid du Colombier struct Attr 106*8ccd4a63SDavid du Colombier { 107*8ccd4a63SDavid du Colombier int type; 108*8ccd4a63SDavid du Colombier Attr *next; 109*8ccd4a63SDavid du Colombier char *name; 110*8ccd4a63SDavid du Colombier char *val; 111*8ccd4a63SDavid du Colombier }; 112*8ccd4a63SDavid du Colombier 113*8ccd4a63SDavid du Colombier typedef int AuthGetkey(char*); 114*8ccd4a63SDavid du Colombier 115*8ccd4a63SDavid du Colombier int _attrfmt(Fmt*); 116*8ccd4a63SDavid du Colombier Attr *_copyattr(Attr*); 117*8ccd4a63SDavid du Colombier Attr *_delattr(Attr*, char*); 118*8ccd4a63SDavid du Colombier Attr *_findattr(Attr*, char*); 119*8ccd4a63SDavid du Colombier void _freeattr(Attr*); 120*8ccd4a63SDavid du Colombier Attr *_mkattr(int, char*, char*, Attr*); 121*8ccd4a63SDavid du Colombier Attr *_parseattr(char*); 122*8ccd4a63SDavid du Colombier char *_strfindattr(Attr*, char*); 123*8ccd4a63SDavid du Colombier #ifdef VARARGCK 124*8ccd4a63SDavid du Colombier #pragma varargck type "A" Attr* 125*8ccd4a63SDavid du Colombier #endif 126*8ccd4a63SDavid du Colombier 127*8ccd4a63SDavid du Colombier extern AuthInfo* fauth_proxy(int, AuthRpc *rpc, AuthGetkey *getkey, char *params); 128*8ccd4a63SDavid du Colombier extern AuthInfo* auth_proxy(int fd, AuthGetkey *getkey, char *fmt, ...); 129*8ccd4a63SDavid du Colombier extern int auth_getkey(char*); 130*8ccd4a63SDavid du Colombier extern int (*amount_getkey)(char*); 131*8ccd4a63SDavid du Colombier extern void auth_freeAI(AuthInfo *ai); 132*8ccd4a63SDavid du Colombier extern int auth_chuid(AuthInfo *ai, char *ns); 133*8ccd4a63SDavid du Colombier extern Chalstate *auth_challenge(char*, ...); 134*8ccd4a63SDavid du Colombier extern AuthInfo* auth_response(Chalstate*); 135*8ccd4a63SDavid du Colombier extern int auth_respond(void*, uint, char*, uint, void*, uint, AuthGetkey *getkey, char*, ...); 136*8ccd4a63SDavid du Colombier extern void auth_freechal(Chalstate*); 137*8ccd4a63SDavid du Colombier extern AuthInfo* auth_userpasswd(char *user, char *passwd); 138*8ccd4a63SDavid du Colombier extern UserPasswd* auth_getuserpasswd(AuthGetkey *getkey, char*, ...); 139*8ccd4a63SDavid du Colombier extern AuthInfo* auth_getinfo(AuthRpc *rpc); 140*8ccd4a63SDavid du Colombier extern AuthRpc* auth_allocrpc(int afd); 141*8ccd4a63SDavid du Colombier extern Attr* auth_attr(AuthRpc *rpc); 142*8ccd4a63SDavid du Colombier extern void auth_freerpc(AuthRpc *rpc); 143*8ccd4a63SDavid du Colombier extern uint auth_rpc(AuthRpc *rpc, char *verb, void *a, int n); 144*8ccd4a63SDavid du Colombier extern int auth_wep(char*, char*, ...); 145*8ccd4a63SDavid du Colombier 146*8ccd4a63SDavid du Colombier #ifdef VARARGCK 147*8ccd4a63SDavid du Colombier #pragma varargck argpos auth_proxy 3 148*8ccd4a63SDavid du Colombier #pragma varargck argpos auth_challenge 1 149*8ccd4a63SDavid du Colombier #pragma varargck argpos auth_respond 3 150*8ccd4a63SDavid du Colombier #pragma varargck argpos auth_getuserpasswd 2 151*8ccd4a63SDavid du Colombier #endif 152