From: Jeremy Allison Date: Fri, 29 Jul 2022 21:38:17 +0000 (-0700) Subject: s3: smbd: Tweak the logic of smb2_file_rename_information(). X-Git-Tag: samba-4.17.0rc1~148 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c673ca15c56feef41501643244ebfe15a48c8d2c;p=thirdparty%2Fsamba.git s3: smbd: Tweak the logic of smb2_file_rename_information(). There's no point in calling filename_convert() and then just ignoring the returned smb_fname if it's a raw stream name. Only call filename_convert() if we know it isn't a raw stream name. Ignore stream/non-stream mismatches in src and dst in smb2_file_rename_information, let rename_internals_fsp() take care of that as the error returns inside rename_internals_fsp() are tested by raw.streams. Signed-off-by: Jeremy Allison Reviewed-by: Volker Lendecke --- diff --git a/source3/smbd/smb2_trans2.c b/source3/smbd/smb2_trans2.c index 512df98f100..c1b1626f9f8 100644 --- a/source3/smbd/smb2_trans2.c +++ b/source3/smbd/smb2_trans2.c @@ -4983,22 +4983,7 @@ static NTSTATUS smb2_file_rename_information(connection_struct *conn, DEBUG(10,("smb2_file_rename_information: got name |%s|\n", newname)); - status = filename_convert(ctx, - conn, - newname, - ucf_flags, - 0, - &smb_fname_dst); - if (!NT_STATUS_IS_OK(status)) { - return status; - } - - if (fsp->base_fsp) { - /* newname must be a stream name. */ - if (newname[0] != ':') { - return NT_STATUS_NOT_SUPPORTED; - } - + if (newname[0] == ':') { /* Create an smb_fname to call rename_internals_fsp() with. */ smb_fname_dst = synthetic_smb_fname(talloc_tos(), fsp->base_fsp->fsp_name->base_name, @@ -5010,6 +4995,16 @@ static NTSTATUS smb2_file_rename_information(connection_struct *conn, status = NT_STATUS_NO_MEMORY; goto out; } + } else { + status = filename_convert(ctx, + conn, + newname, + ucf_flags, + 0, + &smb_fname_dst); + if (!NT_STATUS_IS_OK(status)) { + goto out; + } } /*