summaryrefslogtreecommitdiff
path: root/source3/winbindd
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2009-07-31 16:16:24 +0200
committerVolker Lendecke <vl@samba.org>2009-07-31 17:28:53 +0200
commitf511ccbc429aacff3882e12366bae2aebf9d768a (patch)
treecb3af35ac3cecb8668330c1577673739e37b259b /source3/winbindd
parenta3bcbd177537e5da437974e64bbd07d88c087fa2 (diff)
downloadsamba-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/winbindd')
-rw-r--r--source3/winbindd/wb_ping.c10
-rw-r--r--source3/winbindd/winbindd.c19
-rw-r--r--source3/winbindd/winbindd.h4
-rw-r--r--source3/winbindd/winbindd_proto.h4
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);