s3: smbd: smbd_calculate_access_mask_fsp(). Add dirfsp parameter.
authorJeremy Allison <jra@samba.org>
Tue, 8 Jun 2021 18:56:25 +0000 (11:56 -0700)
committerRalph Boehme <slow@samba.org>
Wed, 9 Jun 2021 13:14:31 +0000 (13:14 +0000)
Pass this down into smbd_calculate_maximum_allowed_access_fsp().

Currently pass fsp->conn->cwd_fsp everywhere.

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
source3/modules/vfs_fruit.c
source3/smbd/fake_file.c
source3/smbd/globals.h
source3/smbd/open.c
source3/smbd/smb2_create.c

index 7fdd5f3fafa1736015931ac81e53373672fce489..ae1541ea9f19559b30c8d1455fa82316998dedab 100644 (file)
@@ -4269,7 +4269,8 @@ static NTSTATUS fruit_freaddir_attr(struct vfs_handle_struct *handle,
        if (!config->readdir_attr_max_access) {
                attr_data->attr_data.aapl.max_access = FILE_GENERIC_ALL;
        } else {
-               status = smbd_calculate_access_mask_fsp(fsp,
+               status = smbd_calculate_access_mask_fsp(fsp->conn->cwd_fsp,
+                       fsp,
                        false,
                        SEC_FLAG_MAXIMUM_ALLOWED,
                        &attr_data->attr_data.aapl.max_access);
index e2310e6f786b776f6c9c5f917e6ef3b60724983f..e786ad67b72bffa3b42a207116de0bd22124d1bb 100644 (file)
@@ -170,7 +170,8 @@ NTSTATUS open_fake_file(struct smb_request *req, connection_struct *conn,
                return NT_STATUS_NO_MEMORY;
        }
 
-       status = smbd_calculate_access_mask_fsp(fsp,
+       status = smbd_calculate_access_mask_fsp(conn->cwd_fsp,
+                                       fsp,
                                        false,
                                        access_mask,
                                        &access_mask);
index 778162d21df9c49f2d721ee7ebce0d83738574fd..2d86201e324c3a6616013346caeccc35c3bab7bb 100644 (file)
@@ -211,7 +211,8 @@ NTSTATUS smbd_dirptr_lanman2_entry(TALLOC_CTX *ctx,
                               struct ea_list *name_list,
                               struct file_id *file_id);
 
-NTSTATUS smbd_calculate_access_mask_fsp(struct files_struct *fsp,
+NTSTATUS smbd_calculate_access_mask_fsp(struct files_struct *dirsfp,
+                       struct files_struct *fsp,
                        bool use_privs,
                        uint32_t access_mask,
                        uint32_t *access_mask_out);
index a2c25605cc82e770c5e39e493dad36b711f97ef8..d001db4603b797accd38de26519b7188bf1aac31 100644 (file)
@@ -408,7 +408,8 @@ static NTSTATUS check_base_file_access(struct files_struct *fsp,
 {
        NTSTATUS status;
 
-       status = smbd_calculate_access_mask_fsp(fsp,
+       status = smbd_calculate_access_mask_fsp(fsp->conn->cwd_fsp,
+                                       fsp,
                                        false,
                                        access_mask,
                                        &access_mask);
@@ -3243,7 +3244,8 @@ static NTSTATUS smbd_calculate_maximum_allowed_access_fsp(
        return NT_STATUS_OK;
 }
 
-NTSTATUS smbd_calculate_access_mask_fsp(struct files_struct *fsp,
+NTSTATUS smbd_calculate_access_mask_fsp(struct files_struct *dirfsp,
+                       struct files_struct *fsp,
                        bool use_privs,
                        uint32_t access_mask,
                        uint32_t *access_mask_out)
@@ -3268,7 +3270,7 @@ NTSTATUS smbd_calculate_access_mask_fsp(struct files_struct *fsp,
        if (access_mask & MAXIMUM_ALLOWED_ACCESS) {
 
                status = smbd_calculate_maximum_allowed_access_fsp(
-                                                  fsp->conn->cwd_fsp,
+                                                  dirfsp,
                                                   fsp,
                                                   use_privs,
                                                   &access_mask);
@@ -3638,7 +3640,8 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn,
                }
        }
 
-       status = smbd_calculate_access_mask_fsp(smb_fname->fsp,
+       status = smbd_calculate_access_mask_fsp(conn->cwd_fsp,
+                                               smb_fname->fsp,
                                                false,
                                                access_mask,
                                                &access_mask);
@@ -4402,7 +4405,8 @@ static NTSTATUS open_directory(connection_struct *conn,
                 create_disposition,
                 file_attributes);
 
-       status = smbd_calculate_access_mask_fsp(smb_dname->fsp,
+       status = smbd_calculate_access_mask_fsp(conn->cwd_fsp,
+                                       smb_dname->fsp,
                                        false,
                                        access_mask,
                                        &access_mask);
index 6f54227e98397cf52c3434240b3ef25309695d54..a27b87ea0eedd9b12f671ddf96ca43763845062c 100644 (file)
@@ -1397,7 +1397,9 @@ static void smbd_smb2_create_after_exec(struct tevent_req *req)
                        uint32_t max_access_granted;
                        DATA_BLOB blob = data_blob_const(p, sizeof(p));
 
-                       status = smbd_calculate_access_mask_fsp(state->result,
+                       status = smbd_calculate_access_mask_fsp(
+                                       state->result->conn->cwd_fsp,
+                                       state->result,
                                        false,
                                        SEC_FLAG_MAXIMUM_ALLOWED,
                                        &max_access_granted);