From 2b4062b4a1fffd3329c27ea7a840b04cf2069669 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 14 Jul 2021 11:23:03 -0700 Subject: [PATCH] s3: VFS: default. In vfswrap_getxattrat_do_sync() always use the pathref fsp. This is always called via a path that mandates smb_fname->fsp is valid. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14758 Signed-off-by: Jeremy Allison Reviewed-by: Ralph Boehme --- source3/modules/vfs_default.c | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c index 9d7c0539528..cb50342ce67 100644 --- a/source3/modules/vfs_default.c +++ b/source3/modules/vfs_default.c @@ -3609,31 +3609,19 @@ static void vfswrap_getxattrat_do_sync(struct tevent_req *req) { struct vfswrap_getxattrat_state *state = tevent_req_data( req, struct vfswrap_getxattrat_state); - char *path = NULL; - char *tofree = NULL; - char pathbuf[PATH_MAX+1]; - ssize_t pathlen; - int err; + struct files_struct *fsp = state->smb_fname->fsp; - pathlen = full_path_tos(state->dir_fsp->fsp_name->base_name, - state->smb_fname->base_name, - pathbuf, - sizeof(pathbuf), - &path, - &tofree); - if (pathlen == -1) { - tevent_req_error(req, ENOMEM); - return; + if (fsp->base_fsp != NULL) { + fsp = fsp->base_fsp; } - state->xattr_size = getxattr(path, - state->xattr_name, - state->xattr_value, - talloc_array_length(state->xattr_value)); - err = errno; - TALLOC_FREE(tofree); + state->xattr_size = vfswrap_fgetxattr(state->handle, + fsp, + state->xattr_name, + state->xattr_value, + talloc_array_length(state->xattr_value)); if (state->xattr_size == -1) { - tevent_req_error(req, err); + tevent_req_error(req, errno); return; } -- 2.34.1