]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
rec: Better aggressive NSEC cache type to string handling 17101/head
authorRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 23 Mar 2026 08:58:52 +0000 (09:58 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 2 Apr 2026 07:34:30 +0000 (09:34 +0200)
Signed-off-by: Remi Gacogne <remi.gacogne@powerdns.com>
pdns/recursordist/aggressive_nsec.cc
pdns/recursordist/aggressive_nsec.hh

index 484061223b0c1dcd92dc8264e936335dca96b080..aa26d92c1e445076546d3181982475903a2b82ec 100644 (file)
@@ -917,6 +917,19 @@ bool AggressiveNSECCache::getDenial(time_t now, const DNSName& name, const QType
   return true;
 }
 
+const std::string& AggressiveNSECCache::ZoneEntry::getZoneTypeAsString(ZoneEntry::ZoneDenialType type)
+{
+  static const std::array<std::string, 3> s_typeToStr{
+    "Unknown",
+    "NSEC",
+    "NSEC3",
+  };
+  if (static_cast<uint8_t>(type) < s_typeToStr.size()) {
+    return s_typeToStr.at(static_cast<uint8_t>(type));
+  }
+  return s_typeToStr.at(0);
+}
+
 size_t AggressiveNSECCache::dumpToFile(pdns::UniqueFilePtr& filePtr, const struct timeval& now)
 {
   size_t ret = 0;
@@ -936,7 +949,7 @@ size_t AggressiveNSECCache::dumpToFile(pdns::UniqueFilePtr& filePtr, const struc
     for (const auto& entry : zone->d_entries) {
       int64_t ttl = entry.d_ttd - now.tv_sec;
       try {
-        fprintf(filePtr.get(), "%s %" PRId64 " IN %s %s by %s/%s\n", entry.d_owner.toString().c_str(), ttl, zone->d_denialType == ZoneEntry::ZoneDenialType::NSEC3 ? "NSEC3" : "NSEC", entry.d_record->getZoneRepresentation().c_str(), entry.d_qname.toString().c_str(), entry.d_qtype.toString().c_str());
+        fprintf(filePtr.get(), "%s %" PRId64 " IN %s %s by %s/%s\n", entry.d_owner.toString().c_str(), ttl, AggressiveNSECCache::ZoneEntry::getZoneTypeAsString(zone->d_denialType).c_str(), entry.d_record->getZoneRepresentation().c_str(), entry.d_qname.toString().c_str(), entry.d_qtype.toString().c_str());
         for (const auto& signature : entry.d_signatures) {
           fprintf(filePtr.get(), "- RRSIG %s\n", signature->getZoneRepresentation().c_str());
         }
index d68bb8fc96a5382a93d4abb946efb100ac4c18a2..c609d7c13d49e2e8a76bb56eaea50bb97de3f8e2 100644 (file)
@@ -134,6 +134,8 @@ private:
       NSEC3 = 2
     };
 
+    static const std::string& getZoneTypeAsString(ZoneDenialType type);
+
     using cache_t = multi_index_container<
       CacheEntry,
       indexed_by<