]> granicus.if.org Git - pdns/commitdiff
restore NSEC generation & signatures for AXFR.
authorBert Hubert <bert.hubert@netherlabs.nl>
Tue, 11 Jan 2011 20:08:46 +0000 (20:08 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Tue, 11 Jan 2011 20:08:46 +0000 (20:08 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1871 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/dnsbackend.cc
pdns/tcpreceiver.cc

index 82acf3d29b5d3fa196f0902cbe775f90b8f7f0d6..00fd295f3bdacf8431b8eeff7deb99ae03c33383 100644 (file)
@@ -208,7 +208,7 @@ vector<DNSBackend *>BackendMakerClass::all(bool skipBIND)
 bool DNSBackend::getSOA(const string &domain, SOAData &sd, DNSPacket *p)
 {
   this->lookup(QType(QType::SOA),domain,p);
-
+  
   DNSResourceRecord rr;
   rr.auth = true; 
 
@@ -223,7 +223,7 @@ bool DNSBackend::getSOA(const string &domain, SOAData &sd, DNSPacket *p)
 
   if(!hits)
     return false;
-
+  sd.qname = domain;
   if(sd.nameserver.empty())
     sd.nameserver=arg()["default-soa-name"];
   
index 0d2f92f015d70e45eae0aa263b2dfb0069354e82..2f493be1696c69baee0f610ed7c68b8836654ac3 100644 (file)
@@ -432,7 +432,7 @@ int TCPNameserver::doAXFR(const string &target, shared_ptr<DNSPacket> q, int out
       s_P=new PacketHandler;
     }
 
-    if(!s_P->getBackend()->getSOA(target,sd)) {
+    if(!s_P->getBackend()->getSOA(target, sd)) {
       L<<Logger::Error<<"AXFR of domain '"<<target<<"' failed: not authoritative"<<endl;
       outpacket->setRcode(9); // 'NOTAUTH'
       sendPacket(outpacket,outsock);
@@ -484,8 +484,7 @@ int TCPNameserver::doAXFR(const string &target, shared_ptr<DNSPacket> q, int out
   //  sendPacket(outpacket, outsock);
   typedef map<string, NSECEntry, CanonicalCompare> nsecrepo_t;
   nsecrepo_t nsecrepo;
-  // this is where the DNSKEYs go
-  
+  // this is where the DNSKEYs go  
 
   DNSSECKeeper::keyset_t keys = dk.getKeys(target);
   BOOST_FOREACH(const DNSSECKeeper::keyset_t::value_type& value, keys) {
@@ -499,7 +498,6 @@ int TCPNameserver::doAXFR(const string &target, shared_ptr<DNSPacket> q, int out
     ne.d_ttl = rr.ttl;
     outpacket->addRecord(rr);
   }
-
   /* now write all other records */
 
   int count=0;
@@ -536,10 +534,10 @@ int TCPNameserver::doAXFR(const string &target, shared_ptr<DNSPacket> q, int out
       // FIXME: Subsequent messages SHOULD NOT have a question section, though the final message MAY.
     }
   }
-
-  if(dk.haveActiveKSKFor(sd.qname)) {
+  
+  if(dk.haveActiveKSKFor(target)) {
     for(nsecrepo_t::const_iterator iter = nsecrepo.begin(); iter != nsecrepo.end(); ++iter) {
-      cerr<<"Adding for '"<<iter->first<<"'\n";
+  //    cerr<<"Adding for '"<<iter->first<<"'\n";
       NSECRecordContent nrc;
       nrc.d_set = iter->second.d_set;
       nrc.d_set.insert(QType::RRSIG);
@@ -556,6 +554,7 @@ int TCPNameserver::doAXFR(const string &target, shared_ptr<DNSPacket> q, int out
       rr.content = nrc.getZoneRepresentation();
       rr.qtype = QType::NSEC;
       rr.d_place = DNSResourceRecord::ANSWER;
+      rr.auth=true;
       outpacket->addRecord(rr);
       count++;
     }