From: Ralph Boehme Date: Fri, 22 Jan 2021 16:12:33 +0000 (+0100) Subject: s3/libadouble: use real dirfsp in ad_convert_delete_adfile() X-Git-Tag: tevent-0.11.0~1891 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ba2e691fafcf18240da4f37e75c7fd531dd91a84;p=thirdparty%2Fsamba.git s3/libadouble: use real dirfsp in ad_convert_delete_adfile() Signed-off-by: Ralph Boehme Reviewed-by: Jeremy Allison --- diff --git a/source3/lib/adouble.c b/source3/lib/adouble.c index ac1ea2c3df1..3be6f353bd8 100644 --- a/source3/lib/adouble.c +++ b/source3/lib/adouble.c @@ -1374,7 +1374,10 @@ static bool ad_convert_delete_adfile(vfs_handle_struct *handle, const struct smb_filename *smb_fname, uint32_t flags) { + struct smb_filename *parent_fname = NULL; + struct smb_filename *at_fname = NULL; struct smb_filename *ad_name = NULL; + NTSTATUS status; int rc; if (ad_getentrylen(ad, ADEID_RFORK) > 0) { @@ -1390,19 +1393,32 @@ static bool ad_convert_delete_adfile(vfs_handle_struct *handle, return false; } + status = parent_pathref(talloc_tos(), + handle->conn->cwd_fsp, + ad_name, + &parent_fname, + &at_fname); + TALLOC_FREE(ad_name); + if (!NT_STATUS_IS_OK(status)) { + return false; + } + rc = SMB_VFS_NEXT_UNLINKAT(handle, - handle->conn->cwd_fsp, - ad_name, + parent_fname->fsp, + at_fname, 0); if (rc != 0) { - DBG_ERR("Unlinking [%s] failed: %s\n", - smb_fname_str_dbg(ad_name), strerror(errno)); - TALLOC_FREE(ad_name); + DBG_ERR("Unlinking [%s/%s] failed: %s\n", + smb_fname_str_dbg(parent_fname), + smb_fname_str_dbg(at_fname), strerror(errno)); + TALLOC_FREE(parent_fname); return false; } - DBG_WARNING("Unlinked [%s] after conversion\n", smb_fname_str_dbg(ad_name)); - TALLOC_FREE(ad_name); + DBG_WARNING("Unlinked [%s/%s] after conversion\n", + smb_fname_str_dbg(parent_fname), + smb_fname_str_dbg(at_fname)); + TALLOC_FREE(parent_fname); return true; }