From: Jeremy Allison Date: Thu, 17 Jun 2021 17:47:42 +0000 (-0700) Subject: s3: VFS: media_harmony: Use real dirfsp for SMB_VFS_RENAMEAT() X-Git-Tag: tevent-0.11.0~223 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2c5ead7fd615843c3957751d8d1acedbdc1ec9e1;p=thirdparty%2Fsamba.git s3: VFS: media_harmony: Use real dirfsp for SMB_VFS_RENAMEAT() Signed-off-by: Jeremy Allison Reviewed-by: Noel Power --- diff --git a/source3/modules/vfs_media_harmony.c b/source3/modules/vfs_media_harmony.c index 3df8e4bfe90..800be5443b2 100644 --- a/source3/modules/vfs_media_harmony.c +++ b/source3/modules/vfs_media_harmony.c @@ -1223,11 +1223,11 @@ static int mh_renameat(vfs_handle_struct *handle, files_struct *dstfsp, const struct smb_filename *smb_fname_dst) { - int status; - struct smb_filename *srcClientFname; - struct smb_filename *dstClientFname; - TALLOC_CTX *ctx; - + int status = -1; + struct smb_filename *full_fname_src = NULL; + struct smb_filename *full_fname_dst = NULL; + struct smb_filename *srcClientFname = NULL; + struct smb_filename *dstClientFname = NULL; DEBUG(MH_INFO_DEBUG, ("Entering with " "smb_fname_src->base_name '%s', " @@ -1247,30 +1247,45 @@ static int mh_renameat(vfs_handle_struct *handle, goto out; } - srcClientFname = NULL; - dstClientFname = NULL; - ctx = talloc_tos(); + full_fname_src = full_path_from_dirfsp_atname(talloc_tos(), + srcfsp, + smb_fname_src); + if (full_fname_src == NULL) { + errno = ENOMEM; + goto out; + } + full_fname_dst = full_path_from_dirfsp_atname(talloc_tos(), + dstfsp, + smb_fname_dst); + if (full_fname_dst == NULL) { + errno = ENOMEM; + goto out; + } - if ((status = alloc_get_client_smb_fname(handle, ctx, - smb_fname_src, + if ((status = alloc_get_client_smb_fname(handle, + talloc_tos(), + full_fname_src, &srcClientFname))) { goto err; } - if ((status = alloc_get_client_smb_fname(handle, ctx, - smb_fname_dst, + if ((status = alloc_get_client_smb_fname(handle, + talloc_tos(), + full_fname_dst, &dstClientFname))) { goto err; } status = SMB_VFS_NEXT_RENAMEAT(handle, - srcfsp, + srcfsp->conn->cwd_fsp, srcClientFname, - dstfsp, + dstfsp->conn->cwd_fsp, dstClientFname); err: + TALLOC_FREE(full_fname_src); + TALLOC_FREE(full_fname_dst); TALLOC_FREE(dstClientFname); TALLOC_FREE(srcClientFname); out: