xref: /plan9/sys/src/cmd/fossil/9.h (revision 0c6300e705c776baceaa75d1b64fc63b9564225a)
15e96a66cSDavid du Colombier #include <auth.h>
25e96a66cSDavid du Colombier #include <fcall.h>
35e96a66cSDavid du Colombier 
45e96a66cSDavid du Colombier enum {
55e96a66cSDavid du Colombier 	NFidHash	= 503,
65e96a66cSDavid du Colombier };
75e96a66cSDavid du Colombier 
85e96a66cSDavid du Colombier typedef struct Con Con;
95e96a66cSDavid du Colombier typedef struct DirBuf DirBuf;
105e96a66cSDavid du Colombier typedef struct Excl Excl;
115e96a66cSDavid du Colombier typedef struct Fid Fid;
125e96a66cSDavid du Colombier typedef struct Fsys Fsys;
135e96a66cSDavid du Colombier typedef struct Msg Msg;
145e96a66cSDavid du Colombier 
1512fd1c83SDavid du Colombier #pragma incomplete DirBuf
1612fd1c83SDavid du Colombier #pragma incomplete Excl
1712fd1c83SDavid du Colombier #pragma incomplete Fsys
1812fd1c83SDavid du Colombier 
195e96a66cSDavid du Colombier struct Msg {
205e96a66cSDavid du Colombier 	uchar*	data;
215e96a66cSDavid du Colombier 	u32int	msize;			/* actual size of data */
225e96a66cSDavid du Colombier 	Fcall	t;
235e96a66cSDavid du Colombier 	Fcall	r;
245e96a66cSDavid du Colombier 	Con*	con;
255e96a66cSDavid du Colombier 
267f1bc48aSDavid du Colombier 	Msg*	anext;			/* allocation free list */
2734e04225SDavid du Colombier 
287f1bc48aSDavid du Colombier 	Msg*	mnext;			/* all active messsages on this Con */
2934e04225SDavid du Colombier 	Msg* 	mprev;
3034e04225SDavid du Colombier 
317f1bc48aSDavid du Colombier 	int	state;			/* */
3234e04225SDavid du Colombier 
337f1bc48aSDavid du Colombier 	Msg*	flush;			/* flushes waiting for this Msg */
3434e04225SDavid du Colombier 
357f1bc48aSDavid du Colombier 	Msg*	rwnext;			/* read/write queue */
367f1bc48aSDavid du Colombier 	int	nowq;			/* do not place on write queue */
3734e04225SDavid du Colombier };
3834e04225SDavid du Colombier 
3934e04225SDavid du Colombier enum {
4034e04225SDavid du Colombier 	MsgN		= 0,
4134e04225SDavid du Colombier 	MsgR		= 1,
4234e04225SDavid du Colombier 	Msg9		= 2,
4334e04225SDavid du Colombier 	MsgW		= 3,
4434e04225SDavid du Colombier 	MsgF		= 4,
455e96a66cSDavid du Colombier };
465e96a66cSDavid du Colombier 
472cca75a1SDavid du Colombier enum {
482cca75a1SDavid du Colombier 	ConNoneAllow	= 1<<0,
492cca75a1SDavid du Colombier 	ConNoAuthCheck	= 1<<1,
502cca75a1SDavid du Colombier 	ConNoPermCheck	= 1<<2,
512cca75a1SDavid du Colombier 	ConWstatAllow	= 1<<3,
522cca75a1SDavid du Colombier 	ConIPCheck	= 1<<4,
532cca75a1SDavid du Colombier };
545e96a66cSDavid du Colombier struct Con {
555e96a66cSDavid du Colombier 	char*	name;
565e96a66cSDavid du Colombier 	uchar*	data;			/* max, not negotiated */
5734e04225SDavid du Colombier 	int	isconsole;		/* immutable */
582cca75a1SDavid du Colombier 	int	flags;			/* immutable */
592cca75a1SDavid du Colombier 	char	remote[128];		/* immutable */
6034e04225SDavid du Colombier 	VtLock*	lock;
6134e04225SDavid du Colombier 	int	state;
6234e04225SDavid du Colombier 	int	fd;
6334e04225SDavid du Colombier 	Msg*	version;
6434e04225SDavid du Colombier 	u32int	msize;			/* negotiated with Tversion */
6534e04225SDavid du Colombier 	VtRendez* rendez;
6634e04225SDavid du Colombier 
6734e04225SDavid du Colombier 	Con*	anext;			/* alloc */
6834e04225SDavid du Colombier 	Con*	cnext;			/* in use */
6934e04225SDavid du Colombier 	Con*	cprev;
7034e04225SDavid du Colombier 
7134e04225SDavid du Colombier 	VtLock*	alock;
7234e04225SDavid du Colombier 	int	aok;			/* authentication done */
7334e04225SDavid du Colombier 
7434e04225SDavid du Colombier 	VtLock*	mlock;
7534e04225SDavid du Colombier 	Msg*	mhead;			/* all Msgs on this connection */
765e96a66cSDavid du Colombier 	Msg*	mtail;
7734e04225SDavid du Colombier 	VtRendez* mrendez;
7834e04225SDavid du Colombier 
7934e04225SDavid du Colombier 	VtLock*	wlock;
8034e04225SDavid du Colombier 	Msg*	whead;			/* write queue */
8134e04225SDavid du Colombier 	Msg*	wtail;
8234e04225SDavid du Colombier 	VtRendez* wrendez;
835e96a66cSDavid du Colombier 
845e96a66cSDavid du Colombier 	VtLock*	fidlock;		/* */
855e96a66cSDavid du Colombier 	Fid*	fidhash[NFidHash];
865e96a66cSDavid du Colombier 	Fid*	fhead;
875e96a66cSDavid du Colombier 	Fid*	ftail;
885e96a66cSDavid du Colombier 	int	nfid;
895e96a66cSDavid du Colombier };
905e96a66cSDavid du Colombier 
915e96a66cSDavid du Colombier enum {
9234e04225SDavid du Colombier 	ConDead		= 0,
9334e04225SDavid du Colombier 	ConNew		= 1,
9434e04225SDavid du Colombier 	ConDown		= 2,
9534e04225SDavid du Colombier 	ConInit		= 3,
9634e04225SDavid du Colombier 	ConUp		= 4,
9734e04225SDavid du Colombier 	ConMoribund	= 5,
985e96a66cSDavid du Colombier };
995e96a66cSDavid du Colombier 
1005e96a66cSDavid du Colombier struct Fid {
1015e96a66cSDavid du Colombier 	VtLock*	lock;
1025e96a66cSDavid du Colombier 	Con*	con;
1035e96a66cSDavid du Colombier 	u32int	fidno;
1045e96a66cSDavid du Colombier 	int	ref;			/* inc/dec under Con.fidlock */
1055e96a66cSDavid du Colombier 	int	flags;
1065e96a66cSDavid du Colombier 
1075e96a66cSDavid du Colombier 	int	open;
10834e04225SDavid du Colombier 	Fsys*	fsys;
1095e96a66cSDavid du Colombier 	File*	file;
1105e96a66cSDavid du Colombier 	Qid	qid;
1115e96a66cSDavid du Colombier 	char*	uid;
1125e96a66cSDavid du Colombier 	char*	uname;
1135e96a66cSDavid du Colombier 	DirBuf*	db;
1145e96a66cSDavid du Colombier 	Excl*	excl;
1155e96a66cSDavid du Colombier 
1165e96a66cSDavid du Colombier 	VtLock*	alock;			/* Tauth/Tattach */
1175e96a66cSDavid du Colombier 	AuthRpc* rpc;
1185e96a66cSDavid du Colombier 	char*	cuname;
1195e96a66cSDavid du Colombier 
12081cf8742SDavid du Colombier 	Fid*	sort;			/* sorted by uname in cmdWho */
1215e96a66cSDavid du Colombier 	Fid*	hash;			/* lookup by fidno */
1225e96a66cSDavid du Colombier 	Fid*	next;			/* clunk session with Tversion */
1235e96a66cSDavid du Colombier 	Fid*	prev;
1245e96a66cSDavid du Colombier };
1255e96a66cSDavid du Colombier 
1265e96a66cSDavid du Colombier enum {					/* Fid.flags and fidGet(..., flags) */
1275e96a66cSDavid du Colombier 	FidFCreate	= 0x01,
1285e96a66cSDavid du Colombier 	FidFWlock	= 0x02,
1295e96a66cSDavid du Colombier };
1305e96a66cSDavid du Colombier 
1315e96a66cSDavid du Colombier enum {					/* Fid.open */
1325e96a66cSDavid du Colombier 	FidOCreate	= 0x01,
1335e96a66cSDavid du Colombier 	FidORead	= 0x02,
1345e96a66cSDavid du Colombier 	FidOWrite	= 0x04,
1355e96a66cSDavid du Colombier 	FidORclose	= 0x08,
1365e96a66cSDavid du Colombier };
1375e96a66cSDavid du Colombier 
1385e96a66cSDavid du Colombier /*
1395e96a66cSDavid du Colombier  * 9p.c
1405e96a66cSDavid du Colombier  */
1415e96a66cSDavid du Colombier extern int (*rFcall[Tmax])(Msg*);
1425e96a66cSDavid du Colombier extern int validFileName(char*);
1435e96a66cSDavid du Colombier 
1445e96a66cSDavid du Colombier /*
1455e96a66cSDavid du Colombier  * 9auth.c
1465e96a66cSDavid du Colombier  */
1475e96a66cSDavid du Colombier extern int authCheck(Fcall*, Fid*, Fsys*);
1485e96a66cSDavid du Colombier extern int authRead(Fid*, void*, int);
1495e96a66cSDavid du Colombier extern int authWrite(Fid*, void*, int);
1505e96a66cSDavid du Colombier 
1515e96a66cSDavid du Colombier /*
1525e96a66cSDavid du Colombier  * 9dir.c
1535e96a66cSDavid du Colombier  */
1545e96a66cSDavid du Colombier extern void dirBufFree(DirBuf*);
1555e96a66cSDavid du Colombier extern int dirDe2M(DirEntry*, uchar*, int);
1565e96a66cSDavid du Colombier extern int dirRead(Fid*, uchar*, int, vlong);
1575e96a66cSDavid du Colombier 
1585e96a66cSDavid du Colombier /*
1595e96a66cSDavid du Colombier  * 9excl.c
1605e96a66cSDavid du Colombier  */
1615e96a66cSDavid du Colombier extern int exclAlloc(Fid*);
1625e96a66cSDavid du Colombier extern void exclFree(Fid*);
1635e96a66cSDavid du Colombier extern void exclInit(void);
1645e96a66cSDavid du Colombier extern int exclUpdate(Fid*);
1655e96a66cSDavid du Colombier 
1665e96a66cSDavid du Colombier /*
1675e96a66cSDavid du Colombier  * 9fid.c
1685e96a66cSDavid du Colombier  */
1695e96a66cSDavid du Colombier extern void fidClunk(Fid*);
17034e04225SDavid du Colombier extern void fidClunkAll(Con*);
1715e96a66cSDavid du Colombier extern Fid* fidGet(Con*, u32int, int);
1725e96a66cSDavid du Colombier extern void fidInit(void);
1735e96a66cSDavid du Colombier extern void fidPut(Fid*);
1745e96a66cSDavid du Colombier 
1755e96a66cSDavid du Colombier /*
1765e96a66cSDavid du Colombier  * 9fsys.c
1775e96a66cSDavid du Colombier  */
1785e96a66cSDavid du Colombier extern void fsysFsRlock(Fsys*);
1795e96a66cSDavid du Colombier extern void fsysFsRUnlock(Fsys*);
18034e04225SDavid du Colombier extern Fs* fsysGetFs(Fsys*);
18134e04225SDavid du Colombier extern Fsys* fsysGet(char*);
18234e04225SDavid du Colombier extern char* fsysGetName(Fsys*);
1835e96a66cSDavid du Colombier extern File* fsysGetRoot(Fsys*, char*);
1845e96a66cSDavid du Colombier extern Fsys* fsysIncRef(Fsys*);
1855e96a66cSDavid du Colombier extern int fsysInit(void);
1865e96a66cSDavid du Colombier extern int fsysNoAuthCheck(Fsys*);
1875e96a66cSDavid du Colombier extern int fsysNoPermCheck(Fsys*);
1885e96a66cSDavid du Colombier extern void fsysPut(Fsys*);
1895e96a66cSDavid du Colombier extern int fsysWstatAllow(Fsys*);
1905e96a66cSDavid du Colombier 
1915e96a66cSDavid du Colombier /*
1925e96a66cSDavid du Colombier  * 9lstn.c
1935e96a66cSDavid du Colombier  */
1945e96a66cSDavid du Colombier extern int lstnInit(void);
1955e96a66cSDavid du Colombier 
1965e96a66cSDavid du Colombier /*
1975e96a66cSDavid du Colombier  * 9proc.c
1985e96a66cSDavid du Colombier  */
1992cca75a1SDavid du Colombier extern Con* conAlloc(int, char*, int);
20034e04225SDavid du Colombier extern void conInit(void);
20134e04225SDavid du Colombier extern void msgFlush(Msg*);
20234e04225SDavid du Colombier extern void msgInit(void);
2035e96a66cSDavid du Colombier 
2045e96a66cSDavid du Colombier /*
2055e96a66cSDavid du Colombier  * 9srv.c
2065e96a66cSDavid du Colombier  */
2075e96a66cSDavid du Colombier extern int srvInit(void);
2085e96a66cSDavid du Colombier 
2095e96a66cSDavid du Colombier /*
2105e96a66cSDavid du Colombier  * 9user.c
2115e96a66cSDavid du Colombier  */
2125e96a66cSDavid du Colombier extern int groupLeader(char*, char*);
2135e96a66cSDavid du Colombier extern int groupMember(char*, char*);
2145e96a66cSDavid du Colombier extern int groupWriteMember(char*);
2155e96a66cSDavid du Colombier extern char* unameByUid(char*);
2165e96a66cSDavid du Colombier extern char* uidByUname(char*);
2175e96a66cSDavid du Colombier extern int usersInit(void);
21881cf8742SDavid du Colombier extern int usersFileRead(char*);
2195e96a66cSDavid du Colombier extern int validUserName(char*);
2205e96a66cSDavid du Colombier 
2215e96a66cSDavid du Colombier extern char* uidadm;
2225e96a66cSDavid du Colombier extern char* unamenone;
2235e96a66cSDavid du Colombier extern char* uidnoworld;
2245e96a66cSDavid du Colombier 
2255e96a66cSDavid du Colombier /*
2265e96a66cSDavid du Colombier  * Ccli.c
2275e96a66cSDavid du Colombier  */
2285e96a66cSDavid du Colombier extern int cliAddCmd(char*, int (*)(int, char*[]));
2295e96a66cSDavid du Colombier extern int cliError(char*, ...);
2305e96a66cSDavid du Colombier extern int cliInit(void);
2315e96a66cSDavid du Colombier extern int cliExec(char*);
232*0c6300e7SDavid du Colombier #pragma	varargck	argpos	cliError	1
2335e96a66cSDavid du Colombier 
2345e96a66cSDavid du Colombier /*
2355e96a66cSDavid du Colombier  * Ccmd.c
2365e96a66cSDavid du Colombier  */
2375e96a66cSDavid du Colombier extern int cmdInit(void);
2385e96a66cSDavid du Colombier 
2395e96a66cSDavid du Colombier /*
2405e96a66cSDavid du Colombier  * Ccons.c
2415e96a66cSDavid du Colombier  */
2425e96a66cSDavid du Colombier extern int consPrompt(char*);
2435e96a66cSDavid du Colombier extern int consInit(void);
2445e96a66cSDavid du Colombier extern int consOpen(int, int, int);
2455e96a66cSDavid du Colombier extern int consTTY(void);
2465e96a66cSDavid du Colombier extern int consWrite(char*, int);
2475e96a66cSDavid du Colombier 
2485e96a66cSDavid du Colombier /*
2495e96a66cSDavid du Colombier  * Clog.c
2505e96a66cSDavid du Colombier  */
2515e96a66cSDavid du Colombier extern int consPrint(char*, ...);
2525e96a66cSDavid du Colombier extern int consVPrint(char*, va_list);
253*0c6300e7SDavid du Colombier #pragma	varargck	argpos	consPrint	1
2545e96a66cSDavid du Colombier 
2555e96a66cSDavid du Colombier /*
2565e96a66cSDavid du Colombier  * fossil.c
2575e96a66cSDavid du Colombier  */
2585e96a66cSDavid du Colombier extern int Dflag;
259