[GLUE] Rsync SAMBA_3_2_0 SVN r25598 in order to create the v3-2-test branch.
[sfrench/samba-autobuild/.git] / source3 / include / trans2.h
1 /* 
2    Unix SMB/CIFS implementation.
3    SMB transaction2 handling
4
5    Copyright (C) James Peach 2007
6    Copyright (C) Jeremy Allison 1994-2002.
7
8    Extensively modified by Andrew Tridgell, 1995
9
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 3 of the License, or
13    (at your option) any later version.
14    
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19    
20    You should have received a copy of the GNU General Public License
21    along with this program.  If not, see <http://www.gnu.org/licenses/>.
22 */
23
24 #ifndef _TRANS2_H_
25 #define _TRANS2_H_
26
27 /* Define the structures needed for the trans2 calls. */
28
29 /*******************************************************
30  For DosFindFirst/DosFindNext - level 1
31
32 MAXFILENAMELEN = 255;
33 FDATE == uint16
34 FTIME == uint16
35 ULONG == uint32
36 USHORT == uint16
37
38 typedef struct _FILEFINDBUF {
39 Byte offset   Type     name                description
40 -------------+-------+-------------------+--------------
41 0             FDATE    fdateCreation;
42 2             FTIME    ftimeCreation;
43 4             FDATE    fdateLastAccess;
44 6             FTIME    ftimeLastAccess;
45 8             FDATE    fdateLastWrite;
46 10            FTIME    ftimeLastWrite;
47 12            ULONG    cbFile               file length in bytes
48 16            ULONG    cbFileAlloc          size of file allocation unit
49 20            USHORT   attrFile
50 22            UCHAR    cchName              length of name to follow (not including zero)
51 23            UCHAR    achName[MAXFILENAMELEN]; Null terminated name
52 } FILEFINDBUF;
53 *********************************************************/
54
55 #define l1_fdateCreation 0
56 #define l1_fdateLastAccess 4
57 #define l1_fdateLastWrite 8
58 #define l1_cbFile 12
59 #define l1_cbFileAlloc 16
60 #define l1_attrFile 20
61 #define l1_cchName 22
62 #define l1_achName 23
63
64 /**********************************************************
65 For DosFindFirst/DosFindNext - level 2
66
67 typedef struct _FILEFINDBUF2 {
68 Byte offset   Type     name                description
69 -------------+-------+-------------------+--------------
70 0             FDATE    fdateCreation;
71 2             FTIME    ftimeCreation;
72 4             FDATE    fdateLastAccess;
73 6             FTIME    ftimeLastAccess;
74 8             FDATE    fdateLastWrite;
75 10            FTIME    ftimeLastWrite;
76 12            ULONG    cbFile               file length in bytes
77 16            ULONG    cbFileAlloc          size of file allocation unit
78 20            USHORT   attrFile
79 22            ULONG    cbList               Extended attribute list (always 0)
80 26            UCHAR    cchName              length of name to follow (not including zero)
81 27            UCHAR    achName[MAXFILENAMELEN]; Null terminated name
82 } FILEFINDBUF2;
83 *************************************************************/
84
85 #define l2_fdateCreation 0
86 #define l2_fdateLastAccess 4
87 #define l2_fdateLastWrite 8
88 #define l2_cbFile 12
89 #define l2_cbFileAlloc 16
90 #define l2_attrFile 20
91 #define l2_cbList 22
92 #define l2_cchName 26
93 #define l2_achName 27
94
95
96 /**********************************************************
97 For DosFindFirst/DosFindNext - level 260
98
99 typedef struct _FILEFINDBUF260 {
100 Byte offset   Type     name                description
101 -------------+-------+-------------------+--------------
102 0              ULONG  NextEntryOffset;
103 4              ULONG  FileIndex;
104 8              LARGE_INTEGER CreationTime;
105 16             LARGE_INTEGER LastAccessTime;
106 24             LARGE_INTEGER LastWriteTime;
107 32             LARGE_INTEGER ChangeTime;
108 40             LARGE_INTEGER EndOfFile;
109 48             LARGE_INTEGER AllocationSize;
110 56             ULONG FileAttributes;
111 60             ULONG FileNameLength;
112 64             ULONG EaSize;
113 68             CHAR ShortNameLength;
114 70             UNICODE ShortName[12];
115 94             UNICODE FileName[];
116 *************************************************************/
117
118 #define l260_achName 94
119
120
121 /**********************************************************
122 For DosQueryPathInfo/DosQueryFileInfo/DosSetPathInfo/
123 DosSetFileInfo - level 1
124
125 typedef struct _FILESTATUS {
126 Byte offset   Type     name                description
127 -------------+-------+-------------------+--------------
128 0             FDATE    fdateCreation;
129 2             FTIME    ftimeCreation;
130 4             FDATE    fdateLastAccess;
131 6             FTIME    ftimeLastAccess;
132 8             FDATE    fdateLastWrite;
133 10            FTIME    ftimeLastWrite;
134 12            ULONG    cbFile               file length in bytes
135 16            ULONG    cbFileAlloc          size of file allocation unit
136 20            USHORT   attrFile
137 } FILESTATUS;
138 *************************************************************/
139
140 /* Use the l1_ defines from DosFindFirst */
141
142 /**********************************************************
143 For DosQueryPathInfo/DosQueryFileInfo/DosSetPathInfo/
144 DosSetFileInfo - level 2
145
146 typedef struct _FILESTATUS2 {
147 Byte offset   Type     name                description
148 -------------+-------+-------------------+--------------
149 0             FDATE    fdateCreation;
150 2             FTIME    ftimeCreation;
151 4             FDATE    fdateLastAccess;
152 6             FTIME    ftimeLastAccess;
153 8             FDATE    fdateLastWrite;
154 10            FTIME    ftimeLastWrite;
155 12            ULONG    cbFile               file length in bytes
156 16            ULONG    cbFileAlloc          size of file allocation unit
157 20            USHORT   attrFile
158 22            ULONG    cbList               Length of EA's (0)
159 } FILESTATUS2;
160 *************************************************************/
161
162 /* Use the l2_ #defines from DosFindFirst */
163
164 /**********************************************************
165 For DosQFSInfo/DosSetFSInfo - level 1
166
167 typedef struct _FSALLOCATE {
168 Byte offset   Type     name                description
169 -------------+-------+-------------------+--------------
170 0             ULONG    idFileSystem       id of file system
171 4             ULONG    cSectorUnit        number of sectors per allocation unit
172 8             ULONG    cUnit              number of allocation units
173 12            ULONG    cUnitAvail         Available allocation units
174 16            USHORT   cbSector           bytes per sector
175 } FSALLOCATE;
176 *************************************************************/
177
178 #define l1_idFileSystem 0
179 #define l1_cSectorUnit 4
180 #define l1_cUnit 8
181 #define l1_cUnitAvail 12
182 #define l1_cbSector 16
183
184 /**********************************************************
185 For DosQFSInfo/DosSetFSInfo - level 2
186
187 typedef struct _FSINFO {
188 Byte offset   Type     name                description
189 -------------+-------+-------------------+--------------
190 0             FDATE   vol_fdateCreation
191 2             FTIME   vol_ftimeCreation
192 4             UCHAR   vol_cch             length of volume name (excluding NULL)
193 5             UCHAR   vol_szVolLabel[12]  volume name
194 } FSINFO;
195 *************************************************************/
196
197 #define SMB_INFO_STANDARD               1  /* FILESTATUS3 struct */
198 #define SMB_INFO_SET_EA                 2  /* EAOP2 struct, only valid on set not query */
199 #define SMB_INFO_QUERY_EA_SIZE          2  /* FILESTATUS4 struct, only valid on query not set */
200 #define SMB_INFO_QUERY_EAS_FROM_LIST    3  /* only valid on query not set */
201 #define SMB_INFO_QUERY_ALL_EAS          4  /* only valid on query not set */
202 #define SMB_INFO_IS_NAME_VALID          6
203 #define SMB_INFO_STANDARD_LONG          11  /* similar to level 1, ie struct FileStatus3 */
204 #define SMB_QUERY_EA_SIZE_LONG          12  /* similar to level 2, ie struct FileStatus4 */
205 #define SMB_QUERY_FS_LABEL_INFO         0x101
206 #define SMB_QUERY_FS_VOLUME_INFO        0x102
207 #define SMB_QUERY_FS_SIZE_INFO          0x103
208 #define SMB_QUERY_FS_DEVICE_INFO        0x104
209 #define SMB_QUERY_FS_ATTRIBUTE_INFO     0x105
210 #if 0
211 #define SMB_QUERY_FS_QUOTA_INFO         
212 #endif
213
214 #define l2_vol_fdateCreation 0
215 #define l2_vol_cch 4
216 #define l2_vol_szVolLabel 5
217
218
219 #define SMB_QUERY_FILE_BASIC_INFO       0x101
220 #define SMB_QUERY_FILE_STANDARD_INFO    0x102
221 #define SMB_QUERY_FILE_EA_INFO          0x103
222 #define SMB_QUERY_FILE_NAME_INFO        0x104
223 #define SMB_QUERY_FILE_ALLOCATION_INFO  0x105
224 #define SMB_QUERY_FILE_END_OF_FILEINFO  0x106
225 #define SMB_QUERY_FILE_ALL_INFO         0x107
226 #define SMB_QUERY_FILE_ALT_NAME_INFO    0x108
227 #define SMB_QUERY_FILE_STREAM_INFO      0x109
228 #define SMB_QUERY_COMPRESSION_INFO      0x10b
229
230 #define SMB_FIND_INFO_STANDARD                  1
231 #define SMB_FIND_EA_SIZE                        2
232 #define SMB_FIND_EA_LIST                        3
233 #define SMB_FIND_FILE_DIRECTORY_INFO            0x101
234 #define SMB_FIND_FILE_FULL_DIRECTORY_INFO       0x102
235 #define SMB_FIND_FILE_NAMES_INFO                0x103
236 #define SMB_FIND_FILE_BOTH_DIRECTORY_INFO       0x104
237 #define SMB_FIND_ID_FULL_DIRECTORY_INFO         0x105
238 #define SMB_FIND_ID_BOTH_DIRECTORY_INFO         0x106
239
240 #define SMB_SET_FILE_BASIC_INFO         0x101
241 #define SMB_SET_FILE_DISPOSITION_INFO   0x102
242 #define SMB_SET_FILE_ALLOCATION_INFO    0x103
243 #define SMB_SET_FILE_END_OF_FILE_INFO   0x104
244
245 /* Query FS info. */
246 #define SMB_INFO_ALLOCATION             1
247 #define SMB_INFO_VOLUME                 2
248
249 /*
250  * Thursby MAC extensions....
251  */
252
253 /*
254  * MAC CIFS Extensions have the range 0x300 - 0x2FF reserved.
255  * Supposedly Microsoft have agreed to this.
256  */
257
258 #define MIN_MAC_INFO_LEVEL 0x300
259 #define MAX_MAC_INFO_LEVEL 0x3FF
260
261 #define SMB_MAC_QUERY_FS_INFO           0x301
262
263 #define DIRLEN_GUESS (45+MAX(l1_achName,l2_achName))
264
265 /*
266  * DeviceType and Characteristics returned in a
267  * SMB_QUERY_FS_DEVICE_INFO call.
268  */
269
270 #define DEVICETYPE_CD_ROM               0x2
271 #define DEVICETYPE_CD_ROM_FILE_SYSTEM   0x3
272 #define DEVICETYPE_DISK                 0x7
273 #define DEVICETYPE_DISK_FILE_SYSTEM     0x8
274 #define DEVICETYPE_FILE_SYSTEM          0x9
275
276 /* Characteristics. */
277 #define TYPE_REMOVABLE_MEDIA            0x1
278 #define TYPE_READ_ONLY_DEVICE           0x2
279 #define TYPE_FLOPPY                     0x4
280 #define TYPE_WORM                       0x8
281 #define TYPE_REMOTE                     0x10
282 #define TYPE_MOUNTED                    0x20
283 #define TYPE_VIRTUAL                    0x40
284
285 /* NT passthrough levels... */
286
287 #define SMB_FILE_DIRECTORY_INFORMATION                  1001
288 #define SMB_FILE_FULL_DIRECTORY_INFORMATION             1002
289 #define SMB_FILE_BOTH_DIRECTORY_INFORMATION             1003
290 #define SMB_FILE_BASIC_INFORMATION                      1004
291 #define SMB_FILE_STANDARD_INFORMATION                   1005
292 #define SMB_FILE_INTERNAL_INFORMATION                   1006
293 #define SMB_FILE_EA_INFORMATION                         1007
294 #define SMB_FILE_ACCESS_INFORMATION                     1008
295 #define SMB_FILE_NAME_INFORMATION                       1009
296 #define SMB_FILE_RENAME_INFORMATION                     1010
297 #define SMB_FILE_LINK_INFORMATION                       1011
298 #define SMB_FILE_NAMES_INFORMATION                      1012
299 #define SMB_FILE_DISPOSITION_INFORMATION                1013
300 #define SMB_FILE_POSITION_INFORMATION                   1014
301 #define SMB_FILE_FULL_EA_INFORMATION                    1015
302 #define SMB_FILE_MODE_INFORMATION                       1016
303 #define SMB_FILE_ALIGNMENT_INFORMATION                  1017
304 #define SMB_FILE_ALL_INFORMATION                        1018
305 #define SMB_FILE_ALLOCATION_INFORMATION                 1019
306 #define SMB_FILE_END_OF_FILE_INFORMATION                1020
307 #define SMB_FILE_ALTERNATE_NAME_INFORMATION             1021
308 #define SMB_FILE_STREAM_INFORMATION                     1022
309 #define SMB_FILE_PIPE_INFORMATION                       1023
310 #define SMB_FILE_PIPE_LOCAL_INFORMATION                 1024
311 #define SMB_FILE_PIPE_REMOTE_INFORMATION                1025
312 #define SMB_FILE_MAILSLOT_QUERY_INFORMATION             1026
313 #define SMB_FILE_MAILSLOT_SET_INFORMATION               1027
314 #define SMB_FILE_COMPRESSION_INFORMATION                1028
315 #define SMB_FILE_OBJECTID_INFORMATION                   1029
316 #define SMB_FILE_COMPLETION_INFORMATION                 1030
317 #define SMB_FILE_MOVE_CLUSTER_INFORMATION               1031
318 #define SMB_FILE_QUOTA_INFORMATION                      1032
319 #define SMB_FILE_REPARSEPOINT_INFORMATION               1033
320 #define SMB_FILE_NETWORK_OPEN_INFORMATION               1034
321 #define SMB_FILE_ATTRIBUTE_TAG_INFORMATION              1035
322 #define SMB_FILE_TRACKING_INFORMATION                   1036
323 #define SMB_FILE_MAXIMUM_INFORMATION                    1037
324
325 /* NT passthough levels for qfsinfo. */
326
327 #define SMB_FS_VOLUME_INFORMATION                       1001
328 #define SMB_FS_LABEL_INFORMATION                        1002
329 #define SMB_FS_SIZE_INFORMATION                         1003
330 #define SMB_FS_DEVICE_INFORMATION                       1004
331 #define SMB_FS_ATTRIBUTE_INFORMATION                    1005
332 #define SMB_FS_QUOTA_INFORMATION                        1006
333 #define SMB_FS_FULL_SIZE_INFORMATION                    1007
334 #define SMB_FS_OBJECTID_INFORMATION                     1008
335
336 /* flags on trans2 findfirst/findnext that control search */
337 #define FLAG_TRANS2_FIND_CLOSE          0x1
338 #define FLAG_TRANS2_FIND_CLOSE_IF_END   0x2
339 #define FLAG_TRANS2_FIND_REQUIRE_RESUME 0x4
340 #define FLAG_TRANS2_FIND_CONTINUE       0x8
341 #define FLAG_TRANS2_FIND_BACKUP_INTENT  0x10
342
343 /* UNIX CIFS Extensions - created by HP */
344 /*
345  * UNIX CIFS Extensions have the range 0x200 - 0x2FF reserved.
346  * Supposedly Microsoft have agreed to this.
347  */
348
349 #define MIN_UNIX_INFO_LEVEL 0x200
350 #define MAX_UNIX_INFO_LEVEL 0x2FF
351
352 #define INFO_LEVEL_IS_UNIX(level) (((level) >= MIN_UNIX_INFO_LEVEL) && ((level) <= MAX_UNIX_INFO_LEVEL))
353
354 #define SMB_QUERY_FILE_UNIX_BASIC      0x200   /* UNIX File Info*/
355 #define SMB_SET_FILE_UNIX_BASIC        0x200
356 #define SMB_SET_FILE_UNIX_INFO2        0x20B   /* UNIX File Info2 */
357
358 #define SMB_MODE_NO_CHANGE                 0xFFFFFFFF     /* file mode value which */
359                                               /* means "don't change it" */
360 #define SMB_UID_NO_CHANGE                  0xFFFFFFFF
361 #define SMB_GID_NO_CHANGE                  0xFFFFFFFF
362
363 #define SMB_SIZE_NO_CHANGE_LO              0xFFFFFFFF
364 #define SMB_SIZE_NO_CHANGE_HI              0xFFFFFFFF
365  
366 #define SMB_TIME_NO_CHANGE_LO              0xFFFFFFFF
367 #define SMB_TIME_NO_CHANGE_HI              0xFFFFFFFF
368
369 /*
370 Offset Size         Name
371 0      LARGE_INTEGER EndOfFile                File size
372 8      LARGE_INTEGER Blocks                   Number of bytes used on disk (st_blocks).
373 16     LARGE_INTEGER CreationTime             Creation time
374 24     LARGE_INTEGER LastAccessTime           Last access time
375 32     LARGE_INTEGER LastModificationTime     Last modification time
376 40     LARGE_INTEGER Uid                      Numeric user id for the owner
377 48     LARGE_INTEGER Gid                      Numeric group id of owner
378 56     ULONG Type                             Enumeration specifying the pathname type:
379                                               0 -- File
380                                               1 -- Directory
381                                               2 -- Symbolic link
382                                               3 -- Character device
383                                               4 -- Block device
384                                               5 -- FIFO (named pipe)
385                                               6 -- Unix domain socket
386
387 60     LARGE_INTEGER devmajor                 Major device number if type is device
388 68     LARGE_INTEGER devminor                 Minor device number if type is device
389 76     LARGE_INTEGER uniqueid                 This is a server-assigned unique id for the file. The client
390                                               will typically map this onto an inode number. The scope of
391                                               uniqueness is the share.
392 84     LARGE_INTEGER permissions              Standard UNIX file permissions  - see below.
393 92     LARGE_INTEGER nlinks                   The number of directory entries that map to this entry
394                                               (number of hard links)
395
396 100 - end.
397 */
398
399 #define SMB_FILE_UNIX_BASIC_SIZE 100
400
401 /* UNIX filetype mappings. */
402
403 #define UNIX_TYPE_FILE 0
404 #define UNIX_TYPE_DIR 1
405 #define UNIX_TYPE_SYMLINK 2
406 #define UNIX_TYPE_CHARDEV 3
407 #define UNIX_TYPE_BLKDEV 4
408 #define UNIX_TYPE_FIFO 5
409 #define UNIX_TYPE_SOCKET 6
410 #define UNIX_TYPE_UNKNOWN 0xFFFFFFFF
411
412 /*
413  * Oh this is fun. "Standard UNIX permissions" has no
414  * meaning in POSIX. We need to define the mapping onto
415  * and off the wire as this was not done in the original HP
416  * spec. JRA.
417  */
418
419 #define UNIX_X_OTH                      0000001
420 #define UNIX_W_OTH                      0000002
421 #define UNIX_R_OTH                      0000004
422 #define UNIX_X_GRP                      0000010
423 #define UNIX_W_GRP                      0000020
424 #define UNIX_R_GRP                      0000040
425 #define UNIX_X_USR                      0000100
426 #define UNIX_W_USR                      0000200
427 #define UNIX_R_USR                      0000400
428 #define UNIX_STICKY                     0001000
429 #define UNIX_SET_GID                    0002000
430 #define UNIX_SET_UID                    0004000
431
432 /* Masks for the above */
433 #define UNIX_OTH_MASK                   0000007
434 #define UNIX_GRP_MASK                   0000070
435 #define UNIX_USR_MASK                   0000700
436 #define UNIX_PERM_MASK                  0000777
437 #define UNIX_EXTRA_MASK                 0007000
438 #define UNIX_ALL_MASK                   0007777
439
440 /* Flags for chflags (CIFS_UNIX_EXTATTR_CAP capability) and
441  * SMB_QUERY_FILE_UNIX_INFO2.
442  */
443 #define EXT_SECURE_DELETE               0x00000001
444 #define EXT_ENABLE_UNDELETE             0x00000002
445 #define EXT_SYNCHRONOUS                 0x00000004
446 #define EXT_IMMUTABLE                   0x00000008
447 #define EXT_OPEN_APPEND_ONLY            0x00000010
448 #define EXT_DO_NOT_BACKUP               0x00000020
449 #define EXT_NO_UPDATE_ATIME             0x00000040
450 #define EXT_HIDDEN                      0x00000080
451
452 #define SMB_QUERY_FILE_UNIX_LINK       0x201
453 #define SMB_SET_FILE_UNIX_LINK         0x201
454 #define SMB_SET_FILE_UNIX_HLINK        0x203
455 /* SMB_QUERY_POSIX_ACL 0x204 see below */
456 #define SMB_QUERY_XATTR                0x205 /* need for non-user XATTRs */
457 #define SMB_QUERY_ATTR_FLAGS           0x206 /* chflags, chattr */
458 #define SMB_SET_ATTR_FLAGS             0x206 
459 #define SMB_QUERY_POSIX_PERMISSION     0x207
460 /* Only valid for qfileinfo */
461 #define SMB_QUERY_POSIX_LOCK           0x208
462 /* Only valid for setfileinfo */
463 #define SMB_SET_POSIX_LOCK             0x208
464
465 /* The set info levels for POSIX path operations. */
466 #define SMB_POSIX_PATH_OPEN            0x209
467 #define SMB_POSIX_PATH_UNLINK          0x20A
468
469 #define SMB_QUERY_FILE_UNIX_INFO2      0x20B   /* UNIX File Info2 */
470 #define SMB_SET_FILE_UNIX_INFO2        0x20B
471
472 /*
473 SMB_QUERY_FILE_UNIX_INFO2 is SMB_QUERY_FILE_UNIX_BASIC with create
474 time and file flags appended. The corresponding info level for
475 findfirst/findnext is SMB_FIND_FILE_UNIX_INFO2.
476     Size    Offset  Value
477     ---------------------
478     0      LARGE_INTEGER EndOfFile  File size
479     8      LARGE_INTEGER Blocks     Number of blocks used on disk
480     16     LARGE_INTEGER ChangeTime Attribute change time
481     24     LARGE_INTEGER LastAccessTime           Last access time
482     32     LARGE_INTEGER LastModificationTime     Last modification time
483     40     LARGE_INTEGER Uid        Numeric user id for the owner
484     48     LARGE_INTEGER Gid        Numeric group id of owner
485     56     ULONG Type               Enumeration specifying the file type
486     60     LARGE_INTEGER devmajor   Major device number if type is device
487     68     LARGE_INTEGER devminor   Minor device number if type is device
488     76     LARGE_INTEGER uniqueid   This is a server-assigned unique id
489     84     LARGE_INTEGER permissions            Standard UNIX permissions
490     92     LARGE_INTEGER nlinks                 Number of hard links
491     100    LARGE_INTEGER CreationTime           Create/birth time
492     108    ULONG FileFlags          File flags enumeration
493     112    ULONG FileFlagsMask      Mask of valid flags
494 */
495
496 /* Transact 2 Find First levels */
497 #define SMB_FIND_FILE_UNIX             0x202
498 #define SMB_FIND_FILE_UNIX_INFO2       0x20B /* UNIX File Info2 */
499
500 #define SMB_FILE_UNIX_INFO2_SIZE 116
501
502 /*
503  Info level for TRANS2_QFSINFO - returns version of CIFS UNIX extensions, plus
504  64-bits worth of capability fun :-).
505  Use the same info level for TRANS2_SETFSINFO
506 */
507
508 #define SMB_QUERY_CIFS_UNIX_INFO      0x200
509 #define SMB_SET_CIFS_UNIX_INFO        0x200
510
511 /* Returns or sets the following.
512
513   UINT16             major version number
514   UINT16             minor version number
515   LARGE_INTEGER      capability bitfield
516
517 */
518
519 #define CIFS_UNIX_MAJOR_VERSION 1
520 #define CIFS_UNIX_MINOR_VERSION 0
521
522 #define CIFS_UNIX_FCNTL_LOCKS_CAP           0x1
523 #define CIFS_UNIX_POSIX_ACLS_CAP            0x2
524 #define CIFS_UNIX_XATTTR_CAP                0x4 /* for support of other xattr
525                                                 namespaces such as system,
526                                                 security and trusted */
527 #define CIFS_UNIX_EXTATTR_CAP               0x8 /* for support of chattr
528                                                 (chflags) and lsattr */
529 #define CIFS_UNIX_POSIX_PATHNAMES_CAP      0x10 /* Use POSIX pathnames on the wire. */
530 #define CIFS_UNIX_POSIX_PATH_OPERATIONS_CAP        0x20 /* We can cope with POSIX open/mkdir/unlink etc. */
531 #define CIFS_UNIX_LARGE_READ_CAP           0x40 /* We can cope with 24 bit reads in readX. */
532 #define CIFS_UNIX_LARGE_WRITE_CAP          0x80 /* We can cope with 24 bit writes in writeX. */
533
534
535 #define SMB_QUERY_POSIX_FS_INFO     0x201
536
537 /* Returns FILE_SYSTEM_POSIX_INFO struct as follows
538       (NB   For undefined values return -1 in that field) 
539    le32 OptimalTransferSize;    bsize on some os, iosize on other os, This 
540                                 is a hint to the client about best size. Server
541                                 can return -1 if no preference, ie if SMB 
542                                 negotiated size is adequate for optimal
543                                 read/write performance
544    le32 BlockSize; (often 512 bytes) NB: BlockSize * TotalBlocks = disk space
545    le64 TotalBlocks;  redundant with other infolevels but easy to ret here
546    le64 BlocksAvail;  although redundant, easy to return
547    le64 UserBlocksAvail;      bavail 
548    le64 TotalFileNodes;
549    le64 FreeFileNodes;
550    le64 FileSysIdentifier;    fsid 
551    (NB statfs field Namelen comes from FILE_SYSTEM_ATTRIBUTE_INFO call) 
552    (NB statfs field flags can come from FILE_SYSTEM_DEVICE_INFO call)  
553 */
554
555 #define SMB_QUERY_POSIX_WHO_AM_I  0x202 /* QFS Info */
556 /* returns:
557         __u32 flags;  0 = Authenticated user 1 = GUEST 
558         __u32 mask;  which flags bits server understands ie 0x0001 
559         __u64 unix_user_id;
560         __u64 unix_user_gid;
561         __u32 number_of_supplementary_gids;  may be zero 
562         __u32 number_of_sids;  may be zero
563         __u32 length_of_sid_array;  in bytes - may be zero 
564         __u32 pad;  reserved - MBZ 
565         __u64 gid_array[0];  may be empty 
566         __u8 * psid_list  may be empty
567 */
568
569
570 /* ... more as we think of them :-). */
571
572 /* SMB POSIX ACL definitions. */
573 /* Wire format is (all little endian) :
574
575 [2 bytes]              -     Version number.
576 [2 bytes]              -     Number of ACE entries to follow.
577 [2 bytes]              -     Number of default ACE entries to follow.
578 -------------------------------------
579 ^
580 |
581 ACE entries
582 |
583 v
584 -------------------------------------
585 ^
586 |
587 Default ACE entries
588 |
589 v
590 -------------------------------------
591
592 Where an ACE entry looks like :
593
594 [1 byte]           - Entry type.
595
596 Entry types are :
597
598 ACL_USER_OBJ            0x01
599 ACL_USER                0x02
600 ACL_GROUP_OBJ           0x04
601 ACL_GROUP               0x08
602 ACL_MASK                0x10
603 ACL_OTHER               0x20
604
605 [1 byte]          - permissions (perm_t)
606
607 perm_t types are :
608
609 ACL_READ                0x04
610 ACL_WRITE               0x02
611 ACL_EXECUTE             0x01
612
613 [8 bytes]         - uid/gid to apply this permission to.
614
615 In the same format as the uid/gid fields in the other
616 UNIX extensions definitions. Use 0xFFFFFFFFFFFFFFFF for
617 the MASK and OTHER entry types.
618
619 If the Number of ACE entries for either file or default ACE's
620 is set to 0xFFFF this means ignore this kind of ACE (and the
621 number of entries sent will be zero.
622
623 */
624
625 #define SMB_QUERY_POSIX_WHOAMI     0x202
626
627 enum smb_whoami_flags {
628     SMB_WHOAMI_GUEST = 0x1 /* Logged in as (or squashed to) guest */
629 };
630
631 /* Mask of which WHOAMI bits are valid. This should make it easier for clients
632  * to cope with servers that have different sets of WHOAMI flags (as more get
633  * added).
634  */
635 #define SMB_WHOAMI_MASK 0x00000001
636
637 /*
638    SMBWhoami - Query the user mapping performed by the server for the
639    connected tree. This is a subcommand of the TRANS2_QFSINFO.
640
641    Returns:
642         4 bytes unsigned -      mapping flags (smb_whoami_flags)
643         4 bytes unsigned -      flags mask
644
645         8 bytes unsigned -      primary UID
646         8 bytes unsigned -      primary GID
647         4 bytes unsigned -      number of supplementary GIDs
648         4 bytes unsigned -      number of SIDs
649         4 bytes unsigned -      SID list byte count
650         4 bytes -               pad / reserved (must be zero)
651
652         8 bytes unsigned[] -    list of GIDs (may be empty)
653         DOM_SID[] -             list of SIDs (may be empty)
654 */
655
656 /* The query/set info levels for POSIX ACLs. */
657 #define SMB_QUERY_POSIX_ACL  0x204
658 #define SMB_SET_POSIX_ACL  0x204
659
660 /* Current on the wire ACL version. */
661 #define SMB_POSIX_ACL_VERSION 1
662
663 /* ACE entry type. */
664 #define SMB_POSIX_ACL_USER_OBJ            0x01
665 #define SMB_POSIX_ACL_USER                0x02
666 #define SMB_POSIX_ACL_GROUP_OBJ           0x04
667 #define SMB_POSIX_ACL_GROUP               0x08
668 #define SMB_POSIX_ACL_MASK                0x10
669 #define SMB_POSIX_ACL_OTHER               0x20
670
671 /* perm_t types. */
672 #define SMB_POSIX_ACL_READ                0x04
673 #define SMB_POSIX_ACL_WRITE               0x02
674 #define SMB_POSIX_ACL_EXECUTE             0x01
675
676 #define SMB_POSIX_ACL_HEADER_SIZE         6
677 #define SMB_POSIX_ACL_ENTRY_SIZE         10
678
679 #define SMB_POSIX_IGNORE_ACE_ENTRIES    0xFFFF
680
681 /* Definition of data block of SMB_SET_POSIX_LOCK */
682 /*
683   [2 bytes] lock_type - 0 = Read, 1 = Write, 2 = Unlock
684   [2 bytes] lock_flags - 1 = Wait (only valid for setlock)
685   [4 bytes] pid = locking context.
686   [8 bytes] start = unsigned 64 bits.
687   [8 bytes] length = unsigned 64 bits.
688 */
689
690 #define POSIX_LOCK_TYPE_OFFSET 0
691 #define POSIX_LOCK_FLAGS_OFFSET 2
692 #define POSIX_LOCK_PID_OFFSET 4
693 #define POSIX_LOCK_START_OFFSET 8
694 #define POSIX_LOCK_LEN_OFFSET 16
695 #define POSIX_LOCK_DATA_SIZE 24
696
697 #define POSIX_LOCK_FLAG_NOWAIT 0
698 #define POSIX_LOCK_FLAG_WAIT 1
699
700 #define POSIX_LOCK_TYPE_READ 0
701 #define POSIX_LOCK_TYPE_WRITE 1
702 #define POSIX_LOCK_TYPE_UNLOCK 2
703
704 /* SMB_POSIX_PATH_OPEN "open_mode" definitions. */
705 #define SMB_O_RDONLY                      0x1
706 #define SMB_O_WRONLY                      0x2
707 #define SMB_O_RDWR                        0x4
708
709 #define SMB_ACCMODE                       0x7
710
711 #define SMB_O_CREAT                      0x10
712 #define SMB_O_EXCL                       0x20
713 #define SMB_O_TRUNC                      0x40
714 #define SMB_O_APPEND                     0x80
715 #define SMB_O_SYNC                      0x100
716 #define SMB_O_DIRECTORY                 0x200
717 #define SMB_O_NOFOLLOW                  0x400
718 #define SMB_O_DIRECT                    0x800
719
720 /* Definition of request data block for SMB_POSIX_PATH_OPEN */
721 /*
722   [4 bytes] flags (as smb_ntcreate_Flags).
723   [4 bytes] open_mode                   - SMB_O_xxx flags above.
724   [8 bytes] mode_t (permissions)        - same encoding as "Standard UNIX permissions" above in SMB_SET_FILE_UNIX_BASIC.
725   [2 bytes] ret_info_level      - optimization. Info level to be returned.
726 */
727
728 /* Definition of reply data block for SMB_POSIX_PATH_OPEN */
729
730 #define SMB_NO_INFO_LEVEL_RETURNED 0xFFFF
731
732 /*
733   [2 bytes] - flags field. Identical to flags reply for oplock response field in SMBNTCreateX)
734   [2 bytes] - FID returned.
735   [4 bytes] - CreateAction (same as in NTCreateX response).
736   [2 bytes] - reply info level    - as requested or 0xFFFF if not available.
737   [2 bytes] - padding (must be zero)
738   [n bytes] - info level reply  - if available.
739 */
740
741 /* Definition of request data block for SMB_POSIX_UNLINK */
742 /*
743   [2 bytes] flags (defined below).
744 */
745
746 #define SMB_POSIX_UNLINK_FILE_TARGET 0
747 #define SMB_POSIX_UNLINK_DIRECTORY_TARGET 1
748
749 #endif