From 0bde7a2944fded24af8a9b19a3bb42015bbdd6bb Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 10 Dec 2004 23:13:17 +0000 Subject: r4141: Fix crash bug in ldb backend (This used to be commit 5f64a60374486b9fc3d75786c3035a9017dd4d33) --- source4/lib/registry/common/reg_interface.c | 8 ++++---- source4/lib/registry/reg_backend_ldb.c | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) (limited to 'source4/lib/registry') diff --git a/source4/lib/registry/common/reg_interface.c b/source4/lib/registry/common/reg_interface.c index cd0b54e2dc..b7211d92a4 100644 --- a/source4/lib/registry/common/reg_interface.c +++ b/source4/lib/registry/common/reg_interface.c @@ -150,7 +150,7 @@ WERROR reg_get_hive(struct registry_context *ctx, uint32_t hkey, struct registry WERROR reg_open_hive(struct registry_context *parent_ctx, const char *backend, const char *location, const char *credentials, struct registry_key **root) { struct registry_hive *rethive; - struct registry_key *retkey; + struct registry_key *retkey = NULL; struct reg_init_function_entry *entry; WERROR werr; @@ -173,17 +173,17 @@ WERROR reg_open_hive(struct registry_context *parent_ctx, const char *backend, c werr = entry->hive_functions->open_hive(rethive, &retkey); - rethive->root = retkey; - if(!W_ERROR_IS_OK(werr)) { return werr; } - + if(!retkey) { DEBUG(0, ("Backend %s didn't provide root key!\n", backend)); return WERR_GENERAL_FAILURE; } + rethive->root = retkey; + retkey->hive = rethive; retkey->name = NULL; retkey->path = talloc_strdup(retkey, ""); diff --git a/source4/lib/registry/reg_backend_ldb.c b/source4/lib/registry/reg_backend_ldb.c index b20a56046d..e848507634 100644 --- a/source4/lib/registry/reg_backend_ldb.c +++ b/source4/lib/registry/reg_backend_ldb.c @@ -196,12 +196,12 @@ static WERROR ldb_open_hive(struct registry_hive *hive, struct registry_key **k) ldb_set_debug_stderr(c); hive->backend_data = c; - hive->root = talloc_zero_p(hive, struct registry_key); - talloc_set_destructor (hive->root, reg_close_ldb_key); + *k = talloc_zero_p(hive, struct registry_key); + talloc_set_destructor (*k, reg_close_ldb_key); talloc_set_destructor (hive, ldb_close_hive); - hive->root->name = talloc_strdup(hive->root, ""); - hive->root->backend_data = kd = talloc_zero_p(hive->root, struct ldb_key_data); - kd->dn = talloc_strdup(hive->root, "key=root"); + (*k)->name = talloc_strdup(*k, ""); + (*k)->backend_data = kd = talloc_zero_p(*k, struct ldb_key_data); + kd->dn = talloc_strdup(*k, "key=root"); return WERR_OK; -- cgit