From 3d01c8eb6d4a9da9dc3dde9edb4057b534655e1d Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 11 Apr 2008 14:12:34 +1000 Subject: Fixed a crash bug in unixuid module on failed ID mapping We need to intialise *ids regardless of the status of the call, as the IDL specifies that the out[] array always exists. If we don't initialise out then we get a segv when a id mapping fails. This still doesn't explain why the idmapping is failing, but at least the client now gets NT_STATUS_NONE_MAPPED rather than a crashed server. (This used to be commit 4449ce381aca25e7f510a2f24b43c3a81e870032) --- source4/winbind/wb_sids2xids.c | 10 ++++------ source4/winbind/wb_xids2sids.c | 10 ++++------ 2 files changed, 8 insertions(+), 12 deletions(-) (limited to 'source4/winbind') diff --git a/source4/winbind/wb_sids2xids.c b/source4/winbind/wb_sids2xids.c index 302b915ff5..6b89caf465 100644 --- a/source4/winbind/wb_sids2xids.c +++ b/source4/winbind/wb_sids2xids.c @@ -67,15 +67,13 @@ NTSTATUS wb_sids2xids_recv(struct composite_context *ctx, struct id_mapping **ids) { NTSTATUS status = composite_wait(ctx); + struct sids2xids_state *state = talloc_get_type(ctx->private_data, + struct sids2xids_state); DEBUG(5, ("wb_sids2xids_recv called\n")); - if (NT_STATUS_IS_OK(status)) { - struct sids2xids_state *state = - talloc_get_type(ctx->private_data, - struct sids2xids_state); - *ids = state->ids; - } + *ids = state->ids; + talloc_free(ctx); return status; } diff --git a/source4/winbind/wb_xids2sids.c b/source4/winbind/wb_xids2sids.c index 1be394d276..a1cf2667ff 100644 --- a/source4/winbind/wb_xids2sids.c +++ b/source4/winbind/wb_xids2sids.c @@ -67,15 +67,13 @@ NTSTATUS wb_xids2sids_recv(struct composite_context *ctx, struct id_mapping **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; - } + *ids = state->ids; + talloc_free(ctx); return status; } -- cgit