The Samba-Bugzilla – Attachment 12549 Details for
Bug 12144
Incorrect response to FSCTL_SET_COMPRESSION request
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
patchset for 4.5, cherry picked from master
bso12144_fsctl_compression_support_45t.patchset (text/plain), 6.61 KB, created by
David Disseldorp
on 2016-10-06 11:25:14 UTC
(
hide
)
Description:
patchset for 4.5, cherry picked from master
Filename:
MIME Type:
Creator:
David Disseldorp
Created:
2016-10-06 11:25:14 UTC
Size:
6.61 KB
patch
obsolete
>From 2dc032b6f11b650af3f457108409483bd6e32fe0 Mon Sep 17 00:00:00 2001 >From: David Disseldorp <ddiss@samba.org> >Date: Tue, 4 Oct 2016 01:09:37 +0200 >Subject: [PATCH 1/2] smbd/ioctl: match WS2016 ReFS get compression behaviour > >ReFS doesn't support compression, but responds to get-compression FSCTLs >with a successful COMPRESSION_FORMAT_NONE response. set-compression >results in NT_STATUS_NOT_SUPPORTED. > >This commit modifies Samba to match the ReFS behaviour, when run atop >a VFS that doesn't expose compression support. > >Bug: https://bugzilla.samba.org/show_bug.cgi?id=12144 > >Reported-by: Nick Barrett >Signed-off-by: David Disseldorp <ddiss@samba.org> >Reviewed-by: Jeremy Allison <jra@samba.org> >(cherry picked from commit 7a1000222877cdbc8967122b9de29021a42f4c8a) >--- > source3/smbd/smb2_ioctl_filesys.c | 29 +++++++++++++++++------------ > 1 file changed, 17 insertions(+), 12 deletions(-) > >diff --git a/source3/smbd/smb2_ioctl_filesys.c b/source3/smbd/smb2_ioctl_filesys.c >index 6e4a785..55ce3f2 100644 >--- a/source3/smbd/smb2_ioctl_filesys.c >+++ b/source3/smbd/smb2_ioctl_filesys.c >@@ -48,19 +48,24 @@ static NTSTATUS fsctl_get_cmprn(TALLOC_CTX *mem_ctx, > > /* Windows doesn't check for SEC_FILE_READ_ATTRIBUTE permission here */ > >- if ((fsp->conn->fs_capabilities & FILE_FILE_COMPRESSION) == 0) { >- DEBUG(4, ("FS does not advertise compression support\n")); >- return NT_STATUS_NOT_SUPPORTED; >- } >- > ZERO_STRUCT(cmpr_state); >- status = SMB_VFS_GET_COMPRESSION(fsp->conn, >- mem_ctx, >- fsp, >- NULL, >- &cmpr_state.format); >- if (!NT_STATUS_IS_OK(status)) { >- return status; >+ if (fsp->conn->fs_capabilities & FILE_FILE_COMPRESSION) { >+ status = SMB_VFS_GET_COMPRESSION(fsp->conn, >+ mem_ctx, >+ fsp, >+ NULL, >+ &cmpr_state.format); >+ if (!NT_STATUS_IS_OK(status)) { >+ return status; >+ } >+ } else { >+ /* >+ * bso#12144: The underlying filesystem doesn't support >+ * compression, so we should respond with "not-compressed" >+ * (like WS2016 ReFS) instead of STATUS_NOT_SUPPORTED or >+ * NT_STATUS_INVALID_DEVICE_REQUEST. >+ */ >+ cmpr_state.format = COMPRESSION_FORMAT_NONE; > } > > ndr_ret = ndr_push_struct_blob(&output, mem_ctx, >-- >2.6.6 > > >From 4810bbae9ad3473426353fbb7ef07e7f446278aa Mon Sep 17 00:00:00 2001 >From: David Disseldorp <ddiss@samba.org> >Date: Tue, 4 Oct 2016 01:15:20 +0200 >Subject: [PATCH 2/2] torture/ioctl: test compression responses when > unsupported > >Confirm that Samba matches Windows Server 2016 ReFS behaviour here. > >Bug: https://bugzilla.samba.org/show_bug.cgi?id=12144 > >Reported-by: Nick Barrett >Signed-off-by: David Disseldorp <ddiss@samba.org> >Reviewed-by: Jeremy Allison <jra@samba.org> > >Autobuild-User(master): Jeremy Allison <jra@samba.org> >Autobuild-Date(master): Thu Oct 6 06:14:34 CEST 2016 on sn-devel-144 > >(cherry picked from commit f6f6263f1f03db965b64b5d7858e44ab5ffb0aeb) >--- > selftest/knownfail | 1 + > source4/torture/smb2/ioctl.c | 76 ++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 77 insertions(+) > >diff --git a/selftest/knownfail b/selftest/knownfail >index 3b28589..c1899da 100644 >--- a/selftest/knownfail >+++ b/selftest/knownfail >@@ -174,6 +174,7 @@ > ^samba3.smb2.replay.replay3 > ^samba3.smb2.replay.replay4 > ^samba3.smb2.lock.*replay >+^samba4.smb2.ioctl.compress_notsup.*\(ad_dc_ntvfs\) > ^samba3.raw.session.*reauth2 # maybe fix this? > ^samba3.rpc.lsa.secrets.seal # This gives NT_STATUS_LOCAL_USER_SESSION_KEY > ^samba3.rpc.samr.passwords.badpwdcount.samr.badPwdCount\(nt4_dc\) # We fail this test currently >diff --git a/source4/torture/smb2/ioctl.c b/source4/torture/smb2/ioctl.c >index 0aa3714..5fc03bc 100644 >--- a/source4/torture/smb2/ioctl.c >+++ b/source4/torture/smb2/ioctl.c >@@ -2543,6 +2543,78 @@ static bool test_ioctl_compress_perms(struct torture_context *torture, > return true; > } > >+static bool test_ioctl_compress_notsup_get(struct torture_context *torture, >+ struct smb2_tree *tree) >+{ >+ struct smb2_handle fh; >+ NTSTATUS status; >+ TALLOC_CTX *tmp_ctx = talloc_new(tree); >+ bool ok; >+ uint16_t compression_fmt; >+ >+ ok = test_setup_create_fill(torture, tree, tmp_ctx, >+ FNAME, &fh, 0, SEC_RIGHTS_FILE_ALL, >+ FILE_ATTRIBUTE_NORMAL); >+ torture_assert(torture, ok, "setup compression file"); >+ >+ /* skip if the server DOES support compression */ >+ status = test_ioctl_compress_fs_supported(torture, tree, tmp_ctx, &fh, >+ &ok); >+ torture_assert_ntstatus_ok(torture, status, "SMB2_GETINFO_FS"); >+ if (ok) { >+ smb2_util_close(tree, fh); >+ torture_skip(torture, "FS compression supported\n"); >+ } >+ >+ /* >+ * Despite not supporting compression, we should get a successful >+ * response indicating that the file is uncompressed - like WS2016. >+ */ >+ status = test_ioctl_compress_get(torture, tmp_ctx, tree, fh, >+ &compression_fmt); >+ torture_assert_ntstatus_ok(torture, status, "FSCTL_GET_COMPRESSION"); >+ >+ torture_assert(torture, (compression_fmt == COMPRESSION_FORMAT_NONE), >+ "initial compression state not NONE"); >+ >+ smb2_util_close(tree, fh); >+ talloc_free(tmp_ctx); >+ return true; >+} >+ >+static bool test_ioctl_compress_notsup_set(struct torture_context *torture, >+ struct smb2_tree *tree) >+{ >+ struct smb2_handle fh; >+ NTSTATUS status; >+ TALLOC_CTX *tmp_ctx = talloc_new(tree); >+ bool ok; >+ >+ ok = test_setup_create_fill(torture, tree, tmp_ctx, >+ FNAME, &fh, 0, SEC_RIGHTS_FILE_ALL, >+ FILE_ATTRIBUTE_NORMAL); >+ torture_assert(torture, ok, "setup compression file"); >+ >+ /* skip if the server DOES support compression */ >+ status = test_ioctl_compress_fs_supported(torture, tree, tmp_ctx, &fh, >+ &ok); >+ torture_assert_ntstatus_ok(torture, status, "SMB2_GETINFO_FS"); >+ if (ok) { >+ smb2_util_close(tree, fh); >+ torture_skip(torture, "FS compression supported\n"); >+ } >+ >+ status = test_ioctl_compress_set(torture, tmp_ctx, tree, fh, >+ COMPRESSION_FORMAT_DEFAULT); >+ torture_assert_ntstatus_equal(torture, status, >+ NT_STATUS_NOT_SUPPORTED, >+ "FSCTL_GET_COMPRESSION"); >+ >+ smb2_util_close(tree, fh); >+ talloc_free(tmp_ctx); >+ return true; >+} >+ > /* > basic testing of the SMB2 FSCTL_QUERY_NETWORK_INTERFACE_INFO ioctl > */ >@@ -4911,6 +4983,10 @@ struct torture_suite *torture_smb2_ioctl_init(void) > test_ioctl_compress_set_file_attr); > torture_suite_add_1smb2_test(suite, "compress_perms", > test_ioctl_compress_perms); >+ torture_suite_add_1smb2_test(suite, "compress_notsup_get", >+ test_ioctl_compress_notsup_get); >+ torture_suite_add_1smb2_test(suite, "compress_notsup_set", >+ test_ioctl_compress_notsup_set); > torture_suite_add_1smb2_test(suite, "network_interface_info", > test_ioctl_network_interface_info); > torture_suite_add_1smb2_test(suite, "sparse_file_flag", >-- >2.6.6 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Flags:
jra
:
review+
Actions:
View
Attachments on
bug 12144
:
12539
|
12548
|
12549
|
12805
|
12806
|
13583
|
13615