FreeBSD/Linux Kernel Cross Reference
sys/netsmb/smb.h
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3 *
4 * Copyright (c) 2000-2001 Boris Popov
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 *
28 * $FreeBSD$
29 */
30
31 /*
32 * Common definitions and structures for SMB/CIFS protocol
33 */
34
35 #ifndef _NETSMB_SMB_H_
36 #define _NETSMB_SMB_H_
37
38 #define SMB_TCP_PORT 139
39 /*
40 * SMB dialects that we have to deal with.
41 */
42 enum smb_dialects {
43 SMB_DIALECT_NONE,
44 SMB_DIALECT_CORE, /* PC NETWORK PROGRAM 1.0, PCLAN1.0 */
45 SMB_DIALECT_COREPLUS, /* MICROSOFT NETWORKS 1.03 */
46 SMB_DIALECT_LANMAN1_0, /* MICROSOFT NETWORKS 3.0, LANMAN1.0 */
47 SMB_DIALECT_LANMAN2_0, /* LM1.2X002, DOS LM1.2X002, Samba */
48 SMB_DIALECT_LANMAN2_1, /* DOS LANMAN2.1, LANMAN2.1 */
49 SMB_DIALECT_NTLM0_12 /* NT LM 0.12, Windows for Workgroups 3.1a,
50 * NT LANMAN 1.0 */
51 };
52
53 /*
54 * Formats of data/string buffers
55 */
56 #define SMB_DT_DATA 1
57 #define SMB_DT_DIALECT 2
58 #define SMB_DT_PATHNAME 3
59 #define SMB_DT_ASCII 4
60 #define SMB_DT_VARIABLE 5
61
62 /*
63 * SMB header
64 */
65 #define SMB_SIGNATURE "\xFFSMB"
66 #define SMB_SIGLEN 4
67 #define SMB_HDRMID(p) (le16toh(*(u_short*)((u_char*)(p) + 30)))
68 #define SMB_HDRLEN 32
69 /*
70 * bits in the smb_flags field
71 */
72 #define SMB_FLAGS_CASELESS 0x08
73 #define SMB_FLAGS_SERVER_RESP 0x80 /* indicates a response */
74
75 /*
76 * bits in the smb_flags2 field
77 */
78 #define SMB_FLAGS2_KNOWS_LONG_NAMES 0x0001
79 #define SMB_FLAGS2_KNOWS_EAS 0x0002 /* client know about EAs */
80 #define SMB_FLAGS2_SECURITY_SIGNATURE 0x0004 /* check SMB integrity */
81 #define SMB_FLAGS2_IS_LONG_NAME 0x0040 /* any path name is a long name */
82 #define SMB_FLAGS2_EXT_SEC 0x0800 /* client aware of Extended
83 * Security negotiation */
84 #define SMB_FLAGS2_DFS 0x1000 /* resolve paths in DFS */
85 #define SMB_FLAGS2_PAGING_IO 0x2000 /* for exec */
86 #define SMB_FLAGS2_ERR_STATUS 0x4000 /* 1 - status.status */
87 #define SMB_FLAGS2_UNICODE 0x8000 /* use Unicode for all strings */
88
89 #define SMB_UID_UNKNOWN 0xffff
90 #define SMB_TID_UNKNOWN 0xffff
91
92 /*
93 * Security mode bits
94 */
95 #define SMB_SM_USER 0x01 /* server in the user security mode */
96 #define SMB_SM_ENCRYPT 0x02 /* use challenge/response */
97 #define SMB_SM_SIGS 0x04
98 #define SMB_SM_SIGS_REQUIRE 0x08
99
100 /*
101 * NTLM capabilities
102 */
103 #define SMB_CAP_RAW_MODE 0x0001
104 #define SMB_CAP_MPX_MODE 0x0002
105 #define SMB_CAP_UNICODE 0x0004
106 #define SMB_CAP_LARGE_FILES 0x0008 /* 64 bit offsets supported */
107 #define SMB_CAP_NT_SMBS 0x0010
108 #define SMB_CAP_RPC_REMOTE_APIS 0x0020
109 #define SMB_CAP_STATUS32 0x0040
110 #define SMB_CAP_LEVEL_II_OPLOCKS 0x0080
111 #define SMB_CAP_LOCK_AND_READ 0x0100
112 #define SMB_CAP_NT_FIND 0x0200
113 #define SMB_CAP_DFS 0x1000
114 #define SMB_CAP_INFOLEVEL_PASSTHRU 0x2000
115 #define SMB_CAP_LARGE_READX 0x4000
116 #define SMB_CAP_LARGE_WRITEX 0x8000
117 #define SMB_CAP_UNIX 0x00800000
118 #define SMB_CAP_BULK_TRANSFER 0x20000000
119 #define SMB_CAP_COMPRESSED_DATA 0x40000000
120 #define SMB_CAP_EXT_SECURITY 0x80000000
121
122 /*
123 * File attributes
124 */
125 #define SMB_FA_RDONLY 0x01
126 #define SMB_FA_HIDDEN 0x02
127 #define SMB_FA_SYSTEM 0x04
128 #define SMB_FA_VOLUME 0x08
129 #define SMB_FA_DIR 0x10
130 #define SMB_FA_ARCHIVE 0x20
131
132 /*
133 * Extended file attributes
134 */
135 #define SMB_EFA_RDONLY 0x0001
136 #define SMB_EFA_HIDDEN 0x0002
137 #define SMB_EFA_SYSTEM 0x0004
138 #define SMB_EFA_DIRECTORY 0x0010
139 #define SMB_EFA_ARCHIVE 0x0020
140 #define SMB_EFA_NORMAL 0x0080
141 #define SMB_EFA_TEMPORARY 0x0100
142 #define SMB_EFA_COMPRESSED 0x0800
143 #define SMB_EFA_POSIX_SEMANTICS 0x01000000
144 #define SMB_EFA_BACKUP_SEMANTICS 0x02000000
145 #define SMB_EFA_DELETE_ON_CLOSE 0x04000000
146 #define SMB_EFA_SEQUENTIAL_SCAN 0x08000000
147 #define SMB_EFA_RANDOM_ACCESS 0x10000000
148 #define SMB_EFA_NO_BUFFERING 0x20000000
149 #define SMB_EFA_WRITE_THROUGH 0x80000000
150
151 /*
152 * Access Mode Encoding
153 */
154 #define SMB_AM_OPENREAD 0x0000
155 #define SMB_AM_OPENWRITE 0x0001
156 #define SMB_AM_OPENRW 0x0002
157 #define SMB_AM_OPENEXEC 0x0003
158 #define SMB_SM_COMPAT 0x0000
159 #define SMB_SM_EXCLUSIVE 0x0010
160 #define SMB_SM_DENYWRITE 0x0020
161 #define SMB_SM_DENYREADEXEC 0x0030
162 #define SMB_SM_DENYNONE 0x0040
163
164 /*
165 * SMB commands
166 */
167 #define SMB_COM_CREATE_DIRECTORY 0x00
168 #define SMB_COM_DELETE_DIRECTORY 0x01
169 #define SMB_COM_OPEN 0x02
170 #define SMB_COM_CREATE 0x03
171 #define SMB_COM_CLOSE 0x04
172 #define SMB_COM_FLUSH 0x05
173 #define SMB_COM_DELETE 0x06
174 #define SMB_COM_RENAME 0x07
175 #define SMB_COM_QUERY_INFORMATION 0x08
176 #define SMB_COM_SET_INFORMATION 0x09
177 #define SMB_COM_READ 0x0A
178 #define SMB_COM_WRITE 0x0B
179 #define SMB_COM_LOCK_BYTE_RANGE 0x0C
180 #define SMB_COM_UNLOCK_BYTE_RANGE 0x0D
181 #define SMB_COM_CREATE_TEMPORARY 0x0E
182 #define SMB_COM_CREATE_NEW 0x0F
183 #define SMB_COM_CHECK_DIRECTORY 0x10
184 #define SMB_COM_PROCESS_EXIT 0x11
185 #define SMB_COM_SEEK 0x12
186 #define SMB_COM_LOCK_AND_READ 0x13
187 #define SMB_COM_WRITE_AND_UNLOCK 0x14
188 #define SMB_COM_READ_RAW 0x1A
189 #define SMB_COM_READ_MPX 0x1B
190 #define SMB_COM_READ_MPX_SECONDARY 0x1C
191 #define SMB_COM_WRITE_RAW 0x1D
192 #define SMB_COM_WRITE_MPX 0x1E
193 #define SMB_COM_WRITE_COMPLETE 0x20
194 #define SMB_COM_SET_INFORMATION2 0x22
195 #define SMB_COM_QUERY_INFORMATION2 0x23
196 #define SMB_COM_LOCKING_ANDX 0x24
197 #define SMB_COM_TRANSACTION 0x25
198 #define SMB_COM_TRANSACTION_SECONDARY 0x26
199 #define SMB_COM_IOCTL 0x27
200 #define SMB_COM_IOCTL_SECONDARY 0x28
201 #define SMB_COM_COPY 0x29
202 #define SMB_COM_MOVE 0x2A
203 #define SMB_COM_ECHO 0x2B
204 #define SMB_COM_WRITE_AND_CLOSE 0x2C
205 #define SMB_COM_OPEN_ANDX 0x2D
206 #define SMB_COM_READ_ANDX 0x2E
207 #define SMB_COM_WRITE_ANDX 0x2F
208 #define SMB_COM_CLOSE_AND_TREE_DISC 0x31
209 #define SMB_COM_TRANSACTION2 0x32
210 #define SMB_COM_TRANSACTION2_SECONDARY 0x33
211 #define SMB_COM_FIND_CLOSE2 0x34
212 #define SMB_COM_FIND_NOTIFY_CLOSE 0x35
213 #define SMB_COM_TREE_CONNECT 0x70
214 #define SMB_COM_TREE_DISCONNECT 0x71
215 #define SMB_COM_NEGOTIATE 0x72
216 #define SMB_COM_SESSION_SETUP_ANDX 0x73
217 #define SMB_COM_LOGOFF_ANDX 0x74
218 #define SMB_COM_TREE_CONNECT_ANDX 0x75
219 #define SMB_COM_QUERY_INFORMATION_DISK 0x80
220 #define SMB_COM_SEARCH 0x81
221 #define SMB_COM_FIND 0x82
222 #define SMB_COM_FIND_UNIQUE 0x83
223 #define SMB_COM_NT_TRANSACT 0xA0
224 #define SMB_COM_NT_TRANSACT_SECONDARY 0xA1
225 #define SMB_COM_NT_CREATE_ANDX 0xA2
226 #define SMB_COM_NT_CANCEL 0xA4
227 #define SMB_COM_OPEN_PRINT_FILE 0xC0
228 #define SMB_COM_WRITE_PRINT_FILE 0xC1
229 #define SMB_COM_CLOSE_PRINT_FILE 0xC2
230 #define SMB_COM_GET_PRINT_QUEUE 0xC3
231 #define SMB_COM_READ_BULK 0xD8
232 #define SMB_COM_WRITE_BULK 0xD9
233 #define SMB_COM_WRITE_BULK_DATA 0xDA
234
235 /*
236 * TRANS2 commands
237 */
238 #define SMB_TRANS2_OPEN2 0x00
239 #define SMB_TRANS2_FIND_FIRST2 0x01
240 #define SMB_TRANS2_FIND_NEXT2 0x02
241 #define SMB_TRANS2_QUERY_FS_INFORMATION 0x03
242 #define SMB_TRANS2_QUERY_PATH_INFORMATION 0x05
243 #define SMB_TRANS2_SET_PATH_INFORMATION 0x06
244 #define SMB_TRANS2_QUERY_FILE_INFORMATION 0x07
245 #define SMB_TRANS2_SET_FILE_INFORMATION 0x08
246 #define SMB_TRANS2_FSCTL 0x09
247 #define SMB_TRANS2_IOCTL2 0x0A
248 #define SMB_TRANS2_FIND_NOTIFY_FIRST 0x0B
249 #define SMB_TRANS2_FIND_NOTIFY_NEXT 0x0C
250 #define SMB_TRANS2_CREATE_DIRECTORY 0x0D
251 #define SMB_TRANS2_SESSION_SETUP 0x0E
252 #define SMB_TRANS2_GET_DFS_REFERRAL 0x10
253 #define SMB_TRANS2_REPORT_DFS_INCONSISTENCY 0x11
254
255 /*
256 * SMB_TRANS2_QUERY_FS_INFORMATION levels
257 */
258 #define SMB_INFO_ALLOCATION 1
259 #define SMB_INFO_VOLUME 2
260 #define SMB_QUERY_FS_VOLUME_INFO 0x102
261 #define SMB_QUERY_FS_SIZE_INFO 0x103
262 #define SMB_QUERY_FS_DEVICE_INFO 0x104
263 #define SMB_QUERY_FS_ATTRIBUTE_INFO 0x105
264
265 /*
266 * SMB_TRANS2_QUERY_PATH levels
267 */
268 #define SMB_QUERY_FILE_STANDARD 1
269 #define SMB_QUERY_FILE_EA_SIZE 2
270 #define SMB_QUERY_FILE_EAS_FROM_LIST 3
271 #define SMB_QUERY_FILE_ALL_EAS 4
272 #define SMB_QUERY_FILE_IS_NAME_VALID 6
273 #define SMB_QUERY_FILE_BASIC_INFO 0x101
274 #define SMB_QUERY_FILE_STANDARD_INFO 0x102
275 #define SMB_QUERY_FILE_EA_INFO 0x103
276 #define SMB_QUERY_FILE_NAME_INFO 0x104
277 #define SMB_QUERY_FILE_ALL_INFO 0x107
278 #define SMB_QUERY_FILE_ALT_NAME_INFO 0x108
279 #define SMB_QUERY_FILE_STREAM_INFO 0x109
280 #define SMB_QUERY_FILE_COMPRESSION_INFO 0x10b
281 #define SMB_QUERY_FILE_UNIX_BASIC 0x200
282 #define SMB_QUERY_FILE_UNIX_LINK 0x201
283 #define SMB_QUERY_FILE_MAC_DT_GET_APPL 0x306
284 #define SMB_QUERY_FILE_MAC_DT_GET_ICON 0x307
285 #define SMB_QUERY_FILE_MAC_DT_GET_ICON_INFO 0x308
286
287 /*
288 * SMB_TRANS2_FIND_FIRST2 information levels
289 */
290 #define SMB_INFO_STANDARD 1
291 #define SMB_INFO_QUERY_EA_SIZE 2
292 #define SMB_INFO_QUERY_EAS_FROM_LIST 3
293 #define SMB_FIND_FILE_DIRECTORY_INFO 0x101
294 #define SMB_FIND_FULL_DIRECTORY_INFO 0x102
295 #define SMB_FIND_FILE_NAMES_INFO 0x103
296 #define SMB_FIND_BOTH_DIRECTORY_INFO 0x104
297
298 /*
299 * Set PATH/FILE information levels
300 */
301 #define SMB_SET_FILE_BASIC_INFO 0x101
302 #define SMB_SET_FILE_END_OF_FILE_INFO 0x104
303
304 /*
305 * LOCKING_ANDX LockType flags
306 */
307 #define SMB_LOCKING_ANDX_SHARED_LOCK 0x01
308 #define SMB_LOCKING_ANDX_OPLOCK_RELEASE 0x02
309 #define SMB_LOCKING_ANDX_CHANGE_LOCKTYPE 0x04
310 #define SMB_LOCKING_ANDX_CANCEL_LOCK 0x08
311 #define SMB_LOCKING_ANDX_LARGE_FILES 0x10
312
313 /*
314 * Some names length limitations. Some of them aren't declared by specs,
315 * but we need reasonable limits.
316 */
317 #define SMB_MAXSRVNAMELEN 15 /* NetBIOS limit */
318 #define SMB_MAXUSERNAMELEN 128
319 #define SMB_MAXPASSWORDLEN 128
320 #define SMB_MAXSHARENAMELEN 128
321 #define SMB_MAXPKTLEN 0x1FFFF
322 #define SMB_MAXCHALLENGELEN 8
323 #define SMB_MAXFNAMELEN 255 /* Keep in sync with MAXNAMLEN */
324
325 #define SMB_MAXRCN 3 /* number of reconnect attempts */
326
327 /*
328 * Error classes
329 */
330 #define SMBSUCCESS 0x00
331 #define ERRDOS 0x01
332 #define ERRSRV 0x02
333 #define ERRHRD 0x03 /* Error is a hardware error. */
334 #define ERRCMD 0xFF /* Command was not in the "SMB" format. */
335
336 /*
337 * Error codes for the ERRDOS class
338 */
339 #define ERRbadfunc 1 /* Invalid function */
340 #define ERRbadfile 2 /* File not found (last component) */
341 #define ERRbadpath 3 /* Directory invalid */
342 #define ERRnofids 4 /* Too many open files */
343 #define ERRnoaccess 5 /* Access denied */
344 #define ERRbadfid 6 /* Invalid file handle */
345 #define ERRbadmcb 7 /* Memory control blocks destroyed (huh ?) */
346 #define ERRnomem 8 /* Insufficient memory */
347 #define ERRbadmem 9 /* Invalid memory block address */
348 #define ERRbadenv 10 /* Invalid environment */
349 #define ERRbadformat 11 /* Invalid format */
350 #define ERRbadaccess 12 /* Invalid open mode */
351 #define ERRbaddata 13 /* Invalid data */
352 #define ERRbaddrive 15 /* Invalid drive specified */
353 #define ERRremcd 16 /* An attempt to delete current directory */
354 #define ERRdiffdevice 17 /* cross fs rename/move */
355 #define ERRnofiles 18 /* no more files found in file search */
356 #define ERRbadshare 32 /* Share mode can't be granted */
357 #define ERRlock 33 /* A lock request conflicts with existing lock */
358 #define ERRunsup 50 /* unsupported - Win 95 */
359 #define ERRnoipc 66 /* ipc unsupported */
360 #define ERRnosuchshare 67 /* invalid share name */
361 #define ERRfilexists 80 /* The file named in the request already exists */
362 #define ERRquota 112 /* W2K returns this if quota space exceeds */
363 #define ERRcannotopen 110 /* cannot open the file */
364 #define ERRinvalidname 123
365 #define ERRunknownlevel 124
366 #define ERRnotlocked 158 /* region was not locked by this context */
367 #define ERRrename 183
368 #define ERRbadpipe 230 /* named pipe invalid */
369 #define ERRpipebusy 231 /* all pipe instances are busy */
370 #define ERRpipeclosing 232 /* close in progress */
371 #define ERRnotconnected 233 /* nobody on other end of pipe */
372 #define ERRmoredata 234 /* more data to be returned */
373 #define ERRbaddirectory 267 /* invalid directory name */
374 #define ERReasunsupported 282 /* extended attributes not supported */
375 #define ERRunknownipc 2142
376 #define ERRbuftoosmall 2123
377 #define ERRnosuchprintjob 2151
378
379 /*
380 * Error codes for the ERRSRV class
381 */
382 #define ERRerror 1 /* Non-specific error code */
383 #define ERRbadpw 2 /* Bad password */
384 #define ERRbadtype 3 /* reserved */
385 #define ERRaccess 4 /* The client doesn't have enough access rights */
386 #define ERRinvnid 5 /* The Tid specified in a command is invalid */
387 #define ERRinvnetname 6 /* Invalid server name in the tree connect */
388 #define ERRinvdevice 7 /* Printer and not printer devices are mixed */
389 #define ERRqfull 49 /* Print queue full */
390 #define ERRqtoobig 50 /* Print queue full - no space */
391 #define ERRinvpfid 52 /* Invalid print file FID */
392 #define ERRsmbcmd 64 /* The server did not recognize the command */
393 #define ERRsrverror 65 /* The server encountered and internal error */
394 #define ERRfilespecs 67 /* The Fid and path name contains an invalid combination */
395 #define ERRbadpermits 69 /* Access mode invalid */
396 #define ERRsetattrmode 71 /* Attribute mode invalid */
397 #define ERRpaused 81 /* Server is paused */
398 #define ERRmsgoff 82 /* Not receiving messages */
399 #define ERRnoroom 83 /* No room to buffer message */
400 #define ERRrmuns 87 /* Too many remote user names */
401 #define ERRtimeout 88 /* Operation timed out */
402 #define ERRnoresource 89 /* No resources currently available for request */
403 #define ERRtoomanyuids 90 /* Too many UIDs active on this session */
404 #define ERRbaduid 91 /* The UID is not known in this session */
405 #define ERRusempx 250 /* Temporarily unable to support Raw, use MPX mode */
406 #define ERRusestd 251 /* Temporarily unable to support Raw, use standard r/w */
407 #define ERRcontmpx 252 /* Continue in MPX mode */
408 #define ERRbadPassword 254
409 #define ERRaccountExpired 2239
410 #define ERRbadClient 2240 /* Cannot access the server from this workstation */
411 #define ERRbadLogonTime 2241 /* Cannot access the server at this time **/
412 #define ERRpasswordExpired 2242
413 #define ERRnosupport 65535 /* Invalid function */
414
415 /*
416 * Error codes for the ERRHRD class
417 */
418 #define ERRnowrite 19 /* write protected media */
419 #define ERRbadunit 20 /* Unknown unit */
420 #define ERRnotready 21 /* Drive not ready */
421 #define ERRbadcmd 22 /* Unknown command */
422 #define ERRdata 23 /* Data error (CRC) */
423 #define ERRbadreq 24 /* Bad request structure length */
424 #define ERRseek 25 /* Seek error */
425 #define ERRbadmedia 26 /* Unknown media type */
426 #define ERRbadsector 27 /* Sector not found */
427 #define ERRnopaper 28 /* Printer out of paper */
428 #define ERRwrite 29 /* Write fault */
429 #define ERRread 30 /* Read fault */
430 #define ERRgeneral 31 /* General failure */
431 #define ERRbadshare 32 /* An open conflicts with an existing open */
432 #define ERRlock 33 /* lock/unlock conflict */
433 #define ERRwrongdisk 34 /* The wrong disk was found in a drive */
434 #define ERRFCBunavail 35 /* No FCBs available */
435 #define ERRsharebufexc 36 /* A sharing buffer has been exceeded */
436 #define ERRdiskfull 39
437
438 /*
439 * RAP error codes (it seems that they returned not only by RAP)
440 */
441 #define SMB_ERROR_ACCESS_DENIED 5
442 #define SMB_ERROR_NETWORK_ACCESS_DENIED 65
443 #define SMB_ERROR_MORE_DATA 234
444
445 typedef u_int16_t smbfh;
446
447 #endif /* _NETSMB_SMB_H_ */
Cache object: c93dc44221caafdb406776530d3512ad
|