]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsseckeeper: add getFromMetaOrDefault
authorPeter van Dijk <peter.van.dijk@powerdns.com>
Thu, 28 Nov 2019 14:30:33 +0000 (15:30 +0100)
committerPeter van Dijk <peter.van.dijk@powerdns.com>
Thu, 5 Dec 2019 11:33:53 +0000 (12:33 +0100)
pdns/dbdnsseckeeper.cc
pdns/dnsseckeeper.hh

index 1e9eb07d80e1a9221d212dbedf78f4d18f1c66ca..1324240cbb7e13e59c4b8e347ce618573c515181 100644 (file)
@@ -191,10 +191,18 @@ bool DNSSECKeeper::activateKey(const DNSName& zname, unsigned int id)
   return d_keymetadb->activateDomainKey(zname, id);
 }
 
+void DNSSECKeeper::getFromMetaOrDefault(const DNSName& zname, const std::string& key, std::string& value, const std::string& defaultvalue)
+{
+  if (getFromMeta(zname, key, value))
+    return;
+  else
+    value = defaultvalue;
+}
 
-void DNSSECKeeper::getFromMeta(const DNSName& zname, const std::string& key, std::string& value)
+bool DNSSECKeeper::getFromMeta(const DNSName& zname, const std::string& key, std::string& value)
 {
   static int ttl = ::arg().asNum("domain-metadata-cache-ttl");
+  bool isset = false;
   value.clear();
   unsigned int now = time(0);
 
@@ -208,13 +216,15 @@ void DNSSECKeeper::getFromMeta(const DNSName& zname, const std::string& key, std
     metacache_t::const_iterator iter = s_metacache.find(tie(zname, key));
     if(iter != s_metacache.end() && iter->d_ttd > now) {
       value = iter->d_value;
-      return;
+      return iter->d_isset;
     }
   }
   vector<string> meta;
   d_keymetadb->getDomainMetadata(zname, key, meta);
-  if(!meta.empty())
+  if(!meta.empty()) {
     value=*meta.begin();
+    isset = true;
+  }
 
   if (ttl > 0) {
     METACacheEntry nce;
@@ -222,11 +232,13 @@ void DNSSECKeeper::getFromMeta(const DNSName& zname, const std::string& key, std
     nce.d_ttd = now + ttl;
     nce.d_key= key;
     nce.d_value = value;
+    nce.d_isset = isset;
     {
       WriteLock l(&s_metacachelock);
       lruReplacingInsert<SequencedTag>(s_metacache, nce);
     }
   }
+  return isset;
 }
 
 void DNSSECKeeper::getSoaEdit(const DNSName& zname, std::string& value)
index f280f4de985e98bb99fc7fcc4c6953a8acb1181c..848f5bcbdbd31c56075d6d4920acd9af7200adba 100644 (file)
@@ -222,7 +222,8 @@ public:
     (*d_keymetadb->backends.begin())->commitTransaction();
   }
   
-  void getFromMeta(const DNSName& zname, const std::string& key, std::string& value);
+  void getFromMetaOrDefault(const DNSName& zname, const std::string& key, std::string& value, const std::string& defaultvalue);
+  bool getFromMeta(const DNSName& zname, const std::string& key, std::string& value);
   void getSoaEdit(const DNSName& zname, std::string& value);
   bool unSecureZone(const DNSName& zone, std::string& error, std::string& info);
   bool rectifyZone(const DNSName& zone, std::string& error, std::string& info, bool doTransaction);
@@ -252,6 +253,7 @@ private:
   
     DNSName d_domain;
     mutable std::string d_key, d_value;
+    mutable bool d_isset;
     unsigned int d_ttd;
   
   };