From 8b41be0c7080edaf9fb33e583c66f2ef50a91643 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 29 Sep 2008 11:24:00 -0700 Subject: [PATCH] fixed segv on startup with trusted domains With some setups, idmap_tdb2_allocate_id can be called before the allocate backend is initialised, leading to a segv. This change ensures that the db is opened in all paths that use it (cherry picked from commit 3a2a70996919a7ee08fea40b8e5f1cf2e3bd7caf) --- source/winbindd/idmap_tdb2.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/source/winbindd/idmap_tdb2.c b/source/winbindd/idmap_tdb2.c index ab89e615f78..ffb10b4d346 100644 --- a/source/winbindd/idmap_tdb2.c +++ b/source/winbindd/idmap_tdb2.c @@ -235,7 +235,9 @@ static NTSTATUS idmap_tdb2_allocate_id(struct unixid *xid) NTSTATUS status; status = idmap_tdb2_open_perm_db(); - NT_STATUS_NOT_OK_RETURN(status); + if (!NT_STATUS_IS_OK(status)) { + return status; + } /* Get current high water mark */ switch (xid->type) { @@ -297,6 +299,12 @@ static NTSTATUS idmap_tdb2_get_hwm(struct unixid *xid) const char *hwmtype; uint32_t hwm; uint32_t high_hwm; + NTSTATUS status; + + status = idmap_tdb2_open_perm_db(); + if (!NT_STATUS_IS_OK(status)) { + return status; + } /* Get current high water mark */ switch (xid->type) { @@ -552,6 +560,12 @@ static NTSTATUS idmap_tdb2_id_to_sid(struct idmap_tdb2_context *ctx, struct id_m NTSTATUS ret; TDB_DATA data; char *keystr; + NTSTATUS status; + + status = idmap_tdb2_open_perm_db(); + if (!NT_STATUS_IS_OK(status)) { + return status; + } if (!ctx || !map) { return NT_STATUS_INVALID_PARAMETER; @@ -647,6 +661,12 @@ static NTSTATUS idmap_tdb2_sid_to_id(struct idmap_tdb2_context *ctx, struct id_m TDB_DATA data; char *keystr; unsigned long rec_id = 0; + NTSTATUS status; + + status = idmap_tdb2_open_perm_db(); + if (!NT_STATUS_IS_OK(status)) { + return status; + } if ((keystr = sid_string_talloc(ctx, map->sid)) == NULL) { DEBUG(0, ("Out of memory!\n")); -- 2.11.4.GIT