9.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. #include <auth.h>
  2. #include <fcall.h>
  3. enum {
  4. NFidHash = 503,
  5. };
  6. typedef struct Con Con;
  7. typedef struct DirBuf DirBuf;
  8. typedef struct Excl Excl;
  9. typedef struct Fid Fid;
  10. typedef struct Fsys Fsys;
  11. typedef struct Msg Msg;
  12. struct Msg {
  13. uchar* data;
  14. u32int msize; /* actual size of data */
  15. Fcall t;
  16. Fcall r;
  17. Con* con;
  18. Msg* anext; /* alloc */
  19. Msg* mnext; /* Con */
  20. Msg* mprev;
  21. Msg* rwnext; /* proc read/write */
  22. int state;
  23. Msg* behind; /* proc flush */
  24. Msg* before;
  25. };
  26. enum {
  27. MsgN = 0,
  28. MsgR = 1,
  29. Msg9 = 2,
  30. MsgW = 3,
  31. MsgF = 4,
  32. };
  33. struct Con {
  34. char* name;
  35. uchar* data; /* max, not negotiated */
  36. int isconsole; /* immutable */
  37. int noauth; /* immutable */
  38. int noperm; /* immutable */
  39. int wstatallow; /* immutable */
  40. VtLock* lock;
  41. int state;
  42. int fd;
  43. Msg* version;
  44. u32int msize; /* negotiated with Tversion */
  45. VtRendez* rendez;
  46. Con* anext; /* alloc */
  47. Con* cnext; /* in use */
  48. Con* cprev;
  49. VtLock* alock;
  50. int aok; /* authentication done */
  51. VtLock* mlock;
  52. Msg* mhead; /* all Msgs on this connection */
  53. Msg* mtail;
  54. VtRendez* mrendez;
  55. VtLock* wlock;
  56. Msg* whead; /* write queue */
  57. Msg* wtail;
  58. VtRendez* wrendez;
  59. VtLock* fidlock; /* */
  60. Fid* fidhash[NFidHash];
  61. Fid* fhead;
  62. Fid* ftail;
  63. int nfid;
  64. };
  65. enum {
  66. ConDead = 0,
  67. ConNew = 1,
  68. ConDown = 2,
  69. ConInit = 3,
  70. ConUp = 4,
  71. ConMoribund = 5,
  72. };
  73. struct Fid {
  74. VtLock* lock;
  75. Con* con;
  76. u32int fidno;
  77. int ref; /* inc/dec under Con.fidlock */
  78. int flags;
  79. int open;
  80. Fsys* fsys;
  81. File* file;
  82. Qid qid;
  83. char* uid;
  84. char* uname;
  85. DirBuf* db;
  86. Excl* excl;
  87. VtLock* alock; /* Tauth/Tattach */
  88. AuthRpc* rpc;
  89. char* cuname;
  90. Fid* sort; /* sorted by uname in cmdWho */
  91. Fid* hash; /* lookup by fidno */
  92. Fid* next; /* clunk session with Tversion */
  93. Fid* prev;
  94. };
  95. enum { /* Fid.flags and fidGet(..., flags) */
  96. FidFCreate = 0x01,
  97. FidFWlock = 0x02,
  98. };
  99. enum { /* Fid.open */
  100. FidOCreate = 0x01,
  101. FidORead = 0x02,
  102. FidOWrite = 0x04,
  103. FidORclose = 0x08,
  104. };
  105. /*
  106. * 9p.c
  107. */
  108. extern int (*rFcall[Tmax])(Msg*);
  109. extern int validFileName(char*);
  110. /*
  111. * 9auth.c
  112. */
  113. extern int authCheck(Fcall*, Fid*, Fsys*);
  114. extern int authRead(Fid*, void*, int);
  115. extern int authWrite(Fid*, void*, int);
  116. /*
  117. * 9dir.c
  118. */
  119. extern void dirBufFree(DirBuf*);
  120. extern int dirDe2M(DirEntry*, uchar*, int);
  121. extern int dirRead(Fid*, uchar*, int, vlong);
  122. /*
  123. * 9excl.c
  124. */
  125. extern int exclAlloc(Fid*);
  126. extern void exclFree(Fid*);
  127. extern void exclInit(void);
  128. extern int exclUpdate(Fid*);
  129. /*
  130. * 9fid.c
  131. */
  132. extern void fidClunk(Fid*);
  133. extern void fidClunkAll(Con*);
  134. extern Fid* fidGet(Con*, u32int, int);
  135. extern void fidInit(void);
  136. extern void fidPut(Fid*);
  137. /*
  138. * 9fsys.c
  139. */
  140. extern void fsysFsRlock(Fsys*);
  141. extern void fsysFsRUnlock(Fsys*);
  142. extern Fs* fsysGetFs(Fsys*);
  143. extern Fsys* fsysGet(char*);
  144. extern char* fsysGetName(Fsys*);
  145. extern File* fsysGetRoot(Fsys*, char*);
  146. extern Fsys* fsysIncRef(Fsys*);
  147. extern int fsysInit(void);
  148. extern int fsysNoAuthCheck(Fsys*);
  149. extern int fsysNoPermCheck(Fsys*);
  150. extern void fsysPut(Fsys*);
  151. extern int fsysWstatAllow(Fsys*);
  152. /*
  153. * 9lstn.c
  154. */
  155. extern int lstnInit(void);
  156. /*
  157. * 9proc.c
  158. */
  159. extern Con* conAlloc(int, char*);
  160. extern void conInit(void);
  161. extern void msgFlush(Msg*);
  162. extern void msgInit(void);
  163. /*
  164. * 9srv.c
  165. */
  166. extern int srvInit(void);
  167. /*
  168. * 9user.c
  169. */
  170. extern int groupLeader(char*, char*);
  171. extern int groupMember(char*, char*);
  172. extern int groupWriteMember(char*);
  173. extern char* unameByUid(char*);
  174. extern char* uidByUname(char*);
  175. extern int usersInit(void);
  176. extern int usersFileRead(char*);
  177. extern int validUserName(char*);
  178. extern char* uidadm;
  179. extern char* unamenone;
  180. extern char* uidnoworld;
  181. /*
  182. * Ccli.c
  183. */
  184. extern int cliAddCmd(char*, int (*)(int, char*[]));
  185. extern int cliError(char*, ...);
  186. extern int cliInit(void);
  187. extern int cliExec(char*);
  188. /*
  189. * Ccmd.c
  190. */
  191. extern int cmdInit(void);
  192. /*
  193. * Ccons.c
  194. */
  195. extern int consPrompt(char*);
  196. extern int consInit(void);
  197. extern int consOpen(int, int, int);
  198. extern int consTTY(void);
  199. extern int consWrite(char*, int);
  200. /*
  201. * Clog.c
  202. */
  203. extern int consPrint(char*, ...);
  204. extern int consVPrint(char*, va_list);
  205. /*
  206. * fossil.c
  207. */
  208. extern int Dflag;