267 lines · 4.8 KB · C
RawDownload
/*  * This file is part of the UCB release of Plan 9. It is subject to the license * terms in the LICENSE file found in the top-level directory of this * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No * part of the UCB release of Plan 9, including this file, may be copied, * modified, propagated, or distributed except according to the terms contained * in the LICENSE file. */ #include <auth.h>#include <fcall.h> enum {	NFidHash	= 503,}; typedef struct Con Con;typedef struct DirBuf DirBuf;typedef struct Excl Excl;typedef struct Fid Fid;typedef struct Fsys Fsys;typedef struct Msg Msg; #pragma incomplete DirBuf#pragma incomplete Excl#pragma incomplete Fsys struct Msg {	uchar*	data;	u32int	msize;			/* actual size of data */	Fcall	t;	Fcall	r;	Con*	con; 	Msg*	anext;			/* allocation free list */ 	Msg*	mnext;			/* all active messsages on this Con */	Msg* 	mprev; 	int	state;			/* */ 	Msg*	flush;			/* flushes waiting for this Msg */ 	Msg*	rwnext;			/* read/write queue */	int	nowq;			/* do not place on write queue */}; enum {	MsgN		= 0,	MsgR		= 1,	Msg9		= 2,	MsgW		= 3,	MsgF		= 4,}; enum {	ConNoneAllow	= 1<<0,	ConNoAuthCheck	= 1<<1,	ConNoPermCheck	= 1<<2,	ConWstatAllow	= 1<<3,	ConIPCheck	= 1<<4,};struct Con {	char*	name;	uchar*	data;			/* max, not negotiated */	int	isconsole;		/* immutable */	int	flags;			/* immutable */	char	remote[128];		/* immutable */	VtLock*	lock;	int	state;	int	fd;	Msg*	version;	u32int	msize;			/* negotiated with Tversion */	VtRendez* rendez; 	Con*	anext;			/* alloc */	Con*	cnext;			/* in use */	Con*	cprev; 	VtLock*	alock;	int	aok;			/* authentication done */ 	VtLock*	mlock;	Msg*	mhead;			/* all Msgs on this connection */	Msg*	mtail;	VtRendez* mrendez; 	VtLock*	wlock;	Msg*	whead;			/* write queue */	Msg*	wtail;	VtRendez* wrendez; 	VtLock*	fidlock;		/* */	Fid*	fidhash[NFidHash];	Fid*	fhead;	Fid*	ftail;	int	nfid;}; enum {	ConDead		= 0,	ConNew		= 1,	ConDown		= 2,	ConInit		= 3,	ConUp		= 4,	ConMoribund	= 5,}; struct Fid {	VtLock*	lock;	Con*	con;	u32int	fidno;	int	ref;			/* inc/dec under Con.fidlock */	int	flags; 	int	open;	Fsys*	fsys;	File*	file;	Qid	qid;	char*	uid;	char*	uname;	DirBuf*	db;	Excl*	excl; 	VtLock*	alock;			/* Tauth/Tattach */	AuthRpc* rpc;	char*	cuname; 	Fid*	sort;			/* sorted by uname in cmdWho */	Fid*	hash;			/* lookup by fidno */	Fid*	next;			/* clunk session with Tversion */	Fid*	prev;}; enum {					/* Fid.flags and fidGet(..., flags) */	FidFCreate	= 0x01,	FidFWlock	= 0x02,}; enum {					/* Fid.open */	FidOCreate	= 0x01,	FidORead	= 0x02,	FidOWrite	= 0x04,	FidORclose	= 0x08,}; /* * 9p.c */extern int (*rFcall[Tmax])(Msg*);extern int validFileName(char*); /* * 9auth.c */extern int authCheck(Fcall*, Fid*, Fsys*);extern int authRead(Fid*, void*, int);extern int authWrite(Fid*, void*, int); /* * 9dir.c */extern void dirBufFree(DirBuf*);extern int dirDe2M(DirEntry*, uchar*, int);extern int dirRead(Fid*, uchar*, int, vlong); /* * 9excl.c */extern int exclAlloc(Fid*);extern void exclFree(Fid*);extern void exclInit(void);extern int exclUpdate(Fid*); /* * 9fid.c */extern void fidClunk(Fid*);extern void fidClunkAll(Con*);extern Fid* fidGet(Con*, u32int, int);extern void fidInit(void);extern void fidPut(Fid*); /* * 9fsys.c */extern void fsysFsRlock(Fsys*);extern void fsysFsRUnlock(Fsys*);extern Fs* fsysGetFs(Fsys*);extern Fsys* fsysGet(char*);extern char* fsysGetName(Fsys*);extern File* fsysGetRoot(Fsys*, char*);extern Fsys* fsysIncRef(Fsys*);extern int fsysInit(void);extern int fsysNoAuthCheck(Fsys*);extern int fsysNoPermCheck(Fsys*);extern void fsysPut(Fsys*);extern int fsysWstatAllow(Fsys*); /* * 9lstn.c */extern int lstnInit(void); /* * 9proc.c */extern Con* conAlloc(int, char*, int);extern void conInit(void);extern void msgFlush(Msg*);extern void msgInit(void); /* * 9srv.c */extern int srvInit(void); /* * 9user.c */extern int groupLeader(char*, char*);extern int groupMember(char*, char*);extern int groupWriteMember(char*);extern char* unameByUid(char*);extern char* uidByUname(char*);extern int usersInit(void);extern int usersFileRead(char*);extern int validUserName(char*); extern char* uidadm;extern char* unamenone;extern char* uidnoworld; /* * Ccli.c */extern int cliAddCmd(char*, int (*)(int, char*[]));extern int cliError(char*, ...);extern int cliInit(void);extern int cliExec(char*);#pragma	varargck	argpos	cliError	1 /* * Ccmd.c */extern int cmdInit(void); /* * Ccons.c */extern int consPrompt(char*);extern int consInit(void);extern int consOpen(int, int, int);extern int consTTY(void);extern int consWrite(char*, int); /* * Clog.c */extern int consPrint(char*, ...);extern int consVPrint(char*, va_list);#pragma	varargck	argpos	consPrint	1 /* * fossil.c */extern int Dflag;