From f6f4baf919424cd7ed05915eebf0ea2e6f989a0a Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Fri, 22 Jan 2021 14:47:13 +0100 Subject: [PATCH] smbd: use real dirfsp for SMB_VFS_UNLINKAT() in create_msdfs_link() Signed-off-by: Ralph Boehme Reviewed-by: Jeremy Allison --- source3/smbd/msdfs.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/source3/smbd/msdfs.c b/source3/smbd/msdfs.c index dc07727f007..aa88e8fd417 100644 --- a/source3/smbd/msdfs.c +++ b/source3/smbd/msdfs.c @@ -1380,6 +1380,8 @@ bool create_msdfs_link(const struct junction_map *jucn, char *path = NULL; connection_struct *conn; struct smb_filename *smb_fname = NULL; + struct smb_filename *parent_fname = NULL; + struct smb_filename *at_fname = NULL; bool ok; NTSTATUS status; bool ret = false; @@ -1409,6 +1411,15 @@ bool create_msdfs_link(const struct junction_map *jucn, goto out; } + status = parent_pathref(frame, + conn->cwd_fsp, + smb_fname, + &parent_fname, + &at_fname); + if (!NT_STATUS_IS_OK(status)) { + goto out; + } + status = SMB_VFS_CREATE_DFS_PATHAT(conn, conn->cwd_fsp, smb_fname, @@ -1417,8 +1428,8 @@ bool create_msdfs_link(const struct junction_map *jucn, if (!NT_STATUS_IS_OK(status)) { if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) { int retval = SMB_VFS_UNLINKAT(conn, - conn->cwd_fsp, - smb_fname, + parent_fname->fsp, + at_fname, 0); if (retval != 0) { goto out; -- 2.34.1