s3:torture: add SMB2-ANONYMOUS which asserts no GUEST bit for anonymous
authorStefan Metzmacher <metze@samba.org>
Thu, 15 Mar 2018 16:40:07 +0000 (17:40 +0100)
committerStefan Metzmacher <metze@samba.org>
Tue, 20 Mar 2018 20:28:29 +0000 (21:28 +0100)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=13328

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
(cherry picked from commit 82d8aa3b9cb15512d29a97b5a7e55ea1a052734f)

source3/torture/proto.h
source3/torture/test_smb2.c
source3/torture/torture.c

index 7ab2fe1f39bfae2230ae2ae62bc174419bf447cc..45870c904fbd68c9ad8f3593d5fe401ee4ca8343 100644 (file)
@@ -95,6 +95,7 @@ bool run_nttrans_create(int dummy);
 bool run_nttrans_fsctl(int dummy);
 bool run_smb2_basic(int dummy);
 bool run_smb2_negprot(int dummy);
+bool run_smb2_anonymous(int dummy);
 bool run_smb2_session_reconnect(int dummy);
 bool run_smb2_tcon_dependence(int dummy);
 bool run_smb2_multi_channel(int dummy);
index 297c3abca9f3af8b96f303b82188dd0fb29beca7..897d034f6a9165d129b2c1ca951ec51bca1cfc25 100644 (file)
@@ -24,6 +24,7 @@
 #include "../libcli/smb/smbXcli_base.h"
 #include "libcli/security/security.h"
 #include "libsmb/proto.h"
+#include "auth/credentials/credentials.h"
 #include "auth/gensec/gensec.h"
 #include "auth_generic.h"
 #include "../librpc/ndr/libndr.h"
@@ -274,6 +275,47 @@ bool run_smb2_negprot(int dummy)
        return true;
 }
 
+bool run_smb2_anonymous(int dummy)
+{
+       struct cli_state *cli = NULL;
+       NTSTATUS status;
+       struct cli_credentials *anon_creds = NULL;
+       bool guest = false;
+
+       printf("Starting SMB2-ANONYMOUS\n");
+
+       if (!torture_init_connection(&cli)) {
+               return false;
+       }
+
+       status = smbXcli_negprot(cli->conn, cli->timeout,
+                                PROTOCOL_SMB2_02, PROTOCOL_LATEST);
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("smbXcli_negprot returned %s\n", nt_errstr(status));
+               return false;
+       }
+
+       anon_creds = cli_credentials_init_anon(talloc_tos());
+       if (anon_creds == NULL) {
+               printf("cli_credentials_init_anon failed\n");
+               return false;
+       }
+
+       status = cli_session_setup_creds(cli, anon_creds);
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("cli_session_setup returned %s\n", nt_errstr(status));
+               return false;
+       }
+
+       guest = smbXcli_session_is_guest(cli->smb2.session);
+       if (guest) {
+               printf("anonymous session should not have guest authentication\n");
+               return false;
+       }
+
+       return true;
+}
+
 bool run_smb2_session_reconnect(int dummy)
 {
        struct cli_state *cli1;
index ae502f280feeafd13702167ec87aaaacd1fc6bf1..df6604de9fe219e504a8ef604d918d32c63a99fd 100644 (file)
@@ -11588,6 +11588,7 @@ static struct {
        { "NOTIFY-ONLINE", run_notify_online },
        { "SMB2-BASIC", run_smb2_basic },
        { "SMB2-NEGPROT", run_smb2_negprot },
+       { "SMB2-ANONYMOUS", run_smb2_anonymous },
        { "SMB2-SESSION-RECONNECT", run_smb2_session_reconnect },
        { "SMB2-TCON-DEPENDENCE", run_smb2_tcon_dependence },
        { "SMB2-MULTI-CHANNEL", run_smb2_multi_channel },