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