s3: torture: Add test to show an SMB1 DFS path of "\\x//\\/" crashes smbd.
authorJeremy Allison <jra@samba.org>
Wed, 26 Jul 2023 23:37:11 +0000 (16:37 -0700)
committerRalph Boehme <slow@samba.org>
Thu, 27 Jul 2023 09:59:29 +0000 (09:59 +0000)
Adds knownfail.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=15419

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
selftest/knownfail.d/dfs_badpath [new file with mode: 0644]
source3/selftest/tests.py
source3/torture/proto.h
source3/torture/test_smb1_dfs.c
source3/torture/torture.c

diff --git a/selftest/knownfail.d/dfs_badpath b/selftest/knownfail.d/dfs_badpath
new file mode 100644 (file)
index 0000000..9fd16e9
--- /dev/null
@@ -0,0 +1 @@
+^samba3.smbtorture_s3.smb1.SMB1-DFS-BADPATH.smbtorture\(fileserver_smb1\)
index d2b5409d0a9a8c58db95864f98eb3a5e68af2d16..a10969adbb42e1d6ebb52dce181805170b823fec 100755 (executable)
@@ -357,6 +357,20 @@ plantestsuite("samba3.smbtorture_s3.smb1.SMB1-DFS-OPERATIONS",
                 '$PASSWORD',
                 smbtorture3,
                 "-mNT1"])
+#
+# SMB1-DFS-BADPATH needs to run against a special share msdfs-pathname-share
+# BUG: https://bugzilla.samba.org/show_bug.cgi?id=15419
+#
+plantestsuite("samba3.smbtorture_s3.smb1.SMB1-DFS-BADPATH",
+                "fileserver_smb1",
+                [os.path.join(samba3srcdir,
+                              "script/tests/test_smbtorture_s3.sh"),
+                'SMB1-DFS-BADPATH',
+                '//$SERVER_IP/msdfs-pathname-share',
+                '$USERNAME',
+                '$PASSWORD',
+                smbtorture3,
+                "-mNT1"])
 
 #
 # SMB2-STREAM-ACL needs to run against a special share - vfs_wo_fruit
index a67a771ef4552dd58730641d68c50c23d6be8317..93d0727e93615bfdcde781ea453226ea90101e70 100644 (file)
@@ -127,6 +127,7 @@ bool run_smb2_dfs_filename_leading_backslash(int dummy);
 bool run_smb1_dfs_paths(int dummy);
 bool run_smb1_dfs_search_paths(int dummy);
 bool run_smb1_dfs_operations(int dummy);
+bool run_smb1_dfs_check_badpath(int dummy);
 bool run_list_dir_async_test(int dummy);
 bool run_delete_on_close_non_empty(int dummy);
 bool run_delete_on_close_nonwrite_delete_yes_test(int dummy);
index c14d207c82a845d71eb898d51f0009d408447d46..6d55de9912f5840c53e8b9314862e3a10da74aad 100644 (file)
@@ -3810,6 +3810,26 @@ static bool test_smb1_chkpath(struct cli_state *cli)
        return retval;
 }
 
+/*
+ * Test BUG: https://bugzilla.samba.org/show_bug.cgi?id=15419
+ */
+
+static bool test_smb1_chkpath_bad(struct cli_state *cli)
+{
+       NTSTATUS status;
+
+       status = smb1_chkpath(cli, "\\x//\\/");
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("%s:%d SMB1chkpath of %s failed (%s)\n",
+                       __FILE__,
+                       __LINE__,
+                       "\\x//\\/",
+                       nt_errstr(status));
+               return false;
+       }
+       return true;
+}
+
 static NTSTATUS smb1_ctemp(struct cli_state *cli,
                           const char *path,
                           char **tmp_path)
@@ -4226,3 +4246,39 @@ bool run_smb1_dfs_operations(int dummy)
        (void)smb1_dfs_delete(cli, "\\BAD\\BAD\\file");
        return retval;
 }
+
+/*
+ * Test BUG: https://bugzilla.samba.org/show_bug.cgi?id=15419
+ */
+
+bool run_smb1_dfs_check_badpath(int dummy)
+{
+       struct cli_state *cli = NULL;
+       bool dfs_supported = false;
+
+       printf("Starting SMB1-DFS-CHECK-BADPATH\n");
+
+       if (!torture_init_connection(&cli)) {
+               return false;
+       }
+
+       if (!torture_open_connection(&cli, 0)) {
+               return false;
+       }
+
+       /* Ensure this is a DFS share. */
+       dfs_supported = smbXcli_conn_dfs_supported(cli->conn);
+       if (!dfs_supported) {
+               printf("Server %s does not support DFS\n",
+                       smbXcli_conn_remote_name(cli->conn));
+               return false;
+       }
+       dfs_supported = smbXcli_tcon_is_dfs_share(cli->smb1.tcon);
+       if (!dfs_supported) {
+               printf("Share %s does not support DFS\n",
+                       cli->share);
+               return false;
+       }
+
+       return test_smb1_chkpath_bad(cli);
+}
index 013879eefeb7986fadba48605269494960c68164..ab9926653235909fcf80f18c8e4ad580835b2212 100644 (file)
@@ -15385,6 +15385,10 @@ static struct {
                .name  = "SMB1-DFS-OPERATIONS",
                .fn    = run_smb1_dfs_operations,
        },
+       {
+               .name  = "SMB1-DFS-BADPATH",
+               .fn    = run_smb1_dfs_check_badpath,
+       },
        {
                .name  = "CLEANUP1",
                .fn    = run_cleanup1,