From b3c970925e08ae6ea086aca4dfeff2fd5d2e7fbe Mon Sep 17 00:00:00 2001 From: Kees Monshouwer Date: Wed, 6 Jul 2022 17:23:38 +0200 Subject: [PATCH] auth: fix deleteDomain() in lmdb backend --- modules/lmdbbackend/lmdbbackend.cc | 54 +++++++++++++++++++----------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/modules/lmdbbackend/lmdbbackend.cc b/modules/lmdbbackend/lmdbbackend.cc index 92dbb97293..bab1926963 100644 --- a/modules/lmdbbackend/lmdbbackend.cc +++ b/modules/lmdbbackend/lmdbbackend.cc @@ -646,32 +646,48 @@ bool LMDBBackend::upgradeToSchemav3() bool LMDBBackend::deleteDomain(const DNSName& domain) { - auto doms = d_tdomains->getRWTransaction(); + uint32_t id; - DomainInfo di; - auto id = doms.get<0>(domain, di); - if (!id) - return false; + { // get domain id + auto txn = d_tdomains->getROTransaction(); - shared_ptr txn; - bool needCommit = false; - if (d_rwtxn && d_transactiondomainid == id) { - txn = d_rwtxn; - // cout<<"Reusing open transaction"<(domain, di); } - else { - // cout<<"Making a new RW txn for delete domain"<getRWTransaction(); + auto range = txn.equal_range<0>(domain); - if (needCommit) - txn->txn->commit(); + for (auto& iter = range.first; iter != range.second; ++iter) { + iter.del(); + } + + txn.commit(); + } + + { // Remove cryptokeys + auto txn = d_tkdb->getRWTransaction(); + auto range = txn.equal_range<0>(domain); + + for (auto& iter = range.first; iter != range.second; ++iter) { + iter.del(); + } + + txn.commit(); + } + + // Remove zone + auto txn = d_tdomains->getRWTransaction(); + txn.del(id); + txn.commit(); - doms.commit(); + // Remove records + deleteDomainRecords(*d_rwtxn, id); return true; } -- 2.47.2