]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/cifs/cifs.h
cc: use 7 octal digits for 21 bit runes
[plan9front.git] / sys / src / cmd / cifs / cifs.h
1 /* cifs.h */
2
3 enum {
4         Proot           = 1,            /* LSBs of qid.path for root dir */
5         Pinfo           = 2,            /* LSBs of qid.path for info files */
6         Pshare          = 4,            /* LSBs of qid.path for share dirs */
7         NBHDRLEN        = 4,            /* length of a netbios header */
8         T2HDRLEN        = 64,           /* Transaction2 header length */
9         NO_UID          = 0xffff,       /* initial UID on connect */
10         NO_TID          = 0xffff,       /* initial TID on connect */
11         MTU             = 0xefff,       /* our MTU */
12         CACHETIME       = 2,            /* seconds read-ahead is valid for */
13         CIFS_FNAME_MAX  = 0xff,         /* max file path component len */
14         OVERHEAD        = 80,           /* max packet overhead when reading & writing */
15         IDLE_TIME       = 10,           /* keepalive send rate in mins */
16         NBNSTOUT        = 300,          /* Netbios Name Service Timeout (300ms x 3retrys) */
17         NBRPCTOUT       = 45*60*1000,   /* Netbios RPC Timeout (45sec) */
18         MAX_SHARES      = 4096,         /* static table of shares attached */
19         RAP_ERR_MOREINFO= 234,          /* non-error code, more info to be fetched */
20         MAX_DFS_PATH    = 512,          /* MS says never more than 250 chars... */
21         Bits16 = 0xFFFF,                        /* max Unicode value Windows supports */
22 };
23
24 enum {
25         SMB_COM_CREATE_DIRECTORY        = 0x00,
26         SMB_COM_DELETE_DIRECTORY        = 0x01,
27         SMB_COM_OPEN                    = 0x02,
28         SMB_COM_CREATE                  = 0x03,
29         SMB_COM_CLOSE                   = 0x04,
30         SMB_COM_FLUSH                   = 0x05,
31         SMB_COM_DELETE                  = 0x06,
32         SMB_COM_RENAME                  = 0x07,
33         SMB_COM_QUERY_INFORMATION       = 0x08,
34         SMB_COM_SET_INFORMATION         = 0x09,
35         SMB_COM_READ                    = 0x0A,
36         SMB_COM_WRITE                   = 0x0B,
37         SMB_COM_LOCK_BYTE_RANGE         = 0x0C,
38         SMB_COM_UNLOCK_BYTE_RANGE       = 0x0D,
39         SMB_COM_CREATE_TEMPORARY        = 0x0E,
40         SMB_COM_CREATE_NEW              = 0x0F,
41         SMB_COM_CHECK_DIRECTORY         = 0x10,
42         SMB_COM_PROCESS_EXIT            = 0x11,
43         SMB_COM_SEEK                    = 0x12,
44         SMB_COM_LOCK_AND_READ           = 0x13,
45         SMB_COM_WRITE_AND_UNLOCK        = 0x14,
46         SMB_COM_READ_RAW                = 0x1A,
47         SMB_COM_READ_MPX                = 0x1B,
48         SMB_COM_READ_MPX_SECONDARY      = 0x1C,
49         SMB_COM_WRITE_RAW               = 0x1D,
50         SMB_COM_WRITE_MPX               = 0x1E,
51         SMB_COM_WRITE_MPX_SECONDARY     = 0x1F,
52         SMB_COM_WRITE_COMPLETE          = 0x20,
53         SMB_COM_QUERY_SERVER            = 0x21,
54         SMB_COM_SET_INFORMATION2        = 0x22,
55         SMB_COM_QUERY_INFORMATION2      = 0x23,
56         SMB_COM_LOCKING_ANDX            = 0x24,
57         SMB_COM_TRANSACTION             = 0x25,
58         SMB_COM_TRANSACTION_SECONDARY   = 0x26,
59         SMB_COM_IOCTL                   = 0x27,
60         SMB_COM_IOCTL_SECONDARY         = 0x28,
61         SMB_COM_COPY                    = 0x29,
62         SMB_COM_MOVE                    = 0x2A,
63         SMB_COM_ECHO                    = 0x2B,
64         SMB_COM_WRITE_AND_CLOSE         = 0x2C,
65         SMB_COM_OPEN_ANDX               = 0x2D,
66         SMB_COM_READ_ANDX               = 0x2E,
67         SMB_COM_WRITE_ANDX              = 0x2F,
68         SMB_COM_NEW_FILE_SIZE           = 0x30,
69         SMB_COM_CLOSE_AND_TREE_DISC     = 0x31,
70         SMB_COM_TRANSACTION2            = 0x32,
71         SMB_COM_TRANSACTION2_SECONDARY  = 0x33,
72         SMB_COM_FIND_CLOSE2             = 0x34,
73         SMB_COM_FIND_NOTIFY_CLOSE       = 0x35,
74         SMB_COM_TREE_CONNECT            = 0x70,
75         SMB_COM_TREE_DISCONNECT         = 0x71,
76         SMB_COM_NEGOTIATE               = 0x72,
77         SMB_COM_SESSION_SETUP_ANDX      = 0x73,
78         SMB_COM_LOGOFF_ANDX             = 0x74,
79         SMB_COM_TREE_CONNECT_ANDX       = 0x75,
80         SMB_COM_QUERY_INFORMATION_DISK  = 0x80,
81         SMB_COM_SEARCH                  = 0x81,
82         SMB_COM_FIND                    = 0x82,
83         SMB_COM_FIND_UNIQUE             = 0x83,
84         SMB_COM_FIND_CLOSE              = 0x84,
85         SMB_COM_NT_TRANSACT             = 0xA0,
86         SMB_COM_NT_TRANSACT_SECONDARY   = 0xA1,
87         SMB_COM_NT_CREATE_ANDX          = 0xA2,
88         SMB_COM_NT_CANCEL               = 0xA4,
89         SMB_COM_NT_RENAME               = 0xA5,
90         SMB_COM_OPEN_PRINT_FILE         = 0xC0,
91         SMB_COM_WRITE_PRINT_FILE        = 0xC1,
92         SMB_COM_CLOSE_PRINT_FILE        = 0xC2,
93         SMB_COM_GET_PRINT_QUEUE         = 0xC3,
94         SMB_COM_READ_BULK               = 0xD8,
95         SMB_COM_WRITE_BULK              = 0xD9,
96         SMB_COM_WRITE_BULK_DATA         = 0xDA,
97
98         TRANS2_OPEN2                    = 0x00,
99         TRANS2_FIND_FIRST2              = 0x01,
100         TRANS2_FIND_NEXT2               = 0x02,
101         TRANS2_QUERY_FS_INFORMATION     = 0x03,
102         TRANS2_QUERY_PATH_INFORMATION   = 0x05,
103         TRANS2_SET_PATH_INFORMATION     = 0x06,
104         TRANS2_QUERY_FILE_INFORMATION   = 0x07,
105         TRANS2_SET_FILE_INFORMATION     = 0x08,
106         TRANS2_CREATE_DIRECTORY         = 0x0D,
107         TRANS2_SESSION_SETUP            = 0x0E,
108         TRANS2_GET_DFS_REFERRAL         = 0x10,
109
110         NT_TRANSACT_CREATE              = 0x01,
111         NT_TRANSACT_IOCTL               = 0x02,
112         NT_TRANSACT_SET_SECURITY_DESC   = 0x03,
113         NT_TRANSACT_NOTIFY_CHANGE       = 0x04,
114         NT_TRANSACT_RENAME              = 0x05,
115         NT_TRANSACT_QUERY_SECURITY_DESC = 0x06
116 };
117
118 enum {                                          /* CIFS flags */
119         FL_CASELESS_NAMES       = 1<<3,
120         FL_CANNONICAL_NAMES     = 1<<4,
121
122         FL2_KNOWS_LONG_NAMES    = 1<<0,
123         FL2_PACKET_SIGNATURES   = 1<<2,
124         FL2_HAS_LONG_NAMES      = 1<<6,
125         FL2_EXTENDED_SECURITY   = 1<<11,
126         FL2_DFS                 = 1<<12,
127         FL2_PAGEING_IO          = 1<<13,        /* allow read of exec only files */
128         FL2_NT_ERRCODES         = 1<<14,
129         FL2_UNICODE             = 1<<15,
130 };
131
132 enum {                                          /* Capabilities Negoiated */
133         CAP_RAW_MODE            = 1,
134         CAP_MPX_MODE            = 1<<1,
135         CAP_UNICODE             = 1<<2,
136         CAP_LARGE_FILES         = 1<<3,         /* 64 bit files */
137         CAP_NT_SMBS             = 1<<4,
138         CAP_RPC_REMOTE_APIS     = 1<<5,
139         CAP_STATUS32            = 1<<6,
140         CAP_L2_OPLOCKS          = 1<<7,
141         CAP_LOCK_READ           = 1<<8,
142         CAP_NT_FIND             = 1<<9,
143         CAP_DFS                 = 1<<12,
144         CAP_INFO_PASSTHRU       = 1<<13,
145         CAP_LARGE_READX         = 1<<14,
146         CAP_LARGE_WRITEX        = 1<<15,
147         CAP_UNIX                = 1<<23,
148         CAP_BULK_TRANSFER       = 1<<29,
149         CAP_COMPRESSED          = 1<<30,
150         CAP_EX_SECURE           = 1<<31
151 };
152
153 enum {  /* string prefixes */
154         STR_DIALECT             = 2,
155         STR_PATH                = 3,
156         STR_ASCII               = 4,
157 };
158
159 enum {  /* optional support bits in treeconnect */
160         SMB_SUPPROT_SEARCH_BITS = 1,
161         SMB_SHARE_IS_IN_DFS     = 2,
162 };
163
164 enum {  /* DFS referal header flags */
165         DFS_HEADER_ROOT         = 1,    /* Server type, returns root targets */
166         DFS_HEADER_STORAGE      = 2,    /* server has storage, no more referals */
167         DFS_HEADER_FAILBACK     = 4,    /* target failback enabled */
168 };
169
170 enum {  /* DFS referal entry flags */
171         DFS_SERVER_ROOT         = 1,    /* Server type, returns root targets */
172         DFS_REFERAL_LIST        = 0x200,        /* reply is a list (v3 only) */
173         DFS_REFERAL_SET         = 0x400,        /* target is a member of a set */
174 };
175
176 enum {  /* share types */
177         STYPE_DISKTREE          = 0,
178         STYPE_PRINTQ            = 1,
179         STYPE_DEVICE            = 2,
180         STYPE_IPC               = 3,
181         STYPE_SPECIAL           = 4,
182         STYPE_TEMP              = 5,
183 };
184
185 enum {  /* Security */
186         SECMODE_USER            = 0x01, /* i.e. not share level security */
187         SECMODE_PW_ENCRYPT      = 0x02,
188         SECMODE_SIGN_ENABLED    = 0x04,
189         SECMODE_SIGN_REQUIRED   = 0x08,
190 };
191
192 enum {  /* file access rights */
193         DELETE                  = 0x00010000,
194         SYNCHRONIZE             = 0x00100000,
195
196         READ_CONTROL            = 0x00020000,
197         GENERIC_ALL             = 0x10000000,
198         GENERIC_EXECUTE         = 0x20000000,
199         GENERIC_WRITE           = 0x40000000,
200         GENERIC_READ            = 0x80000000,
201
202         ATTR_READONLY           = 0x0001,
203         ATTR_HIDDEN             = 0x0002,
204         ATTR_SYSTEM             = 0x0004,
205         ATTR_VOLUME             = 0x0008,
206         ATTR_DIRECTORY          = 0x0010,
207         ATTR_ARCHIVE            = 0x0020,
208         ATTR_DEVICE             = 0x0040,
209         ATTR_NORMAL             = 0x0080,
210         ATTR_TEMPORARY          = 0x0100,
211         ATTR_SPARSE             = 0x0200,
212         ATTR_REPARSE            = 0x0400,
213         ATTR_COMPRESSED         = 0x0800,
214         ATTR_OFFLINE            = 0x100,        /* offline storage */
215         ATTR_NOT_CONTENT_INDEXED= 0x2000,
216         ATTR_ENCRYPTED          = 0x4000,
217         ATTR_POSIX_SEMANTICS    = 0x01000000,
218         ATTR_BACKUP_SEMANTICS   = 0x02000000,
219         ATTR_DELETE_ON_CLOSE    = 0x04000000,
220         ATTR_SEQUENTIAL_SCAN    = 0x08000000,
221         ATTR_RANDOM_ACCESS      = 0x10000000,
222         ATTR_NO_BUFFERING       = 0x20000000,
223         ATTR_WRITE_THROUGH      = 0x80000000,
224
225         /* ShareAccess flags */
226         FILE_NO_SHARE           = 0,
227         FILE_SHARE_READ         = 1,
228         FILE_SHARE_WRITE        = 2,
229         FILE_SHARE_DELETE       = 4,
230         FILE_SHARE_ALL          = 7,
231
232         /* CreateDisposition flags */
233         FILE_SUPERSEDE          = 0,
234         FILE_OPEN               = 1,
235         FILE_CREATE             = 2,
236         FILE_OPEN_IF            = 3,
237         FILE_OVERWRITE          = 4,
238         FILE_OVERWRITE_IF       = 5,
239
240         /* CreateOptions */
241         FILE_DIRECTORY_FILE             = 0x00000001,
242         FILE_WRITE_THROUGH              = 0x00000002,
243         FILE_SEQUENTIAL_ONLY            = 0x00000004,
244         FILE_NO_INTERMEDIATE_BUFFERING  = 0x00000008,
245         FILE_SYNCHRONOUS_IO_ALERT       = 0x00000010,
246         FILE_SYNCHRONOUS_IO_NONALERT    = 0x00000020,
247         FILE_NON_DIRECTORY_FILE         = 0x00000040,
248         FILE_CREATE_TREE_CONNECTION     = 0x00000080,
249         FILE_COMPLETE_IF_OPLOCKED       = 0x00000100,
250         FILE_NO_EA_KNOWLEDGE            = 0x00000200,
251         FILE_OPEN_FOR_RECOVERY          = 0x00000400,
252         FILE_EIGHT_DOT_THREE_ONLY       = 0x00000400,   /* samba source says so... */
253         FILE_RANDOM_ACCESS              = 0x00000800,
254         FILE_DELETE_ON_CLOSE            = 0x00001000,
255         FILE_OPEN_BY_FILE_ID            = 0x00002000,
256         FILE_OPEN_FOR_BACKUP_INTENT     = 0x00004000,
257         FILE_NO_COMPRESSION             = 0x00008000,
258
259         /* open/create result codes */
260         FILE_WAS_OPENED                 = 1,
261         FILE_WAS_CREATED                = 2,
262         FILE_WAS_OVERWRITTEN            = 3,
263
264         /* ImpersonationLevel flags */
265         SECURITY_ANONYMOUS              = 0,
266         SECURITY_IDENTIFICATION         = 1,
267         SECURITY_IMPERSONATION          = 2,
268         SECURITY_DELEGATION             = 3,
269
270         /* SecurityFlags */
271         SECURITY_CONTEXT_TRACKING       = 1,
272         SECURITY_EFFECTIVE_ONLY         = 2,
273
274         /* security descriptor bitmask */
275         QUERY_OWNER_SECURITY_INFORMATION = 1,
276         QUERY_GROUP_SECURITY_INFORMATION = 2,
277         QUERY_DACL_SECURITY_INFORMATION = 4,
278         QUERY_SACL_SECURITY_INFORMATION = 8,
279
280 };
281
282 enum {  /* PathInfo/FileInfo infolevels */
283         SMB_INFO_STANDARD               = 0x1,
284         SMB_INFO_IS_NAME_VALID          = 0x6,
285         SMB_QUERY_FILE_BASIC_INFO       = 0x101,
286         SMB_QUERY_FILE_STANDARD_INFO    = 0x102,
287         SMB_QUERY_FILE_NAME_INFO        = 0x104,
288         SMB_QUERY_FILE_ALLOCATION_INFO  = 0x105,
289         SMB_QUERY_FILE_END_OF_FILE_INFO = 0x106,
290         SMB_QUERY_FILE_ALL_INFO         = 0x107,
291         SMB_QUERY_ALT_NAME_INFO         = 0x108,
292         SMB_QUERY_FILE_STREAM_INFO      = 0x109,
293         SMB_QUERY_FILE_COMPRESSION_INFO = 0x10b,
294         SMB_QUERY_FILE_UNIX_BASIC       = 0x200,
295         SMB_QUERY_FILE_UNIX_LINK        = 0x201,
296
297         SMB_SET_FILE_BASIC_INFO         = 0x101,
298         SMB_SET_FILE_DISPOSITION_INFO   = 0x102,
299         SMB_SET_FILE_ALLOCATION_INFO    = 0x103,
300         SMB_SET_FILE_END_OF_FILE_INFO   = 0x104,
301         SMB_SET_FILE_UNIX_BASIC         = 0x200,
302         SMB_SET_FILE_UNIX_LINK          = 0x201,
303         SMB_SET_FILE_UNIX_HLINK         = 0x203,
304         SMB_SET_FILE_BASIC_INFO2        = 0x3ec,
305         SMB_SET_FILE_RENAME_INFORMATION = 0x3f2,
306         SMB_SET_FILE_ALLOCATION_INFO2   = 0x3fb,
307         SMB_SET_FILE_END_OF_FILE_INFO2  = 0x3fc,
308
309         /* Find File infolevels */
310         SMB_FIND_FILE_DIRECTORY_INFO    = 0x101,
311         SMB_FIND_FILE_FULL_DIRECTORY_INFO= 0x102,
312         SMB_FIND_FILE_NAMES_INFO        = 0x103,
313         SMB_FIND_FILE_BOTH_DIRECTORY_INFO= 0x104,
314         SMB_FIND_FILE_UNIX              = 0x202,
315
316         /* Trans2 FindFirst & FindNext */
317         CIFS_SEARCH_CLOSE_ALWAYS        = 0x0001,
318         CIFS_SEARCH_CLOSE_AT_END        = 0x0002,
319         CIFS_SEARCH_RETURN_RESUME       = 0x0004,
320         CIFS_SEARCH_CONTINUE_FROM_LAST  = 0x0008,
321         CIFS_SEARCH_BACKUP_SEARCH       = 0x0010,
322
323         /* Trans2 FsInfo */
324         SMB_INFO_ALLOCATION             = 0x1,
325         SMB_INFO_VOLUME                 = 0x2,
326         SMB_QUERY_FS_VOLUME_INFO        = 0x102,
327         SMB_QUERY_FS_SIZE_INFO          = 0x103,
328         SMB_QUERY_FS_DEVICE_INFO        = 0x104,
329         SMB_QUERY_FS_ATTRIBUTE_INFO     = 0x105,
330         SMB_QUERY_CIFS_UNIX_INFO        = 0x200,
331 };
332
333 enum {  /* things to search for in server lookups */
334         LOCAL_AUTHORATIVE_ONLY  = 0x40000000,
335         LIST_DOMAINS_ONLY       = 0x80000000,
336         ALL_LEARNT_IN_DOMAIN    = 0xFFFFFFFF
337 };
338
339 typedef struct {
340         char    *user;          /* username */
341         char    *windom;        /* remote server's domain name */
342         char    *resp[2];       /* ASCII/Unicode or LM/NTLM keys */
343         int     len[2];         /* length of above */
344         uchar   *mackey[2];     /* Message Authentication key */
345 } Auth;
346
347 typedef struct {
348         int     fd;             /* File descriptor for I/O  */
349         int     nbt;            /* am using cifs over netbios */
350         int     trn;            /* TRN (unique RPC) ID  */
351         int     uid;            /* user (authentication) ID  */
352         int     seq;            /* sequence number */
353         int     seqrun;         /* sequence numbering active */
354         int     caps;           /* server's capabilities */
355         int     support;        /* support bits */
356         int     flags;          /* SMB flags that we will send in the next packet   */
357         int     flags2;         /* SMB flags 2 that we will send in the next packet */
358         int     nocache;        /* disable write behind caching in server */
359         int     pid;            /* process ID  */
360         int     mid;            /* multiplex ID */
361         int     mtu;            /* max size of packet  */
362         int     tz;             /* Timezone, mins from UTC  */
363         int     isguest;        /* logged in as guest */
364         int     secmode;        /* security mode  */
365         int     macidx;         /* which MAC is in use, -1 is none */
366         uchar   chal[0xff +1];  /* server's challange for authentication  */
367         int     challen;        /* length of challange */
368         long    slip;           /* time difference between the server and us */
369         uvlong  lastfind;       /* nsec when last find peformed */
370         QLock   seqlock;        /* sequence number increment */
371         QLock   rpclock;        /* actual remote procedure call */
372         char    *cname;         /* remote hosts called name (for info) */
373         char    *remos;         /* remote hosts OS (for info) */
374         Auth    *auth;          /* authentication info */
375 } Session;
376
377 typedef struct {
378         Session *s;
379
380         int tid;                /* tree ID received from server */
381         int seq;                /* sequence number expected in reply */
382         int request;            /* request cmd no (for debug) */
383         int flags2;             /* flags2 received with this packet */
384
385         uchar *seqbase;         /* cifs: pos of sequence number in packet */
386         uchar *wordbase;        /* cifs: base of words section of data  */
387         uchar *bytebase;        /* cifs: base of bytes section of data  */
388         uchar *tbase;           /* transactions: start of trans packet */
389         uchar *tsetup;          /* transactions: start of setup section */
390         uchar *tparam;          /* transactions: start of params section */
391         uchar *tdata;           /* transactions: start of data section */
392
393         uchar *eop;             /* received end of packet */
394         uchar *pos;             /* current pos in packet  */
395         uchar *buf;             /* packet buffer, must be last entry in struct  */
396 } Pkt;
397
398 typedef struct {
399         char    *name;
400         int     tid;            /* not part of the protocol, housekeeping */
401         int     options;        /* not part of the protocol, housekeeping */
402 } Share;
403
404 typedef struct {
405         long    created;        /* last access time */
406         long    accessed;       /* last access time */
407         long    written;        /* last written time */
408         long    changed;        /* change time */
409         uvlong  size;           /* file size */
410         long    attribs;        /* attributes */
411         char    name[CIFS_FNAME_MAX +1]; /* name */
412 } FInfo;
413
414 typedef struct {
415         char    *wrkstn;
416         char    *user;
417         long    sesstime;
418         long    idletime;
419 } Sessinfo;
420
421 typedef struct {
422         char    *name;
423 } Namelist;
424
425 typedef struct {
426         char    *user;
427         char    *comment;
428         char    *user_comment;
429         char    *fullname;
430 } Userinfo;
431
432 typedef struct {
433         char    *name;
434         int     type;
435         char    *comment;
436         int     perms;
437         int     maxusrs;
438         int     activeusrs;
439         char    *path;
440         char    *passwd;
441 } Shareinfo2;
442
443 typedef struct {
444         char    *name;
445         int     major;
446         int     minor;
447         int     type;
448         char    *comment;
449 } Serverinfo;
450
451 typedef struct {
452         int     type;   /* o=unknown, 1=CIFS, 2=netware 3=domain */
453         int     flags;  /* 1 == strip off consumed chars before resubmitting */
454         int     ttl;    /* time to live of this info in secs */
455         char    *path;  /* new path */
456         char    *addr;  /* new server */
457 } Refer;
458
459 typedef struct {
460         char    *node;
461         char    *user;
462         char    *langroup;
463         int     major;
464         int     minor;
465         char    *pridom;
466         char    *otherdoms;
467 } Wrkstainfo;
468
469 typedef struct {
470         int     ident;
471         int     perms;
472         int     locks;
473         char    *path;
474         char    *user;
475 } Fileinfo;
476
477 extern int Active;
478 extern int Checkcase;
479 extern int Dfstout;
480 extern char *Debug;
481 extern char *Host;
482 extern Session *Sess;
483 extern Share Ipc;
484
485 extern Share Shares[MAX_SHARES];
486 extern int Nshares;
487
488 /* auth.c */
489 extern void autherr(void);
490 extern Auth *getauth(char *name, char *windom, char *keyp, int secmode, uchar *chal, int len);
491 extern int macsign(Pkt *p, int seq);
492
493 /* cifs.c */
494 extern Session *cifsdial(char *host, char *called, char *sysname);
495 extern void cifsclose(Session *s);
496 extern Pkt *cifshdr(Session *s, Share *sp, int cmd);
497 extern void pbytes(Pkt *p);
498 extern int cifsrpc(Pkt *p);
499 extern int CIFSnegotiate(Session *s, long *svrtime, char *domain, int domlen, char *cname, int cnamlen);
500 extern int CIFSsession(Session *s);
501 extern int CIFStreeconnect(Session *s, char *cname, char *tree, Share *sp);
502 extern int CIFSlogoff(Session *s);
503 extern int CIFStreedisconnect(Session *s, Share *sp);
504 extern int CIFSdeletefile(Session *s, Share *sp, char *name);
505 extern int CIFSdeletedirectory(Session *s, Share *sp, char *name);
506 extern int CIFScreatedirectory(Session *s, Share *sp, char *name);
507 extern int CIFSrename(Session *s, Share *sp, char *old, char *new);
508 extern int CIFS_NT_opencreate(Session *s, Share *sp, char *name, int flags, int options, int attrs, int access, int share, int action, int *result, FInfo *fi);
509 extern int CIFS_SMB_opencreate(Session *s, Share *sp, char *name, int access, int attrs, int action, int *result);
510 extern vlong CIFSwrite(Session *s, Share *sp, int fh, uvlong off, void *buf, vlong n);
511 extern vlong CIFSread(Session *s, Share *sp, int fh, uvlong off, void *buf, vlong n, vlong minlen);
512 extern int CIFSflush(Session *s, Share *sp, int fh);
513 extern int CIFSclose(Session *s, Share *sp, int fh);
514 extern int CIFSfindclose2(Session *s, Share *sp, int sh);
515 extern int CIFSecho(Session *s);
516 extern int CIFSsetinfo(Session *s, Share *sp, char *path, FInfo *fip);
517
518 /* dfs.c */
519 extern int dfscacheinfo(Fmt *f);
520 extern char *trimshare(char *s);
521 extern char *mapfile(char *opath);
522 extern int mapshare(char *path, Share **osp);
523 extern int redirect(Session *s, Share *sp, char *path);
524
525 /* doserrstr.c */
526 extern char *doserrstr(uint err);
527
528 /* fs.c */
529 extern int shareinfo(Fmt *f);
530 extern int openfileinfo(Fmt *f);
531 extern int conninfo(Fmt *f);
532 extern int sessioninfo(Fmt *f);
533 extern int dfsrootinfo(Fmt *f);
534 extern int userinfo(Fmt *f);
535 extern int groupinfo(Fmt *f);
536 extern int domaininfo(Fmt *f);
537 extern int workstationinfo(Fmt *f);
538
539 /* info.c */
540 extern int walkinfo(char *name);
541 extern int numinfo(void);
542 extern int dirgeninfo(int slot, Dir *d);
543 extern int makeinfo(int path);
544 extern int readinfo(int path, char *buf, int len, int off);
545 extern void freeinfo(int path);
546
547 /* main.c */
548 extern void setup(void);
549 extern int filetableinfo(Fmt *f);
550 extern Qid mkqid(char *s, int is_dir, long vers, int subtype, long path);
551 extern int rdonly(Session *s, Share *sp, char *path, int rdonly);
552 extern void usage(void);
553 extern void dmpkey(char *s, void *v, int n);
554 extern void main(int argc, char **argv);
555
556 /* misc.c */
557 extern char *strupr(char *s);
558 extern char *strlwr(char *s);
559
560 /* netbios.c */
561 extern void Gmem(uchar **p, void *v, int n);
562 extern int calledname(char *host, char *name);
563 extern int nbtdial(char *addr, char *called, char *sysname);
564 extern void nbthdr(Pkt *p);
565 extern int nbtrpc(Pkt *p);
566 extern void xd(char *str, void *buf, int n);
567
568 /* nterrstr.c */
569 extern char *nterrstr(uint err);
570
571 /* pack.c */
572 extern void *pmem(Pkt *p, void *v, int len);
573 extern void *ppath(Pkt *p, char *str);
574 extern void *pstr(Pkt *p, char *str);
575 extern void *pascii(Pkt *p, char *str);
576 extern void *pl64(Pkt *p, uvlong n);
577 extern void *pb32(Pkt *p, uint n);
578 extern void *pl32(Pkt *p, uint n);
579 extern void *pb16(Pkt *p, uint n);
580 extern void *pl16(Pkt *p, uint n);
581 extern void *p8(Pkt *p, uint n);
582 extern void *pname(Pkt *p, char *name, char pad);
583 extern void *pvtime(Pkt *p, uvlong n);
584 extern void *pdatetime(Pkt *p, long utc);
585 extern void gmem(Pkt *p, void *v, int n);
586 extern void gstr(Pkt *p, char *str, int n);
587 extern void gstr_noalign(Pkt *p, char *str, int n);
588 extern void gascii(Pkt *p, char *str, int n);
589 extern uvlong gl64(Pkt *p);
590 extern uvlong gb48(Pkt *p);
591 extern uint gb32(Pkt *p);
592 extern uint gl32(Pkt *p);
593 extern uint gb16(Pkt *p);
594 extern uint gl16(Pkt *p);
595 extern uint g8(Pkt *p);
596 extern long gdatetime(Pkt *p);
597 extern long gvtime(Pkt *p);
598 extern void gconv(Pkt *p, int conv, char *str, int n);
599 extern void goff(Pkt *p, uchar *base, char *str, int n);
600
601 /* ping.c */
602 extern int ping(char *host, int timeout);
603
604 /* raperrstr.c */
605 extern char *raperrstr(uint err);
606
607 /* sid2name.c */
608 extern void upd_names(Session *s, Share *sp, char *path, Dir *d);
609
610 /* trans.c */
611 extern int RAPshareenum(Session *s, Share *sp, Share **ent);
612 extern int RAPshareinfo(Session *s, Share *sp, char *share, Shareinfo2 *si2p);
613 extern int RAPsessionenum(Session *s, Share *sp, Sessinfo **sip);
614 extern int RAPgroupenum(Session *s, Share *sp, Namelist **nlp);
615 extern int RAPgroupusers(Session *s, Share *sp, char *group, Namelist **nlp);
616 extern int RAPuserenum(Session *s, Share *sp, Namelist **nlp);
617 extern int RAPuserenum2(Session *s, Share *sp, Namelist **nlp);
618 extern int RAPuserinfo(Session *s, Share *sp, char *user, Userinfo *uip);
619 extern int RAPServerenum2(Session *s, Share *sp, char *workgroup, int type, int *more, Serverinfo **si);
620 extern int RAPServerenum3(Session *s, Share *sp, char *workgroup, int type, int last, Serverinfo *si);
621 extern int RAPFileenum2(Session *s, Share *sp, char *user, char *path, Fileinfo **fip);
622
623 /* trans2.c */
624 extern int T2findfirst(Session *s, Share *sp, int slots, char *path, int *got, long *resume, FInfo *fip);
625 extern int T2findnext(Session *s, Share *sp, int slots, char *path, int *got, long *resume, FInfo *fip, int sh);
626 extern int T2queryall(Session *s, Share *sp, char *path, FInfo *fip);
627 extern int T2querystandard(Session *s, Share *sp, char *path, FInfo *fip);
628 extern int T2setpathinfo(Session *s, Share *sp, char *path, FInfo *fip);
629 extern int T2setfilelength(Session *s, Share *sp, int fh, FInfo *fip);
630 extern int T2fsvolumeinfo(Session *s, Share *sp, long *created, long *serialno, char *label, int labellen);
631 extern int T2fssizeinfo(Session *s, Share *sp, uvlong *total, uvlong *unused);
632 extern int T2getdfsreferral(Session *s, Share *sp, char *path, int *gflags, int *used, Refer *re, int nent);
633 extern int T2fsdeviceinfo(Session *s, Share *sp, int *type, int *flags);
634
635 /* transnt.c */
636 extern int TNTquerysecurity(Session *s, Share *sp, int fh, char **usid, char **gsid);