[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