smbfns.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. /*
  2. * This file is part of the UCB release of Plan 9. It is subject to the license
  3. * terms in the LICENSE file found in the top-level directory of this
  4. * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
  5. * part of the UCB release of Plan 9, including this file, may be copied,
  6. * modified, propagated, or distributed except according to the terms contained
  7. * in the LICENSE file.
  8. */
  9. uint16_t smbnhgets(uint8_t *);
  10. uint32_t smbnhgetl(uint8_t *);
  11. int64_t smbnhgetv(uint8_t *);
  12. void smbhnputs(uint8_t *, uint16_t);
  13. void smbhnputl(uint8_t *, uint32_t);
  14. void smbhnputv(uint8_t *, int64_t);
  15. SmbProcessResult smbnegotiate (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  16. SmbProcessResult smbcomsessionsetupandx (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  17. SmbProcessResult smbcomtreeconnectandx (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  18. SmbProcessResult smbcomtransaction (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  19. SmbProcessResult smbcomcheckdirectory (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  20. SmbProcessResult smbcomtransaction2 (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  21. SmbProcessResult smbcomecho (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  22. SmbProcessResult smbcomopenandx (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  23. SmbProcessResult smbcomcreate (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  24. SmbProcessResult smbcomopen (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  25. SmbProcessResult smbcomclose (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  26. SmbProcessResult smbcomreadandx (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  27. SmbProcessResult smbcomwriteandx (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  28. SmbProcessResult smbcomqueryinformation (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  29. SmbProcessResult smbcomfindclose2 (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  30. SmbProcessResult smbcomtreedisconnect (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  31. SmbProcessResult smbcomqueryinformation2 (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  32. SmbProcessResult smbcomdelete (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  33. SmbProcessResult smbcomflush (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  34. SmbProcessResult smbcomwrite (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  35. SmbProcessResult smbcomsetinformation2 (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  36. SmbProcessResult smbcomcreatedirectory (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  37. SmbProcessResult smbcomdeletedirectory (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  38. SmbProcessResult smbcomrename (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  39. SmbProcessResult smbcomlockingandx (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  40. SmbProcessResult smbcomsetinformation (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  41. SmbProcessResult smbcomntcreateandx (SmbSession *, SmbHeader *, uint8_t *, SmbBuffer *);
  42. void *smbemalloc(uint32_t size);
  43. void *smbemallocz(uint32_t size, int clear);
  44. void smberealloc(void **pp, uint32_t size);
  45. char *smbestrdup(char *s);
  46. void smbfree(void **pp);
  47. int smbcheckwordcount(char *name, SmbHeader *h, uint16_t wordcount);
  48. int smbcheckwordandbytecount(char *name, SmbHeader *h, uint16_t wordcount, uint8_t **bdatap, uint8_t **edatap);
  49. int smbsendunicode(SmbPeerInfo *i);
  50. char *smbstringdup(SmbHeader *h, uint8_t *base, uint8_t **bdatap, uint8_t *edata);
  51. char *smbstrdup(uint8_t **bdatap, uint8_t *edata);
  52. char *smbstrinline(uint8_t **bdatap, uint8_t *edata);
  53. int smbstrlen(char *string);
  54. int smbstringlen(SmbPeerInfo *i, char *string);
  55. void smbstringprint(char **p, char *fmt, ...);
  56. int smbucs2len(char *string);
  57. int smbstringput(SmbPeerInfo *p, uint32_t flags, uint8_t *buf, uint16_t n,
  58. uint16_t maxlen, char *string);
  59. int smbstrput(uint32_t flags, uint8_t *buf, uint16_t n, uint16_t maxlen,
  60. char *string);
  61. int smbstrnput(uint8_t *buf, uint16_t n, uint16_t maxlen, char *string, uint16_t size, int upcase);
  62. int smbucs2put(uint32_t flags, uint8_t *buf, uint16_t n, uint16_t maxlen,
  63. char *string);
  64. void smbresponseinit(SmbSession *s, uint16_t maxlen);
  65. int smbresponsealignl2(SmbSession *s, int l2a);
  66. uint16_t smbresponseoffset(SmbSession *s);
  67. int smbresponseputheader(SmbSession *s, SmbHeader *h, uint8_t errclass, uint16_t error);
  68. int smbresponseputandxheader(SmbSession *s, SmbHeader *h, uint16_t andxcommand,
  69. uint32_t *andxoffsetfixup);
  70. int smbresponseputb(SmbSession *s, uint8_t b);
  71. int smbresponseputs(SmbSession *s, uint16_t b);
  72. int smbresponseputl(SmbSession *s, uint32_t l);
  73. int smbresponseoffsetputs(SmbSession *s, uint16_t offset, uint16_t b);
  74. int smbresponseputstring(SmbSession *s, int mustalign, char *string);
  75. int smbresponseputstr(SmbSession *s, char *string);
  76. SmbProcessResult smbresponsesend(SmbSession *s);
  77. int smbresponseputerror(SmbSession *s, SmbHeader *h, uint8_t errclass, uint16_t error);
  78. int smbresponseskip(SmbSession *s, uint16_t amount);
  79. uint16_t smbresponsespace(SmbSession *s);
  80. void smbresponsereset(SmbSession *s);
  81. int smbresponsecpy(SmbSession *s, uint8_t *data, uint16_t datalen);
  82. void smbtreedisconnect(SmbSession *s, SmbTree *t);
  83. void smbtreedisconnectbyid(SmbSession *s, uint16_t id);
  84. SmbTree *smbtreeconnect(SmbSession *s, SmbService *serv);
  85. int smbchaincommand(SmbSession *s, SmbHeader *h, uint32_t andxfixupoffset,
  86. uint8_t cmd, uint16_t offset, SmbBuffer *b);
  87. SmbService *smbservicefind(SmbSession *s, char *path, char *service, uint8_t *errclassp, uint16_t *errorp);
  88. void smbserviceput(SmbService *serv);
  89. void smbserviceget(SmbService *serv);
  90. int smbrap2(SmbSession *s);
  91. void smbglobalsguess(int client);
  92. SmbBuffer *smbbuffernew(uint32_t maxlen);
  93. void smbbufferfree(SmbBuffer **bp);
  94. SmbBuffer *smbbufferinit(void *base, void *bdata, uint32_t blen);
  95. uint32_t smbbufferwriteoffset(SmbBuffer *s);
  96. uint32_t smbbufferwritemaxoffset(SmbBuffer *s);
  97. uint32_t smbbufferreadoffset(SmbBuffer *s);
  98. void *smbbufferwritepointer(SmbBuffer *s);
  99. void *smbbufferreadpointer(SmbBuffer *s);
  100. int smbbufferputheader(SmbBuffer *s, SmbHeader *h, SmbPeerInfo *p);
  101. int smbbufferputandxheader(SmbBuffer *s, SmbHeader *h, SmbPeerInfo *p, uint8_t andxcommand,
  102. uint32_t *andxoffsetfixup);
  103. int smbbufferputb(SmbBuffer *s, uint8_t b);
  104. int smbbufferputs(SmbBuffer *s, uint16_t b);
  105. int smbbufferputl(SmbBuffer *s, uint32_t l);
  106. int smbbufferoffsetputs(SmbBuffer *s, uint32_t offset, uint16_t b);
  107. int smbbufferputstring(SmbBuffer *b, SmbPeerInfo *p, uint32_t flags,
  108. char *string);
  109. int smbbufferpututstring(SmbBuffer *b, SmbPeerInfo *p, int mustalign, char *string);
  110. int smbbufferputucs2(SmbBuffer *b, int mustalign, char *string);
  111. int smbbufferputstr(SmbBuffer *s, char *string);
  112. int smbbufferputstrn(SmbBuffer *s, char *string, int len, int upcase);
  113. int smbbufferputerror(SmbBuffer *s, SmbHeader *h, SmbPeerInfo *p, uint8_t errclass, uint16_t error);
  114. int smbbufferskip(SmbBuffer *s, uint32_t amount);
  115. uint32_t smbbufferspace(SmbBuffer *s);
  116. void smbbufferreset(SmbBuffer *s);
  117. int smbbufferputbytes(SmbBuffer *s, void *data, uint32_t datalen);
  118. int smbbuffergetbytes(SmbBuffer *b, void *buf, uint32_t len);
  119. void smbbuffersetreadlen(SmbBuffer *b, uint32_t len);
  120. int smbbuffertrimreadlen(SmbBuffer *b, uint32_t len);
  121. uint32_t smbbufferwritespace(SmbBuffer *b);
  122. int smbbuffergets(SmbBuffer *b, uint16_t *sp);
  123. int smbbuffergetstr(SmbBuffer *b, uint32_t flags, char **sp);
  124. int smbbuffergetstrinline(SmbBuffer *b, char **sp);
  125. int smbbuffergetstrn(SmbBuffer *b, uint16_t size, char **sp);
  126. int smbbuffergetstring(SmbBuffer *b, SmbHeader *h, uint32_t flags, char **sp);
  127. int smbbuffergetucs2(SmbBuffer *b, uint32_t flags, char **sp);
  128. void *smbbufferpointer(SmbBuffer *b, uint32_t offset);
  129. int smbbuffergetb(SmbBuffer *b, uint8_t *bp);
  130. int smbbuffergetl(SmbBuffer *b, uint32_t *lp);
  131. int smbbuffergetv(SmbBuffer *b, int64_t *vp);
  132. uint32_t smbbufferreadspace(SmbBuffer *b);
  133. void smbbufferwritelimit(SmbBuffer *b, uint32_t limit);
  134. int smbbufferreadskipto(SmbBuffer *b, uint32_t offset);
  135. int smbbufferpushreadlimit(SmbBuffer *b, uint32_t offset);
  136. int smbbufferpopreadlimit(SmbBuffer *b);
  137. int smbbufferalignl2(SmbBuffer *b, int al2);
  138. int smbbufferwritebackup(SmbBuffer *b, uint32_t offset);
  139. int smbbufferreadbackup(SmbBuffer *b, uint32_t offset);
  140. int smbbufferfixuprelatives(SmbBuffer *b, uint32_t fixupoffset);
  141. int smbbufferfixuprelativel(SmbBuffer *b, uint32_t fixupoffset);
  142. int smbbufferfixuprelativeinclusivel(SmbBuffer *b, uint32_t fixupoffset);
  143. int smbbufferfixupabsolutes(SmbBuffer *b, uint32_t fixupoffset);
  144. int smbbufferfixupabsolutel(SmbBuffer *b, uint32_t fixupoffset);
  145. int smbbufferfixupl(SmbBuffer *b, uint32_t fixupoffset, uint32_t val);
  146. int smbbufferputv(SmbBuffer *b, int64_t v);
  147. int smbbufferputack(SmbBuffer *b, SmbHeader *h, SmbPeerInfo *p);
  148. int smbbufferfill(SmbBuffer *b, uint8_t c, uint32_t len);
  149. int smbbufferoffsetgetb(SmbBuffer *b, uint32_t offset, uint8_t *bp);
  150. int smbbuffercopy(SmbBuffer *to, SmbBuffer *from, uint32_t amount);
  151. int smbbufferoffsetcopystr(SmbBuffer *b, uint32_t offset, char *buf,
  152. int buflen, int *lenp);
  153. SmbClient *smbconnect(char *to, char *share, char **errmsgp);
  154. void smbclientfree(SmbClient *s);
  155. int smbsuccess(SmbHeader *h, char **errmsgp);
  156. int smbtransactiondecodeprimary(SmbTransaction *t, SmbHeader *h, uint8_t *pdata, SmbBuffer *b, char **errmsgp);
  157. int smbtransactiondecodeprimary2(SmbTransaction *t, SmbHeader *h, uint8_t *pdata, SmbBuffer *b, char **errmsgp);
  158. void smbtransactionfree(SmbTransaction *t);
  159. int smbtransactionencoderesponse(SmbTransaction *t, SmbHeader *h, SmbPeerInfo *p, SmbBuffer *ob, char **errmsgp);
  160. int smbtransactionencoderesponse2(SmbTransaction *t, SmbHeader *h, SmbPeerInfo *p, SmbBuffer *ob, char **errmsgp);
  161. int smbtransactionencodeprimary(SmbTransaction *t, SmbHeader *h, SmbPeerInfo *p, SmbBuffer *ob,
  162. uint8_t *wordcountp, uint16_t *bytecountp, char **errmsgp);
  163. int smbtransactionencodeprimary2(SmbTransaction *t, SmbHeader *h, SmbPeerInfo *p, SmbBuffer *ob,
  164. uint8_t *wordcountp, uint16_t *bytecountp, char **errmsgp);
  165. int smbtransactiondecoderesponse(SmbTransaction *t, SmbHeader *h, uint8_t *pdata, SmbBuffer *b, char **errmsgp);
  166. int smbtransactiondecoderesponse2(SmbTransaction *t, SmbHeader *h, uint8_t *pdata, SmbBuffer *b, char **errmsgp);
  167. int smbtransactionclientsend(void *magic, SmbBuffer *ob, char **errmsgp);
  168. int smbtransactionclientreceive(void *magic, SmbBuffer *ib, char **errmsgp);
  169. int smbtransactionexecute(SmbTransaction *t, SmbHeader *h, SmbPeerInfo *p,
  170. SmbBuffer *ob, SmbTransactionMethod *method, void *magic, SmbHeader *rh, char **errmsgp);
  171. int smbtransactionrespond(SmbTransaction *t, SmbHeader *h, SmbPeerInfo *p, SmbBuffer *ob,
  172. SmbTransactionMethod *method, void *magic, char **errmsgp);
  173. SmbProcessResult smbtrans2findfirst2(SmbSession *s, SmbHeader *h);
  174. SmbProcessResult smbtrans2findnext2(SmbSession *s, SmbHeader *h);
  175. SmbProcessResult smbtrans2queryfileinformation(SmbSession *s, SmbHeader *h);
  176. SmbProcessResult smbtrans2queryfsinformation(SmbSession *s, SmbHeader *h);
  177. SmbProcessResult smbtrans2querypathinformation(SmbSession *s, SmbHeader *h);
  178. SmbProcessResult smbtrans2setfileinformation(SmbSession *s, SmbHeader *h);
  179. SmbProcessResult smbtrans2setpathinformation(SmbSession *s, SmbHeader *h);
  180. SmbIdMap *smbidmapnew(void);
  181. int32_t smbidmapadd(SmbIdMap *m, void *p);
  182. void smbidmapremovebyid(SmbIdMap *m, int32_t id);
  183. void smbidmapremove(SmbIdMap *m, void *thing);
  184. void smbidmapfree(SmbIdMap **mp, SMBIDMAPAPPLYFN *free, void *magic);
  185. void smbidmapapply(SmbIdMap *mp, SMBIDMAPAPPLYFN *free, void *magic);
  186. void *smbidmapfind(SmbIdMap *m, int32_t id);
  187. void smbidmapremoveif(SmbIdMap *m, int (*f)(void *p, void *arg), void *arg);
  188. void smbsearchfree(SmbSearch **searchp);
  189. void smbsearchclose(SmbSession *s, SmbSearch *search);
  190. void smbsearchclosebyid(SmbSession *s, uint16_t sid);
  191. void smbseterror(SmbSession *s, uint8_t errclass, uint16_t error);
  192. void smbplan9time2datetime(uint32_t time, int tzoff, uint16_t *datep,
  193. uint16_t *timep);
  194. uint32_t smbdatetime2plan9time(uint16_t date, uint16_t time, int tzoff);
  195. int64_t smbplan9time2time(uint32_t time);
  196. uint32_t smbplan9time2utime(uint32_t time, int tzoff);
  197. uint32_t smbutime2plan9time(uint32_t time, int tzoff);
  198. uint32_t smbtime2plan9time(int64_t);
  199. void smbpathcanon(char *path);
  200. void smbpathsplit(char *path, char **dirp, char **namep);
  201. uint16_t smbplan9mode2dosattr(uint32_t mode);
  202. uint32_t smbdosattr2plan9wstatmode(uint32_t oldmode, uint16_t attr);
  203. uint32_t smbdosattr2plan9mode(uint16_t attr);
  204. uint32_t smbplan9length2size32(int64_t size);
  205. void smbfileclose(SmbSession *s, SmbFile *f);
  206. void smbloglock(void);
  207. void smblogunlock(void);
  208. int smblogvprint(int cmd, char *fmt, va_list ap);
  209. int translogprint(int cmd, char *fmt, ...);
  210. int smblogprint(int cmd, char *fmt, ...);
  211. int smblogprintif(int v, char *fmt, ...);
  212. void smblogdata(int cmd, int (*print)(int cmd, char *fmt, ...), void *p, int32_t data, int32_t limit);
  213. SmbSharedFile *smbsharedfileget(Dir *d, int p9mode, int *sharep);
  214. void smbsharedfileput(SmbFile *f, SmbSharedFile *sf, int share);
  215. int smbsharedfilelock(SmbSharedFile *sf, SmbSession *s, uint16_t pid, int64_t base, int64_t limit);
  216. int smbsharedfileunlock(SmbSharedFile *sf, SmbSession *s, uint16_t pid, int64_t base, int64_t limit);
  217. int64_t smbl2roundupint64_t(int64_t v, int l2);
  218. int smblistencifs(SMBCIFSACCEPTFN *accept);
  219. int smbnetserverenum2(SmbClient *c, uint32_t stype, char *domain,
  220. int *entriesp, SmbRapServerInfo1 **sip,
  221. char **errmsgp);
  222. int smbbuffergetheader(SmbBuffer *b, SmbHeader *h, uint8_t **parametersp, uint16_t *bytecountp);
  223. int smbbuffergetandcheckheader(SmbBuffer *b, SmbHeader *h, uint8_t command, int response,
  224. uint8_t **pdatap, uint16_t *bytecountp, char **errmsgp);
  225. int smbcheckheader(SmbHeader *h, uint8_t command, int response, char **errmsgp);
  226. int smbcheckheaderdirection(SmbHeader *h, int response, char **errmsgp);
  227. SmbDirCache *smbmkdircache(SmbTree *t, char *path);
  228. void smbdircachefree(SmbDirCache **cp);
  229. int smbmatch(char *name, Reprog *rep);
  230. Reprog *smbmkrep(char *pattern);
  231. int smbclientopen(SmbClient *c, uint16_t mode, char *name, uint8_t *errclassp, uint16_t *errorp, uint16_t *fid, uint16_t *attrp,
  232. uint32_t *mtimep, uint32_t *sizep, uint16_t *accessallowedp, char **errmsgp);
  233. Rune smbruneconvert(Rune r, uint32_t flags);
  234. int smbslut(SmbSlut *table, char *name);
  235. char *smbrevslut(SmbSlut *table, int val);
  236. SmbProcessResult smbtruncatefile(SmbSession *s, SmbFile *f, int64_t offset);
  237. #ifdef LEAK
  238. #define smbemallocz(n, z) mallocz(n, z)
  239. #define smbemalloc(n) malloc(n)
  240. #define smbestrdup(p) strcpy(malloc(strlen(p) + 1), p)
  241. #endif
  242. int smbremovefile(SmbTree *t, char *dir, char *name);
  243. int smbbrowsesendhostannouncement(char *name, uint32_t periodms,
  244. uint32_t type, char *comment,
  245. char **errmsgp);