]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[1551] allow adding NSEC after CNAME for the same name.
authorJINMEI Tatuya <jinmei@isc.org>
Tue, 31 Jan 2012 18:39:17 +0000 (10:39 -0800)
committerJINMEI Tatuya <jinmei@isc.org>
Tue, 31 Jan 2012 18:39:17 +0000 (10:39 -0800)
src/lib/datasrc/memory_datasrc.cc
src/lib/datasrc/tests/memory_datasrc_unittest.cc

index 0a3280be4a12cf14a5825fe0e1ca518c1fe69b9b..90142bb2059d74bd547ba933892b2414749d41d7 100644 (file)
@@ -190,7 +190,8 @@ struct InMemoryZoneFinder::InMemoryZoneFinderImpl {
                 isc_throw(AddError, "CNAME can't be added with other data for "
                           << rrset->getName());
             }
-        } else if (domain->find(RRType::CNAME()) != domain->end()) {
+        } else if (rrset->getType() != RRType::NSEC() &&
+                   domain->find(RRType::CNAME()) != domain->end()) {
             LOG_ERROR(logger, DATASRC_MEM_CNAME_COEXIST).arg(rrset->getName());
             isc_throw(AddError, "CNAME and " << rrset->getType() <<
                       " can't coexist for " << rrset->getName());
index d0d2bc72ed7b0285ca9ef53017dec26e3fd9bd59..91847aa640329cbae08ac2da471aca45f23e88be 100644 (file)
@@ -559,6 +559,18 @@ TEST_F(InMemoryZoneFinderTest, addOtherThenCNAME) {
     EXPECT_THROW(zone_finder_.add(rr_cname_), InMemoryZoneFinder::AddError);
 }
 
+TEST_F(InMemoryZoneFinderTest, addCNAMEThenDNSSECRecords) {
+    // CNAME and RRSIG can coexist
+    EXPECT_EQ(SUCCESS, zone_finder_.add(rr_cname_));
+    zone_finder_.add(textToRRset("cname.example.org. 300 IN RRSIG CNAME 5 3 "
+                                 "3600 20000101000000 20000201000000 12345 "
+                                 "example.org. FAKEFAKEFAKE"));
+
+    // Same for NSEC
+    zone_finder_.add(textToRRset("cname.example.org. 300 IN NSEC "
+                                 "dname.example.org. CNAME RRSIG NSEC"));
+}
+
 TEST_F(InMemoryZoneFinderTest, findCNAME) {
     // install CNAME RR
     EXPECT_EQ(SUCCESS, zone_finder_.add(rr_cname_));