Blob


1 #ifndef __AUTH_H__
2 #define __AUTH_H__ 1
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7 /*
8 #pragma src "/sys/src/libauth"
9 #pragma lib "libauth.a"
10 */
11 AUTOLIB(auth)
13 /*
14 * Interface for typical callers.
15 */
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;
24 struct CFid;
26 enum
27 {
28 MAXCHLEN= 256, /* max challenge length */
29 MAXNAMELEN= 256, /* maximum name length */
30 MD5LEN= 16,
32 ARok = 0, /* rpc return values */
33 ARdone,
34 ARerror,
35 ARneedkey,
36 ARbadkey,
37 ARwritenext,
38 ARtoosmall,
39 ARtoobig,
40 ARrpcfailure,
41 ARphase,
43 AuthRpcMax = 4096
44 };
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 };
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 };
65 struct Chalstate
66 {
67 char *user;
68 char chal[MAXCHLEN];
69 int nchal;
70 void *resp;
71 int nresp;
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 };
79 struct Chapreply /* for protocol "chap" */
80 {
81 uchar id;
82 char resp[MD5LEN];
83 };
85 struct MSchapreply /* for protocol "mschap" */
86 {
87 char LMresp[24]; /* Lan Manager response */
88 char NTresp[24]; /* NT response */
89 };
91 struct UserPasswd
92 {
93 char *user;
94 char *passwd;
95 };
97 extern int newns(char*, char*);
98 extern int addns(char*, char*);
100 extern int noworld(char*);
101 extern int amount(int, char*, int, char*);
103 /* these two may get generalized away -rsc */
104 extern int login(char*, char*, char*);
105 extern int httpauth(char*, char*);
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
115 int type;
116 Attr *next;
117 char *name;
118 char *val;
119 };
121 typedef int AuthGetkey(char*);
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 */
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*, ...);
156 extern struct CFsys* fsamount(int fd, char *aname);
157 extern struct CFsys* nsamount(char *name, char *aname);
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
168 #endif
169 #endif