summaryrefslogtreecommitdiffstats
path: root/source3/winbindd/winbindd.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/winbindd/winbindd.c')
-rw-r--r--source3/winbindd/winbindd.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c
index 6863e93415f..4b6ebd2c42e 100644
--- a/source3/winbindd/winbindd.c
+++ b/source3/winbindd/winbindd.c
@@ -519,8 +519,8 @@ struct winbindd_async_dispatch_table {
struct tevent_req *(*send_req)(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct winbindd_request *request);
- NTSTATUS (*recv_req)(struct tevent_req *req, TALLOC_CTX *mem_ctx,
- struct winbindd_response **presp);
+ NTSTATUS (*recv_req)(struct tevent_req *req,
+ struct winbindd_response *presp);
};
static struct winbindd_async_dispatch_table async_nonpriv_table[] = {
@@ -602,17 +602,22 @@ static void wb_request_done(struct tevent_req *req)
struct winbindd_cli_state *state = tevent_req_callback_data(
req, struct winbindd_cli_state);
NTSTATUS status;
- struct winbindd_response *response;
- status = state->recv_fn(req, state->mem_ctx, &response);
+ state->response = talloc_zero(state, struct winbindd_response);
+ if (state->response == NULL) {
+ remove_client(state);
+ return;
+ }
+ state->response->result = WINBINDD_PENDING;
+ state->response->length = sizeof(struct winbindd_response);
+
+ status = state->recv_fn(req, state->response);
TALLOC_FREE(req);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(10, ("returning %s\n", nt_errstr(status)));
request_error(state);
+ return;
}
- state->response = response;
- state->response->result = WINBINDD_PENDING;
- state->response->length = sizeof(struct winbindd_response);
request_ok(state);
}