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>
6 Copyright (C) James Peach 2007
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
22 #ifndef __LIBCLI_RAW_INTERFACES_H__
23 #define __LIBCLI_RAW_INTERFACES_H__
26 #include "librpc/gen_ndr/misc.h" /* for struct GUID */
28 /* this structure is just a wrapper for a string, the only reason we
29 bother with this is that it allows us to check the length provided
30 on the wire in testsuite test code to ensure that we are
31 terminating names in the same way that win2003 is. The *ONLY* time
32 you should ever look at the 'private_length' field in this
33 structure is inside compliance test code, in all other cases just
34 use the null terminated char* as the definitive definition of the
37 also note that this structure is only used in packets where there
38 is an explicit length provided on the wire (hence the name). That
39 length is placed in 'private_length'. For packets where the length
40 is always determined by NULL or packet termination a normal char*
41 is used in the structure definition.
43 struct smb_wire_string {
44 uint32_t private_length;
49 * SMB2 uses a 16Byte handle,
50 * (we can maybe use struct GUID later)
59 * a generic container for file handles or file pathes
60 * for qfileinfo/setfileinfo and qpathinfo/setpathinfo
62 union smb_handle_or_path {
65 * the qpathinfo and setpathinfo
70 * this is used as file handle in SMB
75 * this is used as file handle in SMB2
77 struct smb2_handle handle;
80 * this is used as generic file handle for the NTVFS layer
82 struct ntvfs_handle *ntvfs;
86 a generic container for file handles
90 * this is used as file handle in SMB
95 * this is used as file handle in SMB2
97 struct smb2_handle handle;
100 * this is used as generic file handle for the NTVFS layer
102 struct ntvfs_handle *ntvfs;
106 this header defines the structures and unions used between the SMB
107 parser and the backends.
110 /* struct used for SMBlseek call */
114 union smb_handle file;
116 int32_t offset; /* signed */
124 /* struct used in unlink() call */
135 /* struct used in chkpath() call */
144 enum smb_mkdir_level {RAW_MKDIR_GENERIC, RAW_MKDIR_MKDIR, RAW_MKDIR_T2MKDIR};
146 /* union used in mkdir() call */
150 enum smb_mkdir_level level;
154 enum smb_mkdir_level level;
161 enum smb_mkdir_level level;
165 struct ea_struct *eas;
170 /* struct used in rmdir() call */
177 /* struct used in rename() call */
178 enum smb_rename_level {RAW_RENAME_RENAME, RAW_RENAME_NTRENAME, RAW_RENAME_NTTRANS};
182 enum smb_rename_level level;
185 /* SMBrename interface */
187 enum smb_rename_level level;
190 const char *pattern1;
191 const char *pattern2;
197 /* SMBntrename interface */
199 enum smb_rename_level level;
203 uint16_t flags; /* see RENAME_FLAG_* */
204 uint32_t cluster_size;
205 const char *old_name;
206 const char *new_name;
210 /* NT TRANS rename interface */
212 enum smb_rename_level level;
215 union smb_handle file;
216 uint16_t flags;/* see RENAME_REPLACE_IF_EXISTS */
217 const char *new_name;
222 enum smb_tcon_level {
228 /* union used in tree connect call */
230 /* generic interface */
232 enum smb_tcon_level level;
235 /* SMBtcon interface */
237 enum smb_tcon_level level;
241 const char *password;
250 /* SMBtconX interface */
252 enum smb_tcon_level level;
268 /* SMB2 TreeConnect */
269 struct smb2_tree_connect {
270 enum smb_tcon_level level;
273 /* static body buffer 8 (0x08) bytes */
275 /* uint16_t path_ofs */
276 /* uint16_t path_size */
278 const char *path; /* as non-terminated UTF-16 on the wire */
281 /* static body buffer 16 (0x10) bytes */
282 /* uint16_t buffer_code; 0x10 */
286 uint32_t capabilities;
287 uint32_t access_mask;
289 /* extracted from the SMB2 header */
296 enum smb_sesssetup_level {
299 RAW_SESSSETUP_SPNEGO,
303 /* union used in session_setup call */
304 union smb_sesssetup {
305 /* the pre-NT1 interface */
307 enum smb_sesssetup_level level;
329 /* the NT1 interface */
331 enum smb_sesssetup_level level;
338 uint32_t capabilities;
356 /* the SPNEGO interface */
358 enum smb_sesssetup_level level;
365 uint32_t capabilities;
369 const char *workgroup;
381 /* SMB2 SessionSetup */
382 struct smb2_session_setup {
383 enum smb_sesssetup_level level;
386 /* static body 24 (0x18) bytes */
388 uint8_t security_mode;
389 uint32_t capabilities;
391 /* uint16_t secblob_ofs */
392 /* uint16_t secblob_size */
393 uint64_t previous_sessionid;
398 /* body buffer 8 (0x08) bytes */
399 uint16_t session_flags;
400 /* uint16_t secblob_ofs */
401 /* uint16_t secblob_size */
405 /* extracted from the SMB2 header */
411 /* Note that the specified enum values are identical to the actual info-levels used
414 enum smb_fileinfo_level {
415 RAW_FILEINFO_GENERIC = 0xF000,
416 RAW_FILEINFO_GETATTR, /* SMBgetatr */
417 RAW_FILEINFO_GETATTRE, /* SMBgetattrE */
418 RAW_FILEINFO_SEC_DESC, /* NT_TRANSACT_QUERY_SECURITY_DESC */
419 RAW_FILEINFO_STANDARD = SMB_QFILEINFO_STANDARD,
420 RAW_FILEINFO_EA_SIZE = SMB_QFILEINFO_EA_SIZE,
421 RAW_FILEINFO_EA_LIST = SMB_QFILEINFO_EA_LIST,
422 RAW_FILEINFO_ALL_EAS = SMB_QFILEINFO_ALL_EAS,
423 RAW_FILEINFO_IS_NAME_VALID = SMB_QFILEINFO_IS_NAME_VALID,
424 RAW_FILEINFO_BASIC_INFO = SMB_QFILEINFO_BASIC_INFO,
425 RAW_FILEINFO_STANDARD_INFO = SMB_QFILEINFO_STANDARD_INFO,
426 RAW_FILEINFO_EA_INFO = SMB_QFILEINFO_EA_INFO,
427 RAW_FILEINFO_NAME_INFO = SMB_QFILEINFO_NAME_INFO,
428 RAW_FILEINFO_ALL_INFO = SMB_QFILEINFO_ALL_INFO,
429 RAW_FILEINFO_ALT_NAME_INFO = SMB_QFILEINFO_ALT_NAME_INFO,
430 RAW_FILEINFO_STREAM_INFO = SMB_QFILEINFO_STREAM_INFO,
431 RAW_FILEINFO_COMPRESSION_INFO = SMB_QFILEINFO_COMPRESSION_INFO,
432 RAW_FILEINFO_UNIX_BASIC = SMB_QFILEINFO_UNIX_BASIC,
433 RAW_FILEINFO_UNIX_INFO2 = SMB_QFILEINFO_UNIX_INFO2,
434 RAW_FILEINFO_UNIX_LINK = SMB_QFILEINFO_UNIX_LINK,
435 RAW_FILEINFO_BASIC_INFORMATION = SMB_QFILEINFO_BASIC_INFORMATION,
436 RAW_FILEINFO_STANDARD_INFORMATION = SMB_QFILEINFO_STANDARD_INFORMATION,
437 RAW_FILEINFO_INTERNAL_INFORMATION = SMB_QFILEINFO_INTERNAL_INFORMATION,
438 RAW_FILEINFO_EA_INFORMATION = SMB_QFILEINFO_EA_INFORMATION,
439 RAW_FILEINFO_ACCESS_INFORMATION = SMB_QFILEINFO_ACCESS_INFORMATION,
440 RAW_FILEINFO_NAME_INFORMATION = SMB_QFILEINFO_NAME_INFORMATION,
441 RAW_FILEINFO_POSITION_INFORMATION = SMB_QFILEINFO_POSITION_INFORMATION,
442 RAW_FILEINFO_MODE_INFORMATION = SMB_QFILEINFO_MODE_INFORMATION,
443 RAW_FILEINFO_ALIGNMENT_INFORMATION = SMB_QFILEINFO_ALIGNMENT_INFORMATION,
444 RAW_FILEINFO_ALL_INFORMATION = SMB_QFILEINFO_ALL_INFORMATION,
445 RAW_FILEINFO_ALT_NAME_INFORMATION = SMB_QFILEINFO_ALT_NAME_INFORMATION,
446 RAW_FILEINFO_STREAM_INFORMATION = SMB_QFILEINFO_STREAM_INFORMATION,
447 RAW_FILEINFO_COMPRESSION_INFORMATION = SMB_QFILEINFO_COMPRESSION_INFORMATION,
448 RAW_FILEINFO_NETWORK_OPEN_INFORMATION = SMB_QFILEINFO_NETWORK_OPEN_INFORMATION,
449 RAW_FILEINFO_ATTRIBUTE_TAG_INFORMATION = SMB_QFILEINFO_ATTRIBUTE_TAG_INFORMATION,
450 /* SMB2 specific levels */
451 RAW_FILEINFO_SMB2_ALL_EAS = 0x0f01,
452 RAW_FILEINFO_SMB2_ALL_INFORMATION = 0x1201
455 /* union used in qfileinfo() and qpathinfo() backend calls */
457 /* generic interface:
458 * matches RAW_FILEINFO_GENERIC */
460 enum smb_fileinfo_level level;
462 union smb_handle_or_path file;
470 struct smb_wire_string name;
480 struct smb_wire_string fname;
481 struct smb_wire_string alt_fname;
482 uint8_t delete_pending;
484 uint64_t compressed_size;
488 uint8_t cluster_shift;
490 uint32_t access_flags; /* seen 0x001f01ff from w2k3 */
493 uint32_t alignment_requirement;
494 uint32_t reparse_tag;
496 struct stream_struct {
499 struct smb_wire_string stream_name;
505 /* SMBgetatr interface:
506 * matches RAW_FILEINFO_GETATTR */
508 enum smb_fileinfo_level level;
510 union smb_handle_or_path file;
519 /* SMBgetattrE and RAW_FILEINFO_STANDARD interface */
521 enum smb_fileinfo_level level;
523 union smb_handle_or_path file;
533 } getattre, standard;
535 /* trans2 RAW_FILEINFO_EA_SIZE interface */
537 enum smb_fileinfo_level level;
539 union smb_handle_or_path file;
552 /* trans2 RAW_FILEINFO_EA_LIST interface */
554 enum smb_fileinfo_level level;
556 union smb_handle_or_path file;
559 struct smb_wire_string name;
565 struct ea_struct *eas;
569 /* trans2 RAW_FILEINFO_ALL_EAS and RAW_FILEINFO_FULL_EA_INFORMATION interfaces */
571 enum smb_fileinfo_level level;
573 union smb_handle_or_path file;
574 /* SMB2 only - SMB2_CONTINUE_FLAG_* */
575 uint8_t continue_flags;
577 struct smb_ea_list out;
580 /* trans2 qpathinfo RAW_FILEINFO_IS_NAME_VALID interface
581 only valid for a QPATHNAME call - no returned data */
583 enum smb_fileinfo_level level;
585 union smb_handle_or_path file;
589 /* RAW_FILEINFO_BASIC_INFO and RAW_FILEINFO_BASIC_INFORMATION interfaces */
591 enum smb_fileinfo_level level;
593 union smb_handle_or_path file;
605 /* RAW_FILEINFO_STANDARD_INFO and RAW_FILEINFO_STANDARD_INFORMATION interfaces */
607 enum smb_fileinfo_level level;
609 union smb_handle_or_path file;
620 /* RAW_FILEINFO_EA_INFO and RAW_FILEINFO_EA_INFORMATION interfaces */
622 enum smb_fileinfo_level level;
624 union smb_handle_or_path file;
631 /* RAW_FILEINFO_NAME_INFO and RAW_FILEINFO_NAME_INFORMATION interfaces */
633 enum smb_fileinfo_level level;
635 union smb_handle_or_path file;
638 struct smb_wire_string fname;
642 /* RAW_FILEINFO_ALL_INFO and RAW_FILEINFO_ALL_INFORMATION interfaces */
644 enum smb_fileinfo_level level;
646 union smb_handle_or_path file;
657 uint8_t delete_pending;
660 struct smb_wire_string fname;
664 /* RAW_FILEINFO_SMB2_ALL_INFORMATION interface */
666 enum smb_fileinfo_level level;
668 union smb_handle_or_path file;
680 uint8_t delete_pending;
685 uint32_t access_mask;
688 uint32_t alignment_requirement;
689 struct smb_wire_string fname;
693 /* RAW_FILEINFO_ALT_NAME_INFO and RAW_FILEINFO_ALT_NAME_INFORMATION interfaces */
695 enum smb_fileinfo_level level;
697 union smb_handle_or_path file;
700 struct smb_wire_string fname;
704 /* RAW_FILEINFO_STREAM_INFO and RAW_FILEINFO_STREAM_INFORMATION interfaces */
706 enum smb_fileinfo_level level;
708 union smb_handle_or_path file;
710 struct stream_information {
712 struct stream_struct *streams;
716 /* RAW_FILEINFO_COMPRESSION_INFO and RAW_FILEINFO_COMPRESSION_INFORMATION interfaces */
718 enum smb_fileinfo_level level;
720 union smb_handle_or_path file;
723 uint64_t compressed_size;
727 uint8_t cluster_shift;
731 /* RAW_FILEINFO_UNIX_BASIC interface */
733 enum smb_fileinfo_level level;
735 union smb_handle_or_path file;
738 uint64_t end_of_file;
740 NTTIME status_change_time;
749 uint64_t permissions;
754 /* RAW_FILEINFO_UNIX_INFO2 interface */
756 enum smb_fileinfo_level level;
758 union smb_handle_or_path file;
761 uint64_t end_of_file;
763 NTTIME status_change_time;
772 uint64_t permissions;
780 /* RAW_FILEINFO_UNIX_LINK interface */
782 enum smb_fileinfo_level level;
784 union smb_handle_or_path file;
787 struct smb_wire_string link_dest;
791 /* RAW_FILEINFO_INTERNAL_INFORMATION interface */
793 enum smb_fileinfo_level level;
795 union smb_handle_or_path file;
800 } internal_information;
802 /* RAW_FILEINFO_ACCESS_INFORMATION interface */
804 enum smb_fileinfo_level level;
806 union smb_handle_or_path file;
809 uint32_t access_flags;
811 } access_information;
813 /* RAW_FILEINFO_POSITION_INFORMATION interface */
815 enum smb_fileinfo_level level;
817 union smb_handle_or_path file;
822 } position_information;
824 /* RAW_FILEINFO_MODE_INFORMATION interface */
826 enum smb_fileinfo_level level;
828 union smb_handle_or_path file;
835 /* RAW_FILEINFO_ALIGNMENT_INFORMATION interface */
837 enum smb_fileinfo_level level;
839 union smb_handle_or_path file;
842 uint32_t alignment_requirement;
844 } alignment_information;
846 /* RAW_FILEINFO_NETWORK_OPEN_INFORMATION interface */
848 enum smb_fileinfo_level level;
850 union smb_handle_or_path file;
861 } network_open_information;
864 /* RAW_FILEINFO_ATTRIBUTE_TAG_INFORMATION interface */
866 enum smb_fileinfo_level level;
868 union smb_handle_or_path file;
872 uint32_t reparse_tag;
874 } attribute_tag_information;
876 /* RAW_FILEINFO_SEC_DESC */
878 enum smb_fileinfo_level level;
880 union smb_handle_or_path file;
881 uint32_t secinfo_flags;
884 struct security_descriptor *sd;
890 enum smb_setfileinfo_level {
891 RAW_SFILEINFO_GENERIC = 0xF000,
892 RAW_SFILEINFO_SETATTR, /* SMBsetatr */
893 RAW_SFILEINFO_SETATTRE, /* SMBsetattrE */
894 RAW_SFILEINFO_SEC_DESC, /* NT_TRANSACT_SET_SECURITY_DESC */
895 RAW_SFILEINFO_STANDARD = SMB_SFILEINFO_STANDARD,
896 RAW_SFILEINFO_EA_SET = SMB_SFILEINFO_EA_SET,
897 RAW_SFILEINFO_BASIC_INFO = SMB_SFILEINFO_BASIC_INFO,
898 RAW_SFILEINFO_DISPOSITION_INFO = SMB_SFILEINFO_DISPOSITION_INFO,
899 RAW_SFILEINFO_ALLOCATION_INFO = SMB_SFILEINFO_ALLOCATION_INFO,
900 RAW_SFILEINFO_END_OF_FILE_INFO = SMB_SFILEINFO_END_OF_FILE_INFO,
901 RAW_SFILEINFO_UNIX_BASIC = SMB_SFILEINFO_UNIX_BASIC,
902 RAW_SFILEINFO_UNIX_INFO2 = SMB_SFILEINFO_UNIX_INFO2,
903 RAW_SFILEINFO_UNIX_LINK = SMB_SFILEINFO_UNIX_LINK,
904 RAW_SFILEINFO_UNIX_HLINK = SMB_SFILEINFO_UNIX_HLINK,
905 RAW_SFILEINFO_BASIC_INFORMATION = SMB_SFILEINFO_BASIC_INFORMATION,
906 RAW_SFILEINFO_RENAME_INFORMATION = SMB_SFILEINFO_RENAME_INFORMATION,
907 RAW_SFILEINFO_LINK_INFORMATION = SMB_SFILEINFO_LINK_INFORMATION,
908 RAW_SFILEINFO_DISPOSITION_INFORMATION = SMB_SFILEINFO_DISPOSITION_INFORMATION,
909 RAW_SFILEINFO_POSITION_INFORMATION = SMB_SFILEINFO_POSITION_INFORMATION,
910 RAW_SFILEINFO_FULL_EA_INFORMATION = SMB_SFILEINFO_FULL_EA_INFORMATION,
911 RAW_SFILEINFO_MODE_INFORMATION = SMB_SFILEINFO_MODE_INFORMATION,
912 RAW_SFILEINFO_ALLOCATION_INFORMATION = SMB_SFILEINFO_ALLOCATION_INFORMATION,
913 RAW_SFILEINFO_END_OF_FILE_INFORMATION = SMB_SFILEINFO_END_OF_FILE_INFORMATION,
914 RAW_SFILEINFO_PIPE_INFORMATION = SMB_SFILEINFO_PIPE_INFORMATION,
915 RAW_SFILEINFO_VALID_DATA_INFORMATION = SMB_SFILEINFO_VALID_DATA_INFORMATION,
916 RAW_SFILEINFO_SHORT_NAME_INFORMATION = SMB_SFILEINFO_SHORT_NAME_INFORMATION,
917 RAW_SFILEINFO_1025 = SMB_SFILEINFO_1025,
918 RAW_SFILEINFO_1027 = SMB_SFILEINFO_1027,
919 RAW_SFILEINFO_1029 = SMB_SFILEINFO_1029,
920 RAW_SFILEINFO_1030 = SMB_SFILEINFO_1030,
921 RAW_SFILEINFO_1031 = SMB_SFILEINFO_1031,
922 RAW_SFILEINFO_1032 = SMB_SFILEINFO_1032,
923 RAW_SFILEINFO_1036 = SMB_SFILEINFO_1036,
924 RAW_SFILEINFO_1041 = SMB_SFILEINFO_1041,
925 RAW_SFILEINFO_1042 = SMB_SFILEINFO_1042,
926 RAW_SFILEINFO_1043 = SMB_SFILEINFO_1043,
927 RAW_SFILEINFO_1044 = SMB_SFILEINFO_1044,
929 /* cope with breakage in SMB2 */
930 RAW_SFILEINFO_RENAME_INFORMATION_SMB2 = SMB_SFILEINFO_RENAME_INFORMATION|0x80000000,
933 /* union used in setfileinfo() and setpathinfo() calls */
934 union smb_setfileinfo {
935 /* generic interface */
937 enum smb_setfileinfo_level level;
939 union smb_handle_or_path file;
943 /* RAW_SFILEINFO_SETATTR (SMBsetatr) interface - only via setpathinfo() */
945 enum smb_setfileinfo_level level;
947 union smb_handle_or_path file;
953 /* RAW_SFILEINFO_SETATTRE (SMBsetattrE) interface - only via setfileinfo()
954 also RAW_SFILEINFO_STANDARD */
956 enum smb_setfileinfo_level level;
958 union smb_handle_or_path file;
962 /* notice that size, alloc_size and attrib are not settable,
963 unlike the corresponding qfileinfo level */
965 } setattre, standard;
967 /* RAW_SFILEINFO_EA_SET interface */
969 enum smb_setfileinfo_level level;
971 union smb_handle_or_path file;
973 struct ea_struct *eas;
977 /* RAW_SFILEINFO_BASIC_INFO and
978 RAW_SFILEINFO_BASIC_INFORMATION interfaces */
980 enum smb_setfileinfo_level level;
982 union smb_handle_or_path file;
992 /* RAW_SFILEINFO_DISPOSITION_INFO and
993 RAW_SFILEINFO_DISPOSITION_INFORMATION interfaces */
995 enum smb_setfileinfo_level level;
997 union smb_handle_or_path file;
998 bool delete_on_close;
1002 /* RAW_SFILEINFO_ALLOCATION_INFO and
1003 RAW_SFILEINFO_ALLOCATION_INFORMATION interfaces */
1005 enum smb_setfileinfo_level level;
1007 union smb_handle_or_path file;
1008 /* w2k3 rounds this up to nearest 4096 */
1009 uint64_t alloc_size;
1013 /* RAW_SFILEINFO_END_OF_FILE_INFO and
1014 RAW_SFILEINFO_END_OF_FILE_INFORMATION interfaces */
1016 enum smb_setfileinfo_level level;
1018 union smb_handle_or_path file;
1023 /* RAW_SFILEINFO_RENAME_INFORMATION interface */
1025 enum smb_setfileinfo_level level;
1027 union smb_handle_or_path file;
1030 const char *new_name;
1032 } rename_information;
1034 /* RAW_SFILEINFO_LINK_INFORMATION interface */
1036 enum smb_setfileinfo_level level;
1038 union smb_handle_or_path file;
1041 const char *new_name;
1045 /* RAW_SFILEINFO_POSITION_INFORMATION interface */
1047 enum smb_setfileinfo_level level;
1049 union smb_handle_or_path file;
1052 } position_information;
1054 /* RAW_SFILEINFO_MODE_INFORMATION interface */
1056 enum smb_setfileinfo_level level;
1058 union smb_handle_or_path file;
1059 /* valid values seem to be 0, 2, 4 and 6 */
1064 /* RAW_SFILEINFO_UNIX_BASIC interface */
1066 enum smb_setfileinfo_level level;
1068 union smb_handle_or_path file;
1069 uint32_t mode; /* yuck - this field remains to fix compile of libcli/clifile.c */
1070 uint64_t end_of_file;
1072 NTTIME status_change_time;
1081 uint64_t permissions;
1086 /* RAW_SFILEINFO_UNIX_INFO2 interface */
1088 enum smb_setfileinfo_level level;
1090 union smb_handle_or_path file;
1091 uint64_t end_of_file;
1093 NTTIME status_change_time;
1102 uint64_t permissions;
1105 uint32_t file_flags;
1106 uint32_t flags_mask;
1110 /* RAW_SFILEINFO_UNIX_LINK, RAW_SFILEINFO_UNIX_HLINK interface */
1112 enum smb_setfileinfo_level level;
1114 union smb_handle_or_path file;
1115 const char *link_dest;
1117 } unix_link, unix_hlink;
1119 /* RAW_FILEINFO_SET_SEC_DESC */
1121 enum smb_setfileinfo_level level;
1123 union smb_handle_or_path file;
1124 uint32_t secinfo_flags;
1125 struct security_descriptor *sd;
1129 /* RAW_SFILEINFO_FULL_EA_INFORMATION */
1131 enum smb_setfileinfo_level level;
1133 union smb_handle_or_path file;
1134 struct smb_ea_list eas;
1136 } full_ea_information;
1140 enum smb_fsinfo_level {
1141 RAW_QFS_GENERIC = 0xF000,
1142 RAW_QFS_DSKATTR, /* SMBdskattr */
1143 RAW_QFS_ALLOCATION = SMB_QFS_ALLOCATION,
1144 RAW_QFS_VOLUME = SMB_QFS_VOLUME,
1145 RAW_QFS_VOLUME_INFO = SMB_QFS_VOLUME_INFO,
1146 RAW_QFS_SIZE_INFO = SMB_QFS_SIZE_INFO,
1147 RAW_QFS_DEVICE_INFO = SMB_QFS_DEVICE_INFO,
1148 RAW_QFS_ATTRIBUTE_INFO = SMB_QFS_ATTRIBUTE_INFO,
1149 RAW_QFS_UNIX_INFO = SMB_QFS_UNIX_INFO,
1150 RAW_QFS_VOLUME_INFORMATION = SMB_QFS_VOLUME_INFORMATION,
1151 RAW_QFS_SIZE_INFORMATION = SMB_QFS_SIZE_INFORMATION,
1152 RAW_QFS_DEVICE_INFORMATION = SMB_QFS_DEVICE_INFORMATION,
1153 RAW_QFS_ATTRIBUTE_INFORMATION = SMB_QFS_ATTRIBUTE_INFORMATION,
1154 RAW_QFS_QUOTA_INFORMATION = SMB_QFS_QUOTA_INFORMATION,
1155 RAW_QFS_FULL_SIZE_INFORMATION = SMB_QFS_FULL_SIZE_INFORMATION,
1156 RAW_QFS_OBJECTID_INFORMATION = SMB_QFS_OBJECTID_INFORMATION};
1159 /* union for fsinfo() backend call. Note that there are no in
1160 structures, as this call only contains out parameters */
1162 /* generic interface */
1164 enum smb_fsinfo_level level;
1165 struct smb2_handle handle; /* only for smb2 */
1168 uint32_t block_size;
1169 uint64_t blocks_total;
1170 uint64_t blocks_free;
1173 uint32_t serial_number;
1175 uint32_t max_file_component_length;
1176 uint32_t device_type;
1177 uint32_t device_characteristics;
1178 uint64_t quota_soft;
1179 uint64_t quota_hard;
1180 uint64_t quota_flags;
1187 /* SMBdskattr interface */
1189 enum smb_fsinfo_level level;
1192 uint16_t units_total;
1193 uint16_t blocks_per_unit;
1194 uint16_t block_size;
1195 uint16_t units_free;
1199 /* trans2 RAW_QFS_ALLOCATION interface */
1201 enum smb_fsinfo_level level;
1205 uint32_t sectors_per_unit;
1206 uint32_t total_alloc_units;
1207 uint32_t avail_alloc_units;
1208 uint16_t bytes_per_sector;
1212 /* TRANS2 RAW_QFS_VOLUME interface */
1214 enum smb_fsinfo_level level;
1217 uint32_t serial_number;
1218 struct smb_wire_string volume_name;
1222 /* TRANS2 RAW_QFS_VOLUME_INFO and RAW_QFS_VOLUME_INFORMATION interfaces */
1224 enum smb_fsinfo_level level;
1225 struct smb2_handle handle; /* only for smb2 */
1229 uint32_t serial_number;
1230 struct smb_wire_string volume_name;
1234 /* trans2 RAW_QFS_SIZE_INFO and RAW_QFS_SIZE_INFORMATION interfaces */
1236 enum smb_fsinfo_level level;
1237 struct smb2_handle handle; /* only for smb2 */
1240 uint64_t total_alloc_units;
1241 uint64_t avail_alloc_units; /* maps to call_avail_alloc_units */
1242 uint32_t sectors_per_unit;
1243 uint32_t bytes_per_sector;
1247 /* TRANS2 RAW_QFS_DEVICE_INFO and RAW_QFS_DEVICE_INFORMATION interfaces */
1249 enum smb_fsinfo_level level;
1250 struct smb2_handle handle; /* only for smb2 */
1253 uint32_t device_type;
1254 uint32_t characteristics;
1259 /* TRANS2 RAW_QFS_ATTRIBUTE_INFO and RAW_QFS_ATTRIBUTE_INFORMATION interfaces */
1261 enum smb_fsinfo_level level;
1262 struct smb2_handle handle; /* only for smb2 */
1266 uint32_t max_file_component_length;
1267 struct smb_wire_string fs_type;
1272 /* TRANS2 RAW_QFS_UNIX_INFO interface */
1274 enum smb_fsinfo_level level;
1277 uint16_t major_version;
1278 uint16_t minor_version;
1279 uint64_t capability;
1283 /* trans2 RAW_QFS_QUOTA_INFORMATION interface */
1285 enum smb_fsinfo_level level;
1286 struct smb2_handle handle; /* only for smb2 */
1289 uint64_t unknown[3];
1290 uint64_t quota_soft;
1291 uint64_t quota_hard;
1292 uint64_t quota_flags;
1294 } quota_information;
1296 /* trans2 RAW_QFS_FULL_SIZE_INFORMATION interface */
1298 enum smb_fsinfo_level level;
1299 struct smb2_handle handle; /* only for smb2 */
1302 uint64_t total_alloc_units;
1303 uint64_t call_avail_alloc_units;
1304 uint64_t actual_avail_alloc_units;
1305 uint32_t sectors_per_unit;
1306 uint32_t bytes_per_sector;
1308 } full_size_information;
1310 /* trans2 RAW_QFS_OBJECTID_INFORMATION interface */
1312 enum smb_fsinfo_level level;
1313 struct smb2_handle handle; /* only for smb2 */
1317 uint64_t unknown[6];
1319 } objectid_information;
1324 enum smb_open_level {
1333 RAW_OPEN_NTTRANS_CREATE,
1334 RAW_OPEN_OPENX_READX,
1338 /* the generic interface is defined to be equal to the NTCREATEX interface */
1339 #define RAW_OPEN_GENERIC RAW_OPEN_NTCREATEX
1341 /* union for open() backend call */
1344 * because the *.out.file structs are not aligned to the same offset for each level
1345 * we provide a hepler macro that should be used to find the current smb_handle structure
1347 #define SMB_OPEN_OUT_FILE(op, file) do { \
1348 switch (op->generic.level) { \
1349 case RAW_OPEN_OPEN: \
1350 file = &op->openold.out.file; \
1352 case RAW_OPEN_OPENX: \
1353 file = &op->openx.out.file; \
1355 case RAW_OPEN_MKNEW: \
1356 file = &op->mknew.out.file; \
1358 case RAW_OPEN_CREATE: \
1359 file = &op->create.out.file; \
1361 case RAW_OPEN_CTEMP: \
1362 file = &op->ctemp.out.file; \
1364 case RAW_OPEN_SPLOPEN: \
1365 file = &op->splopen.out.file; \
1367 case RAW_OPEN_NTCREATEX: \
1368 file = &op->ntcreatex.out.file; \
1370 case RAW_OPEN_T2OPEN: \
1371 file = &op->t2open.out.file; \
1373 case RAW_OPEN_NTTRANS_CREATE: \
1374 file = &op->nttrans.out.file; \
1376 case RAW_OPEN_OPENX_READX: \
1377 file = &op->openxreadx.out.file; \
1379 case RAW_OPEN_SMB2: \
1380 file = &op->smb2.out.file; \
1383 /* this must be a programmer error */ \
1388 /* SMBNTCreateX, nttrans and generic interface */
1390 enum smb_open_level level;
1394 uint32_t access_mask;
1395 uint64_t alloc_size;
1397 uint32_t share_access;
1398 uint32_t open_disposition;
1399 uint32_t create_options;
1400 uint32_t impersonation;
1401 uint8_t security_flags;
1402 /* NOTE: fname can also be a pointer to a
1403 uint64_t file_id if create_options has the
1404 NTCREATEX_OPTIONS_OPEN_BY_FILE_ID flag set */
1407 /* these last 2 elements are only used in the
1408 NTTRANS varient of the call */
1409 struct security_descriptor *sec_desc;
1410 struct smb_ea_list *ea_list;
1412 /* some optional parameters from the SMB2 varient */
1413 bool query_maximal_access;
1416 union smb_handle file;
1417 uint8_t oplock_level;
1418 uint32_t create_action;
1424 uint64_t alloc_size;
1428 uint8_t is_directory;
1430 /* optional return values matching SMB2 tagged
1431 values in the call */
1432 uint32_t maximal_access;
1434 } ntcreatex, nttrans, generic;
1436 /* TRANS2_OPEN interface */
1438 enum smb_open_level level;
1442 uint16_t search_attrs;
1443 uint16_t file_attrs;
1450 struct ea_struct *eas;
1453 union smb_handle file;
1465 /* SMBopen interface */
1467 enum smb_open_level level;
1470 uint16_t search_attrs;
1474 union smb_handle file;
1482 /* SMBopenX interface */
1484 enum smb_open_level level;
1488 uint16_t search_attrs; /* not honoured by win2003 */
1489 uint16_t file_attrs;
1490 time_t write_time; /* not honoured by win2003 */
1492 uint32_t size; /* note that this sets the
1493 initial file size, not
1494 just allocation size */
1495 uint32_t timeout; /* not honoured by win2003 */
1499 union smb_handle file;
1507 uint32_t unique_fid;
1508 uint32_t access_mask;
1513 /* SMBmknew interface */
1515 enum smb_open_level level;
1522 union smb_handle file;
1526 /* SMBctemp interface */
1528 enum smb_open_level level;
1532 const char *directory;
1535 union smb_handle file;
1536 /* temp name, relative to directory */
1541 /* SMBsplopen interface */
1543 enum smb_open_level level;
1545 uint16_t setup_length;
1550 union smb_handle file;
1555 /* chained OpenX/ReadX interface */
1557 enum smb_open_level level;
1561 uint16_t search_attrs; /* not honoured by win2003 */
1562 uint16_t file_attrs;
1563 time_t write_time; /* not honoured by win2003 */
1565 uint32_t size; /* note that this sets the
1566 initial file size, not
1567 just allocation size */
1568 uint32_t timeout; /* not honoured by win2003 */
1578 union smb_handle file;
1586 uint32_t unique_fid;
1587 uint32_t access_mask;
1593 uint16_t compaction_mode;
1598 #define SMB2_CREATE_FLAG_REQUEST_OPLOCK 0x0100
1599 #define SMB2_CREATE_FLAG_REQUEST_EXCLUSIVE_OPLOCK 0x0800
1600 #define SMB2_CREATE_FLAG_GRANT_OPLOCK 0x0001
1601 #define SMB2_CREATE_FLAG_GRANT_EXCLUSIVE_OPLOCK 0x0080
1604 struct smb2_create {
1605 enum smb_open_level level;
1607 /* static body buffer 56 (0x38) bytes */
1608 uint8_t security_flags; /* SMB2_SECURITY_* */
1609 uint8_t oplock_level; /* SMB2_OPLOCK_LEVEL_* */
1610 uint32_t impersonation_level; /* SMB2_IMPERSONATION_* */
1611 uint64_t create_flags;
1613 uint32_t desired_access;
1614 uint32_t file_attributes;
1615 uint32_t share_access; /* NTCREATEX_SHARE_ACCESS_* */
1616 uint32_t create_disposition; /* NTCREATEX_DISP_* */
1617 uint32_t create_options; /* NTCREATEX_OPTIONS_* */
1619 /* uint16_t fname_ofs */
1620 /* uint16_t fname_size */
1621 /* uint32_t blob_ofs; */
1622 /* uint32_t blob_size; */
1627 /* now some optional parameters - encoded as tagged blobs */
1628 struct smb_ea_list eas;
1629 uint64_t alloc_size;
1630 struct security_descriptor *sec_desc;
1632 struct smb2_handle *durable_handle;
1633 bool query_maximal_access;
1635 bool query_on_disk_id;
1637 /* and any additional blobs the caller wants */
1638 struct smb2_create_blobs {
1640 struct smb2_create_blob {
1647 union smb_handle file;
1649 /* static body buffer 88 (0x58) bytes */
1650 /* uint16_t buffer_code; 0x59 = 0x58 + 1 */
1651 uint8_t oplock_level;
1653 uint32_t create_action;
1658 uint64_t alloc_size;
1662 /* struct smb2_handle handle;*/
1663 /* uint32_t blob_ofs; */
1664 /* uint32_t blob_size; */
1666 /* optional return values matching tagged values in the call */
1667 uint32_t maximal_access;
1668 uint8_t on_disk_id[32];
1670 /* tagged blobs in the reply */
1671 struct smb2_create_blobs blobs;
1678 enum smb_read_level {
1686 #define RAW_READ_GENERIC RAW_READ_READX
1688 /* union for read() backend call
1690 note that .infoX.out.data will be allocated before the backend is
1691 called. It will be big enough to hold the maximum size asked for
1694 /* SMBreadX (and generic) interface */
1696 enum smb_read_level level;
1698 union smb_handle file;
1700 uint32_t mincnt; /* enforced on SMB2, 16 bit on SMB */
1703 bool read_for_execute;
1708 uint16_t compaction_mode;
1713 /* SMBreadbraw interface */
1715 enum smb_read_level level;
1717 union smb_handle file;
1730 /* SMBlockandread interface */
1732 enum smb_read_level level;
1734 union smb_handle file;
1745 /* SMBread interface */
1747 enum smb_read_level level;
1749 union smb_handle file;
1762 enum smb_read_level level;
1764 union smb_handle file;
1766 /* static body buffer 48 (0x30) bytes */
1767 /* uint16_t buffer_code; 0x31 = 0x30 + 1 */
1772 /* struct smb2_handle handle; */
1776 /* the docs give no indication of what
1777 these channel variables are for */
1778 uint16_t channel_offset;
1779 uint16_t channel_length;
1782 /* static body buffer 16 (0x10) bytes */
1783 /* uint16_t buffer_code; 0x11 = 0x10 + 1 */
1784 /* uint8_t data_ofs; */
1785 /* uint8_t reserved; */
1786 /* uint32_t data_size; */
1797 enum smb_write_level {
1798 RAW_WRITE_WRITEUNLOCK,
1801 RAW_WRITE_WRITECLOSE,
1806 #define RAW_WRITE_GENERIC RAW_WRITE_WRITEX
1808 /* union for write() backend call
1811 /* SMBwriteX interface */
1813 enum smb_write_level level;
1815 union smb_handle file;
1820 const uint8_t *data;
1828 /* SMBwriteunlock interface */
1830 enum smb_write_level level;
1832 union smb_handle file;
1836 const uint8_t *data;
1843 /* SMBwrite interface */
1845 enum smb_write_level level;
1847 union smb_handle file;
1851 const uint8_t *data;
1858 /* SMBwriteclose interface */
1860 enum smb_write_level level;
1862 union smb_handle file;
1866 const uint8_t *data;
1873 /* SMBsplwrite interface */
1875 enum smb_write_level level;
1877 union smb_handle file;
1879 const uint8_t *data;
1885 enum smb_write_level level;
1887 union smb_handle file;
1889 /* static body buffer 48 (0x30) bytes */
1890 /* uint16_t buffer_code; 0x31 = 0x30 + 1 */
1891 /* uint16_t data_ofs; */
1892 /* uint32_t data_size; */
1894 /* struct smb2_handle handle; */
1895 uint64_t unknown1; /* 0xFFFFFFFFFFFFFFFF */
1896 uint64_t unknown2; /* 0xFFFFFFFFFFFFFFFF */
1902 /* static body buffer 17 (0x11) bytes */
1903 /* uint16_t buffer_code; 0x11 = 0x10 + 1*/
1906 uint64_t unknown1; /* 0x0000000000000000 */
1912 enum smb_lock_level {
1920 #define RAW_LOCK_GENERIC RAW_LOCK_LOCKX
1922 /* union for lock() backend call
1925 /* SMBlockingX and generic interface */
1927 enum smb_lock_level level;
1929 union smb_handle file;
1934 struct smb_lock_entry {
1935 uint32_t pid; /* 16 bits in SMB1 */
1938 } *locks; /* unlocks are first in the arrray */
1942 /* SMBlock and SMBunlock interface */
1944 enum smb_lock_level level;
1946 union smb_handle file;
1954 enum smb_lock_level level;
1956 union smb_handle file;
1958 /* static body buffer 48 (0x30) bytes */
1959 /* uint16_t buffer_code; 0x30 */
1960 uint16_t lock_count;
1962 /* struct smb2_handle handle; */
1963 struct smb2_lock_element {
1966 /* these flags are the same as the SMB2 lock flags */
1967 #define SMB2_LOCK_FLAG_NONE 0x00000000
1968 #define SMB2_LOCK_FLAG_SHARED 0x00000001
1969 #define SMB2_LOCK_FLAG_EXCLUSIVE 0x00000002
1970 #define SMB2_LOCK_FLAG_UNLOCK 0x00000004
1971 #define SMB2_LOCK_FLAG_FAIL_IMMEDIATELY 0x00000010
1972 #define SMB2_LOCK_FLAG_ALL_MASK 0x00000017
1978 /* static body buffer 4 (0x04) bytes */
1979 /* uint16_t buffer_code; 0x04 */
1986 enum smb_lock_level level;
1988 union smb_handle file;
1990 /* static body buffer 24 (0x18) bytes */
1991 uint8_t oplock_level;
1994 /* struct smb2_handle handle; */
2000 enum smb_close_level {
2008 union for close() backend call
2011 /* generic interface */
2013 enum smb_close_level level;
2015 union smb_handle file;
2017 #define SMB2_CLOSE_FLAGS_FULL_INFORMATION (1<<0)
2018 uint16_t flags; /* SMB2_CLOSE_FLAGS_* */
2026 uint64_t alloc_size;
2032 /* SMBclose interface */
2034 enum smb_close_level level;
2036 union smb_handle file;
2041 /* SMBsplclose interface - empty! */
2043 enum smb_close_level level;
2045 union smb_handle file;
2051 enum smb_close_level level;
2053 union smb_handle file;
2055 /* static body buffer 24 (0x18) bytes */
2056 /* uint16_t buffer_code; 0x18 */
2057 uint16_t flags; /* SMB2_CLOSE_FLAGS_* */
2061 /* static body buffer 60 (0x3C) bytes */
2062 /* uint16_t buffer_code; 0x3C */
2069 uint64_t alloc_size;
2077 enum smb_lpq_level {RAW_LPQ_GENERIC, RAW_LPQ_RETQ};
2080 union for lpq() backend
2083 /* generic interface */
2085 enum smb_lpq_level level;
2090 /* SMBsplretq interface */
2092 enum smb_lpq_level level;
2100 uint16_t restart_idx;
2112 enum smb_ioctl_level {
2116 RAW_IOCTL_SMB2_NO_HANDLE
2120 union for ioctl() backend
2123 /* generic interface */
2125 enum smb_ioctl_level level;
2127 union smb_handle file;
2131 /* struct for SMBioctl */
2133 enum smb_ioctl_level level;
2135 union smb_handle file;
2144 /* struct for NT ioctl call */
2146 enum smb_ioctl_level level;
2148 union smb_handle file;
2162 enum smb_ioctl_level level;
2164 union smb_handle file;
2166 /* static body buffer 56 (0x38) bytes */
2167 /* uint16_t buffer_code; 0x39 = 0x38 + 1 */
2170 /*struct smb2_handle handle;*/
2171 /* uint32_t out_ofs; */
2172 /* uint32_t out_size; */
2174 /* uint32_t in_ofs; */
2175 /* uint32_t in_size; */
2176 uint32_t max_response_size;
2184 union smb_handle file;
2186 /* static body buffer 48 (0x30) bytes */
2187 /* uint16_t buffer_code; 0x31 = 0x30 + 1 */
2190 /* struct smb2_handle handle; */
2191 /* uint32_t in_ofs; */
2192 /* uint32_t in_size; */
2193 /* uint32_t out_ofs; */
2194 /* uint32_t out_size; */
2205 enum smb_flush_level {
2212 /* struct for SMBflush */
2214 enum smb_flush_level level;
2216 union smb_handle file;
2220 /* SMBflush with 0xFFFF wildcard fnum */
2222 enum smb_flush_level level;
2227 enum smb_flush_level level;
2229 union smb_handle file;
2239 /* struct for SMBcopy */
2254 /* struct for transact/transact2 call */
2262 uint8_t setup_count;
2264 const char *trans_name; /* SMBtrans only */
2270 uint8_t setup_count;
2277 /* struct for nttransact2 call */
2278 struct smb_nttrans {
2283 uint8_t setup_count;
2291 uint8_t setup_count; /* in units of 16 bit words */
2298 enum smb_notify_level {
2304 /* struct for nttrans change notify call */
2306 enum smb_notify_level level;
2309 union smb_handle file;
2310 uint32_t buffer_size;
2311 uint32_t completion_filter;
2316 uint32_t num_changes;
2317 struct notify_changes {
2319 struct smb_wire_string name;
2324 struct smb2_notify {
2325 enum smb_notify_level level;
2328 union smb_handle file;
2329 /* static body buffer 32 (0x20) bytes */
2330 /* uint16_t buffer_code; 0x32 */
2332 uint32_t buffer_size;
2333 /*struct smb2_handle file;*/
2334 uint32_t completion_filter;
2339 /* static body buffer 8 (0x08) bytes */
2340 /* uint16_t buffer_code; 0x09 = 0x08 + 1 */
2341 /* uint16_t blob_ofs; */
2342 /* uint16_t blob_size; */
2347 /* DATA_BLOB content */
2348 uint32_t num_changes;
2349 struct notify_changes *changes;
2354 enum smb_search_level {
2355 RAW_SEARCH_SEARCH, /* SMBsearch */
2356 RAW_SEARCH_FFIRST, /* SMBffirst */
2357 RAW_SEARCH_FUNIQUE, /* SMBfunique */
2358 RAW_SEARCH_TRANS2, /* SMBtrans2 */
2359 RAW_SEARCH_SMB2 /* SMB2 Find */
2362 enum smb_search_data_level {
2363 RAW_SEARCH_DATA_GENERIC = 0x10000, /* only used in the smbcli_ code */
2364 RAW_SEARCH_DATA_SEARCH,
2365 RAW_SEARCH_DATA_STANDARD = SMB_FIND_STANDARD,
2366 RAW_SEARCH_DATA_EA_SIZE = SMB_FIND_EA_SIZE,
2367 RAW_SEARCH_DATA_EA_LIST = SMB_FIND_EA_LIST,
2368 RAW_SEARCH_DATA_DIRECTORY_INFO = SMB_FIND_DIRECTORY_INFO,
2369 RAW_SEARCH_DATA_FULL_DIRECTORY_INFO = SMB_FIND_FULL_DIRECTORY_INFO,
2370 RAW_SEARCH_DATA_NAME_INFO = SMB_FIND_NAME_INFO,
2371 RAW_SEARCH_DATA_BOTH_DIRECTORY_INFO = SMB_FIND_BOTH_DIRECTORY_INFO,
2372 RAW_SEARCH_DATA_ID_FULL_DIRECTORY_INFO = SMB_FIND_ID_FULL_DIRECTORY_INFO,
2373 RAW_SEARCH_DATA_ID_BOTH_DIRECTORY_INFO = SMB_FIND_ID_BOTH_DIRECTORY_INFO,
2374 RAW_SEARCH_DATA_UNIX_INFO = SMB_FIND_UNIX_INFO,
2375 RAW_SEARCH_DATA_UNIX_INFO2 = SMB_FIND_UNIX_INFO2
2378 /* union for file search */
2379 union smb_search_first {
2381 enum smb_search_level level;
2382 enum smb_search_data_level data_level;
2385 /* search (old) findfirst interface.
2386 Also used for ffirst and funique. */
2388 enum smb_search_level level;
2389 enum smb_search_data_level data_level;
2393 uint16_t search_attrib;
2394 const char *pattern;
2401 /* trans2 findfirst interface */
2403 enum smb_search_level level;
2404 enum smb_search_data_level data_level;
2407 uint16_t search_attrib;
2410 uint32_t storage_type;
2411 const char *pattern;
2413 /* the ea names are only used for RAW_SEARCH_EA_LIST */
2415 struct ea_name *ea_names;
2420 uint16_t end_of_search;
2425 SMB2 uses different level numbers for the same old SMB trans2 search levels
2427 #define SMB2_FIND_DIRECTORY_INFO 0x01
2428 #define SMB2_FIND_FULL_DIRECTORY_INFO 0x02
2429 #define SMB2_FIND_BOTH_DIRECTORY_INFO 0x03
2430 #define SMB2_FIND_NAME_INFO 0x0C
2431 #define SMB2_FIND_ID_BOTH_DIRECTORY_INFO 0x25
2432 #define SMB2_FIND_ID_FULL_DIRECTORY_INFO 0x26
2434 /* flags for SMB2 find */
2435 #define SMB2_CONTINUE_FLAG_RESTART 0x01
2436 #define SMB2_CONTINUE_FLAG_SINGLE 0x02
2437 #define SMB2_CONTINUE_FLAG_INDEX 0x04
2438 #define SMB2_CONTINUE_FLAG_REOPEN 0x10
2442 enum smb_search_level level;
2443 enum smb_search_data_level data_level;
2445 union smb_handle file;
2447 /* static body buffer 32 (0x20) bytes */
2448 /* uint16_t buffer_code; 0x21 = 0x20 + 1 */
2450 uint8_t continue_flags; /* SMB2_CONTINUE_FLAG_* */
2451 uint32_t file_index;
2452 /* struct smb2_handle handle; */
2453 /* uint16_t pattern_ofs; */
2454 /* uint16_t pattern_size; */
2455 uint32_t max_response_size;
2458 const char *pattern;
2461 /* static body buffer 8 (0x08) bytes */
2462 /* uint16_t buffer_code; 0x08 */
2463 /* uint16_t blob_ofs; */
2464 /* uint32_t blob_size; */
2472 /* union for file search continue */
2473 union smb_search_next {
2475 enum smb_search_level level;
2476 enum smb_search_data_level data_level;
2479 /* search (old) findnext interface. Also used
2480 for ffirst when continuing */
2482 enum smb_search_level level;
2483 enum smb_search_data_level data_level;
2487 uint16_t search_attrib;
2488 struct smb_search_id {
2492 uint32_t server_cookie;
2493 uint32_t client_cookie;
2501 /* trans2 findnext interface */
2503 enum smb_search_level level;
2504 enum smb_search_data_level data_level;
2509 uint32_t resume_key;
2511 const char *last_name;
2513 /* the ea names are only used for RAW_SEARCH_EA_LIST */
2515 struct ea_name *ea_names;
2519 uint16_t end_of_search;
2524 struct smb2_find smb2;
2527 /* union for search reply file data */
2528 union smb_search_data {
2530 * search (old) findfirst
2531 * RAW_SEARCH_DATA_SEARCH
2537 struct smb_search_id id;
2541 /* trans2 findfirst RAW_SEARCH_DATA_STANDARD level */
2543 uint32_t resume_key;
2548 uint32_t alloc_size;
2550 struct smb_wire_string name;
2553 /* trans2 findfirst RAW_SEARCH_DATA_EA_SIZE level */
2555 uint32_t resume_key;
2560 uint32_t alloc_size;
2563 struct smb_wire_string name;
2566 /* trans2 findfirst RAW_SEARCH_DATA_EA_LIST level */
2568 uint32_t resume_key;
2573 uint32_t alloc_size;
2575 struct smb_ea_list eas;
2576 struct smb_wire_string name;
2579 /* RAW_SEARCH_DATA_DIRECTORY_INFO interface */
2581 uint32_t file_index;
2587 uint64_t alloc_size;
2589 struct smb_wire_string name;
2592 /* RAW_SEARCH_DATA_FULL_DIRECTORY_INFO interface */
2594 uint32_t file_index;
2600 uint64_t alloc_size;
2603 struct smb_wire_string name;
2604 } full_directory_info;
2606 /* RAW_SEARCH_DATA_NAME_INFO interface */
2608 uint32_t file_index;
2609 struct smb_wire_string name;
2612 /* RAW_SEARCH_DATA_BOTH_DIRECTORY_INFO interface */
2614 uint32_t file_index;
2620 uint64_t alloc_size;
2623 struct smb_wire_string short_name;
2624 struct smb_wire_string name;
2625 } both_directory_info;
2627 /* RAW_SEARCH_DATA_ID_FULL_DIRECTORY_INFO interface */
2629 uint32_t file_index;
2635 uint64_t alloc_size;
2639 struct smb_wire_string name;
2640 } id_full_directory_info;
2642 /* RAW_SEARCH_DATA_ID_BOTH_DIRECTORY_INFO interface */
2644 uint32_t file_index;
2650 uint64_t alloc_size;
2654 struct smb_wire_string short_name;
2655 struct smb_wire_string name;
2656 } id_both_directory_info;
2658 /* RAW_SEARCH_DATA_UNIX_INFO interface */
2660 uint32_t file_index;
2662 uint64_t alloc_size;
2663 NTTIME status_change_time;
2672 uint64_t permissions;
2677 /* RAW_SEARCH_DATA_UNIX_INFO2 interface */
2679 uint32_t file_index;
2680 uint64_t end_of_file;
2682 NTTIME status_change_time;
2691 uint64_t permissions;
2694 uint32_t file_flags;
2695 uint32_t flags_mask;
2696 struct smb_wire_string name;
2700 /* Callback function passed to the raw search interface. */
2701 typedef bool (*smbcli_search_callback)(void *private_data, const union smb_search_data *file);
2703 enum smb_search_close_level {RAW_FINDCLOSE_GENERIC, RAW_FINDCLOSE_FCLOSE, RAW_FINDCLOSE_FINDCLOSE};
2705 /* union for file search close */
2706 union smb_search_close {
2708 enum smb_search_close_level level;
2711 /* SMBfclose (old search) interface */
2713 enum smb_search_close_level level;
2716 /* max_count and search_attrib are not used, but are present */
2718 uint16_t search_attrib;
2719 struct smb_search_id id;
2723 /* SMBfindclose interface */
2725 enum smb_search_close_level level;
2735 struct for SMBecho call
2739 uint16_t repeat_count;
2745 uint16_t sequence_number;
2752 struct for shadow copy volumes
2754 struct smb_shadow_copy {
2756 union smb_handle file;
2760 uint32_t num_volumes;
2766 #endif /* __LIBCLI_RAW_INTERFACES_H__ */