smbd: Introduce reset_delete_on_close_lck
authorVolker Lendecke <vl@samba.org>
Tue, 21 Apr 2015 09:36:30 +0000 (11:36 +0200)
committerJeremy Allison <jra@samba.org>
Wed, 22 Apr 2015 21:00:20 +0000 (23:00 +0200)
Boolean flags passed down make things more complex than necessary...

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/locking/locking.c
source3/locking/proto.h

index 221d6ee8d6e49c91a7d5dffa4dc392fa3d603110..cff9025e22db46c52ec0ae84646e987c90f01e89 100644 (file)
@@ -1081,6 +1081,27 @@ static bool add_delete_on_close_token(struct share_mode_data *d,
        return true;
 }
 
+void reset_delete_on_close_lck(files_struct *fsp,
+                              struct share_mode_lock *lck)
+{
+       struct share_mode_data *d = lck->data;
+       uint32_t i;
+
+       for (i=0; i<d->num_delete_tokens; i++) {
+               struct delete_token *dt = &d->delete_tokens[i];
+
+               if (dt->name_hash == fsp->name_hash) {
+                       d->modified = true;
+
+                       /* Delete this entry. */
+                       TALLOC_FREE(dt->delete_nt_token);
+                       TALLOC_FREE(dt->delete_token);
+                       *dt = d->delete_tokens[d->num_delete_tokens-1];
+                       d->num_delete_tokens -= 1;
+               }
+       }
+}
+
 /****************************************************************************
  Sets the delete on close flag over all share modes on this file.
  Modify the share mode entry for all files open
@@ -1102,44 +1123,32 @@ void set_delete_on_close_lck(files_struct *fsp,
        int i;
        bool ret;
 
-       if (delete_on_close) {
-               SMB_ASSERT(nt_tok != NULL);
-               SMB_ASSERT(tok != NULL);
-       } else {
+       if (!delete_on_close) {
                SMB_ASSERT(nt_tok == NULL);
                SMB_ASSERT(tok == NULL);
+               return reset_delete_on_close_lck(fsp, lck);
        }
 
+       SMB_ASSERT(nt_tok != NULL);
+       SMB_ASSERT(tok != NULL);
+
        for (i=0; i<d->num_delete_tokens; i++) {
                struct delete_token *dt = &d->delete_tokens[i];
                if (dt->name_hash == fsp->name_hash) {
                        d->modified = true;
-                       if (delete_on_close == false) {
-                               /* Delete this entry. */
-                               TALLOC_FREE(dt->delete_nt_token);
-                               TALLOC_FREE(dt->delete_token);
-                               *dt = d->delete_tokens[
-                                       d->num_delete_tokens-1];
-                               d->num_delete_tokens -= 1;
-                       } else {
-                               /* Replace this token with the
-                                  given tok. */
-                               TALLOC_FREE(dt->delete_nt_token);
-                               dt->delete_nt_token = dup_nt_token(dt, nt_tok);
-                               SMB_ASSERT(dt->delete_nt_token != NULL);
-                               TALLOC_FREE(dt->delete_token);
-                               dt->delete_token = copy_unix_token(dt, tok);
-                               SMB_ASSERT(dt->delete_token != NULL);
-                       }
+
+                       /* Replace this token with the given tok. */
+                       TALLOC_FREE(dt->delete_nt_token);
+                       dt->delete_nt_token = dup_nt_token(dt, nt_tok);
+                       SMB_ASSERT(dt->delete_nt_token != NULL);
+                       TALLOC_FREE(dt->delete_token);
+                       dt->delete_token = copy_unix_token(dt, tok);
+                       SMB_ASSERT(dt->delete_token != NULL);
+
                        return;
                }
        }
 
-       if (!delete_on_close) {
-               /* Nothing to delete - not found. */
-               return;
-       }
-
        ret = add_delete_on_close_token(lck->data, fsp->name_hash, nt_tok, tok);
        SMB_ASSERT(ret);
 }
index c4ea198d20c8add5c6918716c3e5c899cfbd7c17..8a0e0234fc5c7f380879af1245d1b1a11a352fb5 100644 (file)
@@ -185,6 +185,8 @@ bool get_delete_on_close_token(struct share_mode_lock *lck,
                                uint32_t name_hash,
                                const struct security_token **pp_nt_tok,
                                const struct security_unix_token **pp_tok);
+void reset_delete_on_close_lck(files_struct *fsp,
+                              struct share_mode_lock *lck);
 void set_delete_on_close_lck(files_struct *fsp,
                        struct share_mode_lock *lck,
                        bool delete_on_close,