Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

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