11 Qroot = 1, /* fixed QID's */
20 Qaddr, /* Qid's for "ip" & "account" subdirs (Qaddr-99) */
22 Qtrustedfile = 100, /* Qid's for trusted files (100-999)*/
23 Qaddrfile = 1000, /* Qid's for address files (> 1000) */
25 /* type codes in node.d.type */
26 Directory = 0, /* normal directory */
27 Addrdir, /* contains "ip" and "account" directories */
28 IPaddr, /* contains IP address "files" */
29 Acctaddr, /* contains Account address "files" */
30 Trusted, /* contains trusted IP files */
31 Trustedperm, /* permanently trusted IP pseudo-file */
32 Trustedtemp, /* temporarily trusted IP pseudo-file */
33 Ctlfile, /* ctl file under root */
34 Dummynode, /* place holder for Address pseudo-files */
37 typedef struct Fid Fid;
38 typedef struct Node Node;
39 typedef struct Address Address;
40 typedef struct Cidraddr Cidraddr;
41 typedef struct Keyword Keyword;
48 Node *node; /* current position in path */
50 int open; /* directories only */
58 uchar ipaddr[IPaddrlen]; /* CIDR base addr */
59 uchar mask[IPaddrlen]; /* CIDR mask */
62 /* an address is either an account name (domain!user) or Ip address */
65 char *name; /* from the control file */
66 Cidraddr ip; /* CIDR Address */
69 /* Fids point to either a directory or pseudo-file */
72 Dir d; /* d.name, d.uid, d.gid, d.muid are atoms */
74 int allocated; /* number of Address structs allocated */
75 ulong baseqid; /* base of Qid's in this set */
76 Node *parent; /* points to self in root node*/
77 Node *sibs; /* 0 in Ipaddr and Acctaddr dirs */
79 Node *children; /* type == Directory || Addrdir || Trusted */
80 Address *addrs; /* type == Ipaddr || Acctaddr */
81 Cidraddr ip; /* type == Trustedfile */
90 Node *root; /* root of directory tree */
91 Node dummy; /* dummy node for fid's pointing to an Address */
92 int srvfd; /* fd for 9fs */
93 uchar rbuf[IOHDRSZ+MAXRPC+1];
102 int cidrparse(Cidraddr*, char*);
103 void cleantrusted(void);
104 Node* dirwalk(char*, Node*);
105 int dread(Fid*, int);
106 void fatal(char*, ...);
108 int findkey(char*, Keyword*);
110 int hread(Fid*, int);
112 Node* newnode(Node*, char*, ushort, int, ulong);
114 void printnode(Node*);
115 void printtree(Node*);
117 char* subslash(char*);
118 char* walk(char*, Fid*);