]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
make sure we clear DNSSEC caches in some relevant places. Fixes #530, patch by Ruben...
authorPeter van Dijk <peter.van.dijk@netherlabs.nl>
Tue, 14 Aug 2012 09:42:56 +0000 (09:42 +0000)
committerPeter van Dijk <peter.van.dijk@netherlabs.nl>
Tue, 14 Aug 2012 09:42:56 +0000 (09:42 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@2694 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/dbdnsseckeeper.cc
pdns/dnsseckeeper.hh
pdns/dynhandler.cc
pdns/tcpreceiver.cc

index 5f43ff300fef50b3acb7d56141be88bb8bce423c..31dcfb6a75f551acd24661fe5c9ec7cc14971f0c 100644 (file)
@@ -107,6 +107,15 @@ bool DNSSECKeeper::addKey(const std::string& name, bool keyOrZone, int algorithm
   return addKey(name, dspk, active);
 }
 
+void DNSSECKeeper::clearAllCaches() {
+  {
+    Lock l(&s_keycachelock);
+    s_keycache.clear();
+  }
+  Lock l(&s_metacachelock);
+  s_metacache.clear();
+}
+
 void DNSSECKeeper::clearCaches(const std::string& name)
 {
   {
@@ -406,4 +415,4 @@ void DNSSECKeeper::cleanup()
     }
     s_last_prune=time(0);
   }
-}
\ No newline at end of file
+}
index 3afcd8c993012bc33d5829c5a664d607d950907c..08b02c3df8c98804d81678e0b171aaf5050197bf 100644 (file)
@@ -80,6 +80,7 @@ public:
   bool getNSEC3PARAM(const std::string& zname, NSEC3PARAMRecordContent* n3p=0, bool* narrow=0);
   void setNSEC3PARAM(const std::string& zname, const NSEC3PARAMRecordContent& n3p, const bool& narrow=false);
   void unsetNSEC3PARAM(const std::string& zname);
+  void clearAllCaches();
   void clearCaches(const std::string& name);
   bool getPreRRSIGs(DNSBackend& db, const std::string& signer, const std::string& qname, const std::string& wildcardname, const QType& qtype, DNSPacketWriter::Place, vector<DNSResourceRecord>& rrsigs);
   bool isPresigned(const std::string& zname);
@@ -91,12 +92,12 @@ public:
   
   void startTransaction()
   {
-         (*d_keymetadb->backends.begin())->startTransaction("", -1);
+    (*d_keymetadb->backends.begin())->startTransaction("", -1);
   }
   
   void commitTransaction()
   {
-         (*d_keymetadb->backends.begin())->commitTransaction();
+    (*d_keymetadb->backends.begin())->commitTransaction();
   }
   
   void getFromMeta(const std::string& zname, const std::string& key, std::string& value);
index 8c9cb9c78e6e1767efb034c50512041316c5abbe..1b0fbe2a0e604cb038664772d7c462c6fcd9051d 100644 (file)
@@ -25,6 +25,7 @@
 #include <signal.h>
 #include "misc.hh"
 #include "communicator.hh"
+#include "dnsseckeeper.hh"
 
 static bool s_pleasequit;
 
@@ -112,16 +113,21 @@ string DLUptimeHandler(const vector<string>&parts, Utility::pid_t ppid)
 string DLPurgeHandler(const vector<string>&parts, Utility::pid_t ppid)
 {
   extern PacketCache PC;  
+  DNSSECKeeper dk;
   ostringstream os;
   int ret=0;
 
   if(parts.size()>1) {
     for (vector<string>::const_iterator i=++parts.begin();i<parts.end();++i) {
       ret+=PC.purge(*i);
+      dk.clearCaches(*i);
     }
   }
-  else
+  else {
     ret=PC.purge();
+    dk.clearAllCaches();
+  }
+
   os<<ret;
   return os.str();
 }
index e1a2fd366cf1c8d34b586c2d31bcb7988ae7467f..140e4b2430fb2010ddac90d31c9be5d907df9bde 100644 (file)
@@ -490,6 +490,7 @@ int TCPNameserver::doAXFR(const string &target, shared_ptr<DNSPacket> q, int out
   bool NSEC3Zone=false;
   
   DNSSECKeeper dk;
+  dk.clearCaches(target);
   bool securedZone = dk.isSecuredZone(target);
   if(dk.getNSEC3PARAM(target, &ns3pr, &narrow)) {
     NSEC3Zone=true;