s3: smbtorture3: Add POSIX-MKDIR test for posix_mkdir case sensitive bug.
authorJeremy Allison <jra@samba.org>
Sun, 24 Feb 2019 01:52:34 +0000 (17:52 -0800)
committerKarolin Seeger <kseeger@samba.org>
Tue, 5 Mar 2019 19:29:14 +0000 (19:29 +0000)
Test does:

mkdir POSIX_foo
mkdir POSIX_Foo
mkdir POSIX_foo/Foo
mkdir POSIX_foo/foo
mkdir POSIX_Foo/Foo
mkdir POSIX_Foo/foo

Which should pass a SMB1 POSIX extensions server
as posix mkdir should always be case sensitive
no matter what the share is set to.

Mark as knownfail for now.

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

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
(cherry picked from commit f0decb31fff24ceb57d23bebbfb87aa0e5103947)

selftest/knownfail
selftest/skip
source3/selftest/tests.py
source3/torture/torture.c

index abbbd889c7109f96766f67b833e164980230c531..1ac9616090f65e687b0ecdbacae8cc6e0ff658e3 100644 (file)
@@ -9,6 +9,7 @@
  ^samba3.smbtorture_s3.crypt_server\(nt4_dc\).SMB2-SESSION-REAUTH # expected to give ACCESS_DENIED SMB2.1 doesn't have encryption
 ^samba3.smbtorture_s3.crypt_server\(nt4_dc\).SMB2-SESSION-RECONNECT # expected to give CONNECTION_DISCONNECTED, we need to fix the test
 ^samba3.smbtorture_s3.plain.*SMB2-DIR-FSYNC.*\(ad_dc_ntvfs\)
+^samba3.smbtorture_s3.*.POSIX-MKDIR
 ^samba3.smb2.session enc.reconnect # expected to give CONNECTION_DISCONNECTED, we need to fix the test
 ^samba3.raw.session enc # expected to give ACCESS_DENIED as SMB1 encryption isn't used
 ^samba3.smbtorture_s3.crypt_server # expected to give ACCESS_DENIED as SMB1 encryption isn't used
index f59f824147cc795e69c225e7f5a68b509106a050..b88412c082d9215f5668b46d3d2fdfce1720a9fe 100644 (file)
@@ -48,6 +48,7 @@
 ^samba3.smbtorture_s3.plain.POSIX-SYMLINK-EA\(ad_dc_ntvfs\) # Fails against the s4 ntvfs server
 ^samba3.smbtorture_s3.plain.POSIX-OFD-LOCK\(ad_dc_ntvfs\) # Fails against the s4 ntvfs server
 ^samba3.smbtorture_s3.plain.POSIX-STREAM-DELETE\(ad_dc_ntvfs\) # Fails against the s4 ntvfs server
+^samba3.smbtorture_s3.plain.POSIX-MKDIR\(ad_dc_ntvfs\) # Fails against the s4 ntvfs server
 ^samba3.smbtorture_s3.plain.WINDOWS-BAD-SYMLINK\(ad_dc_ntvfs\) # Fails against the s4 ntvfs server
 ^samba3.smbtorture_s3.plain.RENAME-ACCESS\(ad_dc_ntvfs\) # Fails against the s4 ntvfs server
 ^samba3.smbtorture_s3.plain.OWNER-RIGHTS\(ad_dc_ntvfs\) # Don't test against the s4 ntvfs server anymore
index 30a93a2ee421411bc35f997c864766780b3182be..5d7e4969e5945f395526410626be5de4340f1a16 100755 (executable)
@@ -153,7 +153,7 @@ for s in shares:
     plansmbtorture4testsuite(t, "simpleserver", "//%s/%s %s" % ('$SERVER_IP', s, ' -U$USERNAME%$PASSWORD'), description=s)
 
 posix_tests = ["POSIX", "POSIX-APPEND", "POSIX-SYMLINK-ACL", "POSIX-SYMLINK-EA", "POSIX-OFD-LOCK",
-               "POSIX-STREAM-DELETE", "WINDOWS-BAD-SYMLINK"]
+               "POSIX-STREAM-DELETE", "WINDOWS-BAD-SYMLINK", "POSIX-MKDIR"]
 
 for t in posix_tests:
     plantestsuite("samba3.smbtorture_s3.plain.%s" % t, "nt4_dc", [os.path.join(samba3srcdir, "script/tests/test_smbtorture_s3.sh"), t, '//$SERVER_IP/posix_share', '$USERNAME', '$PASSWORD', smbtorture3, "", "-l $LOCAL_PATH"])
index 1849a8da0f87ef12b398ae44442cc2553634bb44..5d72e4f5768d87757fa134ab3acc81e2cfa47ec7 100644 (file)
@@ -7256,6 +7256,105 @@ static bool run_posix_ofd_lock_test(int dummy)
        return correct;
 }
 
+/*
+  Test POSIX mkdir is case-sensitive.
+ */
+static bool run_posix_mkdir_test(int dummy)
+{
+       static struct cli_state *cli;
+       const char *fname_foo = "POSIX_foo";
+       const char *fname_foo_Foo = "POSIX_foo/Foo";
+       const char *fname_foo_foo = "POSIX_foo/foo";
+       const char *fname_Foo = "POSIX_Foo";
+       const char *fname_Foo_Foo = "POSIX_Foo/Foo";
+       const char *fname_Foo_foo = "POSIX_Foo/foo";
+       bool correct = false;
+       NTSTATUS status;
+       TALLOC_CTX *frame = NULL;
+
+       frame = talloc_stackframe();
+
+       printf("Starting POSIX mkdir test\n");
+
+       if (!torture_open_connection(&cli, 0)) {
+               TALLOC_FREE(frame);
+               return false;
+       }
+
+       smbXcli_conn_set_sockopt(cli->conn, sockops);
+
+       status = torture_setup_unix_extensions(cli);
+       if (!NT_STATUS_IS_OK(status)) {
+               TALLOC_FREE(frame);
+               return false;
+       }
+
+       cli_posix_rmdir(cli, fname_foo_foo);
+       cli_posix_rmdir(cli, fname_foo_Foo);
+       cli_posix_rmdir(cli, fname_foo);
+
+       cli_posix_rmdir(cli, fname_Foo_foo);
+       cli_posix_rmdir(cli, fname_Foo_Foo);
+       cli_posix_rmdir(cli, fname_Foo);
+
+       status = cli_posix_mkdir(cli, fname_foo, 0777);
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("cli_posix_mkdir of %s failed\n", fname_foo);
+               goto out;
+       }
+
+       status = cli_posix_mkdir(cli, fname_Foo, 0777);
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("cli_posix_mkdir of %s failed\n", fname_Foo);
+               goto out;
+       }
+
+       status = cli_posix_mkdir(cli, fname_foo_foo, 0777);
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("cli_posix_mkdir of %s failed\n", fname_foo_foo);
+               goto out;
+       }
+
+       status = cli_posix_mkdir(cli, fname_foo_Foo, 0777);
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("cli_posix_mkdir of %s failed\n", fname_foo_Foo);
+               goto out;
+       }
+
+       status = cli_posix_mkdir(cli, fname_Foo_foo, 0777);
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("cli_posix_mkdir of %s failed\n", fname_Foo_foo);
+               goto out;
+       }
+
+       status = cli_posix_mkdir(cli, fname_Foo_Foo, 0777);
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("cli_posix_mkdir of %s failed\n", fname_Foo_Foo);
+               goto out;
+       }
+
+       printf("POSIX mkdir test passed\n");
+       correct = true;
+
+  out:
+
+       cli_posix_rmdir(cli, fname_foo_foo);
+       cli_posix_rmdir(cli, fname_foo_Foo);
+       cli_posix_rmdir(cli, fname_foo);
+
+       cli_posix_rmdir(cli, fname_Foo_foo);
+       cli_posix_rmdir(cli, fname_Foo_Foo);
+       cli_posix_rmdir(cli, fname_Foo);
+
+       if (!torture_close_connection(cli)) {
+               correct = false;
+       }
+
+       TALLOC_FREE(frame);
+       return correct;
+}
+
+
 static uint32_t open_attrs_table[] = {
                FILE_ATTRIBUTE_NORMAL,
                FILE_ATTRIBUTE_ARCHIVE,
@@ -11769,6 +11868,7 @@ static struct {
        {"POSIX-SYMLINK-EA", run_ea_symlink_test, 0},
        {"POSIX-STREAM-DELETE", run_posix_stream_delete, 0},
        {"POSIX-OFD-LOCK", run_posix_ofd_lock_test, 0},
+       {"POSIX-MKDIR", run_posix_mkdir_test, 0},
        {"WINDOWS-BAD-SYMLINK", run_symlink_open_test, 0},
        {"CASE-INSENSITIVE-CREATE", run_case_insensitive_create, 0},
        {"ASYNC-ECHO", run_async_echo, 0},