smbtorture: add a test trying to create a stream on share without streams support
authorRalph Boehme <slow@samba.org>
Thu, 1 Sep 2022 16:55:23 +0000 (18:55 +0200)
committerRalph Boehme <slow@samba.org>
Fri, 2 Sep 2022 15:00:36 +0000 (15:00 +0000)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15126
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15161

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
selftest/knownfail.d/samba3.smb2.create_no_streams [new file with mode: 0644]
source3/selftest/tests.py
source4/selftest/tests.py
source4/torture/smb2/create.c
source4/torture/smb2/smb2.c

diff --git a/selftest/knownfail.d/samba3.smb2.create_no_streams b/selftest/knownfail.d/samba3.smb2.create_no_streams
new file mode 100644 (file)
index 0000000..c847608
--- /dev/null
@@ -0,0 +1 @@
+^samba3.smb2.create_no_streams.no_stream\(fileserver\)
index 25f8fa56c58c14f4dfd1082d5035767042093028..82f24dbdfabb33ce8cfa658755a7e2a6f736d279 100755 (executable)
@@ -1097,6 +1097,8 @@ for t in tests:
     elif t == "smb2.twrp":
         # This is being driven by samba3.blackbox.shadow_copy_torture
         pass
+    elif t == "smb2.create_no_streams":
+        plansmbtorture4testsuite(t, "fileserver", '//$SERVER_IP/nfs4acl_simple_40 -U$USERNAME%$PASSWORD')
     elif t == "rpc.wkssvc":
         plansmbtorture4testsuite(t, "ad_member", '//$SERVER/tmp -U$DC_USERNAME%$DC_PASSWORD')
     elif t == "rpc.srvsvc":
index df712ec00208a8a6f9ab8bd5c4bbd68c762c773a..54906ae589c93a81e4d21a62678d55e879b481d3 100755 (executable)
@@ -389,6 +389,7 @@ smb2_s3only = [
     "smb2.async_dosmode",
     "smb2.twrp",
     "smb2.ea",
+    "smb2.create_no_streams",
 ]
 smb2 = [x for x in smbtorture4_testsuites("smb2.") if x not in smb2_s3only]
 
index 9277488e9d7f454c1c25ee921ff1066ada9c307f..9357528909e27befbd08519d5df0e6ffbff8e957 100644 (file)
@@ -3979,3 +3979,51 @@ struct torture_suite *torture_smb2_bench_init(TALLOC_CTX *ctx)
 
        return suite;
 }
+
+static bool test_no_stream(struct torture_context *tctx,
+                          struct smb2_tree *tree)
+{
+       struct smb2_create c;
+       NTSTATUS status;
+       bool ret = true;
+       const char *names[] = {
+               "test_no_stream::$DATA",
+               "test_no_stream::foooooooooooo",
+               "test_no_stream:stream",
+               "test_no_stream:stream:$DATA",
+               NULL
+       };
+       int i;
+
+       for (i = 0; names[i] != NULL; i++) {
+               c = (struct smb2_create) {
+                       .in.desired_access = SEC_FLAG_MAXIMUM_ALLOWED,
+                       .in.file_attributes = FILE_ATTRIBUTE_NORMAL,
+                       .in.create_disposition = NTCREATEX_DISP_OPEN,
+                       .in.share_access = NTCREATEX_SHARE_ACCESS_MASK,
+                       .in.fname = names[i],
+               };
+
+               status = smb2_create(tree, tctx, &c);
+               if (!NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_INVALID)) {
+                       torture_comment(
+                               tctx, "Expected NT_STATUS_OBJECT_NAME_INVALID, "
+                               "got %s, name: '%s'\n",
+                               nt_errstr(status), names[i]);
+                       torture_fail_goto(tctx, done, "Bad create result\n");
+               }
+       }
+done:
+       return ret;
+}
+
+struct torture_suite *torture_smb2_create_no_streams_init(TALLOC_CTX *ctx)
+{
+       struct torture_suite *suite = torture_suite_create(ctx, "create_no_streams");
+
+       torture_suite_add_1smb2_test(suite, "no_stream", test_no_stream);
+
+       suite->description = talloc_strdup(suite, "SMB2-CREATE stream test on share without streams support");
+
+       return suite;
+}
index 458561adac35b1ffc69b37eadbc939998957c091..f61a2bf96f8bdd23c36f71ec066b5efb4fd4ed7e 100644 (file)
@@ -215,6 +215,7 @@ NTSTATUS torture_smb2_init(TALLOC_CTX *ctx)
        torture_suite_add_1smb2_test(suite, "session-id", run_sessidtest);
        torture_suite_add_suite(suite, torture_smb2_deny_init(suite));
        torture_suite_add_suite(suite, torture_smb2_ea(suite));
+       torture_suite_add_suite(suite, torture_smb2_create_no_streams_init(suite));
 
        suite->description = talloc_strdup(suite, "SMB2-specific tests");