]> granicus.if.org Git - pdns/commitdiff
fix up (not) signing SOA queries every once in a while, plus caching DNSSEC answers...
authorBert Hubert <bert.hubert@netherlabs.nl>
Mon, 27 Dec 2010 21:53:37 +0000 (21:53 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Mon, 27 Dec 2010 21:53:37 +0000 (21:53 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1763 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/common_startup.cc
pdns/dnspacket.cc
pdns/packethandler.cc
pdns/tcpreceiver.cc

index 123889034ba4e63d3ce9acc623fc266f98c18f44..6b99dc6944e140e885e0e1c7c753aba0fd43ac37 100644 (file)
@@ -280,7 +280,6 @@ void *qthread(void *number)
   return 0;
 }
 
-
 void mainthread()
 {
   Utility::srandom(time(0));
index 9b86bffdc0b068fdff20f4e84a9f5fc8ce185408..d3b42c897b0229b14eccc525f186271c7d43c595 100644 (file)
@@ -387,12 +387,13 @@ void DNSPacket::wrapup(void)
          if(pos->d_place == DNSResourceRecord::ANSWER) {
            cerr<<"Set TC bit"<<endl;
            pw.getHeader()->tc=1;
-      }
+         }
          goto noCommit;
 
          break;
        }
       }
+      // I assume this is some dirty hack to prevent us from signing the last SOA record in an AXFR.. XXX FIXME
       if(d_dnssecOk && !(d_tcp && d_rrs.rbegin()->qtype.getCode() == QType::SOA && d_rrs.rbegin()->priority == 1234)) {
        // cerr<<"Last signature.. "<<d_tcp<<", "<<d_rrs.rbegin()->priority<<", "<<d_rrs.rbegin()->qtype.getCode()<<", "<< d_rrs.size()<<endl;
        addSignature(::arg()["key-repository"], signQName, wildcardQName, signQType, signTTL, signPlace, toSign, pw);
index e3c4dcd8c5a39d7db1101cb149e1241a6f32742e..82fdf2a3ebacb0cf60dc0f4c62d01d7b9ad21029 100644 (file)
@@ -1185,6 +1185,7 @@ DNSPacket *PacketHandler::questionOrRecurse(DNSPacket *p, bool *shouldRecurse)
       rr.ttl=sd.ttl;
       rr.domain_id=sd.domain_id;
       rr.d_place=DNSResourceRecord::ANSWER;
+      rr.auth = true;
       r->addRecord(rr);
       goto sendit;
     }
index 83c40115b040d60d5ac5411672754d7b7c5f6b88..eed2895de90e74ffb30b2e8c73d8cf4a970c7258 100644 (file)
@@ -282,7 +282,7 @@ void *TCPNameserver::doConnection(void *data)
       shared_ptr<DNSPacket> reply; 
       shared_ptr<DNSPacket> cached= shared_ptr<DNSPacket>(new DNSPacket);
 
-      if(!packet->d.rd && (PC.get(packet.get(), cached.get()))) { // short circuit - does the PacketCache recognize this question?
+      if(!packet->d.rd && !packet->d_dnssecOk && packet->couldBeCached() && PC.get(packet.get(), cached.get())) { // short circuit - does the PacketCache recognize this question?
         cached->setRemote(&packet->remote);
         cached->d.id=packet->d.id;
         cached->d.rd=packet->d.rd; // copy in recursion desired bit