From 0a376b23dbaaec551d0ed48b7098129c09eec1bc Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 11 Oct 2021 12:26:57 -0700 Subject: [PATCH] s3: VFS: zfsacl: Ensure we use a pathref fd, not an io fd, for getting/setting ZFS ACLs. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Don't use path-based calls. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14685 Signed-off-by: Jeremy Allison Reviewed-by: Ralph Böhme Autobuild-User(master): Jeremy Allison Autobuild-Date(master): Tue Oct 12 18:14:27 UTC 2021 on sn-devel-184 --- source3/modules/vfs_zfsacl.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/source3/modules/vfs_zfsacl.c b/source3/modules/vfs_zfsacl.c index b04c6e560ad..69a1db59249 100644 --- a/source3/modules/vfs_zfsacl.c +++ b/source3/modules/vfs_zfsacl.c @@ -235,13 +235,12 @@ static bool zfs_process_smbacl(vfs_handle_struct *handle, files_struct *fsp, SMB_ASSERT(i == naces); /* store acl */ - fd = fsp_get_io_fd(fsp); - if (fd != -1) { - rv = facl(fd, ACE_SETACL, naces, acebuf); - } - else { - rv = acl(fsp->fsp_name->base_name, ACE_SETACL, naces, acebuf); + fd = fsp_get_pathref_fd(fsp); + if (fd == -1) { + errno = EBADF; + return false; } + rv = facl(fd, ACE_SETACL, naces, acebuf); if (rv != 0) { if(errno == ENOSYS) { DEBUG(9, ("acl(ACE_SETACL, %s): Operation is not " @@ -322,11 +321,11 @@ static int fget_zfsacl(TALLOC_CTX *mem_ctx, ace_t *acebuf = NULL; int fd; - fd = fsp_get_io_fd(fsp); + fd = fsp_get_pathref_fd(fsp); if (fd == -1) { - return get_zfsacl(mem_ctx, fsp->fsp_name, outbuf); + errno = EBADF; + return -1; } - naces = facl(fd, ACE_GETACLCNT, 0, NULL); if (naces == -1) { int dbg_level = 10;