smbd: pass struct smb_filename to directory_has_default_acl()
authorRalph Boehme <slow@samba.org>
Tue, 28 Apr 2020 16:03:41 +0000 (18:03 +0200)
committerJeremy Allison <jra@samba.org>
Wed, 29 Apr 2020 16:39:40 +0000 (16:39 +0000)
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/modules/vfs_ceph.c
source3/modules/vfs_default.c
source3/smbd/file_access.c
source3/smbd/open.c
source3/smbd/proto.h

index 1e02a3fe2d895aef7555c3d55c654547b3d093b6..166fdc9feee71ed7bea9e9ea19c530fae3bcbc29 100644 (file)
@@ -365,9 +365,7 @@ static int cephwrap_mkdirat(struct vfs_handle_struct *handle,
 
        if (lp_inherit_acls(SNUM(handle->conn))) {
                ok = parent_smb_fname(talloc_tos(), smb_fname, &parent, NULL);
-               if (ok && directory_has_default_acl(handle->conn,
-                                                   parent->base_name))
-               {
+               if (ok && directory_has_default_acl(handle->conn, parent)) {
                        mode = 0777;
                }
        }
index de4fc5d6a1b2278da1a75e91ae298bcdb249b060..a739b17963aa0b939f18055fe8fc7e67bed13668 100644 (file)
@@ -637,9 +637,7 @@ static int vfswrap_mkdirat(vfs_handle_struct *handle,
 
        if (lp_inherit_acls(SNUM(handle->conn))) {
                ok = parent_smb_fname(talloc_tos(), smb_fname, &parent, NULL);
-               if (ok && directory_has_default_acl(handle->conn,
-                                                   parent->base_name))
-               {
+               if (ok && directory_has_default_acl(handle->conn, parent)) {
                        mode = (0777 & lp_directory_mask(SNUM(handle->conn)));
                }
        }
index 39a8f195040447bdf1772e933dec28b3dd7c7ad5..4884301fd4ba4f135e47db32baaa66db05cab2f6 100644 (file)
@@ -140,20 +140,12 @@ bool can_write_to_file(connection_struct *conn,
  Check for an existing default Windows ACL on a directory.
 ****************************************************************************/
 
-bool directory_has_default_acl(connection_struct *conn, const char *fname)
+bool directory_has_default_acl(connection_struct *conn,
+                              struct smb_filename *smb_fname)
 {
        struct security_descriptor *secdesc = NULL;
        unsigned int i;
        NTSTATUS status;
-       struct smb_filename *smb_fname = synthetic_smb_fname(talloc_tos(),
-                                               fname,
-                                               NULL,
-                                               NULL,
-                                               0);
-
-       if (smb_fname == NULL) {
-               return false;
-       }
 
        status = SMB_VFS_GET_NT_ACL(conn, smb_fname,
                                             SECINFO_DACL, talloc_tos(),
index 63adfabee4c9e328372baaf7835a50e174c6dfe3..76f85fcc25c24b54ab0fa0e3a7e4f1b2cb495363 100644 (file)
@@ -3615,7 +3615,7 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn,
         */
 
         if ((flags2 & O_CREAT) && lp_inherit_acls(SNUM(conn)) &&
-           (def_acl = directory_has_default_acl(conn, parent_dir))) {
+           (def_acl = directory_has_default_acl(conn, parent_dir_fname))) {
                unx_mode = (0777 & lp_create_mask(SNUM(conn)));
        }
 
index cb32ebaca5e6386af8190dc1d32b9b7552e9ca18..e7b5e3239a7e063cd12460a2ad03816fcd36a65e 100644 (file)
@@ -326,7 +326,8 @@ bool can_delete_file_in_directory(connection_struct *conn,
                                  const struct smb_filename *smb_fname);
 bool can_write_to_file(connection_struct *conn,
                       const struct smb_filename *smb_fname);
-bool directory_has_default_acl(connection_struct *conn, const char *fname);
+bool directory_has_default_acl(connection_struct *conn,
+                              struct smb_filename *smb_fname);
 NTSTATUS can_set_delete_on_close(files_struct *fsp, uint32_t dosmode);
 
 /* The following definitions come from smbd/fileio.c  */