]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsproxy: Fix two nits reported by @Habbie
authorPieter Lexis <pieter.lexis@powerdns.com>
Fri, 10 Aug 2018 10:38:22 +0000 (12:38 +0200)
committerPieter Lexis <pieter.lexis@powerdns.com>
Fri, 10 Aug 2018 10:38:22 +0000 (12:38 +0200)
pdns/dnsproxy.cc

index 69f5b30f6792eb42c0b9de8460d04989211d298e..670f90706bf93f18b96b64114f825a45b5c99a80 100644 (file)
@@ -100,7 +100,7 @@ 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 "<<aname<<" ALIAS "<<target<<" over TCP";
+      g_log<<Logger::Error<<"Error resolving for "<<aname<<" ALIAS "<<target<<" over UDP, original query came in over TCP";
       if (ret1 != RCode::NoError) {
        g_log<<Logger::Error<<", A-record query returned "<<RCode::to_s(ret1);
       }
@@ -245,41 +245,35 @@ void DNSProxy::mainloop(void)
         /* Set up iov and msgh structures. */
         memset(&msgh, 0, sizeof(struct msghdr));
         string reply; // needs to be alive at time of sendmsg!
-        if(i->second.complete) { // TODO in the world of non-recursive backends, isn't this always true?
-          MOADNSParser mdp(false, p.getString());
-          //     cerr<<"Got completion, "<<mdp.d_answers.size()<<" answers, rcode: "<<mdp.d_header.rcode<<endl;
-          if (mdp.d_header.rcode == RCode::NoError) {
-            for(MOADNSParser::answers_t::const_iterator j=mdp.d_answers.begin(); j!=mdp.d_answers.end(); ++j) {        
-              //           cerr<<"comp: "<<(int)j->first.d_place-1<<" "<<j->first.d_label<<" " << DNSRecordContent::NumberToType(j->first.d_type)<<" "<<j->first.d_content->getZoneRepresentation()<<endl;
-              if(j->first.d_place == DNSResourceRecord::ANSWER || (j->first.d_place == DNSResourceRecord::AUTHORITY && j->first.d_type == QType::SOA)) {
-
-                if(j->first.d_type == i->second.qtype || (i->second.qtype == QType::ANY && (j->first.d_type == QType::A || j->first.d_type == QType::AAAA))) {
-                  DNSZoneRecord dzr;
-                  dzr.dr.d_name=i->second.aname;
-                  dzr.dr.d_type = j->first.d_type;
-                  dzr.dr.d_ttl=j->first.d_ttl;
-                  dzr.dr.d_place= j->first.d_place;
-                  dzr.dr.d_content=j->first.d_content;
-                  i->second.complete->addRecord(dzr);
-                }
+        MOADNSParser mdp(false, p.getString());
+        //       cerr<<"Got completion, "<<mdp.d_answers.size()<<" answers, rcode: "<<mdp.d_header.rcode<<endl;
+        if (mdp.d_header.rcode == RCode::NoError) {
+          for(MOADNSParser::answers_t::const_iterator j=mdp.d_answers.begin(); j!=mdp.d_answers.end(); ++j) {        
+            //     cerr<<"comp: "<<(int)j->first.d_place-1<<" "<<j->first.d_label<<" " << DNSRecordContent::NumberToType(j->first.d_type)<<" "<<j->first.d_content->getZoneRepresentation()<<endl;
+            if(j->first.d_place == DNSResourceRecord::ANSWER || (j->first.d_place == DNSResourceRecord::AUTHORITY && j->first.d_type == QType::SOA)) {
+
+              if(j->first.d_type == i->second.qtype || (i->second.qtype == QType::ANY && (j->first.d_type == QType::A || j->first.d_type == QType::AAAA))) {
+                DNSZoneRecord dzr;
+                dzr.dr.d_name=i->second.aname;
+                dzr.dr.d_type = j->first.d_type;
+                dzr.dr.d_ttl=j->first.d_ttl;
+                dzr.dr.d_place= j->first.d_place;
+                dzr.dr.d_content=j->first.d_content;
+                i->second.complete->addRecord(dzr);
               }
             }
-            i->second.complete->setRcode(mdp.d_header.rcode);
-          } else {
-            g_log<<Logger::Error<<"Error resolving for "<<i->second.aname<<" ALIAS "<<i->second.qname<<" over UDP, "<<QType(i->second.qtype).getName()<<"-record query returned "<<RCode::to_s(mdp.d_header.rcode)<<", returning SERVFAIL"<<endl;
-            i->second.complete->clearRecords();
-            i->second.complete->setRcode(RCode::ServFail);
           }
-          reply=i->second.complete->getString();
-          iov.iov_base = (void*)reply.c_str();
-          iov.iov_len = reply.length();
-          delete i->second.complete;
-          i->second.complete=0;
-        }
-        else {
-          iov.iov_base = buffer;
-          iov.iov_len = len;
+          i->second.complete->setRcode(mdp.d_header.rcode);
+        } else {
+          g_log<<Logger::Error<<"Error resolving for "<<i->second.aname<<" ALIAS "<<i->second.qname<<" over UDP, "<<QType(i->second.qtype).getName()<<"-record query returned "<<RCode::to_s(mdp.d_header.rcode)<<", returning SERVFAIL"<<endl;
+          i->second.complete->clearRecords();
+          i->second.complete->setRcode(RCode::ServFail);
         }
+        reply=i->second.complete->getString();
+        iov.iov_base = (void*)reply.c_str();
+        iov.iov_len = reply.length();
+        delete i->second.complete;
+        i->second.complete=0;
         msgh.msg_iov = &iov;
         msgh.msg_iovlen = 1;
         msgh.msg_name = (struct sockaddr*)&i->second.remote;