]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3: smbd: Convert smb_file_rename_information() to use filename_convert_dirfsp().
authorJeremy Allison <jra@samba.org>
Thu, 28 Jul 2022 19:38:47 +0000 (12:38 -0700)
committerJeremy Allison <jra@samba.org>
Tue, 2 Aug 2022 20:46:38 +0000 (20:46 +0000)
There is only one last user of filename_convert(), in filename_convert_smb1_search_path().

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Tue Aug  2 20:46:38 UTC 2022 on sn-devel-184

source3/smbd/smb2_trans2.c

index fb1b07ee58870e5abd8d7703830626d39efcd622..d0f30a782bf9eab3b18f23dc0d618fb4f8562406 100644 (file)
@@ -5168,6 +5168,7 @@ static NTSTATUS smb_file_rename_information(connection_struct *conn,
        uint32_t root_fid;
        uint32_t len;
        char *newname = NULL;
+       struct files_struct *dst_dirfsp = NULL;
        struct smb_filename *smb_fname_dst = NULL;
        const char *dst_original_lcomp = NULL;
        NTSTATUS status = NT_STATUS_OK;
@@ -5256,6 +5257,7 @@ static NTSTATUS smb_file_rename_information(connection_struct *conn,
                 */
                char *base_name = NULL;
                uint32_t ucf_flags = ucf_flags_from_smb_request(req);
+               NTTIME dst_twrp = 0;
 
                /* newname must *not* be a stream name. */
                if (newname[0] == ':') {
@@ -5287,12 +5289,16 @@ static NTSTATUS smb_file_rename_information(connection_struct *conn,
                        return NT_STATUS_NO_MEMORY;
                }
 
-               status = filename_convert(ctx,
-                                         conn,
-                                         base_name,
-                                         ucf_flags,
-                                         0,
-                                         &smb_fname_dst);
+               if (ucf_flags & UCF_GMT_PATHNAME) {
+                       extract_snapshot_token(base_name, &dst_twrp);
+               }
+               status = filename_convert_dirfsp(ctx,
+                                        conn,
+                                        base_name,
+                                        ucf_flags,
+                                        dst_twrp,
+                                        &dst_dirfsp,
+                                        &smb_fname_dst);
 
                if (!NT_STATUS_IS_OK(status)) {
                        goto out;
@@ -5314,7 +5320,7 @@ static NTSTATUS smb_file_rename_information(connection_struct *conn,
                          smb_fname_str_dbg(smb_fname_dst)));
                status = rename_internals_fsp(conn,
                                        fsp,
-                                       NULL, /* dst_dirfsp */
+                                       dst_dirfsp,
                                        smb_fname_dst,
                                        dst_original_lcomp,
                                        0,
@@ -5329,7 +5335,7 @@ static NTSTATUS smb_file_rename_information(connection_struct *conn,
                                        req,
                                        NULL, /* src_dirfsp */
                                        smb_fname_src,
-                                       NULL, /* dst_dirfsp */
+                                       dst_dirfsp,
                                        smb_fname_dst,
                                        dst_original_lcomp,
                                        0,