diff options
author | Michael Adam <obnox@samba.org> | 2009-02-24 17:42:50 +0100 |
---|---|---|
committer | Michael Adam <obnox@samba.org> | 2009-02-26 13:22:51 +0100 |
commit | 62b53507d29b0679647f429c8d969167fe25122f (patch) | |
tree | d8b410a11f814ec6916ca842bba0656e01f388a5 | |
parent | e05b7a8627a085ebd2418bc52152130a97725535 (diff) | |
download | samba-62b53507d29b0679647f429c8d969167fe25122f.tar.gz samba-62b53507d29b0679647f429c8d969167fe25122f.tar.bz2 samba-62b53507d29b0679647f429c8d969167fe25122f.zip |
s3:registry: don't directly access key->subkeys->num_subkeys in reg_backend_db.
Use the reg_objects api instead.
Michael
-rw-r--r-- | source3/registry/reg_backend_db.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/source3/registry/reg_backend_db.c b/source3/registry/reg_backend_db.c index 5722240f24..fd17b44aab 100644 --- a/source3/registry/reg_backend_db.c +++ b/source3/registry/reg_backend_db.c @@ -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); |