]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[1584review] added a test for a run time collision case for wildcard + NSEC3.
authorJINMEI Tatuya <jinmei@isc.org>
Thu, 16 Feb 2012 22:46:52 +0000 (14:46 -0800)
committerJINMEI Tatuya <jinmei@isc.org>
Thu, 16 Feb 2012 22:46:52 +0000 (14:46 -0800)
main code was simplified; we let Message::addRRset() catch the error and throw.

src/bin/auth/query.cc
src/bin/auth/tests/query_unittest.cc

index 07b0307d6070602f8cf470e9640ca1409e18143c..ec648f42cdc0f039efaa32f7e6d9ffd1279d7cd7 100644 (file)
@@ -195,10 +195,9 @@ Query::addWildcardProof(ZoneFinder& finder,
         // met the zone is broken anyway).
         const ZoneFinder::FindNSEC3Result NSEC3Result(
             finder.findNSEC3(qname_, true));
-        if (NULL == NSEC3Result.next_proof) {
-            isc_throw(BadNSEC3, "Unexpected NSEC3 "
-                      "result for wildcard proof");
-        }
+        // Note that at this point next_proof must not be NULL unless it's
+        // a run time collision (or zone/findNSEC3() is broken).  The
+        // unexpected case will be caught in addRRset() and result in SERVFAIL.
         response_.addRRset(Message::SECTION_AUTHORITY,
                            boost::const_pointer_cast<AbstractRRset>(
                                NSEC3Result.next_proof), dnssec_);
index 8bee1939c3dbd3e5497d517ca65cd4330149906d..4152ce5508ab9dd35e1096de33e4320cda61493b 100644 (file)
@@ -1415,6 +1415,20 @@ TEST_F(QueryTest, CNAMEwildNSEC3) {
                   mock_finder->getOrigin());
 }
 
+TEST_F(QueryTest, badWildcardNSEC3) {
+    // Similar to wildcardNSEC3, but emulating run time collision by
+    // returning NULL in the next closer proof for the closest encloser
+    // proof.
+    mock_finder->setNSEC3Flag(true);
+    ZoneFinder::FindNSEC3Result nsec3(true, 0, textToRRset(nsec3_apex_txt),
+                                      ConstRRsetPtr());
+    mock_finder->setNSEC3Result(&nsec3);
+
+    EXPECT_THROW(Query(memory_client, Name("www.wild.example.com"),
+                       RRType::A(), response, true).process(),
+                 isc::InvalidParameter);
+}
+
 TEST_F(QueryTest, badWildcardProof1) {
     // Unexpected case in wildcard proof: ZoneFinder::find() returns SUCCESS
     // when NXDOMAIN is expected.