Convert async_domain_request to wb_domain_request_send
authorVolker Lendecke <vl@samba.org>
Sat, 16 May 2009 11:25:52 +0000 (13:25 +0200)
committerVolker Lendecke <vl@samba.org>
Sun, 14 Jun 2009 09:25:47 +0000 (11:25 +0200)
source3/winbindd/winbindd_dual.c

index 1a0d0688ae86a24fbc769160f9001d75b2b3d645..85286588321101659cefd8f85163aef2070bcecf 100644 (file)
@@ -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)