From: Ralph Boehme Date: Thu, 1 Sep 2022 16:55:23 +0000 (+0200) Subject: smbtorture: add a test trying to create a stream on share without streams support X-Git-Tag: samba-4.15.10~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c5796b0c7a35f2cc96cab3c63502c21b6153abd8;p=thirdparty%2Fsamba.git smbtorture: add a test trying to create a stream on share without streams support 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 Reviewed-by: Volker Lendecke (backported from commit 3dcdab86f13fabb7a8c6ce71c59a565287d11244) [slow@samba.org: context changes from different tests] --- diff --git a/selftest/knownfail.d/samba3.smb2.create_no_streams b/selftest/knownfail.d/samba3.smb2.create_no_streams new file mode 100644 index 00000000000..c8476081f2d --- /dev/null +++ b/selftest/knownfail.d/samba3.smb2.create_no_streams @@ -0,0 +1 @@ +^samba3.smb2.create_no_streams.no_stream\(fileserver\) diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py index 05690b75c84..2f1549bc99e 100755 --- a/source3/selftest/tests.py +++ b/source3/selftest/tests.py @@ -1019,6 +1019,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": diff --git a/source4/selftest/tests.py b/source4/selftest/tests.py index 102b17f5376..bc06cba310d 100755 --- a/source4/selftest/tests.py +++ b/source4/selftest/tests.py @@ -373,6 +373,7 @@ smb2_s3only = [ "smb2.timestamps", "smb2.async_dosmode", "smb2.twrp", + "smb2.create_no_streams", ] smb2 = [x for x in smbtorture4_testsuites("smb2.") if x not in smb2_s3only] diff --git a/source4/torture/smb2/create.c b/source4/torture/smb2/create.c index 09eab3f1331..94dbae917fd 100644 --- a/source4/torture/smb2/create.c +++ b/source4/torture/smb2/create.c @@ -3196,3 +3196,51 @@ struct torture_suite *torture_smb2_fileid_unique_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; +} diff --git a/source4/torture/smb2/smb2.c b/source4/torture/smb2/smb2.c index 3c69d8c7fa0..1d9b7d5573f 100644 --- a/source4/torture/smb2/smb2.c +++ b/source4/torture/smb2/smb2.c @@ -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_fileid_unique_init(suite)); + torture_suite_add_suite(suite, torture_smb2_create_no_streams_init(suite)); suite->description = talloc_strdup(suite, "SMB2-specific tests");