From: Ralph Boehme Date: Tue, 29 Sep 2020 09:10:51 +0000 (+0200) Subject: vfs_default: support pathref fd's in vfswrap_fremovexattr() X-Git-Tag: samba-4.14.0rc1~395 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a46f987ce57ee2e50c80431a53fc3573bc7c22aa;p=thirdparty%2Fsamba.git vfs_default: support pathref fd's in vfswrap_fremovexattr() Signed-off-by: Ralph Boehme Reviewed-by: Jeremy Allison --- diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c index 1ec6f20fd95..11112fcb962 100644 --- a/source3/modules/vfs_default.c +++ b/source3/modules/vfs_default.c @@ -3623,7 +3623,28 @@ static int vfswrap_removexattr(struct vfs_handle_struct *handle, static int vfswrap_fremovexattr(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name) { - return fremovexattr(fsp_get_io_fd(fsp), name); + int fd = fsp_get_pathref_fd(fsp); + + if (!fsp->fsp_flags.is_pathref) { + return fremovexattr(fd, name); + } + + if (fsp->fsp_flags.have_proc_fds) { + const char *p = NULL; + char buf[PATH_MAX]; + + p = sys_proc_fd_path(fd, buf, sizeof(buf)); + if (p == NULL) { + return -1; + } + + return removexattr(p, name); + } + + /* + * This is no longer a handle based call. + */ + return removexattr(fsp->fsp_name->base_name, name); } static int vfswrap_setxattr(struct vfs_handle_struct *handle,