xref: /plan9/sys/src/cmd/aquarela/smb.h (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
1 typedef struct SmbRawHeader {
2 	uchar protocol[4];
3 	uchar command;
4 //	union {
5 //		struct {
6 //			uchar errorclass;
7 //			uchar reserved;
8 //			uchar error[2];
9 //		} doserror;
10 		uchar status[4];
11 //	};
12 	uchar flags;
13 	uchar flags2[2];
14 //	union {
15 		uchar extra[12];
16 //		struct {
17 //			uchar pidhigh[2];
18 //			uchar securitysignature[8];
19 //		};
20 //	};
21 	uchar tid[2];
22 	uchar pid[2];
23 	uchar uid[2];
24 	uchar mid[2];
25 	uchar wordcount;
26 	uchar parameterwords[1];
27 } SmbRawHeader;
28 
29 enum {
30 	SmbHeaderFlagReserved = (3 << 1),
31 	SmbHeaderFlagCaseless = (1 << 3),
32 	SmbHeaderFlagServerIgnore = (1 << 4),
33 	SMB_FLAGS_SERVER_TO_REDIR = (1 << 7),
34 };
35 
36 enum {
37 	SMB_FLAGS2_KNOWS_LONG_NAMES = (1 << 0),
38 	SMB_FLAGS2_KNOWS_EAS = (1 << 1),
39 	SMB_FLAGS2_SECURITY_SIGNATURE = (1 << 2),
40 	SMB_FLAGS2_RESERVED1 = (1 << 3),
41 	SMB_FLAGS2_IS_LONG_NAME = (1 << 6),
42 	SMB_FLAGS2_EXT_SEC = (1 << 1),
43 	SMB_FLAGS2_DFS = (1 << 12),
44 	SMB_FLAGS2_PAGING_IO = (1 << 13),
45 	SMB_FLAGS2_ERR_STATUS = (1 << 14),
46 	SMB_FLAGS2_UNICODE = (1 << 15),
47 };
48 
49 enum {
50 	SMB_COM_CREATE_DIRECTORY = 0x00,
51 	SMB_COM_DELETE_DIRECTORY = 0x01,
52 	SMB_COM_OPEN = 0x02,
53 	SMB_COM_CREATE = 0x03,
54 	SMB_COM_CLOSE = 0x04,
55 	SMB_COM_FLUSH = 0x05,
56 	SMB_COM_DELETE = 0x06,
57 	SMB_COM_RENAME = 0x07,
58 	SMB_COM_QUERY_INFORMATION = 0x08,
59 	SMB_COM_SET_INFORMATION = 0x09,
60 	SMB_COM_READ = 0x0A,
61 	SMB_COM_WRITE = 0x0B,
62 	SMB_COM_LOCK_BYTE_RANGE = 0x0C,
63 	SMB_COM_UNLOCK_BYTE_RANGE = 0x0D,
64 	SMB_COM_CREATE_TEMPORARY = 0x0E,
65 	SMB_COM_CREATE_NEW = 0x0F,
66 	SMB_COM_CHECK_DIRECTORY = 0x10,
67 	SMB_COM_PROCESS_EXIT = 0x11,
68 	SMB_COM_SEEK = 0x12,
69 	SMB_COM_LOCK_AND_READ = 0x13,
70 	SMB_COM_WRITE_AND_UNLOCK = 0x14,
71 	SMB_COM_READ_RAW = 0x1A,
72 	SMB_COM_READ_MPX = 0x1B,
73 	SMB_COM_READ_MPX_SECONDARY = 0x1C,
74 	SMB_COM_WRITE_RAW = 0x1D,
75 	SMB_COM_WRITE_MPX = 0x1E,
76 	SMB_COM_WRITE_MPX_SECONDARY = 0x1F,
77 	SMB_COM_WRITE_COMPLETE = 0x20,
78 	SMB_COM_QUERY_SERVER = 0x21,
79 	SMB_COM_SET_INFORMATION2 = 0x22,
80 	SMB_COM_QUERY_INFORMATION2 = 0x23,
81 	SMB_COM_LOCKING_ANDX = 0x24,
82 	SMB_COM_TRANSACTION = 0x25,
83 	SMB_COM_TRANSACTION_SECONDARY = 0x26,
84 	SMB_COM_IOCTL = 0x27,
85 	SMB_COM_IOCTL_SECONDARY = 0x28,
86 	SMB_COM_COPY = 0x29,
87 	SMB_COM_MOVE = 0x2A,
88 	SMB_COM_ECHO = 0x2B,
89 	SMB_COM_WRITE_AND_CLOSE = 0x2C,
90 	SMB_COM_OPEN_ANDX = 0x2D,
91 	SMB_COM_READ_ANDX = 0x2E,
92 	SMB_COM_WRITE_ANDX = 0x2F,
93 	SMB_COM_NEW_FILE_SIZE = 0x30,
94 	SMB_COM_CLOSE_AND_TREE_DISC = 0x31,
95 	SMB_COM_TRANSACTION2 = 0x32,
96 	SMB_COM_TRANSACTION2_SECONDARY = 0x33,
97 	SMB_COM_FIND_CLOSE2 = 0x34,
98 	SMB_COM_FIND_NOTIFY_CLOSE = 0x35,
99 /* Used by Xenix/Unix 0x60 - 0x6E */,
100 	SMB_COM_TREE_CONNECT = 0x70,
101 	SMB_COM_TREE_DISCONNECT = 0x71,
102 	SMB_COM_NEGOTIATE = 0x72,
103 	SMB_COM_SESSION_SETUP_ANDX = 0x73,
104 	SMB_COM_LOGOFF_ANDX = 0x74,
105 	SMB_COM_TREE_CONNECT_ANDX = 0x75,
106 	SMB_COM_QUERY_INFORMATION_DISK = 0x80,
107 	SMB_COM_SEARCH = 0x81,
108 	SMB_COM_FIND = 0x82,
109 	SMB_COM_FIND_UNIQUE = 0x83,
110 	SMB_COM_FIND_CLOSE = 0x84,
111 	SMB_COM_NT_TRANSACT = 0xA0,
112 	SMB_COM_NT_TRANSACT_SECONDARY = 0xA1,
113 	SMB_COM_NT_CREATE_ANDX = 0xA2,
114 	SMB_COM_NT_CANCEL = 0xA4,
115 	SMB_COM_NT_RENAME = 0xA5,
116 	SMB_COM_OPEN_PRINT_FILE = 0xC0,
117 	SMB_COM_WRITE_PRINT_FILE = 0xC1,
118 	SMB_COM_CLOSE_PRINT_FILE = 0xC2,
119 	SMB_COM_GET_PRINT_QUEUE = 0xC3,
120 	SMB_COM_READ_BULK = 0xD8,
121 	SMB_COM_WRITE_BULK = 0xD9,
122 	SMB_COM_NO_ANDX_COMMAND = 0xff,
123 };
124 
125 enum {
126 	SUCCESS = 0,
127 	ERRDOS = 0x01,
128 	ERRSRV = 0x02,
129 	ERRHRD = 0x03,
130 	ERRCMD = 0xff,
131 };
132 
133 enum {
134 	ERRbadfunc = 1,
135 	ERRbadfile = 2,
136 	ERRbadpath = 3,
137 	ERRnofids = 4,
138 	ERRnoaccess = 5,
139 	ERRbadfid = 6,
140 	ERRbadmcb = 7,
141 	ERRnomem = 8,
142 	ERRbadmem = 9,
143 	ERRbadenv = 10,
144 	ERRbadformat = 11,
145 	ERRbadaccess = 12,
146 	ERRbaddata  =13,
147 	ERRbaddrive = 15,
148 	ERRremcd = 16,
149 	ERRdiffdevice = 17,
150 	ERRnofiles = 18,
151 	ERRbadshare = 32,
152 	ERRlock = 33,
153 	ERRunsup = 50,
154 	ERRfilexists = 80,
155 	ERRunknownlevel = 124,
156 	ERRquota = 512,
157 	ERRnotalink = 513,
158 };
159 
160 enum {
161 	ERRerror = 1,
162 	ERRbadpw = 2,
163 	ERRaccess = 4,
164 	ERRinvtid = 5,
165 	ERRsmbcmd = 64,
166 	ERRtoomanyuids = 90,
167 	ERRbaduid = 91,
168 	ERRnosupport = 65535,
169 };
170 
171 enum {
172 	CAP_RAW_MODE = 0x0001,
173 	CAP_MPX_MODE = 0x0002,
174 	CAP_UNICODE = 0x0004,
175 	CAP_LARGE_FILES =  0x0008,
176 	CAP_NT_SMBS = 0x0010,
177 	CAP_RPC_REMOTE_APIS = 0x0020,
178 	CAP_STATUS32 = 0x0040,
179 	CAP_LEVEL_II_OPLOCKS = 0x0080,
180 	CAP_LOCK_AND_READ = 0x0100,
181 	CAP_NT_FIND = 0x0200,
182 	CAP_DFS = 0x1000,
183 	CAP_INFOLEVEL_PASSTHRU = 0x2000,
184 	CAP_W2K_SMBS = 0x2000,
185 	CAP_LARGE_READX = 0x4000,
186 	CAP_LARGE_WRITEX = 0x8000,
187 	CAP_UNIX = 0x00800000,
188 	CAP_BULK_TRANSFER = 0x20000000,
189 	CAP_COMPRESSED_DATA = 0x40000000,
190 	CAP_EXTENDED_SECURITY = 0x80000000
191 };
192 
193 enum {
194 	RapNetShareEnum = 0,
195 	RapNetShareGetInfo = 1,
196 	RapNetServerGetInfo = 13,
197 	RapNetWkstaGetInfo = 63,
198 	RapNetServerEnum2 = 104,
199 };
200 
201 enum {
202 	SMB_RAP_NERR_SUCCESS = 0,
203 	SMB_RAP_ERROR_MORE_DATA = 234,
204 };
205 
206 enum {
207 	STYPE_DISKTREE,
208 	STYPE_PRINTQ,
209 	STYPE_DEVICE,
210 	STYPE_IPC
211 };
212 
213 enum {
214 	SV_TYPE_WORKSTATION = 0x00000001,
215 	SV_TYPE_SERVER = 0x00000002,
216 	SV_TYPE_SQLSERVER = 0x00000004,
217 	SV_TYPE_DOMAIN_CTRL = 0x00000008,
218 	SV_TYPE_DOMAIN_BAKCTRL = 0x00000010,
219 	SV_TYPE_TIME_SOURCE = 0x00000020,
220 	SV_TYPE_AFP = 0x00000040,
221 	SV_TYPE_NOVELL = 0x00000080,
222 	SV_TYPE_DOMAIN_MEMBER = 0x00000100,
223 	SV_TYPE_PRINTQ_SERVER = 0x00000200,
224 	SV_TYPE_DIALIN_SERVER = 0x00000400,
225 	SV_TYPE_SERVER_UNIX = 0x00000800,
226 	SV_TYPE_NT = 0x00001000,
227 	SV_TYPE_WFW = 0x00002000,
228 	SV_TYPE_SERVER_MFPN = 0x00004000,
229 	SV_TYPE_SERVER_NT = 0x00008000,
230 	SV_TYPE_POTENTIAL_BROWSER = 0x00010000,
231 	SV_TYPE_BACKUP_BROWSER = 0x00020000,
232 	SV_TYPE_MASTER_BROWSER = 0x00040000,
233 	SV_TYPE_DOMAIN_MASTER = 0x00080000,
234 	SV_TYPE_SERVER_OSF = 0x00100000,
235 	SV_TYPE_SERVER_VMS = 0x00200000,
236 	SV_TYPE_WIN95_PLUS = 0x00400000,
237 	SV_TYPE_DFS_SERVER = 0x00800000,
238 	SV_TYPE_ALTERNATE_XPORT = 0x20000000,
239 	SV_TYPE_LOCAL_LIST_ONLY = 0x40000000,
240 	SV_TYPE_DOMAIN_ENUM = 0x80000000,
241 	SV_TYPE_ALL = 0xFFFFFFFF,
242 };
243 
244 enum {
245 	SMB_TRANS2_OPEN = 0,
246 	SMB_TRANS2_FIND_FIRST2 = 1,
247 	SMB_TRANS2_FIND_NEXT2 = 2,
248 	SMB_TRANS2_QUERY_FS_INFORMATION = 3,
249 	SMB_TRANS2_SET_FS_INFORMATION = 4,
250 	SMB_TRANS2_QUERY_PATH_INFORMATION = 5,
251 	SMB_TRANS2_SET_PATH_INFORMATION = 6,
252 	SMB_TRANS2_QUERY_FILE_INFORMATION = 7,
253 	SMB_TRANS2_SET_FILE_INFORMATION = 8,
254 	SMB_TRANS2_FSCTL = 9,
255 	SMB_TRANS2_IOCTL2 = 0xA,
256 	SMB_TRANS2_FIND_NOTIFY_FIRST = 0xB,
257 	SMB_TRANS2_FIND_NOTIFY_NEXT = 0xC,
258 	SMB_TRANS2_CREATE_DIRECTORY = 0xD,
259 	SMB_TRANS2_SESSION_SETUP = 0xE,
260 	SMB_TRANS2_GET_DFS_REFERRAL = 0x10,
261 	SMB_TRANS2_REPORT_DFS_INCONSISTENCY = 0x11,
262 };
263 
264 enum {
265 	SMB_FIND_CLOSE = 1,
266 	SMB_FIND_CLOSE_EOS = 2,
267 	SMB_FIND_RETURN_RESUME_KEYS = 4,
268 	SMB_FIND_CONTINUE = 8,
269 	SMB_FIND_BACKUP = 16
270 };
271 
272 enum {
273 	SMB_INFO_STANDARD = 1,
274 	SMB_FIND_FILE_BOTH_DIRECTORY_INFO = 0x104,
275 	SMB_QUERY_FILE_BASIC_INFO = 0x101,
276 	SMB_QUERY_FILE_STANDARD_INFO = 0x102,
277 	SMB_QUERY_FILE_EA_INFO = 0x103,
278 	SMB_QUERY_FILE_ALL_INFO = 0x107,
279 	SMB_QUERY_FILE_STREAM_INFO = 0x109,
280 };
281 
282 enum {
283 	SMB_SET_FILE_BASIC_INFO = 0x101,
284 	SMB_SET_FILE_DISPOSITION_INFO = 0x102,
285 	SMB_SET_FILE_ALLOCATION_INFO = 0x103,
286 	SMB_SET_FILE_END_OF_FILE_INFO = 0x104,
287 };
288 
289 enum {
290 	SMB_ATTR_READ_ONLY = (1 << 0),
291 	SMB_ATTR_HIDDEN = (1 << 1),
292 	SMB_ATTR_SYSTEM = (1 << 2),
293 	SMB_ATTR_DIRECTORY = (1 << 4),
294 	SMB_ATTR_ARCHIVE = (1 << 5),
295 	SMB_ATTR_NORMAL = (1 << 7),
296 	SMB_ATTR_COMPRESSED = 0x800,
297 	SMB_ATTR_TEMPORARY = 0x100,
298 	SMB_ATTR_WRITETHROUGH = 0x80000000,
299 	SMB_ATTR_NO_BUFFERING = 0x20000000,
300 	SMB_ATTR_RANDOM_ACCESS = 0x10000000,
301 };
302 
303 enum {
304 	SMB_OFUN_EXIST_SHIFT = 0,
305 	SMB_OFUN_EXIST_MASK = 3,
306 	SMB_OFUN_EXIST_FAIL = 0,
307 	SMB_OFUN_EXIST_OPEN = 1,
308 	SMB_OFUN_EXIST_TRUNCATE = 2,
309 	SMB_OFUN_NOEXIST_CREATE = (1 << 4),
310 };
311 
312 enum {
313 	SMB_OPEN_FLAGS_ADDITIONAL = 1,
314 	SMB_OPEN_FLAGS_OPLOCK = 2,
315 	SMB_OPEN_FLAGS_OPBATCH = 4,
316 	SMB_OPEN_MODE_ACCESS_SHIFT = 0,
317 	SMB_OPEN_MODE_ACCESS_MASK = 7,
318 	SMB_OPEN_MODE_SHARE_SHIFT = 4,
319 	SMB_OPEN_MODE_SHARE_MASK = 7,
320 	SMB_OPEN_MODE_SHARE_COMPATIBILITY  = 0,
321 	SMB_OPEN_MODE_SHARE_EXCLUSIVE = 1,
322 	SMB_OPEN_MODE_SHARE_DENY_WRITE = 2,
323 	SMB_OPEN_MODE_SHARE_DENY_READOREXEC = 3,
324 	SMB_OPEN_MODE_SHARE_DENY_NONE = 4,
325 	SMB_OPEN_MODE_WRITE_THROUGH = (1 << 14),
326 };
327 
328 enum {
329 	SMB_INFO_ALLOCATION = 1,
330 	SMB_INFO_VOLUME = 2,
331 	SMB_QUERY_FS_VOLUME_INFO = 0x102,
332 	SMB_QUERY_FS_SIZE_INFO = 0x103,
333 	SMB_QUERY_FS_ATTRIBUTE_INFO = 0x105,
334 };
335 
336 enum {
337 	SMB_CD_SUPERCEDE = 0,
338 	SMB_CD_OPEN = 1,
339 	SMB_CD_CREATE = 2,
340 	SMB_CD_OPEN_IF = 3,
341 	SMB_CD_OVERWRITE = 4,
342 	SMB_CD_OVERWRITE_IF = 5,
343 	SMB_CD_MAX = 5,
344 };
345 
346 enum {
347 	SMB_DA_SPECIFIC_MASK = 0x0000ffff,
348 	SMB_DA_SPECIFIC_READ_DATA = 0x00000001,
349 	SMB_DA_SPECIFIC_WRITE_DATA = 0x00000002,
350 	SMB_DA_SPECIFIC_APPEND_DATA = 0x00000004,
351 	SMB_DA_SPECIFIC_READ_EA = 0x00000008,
352 	SMB_DA_SPECIFIC_WRITE_EA = 0x00000010,
353 	SMB_DA_SPECIFIC_EXECUTE = 0x00000020,
354 	SMB_DA_SPECIFIC_DELETE_CHILD = 0x00000040,
355 	SMB_DA_SPECIFIC_READ_ATTRIBUTES = 0x00000080,
356 	SMB_DA_SPECIFIC_WRITE_ATTRIBUTES = 0x00000100,
357 	SMB_DA_STANDARD_MASK = 0x00ff0000,
358 	SMB_DA_STANDARD_DELETE_ACCESS = 0x00010000,
359 	SMB_DA_STANDARD_READ_CONTROL_ACCESS = 0x00020000,
360 	SMB_DA_STANDARD_WRITE_DAC_ACCESS = 0x00040000,
361 	SMB_DA_STANDARD_WRITE_OWNER_ACCESS = 0x00080000,
362 	SMB_DA_STANDARD_SYNCHRONIZE_ACCESS = 0x00100000,
363 	SMB_DA_GENERIC_MASK = 0xf0000000,
364 	SMB_DA_GENERIC_ALL_ACCESS = 0x10000000,
365 	SMB_DA_GENERIC_EXECUTE_ACCESS = 0x20000000,
366 	SMB_DA_GENERIC_WRITE_ACCESS = 0x40000000,
367 	SMB_DA_GENERIC_READ_ACCESS = 0x80000000
368 };
369 
370 enum {
371 	SMB_SA_NO_SHARE = 0x00000000,
372 	SMB_SA_SHARE_READ = 0x00000001,
373 	SMB_SA_SHARE_WRITE = 0x00000002,
374 	SMB_SA_SHARE_DELETE = 0x00000004,
375 };
376 
377 enum {
378 	SMB_CO_DIRECTORY = 0x00000001,
379 	SMB_CO_WRITETHROUGH = 0x00000002,
380 	SMB_CO_SEQUENTIAL_ONLY = 0x00000004,
381 	SMB_CO_FILE = 0x00000040,
382 	SMB_CO_NO_EA_KNOWLEDGE = 0x00000200,
383 	SMB_CO_EIGHT_DOT_THREE_ONLY = 0x00000400,
384 	SMB_CO_RANDOM_ACCESS = 0x00000800,
385 	SMB_CO_DELETE_ON_CLOSE = 0x00001000,
386 };
387 
388