static struct db_context *regdb = NULL;
static int regdb_refcount;
-static bool regdb_key_exists(const char *key);
+static bool regdb_key_exists(struct db_context *db, const char *key);
static bool regdb_key_is_base_key(const char *key);
+static int regdb_fetch_keys_internal(struct db_context *db, const char *key,
+ struct regsubkey_ctr *ctr);
/* List the deepest path into the registry. All part components will be created.*/
goto fail;
}
- regdb_fetch_keys(base, subkeys);
+ regdb_fetch_keys_internal(regdb, base, subkeys);
if (*subkeyname) {
werr = regsubkey_ctr_addkey(subkeys, subkeyname);
if (!W_ERROR_IS_OK(werr)) {
{
WERROR werr;
- if (regdb_key_exists(add_path)) {
+ if (regdb_key_exists(regdb, add_path)) {
return WERR_OK;
}
* If all do already exist, we can save the writes.
*/
for (i=0; builtin_registry_paths[i] != NULL; i++) {
- if (!regdb_key_exists(builtin_registry_paths[i])) {
+ if (!regdb_key_exists(regdb, builtin_registry_paths[i])) {
goto do_init;
}
}
/* loop over all of the predefined paths and add each component */
for (i=0; builtin_registry_paths[i] != NULL; i++) {
- if (regdb_key_exists(builtin_registry_paths[i])) {
+ if (regdb_key_exists(regdb, builtin_registry_paths[i])) {
continue;
}
werr = init_registry_key_internal(builtin_registry_paths[i]);
TALLOC_CTX *ctx = talloc_stackframe();
WERROR werr;
- if (!regdb_key_is_base_key(key) && !regdb_key_exists(key)) {
+ if (!regdb_key_is_base_key(key) && !regdb_key_exists(regdb, key)) {
goto fail;
}
return false;
}
- regdb_fetch_keys(key, old_subkeys);
+ regdb_fetch_keys_internal(regdb, key, old_subkeys);
num_subkeys = regsubkey_ctr_numkeys(ctr);
old_num_subkeys = regsubkey_ctr_numkeys(old_subkeys);
goto cancel;
}
- regdb_fetch_keys(key, old_subkeys);
+ regdb_fetch_keys_internal(regdb, key, old_subkeys);
/*
* Make the store operation as safe as possible without transactions:
goto cancel;
}
- if (regdb_fetch_keys( path, subkeys ) == -1) {
+ if (regdb_fetch_keys_internal(regdb, path, subkeys) == -1) {
/* create a record with 0 subkeys */
if (!regdb_store_keys_internal(regdb, path, subkeys)) {
DEBUG(0,("regdb_store_keys: Failed to store "
struct regsubkey_ctr *subkeys;
TALLOC_CTX *mem_ctx = talloc_stackframe();
- if (!regdb_key_is_base_key(key) && !regdb_key_exists(key)) {
+ if (!regdb_key_is_base_key(key) && !regdb_key_exists(regdb, key)) {
werr = WERR_NOT_FOUND;
goto done;
}
werr = regsubkey_ctr_init(mem_ctx, &subkeys);
W_ERROR_NOT_OK_GOTO_DONE(werr);
- if (regdb_fetch_keys(key, subkeys) < 0) {
+ if (regdb_fetch_keys_internal(regdb, key, subkeys) < 0) {
werr = WERR_REG_IO_FAILURE;
goto done;
}
werr = regsubkey_ctr_init(mem_ctx, &subkeys);
W_ERROR_NOT_OK_GOTO(werr, cancel);
- if (regdb_fetch_keys(key, subkeys) < 0) {
+ if (regdb_fetch_keys_internal(regdb, key, subkeys) < 0) {
werr = WERR_REG_IO_FAILURE;
goto cancel;
}
char *path;
TALLOC_CTX *mem_ctx = talloc_stackframe();
- if (!regdb_key_is_base_key(key) && !regdb_key_exists(key)) {
+ if (!regdb_key_is_base_key(key) && !regdb_key_exists(regdb, key)) {
werr = WERR_NOT_FOUND;
goto done;
}
goto done;
}
- if (!regdb_key_exists(path)) {
+ if (!regdb_key_exists(regdb, path)) {
werr = WERR_OK;
goto done;
}
werr = regsubkey_ctr_init(mem_ctx, &subkeys);
W_ERROR_NOT_OK_GOTO(werr, cancel);
- if (regdb_fetch_keys(key, subkeys) < 0) {
+ if (regdb_fetch_keys_internal(regdb, key, subkeys) < 0) {
werr = WERR_REG_IO_FAILURE;
goto cancel;
}
goto fail;
}
- res = regdb_fetch_keys(key, ctr);
+ res = regdb_fetch_keys_internal(regdb, key, ctr);
if (res == -1) {
goto fail;
}
* The exeption of this are keys without a parent key,
* i.e. the "base" keys (HKLM, HKCU, ...).
*/
-static bool regdb_key_exists(const char *key)
+static bool regdb_key_exists(struct db_context *db, const char *key)
{
TALLOC_CTX *mem_ctx = talloc_stackframe();
TDB_DATA value;
p = strrchr(path, '/');
if (p == NULL) {
/* this is a base key */
- value = regdb_fetch_key_internal(regdb, mem_ctx, path);
+ value = regdb_fetch_key_internal(db, mem_ctx, path);
ret = (value.dptr != NULL);
} else {
*p = '\0';
- ret = scan_parent_subkeys(regdb, path, p+1);
+ ret = scan_parent_subkeys(db, path, p+1);
}
done:
released by the caller.
***********************************************************************/
-int regdb_fetch_keys(const char *key, struct regsubkey_ctr *ctr)
+static int regdb_fetch_keys_internal(struct db_context *db, const char *key,
+ struct regsubkey_ctr *ctr)
{
WERROR werr;
uint32 num_items;
DEBUG(11,("regdb_fetch_keys: Enter key => [%s]\n", key ? key : "NULL"));
- if (!regdb_key_exists(key)) {
+ if (!regdb_key_exists(db, key)) {
goto done;
}
- werr = regsubkey_ctr_set_seqnum(ctr, regdb_get_seqnum());
+ werr = regsubkey_ctr_set_seqnum(ctr, db->get_seqnum(db));
if (!W_ERROR_IS_OK(werr)) {
goto done;
}
- value = regdb_fetch_key_internal(regdb, frame, key);
+ value = regdb_fetch_key_internal(db, frame, key);
if (value.dptr == NULL) {
DEBUG(10, ("regdb_fetch_keys: no subkeys found for key [%s]\n",
return ret;
}
+int regdb_fetch_keys(const char *key, struct regsubkey_ctr *ctr)
+{
+ return regdb_fetch_keys_internal(regdb, key, ctr);
+}
+
/****************************************************************************
Unpack a list of registry values frem the TDB
***************************************************************************/
DEBUG(10,("regdb_fetch_values: Looking for value of key [%s] \n", key));
- if (!regdb_key_exists(key)) {
+ if (!regdb_key_exists(regdb, key)) {
goto done;
}
DEBUG(10,("regdb_store_values: Looking for value of key [%s] \n", key));
- if (!regdb_key_exists(key)) {
+ if (!regdb_key_exists(regdb, key)) {
goto done;
}
DEBUG(10, ("regdb_get_secdesc: Getting secdesc of key [%s]\n", key));
- if (!regdb_key_exists(key)) {
+ if (!regdb_key_exists(regdb, key)) {
err = WERR_BADFILE;
goto done;
}
WERROR err = WERR_NOMEM;
TDB_DATA tdbdata;
- if (!regdb_key_exists(key)) {
+ if (!regdb_key_exists(regdb, key)) {
err = WERR_BADFILE;
goto done;
}