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-Url: http://git.samba.org/?a=commitdiff_plain;h=71bf59691f54348dc4125989ac51a9c47ff80d43;p=janger%2Fsamba-autobuild-v4-18-test%2F.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 (cherry picked from commit b317622a8fed0ee195ffe40129eb5bcad28dd985) --- diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c index 93748eab54c..f8ccbca1038 100644 --- a/source3/modules/vfs_gpfs.c +++ b/source3/modules/vfs_gpfs.c @@ -1603,6 +1603,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(), @@ -1614,7 +1619,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;