From: Christof Schmitt Date: Thu, 26 Oct 2023 21:37:15 +0000 (-0700) Subject: vfs_gpfs: Use O_PATH for opening dirfd for stat with CAP_DAC_OVERRIDE X-Git-Tag: talloc-2.4.2~813 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b317622a8fed0ee195ffe40129eb5bcad28dd985;p=thirdparty%2Fsamba.git vfs_gpfs: Use O_PATH for opening dirfd for stat with CAP_DAC_OVERRIDE Use O_PATH when available; this avoids the need for READ/LIST access on that directory. Keep using O_RDONLY if the system does not have O_PATH. BUG: https://bugzilla.samba.org/show_bug.cgi?id=15507 Signed-off-by: Christof Schmitt Reviewed-by: Ralph Boehme --- diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c index 1c11809fb1b..3d3d10905b4 100644 --- a/source3/modules/vfs_gpfs.c +++ b/source3/modules/vfs_gpfs.c @@ -1597,6 +1597,11 @@ static int stat_with_capability(struct vfs_handle_struct *handle, struct smb_filename *dir_name = NULL; struct smb_filename *rel_name = NULL; int ret = -1; +#ifdef O_PATH + int open_flags = O_PATH; +#else + int open_flags = O_RDONLY; +#endif status = SMB_VFS_PARENT_PATHNAME(handle->conn, talloc_tos(), @@ -1608,7 +1613,7 @@ static int stat_with_capability(struct vfs_handle_struct *handle, return -1; } - fd = open(dir_name->base_name, O_RDONLY, 0); + fd = open(dir_name->base_name, open_flags, 0); if (fd == -1) { TALLOC_FREE(dir_name); return -1;