9.h 4.2 KB

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