]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
auth: cleanup LMDBBackend::get()
authorKees Monshouwer <mind04@monshouwer.org>
Wed, 21 Oct 2020 20:45:38 +0000 (22:45 +0200)
committermind04 <mind04@monshouwer.org>
Wed, 21 Oct 2020 20:45:38 +0000 (22:45 +0200)
modules/lmdbbackend/lmdbbackend.cc

index 71ba3b7b88ae530b86105ca5cd1889083e5f75ad..92775db596cdc5f79d762c08734d96376259af05 100644 (file)
@@ -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<string>(), d_currentrrset);
-      d_currentrrsetpos = 0;
+    if (d_currentrrset.empty()) {
+      d_getcursor->current(d_currentKey, d_currentVal);
 
-      auto key = d_currentKey.get<string_view>();
+      key = d_currentKey.get<string_view>();
       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<StringView>().rfind(d_matchkey, 0) != 0) {
           d_getcursor.reset();
         }
-
         continue;
       }
+
+      serFromString(d_currentVal.get<string>(), d_currentrrset);
+      d_currentrrsetpos = 0;
+    } else {
+      key = d_currentKey.get<string_view>();
     }
-    auto key = d_currentKey.get<string_view>();
-    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<StringView>().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<StringView>().rfind(d_matchkey, 0) != 0) {
+        d_getcursor.reset();
+      }
     }
 
     break;