]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s4:libcli/smb_composite: move gensec_update_ev() out of session_setup_spnego()
authorStefan Metzmacher <metze@samba.org>
Mon, 15 May 2017 22:25:45 +0000 (00:25 +0200)
committerStefan Metzmacher <metze@samba.org>
Sat, 17 Jun 2017 14:48:11 +0000 (16:48 +0200)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
source4/libcli/smb_composite/sesssetup.c

index 6d646291bd5dbd7e9d5eaca245dcaf4e1436eef2..93592004a0a863f881572126b4a726e4875ff109 100644 (file)
@@ -173,6 +173,21 @@ static void request_handler(struct smbcli_request *req)
                                        return;
                                }
 
+                               nt_status = gensec_update_ev(session->gensec, state,
+                                                            c->event_ctx,
+                                                            state->setup.spnego.out.secblob,
+                                                            &state->setup.spnego.in.secblob);
+                               if (GENSEC_UPDATE_IS_NTERROR(nt_status)) {
+                                       DEBUG(1, ("Failed initial gensec_update with mechanism %s: %s\n",
+                                                 gensec_get_name_by_oid(session->gensec,
+                                                                        state->chosen_oid),
+                                                 nt_errstr(nt_status)));
+                                       c->status = nt_status;
+                                       composite_error(c, c->status);
+                                       return;
+                               }
+                               state->gensec_status = nt_status;
+
                                nt_status = session_setup_spnego(c, session, 
                                                                      state->io, 
                                                                      &state->req);
@@ -567,7 +582,6 @@ static NTSTATUS session_setup_spnego(struct composite_context *c,
                                     struct smbcli_request **req)
 {
        struct sesssetup_state *state = talloc_get_type(c->private_data, struct sesssetup_state);
-       NTSTATUS status;
 
        state->setup.spnego.level           = RAW_SESSSETUP_SPNEGO;
        state->setup.spnego.in.bufsize      = session->transport->options.max_xmit;
@@ -579,21 +593,6 @@ static NTSTATUS session_setup_spnego(struct composite_context *c,
        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,
-                                 &state->setup.spnego.in.secblob);
-
-       if (!NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED) && 
-           !NT_STATUS_IS_OK(status)) {
-               DEBUG(1, ("Failed initial gensec_update with mechanism %s: %s\n",
-                         gensec_get_name_by_oid(session->gensec,
-                                                state->chosen_oid),
-                         nt_errstr(status)));
-               return status;
-       }
-       state->gensec_status = status;
-
        *req = smb_raw_sesssetup_send(session, &state->setup);
        if (!*req) {
                return NT_STATUS_NO_MEMORY;
@@ -658,6 +657,21 @@ struct composite_context *smb_composite_sesssetup_send(struct smbcli_session *se
                        return c;
                }
 
+               status = gensec_update_ev(session->gensec, state,
+                                         c->event_ctx,
+                                         state->setup.spnego.out.secblob,
+                                         &state->setup.spnego.in.secblob);
+               if (GENSEC_UPDATE_IS_NTERROR(status)) {
+                       DEBUG(1, ("Failed initial gensec_update with mechanism %s: %s\n",
+                                 gensec_get_name_by_oid(session->gensec,
+                                                        state->chosen_oid),
+                                 nt_errstr(status)));
+                       c->status = status;
+                       composite_error(c, c->status);
+                       return c;
+               }
+               state->gensec_status = status;
+
                status = session_setup_spnego(c, session, io, &state->req);
        }