From: Kees Monshouwer Date: Wed, 21 Oct 2020 20:45:38 +0000 (+0200) Subject: auth: cleanup LMDBBackend::get() X-Git-Tag: auth-4.4.0-alpha2~23^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=859bdcc7068e33eccf16e0676bba060c99cfa5e2;p=thirdparty%2Fpdns.git auth: cleanup LMDBBackend::get() --- diff --git a/modules/lmdbbackend/lmdbbackend.cc b/modules/lmdbbackend/lmdbbackend.cc index 71ba3b7b88..92775db596 100644 --- a/modules/lmdbbackend/lmdbbackend.cc +++ b/modules/lmdbbackend/lmdbbackend.cc @@ -741,29 +741,29 @@ bool LMDBBackend::get(DNSZoneRecord& rr) return false; } - if (d_currentrrsetpos >= d_currentrrset.size()) { - d_getcursor->current(d_currentKey, d_currentVal); + string_view key; - d_currentrrset.clear(); - serFromString(d_currentVal.get(), d_currentrrset); - d_currentrrsetpos = 0; + if (d_currentrrset.empty()) { + d_getcursor->current(d_currentKey, d_currentVal); - auto key = d_currentKey.get(); + key = d_currentKey.get(); rr.dr.d_type = compoundOrdername::getQType(key).getCode(); if(rr.dr.d_type == QType::NSEC3) { // Hit a magic NSEC3 skipping - d_currentrrset.clear(); if(d_getcursor->next(d_currentKey, d_currentVal) || d_currentKey.get().rfind(d_matchkey, 0) != 0) { d_getcursor.reset(); } - continue; } + + serFromString(d_currentVal.get(), d_currentrrset); + d_currentrrsetpos = 0; + } else { + key = d_currentKey.get(); } - auto key = d_currentKey.get(); - DNSResourceRecord drr = d_currentrrset[d_currentrrsetpos]; - d_currentrrsetpos++; + + const auto& drr = d_currentrrset[d_currentrrsetpos++]; rr.dr.d_name = compoundOrdername::getQName(key) + d_lookupdomain; rr.domain_id = compoundOrdername::getDomainID(key); @@ -772,8 +772,11 @@ bool LMDBBackend::get(DNSZoneRecord& rr) rr.dr.d_content = deserializeContentZR(rr.dr.d_type, rr.dr.d_name, drr.content); rr.auth = drr.auth; - if(d_currentrrsetpos >= d_currentrrset.size() && (d_getcursor->next(d_currentKey, d_currentVal) || d_currentKey.get().rfind(d_matchkey, 0) != 0)) { - d_getcursor.reset(); + if(d_currentrrsetpos >= d_currentrrset.size()) { + d_currentrrset.clear(); + if(d_getcursor->next(d_currentKey, d_currentVal) || d_currentKey.get().rfind(d_matchkey, 0) != 0) { + d_getcursor.reset(); + } } break;