]> granicus.if.org Git - pdns/commitdiff
first steps towards --any-to-tcp feature
authorbert hubert <bert.hubert@netherlabs.nl>
Tue, 21 May 2013 12:41:02 +0000 (14:41 +0200)
committerbert hubert <bert.hubert@netherlabs.nl>
Tue, 21 May 2013 12:41:02 +0000 (14:41 +0200)
pdns/common_startup.cc
pdns/dnspacket.cc
pdns/nameserver.cc
pdns/packethandler.cc

index bf1734a07600690e9ba70dc6e53ec63638a5b0c3..6cb90fd941e247fe71dde051d7df2ca07a1c09b5 100644 (file)
@@ -1,11 +1,10 @@
 /*
     PowerDNS Versatile Database Driven Nameserver
-    Copyright (C) 2005 - 2011  PowerDNS.COM BV
+    Copyright (C) 2005 - 2013  PowerDNS.COM BV
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License version 2
     as published by the Free Software Foundation
-    
 
     This program is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -31,6 +30,8 @@ UDPNameserver *N;
 int avg_latency;
 TCPNameserver *TN;
 
+bool g_anyToTCP;
+
 ArgvMap &arg()
 {
   return theArg;
@@ -280,6 +281,8 @@ void *qthread(void *number)
       L << Logger::Notice<<"Remote "<< remote <<" wants '" << P->qdomain<<"|"<<P->qtype.getName() << 
             "', do = " <<P->d_dnssecOk <<", bufsize = "<< P->getMaxReplyLen()<<": ";
     }
+
+
     if((P->d.opcode != Opcode::Notify) && P->couldBeCached() && PC.get(P, &cached)) { // short circuit - does the PacketCache recognize this question?
       if(logDNSQueries)
         L<<"packetcache HIT"<<endl;
index e38edd72f4d1301414c056cccc5c3f48c222fc9c..82fb7075f6521f150ebf9e645c4e6dec81316e35 100644 (file)
@@ -274,7 +274,8 @@ void DNSPacket::wrapup()
   pw.getHeader()->qr=d.qr;
   pw.getHeader()->id=d.id;
   pw.getHeader()->rd=d.rd;
-
+  pw.getHeader()->tc=d.tc;
+  
   DNSPacketWriter::optvect_t opts;
   if(d_wantsnsid) {
     opts.push_back(make_pair(3, ::arg()["server-id"]));
index a11034c3c41e62a732ea1be6ac059195c09a47fc..067a33e60e5bdfef466b56a0ddbdfc861a7697f5 100644 (file)
@@ -410,7 +410,6 @@ DNSPacket *UDPNameserver::receive(DNSPacket *prefilled)
     }
   }
   
-  
   DLOG(L<<"Received a packet " << len <<" bytes long from "<< remote.toString()<<endl);
   
   DNSPacket *packet;
@@ -428,7 +427,6 @@ DNSPacket *UDPNameserver::receive(DNSPacket *prefilled)
     packet->d_anyLocal = dest;
   }      
 
-
   if(packet->parse(mesg, len)<0) {
     S.inc("corrupt-packets");
     S.ringAccount("remotes-corrupt", packet->getRemote());
index 6b2533f532eaa703c57b688b0ebd6eb0490970da..8f8d1ef4e664aadb78e5091615be7e9b3c324c2c 100644 (file)
@@ -1165,7 +1165,7 @@ DNSPacket *PacketHandler::questionOrRecurse(DNSPacket *p, bool *shouldRecurse)
       return r; 
     }
 
-    // L<<Logger::Warning<<"Query for '"<<p->qdomain<<"' "<<p->qtype.getName()<<" from "<<p->getRemote()<<endl;
+    L<<Logger::Warning<<"Query for '"<<p->qdomain<<"' "<<p->qtype.getName()<<" from "<<p->getRemote()<<endl;
     
     r->d.ra = (p->d.rd && d_doRecursion && DP->recurseFor(p));  // make sure we set ra if rd was set, and we'll do it
 
@@ -1185,6 +1185,13 @@ DNSPacket *PacketHandler::questionOrRecurse(DNSPacket *p, bool *shouldRecurse)
     if(doVersionRequest(p,r,target)) // catch version.bind requests
       goto sendit;
 
+    if(p->qtype.getCode() == QType::ANY) {
+      cerr<<"Shunted it to TCP.."<<endl;
+      r->d.tc = 1;
+      r->commitD();
+      return r;
+    }
+
     if(p->qclass==255) // any class query 
       r->setA(false);
     else if(p->qclass != QClass::IN) // we only know about IN, so we don't find anything