]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Remove potential double SOA records if the target of a dns64 name is NODATA
authorOtto Moerbeek <otto.moerbeek@open-xchange.com>
Fri, 21 Jun 2024 08:05:42 +0000 (10:05 +0200)
committerOtto Moerbeek <otto.moerbeek@open-xchange.com>
Tue, 25 Jun 2024 12:11:41 +0000 (14:11 +0200)
(cherry picked from commit 40d632980b5734a08bd19015ee636ab5564e125a)

pdns/recursordist/pdns_recursor.cc

index 84bfa62fe01fb21ab013c4144b0bc1c8eae9caad..a9fd0875940497abb09d3cb476faaa93c448cfaa 100644 (file)
@@ -750,6 +750,24 @@ int getFakeAAAARecords(const DNSName& qname, ComboAddress prefix, vector<DNSReco
                 }),
               ret.end());
   }
+  else {
+    // Remove double SOA records
+    std::set<DNSName> seenSOAs;
+    ret.erase(std::remove_if(
+                             ret.begin(),
+                             ret.end(),
+                             [&seenSOAs](DNSRecord& record) {
+                               if (record.d_type == QType::SOA) {
+                                 if (seenSOAs.count(record.d_name) > 0) {
+                                   // We've had this SOA before, remove it
+                                   return true;
+                                 }
+                                 seenSOAs.insert(record.d_name);
+                               }
+                               return false;
+                             }),
+              ret.end());
+  }
   t_Counters.at(rec::Counter::dns64prefixanswers)++;
   return rcode;
 }