summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/winbindd/winbindd_dual.c42
1 files changed, 22 insertions, 20 deletions
diff --git a/source3/winbindd/winbindd_dual.c b/source3/winbindd/winbindd_dual.c
index 1a0d0688ae..8528658832 100644
--- a/source3/winbindd/winbindd_dual.c
+++ b/source3/winbindd/winbindd_dual.c
@@ -455,7 +455,6 @@ static void async_request_done(struct tevent_req *req)
}
struct domain_request_state {
- TALLOC_CTX *mem_ctx;
struct winbindd_domain *domain;
struct winbindd_request *request;
struct winbindd_response *response;
@@ -463,7 +462,7 @@ struct domain_request_state {
void *private_data_data;
};
-static void domain_init_recv(void *private_data_data, bool success);
+static void async_domain_request_done(struct tevent_req *req);
void async_domain_request(TALLOC_CTX *mem_ctx,
struct winbindd_domain *domain,
@@ -472,14 +471,9 @@ void async_domain_request(TALLOC_CTX *mem_ctx,
void (*continuation)(void *private_data_data, bool success),
void *private_data_data)
{
+ struct tevent_req *subreq;
struct domain_request_state *state;
- if (domain->initialized) {
- async_request(mem_ctx, &domain->child, request, response,
- continuation, private_data_data);
- return;
- }
-
state = TALLOC_P(mem_ctx, struct domain_request_state);
if (state == NULL) {
DEBUG(0, ("talloc failed\n"));
@@ -487,30 +481,38 @@ void async_domain_request(TALLOC_CTX *mem_ctx,
return;
}
- state->mem_ctx = mem_ctx;
state->domain = domain;
state->request = request;
state->response = response;
state->continuation = continuation;
state->private_data_data = private_data_data;
- init_child_connection(domain, domain_init_recv, state);
+ subreq = wb_domain_request_send(state, winbind_event_context(),
+ domain, request);
+ if (subreq == NULL) {
+ DEBUG(5, ("wb_domain_request_send failed\n"));
+ continuation(private_data_data, false);
+ return;
+ }
+ tevent_req_set_callback(subreq, async_domain_request_done, state);
}
-static void domain_init_recv(void *private_data_data, bool success)
+static void async_domain_request_done(struct tevent_req *req)
{
- struct domain_request_state *state =
- talloc_get_type_abort(private_data_data, struct domain_request_state);
+ struct domain_request_state *state = tevent_req_callback_data(
+ req, struct domain_request_state);
+ struct winbindd_response *response;
+ int ret, err;
- if (!success) {
- DEBUG(5, ("Domain init returned an error\n"));
- state->continuation(state->private_data_data, False);
+ ret = wb_domain_request_recv(req, state, &response, &err);
+ TALLOC_FREE(req);
+ if (ret == -1) {
+ DEBUG(5, ("wb_domain_request returned %s\n", strerror(errno)));
+ state->continuation(state->private_data_data, false);
return;
}
-
- async_request(state->mem_ctx, &state->domain->child,
- state->request, state->response,
- state->continuation, state->private_data_data);
+ *(state->response) = *response;
+ state->continuation(state->private_data_data, true);
}
static void recvfrom_child(void *private_data_data, bool success)