summaryrefslogtreecommitdiff
path: root/source4/libcli
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2017-05-16 00:10:33 +0200
committerStefan Metzmacher <metze@samba.org>2017-06-17 16:48:11 +0200
commit048ed2926ffe6e3c17605721e45360da6764f924 (patch)
tree9f0e11c0cfa2c4050470d94c0211e6a3ef484be5 /source4/libcli
parent068817a9143ca405d1dc6ff80b47c42489c49c9a (diff)
downloadsamba-048ed2926ffe6e3c17605721e45360da6764f924.tar.gz
s4:libcli/smb_composite: split out session_setup_spnego_restart() from session_setup_spnego()
Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Diffstat (limited to 'source4/libcli')
-rw-r--r--source4/libcli/smb_composite/sesssetup.c56
1 files changed, 37 insertions, 19 deletions
diff --git a/source4/libcli/smb_composite/sesssetup.c b/source4/libcli/smb_composite/sesssetup.c
index 256d12b18bd..5e649e448ea 100644
--- a/source4/libcli/smb_composite/sesssetup.c
+++ b/source4/libcli/smb_composite/sesssetup.c
@@ -466,28 +466,12 @@ static NTSTATUS session_setup_old(struct composite_context *c,
return (*req)->status;
}
-
-/*
- Modern, all singing, all dancing extended security (and possibly SPNEGO) request
-*/
-static NTSTATUS session_setup_spnego(struct composite_context *c,
- struct smbcli_session *session,
- struct smb_composite_sesssetup *io,
- struct smbcli_request **req)
+static NTSTATUS session_setup_spnego_restart(struct composite_context *c,
+ struct smbcli_session *session,
+ struct smb_composite_sesssetup *io)
{
struct sesssetup_state *state = talloc_get_type(c->private_data, struct sesssetup_state);
NTSTATUS status;
- const char *chosen_oid = NULL;
-
- state->setup.spnego.level = RAW_SESSSETUP_SPNEGO;
- state->setup.spnego.in.bufsize = session->transport->options.max_xmit;
- state->setup.spnego.in.mpx_max = session->transport->options.max_mux;
- state->setup.spnego.in.vc_num = 1;
- state->setup.spnego.in.sesskey = io->in.sesskey;
- state->setup.spnego.in.capabilities = io->in.capabilities;
- state->setup.spnego.in.os = "Unix";
- state->setup.spnego.in.lanman = talloc_asprintf(state, "Samba %s", SAMBA_VERSION_STRING);
- state->setup.spnego.in.workgroup = io->in.workgroup;
status = gensec_client_start(session, &session->gensec,
io->in.gensec_settings);
@@ -553,9 +537,43 @@ static NTSTATUS session_setup_spnego(struct composite_context *c,
gensec_get_name_by_oid(session->gensec,
state->chosen_oid),
nt_errstr(status)));
+ return status;
}
}
+ state->gensec_status = NT_STATUS_MORE_PROCESSING_REQUIRED;
+ state->remote_status = NT_STATUS_MORE_PROCESSING_REQUIRED;
+ return NT_STATUS_OK;
+}
+
+/*
+ Modern, all singing, all dancing extended security (and possibly SPNEGO) request
+*/
+static NTSTATUS session_setup_spnego(struct composite_context *c,
+ struct smbcli_session *session,
+ struct smb_composite_sesssetup *io,
+ struct smbcli_request **req)
+{
+ struct sesssetup_state *state = talloc_get_type(c->private_data, struct sesssetup_state);
+ NTSTATUS status;
+
+ status = session_setup_spnego_restart(c, session, io);
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(1, ("session_setup_spnego_restart() failed: %s\n",
+ nt_errstr(status)));
+ return status;
+ }
+
+ state->setup.spnego.level = RAW_SESSSETUP_SPNEGO;
+ state->setup.spnego.in.bufsize = session->transport->options.max_xmit;
+ state->setup.spnego.in.mpx_max = session->transport->options.max_mux;
+ state->setup.spnego.in.vc_num = 1;
+ state->setup.spnego.in.sesskey = io->in.sesskey;
+ state->setup.spnego.in.capabilities = io->in.capabilities;
+ state->setup.spnego.in.os = "Unix";
+ state->setup.spnego.in.lanman = talloc_asprintf(state, "Samba %s", SAMBA_VERSION_STRING);
+ state->setup.spnego.in.workgroup = io->in.workgroup;
+
status = gensec_update_ev(session->gensec, state,
c->event_ctx,
state->setup.spnego.out.secblob,