Blob


1 #include <auth.h>
2 #include <fcall.h>
4 enum {
5 NFidHash = 503,
6 };
8 typedef struct Con Con;
9 typedef struct DirBuf DirBuf;
10 typedef struct Excl Excl;
11 typedef struct Fid Fid;
12 typedef struct Fsys Fsys;
13 typedef struct Msg Msg;
15 #pragma incomplete DirBuf
16 #pragma incomplete Excl
17 #pragma incomplete Fsys
19 struct Msg {
20 uchar* data;
21 u32int msize; /* actual size of data */
22 Fcall t;
23 Fcall r;
24 Con* con;
26 Msg* anext; /* allocation free list */
28 Msg* mnext; /* all active messsages on this Con */
29 Msg* mprev;
31 int state; /* */
33 Msg* flush; /* flushes waiting for this Msg */
35 Msg* rwnext; /* read/write queue */
36 int nowq; /* do not place on write queue */
37 };
39 enum {
40 MsgN = 0,
41 MsgR = 1,
42 Msg9 = 2,
43 MsgW = 3,
44 MsgF = 4,
45 };
47 enum {
48 ConNoneAllow = 1<<0,
49 ConNoAuthCheck = 1<<1,
50 ConNoPermCheck = 1<<2,
51 ConWstatAllow = 1<<3,
52 ConIPCheck = 1<<4,
53 };
54 struct Con {
55 char* name;
56 uchar* data; /* max, not negotiated */
57 int isconsole; /* immutable */
58 int flags; /* immutable */
59 char remote[128]; /* immutable */
60 QLock lock;
61 int state;
62 int fd;
63 Msg* version;
64 u32int msize; /* negotiated with Tversion */
65 Rendez rendez;
67 Con* anext; /* alloc */
68 Con* cnext; /* in use */
69 Con* cprev;
71 RWLock alock;
72 int aok; /* authentication done */
74 QLock mlock;
75 Msg* mhead; /* all Msgs on this connection */
76 Msg* mtail;
77 Rendez mrendez;
79 QLock wlock;
80 Msg* whead; /* write queue */
81 Msg* wtail;
82 Rendez wrendez;
84 QLock fidlock; /* */
85 Fid* fidhash[NFidHash];
86 Fid* fhead;
87 Fid* ftail;
88 int nfid;
89 };
91 enum {
92 ConDead = 0,
93 ConNew = 1,
94 ConDown = 2,
95 ConInit = 3,
96 ConUp = 4,
97 ConMoribund = 5,
98 };
100 struct Fid {
101 RWLock lock;
102 Con* con;
103 u32int fidno;
104 int ref; /* inc/dec under Con.fidlock */
105 int flags;
107 int open;
108 Fsys* fsys;
109 File* file;
110 Qid qid;
111 char* uid;
112 char* uname;
113 DirBuf* db;
114 Excl* excl;
116 QLock alock; /* Tauth/Tattach */
117 AuthRpc* rpc;
118 char* cuname;
120 Fid* sort; /* sorted by uname in cmdWho */
121 Fid* hash; /* lookup by fidno */
122 Fid* next; /* clunk session with Tversion */
123 Fid* prev;
124 };
126 enum { /* Fid.flags and fidGet(..., flags) */
127 FidFCreate = 0x01,
128 FidFWlock = 0x02,
129 };
131 enum { /* Fid.open */
132 FidOCreate = 0x01,
133 FidORead = 0x02,
134 FidOWrite = 0x04,
135 FidORclose = 0x08,
136 };
138 /*
139 * 9p.c
140 */
141 extern int (*rFcall[Tmax])(Msg*);
142 extern int validFileName(char*);
144 /*
145 * 9auth.c
146 */
147 extern int authCheck(Fcall*, Fid*, Fsys*);
148 extern int authRead(Fid*, void*, int);
149 extern int authWrite(Fid*, void*, int);
151 /*
152 * 9dir.c
153 */
154 extern void dirBufFree(DirBuf*);
155 extern int dirDe2M(DirEntry*, uchar*, int);
156 extern int dirRead(Fid*, uchar*, int, vlong);
158 /*
159 * 9excl.c
160 */
161 extern int exclAlloc(Fid*);
162 extern void exclFree(Fid*);
163 extern void exclInit(void);
164 extern int exclUpdate(Fid*);
166 /*
167 * 9fid.c
168 */
169 extern void fidClunk(Fid*);
170 extern void fidClunkAll(Con*);
171 extern Fid* fidGet(Con*, u32int, int);
172 extern void fidInit(void);
173 extern void fidPut(Fid*);
175 /*
176 * 9fsys.c
177 */
178 extern void fsysFsRlock(Fsys*);
179 extern void fsysFsRUnlock(Fsys*);
180 extern Fs* fsysGetFs(Fsys*);
181 extern Fsys* fsysGet(char*);
182 extern char* fsysGetName(Fsys*);
183 extern File* fsysGetRoot(Fsys*, char*);
184 extern Fsys* fsysIncRef(Fsys*);
185 extern int fsysInit(void);
186 extern int fsysNoAuthCheck(Fsys*);
187 extern int fsysNoPermCheck(Fsys*);
188 extern void fsysPut(Fsys*);
189 extern int fsysWstatAllow(Fsys*);
191 /*
192 * 9lstn.c
193 */
194 extern int lstnInit(void);
196 /*
197 * 9proc.c
198 */
199 extern Con* conAlloc(int, char*, int);
200 extern void conInit(void);
201 extern void msgFlush(Msg*);
202 extern void msgInit(void);
204 /*
205 * 9srv.c
206 */
207 extern int srvInit(void);
209 /*
210 * 9user.c
211 */
212 extern int groupLeader(char*, char*);
213 extern int groupMember(char*, char*);
214 extern int groupWriteMember(char*);
215 extern char* unameByUid(char*);
216 extern char* uidByUname(char*);
217 extern int usersInit(void);
218 extern int usersFileRead(char*);
219 extern int validUserName(char*);
221 extern char* uidadm;
222 extern char* unamenone;
223 extern char* uidnoworld;
225 /*
226 * Ccli.c
227 */
228 extern int cliAddCmd(char*, int (*)(int, char*[]));
229 extern int cliError(char*, ...);
230 extern int cliInit(void);
231 extern int cliExec(char*);
232 #pragma varargck argpos cliError 1
234 /*
235 * Ccmd.c
236 */
237 extern int cmdInit(void);
239 /*
240 * Ccons.c
241 */
242 extern int consPrompt(char*);
243 extern int consInit(void);
244 extern int consOpen(int, int, int);
245 extern int consTTY(void);
246 extern int consWrite(char*, int);
248 /*
249 * Clog.c
250 */
251 extern int consPrint(char*, ...);
252 extern int consVPrint(char*, va_list);
253 #pragma varargck argpos consPrint 1
255 /*
256 * fossil.c
257 */
258 extern int Dflag;