The Samba-Bugzilla – Attachment 11786 Details for
Bug 11684
Directory copy fails with access denied
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch for 4.2 and 4.3, cherry-picked from master
v42,v43-allocsize.patch (text/plain), 5.08 KB, created by
Ralph Böhme
on 2016-01-25 08:59:27 UTC
(
hide
)
Description:
Patch for 4.2 and 4.3, cherry-picked from master
Filename:
MIME Type:
Creator:
Ralph Böhme
Created:
2016-01-25 08:59:27 UTC
Size:
5.08 KB
patch
obsolete
>From a10fc0abccb0f3f1304e38d99dfda1699badc10d Mon Sep 17 00:00:00 2001 >From: Ralph Boehme <slow@samba.org> >Date: Wed, 25 Nov 2015 15:23:26 +0100 >Subject: [PATCH 1/2] s3:smbd: Ignore initial allocation size for directory > creation > >We reject directory creation with an initial allocation size > 0 with >NT_STATUS_ACCESS_DENIED. Windows servers ignore the initial allocation >size on directories. > >Bug: https://bugzilla.samba.org/show_bug.cgi?id=11684 > >Pair-Programmed-With: Volker Lendecke <vl@samba.org> >Signed-off-by: Ralph Boehme <slow@samba.org> >Reviewed-by: Jeremy Allison <jra@samba.org> >(cherry picked from commit 78ccbb07170c3e49a084d31434310f973e3d6158) >--- > source3/smbd/open.c | 10 +++------- > 1 file changed, 3 insertions(+), 7 deletions(-) > >diff --git a/source3/smbd/open.c b/source3/smbd/open.c >index 154c1a9..530c573 100644 >--- a/source3/smbd/open.c >+++ b/source3/smbd/open.c >@@ -4706,15 +4706,11 @@ static NTSTATUS create_file_unixpath(connection_struct *conn, > > /* Save the requested allocation size. */ > if ((info == FILE_WAS_CREATED) || (info == FILE_WAS_OVERWRITTEN)) { >- if (allocation_size >- && (allocation_size > fsp->fsp_name->st.st_ex_size)) { >+ if ((allocation_size > fsp->fsp_name->st.st_ex_size) >+ && !(fsp->is_directory)) >+ { > fsp->initial_allocation_size = smb_roundup( > fsp->conn, allocation_size); >- if (fsp->is_directory) { >- /* Can't set allocation size on a directory. */ >- status = NT_STATUS_ACCESS_DENIED; >- goto fail; >- } > if (vfs_allocate_file_space( > fsp, fsp->initial_allocation_size) == -1) { > status = NT_STATUS_DISK_FULL; >-- >2.5.0 > > >From e96f29b070fdd5b5ab51b8d12d0466092f610e93 Mon Sep 17 00:00:00 2001 >From: Ralph Boehme <slow@samba.org> >Date: Wed, 20 Jan 2016 17:46:38 +0100 >Subject: [PATCH 2/2] s4:torture: add SMB2 test for directory creation initial > allocation size >MIME-Version: 1.0 >Content-Type: text/plain; charset=UTF-8 >Content-Transfer-Encoding: 8bit > >Test that directory creation with an initial allocation size > 0 >succeeds. > >Bug: https://bugzilla.samba.org/show_bug.cgi?id=11684 > >Signed-off-by: Ralph Boehme <slow@samba.org> >Reviewed-by: Jeremy Allison <jra@samba.org> > >Autobuild-User(master): Ralph Böhme <slow@samba.org> >Autobuild-Date(master): Sun Jan 24 01:20:52 CET 2016 on sn-devel-144 > >(cherry picked from commit cd86f20e245cc1b0cb3be5d6cb1b45c45e2a45a8) >--- > source4/torture/smb2/create.c | 64 +++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 64 insertions(+) > >diff --git a/source4/torture/smb2/create.c b/source4/torture/smb2/create.c >index 68dbbc1..1275aa8 100644 >--- a/source4/torture/smb2/create.c >+++ b/source4/torture/smb2/create.c >@@ -1666,6 +1666,69 @@ done: > return ret; > } > >+/* >+ test directory creation with an initial allocation size > 0 >+*/ >+static bool test_dir_alloc_size(struct torture_context *tctx, >+ struct smb2_tree *tree) >+{ >+ bool ret = true; >+ const char *dname = DNAME "\\torture_alloc_size.dir"; >+ NTSTATUS status; >+ struct smb2_create c; >+ struct smb2_handle h1 = {{0}}, h2; >+ >+ torture_comment(tctx, "Checking initial allocation size on directories\n"); >+ >+ smb2_deltree(tree, dname); >+ >+ status = torture_smb2_testdir(tree, DNAME, &h1); >+ torture_assert_ntstatus_ok_goto(tctx, status, ret, done, "torture_smb2_testdir failed"); >+ >+ ZERO_STRUCT(c); >+ c.in.create_disposition = NTCREATEX_DISP_CREATE; >+ c.in.desired_access = SEC_FLAG_MAXIMUM_ALLOWED; >+ c.in.file_attributes = FILE_ATTRIBUTE_DIRECTORY; >+ c.in.share_access = NTCREATEX_SHARE_ACCESS_NONE; >+ c.in.create_options = NTCREATEX_OPTIONS_DIRECTORY; >+ c.in.fname = dname; >+ /* >+ * An insanely large value so we can check the value is >+ * ignored: Samba either returns 0 (current behaviour), or, >+ * once vfswrap_get_alloc_size() is fixed to allow retrieving >+ * the allocated size for directories, returns >+ * smb_roundup(..., stat.st_size) which would be 1 MB by >+ * default. >+ * >+ * Windows returns 0 for emtpy directories, once directories >+ * have a few entries it starts replying with values > 0. >+ */ >+ c.in.alloc_size = 1024*1024*1024; >+ >+ status = smb2_create(tree, tctx, &c); >+ h2 = c.out.file.handle; >+ torture_assert_ntstatus_ok_goto(tctx, status, ret, done, >+ "dir create with initial alloc size failed"); >+ >+ smb2_util_close(tree, h2); >+ >+ torture_comment(tctx, "Got directory alloc size: %ju\n", (uintmax_t)c.out.alloc_size); >+ >+ /* >+ * See above for the rational for this test >+ */ >+ if (c.out.alloc_size > 1024*1024) { >+ torture_fail_goto(tctx, done, talloc_asprintf(tctx, "bad alloc size: %ju", >+ (uintmax_t)c.out.alloc_size)); >+ } >+ >+done: >+ if (!smb2_util_handle_empty(h1)) { >+ smb2_util_close(tree, h1); >+ } >+ smb2_deltree(tree, DNAME); >+ return ret; >+} > > /* > basic testing of SMB2 read >@@ -1686,6 +1749,7 @@ struct torture_suite *torture_smb2_create_init(void) > torture_suite_add_1smb2_test(suite, "acldir", test_create_acl_dir); > torture_suite_add_1smb2_test(suite, "nulldacl", test_create_null_dacl); > torture_suite_add_1smb2_test(suite, "mkdir-dup", test_mkdir_dup); >+ torture_suite_add_1smb2_test(suite, "dir-alloc-size", test_dir_alloc_size); > > suite->description = talloc_strdup(suite, "SMB2-CREATE tests"); > >-- >2.5.0 >
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+
vl
:
review+
Actions:
View
Attachments on
bug 11684
: 11786