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.
22 #ifndef __LIBCLI_RAW_INTERFACES_H__
23 #define __LIBCLI_RAW_INTERFACES_H__
27 /* this structure is just a wrapper for a string, the only reason we
28 bother with this is that it allows us to check the length provided
29 on the wire in testsuite test code to ensure that we are
30 terminating names in the same way that win2003 is. The *ONLY* time
31 you should ever look at the 'private_length' field in this
32 structure is inside compliance test code, in all other cases just
33 use the null terminated char* as the definitive definition of the
36 also note that this structure is only used in packets where there
37 is an explicit length provided on the wire (hence the name). That
38 length is placed in 'private_length'. For packets where the length
39 is always determined by NULL or packet termination a normal char*
40 is used in the structure definition.
42 struct smb_wire_string
{
43 uint32_t private_length
;
48 * SMB2 uses a 16Byte handle,
49 * (we can maybe use struct GUID later)
58 * a generic container for file handles or file pathes
59 * for qfileinfo/setfileinfo and qpathinfo/setpathinfo
61 union smb_handle_or_path
{
64 * the qpathinfo and setpathinfo
69 * this is used as file handle in SMB
74 * this is used as file handle in SMB2
76 struct smb2_handle handle
;
79 * this is used as generic file handle for the NTVFS layer
81 struct ntvfs_handle
*ntvfs
;
85 a generic container for file handles
89 * this is used as file handle in SMB
94 * this is used as file handle in SMB2
96 struct smb2_handle handle
;
99 * this is used as generic file handle for the NTVFS layer
101 struct ntvfs_handle
*ntvfs
;
105 this header defines the structures and unions used between the SMB
106 parser and the backends.
109 /* struct used for SMBlseek call */
113 union smb_handle file
;
115 int32_t offset
; /* signed */
123 /* struct used in unlink() call */
134 /* struct used in chkpath() call */
143 enum smb_mkdir_level
{RAW_MKDIR_GENERIC
, RAW_MKDIR_MKDIR
, RAW_MKDIR_T2MKDIR
};
145 /* union used in mkdir() call */
149 enum smb_mkdir_level level
;
153 enum smb_mkdir_level level
;
160 enum smb_mkdir_level level
;
164 struct ea_struct
*eas
;
169 /* struct used in rmdir() call */
176 /* struct used in rename() call */
177 enum smb_rename_level
{RAW_RENAME_RENAME
, RAW_RENAME_NTRENAME
};
181 enum smb_rename_level level
;
184 /* SMBrename interface */
186 enum smb_rename_level level
;
189 const char *pattern1
;
190 const char *pattern2
;
196 /* SMBntrename interface */
198 enum smb_rename_level level
;
202 uint16_t flags
; /* see RENAME_FLAG_* */
203 uint32_t cluster_size
;
204 const char *old_name
;
205 const char *new_name
;
210 enum smb_tcon_level
{
216 /* union used in tree connect call */
218 /* generic interface */
220 enum smb_tcon_level level
;
223 /* SMBtcon interface */
225 enum smb_tcon_level level
;
229 const char *password
;
238 /* SMBtconX interface */
240 enum smb_tcon_level level
;
256 /* SMB2 TreeConnect */
257 struct smb2_tree_connect
{
258 enum smb_tcon_level level
;
261 /* static body buffer 8 (0x08) bytes */
262 /* uint16_t buffer_code; 0x09 = 0x08 + 1 */
263 uint16_t unknown1
; /* 0x0000 */
264 /* uint16_t path_ofs */
265 /* uint16_t path_size */
268 const char *path
; /* as non-terminated UTF-16 on the wire */
271 /* static body buffer 16 (0x10) bytes */
272 /* uint16_t buffer_code; 0x10 */
273 uint16_t unknown1
; /* 0x02 */
274 uint32_t unknown2
; /* 0x00 */
275 uint32_t unknown3
; /* 0x00 */
276 uint32_t access_mask
;
278 /* extracted from the SMB2 header */
285 enum smb_sesssetup_level
{
288 RAW_SESSSETUP_SPNEGO
,
292 /* union used in session_setup call */
293 union smb_sesssetup
{
294 /* the pre-NT1 interface */
296 enum smb_sesssetup_level level
;
318 /* the NT1 interface */
320 enum smb_sesssetup_level level
;
327 uint32_t capabilities
;
345 /* the SPNEGO interface */
347 enum smb_sesssetup_level level
;
354 uint32_t capabilities
;
358 const char *workgroup
;
370 /* SMB2 SessionSetup */
371 struct smb2_session_setup
{
372 enum smb_sesssetup_level level
;
375 /* static body buffer 16 (0x10) bytes */
376 /* uint16_t buffer_code; 0x11 = 0x10 + 1 */
378 uint32_t unknown2
; /* 0xF */
379 uint32_t unknown3
; /* 0x00 */
380 /* uint16_t secblob_ofs */
381 /* uint16_t secblob_size */
387 /* static body buffer 8 (0x08) bytes */
388 /* uint16_t buffer_code; 0x09 = 0x08 +1 */
390 /* uint16_t secblob_ofs */
391 /* uint16_t secblob_size */
396 /* extracted from the SMB2 header */
402 /* Note that the specified enum values are identical to the actual info-levels used
405 enum smb_fileinfo_level
{
406 RAW_FILEINFO_GENERIC
= 0xF000,
407 RAW_FILEINFO_GETATTR
, /* SMBgetatr */
408 RAW_FILEINFO_GETATTRE
, /* SMBgetattrE */
409 RAW_FILEINFO_SEC_DESC
, /* NT_TRANSACT_QUERY_SECURITY_DESC */
410 RAW_FILEINFO_STANDARD
= SMB_QFILEINFO_STANDARD
,
411 RAW_FILEINFO_EA_SIZE
= SMB_QFILEINFO_EA_SIZE
,
412 RAW_FILEINFO_EA_LIST
= SMB_QFILEINFO_EA_LIST
,
413 RAW_FILEINFO_ALL_EAS
= SMB_QFILEINFO_ALL_EAS
,
414 RAW_FILEINFO_IS_NAME_VALID
= SMB_QFILEINFO_IS_NAME_VALID
,
415 RAW_FILEINFO_BASIC_INFO
= SMB_QFILEINFO_BASIC_INFO
,
416 RAW_FILEINFO_STANDARD_INFO
= SMB_QFILEINFO_STANDARD_INFO
,
417 RAW_FILEINFO_EA_INFO
= SMB_QFILEINFO_EA_INFO
,
418 RAW_FILEINFO_NAME_INFO
= SMB_QFILEINFO_NAME_INFO
,
419 RAW_FILEINFO_ALL_INFO
= SMB_QFILEINFO_ALL_INFO
,
420 RAW_FILEINFO_ALT_NAME_INFO
= SMB_QFILEINFO_ALT_NAME_INFO
,
421 RAW_FILEINFO_STREAM_INFO
= SMB_QFILEINFO_STREAM_INFO
,
422 RAW_FILEINFO_COMPRESSION_INFO
= SMB_QFILEINFO_COMPRESSION_INFO
,
423 RAW_FILEINFO_UNIX_BASIC
= SMB_QFILEINFO_UNIX_BASIC
,
424 RAW_FILEINFO_UNIX_LINK
= SMB_QFILEINFO_UNIX_LINK
,
425 RAW_FILEINFO_BASIC_INFORMATION
= SMB_QFILEINFO_BASIC_INFORMATION
,
426 RAW_FILEINFO_STANDARD_INFORMATION
= SMB_QFILEINFO_STANDARD_INFORMATION
,
427 RAW_FILEINFO_INTERNAL_INFORMATION
= SMB_QFILEINFO_INTERNAL_INFORMATION
,
428 RAW_FILEINFO_EA_INFORMATION
= SMB_QFILEINFO_EA_INFORMATION
,
429 RAW_FILEINFO_ACCESS_INFORMATION
= SMB_QFILEINFO_ACCESS_INFORMATION
,
430 RAW_FILEINFO_NAME_INFORMATION
= SMB_QFILEINFO_NAME_INFORMATION
,
431 RAW_FILEINFO_POSITION_INFORMATION
= SMB_QFILEINFO_POSITION_INFORMATION
,
432 RAW_FILEINFO_MODE_INFORMATION
= SMB_QFILEINFO_MODE_INFORMATION
,
433 RAW_FILEINFO_ALIGNMENT_INFORMATION
= SMB_QFILEINFO_ALIGNMENT_INFORMATION
,
434 RAW_FILEINFO_ALL_INFORMATION
= SMB_QFILEINFO_ALL_INFORMATION
,
435 RAW_FILEINFO_ALT_NAME_INFORMATION
= SMB_QFILEINFO_ALT_NAME_INFORMATION
,
436 RAW_FILEINFO_STREAM_INFORMATION
= SMB_QFILEINFO_STREAM_INFORMATION
,
437 RAW_FILEINFO_COMPRESSION_INFORMATION
= SMB_QFILEINFO_COMPRESSION_INFORMATION
,
438 RAW_FILEINFO_NETWORK_OPEN_INFORMATION
= SMB_QFILEINFO_NETWORK_OPEN_INFORMATION
,
439 RAW_FILEINFO_ATTRIBUTE_TAG_INFORMATION
= SMB_QFILEINFO_ATTRIBUTE_TAG_INFORMATION
,
440 /* SMB2 specific levels */
441 RAW_FILEINFO_SMB2_ALL_EAS
= 0x0f01,
442 RAW_FILEINFO_SMB2_ALL_INFORMATION
= 0x1201
445 /* union used in qfileinfo() and qpathinfo() backend calls */
447 /* generic interface:
448 * matches RAW_FILEINFO_GENERIC */
450 enum smb_fileinfo_level level
;
452 union smb_handle_or_path file
;
460 struct smb_wire_string name
;
470 struct smb_wire_string fname
;
471 struct smb_wire_string alt_fname
;
472 uint8_t delete_pending
;
474 uint64_t compressed_size
;
478 uint8_t cluster_shift
;
480 uint32_t access_flags
; /* seen 0x001f01ff from w2k3 */
483 uint32_t alignment_requirement
;
484 uint32_t reparse_tag
;
486 struct stream_struct
{
489 struct smb_wire_string stream_name
;
495 /* SMBgetatr interface:
496 * matches RAW_FILEINFO_GETATTR */
498 enum smb_fileinfo_level level
;
500 union smb_handle_or_path file
;
509 /* SMBgetattrE and RAW_FILEINFO_STANDARD interface */
511 enum smb_fileinfo_level level
;
513 union smb_handle_or_path file
;
523 } getattre
, standard
;
525 /* trans2 RAW_FILEINFO_EA_SIZE interface */
527 enum smb_fileinfo_level level
;
529 union smb_handle_or_path file
;
542 /* trans2 RAW_FILEINFO_EA_LIST interface */
544 enum smb_fileinfo_level level
;
546 union smb_handle_or_path file
;
549 struct smb_wire_string name
;
555 struct ea_struct
*eas
;
559 /* trans2 RAW_FILEINFO_ALL_EAS and RAW_FILEINFO_FULL_EA_INFORMATION interfaces */
561 enum smb_fileinfo_level level
;
563 union smb_handle_or_path file
;
564 /* SMB2 only - SMB2_CONTINUE_FLAG_* */
565 uint8_t continue_flags
;
567 struct smb_ea_list out
;
570 /* trans2 qpathinfo RAW_FILEINFO_IS_NAME_VALID interface
571 only valid for a QPATHNAME call - no returned data */
573 enum smb_fileinfo_level level
;
575 union smb_handle_or_path file
;
579 /* RAW_FILEINFO_BASIC_INFO and RAW_FILEINFO_BASIC_INFORMATION interfaces */
581 enum smb_fileinfo_level level
;
583 union smb_handle_or_path file
;
595 /* RAW_FILEINFO_STANDARD_INFO and RAW_FILEINFO_STANDARD_INFORMATION interfaces */
597 enum smb_fileinfo_level level
;
599 union smb_handle_or_path file
;
610 /* RAW_FILEINFO_EA_INFO and RAW_FILEINFO_EA_INFORMATION interfaces */
612 enum smb_fileinfo_level level
;
614 union smb_handle_or_path file
;
621 /* RAW_FILEINFO_NAME_INFO and RAW_FILEINFO_NAME_INFORMATION interfaces */
623 enum smb_fileinfo_level level
;
625 union smb_handle_or_path file
;
628 struct smb_wire_string fname
;
632 /* RAW_FILEINFO_ALL_INFO and RAW_FILEINFO_ALL_INFORMATION interfaces */
634 enum smb_fileinfo_level level
;
636 union smb_handle_or_path file
;
647 uint8_t delete_pending
;
650 struct smb_wire_string fname
;
654 /* RAW_FILEINFO_SMB2_ALL_INFORMATION interface */
656 enum smb_fileinfo_level level
;
658 union smb_handle_or_path file
;
670 uint8_t delete_pending
;
675 uint32_t access_mask
;
678 struct smb_wire_string fname
;
682 /* RAW_FILEINFO_ALT_NAME_INFO and RAW_FILEINFO_ALT_NAME_INFORMATION interfaces */
684 enum smb_fileinfo_level level
;
686 union smb_handle_or_path file
;
689 struct smb_wire_string fname
;
693 /* RAW_FILEINFO_STREAM_INFO and RAW_FILEINFO_STREAM_INFORMATION interfaces */
695 enum smb_fileinfo_level level
;
697 union smb_handle_or_path file
;
699 struct stream_information
{
701 struct stream_struct
*streams
;
705 /* RAW_FILEINFO_COMPRESSION_INFO and RAW_FILEINFO_COMPRESSION_INFORMATION interfaces */
707 enum smb_fileinfo_level level
;
709 union smb_handle_or_path file
;
712 uint64_t compressed_size
;
716 uint8_t cluster_shift
;
720 /* RAW_FILEINFO_UNIX_BASIC interface */
722 enum smb_fileinfo_level level
;
724 union smb_handle_or_path file
;
727 uint64_t end_of_file
;
729 NTTIME status_change_time
;
738 uint64_t permissions
;
743 /* RAW_FILEINFO_UNIX_LINK interface */
745 enum smb_fileinfo_level level
;
747 union smb_handle_or_path file
;
750 struct smb_wire_string link_dest
;
754 /* RAW_FILEINFO_INTERNAL_INFORMATION interface */
756 enum smb_fileinfo_level level
;
758 union smb_handle_or_path file
;
763 } internal_information
;
765 /* RAW_FILEINFO_ACCESS_INFORMATION interface */
767 enum smb_fileinfo_level level
;
769 union smb_handle_or_path file
;
772 uint32_t access_flags
;
774 } access_information
;
776 /* RAW_FILEINFO_POSITION_INFORMATION interface */
778 enum smb_fileinfo_level level
;
780 union smb_handle_or_path file
;
785 } position_information
;
787 /* RAW_FILEINFO_MODE_INFORMATION interface */
789 enum smb_fileinfo_level level
;
791 union smb_handle_or_path file
;
798 /* RAW_FILEINFO_ALIGNMENT_INFORMATION interface */
800 enum smb_fileinfo_level level
;
802 union smb_handle_or_path file
;
805 uint32_t alignment_requirement
;
807 } alignment_information
;
809 /* RAW_FILEINFO_NETWORK_OPEN_INFORMATION interface */
811 enum smb_fileinfo_level level
;
813 union smb_handle_or_path file
;
824 } network_open_information
;
827 /* RAW_FILEINFO_ATTRIBUTE_TAG_INFORMATION interface */
829 enum smb_fileinfo_level level
;
831 union smb_handle_or_path file
;
835 uint32_t reparse_tag
;
837 } attribute_tag_information
;
839 /* RAW_FILEINFO_SEC_DESC */
841 enum smb_fileinfo_level level
;
843 union smb_handle_or_path file
;
844 uint32_t secinfo_flags
;
847 struct security_descriptor
*sd
;
853 enum smb_setfileinfo_level
{
854 RAW_SFILEINFO_GENERIC
= 0xF000,
855 RAW_SFILEINFO_SETATTR
, /* SMBsetatr */
856 RAW_SFILEINFO_SETATTRE
, /* SMBsetattrE */
857 RAW_SFILEINFO_SEC_DESC
, /* NT_TRANSACT_SET_SECURITY_DESC */
858 RAW_SFILEINFO_STANDARD
= SMB_SFILEINFO_STANDARD
,
859 RAW_SFILEINFO_EA_SET
= SMB_SFILEINFO_EA_SET
,
860 RAW_SFILEINFO_BASIC_INFO
= SMB_SFILEINFO_BASIC_INFO
,
861 RAW_SFILEINFO_DISPOSITION_INFO
= SMB_SFILEINFO_DISPOSITION_INFO
,
862 RAW_SFILEINFO_ALLOCATION_INFO
= SMB_SFILEINFO_ALLOCATION_INFO
,
863 RAW_SFILEINFO_END_OF_FILE_INFO
= SMB_SFILEINFO_END_OF_FILE_INFO
,
864 RAW_SFILEINFO_UNIX_BASIC
= SMB_SFILEINFO_UNIX_BASIC
,
865 RAW_SFILEINFO_UNIX_LINK
= SMB_SFILEINFO_UNIX_LINK
,
866 RAW_SFILEINFO_UNIX_HLINK
= SMB_SFILEINFO_UNIX_HLINK
,
867 RAW_SFILEINFO_BASIC_INFORMATION
= SMB_SFILEINFO_BASIC_INFORMATION
,
868 RAW_SFILEINFO_RENAME_INFORMATION
= SMB_SFILEINFO_RENAME_INFORMATION
,
869 RAW_SFILEINFO_DISPOSITION_INFORMATION
= SMB_SFILEINFO_DISPOSITION_INFORMATION
,
870 RAW_SFILEINFO_POSITION_INFORMATION
= SMB_SFILEINFO_POSITION_INFORMATION
,
871 RAW_SFILEINFO_MODE_INFORMATION
= SMB_SFILEINFO_MODE_INFORMATION
,
872 RAW_SFILEINFO_ALLOCATION_INFORMATION
= SMB_SFILEINFO_ALLOCATION_INFORMATION
,
873 RAW_SFILEINFO_END_OF_FILE_INFORMATION
= SMB_SFILEINFO_END_OF_FILE_INFORMATION
,
874 RAW_SFILEINFO_1023
= SMB_SFILEINFO_1023
,
875 RAW_SFILEINFO_1025
= SMB_SFILEINFO_1025
,
876 RAW_SFILEINFO_1029
= SMB_SFILEINFO_1029
,
877 RAW_SFILEINFO_1032
= SMB_SFILEINFO_1032
,
878 RAW_SFILEINFO_1039
= SMB_SFILEINFO_1039
,
879 RAW_SFILEINFO_1040
= SMB_SFILEINFO_1040
882 /* union used in setfileinfo() and setpathinfo() calls */
883 union smb_setfileinfo
{
884 /* generic interface */
886 enum smb_setfileinfo_level level
;
888 union smb_handle_or_path file
;
892 /* RAW_SFILEINFO_SETATTR (SMBsetatr) interface - only via setpathinfo() */
894 enum smb_setfileinfo_level level
;
896 union smb_handle_or_path file
;
902 /* RAW_SFILEINFO_SETATTRE (SMBsetattrE) interface - only via setfileinfo()
903 also RAW_SFILEINFO_STANDARD */
905 enum smb_setfileinfo_level level
;
907 union smb_handle_or_path file
;
911 /* notice that size, alloc_size and attrib are not settable,
912 unlike the corresponding qfileinfo level */
914 } setattre
, standard
;
916 /* RAW_SFILEINFO_EA_SET interface */
918 enum smb_setfileinfo_level level
;
920 union smb_handle_or_path file
;
922 struct ea_struct
*eas
;
926 /* RAW_SFILEINFO_BASIC_INFO and
927 RAW_SFILEINFO_BASIC_INFORMATION interfaces */
929 enum smb_setfileinfo_level level
;
931 union smb_handle_or_path file
;
940 /* RAW_SFILEINFO_DISPOSITION_INFO and
941 RAW_SFILEINFO_DISPOSITION_INFORMATION interfaces */
943 enum smb_setfileinfo_level level
;
945 union smb_handle_or_path file
;
946 BOOL delete_on_close
;
950 /* RAW_SFILEINFO_ALLOCATION_INFO and
951 RAW_SFILEINFO_ALLOCATION_INFORMATION interfaces */
953 enum smb_setfileinfo_level level
;
955 union smb_handle_or_path file
;
956 /* w2k3 rounds this up to nearest 4096 */
961 /* RAW_SFILEINFO_END_OF_FILE_INFO and
962 RAW_SFILEINFO_END_OF_FILE_INFORMATION interfaces */
964 enum smb_setfileinfo_level level
;
966 union smb_handle_or_path file
;
971 /* RAW_SFILEINFO_RENAME_INFORMATION interface */
973 enum smb_setfileinfo_level level
;
975 union smb_handle_or_path file
;
978 const char *new_name
;
980 } rename_information
;
982 /* RAW_SFILEINFO_POSITION_INFORMATION interface */
984 enum smb_setfileinfo_level level
;
986 union smb_handle_or_path file
;
989 } position_information
;
991 /* RAW_SFILEINFO_MODE_INFORMATION interface */
993 enum smb_setfileinfo_level level
;
995 union smb_handle_or_path file
;
996 /* valid values seem to be 0, 2, 4 and 6 */
1003 /* RAW_SFILEINFO_UNIX_BASIC interface */
1005 enum smb_setfileinfo_level level
;
1007 union smb_handle_or_path file
;
1008 uint32_t mode
; /* yuck - this field remains to fix compile of libcli/clifile.c */
1009 uint64_t end_of_file
;
1011 NTTIME status_change_time
;
1020 uint64_t permissions
;
1025 /* RAW_SFILEINFO_UNIX_LINK, RAW_SFILEINFO_UNIX_HLINK interface */
1027 enum smb_setfileinfo_level level
;
1029 union smb_handle_or_path file
;
1030 const char *link_dest
;
1032 } unix_link
, unix_hlink
;
1034 /* RAW_FILEINFO_SET_SEC_DESC */
1036 enum smb_setfileinfo_level level
;
1038 union smb_handle_or_path file
;
1039 uint32_t secinfo_flags
;
1040 struct security_descriptor
*sd
;
1046 enum smb_fsinfo_level
{
1047 RAW_QFS_GENERIC
= 0xF000,
1048 RAW_QFS_DSKATTR
, /* SMBdskattr */
1049 RAW_QFS_ALLOCATION
= SMB_QFS_ALLOCATION
,
1050 RAW_QFS_VOLUME
= SMB_QFS_VOLUME
,
1051 RAW_QFS_VOLUME_INFO
= SMB_QFS_VOLUME_INFO
,
1052 RAW_QFS_SIZE_INFO
= SMB_QFS_SIZE_INFO
,
1053 RAW_QFS_DEVICE_INFO
= SMB_QFS_DEVICE_INFO
,
1054 RAW_QFS_ATTRIBUTE_INFO
= SMB_QFS_ATTRIBUTE_INFO
,
1055 RAW_QFS_UNIX_INFO
= SMB_QFS_UNIX_INFO
,
1056 RAW_QFS_VOLUME_INFORMATION
= SMB_QFS_VOLUME_INFORMATION
,
1057 RAW_QFS_SIZE_INFORMATION
= SMB_QFS_SIZE_INFORMATION
,
1058 RAW_QFS_DEVICE_INFORMATION
= SMB_QFS_DEVICE_INFORMATION
,
1059 RAW_QFS_ATTRIBUTE_INFORMATION
= SMB_QFS_ATTRIBUTE_INFORMATION
,
1060 RAW_QFS_QUOTA_INFORMATION
= SMB_QFS_QUOTA_INFORMATION
,
1061 RAW_QFS_FULL_SIZE_INFORMATION
= SMB_QFS_FULL_SIZE_INFORMATION
,
1062 RAW_QFS_OBJECTID_INFORMATION
= SMB_QFS_OBJECTID_INFORMATION
};
1065 /* union for fsinfo() backend call. Note that there are no in
1066 structures, as this call only contains out parameters */
1068 /* generic interface */
1070 enum smb_fsinfo_level level
;
1071 struct smb2_handle handle
; /* only for smb2 */
1074 uint32_t block_size
;
1075 uint64_t blocks_total
;
1076 uint64_t blocks_free
;
1079 uint32_t serial_number
;
1081 uint32_t max_file_component_length
;
1082 uint32_t device_type
;
1083 uint32_t device_characteristics
;
1084 uint64_t quota_soft
;
1085 uint64_t quota_hard
;
1086 uint64_t quota_flags
;
1093 /* SMBdskattr interface */
1095 enum smb_fsinfo_level level
;
1098 uint16_t units_total
;
1099 uint16_t blocks_per_unit
;
1100 uint16_t block_size
;
1101 uint16_t units_free
;
1105 /* trans2 RAW_QFS_ALLOCATION interface */
1107 enum smb_fsinfo_level level
;
1111 uint32_t sectors_per_unit
;
1112 uint32_t total_alloc_units
;
1113 uint32_t avail_alloc_units
;
1114 uint16_t bytes_per_sector
;
1118 /* TRANS2 RAW_QFS_VOLUME interface */
1120 enum smb_fsinfo_level level
;
1123 uint32_t serial_number
;
1124 struct smb_wire_string volume_name
;
1128 /* TRANS2 RAW_QFS_VOLUME_INFO and RAW_QFS_VOLUME_INFORMATION interfaces */
1130 enum smb_fsinfo_level level
;
1131 struct smb2_handle handle
; /* only for smb2 */
1135 uint32_t serial_number
;
1136 struct smb_wire_string volume_name
;
1140 /* trans2 RAW_QFS_SIZE_INFO and RAW_QFS_SIZE_INFORMATION interfaces */
1142 enum smb_fsinfo_level level
;
1143 struct smb2_handle handle
; /* only for smb2 */
1146 uint64_t total_alloc_units
;
1147 uint64_t avail_alloc_units
; /* maps to call_avail_alloc_units */
1148 uint32_t sectors_per_unit
;
1149 uint32_t bytes_per_sector
;
1153 /* TRANS2 RAW_QFS_DEVICE_INFO and RAW_QFS_DEVICE_INFORMATION interfaces */
1155 enum smb_fsinfo_level level
;
1156 struct smb2_handle handle
; /* only for smb2 */
1159 uint32_t device_type
;
1160 uint32_t characteristics
;
1165 /* TRANS2 RAW_QFS_ATTRIBUTE_INFO and RAW_QFS_ATTRIBUTE_INFORMATION interfaces */
1167 enum smb_fsinfo_level level
;
1168 struct smb2_handle handle
; /* only for smb2 */
1172 uint32_t max_file_component_length
;
1173 struct smb_wire_string fs_type
;
1178 /* TRANS2 RAW_QFS_UNIX_INFO interface */
1180 enum smb_fsinfo_level level
;
1183 uint16_t major_version
;
1184 uint16_t minor_version
;
1185 uint64_t capability
;
1189 /* trans2 RAW_QFS_QUOTA_INFORMATION interface */
1191 enum smb_fsinfo_level level
;
1192 struct smb2_handle handle
; /* only for smb2 */
1195 uint64_t unknown
[3];
1196 uint64_t quota_soft
;
1197 uint64_t quota_hard
;
1198 uint64_t quota_flags
;
1200 } quota_information
;
1202 /* trans2 RAW_QFS_FULL_SIZE_INFORMATION interface */
1204 enum smb_fsinfo_level level
;
1205 struct smb2_handle handle
; /* only for smb2 */
1208 uint64_t total_alloc_units
;
1209 uint64_t call_avail_alloc_units
;
1210 uint64_t actual_avail_alloc_units
;
1211 uint32_t sectors_per_unit
;
1212 uint32_t bytes_per_sector
;
1214 } full_size_information
;
1216 /* trans2 RAW_QFS_OBJECTID_INFORMATION interface */
1218 enum smb_fsinfo_level level
;
1219 struct smb2_handle handle
; /* only for smb2 */
1223 uint64_t unknown
[6];
1225 } objectid_information
;
1230 enum smb_open_level
{
1239 RAW_OPEN_NTTRANS_CREATE
,
1240 RAW_OPEN_OPENX_READX
,
1244 /* the generic interface is defined to be equal to the NTCREATEX interface */
1245 #define RAW_OPEN_GENERIC RAW_OPEN_NTCREATEX
1247 /* union for open() backend call */
1250 * because the *.out.file structs are not aligned to the same offset for each level
1251 * we provide a hepler macro that should be used to find the current smb_handle structure
1253 #define SMB_OPEN_OUT_FILE(op, file) do { \
1254 switch (op->generic.level) { \
1255 case RAW_OPEN_OPEN: \
1256 file = &op->openold.out.file; \
1258 case RAW_OPEN_OPENX: \
1259 file = &op->openx.out.file; \
1261 case RAW_OPEN_MKNEW: \
1262 file = &op->mknew.out.file; \
1264 case RAW_OPEN_CREATE: \
1265 file = &op->create.out.file; \
1267 case RAW_OPEN_CTEMP: \
1268 file = &op->ctemp.out.file; \
1270 case RAW_OPEN_SPLOPEN: \
1271 file = &op->splopen.out.file; \
1273 case RAW_OPEN_NTCREATEX: \
1274 file = &op->ntcreatex.out.file; \
1276 case RAW_OPEN_T2OPEN: \
1277 file = &op->t2open.out.file; \
1279 case RAW_OPEN_NTTRANS_CREATE: \
1280 file = &op->nttrans.out.file; \
1282 case RAW_OPEN_OPENX_READX: \
1283 file = &op->openxreadx.out.file; \
1285 case RAW_OPEN_SMB2: \
1286 file = &op->smb2.out.file; \
1289 /* this must be a programmer error */ \
1294 /* SMBNTCreateX interface */
1296 enum smb_open_level level
;
1300 uint32_t access_mask
;
1301 uint64_t alloc_size
;
1303 uint32_t share_access
;
1304 uint32_t open_disposition
;
1305 uint32_t create_options
;
1306 uint32_t impersonation
;
1307 uint8_t security_flags
;
1308 /* NOTE: fname can also be a pointer to a
1309 uint64_t file_id if create_options has the
1310 NTCREATEX_OPTIONS_OPEN_BY_FILE_ID flag set */
1313 /* these last 2 elements are only used in the
1314 NTTRANS varient of the call */
1315 struct security_descriptor
*sec_desc
;
1316 struct smb_ea_list
*ea_list
;
1319 union smb_handle file
;
1320 uint8_t oplock_level
;
1321 uint32_t create_action
;
1327 uint64_t alloc_size
;
1331 uint8_t is_directory
;
1333 } ntcreatex
, nttrans
, generic
;
1335 /* TRANS2_OPEN interface */
1337 enum smb_open_level level
;
1341 uint16_t search_attrs
;
1342 uint16_t file_attrs
;
1349 struct ea_struct
*eas
;
1352 union smb_handle file
;
1364 /* SMBopen interface */
1366 enum smb_open_level level
;
1369 uint16_t search_attrs
;
1373 union smb_handle file
;
1381 /* SMBopenX interface */
1383 enum smb_open_level level
;
1387 uint16_t search_attrs
; /* not honoured by win2003 */
1388 uint16_t file_attrs
;
1389 time_t write_time
; /* not honoured by win2003 */
1391 uint32_t size
; /* note that this sets the
1392 initial file size, not
1393 just allocation size */
1394 uint32_t timeout
; /* not honoured by win2003 */
1398 union smb_handle file
;
1406 uint32_t unique_fid
;
1407 uint32_t access_mask
;
1412 /* SMBmknew interface */
1414 enum smb_open_level level
;
1421 union smb_handle file
;
1425 /* SMBctemp interface */
1427 enum smb_open_level level
;
1431 const char *directory
;
1434 union smb_handle file
;
1435 /* temp name, relative to directory */
1440 /* SMBsplopen interface */
1442 enum smb_open_level level
;
1444 uint16_t setup_length
;
1449 union smb_handle file
;
1454 /* chained OpenX/ReadX interface */
1456 enum smb_open_level level
;
1460 uint16_t search_attrs
; /* not honoured by win2003 */
1461 uint16_t file_attrs
;
1462 time_t write_time
; /* not honoured by win2003 */
1464 uint32_t size
; /* note that this sets the
1465 initial file size, not
1466 just allocation size */
1467 uint32_t timeout
; /* not honoured by win2003 */
1477 union smb_handle file
;
1485 uint32_t unique_fid
;
1486 uint32_t access_mask
;
1492 uint16_t compaction_mode
;
1497 #define SMB2_CREATE_FLAG_REQUEST_OPLOCK 0x0100
1498 #define SMB2_CREATE_FLAG_REQUEST_EXCLUSIVE_OPLOCK 0x0800
1499 #define SMB2_CREATE_FLAG_GRANT_OPLOCK 0x0001
1500 #define SMB2_CREATE_FLAG_GRANT_EXCLUSIVE_OPLOCK 0x0080
1503 struct smb2_create
{
1504 enum smb_open_level level
;
1506 /* static body buffer 56 (0x38) bytes */
1507 /* uint16_t buffer_code; 0x39 = 0x38 + 1 */
1508 uint16_t oplock_flags
; /* SMB2_CREATE_FLAG_* */
1509 uint32_t impersonation
;
1510 uint32_t unknown3
[4];
1511 uint32_t access_mask
;
1514 uint32_t share_access
;
1515 uint32_t open_disposition
;
1516 uint32_t create_options
;
1518 /* uint16_t fname_ofs */
1519 /* uint16_t fname_size */
1520 /* uint32_t blob_ofs; */
1521 /* uint32_t blob_size; */
1526 /* optional list of extended attributes */
1527 struct smb_ea_list eas
;
1530 union smb_handle file
;
1532 /* static body buffer 88 (0x58) bytes */
1533 /* uint16_t buffer_code; 0x59 = 0x58 + 1 */
1534 uint16_t oplock_flags
; /* SMB2_CREATE_FLAG_* */
1535 uint32_t create_action
;
1540 uint64_t alloc_size
;
1544 /* struct smb2_handle handle;*/
1545 /* uint32_t blob_ofs; */
1546 /* uint32_t blob_size; */
1556 enum smb_read_level
{
1564 #define RAW_READ_GENERIC RAW_READ_READX
1566 /* union for read() backend call
1568 note that .infoX.out.data will be allocated before the backend is
1569 called. It will be big enough to hold the maximum size asked for
1572 /* SMBreadX (and generic) interface */
1574 enum smb_read_level level
;
1576 union smb_handle file
;
1581 BOOL read_for_execute
;
1586 uint16_t compaction_mode
;
1591 /* SMBreadbraw interface */
1593 enum smb_read_level level
;
1595 union smb_handle file
;
1608 /* SMBlockandread interface */
1610 enum smb_read_level level
;
1612 union smb_handle file
;
1623 /* SMBread interface */
1625 enum smb_read_level level
;
1627 union smb_handle file
;
1640 enum smb_read_level level
;
1642 union smb_handle file
;
1644 /* static body buffer 48 (0x30) bytes */
1645 /* uint16_t buffer_code; 0x31 = 0x30 + 1 */
1649 /* struct smb2_handle handle; */
1650 uint64_t unknown1
; /* 0x0000000000000000 */
1651 uint64_t unknown2
; /* 0x0000000000000000 */
1655 /* static body buffer 16 (0x10) bytes */
1656 /* uint16_t buffer_code; 0x11 = 0x10 + 1 */
1657 /* uint16_t data_ofs; */
1658 /* uint32_t data_size; */
1659 uint64_t unknown1
; /* 0x0000000000000000 */
1668 enum smb_write_level
{
1669 RAW_WRITE_WRITEUNLOCK
,
1672 RAW_WRITE_WRITECLOSE
,
1677 #define RAW_WRITE_GENERIC RAW_WRITE_WRITEX
1679 /* union for write() backend call
1682 /* SMBwriteX interface */
1684 enum smb_write_level level
;
1686 union smb_handle file
;
1691 const uint8_t *data
;
1699 /* SMBwriteunlock interface */
1701 enum smb_write_level level
;
1703 union smb_handle file
;
1707 const uint8_t *data
;
1714 /* SMBwrite interface */
1716 enum smb_write_level level
;
1718 union smb_handle file
;
1722 const uint8_t *data
;
1729 /* SMBwriteclose interface */
1731 enum smb_write_level level
;
1733 union smb_handle file
;
1737 const uint8_t *data
;
1744 /* SMBsplwrite interface */
1746 enum smb_write_level level
;
1748 union smb_handle file
;
1750 const uint8_t *data
;
1756 enum smb_write_level level
;
1758 union smb_handle file
;
1760 /* static body buffer 48 (0x30) bytes */
1761 /* uint16_t buffer_code; 0x31 = 0x30 + 1 */
1762 /* uint16_t data_ofs; */
1763 /* uint32_t data_size; */
1765 /* struct smb2_handle handle; */
1766 uint64_t unknown1
; /* 0xFFFFFFFFFFFFFFFF */
1767 uint64_t unknown2
; /* 0xFFFFFFFFFFFFFFFF */
1773 /* static body buffer 17 (0x11) bytes */
1774 /* uint16_t buffer_code; 0x11 */
1777 uint64_t unknown1
; /* 0x0000000000000000 */
1784 enum smb_lock_level
{
1791 /* the generic interface is defined to be equal to the lockingX interface */
1792 #define RAW_LOCK_GENERIC RAW_LOCK_LOCKX
1794 /* union for lock() backend call
1797 /* SMBlockingX (and generic) interface */
1799 enum smb_lock_level level
;
1801 union smb_handle file
;
1806 struct smb_lock_entry
{
1810 } *locks
; /* unlocks are first in the arrray */
1814 /* SMBlock and SMBunlock interface */
1816 enum smb_lock_level level
;
1818 union smb_handle file
;
1826 enum smb_lock_level level
;
1828 union smb_handle file
;
1830 /* static body buffer 48 (0x30) bytes */
1831 /* uint16_t buffer_code; 0x30 */
1832 uint16_t unknown1
; /* must be 0x0001 */
1834 /* struct smb2_handle handle; */
1838 #define SMB2_LOCK_FLAG_NONE 0x00000000
1839 #define SMB2_LOCK_FLAG_EXCLUSIV 0x00000002
1840 #define SMB2_LOCK_FLAG_UNLOCK 0x00000004
1841 #define SMB2_LOCK_FLAGS_MASK 0x00000006
1845 /* static body buffer 4 (0x04) bytes */
1846 /* uint16_t buffer_code; 0x04 */
1853 enum smb_close_level
{
1859 #define RAW_CLOSE_GENERIC RAW_CLOSE_CLOSE
1862 union for close() backend call
1865 /* SMBclose (and generic) interface */
1867 enum smb_close_level level
;
1869 union smb_handle file
;
1874 /* SMBsplclose interface - empty! */
1876 enum smb_close_level level
;
1878 union smb_handle file
;
1884 enum smb_close_level level
;
1886 union smb_handle file
;
1888 /* static body buffer 24 (0x18) bytes */
1889 /* uint16_t buffer_code; 0x18 */
1890 #define SMB2_CLOSE_FLAGS_FULL_INFORMATION (1<<0)
1891 uint16_t flags
; /* SMB2_CLOSE_FLAGS_* */
1895 /* static body buffer 60 (0x3C) bytes */
1896 /* uint16_t buffer_code; 0x3C */
1903 uint64_t alloc_size
;
1911 enum smb_lpq_level
{RAW_LPQ_GENERIC
, RAW_LPQ_RETQ
};
1914 union for lpq() backend
1917 /* generic interface */
1919 enum smb_lpq_level level
;
1924 /* SMBsplretq interface */
1926 enum smb_lpq_level level
;
1934 uint16_t restart_idx
;
1946 enum smb_ioctl_level
{
1953 union for ioctl() backend
1956 /* generic interface */
1958 enum smb_ioctl_level level
;
1960 union smb_handle file
;
1964 /* struct for SMBioctl */
1966 enum smb_ioctl_level level
;
1968 union smb_handle file
;
1977 /* struct for NT ioctl call */
1979 enum smb_ioctl_level level
;
1981 union smb_handle file
;
1995 enum smb_ioctl_level level
;
1997 union smb_handle file
;
1999 /* static body buffer 56 (0x38) bytes */
2000 /* uint16_t buffer_code; 0x39 = 0x38 + 1 */
2003 /*struct smb2_handle handle;*/
2004 /* uint32_t out_ofs; */
2005 /* uint32_t out_size; */
2007 /* uint32_t in_ofs; */
2008 /* uint32_t in_size; */
2009 uint32_t max_response_size
;
2017 union smb_handle file
;
2019 /* static body buffer 48 (0x30) bytes */
2020 /* uint16_t buffer_code; 0x31 = 0x30 + 1 */
2023 /* struct smb2_handle handle; */
2024 /* uint32_t in_ofs; */
2025 /* uint32_t in_size; */
2026 /* uint32_t out_ofs; */
2027 /* uint32_t out_size; */
2038 enum smb_flush_level
{
2045 /* struct for SMBflush */
2047 enum smb_flush_level level
;
2049 union smb_handle file
;
2053 /* SMBflush with 0xFFFF wildcard fnum */
2055 enum smb_flush_level level
;
2060 enum smb_flush_level level
;
2062 union smb_handle file
;
2068 /* struct for SMBcopy */
2083 /* struct for transact/transact2 call */
2091 uint8_t setup_count
;
2093 const char *trans_name
; /* SMBtrans only */
2099 uint8_t setup_count
;
2106 /* struct for nttransact2 call */
2107 struct smb_nttrans
{
2112 uint32_t setup_count
;
2120 uint8_t setup_count
;
2128 /* struct for nttrans change notify call */
2131 union smb_handle file
;
2132 uint32_t buffer_size
;
2133 uint32_t completion_filter
;
2138 uint32_t num_changes
;
2139 struct notify_changes
{
2141 struct smb_wire_string name
;
2146 enum smb_search_level
{RAW_SEARCH_GENERIC
= 0xF000,
2147 RAW_SEARCH_SEARCH
, /* SMBsearch */
2148 RAW_SEARCH_FFIRST
, /* SMBffirst */
2149 RAW_SEARCH_FUNIQUE
, /* SMBfunique */
2150 RAW_SEARCH_SMB2
, /* SMB2 Find */
2151 RAW_SEARCH_STANDARD
= SMB_FIND_STANDARD
,
2152 RAW_SEARCH_EA_SIZE
= SMB_FIND_EA_SIZE
,
2153 RAW_SEARCH_EA_LIST
= SMB_FIND_EA_LIST
,
2154 RAW_SEARCH_DIRECTORY_INFO
= SMB_FIND_DIRECTORY_INFO
,
2155 RAW_SEARCH_FULL_DIRECTORY_INFO
= SMB_FIND_FULL_DIRECTORY_INFO
,
2156 RAW_SEARCH_NAME_INFO
= SMB_FIND_NAME_INFO
,
2157 RAW_SEARCH_BOTH_DIRECTORY_INFO
= SMB_FIND_BOTH_DIRECTORY_INFO
,
2158 RAW_SEARCH_ID_FULL_DIRECTORY_INFO
= SMB_FIND_ID_FULL_DIRECTORY_INFO
,
2159 RAW_SEARCH_ID_BOTH_DIRECTORY_INFO
= SMB_FIND_ID_BOTH_DIRECTORY_INFO
,
2160 RAW_SEARCH_UNIX_INFO
= SMB_FIND_UNIX_INFO
};
2163 /* union for file search */
2164 union smb_search_first
{
2166 enum smb_search_level level
;
2169 /* search (old) findfirst interface.
2170 Also used for ffirst and funique. */
2172 enum smb_search_level level
;
2176 uint16_t search_attrib
;
2177 const char *pattern
;
2184 /* trans2 findfirst interface */
2186 enum smb_search_level level
;
2189 uint16_t search_attrib
;
2192 uint32_t storage_type
;
2193 const char *pattern
;
2195 /* the ea names are only used for RAW_SEARCH_EA_LIST */
2197 struct ea_name
*ea_names
;
2202 uint16_t end_of_search
;
2207 SMB2 uses different level numbers for the same old SMB search levels
2209 #define SMB2_FIND_DIRECTORY_INFO 0x01
2210 #define SMB2_FIND_FULL_DIRECTORY_INFO 0x02
2211 #define SMB2_FIND_BOTH_DIRECTORY_INFO 0x03
2212 #define SMB2_FIND_NAME_INFO 0x0C
2213 #define SMB2_FIND_ID_BOTH_DIRECTORY_INFO 0x25
2214 #define SMB2_FIND_ID_FULL_DIRECTORY_INFO 0x26
2217 enum smb_search_level level
;
2219 union smb_handle file
;
2221 /* static body buffer 32 (0x20) bytes */
2222 /* uint16_t buffer_code; 0x21 = 0x20 + 1 */
2224 uint8_t continue_flags
; /* SMB2_CONTINUE_FLAG_* */
2225 uint32_t unknown
; /* perhaps a continue token? */
2226 /* struct smb2_handle handle; */
2227 /* uint16_t pattern_ofs; */
2228 /* uint32_t pattern_size; */
2229 uint32_t max_response_size
;
2232 const char *pattern
;
2235 /* static body buffer 8 (0x08) bytes */
2236 /* uint16_t buffer_code; 0x08 */
2237 /* uint16_t blob_ofs; */
2238 /* uint32_t blob_size; */
2246 /* union for file search continue */
2247 union smb_search_next
{
2249 enum smb_search_level level
;
2252 /* search (old) findnext interface. Also used
2253 for ffirst when continuing */
2255 enum smb_search_level level
;
2259 uint16_t search_attrib
;
2260 struct smb_search_id
{
2264 uint32_t server_cookie
;
2265 uint32_t client_cookie
;
2273 /* trans2 findnext interface */
2275 enum smb_search_level level
;
2280 uint32_t resume_key
;
2282 const char *last_name
;
2284 /* the ea names are only used for RAW_SEARCH_EA_LIST */
2286 struct ea_name
*ea_names
;
2290 uint16_t end_of_search
;
2295 /* union for search reply file data */
2296 union smb_search_data
{
2297 /* search (old) findfirst */
2302 struct smb_search_id id
;
2306 /* trans2 findfirst RAW_SEARCH_STANDARD level */
2308 uint32_t resume_key
;
2313 uint32_t alloc_size
;
2315 struct smb_wire_string name
;
2318 /* trans2 findfirst RAW_SEARCH_EA_SIZE level */
2320 uint32_t resume_key
;
2325 uint32_t alloc_size
;
2328 struct smb_wire_string name
;
2331 /* trans2 findfirst RAW_SEARCH_EA_LIST level */
2333 uint32_t resume_key
;
2338 uint32_t alloc_size
;
2340 struct smb_ea_list eas
;
2341 struct smb_wire_string name
;
2344 /* RAW_SEARCH_DIRECTORY_INFO interface */
2346 uint32_t file_index
;
2352 uint64_t alloc_size
;
2354 struct smb_wire_string name
;
2357 /* RAW_SEARCH_FULL_DIRECTORY_INFO interface */
2359 uint32_t file_index
;
2365 uint64_t alloc_size
;
2368 struct smb_wire_string name
;
2369 } full_directory_info
;
2371 /* RAW_SEARCH_NAME_INFO interface */
2373 uint32_t file_index
;
2374 struct smb_wire_string name
;
2377 /* RAW_SEARCH_BOTH_DIRECTORY_INFO interface */
2379 uint32_t file_index
;
2385 uint64_t alloc_size
;
2388 struct smb_wire_string short_name
;
2389 struct smb_wire_string name
;
2390 } both_directory_info
;
2392 /* RAW_SEARCH_ID_FULL_DIRECTORY_INFO interface */
2394 uint32_t file_index
;
2400 uint64_t alloc_size
;
2404 struct smb_wire_string name
;
2405 } id_full_directory_info
;
2407 /* RAW_SEARCH_ID_BOTH_DIRECTORY_INFO interface */
2409 uint32_t file_index
;
2415 uint64_t alloc_size
;
2419 struct smb_wire_string short_name
;
2420 struct smb_wire_string name
;
2421 } id_both_directory_info
;
2423 /* RAW_SEARCH_UNIX_INFO interface */
2425 uint32_t file_index
;
2427 uint64_t alloc_size
;
2428 NTTIME status_change_time
;
2437 uint64_t permissions
;
2444 enum smb_search_close_level
{RAW_FINDCLOSE_GENERIC
, RAW_FINDCLOSE_FCLOSE
, RAW_FINDCLOSE_FINDCLOSE
};
2446 /* union for file search close */
2447 union smb_search_close
{
2449 enum smb_search_close_level level
;
2452 /* SMBfclose (old search) interface */
2454 enum smb_search_close_level level
;
2457 /* max_count and search_attrib are not used, but are present */
2459 uint16_t search_attrib
;
2460 struct smb_search_id id
;
2464 /* SMBfindclose interface */
2466 enum smb_search_close_level level
;
2474 #endif /* __LIBCLI_RAW_INTERFACES_H__ */