X-Git-Url: http://git.samba.org/?p=samba.git;a=blobdiff_plain;f=source4%2Fwinbind%2Fwb_xids2sids.c;h=aeec2ee5be6202da7a15576c4df3f2df734f8b89;hp=1be394d276a2d8f329ed1639e7e077f3ee1ca37e;hb=b19750dbe97d57d2c0d6d938d10efae48825b959;hpb=6ae76e5cdc0c87eb0ff46f3f1818be0cf70a5a75 diff --git a/source4/winbind/wb_xids2sids.c b/source4/winbind/wb_xids2sids.c index 1be394d276a..aeec2ee5be6 100644 --- a/source4/winbind/wb_xids2sids.c +++ b/source4/winbind/wb_xids2sids.c @@ -23,23 +23,22 @@ #include "libcli/composite/composite.h" #include "winbind/wb_server.h" #include "smbd/service_task.h" -#include "winbind/wb_helper.h" -#include "libcli/security/proto.h" -#include "winbind/idmap.h" struct xids2sids_state { struct composite_context *ctx; struct wbsrv_service *service; - struct id_mapping *ids; + struct id_map *ids; int count; }; struct composite_context *wb_xids2sids_send(TALLOC_CTX *mem_ctx, struct wbsrv_service *service, - int count, struct id_mapping *ids) + unsigned int count, struct id_map *ids) { struct composite_context *result; struct xids2sids_state *state; + struct id_map **pointer_array; + unsigned int i; DEBUG(5, ("wb_xids2sids_send called\n")); @@ -55,8 +54,19 @@ struct composite_context *wb_xids2sids_send(TALLOC_CTX *mem_ctx, state->count = count; state->ids = ids; + /* We need to convert between calling conventions here - the + * values are filled in by reference, so we just need to + * provide pointers to them */ + pointer_array = talloc_array(state, struct id_map *, count+1); + if (composite_nomem(pointer_array, result)) return result; + + for (i=0; i < count; i++) { + pointer_array[i] = &ids[i]; + } + pointer_array[i] = NULL; + state->ctx->status = idmap_xids_to_sids(service->idmap_ctx, mem_ctx, - count, state->ids); + pointer_array); if (!composite_is_ok(state->ctx)) return result; composite_done(state->ctx); @@ -64,18 +74,19 @@ struct composite_context *wb_xids2sids_send(TALLOC_CTX *mem_ctx, } NTSTATUS wb_xids2sids_recv(struct composite_context *ctx, - struct id_mapping **ids) + struct id_map **ids) { NTSTATUS status = composite_wait(ctx); + struct xids2sids_state *state = talloc_get_type(ctx->private_data, + struct xids2sids_state); DEBUG(5, ("wb_xids2sids_recv called.\n")); - if (NT_STATUS_IS_OK(status)) { - struct xids2sids_state *state = - talloc_get_type(ctx->private_data, - struct xids2sids_state); - *ids = state->ids; - } + /* We don't have to mess with pointer_array on the way out, as + * the results are filled into the pointers the caller + * supplied */ + *ids = state->ids; + talloc_free(ctx); return status; }