]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
ALIAS: Actually return SERVFAIL on error over TCP
authorPieter Lexis <pieter.lexis@powerdns.com>
Wed, 23 May 2018 16:49:36 +0000 (18:49 +0200)
committerPieter Lexis <pieter.lexis@powerdns.com>
Thu, 21 Jun 2018 10:04:12 +0000 (12:04 +0200)
pdns/dnsproxy.cc

index 6cad953fb89a27d0567ca999f16bb85aea9edb52..2f16a325ecfd876173bf9711e98af39547d5a3f9 100644 (file)
@@ -100,13 +100,22 @@ bool DNSProxy::completePacket(DNSPacket *r, const DNSName& target,const DNSName&
       ret2 = stubDoResolve(target, QType::AAAA, ips);
 
     if(ret1 != RCode::NoError || ret2 != RCode::NoError) {
-      g_log<<Logger::Error<<"Error resolving for ALIAS "<<target<<", returning SERVFAIL"<<endl;
-    }
-
-    for (auto &ip : ips)
-    {
-      ip.dr.d_name = aname;
-      r->addRecord(ip);
+      g_log<<Logger::Error<<"Error resolving for "<<aname<<" ALIAS "<<target;
+      if (ret1 != RCode::NoError) {
+       g_log<<Logger::Error<<", A-record query returned "<<RCode::to_s(ret1);
+      }
+      if (ret2 != RCode::NoError) {
+       g_log<<Logger::Error<<", AAAA-record query returned "<<RCode::to_s(ret2);
+      }
+      g_log<<Logger::Error<<", returning SERVFAIL"<<endl;
+      r->clearRecords();
+      r->setRcode(RCode::ServFail);
+    } else {
+      for (auto &ip : ips)
+      {
+        ip.dr.d_name = aname;
+        r->addRecord(ip);
+      }
     }
 
     uint16_t len=htons(r->getString().length());