18ccd4a63SDavid du Colombier #ifdef PLAN9 28ccd4a63SDavid du Colombier #pragma src "/sys/src/libauth" 38ccd4a63SDavid du Colombier #pragma lib "libauth.a" 48ccd4a63SDavid du Colombier #endif 58ccd4a63SDavid du Colombier 68ccd4a63SDavid du Colombier /* 78ccd4a63SDavid du Colombier * Interface for typical callers. 88ccd4a63SDavid du Colombier */ 98ccd4a63SDavid du Colombier 108ccd4a63SDavid du Colombier typedef struct AuthInfo AuthInfo; 118ccd4a63SDavid du Colombier typedef struct Chalstate Chalstate; 128ccd4a63SDavid du Colombier typedef struct Chapreply Chapreply; 138ccd4a63SDavid du Colombier typedef struct MSchapreply MSchapreply; 148ccd4a63SDavid du Colombier typedef struct UserPasswd UserPasswd; 158ccd4a63SDavid du Colombier typedef struct AuthRpc AuthRpc; 168ccd4a63SDavid du Colombier 178ccd4a63SDavid du Colombier enum 188ccd4a63SDavid du Colombier { 198ccd4a63SDavid du Colombier MAXCHLEN= 256, /* max challenge length */ 20*ec59a3ddSDavid du Colombier AMAXNAMELEN= 256, /* maximum name length */ 218ccd4a63SDavid du Colombier MD5LEN= 16, 228ccd4a63SDavid du Colombier 238ccd4a63SDavid du Colombier ARok = 0, /* rpc return values */ 248ccd4a63SDavid du Colombier ARdone, 258ccd4a63SDavid du Colombier ARerror, 268ccd4a63SDavid du Colombier ARneedkey, 278ccd4a63SDavid du Colombier ARbadkey, 288ccd4a63SDavid du Colombier ARwritenext, 298ccd4a63SDavid du Colombier ARtoosmall, 308ccd4a63SDavid du Colombier ARtoobig, 318ccd4a63SDavid du Colombier ARrpcfailure, 328ccd4a63SDavid du Colombier ARphase, 338ccd4a63SDavid du Colombier 348ccd4a63SDavid du Colombier AuthRpcMax = 4096, 358ccd4a63SDavid du Colombier }; 368ccd4a63SDavid du Colombier 378ccd4a63SDavid du Colombier struct AuthRpc 388ccd4a63SDavid du Colombier { 398ccd4a63SDavid du Colombier int afd; 408ccd4a63SDavid du Colombier char ibuf[AuthRpcMax]; 418ccd4a63SDavid du Colombier char obuf[AuthRpcMax]; 428ccd4a63SDavid du Colombier char *arg; 438ccd4a63SDavid du Colombier uint narg; 448ccd4a63SDavid du Colombier }; 458ccd4a63SDavid du Colombier 468ccd4a63SDavid du Colombier struct AuthInfo 478ccd4a63SDavid du Colombier { 488ccd4a63SDavid du Colombier char *cuid; /* caller id */ 498ccd4a63SDavid du Colombier char *suid; /* server id */ 508ccd4a63SDavid du Colombier char *cap; /* capability (only valid on server side) */ 518ccd4a63SDavid du Colombier int nsecret; /* length of secret */ 528ccd4a63SDavid du Colombier uchar *secret; /* secret */ 538ccd4a63SDavid du Colombier }; 548ccd4a63SDavid du Colombier 558ccd4a63SDavid du Colombier struct Chalstate 568ccd4a63SDavid du Colombier { 578ccd4a63SDavid du Colombier char *user; 588ccd4a63SDavid du Colombier char chal[MAXCHLEN]; 598ccd4a63SDavid du Colombier int nchal; 608ccd4a63SDavid du Colombier void *resp; 618ccd4a63SDavid du Colombier int nresp; 628ccd4a63SDavid du Colombier 638ccd4a63SDavid du Colombier /* for implementation only */ 648ccd4a63SDavid du Colombier int afd; /* to factotum */ 658ccd4a63SDavid du Colombier AuthRpc *rpc; /* to factotum */ 66*ec59a3ddSDavid du Colombier char userbuf[AMAXNAMELEN]; /* temp space if needed */ 678ccd4a63SDavid du Colombier int userinchal; /* user was sent to obtain challenge */ 688ccd4a63SDavid du Colombier }; 698ccd4a63SDavid du Colombier 708ccd4a63SDavid du Colombier struct Chapreply /* for protocol "chap" */ 718ccd4a63SDavid du Colombier { 728ccd4a63SDavid du Colombier uchar id; 738ccd4a63SDavid du Colombier char resp[MD5LEN]; 748ccd4a63SDavid du Colombier }; 758ccd4a63SDavid du Colombier 768ccd4a63SDavid du Colombier struct MSchapreply /* for protocol "mschap" */ 778ccd4a63SDavid du Colombier { 788ccd4a63SDavid du Colombier char LMresp[24]; /* Lan Manager response */ 798ccd4a63SDavid du Colombier char NTresp[24]; /* NT response */ 808ccd4a63SDavid du Colombier }; 818ccd4a63SDavid du Colombier 828ccd4a63SDavid du Colombier struct UserPasswd 838ccd4a63SDavid du Colombier { 848ccd4a63SDavid du Colombier char *user; 858ccd4a63SDavid du Colombier char *passwd; 868ccd4a63SDavid du Colombier }; 878ccd4a63SDavid du Colombier 888ccd4a63SDavid du Colombier extern int newns(char*, char*); 898ccd4a63SDavid du Colombier extern int addns(char*, char*); 908ccd4a63SDavid du Colombier 918ccd4a63SDavid du Colombier extern int noworld(char*); 928ccd4a63SDavid du Colombier extern int amount(int, char*, int, char*); 938ccd4a63SDavid du Colombier 948ccd4a63SDavid du Colombier /* these two may get generalized away -rsc */ 958ccd4a63SDavid du Colombier extern int login(char*, char*, char*); 968ccd4a63SDavid du Colombier extern int httpauth(char*, char*); 978ccd4a63SDavid du Colombier 988ccd4a63SDavid du Colombier typedef struct Attr Attr; 998ccd4a63SDavid du Colombier typedef struct String String; 1008ccd4a63SDavid du Colombier enum { 1018ccd4a63SDavid du Colombier AttrNameval, /* name=val -- when matching, must have name=val */ 1028ccd4a63SDavid du Colombier AttrQuery, /* name? -- when matching, must be present */ 1038ccd4a63SDavid du Colombier AttrDefault, /* name:=val -- when matching, if present must match INTERNAL */ 1048ccd4a63SDavid du Colombier }; 1058ccd4a63SDavid du Colombier struct Attr 1068ccd4a63SDavid du Colombier { 1078ccd4a63SDavid du Colombier int type; 1088ccd4a63SDavid du Colombier Attr *next; 1098ccd4a63SDavid du Colombier char *name; 1108ccd4a63SDavid du Colombier char *val; 1118ccd4a63SDavid du Colombier }; 1128ccd4a63SDavid du Colombier 1138ccd4a63SDavid du Colombier typedef int AuthGetkey(char*); 1148ccd4a63SDavid du Colombier 1158ccd4a63SDavid du Colombier int _attrfmt(Fmt*); 1168ccd4a63SDavid du Colombier Attr *_copyattr(Attr*); 1178ccd4a63SDavid du Colombier Attr *_delattr(Attr*, char*); 1188ccd4a63SDavid du Colombier Attr *_findattr(Attr*, char*); 1198ccd4a63SDavid du Colombier void _freeattr(Attr*); 1208ccd4a63SDavid du Colombier Attr *_mkattr(int, char*, char*, Attr*); 1218ccd4a63SDavid du Colombier Attr *_parseattr(char*); 1228ccd4a63SDavid du Colombier char *_strfindattr(Attr*, char*); 1238ccd4a63SDavid du Colombier #ifdef VARARGCK 1248ccd4a63SDavid du Colombier #pragma varargck type "A" Attr* 1258ccd4a63SDavid du Colombier #endif 1268ccd4a63SDavid du Colombier 1278ccd4a63SDavid du Colombier extern AuthInfo* fauth_proxy(int, AuthRpc *rpc, AuthGetkey *getkey, char *params); 1288ccd4a63SDavid du Colombier extern AuthInfo* auth_proxy(int fd, AuthGetkey *getkey, char *fmt, ...); 1298ccd4a63SDavid du Colombier extern int auth_getkey(char*); 1308ccd4a63SDavid du Colombier extern int (*amount_getkey)(char*); 1318ccd4a63SDavid du Colombier extern void auth_freeAI(AuthInfo *ai); 1328ccd4a63SDavid du Colombier extern int auth_chuid(AuthInfo *ai, char *ns); 1338ccd4a63SDavid du Colombier extern Chalstate *auth_challenge(char*, ...); 1348ccd4a63SDavid du Colombier extern AuthInfo* auth_response(Chalstate*); 1358ccd4a63SDavid du Colombier extern int auth_respond(void*, uint, char*, uint, void*, uint, AuthGetkey *getkey, char*, ...); 1368ccd4a63SDavid du Colombier extern void auth_freechal(Chalstate*); 1378ccd4a63SDavid du Colombier extern AuthInfo* auth_userpasswd(char *user, char *passwd); 1388ccd4a63SDavid du Colombier extern UserPasswd* auth_getuserpasswd(AuthGetkey *getkey, char*, ...); 1398ccd4a63SDavid du Colombier extern AuthInfo* auth_getinfo(AuthRpc *rpc); 1408ccd4a63SDavid du Colombier extern AuthRpc* auth_allocrpc(int afd); 1418ccd4a63SDavid du Colombier extern Attr* auth_attr(AuthRpc *rpc); 1428ccd4a63SDavid du Colombier extern void auth_freerpc(AuthRpc *rpc); 1438ccd4a63SDavid du Colombier extern uint auth_rpc(AuthRpc *rpc, char *verb, void *a, int n); 1448ccd4a63SDavid du Colombier extern int auth_wep(char*, char*, ...); 1458ccd4a63SDavid du Colombier 1468ccd4a63SDavid du Colombier #ifdef VARARGCK 1478ccd4a63SDavid du Colombier #pragma varargck argpos auth_proxy 3 1488ccd4a63SDavid du Colombier #pragma varargck argpos auth_challenge 1 1498ccd4a63SDavid du Colombier #pragma varargck argpos auth_respond 3 1508ccd4a63SDavid du Colombier #pragma varargck argpos auth_getuserpasswd 2 1518ccd4a63SDavid du Colombier #endif 152