r11695: added SMB2-SCAN torture test for scanning for active SMB2 opcodes
authorAndrew Tridgell <tridge@samba.org>
Sat, 12 Nov 2005 02:37:51 +0000 (02:37 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:46:14 +0000 (13:46 -0500)
(This used to be commit aa3bcf952c4436b488e461a3686955d70c672ce4)

source4/torture/smb2/config.mk
source4/torture/smb2/connect.c
source4/torture/smb2/scan.c [new file with mode: 0644]
source4/torture/torture.c

index d1719421098b8aa780319f61312d5e25a67127c5..2c6dfd4fc9be7072fea63d1636e3ed4b7daf0db2 100644 (file)
@@ -3,7 +3,8 @@
 # Start SUBSYSTEM TORTURE_SMB2
 [SUBSYSTEM::TORTURE_SMB2]
 ADD_OBJ_FILES = \
-               connect.o
+               connect.o \
+               scan.o
 REQUIRED_SUBSYSTEMS = \
                LIBCLI_SMB2
 # End SUBSYSTEM TORTURE_SMB2
index f76553c01920ae0cf586c4d3dc104aa2864dc831..6a9a80315547b9ea6178a45dce3beb643807bf8f 100644 (file)
 #include "libcli/raw/libcliraw.h"
 #include "libcli/smb2/smb2.h"
 #include "libcli/smb2/smb2_calls.h"
-#include "librpc/gen_ndr/ndr_security.h"
 #include "lib/cmdline/popt_common.h"
 #include "lib/events/events.h"
 
-#define BASEDIR "\\testsmb2"
-
-#define CHECK_STATUS(status, correct) do { \
-       if (!NT_STATUS_EQUAL(status, correct)) { \
-               printf("(%s) Incorrect status %s - should be %s\n", \
-                      __location__, nt_errstr(status), nt_errstr(correct)); \
-               ret = False; \
-               goto done; \
-       }} while (0)
-
-
 /*
   send a close
 */
@@ -141,8 +129,8 @@ BOOL torture_smb2_connect(void)
                return False;
        }
 
-       h1        = torture_smb2_create(tree, "test9.dat");
-       h2        = torture_smb2_create(tree, "test9.dat");
+       h1 = torture_smb2_create(tree, "test9.dat");
+       h2 = torture_smb2_create(tree, "test9.dat");
        torture_smb2_close(tree, h1);
        torture_smb2_close(tree, h2);
 
diff --git a/source4/torture/smb2/scan.c b/source4/torture/smb2/scan.c
new file mode 100644 (file)
index 0000000..0fcd325
--- /dev/null
@@ -0,0 +1,76 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   SMB2 opcode scanner
+
+   Copyright (C) Andrew Tridgell 2005
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "libcli/raw/libcliraw.h"
+#include "libcli/smb2/smb2.h"
+#include "libcli/smb2/smb2_calls.h"
+#include "lib/cmdline/popt_common.h"
+#include "lib/events/events.h"
+
+
+/* 
+   scan for valid SMB2 opcodes
+*/
+BOOL torture_smb2_scan(void)
+{
+       TALLOC_CTX *mem_ctx = talloc_new(NULL);
+       struct smb2_tree *tree;
+       const char *host = lp_parm_string(-1, "torture", "host");
+       const char *share = lp_parm_string(-1, "torture", "share");
+       struct cli_credentials *credentials = cmdline_credentials;
+       NTSTATUS status;
+       int opcode;
+       struct smb2_request *req;
+
+       status = smb2_connect(mem_ctx, host, share, credentials, &tree, 
+                             event_context_find(mem_ctx));
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("Connection failed - %s\n", nt_errstr(status));
+               return False;
+       }
+
+       tree->session->transport->options.timeout = 3;
+
+       for (opcode=0;opcode<1000;opcode++) {
+               req = smb2_request_init_tree(tree, opcode, 2);
+               SSVAL(req->out.body, 0, 0);
+               smb2_transport_send(req);
+               if (!smb2_request_receive(req)) {
+                       talloc_free(tree);
+                       status = smb2_connect(mem_ctx, host, share, credentials, &tree, 
+                                             event_context_find(mem_ctx));
+                       if (!NT_STATUS_IS_OK(status)) {
+                               printf("Connection failed - %s\n", nt_errstr(status));
+                               return False;
+                       }
+                       tree->session->transport->options.timeout = 3;
+               } else {
+                       status = smb2_request_destroy(req);
+                       printf("active opcode %4d gave status %s\n", opcode, nt_errstr(status));
+               }
+       }
+
+       talloc_free(mem_ctx);
+
+       return True;
+}
index 869ff8926d71f824994cad77938b765e61754a60..021c4b3ab4ff73caed04c5986039f1156b90f599 100644 (file)
@@ -2253,6 +2253,7 @@ static struct {
 
        /* SMB2 tests */
        {"SMB2-CONNECT", torture_smb2_connect, 0},
+       {"SMB2-SCAN", torture_smb2_scan, 0},
 
        /* protocol scanners */
        {"SCAN-TRANS2", torture_trans2_scan, 0},