s3:registry: hand db context in to v2_to_v3 upgrade code via private_data
authorMichael Adam <obnox@samba.org>
Thu, 25 Aug 2011 15:18:12 +0000 (17:18 +0200)
committerMichael Adam <obnox@samba.org>
Thu, 25 Aug 2011 15:29:24 +0000 (17:29 +0200)
This also fixes the earlier faulty handing in of a useless stackframe
memory context via private_data.

source3/registry/reg_backend_db.c

index f6a676756a2b36c7efa88267c4838a19accee9a7..835c21417c17c47f5b57893b8eeeeec5f66cf44d 100644 (file)
@@ -462,11 +462,18 @@ static int regdb_upgrade_v2_to_v3_fn(struct db_record *rec, void *private_data)
        uint32_t buflen, len;
        uint32_t num_items;
        uint32_t i;
+       struct db_context *db = (struct db_context *)private_data;
 
        if (rec->key.dptr == NULL || rec->key.dsize == 0) {
                return 0;
        }
 
+       if (db == NULL) {
+               DEBUG(0, ("regdb_normalize_keynames_fn: ERROR: "
+                         "NULL db context handed in via private_data\n"));
+               return 1;
+       }
+
        keyname = (const char *)rec->key.dptr;
 
        if (strncmp(keyname, REG_SORTED_SUBKEYS_PREFIX,
@@ -520,7 +527,7 @@ static int regdb_upgrade_v2_to_v3_fn(struct db_record *rec, void *private_data)
                DEBUG(10, ("regdb_upgrade_v2_to_v3: "
                           "writing subkey list for [%s\\%s]\n",
                           keyname, subkeyname));
-               werr = regdb_store_subkey_list(regdb, keyname, subkeyname);
+               werr = regdb_store_subkey_list(db, keyname, subkeyname);
                if (!W_ERROR_IS_OK(werr)) {
                        return 1;
                }
@@ -533,9 +540,8 @@ static WERROR regdb_upgrade_v2_to_v3(struct db_context *db)
 {
        int rc;
        WERROR werr;
-       TALLOC_CTX *frame = talloc_stackframe();
 
-       rc = regdb->traverse(db, regdb_upgrade_v2_to_v3_fn, frame);
+       rc = regdb->traverse(db, regdb_upgrade_v2_to_v3_fn, db);
        if (rc < 0) {
                werr = WERR_REG_IO_FAILURE;
                goto done;
@@ -544,7 +550,6 @@ static WERROR regdb_upgrade_v2_to_v3(struct db_context *db)
        werr = regdb_store_regdb_version(db, REGVER_V3);
 
 done:
-       talloc_free(frame);
        return werr;
 }