[PATCH 3/8] Bug 9395 - Samba fails the simple_nodelete test of smb2.rename tests from master.

Jeremy Allison jra at samba.org
Fri Nov 16 12:54:15 MST 2012


Change the access_mask parameter in rename_internals() to a
share_access parameter, and use the appropriate values in the
different calls to rename_internals().

Signed-off-by: Jeremy Allison <jra at samba.org>
---
 source3/smbd/nttrans.c |    3 ++-
 source3/smbd/proto.h   |    2 +-
 source3/smbd/reply.c   |   12 ++++++------
 source3/smbd/trans2.c  |    4 +++-
 4 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c
index f5e5877..f0a1908 100644
--- a/source3/smbd/nttrans.c
+++ b/source3/smbd/nttrans.c
@@ -1662,7 +1662,8 @@ void reply_ntrename(struct smb_request *req)
 						  smb_fname_old, smb_fname_new,
 						  attrs, False, src_has_wcard,
 						  dest_has_wcard,
-						  DELETE_ACCESS);
+						  FILE_SHARE_READ|
+						  FILE_SHARE_WRITE);
 			break;
 		case RENAME_FLAG_HARD_LINK:
 			if (src_has_wcard || dest_has_wcard) {
diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h
index f95fddd..7d405a6 100644
--- a/source3/smbd/proto.h
+++ b/source3/smbd/proto.h
@@ -904,7 +904,7 @@ NTSTATUS rename_internals(TALLOC_CTX *ctx,
 			bool replace_if_exists,
 			bool src_has_wild,
 			bool dest_has_wild,
-			uint32_t access_mask);
+			uint32_t share_access);
 void reply_mv(struct smb_request *req);
 NTSTATUS copy_file(TALLOC_CTX *ctx,
 			connection_struct *conn,
diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c
index d53b342..69657b1 100644
--- a/source3/smbd/reply.c
+++ b/source3/smbd/reply.c
@@ -6473,7 +6473,7 @@ NTSTATUS rename_internals(TALLOC_CTX *ctx,
 			bool replace_if_exists,
 			bool src_has_wild,
 			bool dest_has_wild,
-			uint32_t access_mask)
+			uint32_t share_access)
 {
 	char *fname_src_dir = NULL;
 	char *fname_src_mask = NULL;
@@ -6592,8 +6592,7 @@ NTSTATUS rename_internals(TALLOC_CTX *ctx,
 			0,				/* root_dir_fid */
 			smb_fname_src,			/* fname */
 			DELETE_ACCESS,			/* access_mask */
-			(FILE_SHARE_READ |		/* share_access */
-			    FILE_SHARE_WRITE),
+			share_access,			/* share_access */
 			FILE_OPEN,			/* create_disposition*/
 			create_options,			/* create_options */
 			posix_pathnames ? FILE_FLAG_POSIX_SEMANTICS|0777 : 0, /* file_attributes */
@@ -6738,8 +6737,7 @@ NTSTATUS rename_internals(TALLOC_CTX *ctx,
 			0,				/* root_dir_fid */
 			smb_fname_src,			/* fname */
 			DELETE_ACCESS,			/* access_mask */
-			(FILE_SHARE_READ |		/* share_access */
-			    FILE_SHARE_WRITE),
+			share_access,			/* share_access */
 			FILE_OPEN,			/* create_disposition*/
 			create_options,			/* create_options */
 			posix_pathnames ? FILE_FLAG_POSIX_SEMANTICS|0777 : 0, /* file_attributes */
@@ -6910,7 +6908,9 @@ void reply_mv(struct smb_request *req)
 
 	status = rename_internals(ctx, conn, req, smb_fname_src, smb_fname_dst,
 				  attrs, False, src_has_wcard, dest_has_wcard,
-				  DELETE_ACCESS);
+				  FILE_SHARE_READ|
+					FILE_SHARE_WRITE|
+					FILE_SHARE_DELETE);
 	if (!NT_STATUS_IS_OK(status)) {
 		if (open_was_deferred(req->sconn, req->mid)) {
 			/* We have re-scheduled this call. */
diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c
index 61d755c..acd7a58 100644
--- a/source3/smbd/trans2.c
+++ b/source3/smbd/trans2.c
@@ -6393,7 +6393,9 @@ static NTSTATUS smb_file_rename_information(connection_struct *conn,
 		status = rename_internals(ctx, conn, req, smb_fname_src,
 					  smb_fname_dst, 0, overwrite, false,
 					  dest_has_wcard,
-					  FILE_WRITE_ATTRIBUTES);
+					  FILE_SHARE_READ|
+						FILE_SHARE_WRITE|
+						FILE_SHARE_DELETE);
 	}
  out:
 	TALLOC_FREE(smb_fname_dst);
-- 
1.7.7.3



More information about the samba-technical mailing list