9.h 4.4 KB

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