Browse Source

[1483] Protect the method by exception

Michal 'vorner' Vaner 13 years ago
parent
commit
7ffef24a48
2 changed files with 9 additions and 0 deletions
  1. 3 0
      src/lib/datasrc/database.cc
  2. 6 0
      src/lib/datasrc/tests/database_unittest.cc

+ 3 - 0
src/lib/datasrc/database.cc

@@ -410,6 +410,9 @@ DatabaseClient::Finder::find(const isc::dns::Name& name,
                              const isc::dns::RRType& type,
                              const FindOptions options)
 {
+    if (type == RRType::ANY()) {
+        isc_throw(isc::Unexpected, "Use findAll to answer ANY");
+    }
     return (findInternal(name, type, NULL, options));
 }
 

+ 6 - 0
src/lib/datasrc/tests/database_unittest.cc

@@ -2287,6 +2287,12 @@ TYPED_TEST(DatabaseClientTest, emptyNonterminalNSEC) {
                                Name::ROOT_NAME(), ZoneFinder::FIND_DNSSEC));
 }
 
+TYPED_TEST(DatabaseClientTest, anyFromFind) {
+    // Find will reject answering an ANY query
+    EXPECT_THROW(this->getFinder()->find(isc::dns::Name("www2.example.org."),
+                                         RRType::ANY()), isc::Unexpected);
+}
+
 // Test the findAll method.
 TYPED_TEST(DatabaseClientTest, getAll) {
     // The domain doesn't exist, so we must get the right NSEC