summaryrefslogtreecommitdiff
path: root/source4
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2019-04-25 12:12:34 +0200
committerKarolin Seeger <kseeger@samba.org>2019-05-17 07:18:29 +0000
commitd2c87ba602b033171f62a2bdbecb19131298881b (patch)
tree0d91624c0cb95280600ab81ed426d58086dddf54 /source4
parente8a1f4c233b7ad7fd5a86d9c58e5ccfdcd65ea9a (diff)
downloadsamba-d2c87ba602b033171f62a2bdbecb19131298881b.tar.gz
s4:libcli/raw: add RAW_FILEINFO_NORMALIZED_NAME_INFORMATION support
This is supported over the wire in SMB 3.1.1 on starting with Windows 10 1803. BUG: https://bugzilla.samba.org/show_bug.cgi?id=13919 Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org> (cherry picked from commit 0c602319194bda6b2a0efdd7c186078583f79264)
Diffstat (limited to 'source4')
-rw-r--r--source4/libcli/raw/interfaces.h16
-rw-r--r--source4/libcli/raw/rawfileinfo.c11
-rw-r--r--source4/libcli/raw/trans2.h1
-rw-r--r--source4/ntvfs/ntvfs_generic.c2
-rw-r--r--source4/ntvfs/posix/pvfs_qfileinfo.c2
-rw-r--r--source4/torture/gentest.c4
6 files changed, 24 insertions, 12 deletions
diff --git a/source4/libcli/raw/interfaces.h b/source4/libcli/raw/interfaces.h
index 43a53f834df..e57d276d033 100644
--- a/source4/libcli/raw/interfaces.h
+++ b/source4/libcli/raw/interfaces.h
@@ -461,6 +461,7 @@ enum smb_fileinfo_level {
RAW_FILEINFO_COMPRESSION_INFORMATION = SMB_QFILEINFO_COMPRESSION_INFORMATION,
RAW_FILEINFO_NETWORK_OPEN_INFORMATION = SMB_QFILEINFO_NETWORK_OPEN_INFORMATION,
RAW_FILEINFO_ATTRIBUTE_TAG_INFORMATION = SMB_QFILEINFO_ATTRIBUTE_TAG_INFORMATION,
+ RAW_FILEINFO_NORMALIZED_NAME_INFORMATION= SMB_QFILEINFO_NORMALIZED_NAME_INFORMATION,
/* SMB2 specific levels */
RAW_FILEINFO_SMB2_ALL_EAS = 0x0f01,
RAW_FILEINFO_SMB2_ALL_INFORMATION = 0x1201
@@ -643,6 +644,8 @@ union smb_fileinfo {
} ea_info;
/* RAW_FILEINFO_NAME_INFO and RAW_FILEINFO_NAME_INFORMATION interfaces */
+ /* RAW_FILEINFO_ALT_NAME_INFO and RAW_FILEINFO_ALT_NAME_INFORMATION interfaces */
+ /* RAW_FILEINFO_NORMALIZED_NAME_INFORMATION interface */
struct {
enum smb_fileinfo_level level;
struct {
@@ -651,7 +654,7 @@ union smb_fileinfo {
struct {
struct smb_wire_string fname;
} out;
- } name_info;
+ } name_info, alt_name_info, normalized_name_info;
/* RAW_FILEINFO_ALL_INFO and RAW_FILEINFO_ALL_INFORMATION interfaces */
struct {
@@ -704,17 +707,6 @@ union smb_fileinfo {
} out;
} all_info2;
- /* RAW_FILEINFO_ALT_NAME_INFO and RAW_FILEINFO_ALT_NAME_INFORMATION interfaces */
- struct {
- enum smb_fileinfo_level level;
- struct {
- union smb_handle_or_path file;
- } in;
- struct {
- struct smb_wire_string fname;
- } out;
- } alt_name_info;
-
/* RAW_FILEINFO_STREAM_INFO and RAW_FILEINFO_STREAM_INFORMATION interfaces */
struct {
enum smb_fileinfo_level level;
diff --git a/source4/libcli/raw/rawfileinfo.c b/source4/libcli/raw/rawfileinfo.c
index 50a6731ba41..a2599085ab7 100644
--- a/source4/libcli/raw/rawfileinfo.c
+++ b/source4/libcli/raw/rawfileinfo.c
@@ -219,6 +219,13 @@ NTSTATUS smb_raw_fileinfo_passthru_parse(const DATA_BLOB *blob, TALLOC_CTX *mem_
parms->attribute_tag_information.out.reparse_tag = IVAL(blob->data, 4);
return NT_STATUS_OK;
+ case RAW_FILEINFO_NORMALIZED_NAME_INFORMATION:
+ FINFO_CHECK_MIN_SIZE(4);
+ smbcli_blob_pull_string(NULL, mem_ctx, blob,
+ &parms->normalized_name_info.out.fname,
+ 0, 4, STR_UNICODE);
+ return NT_STATUS_OK;
+
case RAW_FILEINFO_SMB2_ALL_EAS:
FINFO_CHECK_MIN_SIZE(4);
return ea_pull_list_chained(blob, mem_ctx,
@@ -443,6 +450,10 @@ static NTSTATUS smb_raw_info_backend(struct smbcli_session *session,
return smb_raw_fileinfo_passthru_parse(blob, mem_ctx,
RAW_FILEINFO_ATTRIBUTE_TAG_INFORMATION, parms);
+ case RAW_FILEINFO_NORMALIZED_NAME_INFORMATION:
+ return smb_raw_fileinfo_passthru_parse(blob, mem_ctx,
+ RAW_FILEINFO_NORMALIZED_NAME_INFORMATION, parms);
+
case RAW_FILEINFO_SMB2_ALL_INFORMATION:
return smb_raw_fileinfo_passthru_parse(blob, mem_ctx,
RAW_FILEINFO_SMB2_ALL_INFORMATION, parms);
diff --git a/source4/libcli/raw/trans2.h b/source4/libcli/raw/trans2.h
index b7cfc6d0e8b..f93b1f1d35b 100644
--- a/source4/libcli/raw/trans2.h
+++ b/source4/libcli/raw/trans2.h
@@ -139,6 +139,7 @@ Found 8 aliased levels
#define SMB_QFILEINFO_COMPRESSION_INFORMATION 1028
#define SMB_QFILEINFO_NETWORK_OPEN_INFORMATION 1034
#define SMB_QFILEINFO_ATTRIBUTE_TAG_INFORMATION 1035
+#define SMB_QFILEINFO_NORMALIZED_NAME_INFORMATION 1048
diff --git a/source4/ntvfs/ntvfs_generic.c b/source4/ntvfs/ntvfs_generic.c
index fe68b4132bc..69e046c9143 100644
--- a/source4/ntvfs/ntvfs_generic.c
+++ b/source4/ntvfs/ntvfs_generic.c
@@ -960,6 +960,8 @@ NTSTATUS ntvfs_map_fileinfo(TALLOC_CTX *mem_ctx,
case RAW_FILEINFO_SMB2_ALL_EAS:
case RAW_FILEINFO_SMB2_ALL_INFORMATION:
return NT_STATUS_INVALID_LEVEL;
+ case RAW_FILEINFO_NORMALIZED_NAME_INFORMATION:
+ return NT_STATUS_NOT_SUPPORTED;
}
return NT_STATUS_INVALID_LEVEL;
diff --git a/source4/ntvfs/posix/pvfs_qfileinfo.c b/source4/ntvfs/posix/pvfs_qfileinfo.c
index 33ff9ce3cba..53cde69b1b7 100644
--- a/source4/ntvfs/posix/pvfs_qfileinfo.c
+++ b/source4/ntvfs/posix/pvfs_qfileinfo.c
@@ -342,6 +342,8 @@ static NTSTATUS pvfs_map_fileinfo(struct pvfs_state *pvfs,
case RAW_FILEINFO_UNIX_INFO2:
case RAW_FILEINFO_UNIX_LINK:
return NT_STATUS_INVALID_LEVEL;
+ case RAW_FILEINFO_NORMALIZED_NAME_INFORMATION:
+ return NT_STATUS_NOT_SUPPORTED;
}
return NT_STATUS_INVALID_LEVEL;
diff --git a/source4/torture/gentest.c b/source4/torture/gentest.c
index 33de6cc0423..24228ad65d4 100644
--- a/source4/torture/gentest.c
+++ b/source4/torture/gentest.c
@@ -1697,6 +1697,10 @@ static bool cmp_fileinfo(int instance,
CHECK_EQUAL(attribute_tag_information.out.reparse_tag);
break;
+ case RAW_FILEINFO_NORMALIZED_NAME_INFORMATION:
+ CHECK_WSTR_EQUAL(normalized_name_info.out.fname);
+ break;
+
case RAW_FILEINFO_SMB2_ALL_INFORMATION:
CHECK_NTTIMES_EQUAL(all_info2.out.create_time);
CHECK_NTTIMES_EQUAL(all_info2.out.access_time);