r4141: Fix crash bug in ldb backend
authorJelmer Vernooij <jelmer@samba.org>
Fri, 10 Dec 2004 23:13:17 +0000 (23:13 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:06:30 +0000 (13:06 -0500)
(This used to be commit 5f64a60374486b9fc3d75786c3035a9017dd4d33)

source4/lib/registry/common/reg_interface.c
source4/lib/registry/reg_backend_ldb.c

index cd0b54e2dca66f14d8d34d572550a21f61d6db16..b7211d92a49bf00eb5d40e5d124b4823dc86c195 100644 (file)
@@ -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, "");
index b20a56046d72439b7609fd6853ea0da25819fc65..e84850763453d255d91414673340951de76285ba 100644 (file)
@@ -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;