diff options
-rw-r--r-- | source4/winbind/wb_sam_logon.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/source4/winbind/wb_sam_logon.c b/source4/winbind/wb_sam_logon.c index ec449b8f5b..d12a7f1b1f 100644 --- a/source4/winbind/wb_sam_logon.c +++ b/source4/winbind/wb_sam_logon.c @@ -42,7 +42,7 @@ struct wb_sam_logon_state { }; static void wb_sam_logon_recv_domain(struct composite_context *ctx); -static void wb_sam_logon_recv_samlogon(struct rpc_request *req); +static void wb_sam_logon_recv_samlogon(struct tevent_req *subreq); /* Find the connection to the DC (or find an existing connection) @@ -77,8 +77,8 @@ static void wb_sam_logon_recv_domain(struct composite_context *creq) { struct wb_sam_logon_state *s = talloc_get_type(creq->async.private_data, struct wb_sam_logon_state); - struct rpc_request *req; struct wbsrv_domain *domain; + struct tevent_req *subreq; s->ctx->status = wb_sid2domain_recv(creq, &domain); if (!composite_is_ok(s->ctx)) return; @@ -112,8 +112,12 @@ static void wb_sam_logon_recv_domain(struct composite_context *creq) s->r_mem_ctx = talloc_new(s); if (composite_nomem(s->r_mem_ctx, s->ctx)) return; - req = dcerpc_netr_LogonSamLogon_send(domain->netlogon_pipe, s->r_mem_ctx, &s->r); - composite_continue_rpc(s->ctx, req, wb_sam_logon_recv_samlogon, s); + subreq = dcerpc_netr_LogonSamLogon_r_send(s, + s->ctx->event_ctx, + domain->netlogon_pipe->binding_handle, + &s->r); + if (composite_nomem(subreq, s->ctx)) return; + tevent_req_set_callback(subreq, wb_sam_logon_recv_samlogon, s); } /* @@ -121,12 +125,13 @@ static void wb_sam_logon_recv_domain(struct composite_context *creq) Check the SamLogon reply and decrypt the session keys */ -static void wb_sam_logon_recv_samlogon(struct rpc_request *req) +static void wb_sam_logon_recv_samlogon(struct tevent_req *subreq) { - struct wb_sam_logon_state *s = talloc_get_type(req->async.private_data, + struct wb_sam_logon_state *s = tevent_req_callback_data(subreq, struct wb_sam_logon_state); - s->ctx->status = dcerpc_netr_LogonSamLogon_recv(req); + s->ctx->status = dcerpc_netr_LogonSamLogon_r_recv(subreq, s->r_mem_ctx); + TALLOC_FREE(subreq); if (!composite_is_ok(s->ctx)) return; s->ctx->status = s->r.out.result; |