diff options
author | Stefan Metzmacher <metze@samba.org> | 2019-04-25 12:12:34 +0200 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2019-05-17 07:18:29 +0000 |
commit | d2c87ba602b033171f62a2bdbecb19131298881b (patch) | |
tree | 0d91624c0cb95280600ab81ed426d58086dddf54 /source4 | |
parent | e8a1f4c233b7ad7fd5a86d9c58e5ccfdcd65ea9a (diff) | |
download | samba-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.h | 16 | ||||
-rw-r--r-- | source4/libcli/raw/rawfileinfo.c | 11 | ||||
-rw-r--r-- | source4/libcli/raw/trans2.h | 1 | ||||
-rw-r--r-- | source4/ntvfs/ntvfs_generic.c | 2 | ||||
-rw-r--r-- | source4/ntvfs/posix/pvfs_qfileinfo.c | 2 | ||||
-rw-r--r-- | source4/torture/gentest.c | 4 |
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); |