s3:smbd: split out create_internal_fsp() from create_internal_dirfsp()
authorStefan Metzmacher <metze@samba.org>
Wed, 23 Dec 2020 10:50:34 +0000 (11:50 +0100)
committerStefan Metzmacher <metze@samba.org>
Thu, 14 Jan 2021 11:30:38 +0000 (11:30 +0000)
That will be useful in other places as well.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
source3/smbd/files.c
source3/smbd/proto.h

index f151b01d83a6bb5a248f9c548fa888c1e086a2d3..1c26b775f53dc9fbdfb6375c5954bb0ea8217afb 100644 (file)
@@ -186,6 +186,28 @@ NTSTATUS file_new(struct smb_request *req, connection_struct *conn,
        return NT_STATUS_OK;
 }
 
+NTSTATUS create_internal_fsp(connection_struct *conn,
+                            const struct smb_filename *smb_fname,
+                            struct files_struct **_fsp)
+{
+       struct files_struct *fsp = NULL;
+       NTSTATUS status;
+
+       status = file_new(NULL, conn, &fsp);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
+
+       status = fsp_set_smb_fname(fsp, smb_fname);
+       if (!NT_STATUS_IS_OK(status)) {
+               file_free(NULL, fsp);
+               return status;
+       }
+
+       *_fsp = fsp;
+       return NT_STATUS_OK;
+}
+
 /*
  * Create an internal fsp for an *existing* directory.
  *
@@ -199,14 +221,8 @@ NTSTATUS create_internal_dirfsp(connection_struct *conn,
        struct files_struct *fsp = NULL;
        NTSTATUS status;
 
-       status = file_new(NULL, conn, &fsp);
-       if (!NT_STATUS_IS_OK(status)) {
-               return status;
-       }
-
-       status = fsp_set_smb_fname(fsp, smb_dname);
+       status = create_internal_fsp(conn, smb_dname, &fsp);
        if (!NT_STATUS_IS_OK(status)) {
-               file_free(NULL, fsp);
                return status;
        }
 
index 3c9815fa6db25cb2e3620c5c12c7c6a2254c5c47..60e4877004b0ed39578e4faca8bca5873c3b3704 100644 (file)
@@ -447,6 +447,9 @@ NTSTATUS fsp_set_smb_fname(struct files_struct *fsp,
                           const struct smb_filename *smb_fname_in);
 size_t fsp_fullbasepath(struct files_struct *fsp, char *buf, size_t buflen);
 
+NTSTATUS create_internal_fsp(connection_struct *conn,
+                            const struct smb_filename *smb_fname,
+                            struct files_struct **_fsp);
 NTSTATUS create_internal_dirfsp(connection_struct *conn,
                                const struct smb_filename *smb_dname,
                                struct files_struct **_fsp);