From 58997a7401d0f7c0a6098501910f8146fc62eaf4 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 24 Jun 2016 11:40:10 -0700 Subject: [PATCH] s3: tldap: Remove asynchronous calls to gensec_update_send()/_recv() as for the spnego backend they're synchronous anyway. This should prevent nested event loops, and won't make the code performance worse anyway. Signed-off-by: Jeremy Allison --- source3/lib/tldap_gensec_bind.c | 35 +++++++++++++---------------------- 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/source3/lib/tldap_gensec_bind.c b/source3/lib/tldap_gensec_bind.c index 07f7956..9f6e8ae 100644 --- a/source3/lib/tldap_gensec_bind.c +++ b/source3/lib/tldap_gensec_bind.c @@ -45,7 +45,8 @@ struct tldap_gensec_bind_state { }; static void tldap_gensec_bind_got_mechs(struct tevent_req *subreq); -static void tldap_gensec_update_done(struct tevent_req *subreq); +static void tldap_gensec_update_done(struct tldap_gensec_bind_state *state, + struct tevent_req *subreq); static void tldap_gensec_bind_done(struct tevent_req *subreq); struct tevent_req *tldap_gensec_bind_send( @@ -215,25 +216,16 @@ static void tldap_gensec_bind_got_mechs(struct tevent_req *subreq) return; } - subreq = gensec_update_send(state, state->ev, state->gensec, - data_blob_null); - if (tevent_req_nomem(subreq, req)) { - return; - } - tevent_req_set_callback(subreq, tldap_gensec_update_done, req); + state->gensec_status = gensec_update(state->gensec, state, + data_blob_null, + &state->gensec_output); + tldap_gensec_update_done(state, req); } -static void tldap_gensec_update_done(struct tevent_req *subreq) +static void tldap_gensec_update_done(struct tldap_gensec_bind_state *state, + struct tevent_req *req) { - struct tevent_req *req = tevent_req_callback_data( - subreq, struct tevent_req); - struct tldap_gensec_bind_state *state = tevent_req_data( - req, struct tldap_gensec_bind_state); - - state->gensec_status = gensec_update_recv( - subreq, state, &state->gensec_output); - - TALLOC_FREE(subreq); + struct tevent_req *subreq; if (!NT_STATUS_IS_OK(state->gensec_status) && !NT_STATUS_EQUAL(state->gensec_status, @@ -289,11 +281,10 @@ static void tldap_gensec_bind_done(struct tevent_req *subreq) return; } - subreq = gensec_update_send(state, state->ev, state->gensec, input); - if (tevent_req_nomem(subreq, req)) { - return; - } - tevent_req_set_callback(subreq, tldap_gensec_update_done, req); + state->gensec_status = gensec_update(state->gensec, state, + input, + &state->gensec_output); + tldap_gensec_update_done(state, req); } TLDAPRC tldap_gensec_bind_recv(struct tevent_req *req) -- 2.7.4