summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2008-04-11 14:12:34 +1000
committerAndrew Tridgell <tridge@samba.org>2008-04-11 14:12:34 +1000
commit3d01c8eb6d4a9da9dc3dde9edb4057b534655e1d (patch)
tree3508275f576a4fe8e5eaa788c57b7b123ba7066b
parent8ed6f6d5a825c8b0e8d66d30877a91a96fe6e7a4 (diff)
downloadsamba-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.c10
-rw-r--r--source4/winbind/wb_xids2sids.c10
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;
}