smbd: move files_struct.can_read to a bitfield
authorRalph Boehme <slow@samba.org>
Thu, 2 Apr 2020 15:18:43 +0000 (17:18 +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/smb_macros.h
source3/include/vfs.h
source3/printing/printspoolss.c
source3/smbd/durable.c
source3/smbd/files.c
source3/smbd/open.c
source3/smbd/pysmbd.c
source3/smbd/reply.c
source3/torture/cmd_vfs.c

index dff0b8b9600b7ae16c66cbfe9be3715c675f07cc..1c81bd1b9d2b7be7862cfc034c362e11df832502 100644 (file)
@@ -46,7 +46,7 @@
 
 #define CHECK_READ(fsp,req) \
        (((fsp)->fh->fd != -1) && \
-        ((fsp)->can_read || \
+        (((fsp)->fsp_flags.can_read) || \
          ((req->flags2 & FLAGS2_READ_PERMIT_EXECUTE) && \
           (fsp->access_mask & FILE_EXECUTE))))
 
@@ -64,7 +64,7 @@
  */
 #define CHECK_READ_SMB2(fsp) \
        (((fsp)->fh->fd != -1) && \
-        ((fsp)->can_read || \
+        (((fsp)->fsp_flags.can_read) || \
          (fsp->access_mask & FILE_EXECUTE)))
 
 /* An IOCTL readability check (validating read access
@@ -75,7 +75,7 @@
  */
 #define CHECK_READ_IOCTL(fsp) \
        (((fsp)->fh->fd != -1) && \
-        ((fsp)->can_read))
+        (((fsp)->fsp_flags.can_read)))
 
 #define CHECK_WRITE(fsp) \
        ((fsp)->can_write && \
index 2600cc3b31d812c9962b1125119031871a591f2f..13f0fb6d660cdd5a7d1f4b80f147a2f3639fdf7d 100644 (file)
@@ -363,6 +363,7 @@ typedef struct files_struct {
                bool update_write_time_on_close : 1;
                bool write_time_forced : 1;
                bool can_lock : 1;
+               bool can_read : 1;
        } fsp_flags;
 
        struct tevent_timer *update_write_time_event;
@@ -383,7 +384,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 can_read;
        bool can_write;
        bool modified;
        bool is_directory;
index e3dbc2e7b8f2746518286500d1907589e9f19bc0..a2942fbdf3f69e20dc8fff371d79168593ff8279 100644 (file)
@@ -229,7 +229,7 @@ NTSTATUS print_spool_open(files_struct *fsp,
 
        fsp->vuid = current_vuid;
        fsp->fsp_flags.can_lock = false;
-       fsp->can_read = false;
+       fsp->fsp_flags.can_read = false;
        fsp->access_mask = FILE_GENERIC_WRITE;
        fsp->can_write = true;
        fsp->modified = false;
index 0a38d5a5c55e7ce0079215662edb393f51567d15..94607a70464f7742b8e641ccce1224cc000dddec 100644 (file)
@@ -682,7 +682,7 @@ NTSTATUS vfs_default_durable_reconnect(struct connection_struct *conn,
        fsp->vuid = smb1req->vuid;
        fsp->open_time = e.time;
        fsp->access_mask = e.access_mask;
-       fsp->can_read = ((fsp->access_mask & (FILE_READ_DATA)) != 0);
+       fsp->fsp_flags.can_read = ((fsp->access_mask & FILE_READ_DATA) != 0);
        fsp->can_write = ((fsp->access_mask & (FILE_WRITE_DATA|FILE_APPEND_DATA)) != 0);
        fsp->fnum = op->local_id;
        fsp_set_gen_id(fsp);
@@ -803,11 +803,11 @@ NTSTATUS vfs_default_durable_reconnect(struct connection_struct *conn,
        /*
         * TODO: properly calculate open flags
         */
-       if (fsp->can_write && fsp->can_read) {
+       if (fsp->can_write && fsp->fsp_flags.can_read) {
                flags = O_RDWR;
        } else if (fsp->can_write) {
                flags = O_WRONLY;
-       } else if (fsp->can_read) {
+       } else if (fsp->fsp_flags.can_read) {
                flags = O_RDONLY;
        }
 
index 18b3d086a9227432cf84e24c4b9bbcd2858c0a02..1573c94610581469dab2977d3e7eaf9a8579beb9 100644 (file)
@@ -789,7 +789,7 @@ NTSTATUS dup_file_fsp(
        to->access_mask = access_mask;
        to->oplock_type = from->oplock_type;
        to->fsp_flags.can_lock = from->fsp_flags.can_lock;
-       to->can_read = ((access_mask & FILE_READ_DATA) != 0);
+       to->fsp_flags.can_read = ((access_mask & FILE_READ_DATA) != 0);
        to->can_write =
                CAN_WRITE(from->conn) &&
                ((access_mask & (FILE_WRITE_DATA | FILE_APPEND_DATA)) != 0);
index 40f4b2be5d7cc4be4958222789598d90aea2a286..ffc818cc63acd6ae01cab4c3e8f8c4e5110680af 100644 (file)
@@ -1430,7 +1430,7 @@ static NTSTATUS open_file(files_struct *fsp,
        fsp->vuid = req ? req->vuid : UID_FIELD_INVALID;
        fsp->file_pid = req ? req->smbpid : 0;
        fsp->fsp_flags.can_lock = true;
-       fsp->can_read = ((access_mask & FILE_READ_DATA) != 0);
+       fsp->fsp_flags.can_read = ((access_mask & FILE_READ_DATA) != 0);
        fsp->can_write =
                CAN_WRITE(conn) &&
                ((access_mask & (FILE_WRITE_DATA | FILE_APPEND_DATA)) != 0);
@@ -1447,7 +1447,8 @@ static NTSTATUS open_file(files_struct *fsp,
        DEBUG(2,("%s opened file %s read=%s write=%s (numopen=%d)\n",
                 conn->session_info->unix_info->unix_name,
                 smb_fname_str_dbg(smb_fname),
-                BOOLSTR(fsp->can_read), BOOLSTR(fsp->can_write),
+                BOOLSTR(fsp->fsp_flags.can_read),
+                BOOLSTR(fsp->can_write),
                 conn->num_files_open));
 
        errno = 0;
@@ -4392,7 +4393,7 @@ static NTSTATUS open_directory(connection_struct *conn,
        fsp->vuid = req ? req->vuid : UID_FIELD_INVALID;
        fsp->file_pid = req ? req->smbpid : 0;
        fsp->fsp_flags.can_lock = false;
-       fsp->can_read = False;
+       fsp->fsp_flags.can_read = false;
        fsp->can_write = False;
 
        fsp->fh->private_options = 0;
index 859855399849555c6699fede2f8784109f2e34f1..e0cf7e081bd481aa4166ce3f1cc6a61a12fcb496 100644 (file)
@@ -194,7 +194,7 @@ static NTSTATUS init_files_struct(TALLOC_CTX *mem_ctx,
        fsp->vuid = UID_FIELD_INVALID;
        fsp->file_pid = 0;
        fsp->fsp_flags.can_lock = true;
-       fsp->can_read = True;
+       fsp->fsp_flags.can_read = true;
        fsp->can_write = True;
        fsp->print_file = NULL;
        fsp->modified = False;
index 54e0a9c4764b9f8bf28d696055ff9f81b54b8160..6a2093a1498e12b739f7a21871bcc59f24566c23 100644 (file)
@@ -4018,7 +4018,7 @@ void reply_readbraw(struct smb_request *req)
        }
 
        /* Do a "by hand" version of CHECK_READ. */
-       if (!(fsp->can_read ||
+       if (!(fsp->fsp_flags.can_read ||
                        ((req->flags2 & FLAGS2_READ_PERMIT_EXECUTE) &&
                                (fsp->access_mask & FILE_EXECUTE)))) {
                DEBUG(3,("reply_readbraw: fnum %d not readable.\n",
index 3485ebb0fda93738ac7d87ba660344082cde5438..bea66ee2c71709c66473314f896b821bb463c00e 100644 (file)
@@ -423,7 +423,7 @@ static NTSTATUS cmd_open(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, c
        fsp->vuid = UID_FIELD_INVALID;
        fsp->file_pid = 0;
        fsp->fsp_flags.can_lock = true;
-       fsp->can_read = True;
+       fsp->fsp_flags.can_read = true;
        fsp->can_write =
                CAN_WRITE(vfs->conn);
        fsp->print_file = NULL;
@@ -1652,7 +1652,7 @@ static NTSTATUS cmd_set_nt_acl(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int a
        fsp->vuid = UID_FIELD_INVALID;
        fsp->file_pid = 0;
        fsp->fsp_flags.can_lock = true;
-       fsp->can_read = True;
+       fsp->fsp_flags.can_read = true;
        fsp->can_write = True;
        fsp->print_file = NULL;
        fsp->modified = False;