From c1bffac7e5f6aec7020bc2ce20915df7f4ce9e38 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Tue, 18 Feb 2014 09:50:16 +0100 Subject: [PATCH] Revert "libwbclient4: Remove unused composite-based functions" This reverts commit ba5f02739cb454d2312f73f643f2c119e090ac5e. Signed-off-by: Volker Lendecke Reviewed-by: Andreas Schneider --- source4/libcli/wbclient/wbclient.c | 142 +++++++++++++++++++++++++++++++++++++ source4/libcli/wbclient/wbclient.h | 16 +++++ 2 files changed, 158 insertions(+) diff --git a/source4/libcli/wbclient/wbclient.c b/source4/libcli/wbclient/wbclient.c index 3f8003bbbaf..8cfe117d0b1 100644 --- a/source4/libcli/wbclient/wbclient.c +++ b/source4/libcli/wbclient/wbclient.c @@ -57,6 +57,148 @@ struct wbc_context *wbc_init(TALLOC_CTX *mem_ctx, return ctx; } +struct wbc_idmap_state { + struct composite_context *ctx; + struct winbind_get_idmap *req; + struct id_map *ids; +}; + +static void sids_to_xids_recv_ids(struct tevent_req *subreq); + +struct composite_context *wbc_sids_to_xids_send(struct wbc_context *wbc_ctx, + TALLOC_CTX *mem_ctx, + uint32_t count, + struct id_map *ids) +{ + struct composite_context *ctx; + struct wbc_idmap_state *state; + struct tevent_req *subreq; + + DEBUG(5, ("wbc_sids_to_xids called\n")); + + ctx = composite_create(mem_ctx, wbc_ctx->event_ctx); + if (ctx == NULL) return NULL; + + state = talloc(ctx, struct wbc_idmap_state); + if (composite_nomem(state, ctx)) return ctx; + ctx->private_data = state; + + state->req = talloc(state, struct winbind_get_idmap); + if (composite_nomem(state->req, ctx)) return ctx; + + state->req->in.count = count; + state->req->in.level = WINBIND_IDMAP_LEVEL_SIDS_TO_XIDS; + state->req->in.ids = ids; + state->ctx = ctx; + + subreq = dcerpc_winbind_get_idmap_r_send(state, + wbc_ctx->event_ctx, + wbc_ctx->irpc_handle, + state->req); + if (composite_nomem(subreq, ctx)) return ctx; + + tevent_req_set_callback(subreq, sids_to_xids_recv_ids, state); + + return ctx; +} + +static void sids_to_xids_recv_ids(struct tevent_req *subreq) +{ + struct wbc_idmap_state *state = + tevent_req_callback_data(subreq, + struct wbc_idmap_state); + + state->ctx->status = dcerpc_winbind_get_idmap_r_recv(subreq, state); + TALLOC_FREE(subreq); + if (!composite_is_ok(state->ctx)) return; + + state->ids = state->req->out.ids; + composite_done(state->ctx); +} + +NTSTATUS wbc_sids_to_xids_recv(struct composite_context *ctx, + struct id_map **ids) +{ + NTSTATUS status = composite_wait(ctx); + DEBUG(5, ("wbc_sids_to_xids_recv called\n")); + if (NT_STATUS_IS_OK(status)) { + struct wbc_idmap_state *state = talloc_get_type_abort( + ctx->private_data, + struct wbc_idmap_state); + *ids = state->ids; + } + + return status; +} + +static void xids_to_sids_recv_ids(struct tevent_req *subreq); + +struct composite_context *wbc_xids_to_sids_send(struct wbc_context *wbc_ctx, + TALLOC_CTX *mem_ctx, + uint32_t count, + struct id_map *ids) +{ + struct composite_context *ctx; + struct wbc_idmap_state *state; + struct tevent_req *subreq; + + DEBUG(5, ("wbc_xids_to_sids called\n")); + + ctx = composite_create(mem_ctx, wbc_ctx->event_ctx); + if (ctx == NULL) return NULL; + + state = talloc(ctx, struct wbc_idmap_state); + if (composite_nomem(state, ctx)) return ctx; + ctx->private_data = state; + + state->req = talloc(state, struct winbind_get_idmap); + if (composite_nomem(state->req, ctx)) return ctx; + + state->req->in.count = count; + state->req->in.level = WINBIND_IDMAP_LEVEL_XIDS_TO_SIDS; + state->req->in.ids = ids; + state->ctx = ctx; + + subreq = dcerpc_winbind_get_idmap_r_send(state, + wbc_ctx->event_ctx, + wbc_ctx->irpc_handle, + state->req); + if (composite_nomem(subreq, ctx)) return ctx; + + tevent_req_set_callback(subreq, xids_to_sids_recv_ids, state); + + return ctx; +} + +static void xids_to_sids_recv_ids(struct tevent_req *subreq) +{ + struct wbc_idmap_state *state = + tevent_req_callback_data(subreq, + struct wbc_idmap_state); + + state->ctx->status = dcerpc_winbind_get_idmap_r_recv(subreq, state); + TALLOC_FREE(subreq); + if (!composite_is_ok(state->ctx)) return; + + state->ids = state->req->out.ids; + composite_done(state->ctx); +} + +NTSTATUS wbc_xids_to_sids_recv(struct composite_context *ctx, + struct id_map **ids) +{ + NTSTATUS status = composite_wait(ctx); + DEBUG(5, ("wbc_xids_to_sids_recv called\n")); + if (NT_STATUS_IS_OK(status)) { + struct wbc_idmap_state *state = talloc_get_type_abort( + ctx->private_data, + struct wbc_idmap_state); + *ids = state->ids; + } + + return status; +} + static int wb_simple_trans(struct tevent_context *ev, int fd, struct winbindd_request *wb_req, TALLOC_CTX *mem_ctx, diff --git a/source4/libcli/wbclient/wbclient.h b/source4/libcli/wbclient/wbclient.h index ba15a7c06df..33a21f318d2 100644 --- a/source4/libcli/wbclient/wbclient.h +++ b/source4/libcli/wbclient/wbclient.h @@ -31,8 +31,24 @@ struct wbc_context *wbc_init(TALLOC_CTX *mem_ctx, struct imessaging_context *msg_ctx, struct tevent_context *event_ctx); +struct composite_context *wbc_sids_to_xids_send(struct wbc_context *wbc_ctx, + TALLOC_CTX *mem_ctx, + uint32_t count, + struct id_map *ids); + +NTSTATUS wbc_sids_to_xids_recv(struct composite_context *ctx, + struct id_map **ids); + NTSTATUS wbc_sids_to_xids(struct tevent_context *ev, struct id_map *ids, uint32_t count); +struct composite_context *wbc_xids_to_sids_send(struct wbc_context *wbc_ctx, + TALLOC_CTX *mem_ctx, + uint32_t count, + struct id_map *ids); + +NTSTATUS wbc_xids_to_sids_recv(struct composite_context *ctx, + struct id_map **ids); + NTSTATUS wbc_xids_to_sids(struct tevent_context *ev, struct id_map *ids, uint32_t count); -- 2.11.4.GIT