Blame


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