r4140: Get rid of close_hive (replace it with talloc destructors).
authorJelmer Vernooij <jelmer@samba.org>
Fri, 10 Dec 2004 22:57:43 +0000 (22:57 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:06:30 +0000 (13:06 -0500)
(This used to be commit bcbfce7b0119538bab06801c97aa9c7d4bf3a6c6)

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

index 3e38faa77216628657c4834cd4b866a8d38dbf03..b3998690910c2fc87e82482dd687ecdea37ffb09 100644 (file)
@@ -111,7 +111,6 @@ struct hive_operations {
 
        /* Implement this one */
        WERROR (*open_hive) (struct registry_hive *, struct registry_key **);
-       WERROR (*close_hive) (struct registry_hive *);
 
        /* Or this one */
        WERROR (*open_key) (TALLOC_CTX *, struct registry_key *, const char *name, struct registry_key **);
@@ -148,9 +147,9 @@ struct hive_operations {
 
 struct registry_hive {
        const struct hive_operations *functions;
-       char *location;
-       void *backend_data;
        struct registry_key *root;
+       void *backend_data;
+       const char *location;
        struct registry_context *reg_ctx;
 };
 
index 2382e4aa434f7c4f0442092c8a3d3c0a1e9539bc..cd0b54e2dca66f14d8d34d572550a21f61d6db16 100644 (file)
@@ -149,7 +149,8 @@ WERROR reg_get_hive(struct registry_context *ctx, uint32_t hkey, struct registry
 /* Open a registry file/host/etc */
 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 *ret;
+       struct registry_hive *rethive;
+       struct registry_key *retkey;
        struct reg_init_function_entry *entry;
        WERROR werr;
 
@@ -164,28 +165,30 @@ WERROR reg_open_hive(struct registry_context *parent_ctx, const char *backend, c
                return WERR_NOT_SUPPORTED;
        }
        
-       ret = talloc_p(parent_ctx, struct registry_hive);
-       ret->location = location?talloc_strdup(ret, location):NULL;
-       ret->functions = entry->hive_functions;
-       ret->backend_data = NULL;
-       ret->reg_ctx = parent_ctx;
+       rethive = talloc_p(parent_ctx, struct registry_hive);
+       rethive->location = location?talloc_strdup(rethive, location):NULL;
+       rethive->functions = entry->hive_functions;
+       rethive->backend_data = NULL;
+       rethive->reg_ctx = parent_ctx;
 
-       werr = entry->hive_functions->open_hive(ret, &ret->root);
+       werr = entry->hive_functions->open_hive(rethive, &retkey);
+
+       rethive->root = retkey;
 
        if(!W_ERROR_IS_OK(werr)) {
                return werr;
        }
        
-       if(!ret->root) {
+       if(!retkey) {
                DEBUG(0, ("Backend %s didn't provide root key!\n", backend));
                return WERR_GENERAL_FAILURE;
        }
 
-       ret->root->hive = ret;
-       ret->root->name = NULL;
-       ret->root->path = talloc_strdup(ret, "");
+       retkey->hive = rethive;
+       retkey->name = NULL;
+       retkey->path = talloc_strdup(retkey, "");
        
-       *root = ret->root;
+       *root = retkey;
 
        return WERR_OK;
 }
index 7804a68d3d7a504b3f472727b8b66e0a17025941..b20a56046d72439b7609fd6853ea0da25819fc65 100644 (file)
@@ -29,6 +29,15 @@ struct ldb_key_data
        int subkey_count, value_count;
 };
 
+static int ldb_close_hive (void *_hive)
+{
+       struct registry_hive *hive = _hive;
+       ldb_close (hive->backend_data);
+       return 0;
+}
+
+
+
 static int reg_close_ldb_key (void *data)
 {
        struct registry_key *key = data;
@@ -189,6 +198,7 @@ static WERROR ldb_open_hive(struct registry_hive *hive, struct registry_key **k)
 
        hive->root = talloc_zero_p(hive, struct registry_key);
        talloc_set_destructor (hive->root, 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");
@@ -240,18 +250,11 @@ static WERROR ldb_del_key (struct registry_key *key)
        return WERR_OK;
 }
 
-static WERROR ldb_close_hive (struct registry_hive *hive)
-{
-       ldb_close (hive->backend_data);
-       return WERR_OK;
-}
-
 static struct hive_operations reg_backend_ldb = {
        .name = "ldb",
        .add_key = ldb_add_key,
        .del_key = ldb_del_key,
        .open_hive = ldb_open_hive,
-       .close_hive = ldb_close_hive,
        .open_key = ldb_open_key,
        .get_value_by_index = ldb_get_value_by_id,
        .get_subkey_by_index = ldb_get_subkey_by_id,