From 5104ec8dec8c0bcf05bfa8569d54dc55b3b8bc22 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 26 Mar 2020 16:18:53 -0700 Subject: [PATCH] s3: smbd: Use get_original_lcomp() inside smb_file_rename_information(). Pass to rename_internals_fsp() and rename_internals(). Removes the last uses of the struct member original_lcomp outside of the filename and struct util copying code. Signed-off-by: Jeremy Allison Reviewed-by: Ralph Boehme --- source3/smbd/trans2.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index 21b04d45258..e31e61087f8 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -7293,6 +7293,7 @@ static NTSTATUS smb_file_rename_information(connection_struct *conn, uint32_t len; char *newname = NULL; struct smb_filename *smb_fname_dst = NULL; + const char *dst_original_lcomp = NULL; bool dest_has_wcard = False; NTSTATUS status = NT_STATUS_OK; char *p; @@ -7361,12 +7362,14 @@ static NTSTATUS smb_file_rename_information(connection_struct *conn, } /* - * Set the original last component, since + * Get the original last component, since * rename_internals_fsp() requires it. */ - smb_fname_dst->original_lcomp = talloc_strdup(smb_fname_dst, - newname); - if (smb_fname_dst->original_lcomp == NULL) { + dst_original_lcomp = get_original_lcomp(smb_fname_dst, + conn, + newname, + 0); + if (dst_original_lcomp == NULL) { status = NT_STATUS_NO_MEMORY; goto out; } @@ -7442,6 +7445,14 @@ static NTSTATUS smb_file_rename_information(connection_struct *conn, goto out; } } + dst_original_lcomp = get_original_lcomp(smb_fname_dst, + conn, + newname, + ucf_flags); + if (dst_original_lcomp == NULL) { + status = NT_STATUS_NO_MEMORY; + goto out; + } } if (fsp) { @@ -7452,7 +7463,7 @@ static NTSTATUS smb_file_rename_information(connection_struct *conn, status = rename_internals_fsp(conn, fsp, smb_fname_dst, - smb_fname_dst->original_lcomp, + dst_original_lcomp, 0, overwrite); } else { @@ -7465,7 +7476,7 @@ static NTSTATUS smb_file_rename_information(connection_struct *conn, req, smb_fname_src, smb_fname_dst, - smb_fname_dst->original_lcomp, + dst_original_lcomp, 0, overwrite, false, -- 2.47.3