From: Jeremy Allison Date: Tue, 19 Jan 2021 19:54:51 +0000 (-0800) Subject: s3: VFS: gluster: Fix vfs_gluster_linkat() to cope with real directory fsps. X-Git-Tag: tevent-0.11.0~1794 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2d6011e8c85d1cadf7ea951aa76a0dfc64017002;p=thirdparty%2Fsamba.git s3: VFS: gluster: Fix vfs_gluster_linkat() to cope with real directory fsps. Signed-off-by: Jeremy Allison Reviewed-by: Ralph Böhme --- diff --git a/source3/modules/vfs_glusterfs.c b/source3/modules/vfs_glusterfs.c index 25ff945f5f1..b1fd2a7f098 100644 --- a/source3/modules/vfs_glusterfs.c +++ b/source3/modules/vfs_glusterfs.c @@ -1894,15 +1894,33 @@ static int vfs_gluster_linkat(struct vfs_handle_struct *handle, int flags) { int ret; + struct smb_filename *full_fname_old = NULL; + struct smb_filename *full_fname_new = NULL; START_PROFILE(syscall_linkat); - SMB_ASSERT(srcfsp == srcfsp->conn->cwd_fsp); - SMB_ASSERT(dstfsp == dstfsp->conn->cwd_fsp); + full_fname_old = full_path_from_dirfsp_atname(talloc_tos(), + srcfsp, + old_smb_fname); + if (full_fname_old == NULL) { + END_PROFILE(syscall_linkat); + return -1; + } + full_fname_new = full_path_from_dirfsp_atname(talloc_tos(), + dstfsp, + new_smb_fname); + if (full_fname_new == NULL) { + TALLOC_FREE(full_fname_old); + END_PROFILE(syscall_linkat); + return -1; + } ret = glfs_link(handle->data, - old_smb_fname->base_name, - new_smb_fname->base_name); + full_fname_old->base_name, + full_fname_new->base_name); + + TALLOC_FREE(full_fname_old); + TALLOC_FREE(full_fname_new); END_PROFILE(syscall_linkat); return ret;