[SCM] Samba Shared Repository - branch v3-4-test updated - release-4-0-0alpha7-1207-g80cedd9

Karolin Seeger kseeger at samba.org
Tue Aug 11 08:06:25 MDT 2009


The branch, v3-4-test has been updated
       via  80cedd944c3bcee7fe44787c9730b564b2d86726 (commit)
      from  06ab965b72ba477505d297ab72156136ab981e93 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-4-test


- Log -----------------------------------------------------------------
commit 80cedd944c3bcee7fe44787c9730b564b2d86726
Author: Tim Prouty <tprouty at samba.org>
Date:   Thu Aug 6 11:23:23 2009 -0700

    s4 torture: Extend the RAW-RENAME test to more fully test directory renames.
    
    The existing test was only covering files opened underneath the
    directory that was being renamed.  It is not uncommon for windows
    clients to actually hold a read-only handle to a directory open across
    the rename, which it turns out doesn't return NT_STATUS_ACCESS_DENIED.
    Additionally, holding a handle open to a stream on the directory is
    also allowed.

-----------------------------------------------------------------------

Summary of changes:
 source4/torture/raw/rename.c |   50 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 50 insertions(+), 0 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/torture/raw/rename.c b/source4/torture/raw/rename.c
index 951d91a..9748719 100644
--- a/source4/torture/raw/rename.c
+++ b/source4/torture/raw/rename.c
@@ -527,6 +527,7 @@ static bool test_dir_rename(struct torture_context *tctx, struct smbcli_state *c
         const char *dname1 = BASEDIR "\\dir_for_rename";
         const char *dname2 = BASEDIR "\\renamed_dir";
         const char *fname = BASEDIR "\\dir_for_rename\\file.txt";
+	const char *sname = BASEDIR "\\dir_for_rename:a stream:$DATA";
 	bool ret = true;
 	int fnum = -1;
 
@@ -591,6 +592,55 @@ static bool test_dir_rename(struct torture_context *tctx, struct smbcli_state *c
 	status = smb_raw_rename(cli->tree, &ren_io);
 	CHECK_STATUS(status, NT_STATUS_ACCESS_DENIED);
 
+	/* Close the file and try the rename. */
+	smbcli_close(cli->tree, fnum);
+
+	status = smb_raw_rename(cli->tree, &ren_io);
+	CHECK_STATUS(status, NT_STATUS_OK);
+
+	/*
+	 * Now try just holding a second handle on the directory and holding
+	 * it open across a rename.  This should be allowed.
+	 */
+	io.ntcreatex.in.fname = dname2;
+	io.ntcreatex.in.open_disposition = NTCREATEX_DISP_OPEN_IF;
+
+	io.ntcreatex.in.access_mask = SEC_STD_READ_CONTROL |
+	    SEC_FILE_READ_ATTRIBUTE | SEC_FILE_READ_EA | SEC_FILE_READ_DATA;
+
+	status = smb_raw_open(cli->tree, tctx, &io);
+        CHECK_STATUS(status, NT_STATUS_OK);
+        fnum = io.ntcreatex.out.file.fnum;
+
+	ren_io.generic.level = RAW_RENAME_RENAME;
+	ren_io.rename.in.pattern1 = dname2;
+	ren_io.rename.in.pattern2 = dname1;
+	ren_io.rename.in.attrib = 0;
+
+	status = smb_raw_rename(cli->tree, &ren_io);
+	CHECK_STATUS(status, NT_STATUS_OK);
+
+	/* close our handle to the directory. */
+	smbcli_close(cli->tree, fnum);
+
+	/*
+	 * Now try opening a stream on the directory and holding it open
+	 * across a rename.  This should be allowed.
+	 */
+	io.ntcreatex.in.fname = sname;
+
+	status = smb_raw_open(cli->tree, tctx, &io);
+        CHECK_STATUS(status, NT_STATUS_OK);
+        fnum = io.ntcreatex.out.file.fnum;
+
+	ren_io.generic.level = RAW_RENAME_RENAME;
+	ren_io.rename.in.pattern1 = dname1;
+	ren_io.rename.in.pattern2 = dname2;
+	ren_io.rename.in.attrib = 0;
+
+	status = smb_raw_rename(cli->tree, &ren_io);
+	CHECK_STATUS(status, NT_STATUS_OK);
+
 done:
 	
 	if (fnum != -1) {


-- 
Samba Shared Repository


More information about the samba-cvs mailing list