]> 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>
Fri, 21 Jun 2024 08:05:42 +0000 (10:05 +0200)
pdns/recursordist/pdns_recursor.cc

index 4f57be1f3b9a10229fd195901d7d74bc9763f7d6..2a121ce51ac581074ccaae9d7fd506d859c81e22 100644 (file)
@@ -785,6 +785,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;
 }