From: Miod Vallat Date: Wed, 9 Jul 2025 07:31:02 +0000 (+0200) Subject: Make updateEmptyNonTerminals conform to its specification... X-Git-Tag: rec-5.4.0-alpha0~42^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2cbc04a6e7dfb2570060f1423e779863a18be32b;p=thirdparty%2Fpdns.git Make updateEmptyNonTerminals conform to its specification... ...by performing the insertions (if any) when all ENT had to be removed first. Signed-off-by: Miod Vallat --- diff --git a/modules/lmdbbackend/lmdbbackend.cc b/modules/lmdbbackend/lmdbbackend.cc index 801005069b..7aa56af866 100644 --- a/modules/lmdbbackend/lmdbbackend.cc +++ b/modules/lmdbbackend/lmdbbackend.cc @@ -2804,40 +2804,38 @@ bool LMDBBackend::updateEmptyNonTerminals(domainid_t domain_id, set& in needCommit = true; } - // if remove is set, all ENTs should be removed & nothing else should be done + DomainInfo info; + auto rotxn = d_tdomains->getROTransaction(); + if (!rotxn.get(domain_id, info)) { + // cout <<"No such domain with id "<getROTransaction(); - if (!rotxn.get(domain_id, di)) { - // cout <<"No such domain with id "<txn->put(txn->db->dbi, co(domain_id, lrr.qname, QType::ENT), ser); - - // cout <<" +"<txn->del(txn->db->dbi, co(domain_id, n, QType::ENT)); + for (auto name : erase) { + // cout <<" -"<txn->del(txn->db->dbi, order(domain_id, name, QType::ENT)); } } - if (needCommit) + for (const auto& name : insert) { + LMDBResourceRecord lrr; + lrr.qname = name.makeRelative(info.zone); + lrr.ttl = 0; + lrr.auth = true; + std::string ser = serializeToBuffer(lrr); + txn->txn->put(txn->db->dbi, order(domain_id, lrr.qname, QType::ENT), ser); + // cout <<" +"<txn->commit(); + } return false; }