smbd: move files_struct.delete_on_close to a bitfield
authorRalph Boehme <slow@samba.org>
Fri, 3 Apr 2020 05:48:08 +0000 (07:48 +0200)
committerJeremy Allison <jra@samba.org>
Fri, 3 Apr 2020 19:05:44 +0000 (19:05 +0000)
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/include/vfs.h
source3/locking/locking.c
source3/modules/vfs_acl_common.c
source3/smbd/close.c
source3/smbd/durable.c
source3/smbd/smb2_close.c

index adb64c61e7033923b2721f2a3bf87495b0ebb907..6f7670eee14ea7f69a0f3c0ccfa77b98d0377c2d 100644 (file)
@@ -369,6 +369,7 @@ typedef struct files_struct {
                bool is_directory : 1;
                bool aio_write_behind : 1;
                bool initial_delete_on_close : 1;
+               bool delete_on_close : 1;
        } fsp_flags;
 
        struct tevent_timer *update_write_time_event;
@@ -389,7 +390,6 @@ typedef struct files_struct {
        struct lock_struct last_lock_failure;
        int current_lock_count; /* Count the number of outstanding locks and pending locks. */
 
-       bool delete_on_close;
        uint64_t posix_flags;
        bool is_sparse;
        bool backup_intent; /* Handle was successfully opened with backup intent
index c2ccd669c718c45c8d1f0dd6016540779a6a44ac..f5426391c21d3cdb61887fc82f09bc523e1a14bb 100644 (file)
@@ -941,7 +941,7 @@ bool set_delete_on_close(files_struct *fsp, bool delete_on_close,
 
        TALLOC_FREE(lck);
 
-       fsp->delete_on_close = delete_on_close;
+       fsp->fsp_flags.delete_on_close = delete_on_close;
 
        return True;
 }
index 35dc82ee11d6e6dad57011e4ba9d69451ee50cae..7bed255d390cf0b0780ff4d31f3b0d3c9d2c08ac 100644 (file)
@@ -1137,7 +1137,8 @@ static int acl_common_remove_object(vfs_handle_struct *handle,
        for (fsp = file_find_di_first(conn->sconn, id); fsp;
                     fsp = file_find_di_next(fsp)) {
                if (fsp->access_mask & DELETE_ACCESS &&
-                               fsp->delete_on_close) {
+                   fsp->fsp_flags.delete_on_close)
+               {
                        /* We did open this for delete,
                         * allow the delete as root.
                         */
index 5207a6b67c4db766c68ea497f103ee7899b7bd05..7ad50aa325a5c6aee032b62bc6120c3e74810016 100644 (file)
@@ -349,7 +349,7 @@ static NTSTATUS close_remove_share_mode(files_struct *fsp,
                        become_user_without_service(conn, fsp->vuid);
                        became_user = True;
                }
-               fsp->delete_on_close = true;
+               fsp->fsp_flags.delete_on_close = true;
                set_delete_on_close_lck(fsp, lck,
                                get_current_nttok(conn),
                                get_current_utok(conn));
@@ -499,7 +499,7 @@ static NTSTATUS close_remove_share_mode(files_struct *fsp,
         * the delete on close flag. JRA.
         */
 
-       fsp->delete_on_close = false;
+       fsp->fsp_flags.delete_on_close = false;
        reset_delete_on_close_lck(fsp, lck);
 
  done:
@@ -1142,7 +1142,7 @@ static NTSTATUS close_directory(struct smb_request *req, files_struct *fsp,
                set_delete_on_close_lck(fsp, lck,
                                get_current_nttok(fsp->conn),
                                get_current_utok(fsp->conn));
-               fsp->delete_on_close = true;
+               fsp->fsp_flags.delete_on_close = true;
                if (became_user) {
                        unbecome_user_without_service();
                }
index f557c51aa69e1b13b898a225409540468ad3b98d..bed48ef0447c6789c1f1a2d59f0eed20dd73f6f6 100644 (file)
@@ -183,7 +183,7 @@ NTSTATUS vfs_default_durable_disconnect(struct files_struct *fsp,
        if (fsp->fsp_flags.initial_delete_on_close) {
                return NT_STATUS_NOT_SUPPORTED;
        }
-       if (fsp->delete_on_close) {
+       if (fsp->fsp_flags.delete_on_close) {
                return NT_STATUS_NOT_SUPPORTED;
        }
 
index d8d0b415af75ca85dc351a3101279ad16c2bc29d..2f9a73cb69f448ffddb4590b45b57c9e7566b8f1 100644 (file)
@@ -241,7 +241,7 @@ static NTSTATUS smbd_smb2_close(struct smbd_smb2_request *req,
 
        if ((in_flags & SMB2_CLOSE_FLAGS_FULL_INFORMATION) &&
            (fsp->fsp_flags.initial_delete_on_close ||
-            fsp->delete_on_close))
+            fsp->fsp_flags.delete_on_close))
        {
                /*
                 * We might be deleting the file. Ensure we