From: Kees Monshouwer Date: Wed, 6 Jul 2022 15:23:38 +0000 (+0200) Subject: auth: fix deleteDomain() in lmdb backend X-Git-Tag: auth-4.8.0-alpha0~20^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b3c970925e08ae6ea086aca4dfeff2fd5d2e7fbe;p=thirdparty%2Fpdns.git auth: fix deleteDomain() in lmdb backend --- 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; }