]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3: smbd: Convert reply_open_and_X() to use filename_convert_dirfsp().
authorJeremy Allison <jra@samba.org>
Wed, 27 Jul 2022 19:00:32 +0000 (12:00 -0700)
committerVolker Lendecke <vl@samba.org>
Thu, 28 Jul 2022 15:38:38 +0000 (15:38 +0000)
One less use of filename_convert().

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
source3/smbd/smb1_reply.c

index e86ca87cc7fa20581b9b59c12613967b2bd6b4d5..65f0c29debf4461ea99de829107da67b079cfd0f 100644 (file)
@@ -1586,6 +1586,7 @@ void reply_open_and_X(struct smb_request *req)
        uint32_t fattr=0;
        int mtime=0;
        int smb_action = 0;
+       struct files_struct *dirfsp = NULL;
        files_struct *fsp;
        NTSTATUS status;
        uint64_t allocation_size;
@@ -1596,6 +1597,7 @@ void reply_open_and_X(struct smb_request *req)
        uint32_t create_options = 0;
        uint32_t private_flags = 0;
        uint32_t ucf_flags;
+       NTTIME twrp = 0;
        TALLOC_CTX *ctx = talloc_tos();
 
        START_PROFILE(SMBopenX);
@@ -1644,12 +1646,17 @@ void reply_open_and_X(struct smb_request *req)
 
        ucf_flags = filename_create_ucf_flags(req, create_disposition);
 
-       status = filename_convert(ctx,
-                               conn,
-                               fname,
-                               ucf_flags,
-                               0,
-                               &smb_fname);
+       if (ucf_flags & UCF_GMT_PATHNAME) {
+               extract_snapshot_token(fname, &twrp);
+       }
+
+       status = filename_convert_dirfsp(ctx,
+                                        conn,
+                                        fname,
+                                        ucf_flags,
+                                        twrp,
+                                        &dirfsp,
+                                        &smb_fname);
        if (!NT_STATUS_IS_OK(status)) {
                if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
                        reply_botherror(req,
@@ -1664,7 +1671,7 @@ void reply_open_and_X(struct smb_request *req)
        status = SMB_VFS_CREATE_FILE(
                conn,                                   /* conn */
                req,                                    /* req */
-               NULL,                                   /* dirfsp */
+               dirfsp,                                 /* dirfsp */
                smb_fname,                              /* fname */
                access_mask,                            /* access_mask */
                share_mode,                             /* share_access */