]> granicus.if.org Git - pdns/commitdiff
no longer try to add NSEC/NSEC3 to unsigned zones
authorBert Hubert <bert.hubert@netherlabs.nl>
Mon, 10 Jan 2011 11:14:58 +0000 (11:14 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Mon, 10 Jan 2011 11:14:58 +0000 (11:14 +0000)
also don't add DNSSEC material to unsigned zones during AXFR
quiet some logging about unsigned zones

git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1854 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/dnssecsigner.cc
pdns/packethandler.cc
pdns/tcpreceiver.cc

index 719f9f56193425c6848707453d6d4c2d2869fad4..5acc79a17ff5fc6054ad74244fd83622450707fb 100644 (file)
@@ -52,8 +52,8 @@ int getRRSIGsForRRSET(DNSSECKeeper& dk, const std::string signQName, uint16_t si
   rrc.d_tag = 0;
   
   // XXX we know the apex already.. is is the SOA name which we determined earlier
-  if(!getSignerApexFor(dk, signQName, rrc.d_signer)) {
-    cerr<<"No signer known for '"<<signQName<<"'\n";
+  if(!getSignerApexFor(dk, signQName, rrc.d_signer)) { // this is the cutout for signing non-dnssec enabled zones
+    // cerr<<"No signer known for '"<<signQName<<"'\n";
     return -1;
   }
   // we sign the RRSET in toSign + the rrc w/o key
@@ -101,7 +101,7 @@ void addSignature(DNSSECKeeper& dk, const std::string signQName, const std::stri
     return;
 
   if(getRRSIGsForRRSET(dk, wildcardname.empty() ? signQName : wildcardname, signQType, signTTL, toSign, rrcs, signQType == QType::DNSKEY) < 0) {
-    cerr<<"Error signing a record!"<<endl;
+    // cerr<<"Error signing a record!"<<endl;
     return;
   }
   BOOST_FOREACH(RRSIGRecordContent& rrc, rrcs) {
index 9b6a8cef8b064c3f1d2120ce2fa54c7464736768..145ddb8cb700a77ec1fbf3ac58269b29b963b745 100644 (file)
@@ -1008,7 +1008,7 @@ void PacketHandler::makeNXDomain(DNSPacket* p, DNSPacket* r, const std::string&
   rr.auth = 1;
   r->addRecord(rr);
   
-  if(p->d_dnssecOk
+  if(p->d_dnssecOk && d_dk.haveActiveKSKFor(sd.qname))
     addNSECX(p, r, target, sd.qname, 1);
   
   r->setRcode(RCode::NXDomain);  
@@ -1026,8 +1026,8 @@ void PacketHandler::makeNOError(DNSPacket* p, DNSPacket* r, const std::string& t
   rr.d_place=DNSResourceRecord::AUTHORITY;
   rr.auth = 1;
   r->addRecord(rr);
-  
-  if(p->d_dnssecOk)
+
+  if(p->d_dnssecOk && d_dk.haveActiveKSKFor(sd.qname))
     addNSECX(p, r, target, sd.qname, 0);
 
   S.ringAccount("noerror-queries",p->qdomain+"/"+p->qtype.getName());
index e93ba708528f9990438eef9ead3db1d585fed55f..dd65209f4681f1f0ad68b46cbf5814e84276e6fe 100644 (file)
@@ -503,7 +503,7 @@ int TCPNameserver::doAXFR(const string &target, shared_ptr<DNSPacket> q, int out
       continue; // skip SOA - would indicate end of AXFR
 
     if(rr.qtype.getCode() == QType::NS) {
-      cerr<<rr.qname<<" NS, auth="<<rr.auth<<endl;
+      // cerr<<rr.qname<<" NS, auth="<<rr.auth<<endl;
     }
 
     outpacket->addRecord(rr);
@@ -520,29 +520,29 @@ int TCPNameserver::doAXFR(const string &target, shared_ptr<DNSPacket> q, int out
     }
   }
 
-
-  for(nsecrepo_t::const_iterator iter = nsecrepo.begin(); iter != nsecrepo.end(); ++iter) {
-    cerr<<"Adding for '"<<iter->first<<"'\n";
-    NSECRecordContent nrc;
-    nrc.d_set = iter->second;
-    nrc.d_set.insert(QType::RRSIG);
-    nrc.d_set.insert(QType::NSEC);
-    if(boost::next(iter) != nsecrepo.end()) {
-      nrc.d_next = boost::next(iter)->first;
+  if(dk.haveActiveKSKFor(sd.qname)) {
+    for(nsecrepo_t::const_iterator iter = nsecrepo.begin(); iter != nsecrepo.end(); ++iter) {
+      cerr<<"Adding for '"<<iter->first<<"'\n";
+      NSECRecordContent nrc;
+      nrc.d_set = iter->second;
+      nrc.d_set.insert(QType::RRSIG);
+      nrc.d_set.insert(QType::NSEC);
+      if(boost::next(iter) != nsecrepo.end()) {
+        nrc.d_next = boost::next(iter)->first;
+      }
+      else
+        nrc.d_next=nsecrepo.begin()->first;
+  
+      rr.qname = iter->first;
+  
+      rr.ttl = 3600;
+      rr.content = nrc.getZoneRepresentation();
+      rr.qtype = QType::NSEC;
+      rr.d_place = DNSResourceRecord::ANSWER;
+      outpacket->addRecord(rr);
+      count++;
     }
-    else
-      nrc.d_next=nsecrepo.begin()->first;
-
-    rr.qname = iter->first;
-
-    rr.ttl = 3600;
-    rr.content = nrc.getZoneRepresentation();
-    rr.qtype = QType::NSEC;
-    rr.d_place = DNSResourceRecord::ANSWER;
-    outpacket->addRecord(rr);
-    count++;
   }
-
   
   if(count) {
     sendPacket(outpacket, outsock);