summaryrefslogtreecommitdiff
path: root/source4/torture
diff options
context:
space:
mode:
Diffstat (limited to 'source4/torture')
-rw-r--r--source4/torture/smb2/connect.c54
1 files changed, 48 insertions, 6 deletions
diff --git a/source4/torture/smb2/connect.c b/source4/torture/smb2/connect.c
index 7237bb704a..43029dd04d 100644
--- a/source4/torture/smb2/connect.c
+++ b/source4/torture/smb2/connect.c
@@ -27,6 +27,7 @@
#include "librpc/gen_ndr/ndr_security.h"
#include "lib/cmdline/popt_common.h"
#include "lib/events/events.h"
+#include "auth/gensec/gensec.h"
#define BASEDIR "\\testsmb2"
@@ -78,7 +79,6 @@ static struct smb2_transport *torture_smb2_negprot(TALLOC_CTX *mem_ctx, const ch
return transport;
}
-#if 0
/*
send a session setup
*/
@@ -86,11 +86,56 @@ static struct smb2_session *torture_smb2_session(struct smb2_transport *transpor
struct cli_credentials *credentials)
{
struct smb2_session *session;
+ struct smb2_session_setup io;
NTSTATUS status;
+ TALLOC_CTX *tmp_ctx = talloc_new(transport);
- session = smb2_session_init(transport);
+ ZERO_STRUCT(io);
+ io.in.unknown1 = 0x11;
+ io.in.unknown2 = 0xF;
+ io.in.unknown3 = 0x00;
+ io.in.unknown4 = 0x50;
+
+ session = smb2_session_init(transport, transport, True);
+
+ status = gensec_set_credentials(session->gensec, credentials);
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(1, ("Failed to start set GENSEC client credentails: %s\n",
+ nt_errstr(status)));
+ return NULL;
+ }
+
+ status = gensec_set_target_hostname(session->gensec, transport->socket->hostname);
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(1, ("Failed to start set GENSEC target hostname: %s\n",
+ nt_errstr(status)));
+ return NULL;
+ }
+
+ status = gensec_set_target_service(session->gensec, "cifs");
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(1, ("Failed to start set GENSEC target service: %s\n",
+ nt_errstr(status)));
+ return NULL;
+ }
+
+ status = gensec_start_mech_by_oid(session->gensec, GENSEC_OID_SPNEGO);
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(1, ("Failed to start set GENSEC client - %s\n",
+ nt_errstr(status)));
+ return NULL;
+ }
+
+ status = gensec_update(session->gensec, tmp_ctx,
+ session->transport->negotiate.secblob,
+ &io.in.secblob);
+ if (!NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED) &&
+ !NT_STATUS_IS_OK(status)) {
+ DEBUG(1, ("Failed initial gensec_update : %s\n", nt_errstr(status)));
+ return NULL;
+ }
- status = smb2_session_setup(session, credentials)
+ status = smb2_session_setup(session, tmp_ctx, &io);
if (!NT_STATUS_IS_OK(status)) {
printf("session setup failed - %s\n", nt_errstr(status));
return NULL;
@@ -98,7 +143,6 @@ static struct smb2_session *torture_smb2_session(struct smb2_transport *transpor
return session;
}
-#endif
/*
basic testing of SMB2 connection calls
@@ -112,9 +156,7 @@ BOOL torture_smb2_connect(void)
struct cli_credentials *credentials = cmdline_credentials;
transport = torture_smb2_negprot(mem_ctx, host);
-#if 0
session = torture_smb2_session(transport, credentials);
-#endif
talloc_free(mem_ctx);