From 70d8e57c174d2dddf8d05ab81cf2edf31d10aebd Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Tue, 8 Jul 2008 17:10:01 +0200 Subject: registry: fetch regdb_fetch_keys() when a key exists but not its subkey-record. According to the new policy a key (that is not a base key) exists, iff it exists in the subkey list of its parent key. Usually this subkeylist is present, but in a transaction-less dbwrap backend (ctdb), a failing write can leave an "incomplete" key without its own subkeylist-record. (Otherwise such an incomplete key can be generated with e.g. tdbtool.) For such a key net registry enumerate (e.g.) would fail. This commit fixes this behaviour of regdb_fetch_keys(). Michael (This used to be commit f329aaf0452cc9bbad9fb6f67dac00bf8d1ef128) --- source3/registry/reg_backend_db.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'source3/registry/reg_backend_db.c') diff --git a/source3/registry/reg_backend_db.c b/source3/registry/reg_backend_db.c index 0d976be10d..b1e3e2b5a3 100644 --- a/source3/registry/reg_backend_db.c +++ b/source3/registry/reg_backend_db.c @@ -929,21 +929,22 @@ int regdb_fetch_keys(const char *key, REGSUBKEY_CTR *ctr) DEBUG(11,("regdb_fetch_keys: Enter key => [%s]\n", key ? key : "NULL")); if (!regdb_key_exists(key)) { - goto fail; + goto done; } ctr->seqnum = regdb_get_seqnum(); value = regdb_fetch_key_internal(frame, key); - buf = value.dptr; - buflen = value.dsize; - - if ( !buf ) { - DEBUG(5,("regdb_fetch_keys: tdb lookup failed to locate key [%s]\n", key)); - goto fail; + if (value.dptr == NULL) { + DEBUG(10, ("regdb_fetch_keys: no subkeys found for key [%s]\n", + key)); + ret = 0; + goto done; } + buf = value.dptr; + buflen = value.dsize; len = tdb_unpack( buf, buflen, "d", &num_items); for (i=0; i