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