s3: leases : Cope with renaming leased open files.
authorJeremy Allison <jra@samba.org>
Thu, 4 Dec 2014 18:14:23 +0000 (10:14 -0800)
committerJeremy Allison <jra@samba.org>
Fri, 5 Dec 2014 17:37:10 +0000 (18:37 +0100)
Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
source3/locking/locking.c

index d144f5c75eecb781a82f814b055cc108ba8a6c08..dd73f683af849ddb33b7f67bc1d41959917632cc 100644 (file)
@@ -471,7 +471,7 @@ bool rename_share_filename(struct messaging_context *msg_ctx,
        size_t sn_len;
        size_t msg_len;
        char *frm = NULL;
-       int i;
+       uint32_t i;
        bool strip_two_chars = false;
        bool has_stream = smb_fname_dst->stream_name != NULL;
        struct server_id self_pid = messaging_server_id(msg_ctx);
@@ -565,6 +565,29 @@ bool rename_share_filename(struct messaging_context *msg_ctx,
                                   (uint8 *)frm, msg_len);
        }
 
+       for (i=0; i<d->num_leases; i++) {
+               /* Update the filename in leases_db. */
+               NTSTATUS status;
+               struct share_mode_lease *l;
+
+               l = &d->leases[i];
+
+               status = leases_db_rename(&l->client_guid,
+                                       &l->lease_key,
+                                       &id,
+                                       d->base_name,
+                                       d->stream_name);
+               if (!NT_STATUS_IS_OK(status)) {
+                       /* Any error recovery possible here ? */
+                       DEBUG(1,("Failed to rename lease key for "
+                               "renamed file %s:%s. %s\n",
+                               d->base_name,
+                               d->stream_name,
+                               nt_errstr(status)));
+                       continue;
+               }
+       }
+
        return True;
 }