smbd: use parent_pathref() in smb_unix_mknod()
authorRalph Boehme <slow@samba.org>
Mon, 25 Jan 2021 14:46:04 +0000 (15:46 +0100)
committerJeremy Allison <jra@samba.org>
Thu, 28 Jan 2021 08:11:49 +0000 (08:11 +0000)
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/smbd/trans2.c

index f3a0d7da75f522763e8ab4df766693e5b3cb6ecd..36a18edd1e0aa99b69a0d7da2e57f59d27aa19fd 100644 (file)
@@ -8142,7 +8142,6 @@ static NTSTATUS smb_unix_mknod(connection_struct *conn,
        int ret;
        struct smb_filename *parent_fname = NULL;
        struct smb_filename *base_name = NULL;
-       bool ok;
 
        if (total_data < 100) {
                return NT_STATUS_INVALID_PARAMETER;
@@ -8199,25 +8198,12 @@ static NTSTATUS smb_unix_mknod(connection_struct *conn,
                  "%.0f mode 0%o for file %s\n", (double)dev,
                  (unsigned int)unixmode, smb_fname_str_dbg(smb_fname)));
 
-       ok = parent_smb_fname(talloc_tos(),
-                             smb_fname,
-                             &parent_fname,
-                             &base_name);
-       if (!ok) {
-               return NT_STATUS_NO_MEMORY;
-       }
-
-       ret = vfs_stat(conn, parent_fname);
-       if (ret == -1) {
-               TALLOC_FREE(parent_fname);
-               return map_nt_error_from_unix(errno);
-       }
-       status = openat_pathref_fsp(conn->cwd_fsp, parent_fname);
-       if (NT_STATUS_EQUAL(status, NT_STATUS_STOPPED_ON_SYMLINK)) {
-               status = NT_STATUS_OBJECT_NAME_NOT_FOUND;
-       }
+       status = parent_pathref(talloc_tos(),
+                               conn->cwd_fsp,
+                               smb_fname,
+                               &parent_fname,
+                               &base_name);
        if (!NT_STATUS_IS_OK(status)) {
-               TALLOC_FREE(parent_fname);
                return status;
        }