BIND 10 trac2656_2, updated. ae25fcc7abecb79eb3d4b9df1e0b463c27f77258 [2656] Update std::string CNAME constructor to use the MasterLexer

BIND 10 source code commits bind10-changes at lists.isc.org
Tue Jan 29 07:03:49 UTC 2013


The branch, trac2656_2 has been updated
       via  ae25fcc7abecb79eb3d4b9df1e0b463c27f77258 (commit)
      from  58ccf7aa110fe656c52060cbc7b2cc26b4a9ae9d (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit ae25fcc7abecb79eb3d4b9df1e0b463c27f77258
Author: Mukund Sivaraman <muks at isc.org>
Date:   Tue Jan 29 12:33:07 2013 +0530

    [2656] Update std::string CNAME constructor to use the MasterLexer
    
    Also adjust tests.

-----------------------------------------------------------------------

Summary of changes:
 src/lib/datasrc/tests/database_unittest.cc         |    4 ++--
 .../datasrc/tests/memory/zone_finder_unittest.cc   |    2 +-
 src/lib/datasrc/tests/memory_datasrc_unittest.cc   |    2 +-
 src/lib/dns/rdata/generic/cname_5.cc               |   21 ++++++++++++++++++--
 src/lib/dns/tests/rdata_cname_unittest.cc          |   12 +++++------
 src/lib/dns/tests/zone_checker_unittest.cc         |    2 +-
 src/lib/python/isc/testutils/rrset_utils.py        |    2 +-
 .../resolve/tests/response_classifier_unittest.cc  |    4 ++--
 8 files changed, 33 insertions(+), 16 deletions(-)

-----------------------------------------------------------------------
diff --git a/src/lib/datasrc/tests/database_unittest.cc b/src/lib/datasrc/tests/database_unittest.cc
index cb8ed41..58af193 100644
--- a/src/lib/datasrc/tests/database_unittest.cc
+++ b/src/lib/datasrc/tests/database_unittest.cc
@@ -3649,7 +3649,7 @@ TYPED_TEST(DatabaseClientTest, deleteRRset) {
                           RRType::CNAME(), this->rrttl_));
     this->rrset_->addRdata(rdata::createRdata(this->rrset_->getType(),
                                               this->rrset_->getClass(),
-                                              "www.example.org"));
+                                              "www.example.org."));
     this->updater_->deleteRRset(*this->rrset_);
 
     // The this->updater_ finder should immediately see the deleted results.
@@ -3701,7 +3701,7 @@ TYPED_TEST(DatabaseClientTest, deleteRRsetToNXDOMAIN) {
                            RRType::CNAME(), this->rrttl_));
     this->rrset_->addRdata(rdata::createRdata(this->rrset_->getType(),
                                               this->rrset_->getClass(),
-                                              "www.example.org"));
+                                              "www.example.org."));
 
     this->updater_ = this->client_->getUpdater(this->zname_, false);
     this->updater_->deleteRRset(*this->rrset_);
diff --git a/src/lib/datasrc/tests/memory/zone_finder_unittest.cc b/src/lib/datasrc/tests/memory/zone_finder_unittest.cc
index e05cde6..441624c 100644
--- a/src/lib/datasrc/tests/memory/zone_finder_unittest.cc
+++ b/src/lib/datasrc/tests/memory/zone_finder_unittest.cc
@@ -125,7 +125,7 @@ public:
             // This one will place rr_ns_a_ at a zone cut, making it a glue:
             {"ns.example.org. 300 IN NS 192.0.2.2.", &rr_ns_ns_},
             {"ns.example.org. 300 IN AAAA 2001:db8::2", &rr_ns_aaaa_},
-            {"cname.example.org. 300 IN CNAME canonical.example.org",
+            {"cname.example.org. 300 IN CNAME canonical.example.org.",
              &rr_cname_},
             {"cname.example.org. 300 IN A 192.0.2.3", &rr_cname_a_},
             {"dname.example.org. 300 IN DNAME target.example.org.",
diff --git a/src/lib/datasrc/tests/memory_datasrc_unittest.cc b/src/lib/datasrc/tests/memory_datasrc_unittest.cc
index 81eb3ca..f7a478b 100644
--- a/src/lib/datasrc/tests/memory_datasrc_unittest.cc
+++ b/src/lib/datasrc/tests/memory_datasrc_unittest.cc
@@ -347,7 +347,7 @@ public:
             {"example.org. 300 IN A 192.0.2.1", &rr_a_},
             {"ns.example.org. 300 IN A 192.0.2.2", &rr_ns_a_},
             {"ns.example.org. 300 IN AAAA 2001:db8::2", &rr_ns_aaaa_},
-            {"cname.example.org. 300 IN CNAME canonical.example.org",
+            {"cname.example.org. 300 IN CNAME canonical.example.org.",
              &rr_cname_},
             {"cname.example.org. 300 IN A 192.0.2.3", &rr_cname_a_},
             {"dname.example.org. 300 IN DNAME target.example.org.",
diff --git a/src/lib/dns/rdata/generic/cname_5.cc b/src/lib/dns/rdata/generic/cname_5.cc
index ba225f9..66c9ceb 100644
--- a/src/lib/dns/rdata/generic/cname_5.cc
+++ b/src/lib/dns/rdata/generic/cname_5.cc
@@ -32,8 +32,25 @@ using isc::dns::rdata::generic::detail::createNameFromLexer;
 // BEGIN_RDATA_NAMESPACE
 
 CNAME::CNAME(const std::string& namestr) :
-    cname_(namestr)
-{}
+    // Fill in dummy name and replace it soon below.
+    cname_(Name::ROOT_NAME())
+{
+    try {
+        std::istringstream ss(namestr);
+        MasterLexer lexer;
+        lexer.pushSource(ss);
+
+        cname_ = createNameFromLexer(lexer, NULL);
+
+        if (lexer.getNextToken().getType() != MasterToken::END_OF_FILE) {
+            isc_throw(InvalidRdataText, "extra input text for CNAME: "
+                      << namestr);
+        }
+    } catch (const MasterLexer::LexerError& ex) {
+        isc_throw(InvalidRdataText, "Failed to construct CNAME from '" <<
+                  namestr << "': " << ex.what());
+    }
+}
 
 CNAME::CNAME(InputBuffer& buffer, size_t) :
     Rdata(), cname_(buffer)
diff --git a/src/lib/dns/tests/rdata_cname_unittest.cc b/src/lib/dns/tests/rdata_cname_unittest.cc
index eda3aef..e234b00 100644
--- a/src/lib/dns/tests/rdata_cname_unittest.cc
+++ b/src/lib/dns/tests/rdata_cname_unittest.cc
@@ -36,8 +36,8 @@ class Rdata_CNAME_Test : public RdataTest {
     // there's nothing to specialize
 };
 
-const generic::CNAME rdata_cname("cn.example.com");
-const generic::CNAME rdata_cname2("cn2.example.com");
+const generic::CNAME rdata_cname("cn.example.com.");
+const generic::CNAME rdata_cname2("cn2.example.com.");
 const uint8_t wiredata_cname[] = {
     0x02, 0x63, 0x6e, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x03,
     0x63, 0x6f, 0x6d, 0x00 };
@@ -50,16 +50,16 @@ const uint8_t wiredata_cname2[] = {
     0x03, 0x63, 0x6e, 0x32, 0xc0, 0x03 };
 
 TEST_F(Rdata_CNAME_Test, createFromText) {
-    EXPECT_EQ(0, rdata_cname.compare(generic::CNAME("cn.example.com")));
+    EXPECT_EQ(0, rdata_cname.compare(generic::CNAME("cn.example.com.")));
     // explicitly add a trailing dot.  should be the same RDATA.
     EXPECT_EQ(0, rdata_cname.compare(generic::CNAME("cn.example.com.")));
     // should be case sensitive.
-    EXPECT_EQ(0, rdata_cname.compare(generic::CNAME("CN.EXAMPLE.COM")));
+    EXPECT_EQ(0, rdata_cname.compare(generic::CNAME("CN.EXAMPLE.COM.")));
     // RDATA of a class-independent type should be recognized for any
     // "unknown" class.
     EXPECT_EQ(0, rdata_cname.compare(*createRdata(RRType("CNAME"),
                                                   RRClass(65000),
-                                                  "cn.example.com")));
+                                                  "cn.example.com.")));
 }
 
 TEST_F(Rdata_CNAME_Test, createFromWire) {
@@ -79,7 +79,7 @@ TEST_F(Rdata_CNAME_Test, createFromWire) {
                                       "rdata_cname_fromWire", 71),
                  DNSMessageFORMERR);
 
-    EXPECT_EQ(0, generic::CNAME("cn2.example.com").compare(
+    EXPECT_EQ(0, generic::CNAME("cn2.example.com.").compare(
                   *rdataFactoryFromFile(RRType("CNAME"), RRClass("IN"),
                                         "rdata_cname_fromWire", 55)));
     EXPECT_THROW(*rdataFactoryFromFile(RRType("CNAME"), RRClass("IN"),
diff --git a/src/lib/dns/tests/zone_checker_unittest.cc b/src/lib/dns/tests/zone_checker_unittest.cc
index 115587f..ba2c69d 100644
--- a/src/lib/dns/tests/zone_checker_unittest.cc
+++ b/src/lib/dns/tests/zone_checker_unittest.cc
@@ -218,7 +218,7 @@ TEST_F(ZoneCheckerTest, checkNSData) {
     // If there's a CNAME at the name instead, it's an error.
     rrsets_->removeRRset(Name("*.example.com"), zclass_, RRType::A());
     RRsetPtr cname(new RRset(ns_name, zclass_, RRType::CNAME(), RRTTL(60)));
-    cname->addRdata(generic::CNAME("cname.example.com"));
+    cname->addRdata(generic::CNAME("cname.example.com."));
     rrsets_->addRRset(cname);
     EXPECT_FALSE(checkZone(zname_, zclass_, *rrsets_, callbacks_));
     expected_errors_.push_back("zone example.com/IN: NS 'ns.example.com' is "
diff --git a/src/lib/python/isc/testutils/rrset_utils.py b/src/lib/python/isc/testutils/rrset_utils.py
index 7eac772..7d54063 100644
--- a/src/lib/python/isc/testutils/rrset_utils.py
+++ b/src/lib/python/isc/testutils/rrset_utils.py
@@ -53,7 +53,7 @@ def create_ns(nsname, name=Name('example.com'), ttl=3600):
     rrset.add_rdata(Rdata(RRType.NS(), RRClass.IN(), nsname))
     return rrset
 
-def create_cname(target='target.example.com', name=Name('example.com'),
+def create_cname(target='target.example.com.', name=Name('example.com'),
                  ttl=3600):
     rrset = RRset(name, RRClass.IN(), RRType.CNAME(), RRTTL(ttl))
     rrset.add_rdata(Rdata(RRType.CNAME(), RRClass.IN(), target))
diff --git a/src/lib/resolve/tests/response_classifier_unittest.cc b/src/lib/resolve/tests/response_classifier_unittest.cc
index 23c8666..30aeabb 100644
--- a/src/lib/resolve/tests/response_classifier_unittest.cc
+++ b/src/lib/resolve/tests/response_classifier_unittest.cc
@@ -131,9 +131,9 @@ public:
 
         // ... the CNAME records
         rrs_in_cname_www1->addRdata(ConstRdataPtr(
-            new CNAME("www.example.com")));
+            new CNAME("www.example.com.")));
         rrs_in_cname_www2->addRdata(ConstRdataPtr(
-            new CNAME("www1.example.com")));
+            new CNAME("www1.example.com.")));
     }
 
     Message     msg_a;              // Pointer to message in RENDER state



More information about the bind10-changes mailing list