From: Jeremy Allison Date: Wed, 26 Jul 2023 23:37:11 +0000 (-0700) Subject: s3: torture: Add test to show an SMB1 DFS path of "\\x//\\/" crashes smbd. X-Git-Tag: ldb-2.8.0~13 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=2aa9ffa2f0fc79599efbfe0c37aac4ef5160f712;p=thirdparty%2Fsamba.git s3: torture: Add test to show an SMB1 DFS path of "\\x//\\/" crashes smbd. Adds knownfail. BUG: https://bugzilla.samba.org/show_bug.cgi?id=15419 Signed-off-by: Jeremy Allison Reviewed-by: Ralph Boehme --- diff --git a/selftest/knownfail.d/dfs_badpath b/selftest/knownfail.d/dfs_badpath new file mode 100644 index 00000000000..9fd16e99075 --- /dev/null +++ b/selftest/knownfail.d/dfs_badpath @@ -0,0 +1 @@ +^samba3.smbtorture_s3.smb1.SMB1-DFS-BADPATH.smbtorture\(fileserver_smb1\) diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py index d2b5409d0a9..a10969adbb4 100755 --- a/source3/selftest/tests.py +++ b/source3/selftest/tests.py @@ -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 diff --git a/source3/torture/proto.h b/source3/torture/proto.h index a67a771ef45..93d0727e936 100644 --- a/source3/torture/proto.h +++ b/source3/torture/proto.h @@ -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); diff --git a/source3/torture/test_smb1_dfs.c b/source3/torture/test_smb1_dfs.c index c14d207c82a..6d55de9912f 100644 --- a/source3/torture/test_smb1_dfs.c +++ b/source3/torture/test_smb1_dfs.c @@ -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); +} diff --git a/source3/torture/torture.c b/source3/torture/torture.c index 013879eefeb..ab992665323 100644 --- a/source3/torture/torture.c +++ b/source3/torture/torture.c @@ -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,