From: Andrew Walker Date: Thu, 24 Sep 2020 20:04:12 +0000 (-0400) Subject: vfs_zfsacl: only grant DELETE_CHILD if ACL tag is special X-Git-Tag: samba-4.12.10~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e1f7e422bd560196f735c96e6bf6d84524d169a7;p=thirdparty%2Fsamba.git vfs_zfsacl: only grant DELETE_CHILD if ACL tag is special When ZFS aclmode is set to "passthrough" chmod(2)/fchmod(2) will result in special entries being modified in a way such that delete, delete_child, write_named_attr, write_attribute are stripped from the returned ACL entry, and the kernel / ZFS treats this as having rights equivalent to the desired POSIX mode. Historically, samba has added delete_child to the NFSv4 ACL, but this is only really called for in the case of special entries in this particular circumstance. Alter circumstances in which delete_child is granted so that it only is added to special entries. This preserves the intend post-chmod behavior, but avoids unnecessarily increasing permissions in cases where it's not intended. Further modification of this behavior may be required so that we grant a general read or general write permissions set in case of POSIX read / POSIX write on special entries. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14471 RN: vfs_zfsacl: only grant DELETE_CHILD if ACL tag is special Signed-off-by: Andrew Walker Reviewed-by: Ralph Boehme Reviewed-by: Jeremy Allison (cherry picked from commit c1a37b4f31d5252ce074d41f69e526aa84b0d3b3) --- diff --git a/source3/modules/vfs_zfsacl.c b/source3/modules/vfs_zfsacl.c index 092ad33504a..9626f21a522 100644 --- a/source3/modules/vfs_zfsacl.c +++ b/source3/modules/vfs_zfsacl.c @@ -112,7 +112,10 @@ static NTSTATUS zfs_get_nt_acl_common(struct connection_struct *conn, special = acebuf[i].a_flags & (ACE_OWNER|ACE_GROUP|ACE_EVERYONE); - if (is_dir && (aceprop.aceMask & SMB_ACE4_ADD_FILE)) { + if (is_dir && + (aceprop.aceMask & SMB_ACE4_ADD_FILE) && + (special != 0)) + { aceprop.aceMask |= SMB_ACE4_DELETE_CHILD; }