]> granicus.if.org Git - pdns/commitdiff
rec: Only accept types not matching the query if we asked for ANY
authorRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 9 Nov 2017 16:16:04 +0000 (17:16 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 9 Nov 2017 16:16:04 +0000 (17:16 +0100)
Even from forward-recurse servers.

pdns/syncres.cc

index 474ee41cf7d85d8136314cf1adcefa0276c5c71d..be238b7daafc6b3ead2be37f013322124b8b1db2 100644 (file)
@@ -1256,13 +1256,6 @@ inline vector<DNSName> SyncRes::shuffleInSpeedOrder(NsSet &tnameservers, const s
   return rnameservers;
 }
 
-static bool magicAddrMatch(const QType& query, const QType& answer)
-{
-  if(query.getCode() != QType::ADDR)
-    return false;
-  return answer.getCode() == QType::A || answer.getCode() == QType::AAAA;
-}
-
 static uint32_t getRRSIGTTL(const time_t now, const std::shared_ptr<RRSIGRecordContent>& rrsig)
 {
   uint32_t res = 0;
@@ -2171,7 +2164,7 @@ bool SyncRes::processRecords(const std::string& prefix, const DNSName& qname, co
     // for ANY answers we *must* have an authoritative answer, unless we are forwarding recursively
     else if(rec.d_place==DNSResourceRecord::ANSWER && rec.d_name == qname &&
             (
-              rec.d_type==qtype.getCode() || (lwr.d_aabit && (qtype==QType(QType::ANY) || magicAddrMatch(qtype, QType(rec.d_type)) ) ) || sendRDQuery
+              rec.d_type==qtype.getCode() || ((lwr.d_aabit || sendRDQuery) && qtype == QType(QType::ANY))
               )
       )
     {