node->setFlag(DomainNode::FLAG_CALLBACK);
}
- // If we've added NSEC3PARAM, set up NSEC3 specific data or check
- // consistency with already set up parameters.
- if (rrset->getType() == RRType::NSEC3PARAM()) {
+ // If we've added NSEC3PARAM at zone origin, set up NSEC3 specific
+ // data or check consistency with already set up parameters.
+ if (rrset->getType() == RRType::NSEC3PARAM() &&
+ rrset->getName() == origin_) {
// We know rrset has exactly one RDATA
const generic::NSEC3PARAM& param =
dynamic_cast<const generic::NSEC3PARAM&>(
EXPECT_THROW(zone_finder_.add(nsec3param), InMemoryZoneFinder::AddError);
}
+TEST_F(InMemoryZoneFinderTest, nonOriginNSEC3PARAM) {
+ // This is a normal NSEC3PARAM at the zone origin
+ EXPECT_EQ(result::SUCCESS,
+ zone_finder_.add(textToRRset("example.org. 300 IN NSEC3PARAM "
+ "1 0 12 aabbccdd")));
+ // Add another (with different param) at a non origin node. This is
+ // awkward, but the implementation accepts it as an ordinary RR.
+ EXPECT_EQ(result::SUCCESS,
+ zone_finder_.add(textToRRset("a.example.org. 300 IN NSEC3PARAM "
+ "1 1 1 aabbccdd")));
+}
+
// TODO
// - existence of NSEC3PARAM
-// - add NSEC3PARAM at non origin (should be ignored)
}