From d5a8a75cf9e5cd88b5e7471eb7be8255cd2da28d Mon Sep 17 00:00:00 2001 From: JINMEI Tatuya Date: Tue, 31 Jan 2012 10:39:17 -0800 Subject: [PATCH] [1551] allow adding NSEC after CNAME for the same name. --- src/lib/datasrc/memory_datasrc.cc | 3 ++- src/lib/datasrc/tests/memory_datasrc_unittest.cc | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lib/datasrc/memory_datasrc.cc b/src/lib/datasrc/memory_datasrc.cc index 0a3280be4a..90142bb205 100644 --- a/src/lib/datasrc/memory_datasrc.cc +++ b/src/lib/datasrc/memory_datasrc.cc @@ -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()); diff --git a/src/lib/datasrc/tests/memory_datasrc_unittest.cc b/src/lib/datasrc/tests/memory_datasrc_unittest.cc index d0d2bc72ed..91847aa640 100644 --- a/src/lib/datasrc/tests/memory_datasrc_unittest.cc +++ b/src/lib/datasrc/tests/memory_datasrc_unittest.cc @@ -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_)); -- 2.47.3