From 4d74d259d806618c1f00af50dfa2925738b84083 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 12 Nov 2005 02:37:51 +0000 Subject: r11695: added SMB2-SCAN torture test for scanning for active SMB2 opcodes (This used to be commit aa3bcf952c4436b488e461a3686955d70c672ce4) --- source4/torture/smb2/config.mk | 3 +- source4/torture/smb2/connect.c | 16 ++------- source4/torture/smb2/scan.c | 76 ++++++++++++++++++++++++++++++++++++++++++ source4/torture/torture.c | 1 + 4 files changed, 81 insertions(+), 15 deletions(-) create mode 100644 source4/torture/smb2/scan.c diff --git a/source4/torture/smb2/config.mk b/source4/torture/smb2/config.mk index d171942109..2c6dfd4fc9 100644 --- a/source4/torture/smb2/config.mk +++ b/source4/torture/smb2/config.mk @@ -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 diff --git a/source4/torture/smb2/connect.c b/source4/torture/smb2/connect.c index f76553c019..6a9a803155 100644 --- a/source4/torture/smb2/connect.c +++ b/source4/torture/smb2/connect.c @@ -24,21 +24,9 @@ #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 index 0000000000..0fcd3250fb --- /dev/null +++ b/source4/torture/smb2/scan.c @@ -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; +} diff --git a/source4/torture/torture.c b/source4/torture/torture.c index 869ff8926d..021c4b3ab4 100644 --- a/source4/torture/torture.c +++ b/source4/torture/torture.c @@ -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}, -- cgit