diff options
author | Andrew Tridgell <tridge@samba.org> | 2008-04-11 14:12:34 +1000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2008-04-11 14:12:34 +1000 |
commit | 3d01c8eb6d4a9da9dc3dde9edb4057b534655e1d (patch) | |
tree | 3508275f576a4fe8e5eaa788c57b7b123ba7066b | |
parent | 8ed6f6d5a825c8b0e8d66d30877a91a96fe6e7a4 (diff) | |
download | samba-3d01c8eb6d4a9da9dc3dde9edb4057b534655e1d.tar.gz samba-3d01c8eb6d4a9da9dc3dde9edb4057b534655e1d.tar.bz2 samba-3d01c8eb6d4a9da9dc3dde9edb4057b534655e1d.zip |
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)
-rw-r--r-- | source4/winbind/wb_sids2xids.c | 10 | ||||
-rw-r--r-- | source4/winbind/wb_xids2sids.c | 10 |
2 files changed, 8 insertions, 12 deletions
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; } |