xref: /plan9/sys/src/cmd/fossil/9.h (revision 0c6300e705c776baceaa75d1b64fc63b9564225a)
1 #include <auth.h>
2 #include <fcall.h>
3 
4 enum {
5 	NFidHash	= 503,
6 };
7 
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;
14 
15 #pragma incomplete DirBuf
16 #pragma incomplete Excl
17 #pragma incomplete Fsys
18 
19 struct Msg {
20 	uchar*	data;
21 	u32int	msize;			/* actual size of data */
22 	Fcall	t;
23 	Fcall	r;
24 	Con*	con;
25 
26 	Msg*	anext;			/* allocation free list */
27 
28 	Msg*	mnext;			/* all active messsages on this Con */
29 	Msg* 	mprev;
30 
31 	int	state;			/* */
32 
33 	Msg*	flush;			/* flushes waiting for this Msg */
34 
35 	Msg*	rwnext;			/* read/write queue */
36 	int	nowq;			/* do not place on write queue */
37 };
38 
39 enum {
40 	MsgN		= 0,
41 	MsgR		= 1,
42 	Msg9		= 2,
43 	MsgW		= 3,
44 	MsgF		= 4,
45 };
46 
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 	VtLock*	lock;
61 	int	state;
62 	int	fd;
63 	Msg*	version;
64 	u32int	msize;			/* negotiated with Tversion */
65 	VtRendez* rendez;
66 
67 	Con*	anext;			/* alloc */
68 	Con*	cnext;			/* in use */
69 	Con*	cprev;
70 
71 	VtLock*	alock;
72 	int	aok;			/* authentication done */
73 
74 	VtLock*	mlock;
75 	Msg*	mhead;			/* all Msgs on this connection */
76 	Msg*	mtail;
77 	VtRendez* mrendez;
78 
79 	VtLock*	wlock;
80 	Msg*	whead;			/* write queue */
81 	Msg*	wtail;
82 	VtRendez* wrendez;
83 
84 	VtLock*	fidlock;		/* */
85 	Fid*	fidhash[NFidHash];
86 	Fid*	fhead;
87 	Fid*	ftail;
88 	int	nfid;
89 };
90 
91 enum {
92 	ConDead		= 0,
93 	ConNew		= 1,
94 	ConDown		= 2,
95 	ConInit		= 3,
96 	ConUp		= 4,
97 	ConMoribund	= 5,
98 };
99 
100 struct Fid {
101 	VtLock*	lock;
102 	Con*	con;
103 	u32int	fidno;
104 	int	ref;			/* inc/dec under Con.fidlock */
105 	int	flags;
106 
107 	int	open;
108 	Fsys*	fsys;
109 	File*	file;
110 	Qid	qid;
111 	char*	uid;
112 	char*	uname;
113 	DirBuf*	db;
114 	Excl*	excl;
115 
116 	VtLock*	alock;			/* Tauth/Tattach */
117 	AuthRpc* rpc;
118 	char*	cuname;
119 
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 };
125 
126 enum {					/* Fid.flags and fidGet(..., flags) */
127 	FidFCreate	= 0x01,
128 	FidFWlock	= 0x02,
129 };
130 
131 enum {					/* Fid.open */
132 	FidOCreate	= 0x01,
133 	FidORead	= 0x02,
134 	FidOWrite	= 0x04,
135 	FidORclose	= 0x08,
136 };
137 
138 /*
139  * 9p.c
140  */
141 extern int (*rFcall[Tmax])(Msg*);
142 extern int validFileName(char*);
143 
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);
150 
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);
157 
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*);
165 
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*);
174 
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*);
190 
191 /*
192  * 9lstn.c
193  */
194 extern int lstnInit(void);
195 
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);
203 
204 /*
205  * 9srv.c
206  */
207 extern int srvInit(void);
208 
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*);
220 
221 extern char* uidadm;
222 extern char* unamenone;
223 extern char* uidnoworld;
224 
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
233 
234 /*
235  * Ccmd.c
236  */
237 extern int cmdInit(void);
238 
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);
247 
248 /*
249  * Clog.c
250  */
251 extern int consPrint(char*, ...);
252 extern int consVPrint(char*, va_list);
253 #pragma	varargck	argpos	consPrint	1
254 
255 /*
256  * fossil.c
257  */
258 extern int Dflag;
259