BIND 10 master, updated. 199af97d473d4b67b8a9a631296f543b92ef8fcc Merge branch 'master' into trac2164

BIND 10 source code commits bind10-changes at lists.isc.org
Wed Aug 15 12:44:26 UTC 2012


The branch, master has been updated
       via  199af97d473d4b67b8a9a631296f543b92ef8fcc (commit)
       via  d8e429d65956430a292e8462c111cc1a330f3b66 (commit)
       via  eaef6b237a71811637b5c8c5c276962a3839a85f (commit)
       via  2bf182fa361569c5d8c3d447a475a7960ef5e229 (commit)
       via  4232ef35211607d34c1b14fe73a069a6238b2d9c (commit)
       via  8e4054a5fc964eeb9dc84a9ec2400a5c1eace19e (commit)
       via  98ce97d9b83b6bf98f44626713a268c2db4de6f9 (commit)
       via  3ed457da1be08a3ed59186cd65f040d5d8fc5aa2 (commit)
       via  ceec0dc9bbe97153a0b39f2e387fbc53be81a2e3 (commit)
       via  0c63626ea1eca6b3fd4c2ce7eb659c363f58ed36 (commit)
       via  932c5ac5023be9eb37bc8eb820006152940f49a9 (commit)
      from  76f733925b3f3560cfc2ee96d2a19905b623bfc3 (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 199af97d473d4b67b8a9a631296f543b92ef8fcc
Merge: d8e429d 76f7339
Author: Mukund Sivaraman <muks at isc.org>
Date:   Wed Aug 15 16:39:04 2012 +0530

    Merge branch 'master' into trac2164

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

Summary of changes:
 src/lib/datasrc/memory_datasrc.cc          |    5 ++
 src/lib/datasrc/rbnode_rrset.h             |    2 +
 src/lib/dns/rrset.cc                       |   13 ++++-
 src/lib/dns/rrset.h                        |   30 +++++++++-
 src/lib/dns/tests/message_unittest.cc      |   37 ++++++++++++
 src/lib/dns/tests/rrset_unittest.cc        |   87 ++++++++++++++++++++++++++++
 src/lib/dns/tests/testdata/Makefile.am     |    1 +
 src/lib/dns/tests/testdata/message_toWire6 |   48 +++++++++++++++
 8 files changed, 220 insertions(+), 3 deletions(-)
 create mode 100644 src/lib/dns/tests/testdata/message_toWire6

-----------------------------------------------------------------------
diff --git a/src/lib/datasrc/memory_datasrc.cc b/src/lib/datasrc/memory_datasrc.cc
index 90b5917..c6f15fb 100644
--- a/src/lib/datasrc/memory_datasrc.cc
+++ b/src/lib/datasrc/memory_datasrc.cc
@@ -623,6 +623,11 @@ RBNodeRRset::getRRsig() const {
     return (impl_->rrset_->getRRsig());
 }
 
+unsigned int
+RBNodeRRset::getRRsigDataCount() const {
+    return (impl_->rrset_->getRRsigDataCount());
+}
+
 void
 RBNodeRRset::addRRsig(const ConstRdataPtr& rdata) {
     AbstractRRset* p = const_cast<AbstractRRset*>(impl_->rrset_.get());
diff --git a/src/lib/datasrc/rbnode_rrset.h b/src/lib/datasrc/rbnode_rrset.h
index 3161cdb..1c23e05 100644
--- a/src/lib/datasrc/rbnode_rrset.h
+++ b/src/lib/datasrc/rbnode_rrset.h
@@ -154,6 +154,8 @@ public:
 
     virtual isc::dns::RRsetPtr getRRsig() const;
 
+    virtual unsigned int getRRsigDataCount() const;
+
     // With all the RRsig methods, we have the problem that we store the
     // underlying RRset using a ConstRRsetPtr - a pointer to a "const" RRset -
     // but we need to modify it by adding or removing an RRSIG.  We overcome
diff --git a/src/lib/dns/rrset.cc b/src/lib/dns/rrset.cc
index 4d8e262..2bdb71f 100644
--- a/src/lib/dns/rrset.cc
+++ b/src/lib/dns/rrset.cc
@@ -143,8 +143,8 @@ AbstractRRset::isSameKind(const AbstractRRset& other) const {
   // names late in the list too, as these are expensive. So we compare
   // types first, names second and classes last.
   return (getType() == other.getType() &&
-	  getName() == other.getName() &&
-	  getClass() == other.getClass());
+          getName() == other.getName() &&
+          getClass() == other.getClass());
 }
 
 ostream&
@@ -249,6 +249,15 @@ RRset::RRset(const Name& name, const RRClass& rrclass,
 
 RRset::~RRset() {}
 
+unsigned int
+RRset::getRRsigDataCount() const {
+    if (rrsig_) {
+        return (rrsig_->getRdataCount());
+    } else {
+        return (0);
+    }
+}
+
 namespace {
 class BasicRdataIterator : public RdataIterator {
 private:
diff --git a/src/lib/dns/rrset.h b/src/lib/dns/rrset.h
index 74380ce..6c73d60 100644
--- a/src/lib/dns/rrset.h
+++ b/src/lib/dns/rrset.h
@@ -420,6 +420,15 @@ public:
     /// \return Pointer to the associated RRSIG RRset or null if there is none.
     virtual RRsetPtr getRRsig() const = 0;
 
+    /// \brief Returns the number of \c RRSIG records associated with
+    /// the \c RRset.
+    ///
+    /// Note that an \c RRset with no RRSIG records may exist, so this
+    /// method may return 0.
+    ///
+    /// \return The number of \c RRSIG records associated.
+    virtual unsigned int getRRsigDataCount() const = 0;
+
     /// \brief Adds RRSIG RRset RRs to the associated RRSIG RRset
     ///
     /// Adds the (assumed) RRSIG rdata the RRSIG RRset associated with this
@@ -764,6 +773,15 @@ public:
         return (RRsetPtr());
     }
 
+    /// \brief Returns the number of \c RRSIG records associated with
+    /// the \c RRset.
+    ///
+    /// \return Always returns 0. Associated RRSIG RRsets are not
+    ///         supported in this class.
+    virtual unsigned int getRRsigDataCount() const {
+        return (0);
+    }
+
     virtual void addRRsig(const rdata::ConstRdataPtr&) {
         isc_throw(NotImplemented,
                   "BasicRRset does not implement the addRRsig() method");
@@ -867,7 +885,17 @@ public:
     virtual void removeRRsig() { rrsig_ = RRsetPtr(); }
 
     /// \brief Return a pointer to this RRset's RRSIG RRset
-    RRsetPtr getRRsig() const { return (rrsig_); }
+    virtual RRsetPtr getRRsig() const { return (rrsig_); }
+
+    /// \brief Returns the number of \c RRSIG records associated with
+    /// the \c RRset.
+    ///
+    /// Note that an \c RRset with no RRSIG records may exist, so this
+    /// method may return 0.
+    ///
+    /// \return The number of \c RRSIG records associated.
+    virtual unsigned int getRRsigDataCount() const;
+
 private:
     RRsetPtr rrsig_;
 };
diff --git a/src/lib/dns/tests/message_unittest.cc b/src/lib/dns/tests/message_unittest.cc
index f30a2ac..8bf3acc 100644
--- a/src/lib/dns/tests/message_unittest.cc
+++ b/src/lib/dns/tests/message_unittest.cc
@@ -743,6 +743,43 @@ TEST_F(MessageTest, toWire) {
                         renderer.getLength(), &data[0], data.size());
 }
 
+TEST_F(MessageTest, toWireSigned) {
+    message_render.setQid(0x75c1);
+    message_render.setOpcode(Opcode::QUERY());
+    message_render.setRcode(Rcode::NOERROR());
+    message_render.setHeaderFlag(Message::HEADERFLAG_QR, true);
+    message_render.setHeaderFlag(Message::HEADERFLAG_RD, true);
+    message_render.setHeaderFlag(Message::HEADERFLAG_AA, true);
+    message_render.addQuestion(Question(Name("test.example.com"), RRClass::IN(),
+                                        RRType::A()));
+
+    rrset_rrsig = RRsetPtr(new RRset(test_name, RRClass::IN(),
+                                     RRType::RRSIG(), RRTTL(3600)));
+    // one signature algorithm (5 = RSA/SHA-1)
+    rrset_rrsig->addRdata(generic::RRSIG("A 5 3 3600 "
+                                         "20000101000000 20000201000000 "
+                                         "12345 example.com. FAKEFAKEFAKE"));
+    // another signature algorithm (3 = DSA/SHA-1)
+    rrset_rrsig->addRdata(generic::RRSIG("A 3 3 3600 "
+                                         "20000101000000 20000201000000 "
+                                         "12345 example.com. FAKEFAKEFAKE"));
+    rrset_a->addRRsig(rrset_rrsig);
+    EXPECT_EQ(2, rrset_a->getRRsigDataCount());
+
+    message_render.addRRset(Message::SECTION_ANSWER, rrset_a, true);
+
+    EXPECT_EQ(1, message_render.getRRCount(Message::SECTION_QUESTION));
+    EXPECT_EQ(4, message_render.getRRCount(Message::SECTION_ANSWER));
+    EXPECT_EQ(0, message_render.getRRCount(Message::SECTION_AUTHORITY));
+    EXPECT_EQ(0, message_render.getRRCount(Message::SECTION_ADDITIONAL));
+
+    message_render.toWire(renderer);
+    vector<unsigned char> data;
+    UnitTestUtil::readWireData("message_toWire6", data);
+    EXPECT_PRED_FORMAT4(UnitTestUtil::matchWireData, renderer.getData(),
+                        renderer.getLength(), &data[0], data.size());
+}
+
 TEST_F(MessageTest, toWireInParseMode) {
     // toWire() isn't allowed in the parse mode.
     EXPECT_THROW(message_parse.toWire(renderer), InvalidMessageOperation);
diff --git a/src/lib/dns/tests/rrset_unittest.cc b/src/lib/dns/tests/rrset_unittest.cc
index c375579..4c80361 100644
--- a/src/lib/dns/tests/rrset_unittest.cc
+++ b/src/lib/dns/tests/rrset_unittest.cc
@@ -272,4 +272,91 @@ TEST_F(RRsetTest, LeftShiftOperator) {
     oss << rrset_a;
     EXPECT_EQ(rrset_a.toText(), oss.str());
 }
+
+class RRsetRRSIGTest : public ::testing::Test {
+protected:
+    RRsetRRSIGTest() : test_name("test.example.com")
+    {
+        rrset_a = new RRset(test_name, RRClass::IN(),
+                            RRType::A(), RRTTL(3600));
+        rrset_a->addRdata(in::A("192.0.2.1"));
+        rrset_a->addRdata(in::A("192.0.2.2"));
+
+        rrset_aaaa = new RRset(test_name, RRClass::IN(),
+                               RRType::AAAA(), RRTTL(3600));
+        rrset_aaaa->addRdata(in::AAAA("2001:db8::1234"));
+
+        rrset_rrsig = RRsetPtr(new RRset(test_name, RRClass::IN(),
+                                         RRType::RRSIG(), RRTTL(3600)));
+        rrset_rrsig->addRdata(generic::RRSIG("AAAA 5 3 7200 20100322084538 "
+                                             "20100220084538 1 example.com "
+                                             "FAKEFAKEFAKEFAKE"));
+        rrset_aaaa->addRRsig(rrset_rrsig);
+    }
+
+    const Name test_name;
+    RRset* rrset_a;           // A RRset with two RDATAs
+    RRset* rrset_aaaa;        // AAAA RRset with one RDATA with RRSIG
+    RRsetPtr rrset_rrsig;       // RRSIG for the AAAA RRset
+};
+
+TEST_F(RRsetRRSIGTest, getRRsig) {
+    RRsetPtr sp = rrset_a->getRRsig();
+    EXPECT_EQ(static_cast<void*>(NULL), sp.get());
+
+    sp = rrset_aaaa->getRRsig();
+    EXPECT_NE(static_cast<void*>(NULL), sp.get());
+}
+
+TEST_F(RRsetRRSIGTest, addRRsig) {
+    RRsetPtr sp = rrset_a->getRRsig();
+    EXPECT_EQ(static_cast<void*>(NULL), sp.get());
+
+    rrset_rrsig = RRsetPtr(new RRset(test_name, RRClass::IN(),
+                                     RRType::RRSIG(), RRTTL(3600)));
+    // one signature algorithm (5 = RSA/SHA-1)
+    rrset_rrsig->addRdata(generic::RRSIG("A 5 3 3600 "
+                                         "20000101000000 20000201000000 "
+                                         "12345 example.com. FAKEFAKEFAKE"));
+    // another signature algorithm (3 = DSA/SHA-1)
+    rrset_rrsig->addRdata(generic::RRSIG("A 3 3 3600 "
+                                         "20000101000000 20000201000000 "
+                                         "12345 example.com. FAKEFAKEFAKE"));
+    rrset_a->addRRsig(rrset_rrsig);
+
+    sp = rrset_a->getRRsig();
+    EXPECT_NE(static_cast<void*>(NULL), sp.get());
+    EXPECT_EQ(2, sp->getRdataCount());
+
+    // add to existing RRSIG
+    rrset_rrsig = RRsetPtr(new RRset(test_name, RRClass::IN(),
+                                     RRType::RRSIG(), RRTTL(3600)));
+    // another signature algorithm (4 = ECC)
+    rrset_rrsig->addRdata(generic::RRSIG("A 4 3 3600 "
+                                         "20000101000000 20000201000000 "
+                                         "12345 example.com. FAKEFAKEFAKE"));
+    rrset_a->addRRsig(rrset_rrsig);
+    EXPECT_EQ(3, sp->getRdataCount());
+}
+
+TEST_F(RRsetRRSIGTest, getRRsigDataCount) {
+    EXPECT_EQ(1, rrset_aaaa->getRRsigDataCount());
+    EXPECT_EQ(0, rrset_a->getRRsigDataCount());
+
+    rrset_rrsig = RRsetPtr(new RRset(test_name, RRClass::IN(),
+                                     RRType::RRSIG(), RRTTL(3600)));
+    // one signature algorithm (5 = RSA/SHA-1)
+    rrset_rrsig->addRdata(generic::RRSIG("A 5 3 3600 "
+                                         "20000101000000 20000201000000 "
+                                         "12345 example.com. FAKEFAKEFAKE"));
+    // another signature algorithm (3 = DSA/SHA-1)
+    rrset_rrsig->addRdata(generic::RRSIG("A 3 3 3600 "
+                                         "20000101000000 20000201000000 "
+                                         "12345 example.com. FAKEFAKEFAKE"));
+    rrset_a->addRRsig(rrset_rrsig);
+    EXPECT_EQ(2, rrset_a->getRRsigDataCount());
+
+    rrset_a->removeRRsig();
+    EXPECT_EQ(0, rrset_a->getRRsigDataCount());
+}
 }
diff --git a/src/lib/dns/tests/testdata/Makefile.am b/src/lib/dns/tests/testdata/Makefile.am
index 9352833..231f7bc 100644
--- a/src/lib/dns/tests/testdata/Makefile.am
+++ b/src/lib/dns/tests/testdata/Makefile.am
@@ -87,6 +87,7 @@ EXTRA_DIST += message_fromWire19.spec message_fromWire20.spec
 EXTRA_DIST += message_fromWire21.spec message_fromWire22.spec
 EXTRA_DIST += message_toWire1 message_toWire2.spec message_toWire3.spec
 EXTRA_DIST += message_toWire4.spec message_toWire5.spec
+EXTRA_DIST += message_toWire6
 EXTRA_DIST += message_toText1.txt message_toText1.spec
 EXTRA_DIST += message_toText2.txt message_toText2.spec
 EXTRA_DIST += message_toText3.txt message_toText3.spec
diff --git a/src/lib/dns/tests/testdata/message_toWire6 b/src/lib/dns/tests/testdata/message_toWire6
new file mode 100644
index 0000000..00185c9
--- /dev/null
+++ b/src/lib/dns/tests/testdata/message_toWire6
@@ -0,0 +1,48 @@
+#
+# A simple DNS query message (with a signed response)
+# ID = 0x75c1
+# QR=1 (response), Opcode=0, AA=1, RD=1 (other fields are 0)
+# QDCOUNT=1, ANCOUNT=2, other COUNTS=0
+# Question: test.example.com. IN A
+# Answer:
+#  test.example.com. 3600 IN A 192.0.2.1
+#  test.example.com. 7200 IN A 192.0.2.2
+#
+75c1 8500
+0001 0004 0000 0000
+#(4) t  e  s  t (7) e  x  a  m  p  l  e (3) c  o  m  .
+ 04 74 65 73 74 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00
+0001 0001
+# same name, fully compressed
+c0 0c
+# TTL=3600, A, IN, RDLENGTH=4, RDATA
+0001 0001 00000e10 0004 c0 00 02 01
+# mostly same, with the slight difference in RDATA
+c0 0c
+0001 0001 00000e10 0004 c0 00 02 02
+
+# signature 1
+
+# same name
+c0 0c
+# RRSIG, IN, TTL=3600, RDLENGTH=0x28 TYPE_COV=A ALGO=5 (RSA/SHA-1) LABELS=3 ORIG_TTL=3600
+002e 0001 00000e10 0028 0001 05 03 00000e10
+# SIG_EXPIRY=20000101000000 SIG_INCEP=20000201000000 KEY_ID=12345
+386d4380 38962200 3039
+#(7) e  x  a  m  p  l  e (3) c  o  m  .
+ 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00
+# FAKEFAKEFAKE
+14 02 84 14 02 84 14 02 84
+
+# signature 2
+
+# same name
+c0 0c
+# RRSIG, IN, TTL=3600, RDLENGTH=0x28 TYPE_COV=A ALGO=3 (DSA/SHA-1) LABELS=3 ORIG_TTL=3600
+002e 0001 00000e10 0028 0001 03 03 00000e10
+# SIG_EXPIRY=20000101000000 SIG_INCEP=20000201000000 KEY_ID=12345
+386d4380 38962200 3039
+#(7) e  x  a  m  p  l  e (3) c  o  m  .
+ 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00
+# FAKEFAKEFAKE
+14 02 84 14 02 84 14 02 84



More information about the bind10-changes mailing list