Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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;