summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/registry/reg_backend_db.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/source3/registry/reg_backend_db.c b/source3/registry/reg_backend_db.c
index 3089c43eba..9468c40cf7 100644
--- a/source3/registry/reg_backend_db.c
+++ b/source3/registry/reg_backend_db.c
@@ -28,6 +28,7 @@ static struct db_context *regdb = NULL;
static int regdb_refcount;
static bool regdb_key_exists(const char *key);
+static bool regdb_key_is_base_key(const char *key);
/* List the deepest path into the registry. All part components will be created.*/
@@ -771,6 +772,38 @@ static TDB_DATA regdb_fetch_key_internal(TALLOC_CTX *mem_ctx, const char *key)
/**
+ * check whether a given key name represents a base key,
+ * i.e one without a subkey separator ('/' or '\').
+ */
+static bool regdb_key_is_base_key(const char *key)
+{
+ TALLOC_CTX *mem_ctx = talloc_stackframe();
+ bool ret = false;
+ char *path;
+
+ if (key == NULL) {
+ goto done;
+ }
+
+ path = normalize_reg_path(mem_ctx, key);
+ if (path == NULL) {
+ DEBUG(0, ("out of memory! (talloc failed)\n"));
+ goto done;
+ }
+
+ if (*path == '\0') {
+ goto done;
+ }
+
+ ret = (strrchr(path, '/') == NULL);
+
+done:
+ TALLOC_FREE(mem_ctx);
+ return ret;
+}
+
+
+/**
* Check for the existence of a key.
*
* Existence of a key is authoritatively defined by its