summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGünther Deschner <gd@samba.org>2008-03-01 00:32:36 +0100
committerGünther Deschner <gd@samba.org>2008-03-01 01:02:15 +0100
commit87222d3f11ee4b9ca62d5d66f48772d85dbc7f84 (patch)
tree031a0fc63ed576f6b3a312bd40d7c85ced5b455d
parent5e0d86c4076f9b04a2c79ab47b497924248050aa (diff)
downloadsamba-87222d3f11ee4b9ca62d5d66f48772d85dbc7f84.tar.gz
samba-87222d3f11ee4b9ca62d5d66f48772d85dbc7f84.tar.bz2
samba-87222d3f11ee4b9ca62d5d66f48772d85dbc7f84.zip
Fix init_registry_data for subkeyless top-level keys.
On a fresh install with no existing registry.tdb, make sure we are able to create our initial top-level entries. Michael, Volker, please check. Guenther (This used to be commit 956bc602062825493e1c357e2388fee1e5514b50)
-rw-r--r--source3/registry/reg_backend_db.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/source3/registry/reg_backend_db.c b/source3/registry/reg_backend_db.c
index 52e0fd4289..518078a062 100644
--- a/source3/registry/reg_backend_db.c
+++ b/source3/registry/reg_backend_db.c
@@ -454,7 +454,8 @@ bool regdb_store_keys(const char *key, REGSUBKEY_CTR *ctr)
regdb_fetch_keys(key, old_subkeys);
- if (ctr->num_subkeys == old_subkeys->num_subkeys) {
+ if ((ctr->num_subkeys && old_subkeys->num_subkeys) &&
+ (ctr->num_subkeys == old_subkeys->num_subkeys)) {
for (i = 0; i<ctr->num_subkeys; i++) {
if (strcmp(ctr->subkeys[i],
@@ -550,6 +551,22 @@ bool regdb_store_keys(const char *key, REGSUBKEY_CTR *ctr)
/* now create records for any subkeys that don't already exist */
num_subkeys = regsubkey_ctr_numkeys(ctr);
+
+ if (num_subkeys == 0) {
+ if (!(subkeys = TALLOC_ZERO_P(ctr, REGSUBKEY_CTR)) ) {
+ DEBUG(0,("regdb_store_keys: talloc() failure!\n"));
+ goto fail;
+ }
+
+ if (!regdb_store_keys_internal(key, subkeys)) {
+ DEBUG(0,("regdb_store_keys: Failed to store "
+ "new record for key [%s]\n", key));
+ goto fail;
+ }
+ TALLOC_FREE(subkeys);
+
+ }
+
for (i=0; i<num_subkeys; i++) {
path = talloc_asprintf(ctx, "%s/%s",
key,