2 Unix SMB/CIFS implementation.
3 SMB request interface structures
4 Copyright (C) Andrew Tridgell 2003
5 Copyright (C) James J Myers 2003 <myersjj@samba.org>
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 /* Globally Unique ID */
26 /* 64 bit time (100 nanosec) 1601 - cifs6.txt, section 3.5, page 30 */
27 typedef uint64_t NTTIME;
29 /* 8 byte aligned 'hyper' type from MS IDL */
30 typedef uint64_t HYPER_T;
34 /* this structure is just a wrapper for a string, the only reason we
35 bother with this is that it allows us to check the length provided
36 on the wire in testsuite test code to ensure that we are
37 terminating names in the same way that win2003 is. The *ONLY* time
38 you should ever look at the 'private_length' field in this
39 structure is inside compliance test code, in all other cases just
40 use the null terminated char* as the definitive definition of the
43 also note that this structure is only used in packets where there
44 is an explicit length provided on the wire (hence the name). That
45 length is placed in 'private_length'. For packets where the length
46 is always determined by NULL or packet termination a normal char*
47 is used in the structure definition.
50 uint32_t private_length;
56 this header defines the structures and unions used between the SMB
57 parser and the backends.
60 /* struct used for SMBlseek call */
65 int32_t offset; /* signed */
73 /* struct used in unlink() call */
82 /* struct used in chkpath() call */
89 enum mkdir_level {RAW_MKDIR_GENERIC, RAW_MKDIR_MKDIR, RAW_MKDIR_T2MKDIR};
91 /* union used in mkdir() call */
95 enum mkdir_level level;
99 enum mkdir_level level;
106 enum mkdir_level level;
110 struct ea_struct *eas;
115 /* struct used in rmdir() call */
122 /* struct used in rename() call */
123 enum rename_level {RAW_RENAME_RENAME, RAW_RENAME_NTRENAME};
127 enum rename_level level;
130 /* SMBrename interface */
132 enum rename_level level;
135 const char *pattern1;
136 const char *pattern2;
142 /* SMBntrename interface */
144 enum rename_level level;
148 uint16_t flags; /* see RENAME_FLAG_* */
149 uint32_t cluster_size;
150 const char *old_name;
151 const char *new_name;
156 enum tcon_level {RAW_TCON_TCON, RAW_TCON_TCONX};
158 /* union used in tree connect call */
160 /* generic interface */
162 enum tcon_level level;
165 /* SMBtcon interface */
167 enum tcon_level level;
171 const char *password;
180 /* SMBtconX interface */
182 enum tcon_level level;
200 enum sesssetup_level {RAW_SESSSETUP_GENERIC, RAW_SESSSETUP_OLD, RAW_SESSSETUP_NT1, RAW_SESSSETUP_SPNEGO};
202 /* union used in session_setup call */
203 union smb_sesssetup {
205 /* generic interface - used for auto selecting based on negotiated
208 enum sesssetup_level level;
212 uint32_t capabilities;
213 const char *password;
225 /* the pre-NT1 interface */
227 enum sesssetup_level level;
249 /* the NT1 interface */
251 enum sesssetup_level level;
258 uint32_t capabilities;
276 /* the SPNEGO interface */
278 enum sesssetup_level level;
285 uint32_t capabilities;
302 /* Note that the specified enum values are identical to the actual info-levels used
305 enum fileinfo_level {RAW_FILEINFO_GENERIC = 0xF000,
306 RAW_FILEINFO_GETATTR, /* SMBgetatr */
307 RAW_FILEINFO_GETATTRE, /* SMBgetattrE */
308 RAW_FILEINFO_STANDARD = SMB_QFILEINFO_STANDARD,
309 RAW_FILEINFO_EA_SIZE = SMB_QFILEINFO_EA_SIZE,
310 RAW_FILEINFO_ALL_EAS = SMB_QFILEINFO_ALL_EAS,
311 RAW_FILEINFO_IS_NAME_VALID = SMB_QFILEINFO_IS_NAME_VALID,
312 RAW_FILEINFO_BASIC_INFO = SMB_QFILEINFO_BASIC_INFO,
313 RAW_FILEINFO_STANDARD_INFO = SMB_QFILEINFO_STANDARD_INFO,
314 RAW_FILEINFO_EA_INFO = SMB_QFILEINFO_EA_INFO,
315 RAW_FILEINFO_NAME_INFO = SMB_QFILEINFO_NAME_INFO,
316 RAW_FILEINFO_ALL_INFO = SMB_QFILEINFO_ALL_INFO,
317 RAW_FILEINFO_ALT_NAME_INFO = SMB_QFILEINFO_ALT_NAME_INFO,
318 RAW_FILEINFO_STREAM_INFO = SMB_QFILEINFO_STREAM_INFO,
319 RAW_FILEINFO_COMPRESSION_INFO = SMB_QFILEINFO_COMPRESSION_INFO,
320 RAW_FILEINFO_UNIX_BASIC = SMB_QFILEINFO_UNIX_BASIC,
321 RAW_FILEINFO_UNIX_LINK = SMB_QFILEINFO_UNIX_LINK,
322 RAW_FILEINFO_BASIC_INFORMATION = SMB_QFILEINFO_BASIC_INFORMATION,
323 RAW_FILEINFO_STANDARD_INFORMATION = SMB_QFILEINFO_STANDARD_INFORMATION,
324 RAW_FILEINFO_INTERNAL_INFORMATION = SMB_QFILEINFO_INTERNAL_INFORMATION,
325 RAW_FILEINFO_EA_INFORMATION = SMB_QFILEINFO_EA_INFORMATION,
326 RAW_FILEINFO_ACCESS_INFORMATION = SMB_QFILEINFO_ACCESS_INFORMATION,
327 RAW_FILEINFO_NAME_INFORMATION = SMB_QFILEINFO_NAME_INFORMATION,
328 RAW_FILEINFO_POSITION_INFORMATION = SMB_QFILEINFO_POSITION_INFORMATION,
329 RAW_FILEINFO_MODE_INFORMATION = SMB_QFILEINFO_MODE_INFORMATION,
330 RAW_FILEINFO_ALIGNMENT_INFORMATION = SMB_QFILEINFO_ALIGNMENT_INFORMATION,
331 RAW_FILEINFO_ALL_INFORMATION = SMB_QFILEINFO_ALL_INFORMATION,
332 RAW_FILEINFO_ALT_NAME_INFORMATION = SMB_QFILEINFO_ALT_NAME_INFORMATION,
333 RAW_FILEINFO_STREAM_INFORMATION = SMB_QFILEINFO_STREAM_INFORMATION,
334 RAW_FILEINFO_COMPRESSION_INFORMATION = SMB_QFILEINFO_COMPRESSION_INFORMATION,
335 RAW_FILEINFO_NETWORK_OPEN_INFORMATION = SMB_QFILEINFO_NETWORK_OPEN_INFORMATION,
336 RAW_FILEINFO_ATTRIBUTE_TAG_INFORMATION = SMB_QFILEINFO_ATTRIBUTE_TAG_INFORMATION
340 /* union used in qfileinfo() and qpathinfo() backend calls */
342 /* generic interface:
343 * matches RAW_FILEINFO_GENERIC */
345 enum fileinfo_level level;
347 /* each level can be called on either a pathname or a
348 * filename, in either case the return format is
350 union smb_fileinfo_in {
373 WIRE_STRING alt_fname;
374 uint8_t delete_pending;
376 uint64_t compressed_size;
380 uint8_t cluster_shift;
382 uint32_t access_flags; /* seen 0x001f01ff from w2k3 */
385 uint32_t alignment_requirement;
386 uint32_t reparse_tag;
388 struct stream_struct {
391 WIRE_STRING stream_name;
397 /* SMBgetatr interface:
398 * matches RAW_FILEINFO_GETATTR */
400 enum fileinfo_level level;
401 union smb_fileinfo_in in;
410 /* SMBgetattrE interface */
412 enum fileinfo_level level;
413 union smb_fileinfo_in in;
425 /* trans2 RAW_FILEINFO_STANDARD interface */
427 enum fileinfo_level level;
428 union smb_fileinfo_in in;
440 /* trans2 RAW_FILEINFO_EA_SIZE interface */
442 enum fileinfo_level level;
443 union smb_fileinfo_in in;
456 /* trans2 RAW_FILEINFO_ALL_EAS interface */
458 enum fileinfo_level level;
459 union smb_fileinfo_in in;
462 /* the ea_size is implied by the list */
464 struct ea_struct *eas;
468 /* trans2 qpathinfo RAW_FILEINFO_IS_NAME_VALID interface
469 only valid for a QPATHNAME call - no returned data */
471 enum fileinfo_level level;
472 union smb_fileinfo_in in;
475 /* RAW_FILEINFO_BASIC_INFO and RAW_FILEINFO_BASIC_INFORMATION interfaces */
477 enum fileinfo_level level;
478 union smb_fileinfo_in in;
490 /* RAW_FILEINFO_STANDARD_INFO and RAW_FILEINFO_STANDARD_INFORMATION interfaces */
492 enum fileinfo_level level;
493 union smb_fileinfo_in in;
504 /* RAW_FILEINFO_EA_INFO and RAW_FILEINFO_EA_INFORMATION interfaces */
506 enum fileinfo_level level;
507 union smb_fileinfo_in in;
514 /* RAW_FILEINFO_NAME_INFO and RAW_FILEINFO_NAME_INFORMATION interfaces */
516 enum fileinfo_level level;
517 union smb_fileinfo_in in;
524 /* RAW_FILEINFO_ALL_INFO and RAW_FILEINFO_ALL_INFORMATION interfaces */
526 enum fileinfo_level level;
527 union smb_fileinfo_in in;
538 uint8_t delete_pending;
545 /* RAW_FILEINFO_ALT_NAME_INFO and RAW_FILEINFO_ALT_NAME_INFORMATION interfaces */
547 enum fileinfo_level level;
548 union smb_fileinfo_in in;
555 /* RAW_FILEINFO_STREAM_INFO and RAW_FILEINFO_STREAM_INFORMATION interfaces */
557 enum fileinfo_level level;
558 union smb_fileinfo_in in;
562 struct stream_struct *streams;
566 /* RAW_FILEINFO_COMPRESSION_INFO and RAW_FILEINFO_COMPRESSION_INFORMATION interfaces */
568 enum fileinfo_level level;
569 union smb_fileinfo_in in;
572 uint64_t compressed_size;
576 uint8_t cluster_shift;
580 /* RAW_FILEINFO_UNIX_BASIC interface */
582 enum fileinfo_level level;
583 union smb_fileinfo_in in;
586 uint64_t end_of_file;
588 NTTIME status_change_time;
597 uint64_t permissions;
602 /* RAW_FILEINFO_UNIX_LINK interface */
604 enum fileinfo_level level;
605 union smb_fileinfo_in in;
608 WIRE_STRING link_dest;
612 /* RAW_FILEINFO_INTERNAL_INFORMATION interface */
614 enum fileinfo_level level;
615 union smb_fileinfo_in in;
620 } internal_information;
622 /* RAW_FILEINFO_ACCESS_INFORMATION interface */
624 enum fileinfo_level level;
625 union smb_fileinfo_in in;
628 uint32_t access_flags; /* seen 0x001f01ff from w2k3 */
630 } access_information;
632 /* RAW_FILEINFO_POSITION_INFORMATION interface */
634 enum fileinfo_level level;
635 union smb_fileinfo_in in;
640 } position_information;
642 /* RAW_FILEINFO_MODE_INFORMATION interface */
644 enum fileinfo_level level;
645 union smb_fileinfo_in in;
652 /* RAW_FILEINFO_ALIGNMENT_INFORMATION interface */
654 enum fileinfo_level level;
655 union smb_fileinfo_in in;
658 uint32_t alignment_requirement;
660 } alignment_information;
662 /* RAW_FILEINFO_NETWORK_OPEN_INFORMATION interface */
664 enum fileinfo_level level;
665 union smb_fileinfo_in in;
676 } network_open_information;
679 /* RAW_FILEINFO_ATTRIBUTE_TAG_INFORMATION interface */
681 enum fileinfo_level level;
682 union smb_fileinfo_in in;
686 uint32_t reparse_tag;
688 } attribute_tag_information;
692 enum setfileinfo_level {
693 RAW_SFILEINFO_GENERIC = 0xF000,
694 RAW_SFILEINFO_SETATTR, /* SMBsetatr */
695 RAW_SFILEINFO_SETATTRE, /* SMBsetattrE */
696 RAW_SFILEINFO_STANDARD = SMB_SFILEINFO_STANDARD,
697 RAW_SFILEINFO_EA_SET = SMB_SFILEINFO_EA_SET,
698 RAW_SFILEINFO_BASIC_INFO = SMB_SFILEINFO_BASIC_INFO,
699 RAW_SFILEINFO_DISPOSITION_INFO = SMB_SFILEINFO_DISPOSITION_INFO,
700 RAW_SFILEINFO_ALLOCATION_INFO = SMB_SFILEINFO_ALLOCATION_INFO,
701 RAW_SFILEINFO_END_OF_FILE_INFO = SMB_SFILEINFO_END_OF_FILE_INFO,
702 RAW_SFILEINFO_UNIX_BASIC = SMB_SFILEINFO_UNIX_BASIC,
703 RAW_SFILEINFO_UNIX_LINK = SMB_SFILEINFO_UNIX_LINK,
704 RAW_SFILEINFO_UNIX_HLINK = SMB_SFILEINFO_UNIX_HLINK,
705 RAW_SFILEINFO_BASIC_INFORMATION = SMB_SFILEINFO_BASIC_INFORMATION,
706 RAW_SFILEINFO_RENAME_INFORMATION = SMB_SFILEINFO_RENAME_INFORMATION,
707 RAW_SFILEINFO_DISPOSITION_INFORMATION = SMB_SFILEINFO_DISPOSITION_INFORMATION,
708 RAW_SFILEINFO_POSITION_INFORMATION = SMB_SFILEINFO_POSITION_INFORMATION,
709 RAW_SFILEINFO_MODE_INFORMATION = SMB_SFILEINFO_MODE_INFORMATION,
710 RAW_SFILEINFO_ALLOCATION_INFORMATION = SMB_SFILEINFO_ALLOCATION_INFORMATION,
711 RAW_SFILEINFO_END_OF_FILE_INFORMATION = SMB_SFILEINFO_END_OF_FILE_INFORMATION,
712 RAW_SFILEINFO_1023 = SMB_SFILEINFO_1023,
713 RAW_SFILEINFO_1025 = SMB_SFILEINFO_1025,
714 RAW_SFILEINFO_1029 = SMB_SFILEINFO_1029,
715 RAW_SFILEINFO_1032 = SMB_SFILEINFO_1032,
716 RAW_SFILEINFO_1039 = SMB_SFILEINFO_1039,
717 RAW_SFILEINFO_1040 = SMB_SFILEINFO_1040
720 /* union used in setfileinfo() and setpathinfo() calls */
721 union smb_setfileinfo {
722 /* generic interface */
724 enum setfileinfo_level level;
726 /* we are combining setfileinfo and setpathinfo into one
728 union setfileinfo_file {
734 /* RAW_SFILEINFO_SETATTR (SMBsetatr) interface - only via setpathinfo() */
736 enum setfileinfo_level level;
737 union setfileinfo_file file;
744 /* RAW_SFILEINFO_SETATTRE (SMBsetattrE) interface - only via setfileinfo() */
746 enum setfileinfo_level level;
747 union setfileinfo_file file;
757 /* RAW_SFILEINFO_STANDARD interface */
759 enum setfileinfo_level level;
760 union setfileinfo_file file;
765 /* notice that size, alloc_size and attrib are not settable,
766 unlike the corresponding qfileinfo level */
770 /* RAW_SFILEINFO_EA_SET interface */
772 enum setfileinfo_level level;
773 union setfileinfo_file file;
779 /* RAW_SFILEINFO_BASIC_INFO and
780 RAW_SFILEINFO_BASIC_INFORMATION interfaces */
782 enum setfileinfo_level level;
783 union setfileinfo_file file;
794 /* RAW_SFILEINFO_DISPOSITION_INFO and
795 RAW_SFILEINFO_DISPOSITION_INFORMATION interfaces */
797 enum setfileinfo_level level;
798 union setfileinfo_file file;
801 BOOL delete_on_close;
805 /* RAW_SFILEINFO_ALLOCATION_INFO and
806 RAW_SFILEINFO_ALLOCATION_INFORMATION interfaces */
808 enum setfileinfo_level level;
809 union setfileinfo_file file;
812 /* w2k3 rounds this up to nearest 4096 */
817 /* RAW_SFILEINFO_END_OF_FILE_INFO and
818 RAW_SFILEINFO_END_OF_FILE_INFORMATION interfaces */
820 enum setfileinfo_level level;
821 union setfileinfo_file file;
828 /* RAW_SFILEINFO_RENAME_INFORMATION interface */
830 enum setfileinfo_level level;
831 union setfileinfo_file file;
836 const char *new_name;
838 } rename_information;
840 /* RAW_SFILEINFO_POSITION_INFORMATION interface */
842 enum setfileinfo_level level;
843 union setfileinfo_file file;
848 } position_information;
850 /* RAW_SFILEINFO_MODE_INFORMATION interface */
852 enum setfileinfo_level level;
853 union setfileinfo_file file;
856 /* valid values seem to be 0, 2, 4 and 6 */
863 /* RAW_SFILEINFO_UNIX_BASIC interface */
865 enum setfileinfo_level level;
866 union setfileinfo_file file;
868 uint32_t mode; /* yuck - this field remains to fix compile of libcli/clifile.c */
869 uint64_t end_of_file;
871 NTTIME status_change_time;
880 uint64_t permissions;
885 /* RAW_SFILEINFO_UNIX_LINK, RAW_SFILEINFO_UNIX_HLINK interface */
887 enum setfileinfo_level level;
888 union setfileinfo_file file;
890 const char *link_dest;
892 } unix_link, unix_hlink;
896 enum fsinfo_level {RAW_QFS_GENERIC = 0xF000,
897 RAW_QFS_DSKATTR, /* SMBdskattr */
898 RAW_QFS_ALLOCATION = SMB_QFS_ALLOCATION,
899 RAW_QFS_VOLUME = SMB_QFS_VOLUME,
900 RAW_QFS_VOLUME_INFO = SMB_QFS_VOLUME_INFO,
901 RAW_QFS_SIZE_INFO = SMB_QFS_SIZE_INFO,
902 RAW_QFS_DEVICE_INFO = SMB_QFS_DEVICE_INFO,
903 RAW_QFS_ATTRIBUTE_INFO = SMB_QFS_ATTRIBUTE_INFO,
904 RAW_QFS_UNIX_INFO = SMB_QFS_UNIX_INFO,
905 RAW_QFS_VOLUME_INFORMATION = SMB_QFS_VOLUME_INFORMATION,
906 RAW_QFS_SIZE_INFORMATION = SMB_QFS_SIZE_INFORMATION,
907 RAW_QFS_DEVICE_INFORMATION = SMB_QFS_DEVICE_INFORMATION,
908 RAW_QFS_ATTRIBUTE_INFORMATION = SMB_QFS_ATTRIBUTE_INFORMATION,
909 RAW_QFS_QUOTA_INFORMATION = SMB_QFS_QUOTA_INFORMATION,
910 RAW_QFS_FULL_SIZE_INFORMATION = SMB_QFS_FULL_SIZE_INFORMATION,
911 RAW_QFS_OBJECTID_INFORMATION = SMB_QFS_OBJECTID_INFORMATION};
914 /* union for fsinfo() backend call. Note that there are no in
915 structures, as this call only contains out parameters */
917 /* generic interface */
919 enum fsinfo_level level;
923 uint64_t blocks_total;
924 uint64_t blocks_free;
927 uint32_t serial_number;
929 uint32_t max_file_component_length;
930 uint32_t device_type;
931 uint32_t device_characteristics;
934 uint64_t quota_flags;
941 /* SMBdskattr interface */
943 enum fsinfo_level level;
946 uint16_t units_total;
947 uint16_t blocks_per_unit;
953 /* trans2 RAW_QFS_ALLOCATION interface */
955 enum fsinfo_level level;
959 uint32_t sectors_per_unit;
960 uint32_t total_alloc_units;
961 uint32_t avail_alloc_units;
962 uint16_t bytes_per_sector;
966 /* TRANS2 RAW_QFS_VOLUME interface */
968 enum fsinfo_level level;
971 uint32_t serial_number;
972 WIRE_STRING volume_name;
976 /* TRANS2 RAW_QFS_VOLUME_INFO and RAW_QFS_VOLUME_INFORMATION interfaces */
978 enum fsinfo_level level;
982 uint32_t serial_number;
983 WIRE_STRING volume_name;
987 /* trans2 RAW_QFS_SIZE_INFO and RAW_QFS_SIZE_INFORMATION interfaces */
989 enum fsinfo_level level;
992 uint64_t total_alloc_units;
993 uint64_t avail_alloc_units; /* maps to call_avail_alloc_units */
994 uint32_t sectors_per_unit;
995 uint32_t bytes_per_sector;
999 /* TRANS2 RAW_QFS_DEVICE_INFO and RAW_QFS_DEVICE_INFORMATION interfaces */
1001 enum fsinfo_level level;
1004 uint32_t device_type;
1005 uint32_t characteristics;
1010 /* TRANS2 RAW_QFS_ATTRIBUTE_INFO and RAW_QFS_ATTRIBUTE_INFORMATION interfaces */
1012 enum fsinfo_level level;
1016 uint32_t max_file_component_length;
1017 WIRE_STRING fs_type;
1022 /* TRANS2 RAW_QFS_UNIX_INFO interface */
1024 enum fsinfo_level level;
1027 uint16_t major_version;
1028 uint16_t minor_version;
1029 uint64_t capability;
1033 /* trans2 RAW_QFS_QUOTA_INFORMATION interface */
1035 enum fsinfo_level level;
1038 uint64_t unknown[3];
1039 uint64_t quota_soft;
1040 uint64_t quota_hard;
1041 uint64_t quota_flags;
1043 } quota_information;
1045 /* trans2 RAW_QFS_FULL_SIZE_INFORMATION interface */
1047 enum fsinfo_level level;
1050 uint64_t total_alloc_units;
1051 uint64_t call_avail_alloc_units;
1052 uint64_t actual_avail_alloc_units;
1053 uint32_t sectors_per_unit;
1054 uint32_t bytes_per_sector;
1056 } full_size_information;
1058 /* trans2 RAW_QFS_OBJECTID_INFORMATION interface */
1060 enum fsinfo_level level;
1064 uint64_t unknown[6];
1066 } objectid_information;
1071 enum open_level {RAW_OPEN_OPEN, RAW_OPEN_OPENX,
1072 RAW_OPEN_MKNEW, RAW_OPEN_CREATE,
1073 RAW_OPEN_CTEMP, RAW_OPEN_SPLOPEN,
1074 RAW_OPEN_NTCREATEX, RAW_OPEN_T2OPEN};
1076 /* the generic interface is defined to be equal to the NTCREATEX interface */
1077 #define RAW_OPEN_GENERIC RAW_OPEN_NTCREATEX
1079 /* union for open() backend call */
1081 /* SMBNTCreateX interface */
1083 enum open_level level;
1088 uint32_t access_mask;
1089 uint64_t alloc_size;
1091 uint32_t share_access;
1092 uint32_t open_disposition;
1093 uint32_t create_options;
1094 uint32_t impersonation;
1095 uint8_t security_flags;
1100 uint8_t oplock_level;
1102 uint32_t create_action;
1108 uint64_t alloc_size;
1112 uint8_t is_directory;
1114 } ntcreatex, generic;
1116 /* TRANS2_OPEN interface */
1118 enum open_level level;
1123 uint16_t file_attrs;
1130 struct ea_struct *eas;
1146 /* SMBopen interface */
1148 enum open_level level;
1152 uint16_t search_attrs;
1164 /* SMBopenX interface */
1166 enum open_level level;
1171 uint16_t search_attrs; /* not honoured by win2003 */
1172 uint16_t file_attrs;
1173 time_t write_time; /* not honoured by win2003 */
1175 uint32_t size; /* note that this sets the
1176 initial file size, not
1177 just allocation size */
1178 uint32_t timeout; /* not honoured by win2003 */
1190 uint32_t unique_fid;
1191 uint32_t access_mask;
1196 /* SMBmknew interface */
1198 enum open_level level;
1210 /* SMBctemp interface */
1212 enum open_level level;
1217 const char *directory;
1221 /* temp name, relative to directory */
1226 /* SMBsplopen interface */
1228 enum open_level level;
1231 uint16_t setup_length;
1243 enum read_level {RAW_READ_GENERIC, RAW_READ_READBRAW, RAW_READ_LOCKREAD, RAW_READ_READ, RAW_READ_READX};
1245 /* union for read() backend call
1247 note that .infoX.out.data will be allocated before the backend is
1248 called. It will be big enough to hold the maximum size asked for
1251 /* generic interface */
1253 enum read_level level;
1267 /* SMBreadbraw interface */
1269 enum read_level level;
1285 /* SMBlockandread interface */
1287 enum read_level level;
1301 /* SMBread interface */
1303 enum read_level level;
1317 /* SMBreadX interface */
1319 enum read_level level;
1331 uint16_t compaction_mode;
1338 enum write_level {RAW_WRITE_GENERIC, RAW_WRITE_WRITEUNLOCK, RAW_WRITE_WRITE,
1339 RAW_WRITE_WRITEX, RAW_WRITE_WRITECLOSE, RAW_WRITE_SPLWRITE};
1341 /* union for write() backend call
1344 /* generic interface */
1346 enum write_level level;
1360 /* SMBwriteunlock interface */
1362 enum write_level level;
1376 /* SMBwrite interface */
1378 enum write_level level;
1392 /* SMBwriteX interface */
1394 enum write_level level;
1410 /* SMBwriteclose interface */
1412 enum write_level level;
1426 /* SMBsplwrite interface */
1428 enum write_level level;
1439 enum lock_level {RAW_LOCK_GENERIC, RAW_LOCK_LOCK, RAW_LOCK_UNLOCK, RAW_LOCK_LOCKX};
1441 /* union for lock() backend call
1444 /* generic interface */
1446 enum lock_level level;
1450 /* SMBlock interface */
1452 enum lock_level level;
1461 /* SMBunlock interface */
1463 enum lock_level level;
1472 /* SMBlockingX interface */
1474 enum lock_level level;
1482 struct smb_lock_entry {
1486 } *locks; /* unlocks are first in the arrray */
1492 enum close_enum {RAW_CLOSE_GENERIC, RAW_CLOSE_CLOSE, RAW_CLOSE_SPLCLOSE};
1495 union for close() backend call
1498 /* generic interface */
1500 enum close_enum level;
1507 /* SMBclose interface */
1509 enum close_enum level;
1517 /* SMBsplclose interface - empty! */
1519 enum close_enum level;
1528 enum lpq_level {RAW_LPQ_GENERIC, RAW_LPQ_RETQ};
1531 union for lpq() backend
1534 /* generic interface */
1536 enum lpq_level level;
1541 /* SMBsplretq interface */
1543 enum lpq_level level;
1551 uint16_t restart_idx;
1563 enum ioctl_level {RAW_IOCTL_IOCTL, RAW_IOCTL_NTIOCTL};
1566 union for ioctl() backend
1569 /* generic interface */
1571 enum ioctl_level level;
1575 /* struct for SMBioctl */
1577 enum ioctl_level level;
1588 /* struct for NT ioctl call */
1590 enum ioctl_level level;
1603 /* struct for SMBflush */
1611 /* struct for SMBcopy */
1626 /* struct for transact/transact2 call */
1634 uint8_t setup_count;
1636 const char *trans_name; /* SMBtrans only */
1642 uint8_t setup_count;
1649 /* struct for nttransact2 call */
1650 struct smb_nttrans {
1655 uint32_t setup_count;
1663 uint8_t setup_count;
1671 /* struct for nttrans change notify call */
1674 uint32_t buffer_size;
1675 uint32_t completion_filter;
1681 uint32_t num_changes;
1690 enum search_level {RAW_SEARCH_GENERIC = 0xF000,
1691 RAW_SEARCH_SEARCH, /* SMBsearch */
1692 RAW_SEARCH_FCLOSE, /* SMBfclose */
1693 RAW_SEARCH_STANDARD = SMB_FIND_STANDARD,
1694 RAW_SEARCH_EA_SIZE = SMB_FIND_EA_SIZE,
1695 RAW_SEARCH_DIRECTORY_INFO = SMB_FIND_DIRECTORY_INFO,
1696 RAW_SEARCH_FULL_DIRECTORY_INFO = SMB_FIND_FULL_DIRECTORY_INFO,
1697 RAW_SEARCH_NAME_INFO = SMB_FIND_NAME_INFO,
1698 RAW_SEARCH_BOTH_DIRECTORY_INFO = SMB_FIND_BOTH_DIRECTORY_INFO,
1699 RAW_SEARCH_ID_FULL_DIRECTORY_INFO = SMB_FIND_ID_FULL_DIRECTORY_INFO,
1700 RAW_SEARCH_ID_BOTH_DIRECTORY_INFO = SMB_FIND_ID_BOTH_DIRECTORY_INFO,
1701 RAW_SEARCH_UNIX_INFO = SMB_FIND_UNIX_INFO};
1704 /* union for file search */
1705 union smb_search_first {
1707 enum search_level level;
1710 /* search (old) findfirst interface */
1712 enum search_level level;
1716 uint16_t search_attrib;
1717 const char *pattern;
1724 /* trans2 findfirst interface */
1726 enum search_level level;
1729 uint16_t search_attrib;
1732 uint32_t storage_type;
1733 const char *pattern;
1738 uint16_t end_of_search;
1743 /* union for file search continue */
1744 union smb_search_next {
1746 enum search_level level;
1749 /* search (old) findnext interface */
1751 enum search_level level;
1755 uint16_t search_attrib;
1756 DATA_BLOB search_id;
1763 /* trans2 findnext interface */
1765 enum search_level level;
1770 uint32_t resume_key;
1772 const char *last_name;
1776 uint16_t end_of_search;
1781 /* union for search reply file data */
1782 union smb_search_data {
1783 /* search (old) findfirst */
1788 DATA_BLOB search_id; /* used to resume search from this point */
1792 /* trans2 findfirst RAW_SEARCH_STANDARD level */
1794 uint32_t resume_key;
1799 uint32_t alloc_size;
1804 /* trans2 findfirst RAW_SEARCH_EA_SIZE level */
1806 uint32_t resume_key;
1811 uint32_t alloc_size;
1817 /* RAW_SEARCH_DIRECTORY_INFO interface */
1819 uint32_t file_index;
1825 uint64_t alloc_size;
1830 /* RAW_SEARCH_FULL_DIRECTORY_INFO interface */
1832 uint32_t file_index;
1838 uint64_t alloc_size;
1842 } full_directory_info;
1844 /* RAW_SEARCH_NAME_INFO interface */
1846 uint32_t file_index;
1850 /* RAW_SEARCH_BOTH_DIRECTORY_INFO interface */
1852 uint32_t file_index;
1858 uint64_t alloc_size;
1861 WIRE_STRING short_name;
1863 } both_directory_info;
1865 /* RAW_SEARCH_ID_FULL_DIRECTORY_INFO interface */
1867 uint32_t file_index;
1873 uint64_t alloc_size;
1878 } id_full_directory_info;
1880 /* RAW_SEARCH_ID_BOTH_DIRECTORY_INFO interface */
1882 uint32_t file_index;
1888 uint64_t alloc_size;
1892 WIRE_STRING short_name;
1894 } id_both_directory_info;
1896 /* RAW_SEARCH_UNIX_INFO interface */
1898 uint32_t file_index;
1900 uint64_t alloc_size;
1901 NTTIME status_change_time;
1910 uint64_t permissions;
1917 enum search_close_level {RAW_FINDCLOSE_GENERIC, RAW_FINDCLOSE_CLOSE};
1919 /* union for file search close */
1920 union smb_search_close {
1922 enum search_close_level level;
1925 /* SMBfclose (old search) interface */
1927 enum search_level level;
1931 uint16_t search_attrib;
1932 DATA_BLOB search_id;
1939 /* SMBfindclose interface */
1941 enum search_close_level level;