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; 389a747e4fSDavid du Colombier char ibuf[AuthRpcMax]; 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 typedef struct String String; 989a747e4fSDavid du Colombier enum { 999a747e4fSDavid du Colombier AttrNameval, /* name=val -- when matching, must have name=val */ 1009a747e4fSDavid du Colombier AttrQuery, /* name? -- when matching, must be present */ 1019a747e4fSDavid du Colombier AttrDefault, /* name:=val -- when matching, if present must match INTERNAL */ 1029a747e4fSDavid du Colombier }; 1039a747e4fSDavid du Colombier struct Attr 1049a747e4fSDavid du Colombier { 1059a747e4fSDavid du Colombier int type; 1069a747e4fSDavid du Colombier Attr *next; 107*2ebbfa15SDavid du Colombier char *name; 108*2ebbfa15SDavid du Colombier char *val; 1099a747e4fSDavid du Colombier }; 1109a747e4fSDavid du Colombier 1119a747e4fSDavid du Colombier typedef int AuthGetkey(char*); 1129a747e4fSDavid du Colombier 1139a747e4fSDavid du Colombier int _attrfmt(Fmt*); 1149a747e4fSDavid du Colombier Attr *_copyattr(Attr*); 1159a747e4fSDavid du Colombier Attr *_delattr(Attr*, char*); 1169a747e4fSDavid du Colombier Attr *_findattr(Attr*, char*); 1179a747e4fSDavid du Colombier void _freeattr(Attr*); 1189a747e4fSDavid du Colombier Attr *_mkattr(int, char*, char*, Attr*); 1199a747e4fSDavid du Colombier Attr *_parseattr(char*); 120*2ebbfa15SDavid du Colombier char *_strfindattr(Attr*, char*); 1219a747e4fSDavid du Colombier #pragma varargck type "A" Attr* 1229a747e4fSDavid du Colombier 1239a747e4fSDavid du Colombier extern AuthInfo* fauth_proxy(int, AuthRpc *rpc, AuthGetkey *getkey, char *params); 1249a747e4fSDavid du Colombier extern AuthInfo* auth_proxy(int fd, AuthGetkey *getkey, char *fmt, ...); 1259a747e4fSDavid du Colombier extern int auth_getkey(char*); 1269a747e4fSDavid du Colombier extern int (*amount_getkey)(char*); 1279a747e4fSDavid du Colombier extern void auth_freeAI(AuthInfo *ai); 1289a747e4fSDavid du Colombier extern int auth_chuid(AuthInfo *ai, char *ns); 1299a747e4fSDavid du Colombier extern Chalstate *auth_challenge(char*, ...); 1309a747e4fSDavid du Colombier extern AuthInfo* auth_response(Chalstate*); 1319a747e4fSDavid du Colombier extern int auth_respond(void*, uint, char*, uint, void*, uint, AuthGetkey *getkey, char*, ...); 1329a747e4fSDavid du Colombier extern void auth_freechal(Chalstate*); 1339a747e4fSDavid du Colombier extern AuthInfo* auth_userpasswd(char *user, char *passwd); 1349a747e4fSDavid du Colombier extern UserPasswd* auth_getuserpasswd(AuthGetkey *getkey, char*, ...); 1359a747e4fSDavid du Colombier extern AuthInfo* auth_getinfo(AuthRpc *rpc); 1369a747e4fSDavid du Colombier extern AuthRpc* auth_allocrpc(int afd); 1379a747e4fSDavid du Colombier extern Attr* auth_attr(AuthRpc *rpc); 1389a747e4fSDavid du Colombier extern void auth_freerpc(AuthRpc *rpc); 1399a747e4fSDavid du Colombier extern uint auth_rpc(AuthRpc *rpc, char *verb, void *a, int n); 1409a747e4fSDavid du Colombier #pragma varargck argpos auth_proxy 3 1419a747e4fSDavid du Colombier #pragma varargck argpos auth_challenge 1 1429a747e4fSDavid du Colombier #pragma varargck argpos auth_respond 3 1439a747e4fSDavid du Colombier #pragma varargck argpos auth_getuserpasswd 2 144