19a747e4fSDavid du Colombier #pragma src "/sys/src/libauth" 23e12c5d1SDavid du Colombier #pragma lib "libauth.a" 33e12c5d1SDavid du Colombier 49a747e4fSDavid du Colombier /* 59a747e4fSDavid du Colombier * Interface for typical callers. 69a747e4fSDavid du Colombier */ 79a747e4fSDavid du Colombier 89a747e4fSDavid du Colombier typedef struct AuthInfo AuthInfo; 9219b2ee8SDavid du Colombier typedef struct Chalstate Chalstate; 107dd7cddfSDavid du Colombier typedef struct Chapreply Chapreply; 117dd7cddfSDavid du Colombier typedef struct MSchapreply MSchapreply; 129a747e4fSDavid du Colombier typedef struct UserPasswd UserPasswd; 139a747e4fSDavid du Colombier typedef struct AuthRpc AuthRpc; 143e12c5d1SDavid du Colombier 15219b2ee8SDavid du Colombier enum 16219b2ee8SDavid du Colombier { 179a747e4fSDavid du Colombier MAXCHLEN= 256, /* max challenge length */ 189a747e4fSDavid du Colombier MAXNAMELEN= 256, /* maximum name length */ 197dd7cddfSDavid du Colombier MD5LEN= 16, 203e12c5d1SDavid du Colombier 219a747e4fSDavid du Colombier ARok = 0, /* rpc return values */ 229a747e4fSDavid du Colombier ARdone, 239a747e4fSDavid du Colombier ARerror, 249a747e4fSDavid du Colombier ARneedkey, 259a747e4fSDavid du Colombier ARbadkey, 269a747e4fSDavid du Colombier ARwritenext, 279a747e4fSDavid du Colombier ARtoosmall, 289a747e4fSDavid du Colombier ARtoobig, 299a747e4fSDavid du Colombier ARrpcfailure, 309a747e4fSDavid du Colombier ARphase, 319a747e4fSDavid du Colombier 329a747e4fSDavid du Colombier AuthRpcMax = 4096, 333e12c5d1SDavid du Colombier }; 343e12c5d1SDavid du Colombier 359a747e4fSDavid du Colombier struct AuthRpc 36219b2ee8SDavid du Colombier { 379a747e4fSDavid du Colombier int afd; 38*742e209dSDavid du Colombier char ibuf[AuthRpcMax+1]; /* +1 for NUL in auth_rpc.c */ 399a747e4fSDavid du Colombier char obuf[AuthRpcMax]; 409a747e4fSDavid du Colombier char *arg; 419a747e4fSDavid du Colombier uint narg; 42219b2ee8SDavid du Colombier }; 43219b2ee8SDavid du Colombier 449a747e4fSDavid du Colombier struct AuthInfo 45219b2ee8SDavid du Colombier { 469a747e4fSDavid du Colombier char *cuid; /* caller id */ 479a747e4fSDavid du Colombier char *suid; /* server id */ 489a747e4fSDavid du Colombier char *cap; /* capability (only valid on server side) */ 499a747e4fSDavid du Colombier int nsecret; /* length of secret */ 509a747e4fSDavid du Colombier uchar *secret; /* secret */ 513e12c5d1SDavid du Colombier }; 523e12c5d1SDavid du Colombier 53219b2ee8SDavid du Colombier struct Chalstate 54219b2ee8SDavid du Colombier { 559a747e4fSDavid du Colombier char *user; 569a747e4fSDavid du Colombier char chal[MAXCHLEN]; 579a747e4fSDavid du Colombier int nchal; 589a747e4fSDavid du Colombier void *resp; 599a747e4fSDavid du Colombier int nresp; 609a747e4fSDavid du Colombier 619a747e4fSDavid du Colombier /* for implementation only */ 629a747e4fSDavid du Colombier int afd; /* to factotum */ 639a747e4fSDavid du Colombier AuthRpc *rpc; /* to factotum */ 649a747e4fSDavid du Colombier char userbuf[MAXNAMELEN]; /* temp space if needed */ 659a747e4fSDavid du Colombier int userinchal; /* user was sent to obtain challenge */ 66219b2ee8SDavid du Colombier }; 67219b2ee8SDavid du Colombier 689a747e4fSDavid du Colombier struct Chapreply /* for protocol "chap" */ 697dd7cddfSDavid du Colombier { 707dd7cddfSDavid du Colombier uchar id; 717dd7cddfSDavid du Colombier char resp[MD5LEN]; 727dd7cddfSDavid du Colombier }; 737dd7cddfSDavid du Colombier 749a747e4fSDavid du Colombier struct MSchapreply /* for protocol "mschap" */ 757dd7cddfSDavid du Colombier { 767dd7cddfSDavid du Colombier char LMresp[24]; /* Lan Manager response */ 777dd7cddfSDavid du Colombier char NTresp[24]; /* NT response */ 787dd7cddfSDavid du Colombier }; 797dd7cddfSDavid du Colombier 809a747e4fSDavid du Colombier struct UserPasswd 8159cc4ca5SDavid du Colombier { 829a747e4fSDavid du Colombier char *user; 839a747e4fSDavid du Colombier char *passwd; 8459cc4ca5SDavid du Colombier }; 8559cc4ca5SDavid du Colombier 86219b2ee8SDavid du Colombier extern int newns(char*, char*); 877dd7cddfSDavid du Colombier extern int addns(char*, char*); 887dd7cddfSDavid du Colombier 899a747e4fSDavid du Colombier extern int noworld(char*); 909a747e4fSDavid du Colombier extern int amount(int, char*, int, char*); 919a747e4fSDavid du Colombier 929a747e4fSDavid du Colombier /* these two may get generalized away -rsc */ 939a747e4fSDavid du Colombier extern int login(char*, char*, char*); 949a747e4fSDavid du Colombier extern int httpauth(char*, char*); 959a747e4fSDavid du Colombier 969a747e4fSDavid du Colombier typedef struct Attr Attr; 979a747e4fSDavid du Colombier enum { 989a747e4fSDavid du Colombier AttrNameval, /* name=val -- when matching, must have name=val */ 999a747e4fSDavid du Colombier AttrQuery, /* name? -- when matching, must be present */ 1009a747e4fSDavid du Colombier AttrDefault, /* name:=val -- when matching, if present must match INTERNAL */ 1019a747e4fSDavid du Colombier }; 1029a747e4fSDavid du Colombier struct Attr 1039a747e4fSDavid du Colombier { 1049a747e4fSDavid du Colombier int type; 1059a747e4fSDavid du Colombier Attr *next; 1062ebbfa15SDavid du Colombier char *name; 1072ebbfa15SDavid du Colombier char *val; 1089a747e4fSDavid du Colombier }; 1099a747e4fSDavid du Colombier 1109a747e4fSDavid du Colombier typedef int AuthGetkey(char*); 1119a747e4fSDavid du Colombier 1129a747e4fSDavid du Colombier int _attrfmt(Fmt*); 1139a747e4fSDavid du Colombier Attr *_copyattr(Attr*); 1149a747e4fSDavid du Colombier Attr *_delattr(Attr*, char*); 1159a747e4fSDavid du Colombier Attr *_findattr(Attr*, char*); 1169a747e4fSDavid du Colombier void _freeattr(Attr*); 1179a747e4fSDavid du Colombier Attr *_mkattr(int, char*, char*, Attr*); 1189a747e4fSDavid du Colombier Attr *_parseattr(char*); 1192ebbfa15SDavid du Colombier char *_strfindattr(Attr*, char*); 1209a747e4fSDavid du Colombier #pragma varargck type "A" Attr* 1219a747e4fSDavid du Colombier 1229a747e4fSDavid du Colombier extern AuthInfo* fauth_proxy(int, AuthRpc *rpc, AuthGetkey *getkey, char *params); 1239a747e4fSDavid du Colombier extern AuthInfo* auth_proxy(int fd, AuthGetkey *getkey, char *fmt, ...); 1249a747e4fSDavid du Colombier extern int auth_getkey(char*); 1259a747e4fSDavid du Colombier extern int (*amount_getkey)(char*); 1269a747e4fSDavid du Colombier extern void auth_freeAI(AuthInfo *ai); 1279a747e4fSDavid du Colombier extern int auth_chuid(AuthInfo *ai, char *ns); 1289a747e4fSDavid du Colombier extern Chalstate *auth_challenge(char*, ...); 1299a747e4fSDavid du Colombier extern AuthInfo* auth_response(Chalstate*); 1309a747e4fSDavid du Colombier extern int auth_respond(void*, uint, char*, uint, void*, uint, AuthGetkey *getkey, char*, ...); 1319a747e4fSDavid du Colombier extern void auth_freechal(Chalstate*); 1329a747e4fSDavid du Colombier extern AuthInfo* auth_userpasswd(char *user, char *passwd); 1339a747e4fSDavid du Colombier extern UserPasswd* auth_getuserpasswd(AuthGetkey *getkey, char*, ...); 1349a747e4fSDavid du Colombier extern AuthInfo* auth_getinfo(AuthRpc *rpc); 1359a747e4fSDavid du Colombier extern AuthRpc* auth_allocrpc(int afd); 1369a747e4fSDavid du Colombier extern Attr* auth_attr(AuthRpc *rpc); 1379a747e4fSDavid du Colombier extern void auth_freerpc(AuthRpc *rpc); 1389a747e4fSDavid du Colombier extern uint auth_rpc(AuthRpc *rpc, char *verb, void *a, int n); 139fb7f0c93SDavid du Colombier extern int auth_wep(char*, char*, ...); 1409a747e4fSDavid du Colombier #pragma varargck argpos auth_proxy 3 1419a747e4fSDavid du Colombier #pragma varargck argpos auth_challenge 1 1428014c1eeSDavid du Colombier #pragma varargck argpos auth_respond 8 1439a747e4fSDavid du Colombier #pragma varargck argpos auth_getuserpasswd 2 144