From 62c67d65056604e2a2969d9901978c0b5326978b Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 12 Aug 2004 03:23:19 +0000 Subject: r1747: don't segfault when the spnego mech only use one call from the client to finish metze (This used to be commit ddac5e46d42d3b2daae10107b1bcb3b138de7474) --- source4/smb_server/sesssetup.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) (limited to 'source4') diff --git a/source4/smb_server/sesssetup.c b/source4/smb_server/sesssetup.c index 39aadf8778..14cb1be067 100644 --- a/source4/smb_server/sesssetup.c +++ b/source4/smb_server/sesssetup.c @@ -212,25 +212,35 @@ static NTSTATUS sesssetup_spnego(struct smbsrv_request *req, union smb_sesssetup } + if (!smb_sess) { + vuid = smbsrv_register_session(req->smb_conn, session_info, gensec_ctx); + if (vuid == UID_FIELD_INVALID) { + return NT_STATUS_ACCESS_DENIED; + } + smb_sess = smbsrv_session_find(req->smb_conn, vuid); + if (!smb_sess) { + return NT_STATUS_FOOBAR; + } + } + if (NT_STATUS_IS_OK(status)) { DATA_BLOB session_key; DATA_BLOB null_data_blob = data_blob(NULL, 0); + status = gensec_session_info(smb_sess->gensec_ctx, &smb_sess->session_info); - if (NT_STATUS_IS_OK(gensec_session_key(smb_sess->gensec_ctx, - &session_key))) { + if (!NT_STATUS_IS_OK(status)) { + return status; + } + + status = gensec_session_key(smb_sess->gensec_ctx, + &session_key); + if (NT_STATUS_IS_OK(status)) { srv_setup_signing(req->smb_conn, &session_key, &null_data_blob); req->seq_num = 0; req->smb_conn->signing.next_seq_num = 2; } } - if (!smb_sess) { - vuid = smbsrv_register_session(req->smb_conn, session_info, gensec_ctx); - if (vuid == UID_FIELD_INVALID) { - return NT_STATUS_ACCESS_DENIED; - } - } - sess->spnego.out.action = 0; sess->spnego.out.vuid = vuid; sesssetup_common_strings(req, -- cgit