diff options
author | Volker Lendecke <vl@samba.org> | 2009-07-31 16:16:24 +0200 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2009-07-31 17:28:53 +0200 |
commit | f511ccbc429aacff3882e12366bae2aebf9d768a (patch) | |
tree | cb3af35ac3cecb8668330c1577673739e37b259b /source3 | |
parent | a3bcbd177537e5da437974e64bbd07d88c087fa2 (diff) | |
download | samba-f511ccbc429aacff3882e12366bae2aebf9d768a.tar.gz samba-f511ccbc429aacff3882e12366bae2aebf9d768a.tar.bz2 samba-f511ccbc429aacff3882e12366bae2aebf9d768a.zip |
Slightly restructure the async winbind request calling convention
The main loop now allocates the response, this has to be done everywhere
Diffstat (limited to 'source3')
-rw-r--r-- | source3/winbindd/wb_ping.c | 10 | ||||
-rw-r--r-- | source3/winbindd/winbindd.c | 19 | ||||
-rw-r--r-- | source3/winbindd/winbindd.h | 4 | ||||
-rw-r--r-- | source3/winbindd/winbindd_proto.h | 4 |
4 files changed, 17 insertions, 20 deletions
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); |