123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- enum
- {
- FHSIZE = 32
- };
- typedef struct Accept Accept;
- typedef struct Auth Auth;
- typedef struct Authunix Authunix;
- typedef struct Chalstuff Chalstuff;
- typedef uchar Fhandle[FHSIZE];
- typedef struct Fid Fid;
- typedef struct Procmap Procmap;
- typedef struct Progmap Progmap;
- typedef struct Reject Reject;
- typedef struct Rpccall Rpccall;
- typedef struct Rpccache Rpccache;
- typedef struct Sattr Sattr;
- typedef struct Session Session;
- typedef struct String String;
- typedef struct Strnode Strnode;
- typedef struct Unixid Unixid;
- typedef struct Unixidmap Unixidmap;
- typedef struct Unixmap Unixmap;
- typedef struct Unixscmap Unixscmap;
- typedef struct Xfid Xfid;
- typedef struct Xfile Xfile;
- struct String
- {
- ulong n;
- char * s;
- };
- struct Progmap
- {
- int progno;
- int vers;
- void (*init)(int, char**);
- Procmap *pmap;
- };
- struct Procmap
- {
- int procno;
- int (*procp)(int, Rpccall*, Rpccall*);
- };
- struct Auth
- {
- ulong flavor;
- ulong count;
- void * data;
- };
- struct Authunix
- {
- ulong stamp;
- String mach;
- ulong uid;
- ulong gid;
- int gidlen;
- ulong gids[10];
- };
- struct Accept
- {
- Auth averf;
- ulong astat;
- union{
- void * results; /* SUCCESS */
- struct{ /* PROG_MISMATCH */
- ulong plow; /* acceptable version numbers */
- ulong phigh;
- };
- };
- };
- struct Reject
- {
- ulong rstat;
- union{
- struct{ /* RPC_MISMATCH */
- ulong rlow; /* acceptable rpc version numbers */
- ulong rhigh;
- };
- ulong authstat; /* AUTH_ERROR */
- };
- };
- struct Rpccall
- {
- /* corresponds to Udphdr */
- uchar prefix0[12];
- ulong host; /* ipv4 subset: prefixed to RPC message */
- uchar prefix1[12];
- ulong lhost; /* ipv4 subset: prefixed to RPC message */
- /* ignore ifcaddr */
- ulong port; /* prefixed to RPC message */
- ulong lport; /* prefixed to RPC message */
- ulong xid; /* transaction id */
- ulong mtype; /* CALL or REPLY */
- union{
- struct{ /* CALL */
- ulong rpcvers; /* must be equal to two (2) */
- ulong prog; /* program number */
- ulong vers; /* program version */
- ulong proc; /* procedure number */
- Auth cred; /* authentication credentials */
- Auth verf; /* authentication verifier */
- Unixidmap *up;
- char * user;
- void * args; /* procedure-specific */
- };
- struct{ /* REPLY */
- ulong stat; /* MSG_ACCEPTED or MSG_DENIED */
- union{
- Accept;
- Reject;
- };
- };
- };
- };
- struct Rpccache
- {
- Rpccache *prev;
- Rpccache *next;
- ulong host;
- ulong port;
- ulong xid;
- int n;
- uchar data[4];
- };
- struct Sattr
- {
- ulong mode;
- ulong uid;
- ulong gid;
- ulong size;
- ulong atime; /* sec's */
- ulong ausec; /* microsec's */
- ulong mtime;
- ulong musec;
- };
- struct Strnode
- {
- Strnode *next; /* in hash bucket */
- char str[4];
- };
- struct Unixid
- {
- Unixid *next;
- char * name;
- int id;
- };
- struct Unixmap
- {
- char * file;
- int style;
- long timestamp;
- Unixid *ids;
- };
- struct Unixidmap
- {
- Unixidmap *next;
- int flag;
- char * server;
- char * client;
- Reprog *sexp;
- Reprog *cexp;
- Unixmap u;
- Unixmap g;
- };
- struct Unixscmap
- {
- Unixscmap *next;
- char * server;
- ulong clientip;
- Unixidmap *map;
- };
- struct Xfile
- {
- Xfile * next; /* hash chain */
- Session *s;
- Qid qid; /* from stat */
- Xfile * parent;
- Xfile * child; /* if directory */
- Xfile * sib; /* siblings */
- char * name; /* path element */
- Xfid * users;
- };
- enum
- {
- Oread = 1,
- Owrite = 2,
- Open = 3,
- Trunc = 4
- };
- struct Xfid
- {
- Xfid * next; /* Xfile's user list */
- Xfile * xp;
- char * uid;
- Fid * urfid;
- Fid * opfid;
- ulong mode; /* open mode, if opfid is non-zero */
- ulong offset;
- };
- struct Fid
- {
- Fid ** owner; /* null for root fids */
- Fid * prev;
- Fid * next;
- long tstale; /* auto-clunk */
- };
- enum
- {
- Maxfdata = 8192,
- Maxstatdata = 2048,
- };
- struct Session
- {
- Session *next;
- char * service; /* for dial */
- int fd;
- #define CHALLEN 1
- char cchal[CHALLEN]; /* client challenge */
- char schal[CHALLEN]; /* server challenge */
- char authid[ANAMELEN]; /* server encryption uid */
- char authdom[DOMLEN]; /* server encryption domain */
- char * spec; /* for attach */
- Xfile * root; /* to answer mount rpc */
- ushort tag;
- Fcall f;
- uchar data[IOHDRSZ+Maxfdata];
- uchar statbuf[Maxstatdata];
- Fid * free; /* available */
- Fid list; /* active, most-recently-used order */
- Fid fids[1000];
- int noauth;
- };
- struct Chalstuff
- {
- Chalstuff *next;
- Xfid * xf;
- long tstale;
- Chalstate;
- };
- extern int rpcdebug;
- extern int p9debug;
- extern int chatty;
- extern void (*rpcalarm)(void);
- extern long starttime;
- extern long nfstime;
- extern char * config;
- extern int staletime;
- extern int messagesize;
- extern char * commonopts;
|