]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3:locking: make use of share_mode_lock_access_private_data() in rename_share_filename()
authorStefan Metzmacher <metze@samba.org>
Fri, 26 Aug 2022 08:24:52 +0000 (10:24 +0200)
committerJeremy Allison <jra@samba.org>
Tue, 20 Sep 2022 00:34:35 +0000 (00:34 +0000)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15125

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/locking/locking.c

index c99e4cada603e3faac4d50d1ae84af99395bd276..d8367aa7d8c09e229c17f634f555421d88b2578f 100644 (file)
@@ -570,7 +570,6 @@ bool rename_share_filename(struct messaging_context *msg_ctx,
                        const struct smb_filename *smb_fname_dst)
 {
        struct rename_share_filename_state state = {
-               .data = lck->data,
                .msg_ctx = msg_ctx,
                .self = messaging_server_id(msg_ctx),
                .orig_name_hash = orig_name_hash,
@@ -580,12 +579,24 @@ bool rename_share_filename(struct messaging_context *msg_ctx,
                .msg.base_name = smb_fname_dst->base_name,
                .msg.stream_name = smb_fname_dst->stream_name,
        };
-       struct share_mode_data *d = lck->data;
+       struct share_mode_data *d = NULL;
+       NTSTATUS status;
        bool ok;
 
        DEBUG(10, ("rename_share_filename: servicepath %s newname %s\n",
                   servicepath, smb_fname_dst->base_name));
 
+       status = share_mode_lock_access_private_data(lck, &d);
+       if (!NT_STATUS_IS_OK(status)) {
+               /* Any error recovery possible here ? */
+               DBG_ERR("share_mode_lock_access_private_data() failed for "
+                       "servicepath %s newname %s - %s\n",
+                       servicepath, smb_fname_dst->base_name,
+                       nt_errstr(status));
+               return false;
+       }
+       state.data = d;
+
        /*
         * rename_internal_fsp() and rename_internals() add './' to
         * head of newname if newname does not contain a '/'.