summaryrefslogtreecommitdiff
path: root/source3/registry/reg_backend_db.c
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2009-07-03 17:39:17 +0200
committerMichael Adam <obnox@samba.org>2009-07-15 14:01:45 +0200
commit589bacfbdb7541be5d339fcaf08272520bf6a1ac (patch)
tree6059733729e7acffe3949487dc012638af3c68d7 /source3/registry/reg_backend_db.c
parentdb4f797e3533b97df844a50a92e8a27a9248092b (diff)
downloadsamba-589bacfbdb7541be5d339fcaf08272520bf6a1ac.tar.gz
samba-589bacfbdb7541be5d339fcaf08272520bf6a1ac.tar.bz2
samba-589bacfbdb7541be5d339fcaf08272520bf6a1ac.zip
s3:registry: create regdb_fetch_keys_internal() with db_context argument
and let exported regdb_fetch_keys() just call regdb_fetch_keys_internal() with regdb as an argument. Internally, in reg_backend_db.c, always use the _internal version. Michael
Diffstat (limited to 'source3/registry/reg_backend_db.c')
-rw-r--r--source3/registry/reg_backend_db.c62
1 files changed, 35 insertions, 27 deletions
diff --git a/source3/registry/reg_backend_db.c b/source3/registry/reg_backend_db.c
index 562e29742d..efbd678437 100644
--- a/source3/registry/reg_backend_db.c
+++ b/source3/registry/reg_backend_db.c
@@ -27,8 +27,10 @@
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.*/
@@ -173,7 +175,7 @@ static WERROR init_registry_key_internal(const char *add_path)
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)) {
@@ -202,7 +204,7 @@ WERROR init_registry_key(const char *add_path)
{
WERROR werr;
- if (regdb_key_exists(add_path)) {
+ if (regdb_key_exists(regdb, add_path)) {
return WERR_OK;
}
@@ -248,7 +250,7 @@ WERROR init_registry_data(void)
* 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;
}
}
@@ -294,7 +296,7 @@ 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]);
@@ -713,7 +715,7 @@ bool regdb_store_keys(const char *key, struct regsubkey_ctr *ctr)
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;
}
@@ -728,7 +730,7 @@ bool regdb_store_keys(const char *key, struct regsubkey_ctr *ctr)
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);
@@ -770,7 +772,7 @@ bool regdb_store_keys(const char *key, struct regsubkey_ctr *ctr)
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:
@@ -861,7 +863,7 @@ bool regdb_store_keys(const char *key, struct regsubkey_ctr *ctr)
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 "
@@ -899,7 +901,7 @@ static WERROR regdb_create_subkey(const char *key, const char *subkey)
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;
}
@@ -907,7 +909,7 @@ static WERROR regdb_create_subkey(const char *key, const char *subkey)
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;
}
@@ -925,7 +927,7 @@ static WERROR regdb_create_subkey(const char *key, const char *subkey)
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;
}
@@ -967,7 +969,7 @@ static WERROR regdb_delete_subkey(const char *key, const char *subkey)
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;
}
@@ -978,7 +980,7 @@ static WERROR regdb_delete_subkey(const char *key, const char *subkey)
goto done;
}
- if (!regdb_key_exists(path)) {
+ if (!regdb_key_exists(regdb, path)) {
werr = WERR_OK;
goto done;
}
@@ -992,7 +994,7 @@ static WERROR regdb_delete_subkey(const char *key, const char *subkey)
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;
}
@@ -1128,7 +1130,7 @@ static bool create_sorted_subkeys(const char *key, const char *sorted_keyname)
goto fail;
}
- res = regdb_fetch_keys(key, ctr);
+ res = regdb_fetch_keys_internal(regdb, key, ctr);
if (res == -1) {
goto fail;
}
@@ -1303,7 +1305,7 @@ static bool scan_parent_subkeys(struct db_context *db, const char *parent,
* 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;
@@ -1327,11 +1329,11 @@ static bool regdb_key_exists(const char *key)
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:
@@ -1345,7 +1347,8 @@ 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;
@@ -1359,16 +1362,16 @@ int regdb_fetch_keys(const char *key, struct regsubkey_ctr *ctr)
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",
@@ -1399,6 +1402,11 @@ done:
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
***************************************************************************/
@@ -1492,7 +1500,7 @@ int regdb_fetch_values(const char* key, struct regval_ctr *values)
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;
}
@@ -1529,7 +1537,7 @@ bool regdb_store_values(const char *key, struct regval_ctr *values)
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;
}
@@ -1587,7 +1595,7 @@ static WERROR regdb_get_secdesc(TALLOC_CTX *mem_ctx, const char *key,
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;
}
@@ -1627,7 +1635,7 @@ static WERROR regdb_set_secdesc(const char *key,
WERROR err = WERR_NOMEM;
TDB_DATA tdbdata;
- if (!regdb_key_exists(key)) {
+ if (!regdb_key_exists(regdb, key)) {
err = WERR_BADFILE;
goto done;
}