From: Jeremy Allison Date: Thu, 20 May 2021 22:32:13 +0000 (-0700) Subject: s3: smbd: Change rename_internals_fsp() to use check_parent_access_fsp(). X-Git-Tag: tevent-0.11.0~613 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=daadab4a85bdcb9242c1821b4d62377dbc77d681;p=thirdparty%2Fsamba.git s3: smbd: Change rename_internals_fsp() to use check_parent_access_fsp(). Signed-off-by: Jeremy Allison Reviewed-by: Ralph Boehme --- diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 59fb20df3b5..6168ffc4610 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -7560,6 +7560,8 @@ NTSTATUS rename_internals_fsp(connection_struct *conn, bool replace_if_exists) { TALLOC_CTX *ctx = talloc_tos(); + struct smb_filename *parent_dir_fname_dst = NULL; + struct smb_filename *parent_dir_fname_dst_atname = NULL; struct smb_filename *smb_fname_dst = NULL; NTSTATUS status = NT_STATUS_OK; struct share_mode_lock *lck = NULL; @@ -7784,12 +7786,24 @@ NTSTATUS rename_internals_fsp(connection_struct *conn, /* We're moving a directory. */ access_mask = SEC_DIR_ADD_SUBDIR; } - status = check_parent_access(conn, + + /* + * Get a pathref on the parent directory, so + * we can call check_parent_access_fsp(). + */ + status = parent_pathref(ctx, conn->cwd_fsp, smb_fname_dst, + &parent_dir_fname_dst, + &parent_dir_fname_dst_atname); + if (!NT_STATUS_IS_OK(status)) { + goto out; + } + + status = check_parent_access_fsp(parent_dir_fname_dst->fsp, access_mask); if (!NT_STATUS_IS_OK(status)) { - DBG_INFO("check_parent_access on " + DBG_INFO("check_parent_access_fsp on " "dst %s returned %s\n", smb_fname_str_dbg(smb_fname_dst), nt_errstr(status));