1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-10 12:58:35 +03:00

s3:registry: don't directly access key->subkeys->num_subkeys in reg_backend_db.

Use the reg_objects api instead.

Michael
This commit is contained in:
Michael Adam 2009-02-24 17:42:50 +01:00
parent e05b7a8627
commit 62b53507d2

View File

@ -619,7 +619,7 @@ done:
bool regdb_store_keys(const char *key, struct regsubkey_ctr *ctr)
{
int num_subkeys, i;
int num_subkeys, old_num_subkeys, i;
char *path = NULL;
struct regsubkey_ctr *subkeys = NULL, *old_subkeys = NULL;
char *oldkeyname = NULL;
@ -642,16 +642,18 @@ bool regdb_store_keys(const char *key, struct regsubkey_ctr *ctr)
regdb_fetch_keys(key, old_subkeys);
if ((ctr->num_subkeys && old_subkeys->num_subkeys) &&
(ctr->num_subkeys == old_subkeys->num_subkeys)) {
num_subkeys = regsubkey_ctr_numkeys(ctr);
old_num_subkeys = regsubkey_ctr_numkeys(old_subkeys);
if ((num_subkeys && old_num_subkeys) &&
(num_subkeys == old_num_subkeys)) {
for (i = 0; i<ctr->num_subkeys; i++) {
for (i = 0; i < num_subkeys; i++) {
if (strcmp(ctr->subkeys[i],
old_subkeys->subkeys[i]) != 0) {
break;
}
}
if (i == ctr->num_subkeys) {
if (i == num_subkeys) {
/*
* Nothing changed, no point to even start a tdb
* transaction
@ -937,6 +939,7 @@ static bool create_sorted_subkeys(const char *key, const char *sorted_keyname)
char *p;
int i, res;
size_t len;
int num_subkeys;
if (regdb->transaction_start(regdb) != 0) {
DEBUG(0, ("create_sorted_subkeys: transaction_start "
@ -954,14 +957,15 @@ static bool create_sorted_subkeys(const char *key, const char *sorted_keyname)
goto fail;
}
sorted_subkeys = talloc_array(ctr, char *, ctr->num_subkeys);
num_subkeys = regsubkey_ctr_numkeys(ctr);
sorted_subkeys = talloc_array(ctr, char *, num_subkeys);
if (sorted_subkeys == NULL) {
goto fail;
}
len = 4 + 4*ctr->num_subkeys;
len = 4 + 4*num_subkeys;
for (i = 0; i<ctr->num_subkeys; i++) {
for (i = 0; i < num_subkeys; i++) {
sorted_subkeys[i] = talloc_strdup_upper(sorted_subkeys,
ctr->subkeys[i]);
if (sorted_subkeys[i] == NULL) {
@ -970,17 +974,17 @@ static bool create_sorted_subkeys(const char *key, const char *sorted_keyname)
len += strlen(sorted_subkeys[i])+1;
}
qsort(sorted_subkeys, ctr->num_subkeys, sizeof(char *), cmp_keynames);
qsort(sorted_subkeys, num_subkeys, sizeof(char *), cmp_keynames);
buf = talloc_array(ctr, char, len);
if (buf == NULL) {
goto fail;
}
p = buf + 4 + 4*ctr->num_subkeys;
p = buf + 4 + 4*num_subkeys;
SIVAL(buf, 0, ctr->num_subkeys);
SIVAL(buf, 0, num_subkeys);
for (i=0; i<ctr->num_subkeys; i++) {
for (i=0; i < num_subkeys; i++) {
ptrdiff_t offset = p - buf;
SIVAL(buf, 4 + 4*i, offset);
strlcpy(p, sorted_subkeys[i], len-offset);