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);
|