From f511ccbc429aacff3882e12366bae2aebf9d768a Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Fri, 31 Jul 2009 16:16:24 +0200 Subject: Slightly restructure the async winbind request calling convention The main loop now allocates the response, this has to be done everywhere --- source3/winbindd/wb_ping.c | 10 +--------- source3/winbindd/winbindd.c | 19 ++++++++++++------- source3/winbindd/winbindd.h | 4 ++-- source3/winbindd/winbindd_proto.h | 4 ++-- 4 files changed, 17 insertions(+), 20 deletions(-) (limited to 'source3/winbindd') diff --git a/source3/winbindd/wb_ping.c b/source3/winbindd/wb_ping.c index 56ecc6671c..1201398437 100644 --- a/source3/winbindd/wb_ping.c +++ b/source3/winbindd/wb_ping.c @@ -39,15 +39,7 @@ struct tevent_req *wb_ping_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev, return req; } -NTSTATUS wb_ping_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx, - struct winbindd_response **presp) +NTSTATUS wb_ping_recv(struct tevent_req *req, struct winbindd_response *presp) { - struct winbindd_response *resp; - - resp = talloc_zero(mem_ctx, struct winbindd_response); - if (resp == NULL) { - return NT_STATUS_NO_MEMORY; - } - *presp = resp; return NT_STATUS_OK; } diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c index 6863e93415..4b6ebd2c42 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); } diff --git a/source3/winbindd/winbindd.h b/source3/winbindd/winbindd.h index 804c0afa5d..e6bf8a5e83 100644 --- a/source3/winbindd/winbindd.h +++ b/source3/winbindd/winbindd.h @@ -55,8 +55,8 @@ struct winbindd_cli_state { bool privileged; /* Is the client 'privileged' */ TALLOC_CTX *mem_ctx; /* memory per request */ - NTSTATUS (*recv_fn)(struct tevent_req *req, TALLOC_CTX *mem_ctx, - struct winbindd_response **presp); + NTSTATUS (*recv_fn)(struct tevent_req *req, + struct winbindd_response *presp); struct winbindd_request *request; /* Request from client */ struct tevent_queue *out_queue; struct winbindd_response *response; /* Respose to client */ diff --git a/source3/winbindd/winbindd_proto.h b/source3/winbindd/winbindd_proto.h index 35863e930e..03e254cbb9 100644 --- a/source3/winbindd/winbindd_proto.h +++ b/source3/winbindd/winbindd_proto.h @@ -588,8 +588,8 @@ void winbindd_wins_byname(struct winbindd_cli_state *state); struct tevent_req *wb_ping_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev, struct winbindd_request *request); -NTSTATUS wb_ping_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx, - struct winbindd_response **presp); +NTSTATUS wb_ping_recv(struct tevent_req *req, + struct winbindd_response *resp); enum winbindd_result winbindd_dual_ping(struct winbindd_domain *domain, struct winbindd_cli_state *state); -- cgit