[svn] commit: r2482 - in /branches/trac256/src/lib: datasrc/ dns/ dns/rdata/generic/ dns/tests/ dns/util/ exceptions/

BIND 10 source code commits bind10-changes at lists.isc.org
Sun Jul 11 06:21:40 UTC 2010


Author: jinmei
Date: Sun Jul 11 06:21:39 2010
New Revision: 2482

Log:
for trac #256: completely revised the base32(hex) implementation by
generalizing the base64 logiic.  fully detailed tests are provided which now
pass.  documentation was also provided.
using this opportunity I moved non DNS helper classes/functions to a separate
'util' directory to make it clearer which  files are for the public API.

Added:
    branches/trac256/src/lib/dns/tests/base32hex_unittest.cc
      - copied, changed from r2481, branches/trac256/src/lib/dns/tests/base32_unittest.cc
    branches/trac256/src/lib/dns/util/
    branches/trac256/src/lib/dns/util/base32hex.h
      - copied, changed from r2481, branches/trac256/src/lib/dns/base32.h
    branches/trac256/src/lib/dns/util/base32hex_from_binary.h
    branches/trac256/src/lib/dns/util/base64.h
      - copied, changed from r2481, branches/trac256/src/lib/dns/base64.h
    branches/trac256/src/lib/dns/util/base_n.cc
      - copied, changed from r2481, branches/trac256/src/lib/dns/base64.cc
    branches/trac256/src/lib/dns/util/binary_from_base32hex.h
    branches/trac256/src/lib/dns/util/hex.cc
      - copied, changed from r2481, branches/trac256/src/lib/dns/hex.cc
    branches/trac256/src/lib/dns/util/hex.h
      - copied unchanged from r2481, branches/trac256/src/lib/dns/hex.h
    branches/trac256/src/lib/dns/util/sha1.cc
      - copied, changed from r2481, branches/trac256/src/lib/dns/sha1.cc
    branches/trac256/src/lib/dns/util/sha1.h
      - copied unchanged from r2481, branches/trac256/src/lib/dns/sha1.h
Removed:
    branches/trac256/src/lib/dns/base32.cc
    branches/trac256/src/lib/dns/base32.h
    branches/trac256/src/lib/dns/base64.cc
    branches/trac256/src/lib/dns/base64.h
    branches/trac256/src/lib/dns/hex.cc
    branches/trac256/src/lib/dns/hex.h
    branches/trac256/src/lib/dns/sha1.cc
    branches/trac256/src/lib/dns/sha1.h
    branches/trac256/src/lib/dns/tests/base32_unittest.cc
Modified:
    branches/trac256/src/lib/datasrc/data_source.cc
    branches/trac256/src/lib/dns/Makefile.am
    branches/trac256/src/lib/dns/rdata/generic/dnskey_48.cc
    branches/trac256/src/lib/dns/rdata/generic/ds_43.cc
    branches/trac256/src/lib/dns/rdata/generic/nsec3_50.cc
    branches/trac256/src/lib/dns/rdata/generic/nsec3param_51.cc
    branches/trac256/src/lib/dns/rdata/generic/nsec_47.cc
    branches/trac256/src/lib/dns/rdata/generic/rrsig_46.cc
    branches/trac256/src/lib/dns/tests/Makefile.am
    branches/trac256/src/lib/dns/tests/base64_unittest.cc
    branches/trac256/src/lib/dns/tests/hex_unittest.cc
    branches/trac256/src/lib/dns/tests/rdata_dnskey_unittest.cc
    branches/trac256/src/lib/dns/tests/rdata_nsec3_unittest.cc
    branches/trac256/src/lib/dns/tests/rdata_nsec3param_unittest.cc
    branches/trac256/src/lib/dns/tests/rdata_rrsig_unittest.cc
    branches/trac256/src/lib/dns/tests/sha1_unittest.cc
    branches/trac256/src/lib/exceptions/exceptions.h

Modified: branches/trac256/src/lib/datasrc/data_source.cc
==============================================================================
--- branches/trac256/src/lib/datasrc/data_source.cc (original)
+++ branches/trac256/src/lib/datasrc/data_source.cc Sun Jul 11 06:21:39 2010
@@ -28,14 +28,14 @@
 #include <datasrc/data_source.h>
 #include <datasrc/query.h>
 
-#include <dns/base32.h>
+#include <dns/util/base32hex.h>
 #include <dns/buffer.h>
 #include <dns/message.h>
 #include <dns/name.h>
 #include <dns/rdataclass.h>
 #include <dns/rrset.h>
 #include <dns/rrsetlist.h>
-#include <dns/sha1.h>
+#include <dns/util/sha1.h>
 
 #include <cc/data.h>
 
@@ -1234,7 +1234,7 @@
         inlength = SHA1_HASHSIZE;
     } while (n++ < iterations_);
 
-    return (encodeBase32(vector<uint8_t>(digest, digest + SHA1_HASHSIZE)));
+    return (encodeBase32Hex(vector<uint8_t>(digest, digest + SHA1_HASHSIZE)));
 }
 
 //

Modified: branches/trac256/src/lib/dns/Makefile.am
==============================================================================
--- branches/trac256/src/lib/dns/Makefile.am (original)
+++ branches/trac256/src/lib/dns/Makefile.am Sun Jul 11 06:21:39 2010
@@ -57,12 +57,13 @@
 
 lib_LTLIBRARIES = libdns++.la
 
-libdns___la_SOURCES = base32.h base32.cc
-libdns___la_SOURCES += base64.h base64.cc
+libdns___la_SOURCES = util/base32hex.h util/base64.h util/base_n.cc
+libdns___la_SOURCES += util/base32hex_from_binary.h
+libdns___la_SOURCES += util/binary_from_base32hex.h
 libdns___la_SOURCES += buffer.h
 libdns___la_SOURCES += dnssectime.h dnssectime.cc
 libdns___la_SOURCES += exceptions.h exceptions.cc
-libdns___la_SOURCES += hex.h hex.cc
+libdns___la_SOURCES += util/hex.h util/hex.cc
 libdns___la_SOURCES += message.h message.cc
 libdns___la_SOURCES += messagerenderer.h messagerenderer.cc
 libdns___la_SOURCES += name.h name.cc
@@ -74,7 +75,7 @@
 libdns___la_SOURCES += rrttl.h rrttl.cc
 libdns___la_SOURCES += rrtype.cc
 libdns___la_SOURCES += question.h question.cc
-libdns___la_SOURCES += sha1.h sha1.cc
+libdns___la_SOURCES += util/sha1.h util/sha1.cc
 libdns___la_SOURCES += tsig.h tsig.cc
 
 nodist_libdns___la_SOURCES = rdataclass.cc rrclass.h rrtype.h
@@ -105,9 +106,6 @@
 	rrtype.h \
 	tsig.h
 # Purposely not installing these headers:
-# base32.h # used only internally, and not actually DNS specific
-# base64.h # used only internally, and not actually DNS specific
-# hex.h # used only internally, and not actually DNS specific
-# sha1.h # used only internally, and not actually DNS specific
+# util/*.h: used only internally, and not actually DNS specific
 # rrclass-placeholder.h
 # rrtype-placeholder.h

Modified: branches/trac256/src/lib/dns/rdata/generic/dnskey_48.cc
==============================================================================
--- branches/trac256/src/lib/dns/rdata/generic/dnskey_48.cc (original)
+++ branches/trac256/src/lib/dns/rdata/generic/dnskey_48.cc Sun Jul 11 06:21:39 2010
@@ -22,7 +22,7 @@
 #include <boost/lexical_cast.hpp>
 #include <boost/foreach.hpp>
 
-#include <dns/base64.h>
+#include <dns/util/base64.h>
 #include <dns/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/name.h>

Modified: branches/trac256/src/lib/dns/rdata/generic/ds_43.cc
==============================================================================
--- branches/trac256/src/lib/dns/rdata/generic/ds_43.cc (original)
+++ branches/trac256/src/lib/dns/rdata/generic/ds_43.cc Sun Jul 11 06:21:39 2010
@@ -22,7 +22,7 @@
 #include <boost/lexical_cast.hpp>
 
 #include <dns/buffer.h>
-#include <dns/hex.h>
+#include <dns/util/hex.h>
 #include <dns/messagerenderer.h>
 #include <dns/name.h>
 #include <dns/rdata.h>

Modified: branches/trac256/src/lib/dns/rdata/generic/nsec3_50.cc
==============================================================================
--- branches/trac256/src/lib/dns/rdata/generic/nsec3_50.cc (original)
+++ branches/trac256/src/lib/dns/rdata/generic/nsec3_50.cc Sun Jul 11 06:21:39 2010
@@ -22,10 +22,10 @@
 
 #include <boost/lexical_cast.hpp>
 
-#include <dns/base32.h>
+#include <dns/util/base32hex.h>
 #include <dns/buffer.h>
 #include <dns/exceptions.h>
-#include <dns/hex.h>
+#include <dns/util/hex.h>
 #include <dns/messagerenderer.h>
 #include <dns/name.h>
 #include <dns/rrtype.h>
@@ -88,7 +88,7 @@
     if (iss.bad() || iss.fail()) {
         isc_throw(InvalidRdataText, "Invalid NSEC3 hash algorithm");
     }
-    decodeBase32(nextstr, next);
+    decodeBase32Hex(nextstr, next);
 
     uint8_t bitmap[8 * 1024];       // 64k bits
     vector<uint8_t> typebits;
@@ -237,7 +237,7 @@
         " " + lexical_cast<string>(static_cast<int>(impl_->flags_)) +
         " " + lexical_cast<string>(static_cast<int>(impl_->iterations_)) +
         " " + encodeHex(impl_->salt_) +
-        " " + encodeBase32(impl_->next_) + s.str());
+        " " + encodeBase32Hex(impl_->next_) + s.str());
 }
 
 void

Modified: branches/trac256/src/lib/dns/rdata/generic/nsec3param_51.cc
==============================================================================
--- branches/trac256/src/lib/dns/rdata/generic/nsec3param_51.cc (original)
+++ branches/trac256/src/lib/dns/rdata/generic/nsec3param_51.cc Sun Jul 11 06:21:39 2010
@@ -22,7 +22,7 @@
 #include <boost/lexical_cast.hpp>
 
 #include <dns/buffer.h>
-#include <dns/hex.h>
+#include <dns/util/hex.h>
 #include <dns/messagerenderer.h>
 #include <dns/name.h>
 #include <dns/rdata.h>

Modified: branches/trac256/src/lib/dns/rdata/generic/nsec_47.cc
==============================================================================
--- branches/trac256/src/lib/dns/rdata/generic/nsec_47.cc (original)
+++ branches/trac256/src/lib/dns/rdata/generic/nsec_47.cc Sun Jul 11 06:21:39 2010
@@ -19,7 +19,7 @@
 #include <sstream>
 #include <vector>
 
-#include <dns/base64.h>
+#include <dns/util/base64.h>
 #include <dns/buffer.h>
 #include <dns/exceptions.h>
 #include <dns/messagerenderer.h>

Modified: branches/trac256/src/lib/dns/rdata/generic/rrsig_46.cc
==============================================================================
--- branches/trac256/src/lib/dns/rdata/generic/rrsig_46.cc (original)
+++ branches/trac256/src/lib/dns/rdata/generic/rrsig_46.cc Sun Jul 11 06:21:39 2010
@@ -22,7 +22,7 @@
 
 #include <boost/lexical_cast.hpp>
 
-#include <dns/base64.h>
+#include <dns/util/base64.h>
 #include <dns/buffer.h>
 #include <dns/dnssectime.h>
 #include <dns/messagerenderer.h>

Modified: branches/trac256/src/lib/dns/tests/Makefile.am
==============================================================================
--- branches/trac256/src/lib/dns/tests/Makefile.am (original)
+++ branches/trac256/src/lib/dns/tests/Makefile.am Sun Jul 11 06:21:39 2010
@@ -31,7 +31,7 @@
 run_unittests_SOURCES += question_unittest.cc
 run_unittests_SOURCES += rrparamregistry_unittest.cc
 run_unittests_SOURCES += message_unittest.cc
-run_unittests_SOURCES += base32_unittest.cc
+run_unittests_SOURCES += base32hex_unittest.cc
 run_unittests_SOURCES += base64_unittest.cc
 run_unittests_SOURCES += hex_unittest.cc
 run_unittests_SOURCES += sha1_unittest.cc

Modified: branches/trac256/src/lib/dns/tests/base64_unittest.cc
==============================================================================
--- branches/trac256/src/lib/dns/tests/base64_unittest.cc (original)
+++ branches/trac256/src/lib/dns/tests/base64_unittest.cc Sun Jul 11 06:21:39 2010
@@ -18,11 +18,14 @@
 #include <utility>
 #include <vector>
 
-#include <dns/base64.h>
+#include <exceptions/exceptions.h>
+
+#include <dns/util/base64.h>
 
 #include <gtest/gtest.h>
 
 using namespace std;
+using namespace isc;
 using namespace isc::dns;
 
 namespace {
@@ -67,18 +70,18 @@
     decodeCheck("Zm9vYmE=\n", decoded_data, "fooba");
 
     // only up to 2 padding characters are allowed
-    EXPECT_THROW(decodeBase64("A===", decoded_data), BadBase64String);
-    EXPECT_THROW(decodeBase64("A= ==", decoded_data), BadBase64String);
+    EXPECT_THROW(decodeBase64("A===", decoded_data), BadValue);
+    EXPECT_THROW(decodeBase64("A= ==", decoded_data), BadValue);
 
     // intermediate padding isn't allowed
-    EXPECT_THROW(decodeBase64("YmE=YmE=", decoded_data), BadBase64String);
+    EXPECT_THROW(decodeBase64("YmE=YmE=", decoded_data), BadValue);
 
     // Non canonical form isn't allowed.
     // Z => 25(011001), m => 38(100110), 9 => 60(111101), so the padding
     // byte would be 0100 0000.
-    EXPECT_THROW(decodeBase64("Zm9=", decoded_data), BadBase64String);
+    EXPECT_THROW(decodeBase64("Zm9=", decoded_data), BadValue);
     // Same for the 1st padding byte.  This would make it 01100000.
-    EXPECT_THROW(decodeBase64("Zm==", decoded_data), BadBase64String);
+    EXPECT_THROW(decodeBase64("Zm==", decoded_data), BadValue);
 }
 
 TEST_F(Base64Test, encode) {

Modified: branches/trac256/src/lib/dns/tests/hex_unittest.cc
==============================================================================
--- branches/trac256/src/lib/dns/tests/hex_unittest.cc (original)
+++ branches/trac256/src/lib/dns/tests/hex_unittest.cc Sun Jul 11 06:21:39 2010
@@ -19,7 +19,7 @@
 #include <vector>
 #include <string>
 
-#include <dns/hex.h>
+#include <dns/util/hex.h>
 
 #include <gtest/gtest.h>
 

Modified: branches/trac256/src/lib/dns/tests/rdata_dnskey_unittest.cc
==============================================================================
--- branches/trac256/src/lib/dns/tests/rdata_dnskey_unittest.cc (original)
+++ branches/trac256/src/lib/dns/tests/rdata_dnskey_unittest.cc Sun Jul 11 06:21:39 2010
@@ -16,7 +16,8 @@
 
 #include <string>
 
-#include <dns/base64.h>
+#include <exceptions/exceptions.h>
+
 #include <dns/buffer.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
@@ -31,6 +32,7 @@
 
 using isc::UnitTestUtil;
 using namespace std;
+using namespace isc;
 using namespace isc::dns;
 using namespace isc::dns::rdata;
 
@@ -71,8 +73,7 @@
                  InvalidRdataText);
     EXPECT_THROW(generic::DNSKEY("257 3 500 BAAAAAAAAAAAD"),
                  InvalidRdataText);
-    EXPECT_THROW(generic::DNSKEY("257 3 5 BAAAAAAAAAAAD"),
-                 BadBase64String);
+    EXPECT_THROW(generic::DNSKEY("257 3 5 BAAAAAAAAAAAD"), BadValue);
 #if 0
     // Should this be allowed?  Probably not.  But the test currently fails.
     EXPECT_THROW(generic::DNSKEY("257 3 5BEAAEFTd"),

Modified: branches/trac256/src/lib/dns/tests/rdata_nsec3_unittest.cc
==============================================================================
--- branches/trac256/src/lib/dns/tests/rdata_nsec3_unittest.cc (original)
+++ branches/trac256/src/lib/dns/tests/rdata_nsec3_unittest.cc Sun Jul 11 06:21:39 2010
@@ -16,10 +16,11 @@
 
 #include <string>
 
-#include <dns/base32.h>
+#include <exceptions/exceptions.h>
+
 #include <dns/buffer.h>
 #include <dns/exceptions.h>
-#include <dns/hex.h>
+#include <dns/util/hex.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
@@ -33,16 +34,19 @@
 
 using isc::UnitTestUtil;
 using namespace std;
+using namespace isc;
 using namespace isc::dns;
 using namespace isc::dns::rdata;
 
 namespace {
 class Rdata_NSEC3_Test : public RdataTest {
     // there's nothing to specialize
+public:
+    Rdata_NSEC3_Test() :
+        nsec3_txt("1 1 1 D399EAAB H9RSFB7FPF2L8HG35CMPC765TDK23RP6 "
+                  "NS SOA RRSIG DNSKEY NSEC3PARAM") {}
+    string nsec3_txt;
 };
-string nsec3_txt("1 1 1 D399EAAB H9RSFB7FPF2L8HG35CMPC765TDK23RP6 "
-                 "NS SOA RRSIG DNSKEY NSEC3PARAM");
-
 
 TEST_F(Rdata_NSEC3_Test, toText)
 {
@@ -50,8 +54,7 @@
     EXPECT_EQ(nsec3_txt, rdata_nsec3.toText());
 }
 
-TEST_F(Rdata_NSEC3_Test, badText)
-{
+TEST_F(Rdata_NSEC3_Test, badText) {
     EXPECT_THROW(generic::NSEC3 rdata_nsec3("1 1 1 ADDAFEE "
                                             "0123456789ABCDEFGHIJKLMNOPQRSTUV "
                                             "BIFF POW SPOON"),
@@ -59,7 +62,7 @@
     EXPECT_THROW(generic::NSEC3 rdata_nsec3("1 1 1 ADDAFEE "
                                             "WXYZWXYZWXYZ=WXYZWXYZ==WXYZWXYZW "
                                             "A NS SOA"),
-                 BadBase32String);
+                 BadValue);     // bad base32hex
     EXPECT_THROW(generic::NSEC3 rdata_nsec3("1000000 1 1 ADDAFEE "
                                             "0123456789ABCDEFGHIJKLMNOPQRSTUV "
                                             "A NS SOA"),
@@ -72,12 +75,12 @@
                                             "0123456789ABCDEFGHIJKLMNOPQRSTUV "
                                             "A NS SOA"),
                  InvalidRdataText);
+}
 
-#if 0 // this currently fails
+TEST_F(Rdata_NSEC3_Test, DISABLED_badText) { // this currently fails
     EXPECT_THROW(generic::NSEC3(
                      "1 1 1D399EAAB H9RSFB7FPF2L8HG35CMPC765TDK23RP6 "
                      "NS SOA RRSIG DNSKEY NSEC3PARAM"), InvalidRdataText);
-#endif
 }
 
 TEST_F(Rdata_NSEC3_Test, createFromWire)

Modified: branches/trac256/src/lib/dns/tests/rdata_nsec3param_unittest.cc
==============================================================================
--- branches/trac256/src/lib/dns/tests/rdata_nsec3param_unittest.cc (original)
+++ branches/trac256/src/lib/dns/tests/rdata_nsec3param_unittest.cc Sun Jul 11 06:21:39 2010
@@ -16,9 +16,9 @@
 
 #include <string>
 
-#include <dns/base32.h>
+#include <dns/util/base32hex.h>
 #include <dns/buffer.h>
-#include <dns/hex.h>
+#include <dns/util/hex.h>
 #include <dns/messagerenderer.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>

Modified: branches/trac256/src/lib/dns/tests/rdata_rrsig_unittest.cc
==============================================================================
--- branches/trac256/src/lib/dns/tests/rdata_rrsig_unittest.cc (original)
+++ branches/trac256/src/lib/dns/tests/rdata_rrsig_unittest.cc Sun Jul 11 06:21:39 2010
@@ -14,7 +14,8 @@
 
 // $Id$
 
-#include <dns/base64.h>
+#include <exceptions/exceptions.h>
+
 #include <dns/buffer.h>
 #include <dns/dnssectime.h>
 #include <dns/messagerenderer.h>
@@ -30,6 +31,7 @@
 
 using isc::UnitTestUtil;
 using namespace std;
+using namespace isc;
 using namespace isc::dns;
 using namespace isc::dns::rdata;
 
@@ -50,8 +52,7 @@
 
 }
 
-TEST_F(Rdata_RRSIG_Test, badText)
-{
+TEST_F(Rdata_RRSIG_Test, badText) {
     EXPECT_THROW(const generic::RRSIG sig("SPORK"), InvalidRdataText);
     EXPECT_THROW(const generic::RRSIG sig("A 555 4 43200 "
                      "20100223214617 20100222214617 8496 isc.org. "
@@ -83,16 +84,17 @@
                      "diGdLIrFabqr72af2rUq+UDBKMWXujwZTZUTws32sVldDPk/"
                      "NbuacJM25fQXfv5mO3Af7TOoow3AjMaVG9icjCW0V55WcWQU"
                      "f49t+sXKPzbipN9g+s1ZPiIyofc="), InvalidRdataText);
-    EXPECT_THROW(const generic::RRSIG sig("A 5 4 43200 "
+    EXPECT_THROW(const generic::RRSIG sig(
+                     "A 5 4 43200 "
                      "20100223214617 20100222214617 8496 isc.org. "
                      "EEeeeeeeEEEeeeeeeGaaahAAAAAAAAHHHHHHHHHHH!="),
-                     BadBase64String);
+                 BadValue);     // bad base64 input
+}
 
-#if 0                           // this currently fails
+TEST_F(Rdata_RRSIG_Test, DISABLED_badText) { // this currently fails
     // no space between the tag and signer
     EXPECT_THROW(generic::RRSIG("A 5 4 43200 20100223214617 20100222214617 "
                                 "8496isc.org. ofc="), InvalidRdataText);
-#endif
 }
 
 TEST_F(Rdata_RRSIG_Test, toWireRenderer)

Modified: branches/trac256/src/lib/dns/tests/sha1_unittest.cc
==============================================================================
--- branches/trac256/src/lib/dns/tests/sha1_unittest.cc (original)
+++ branches/trac256/src/lib/dns/tests/sha1_unittest.cc Sun Jul 11 06:21:39 2010
@@ -17,7 +17,7 @@
 #include <stdint.h>
 #include <string>
 
-#include <dns/sha1.h>
+#include <dns/util/sha1.h>
 
 #include <gtest/gtest.h>
 

Modified: branches/trac256/src/lib/exceptions/exceptions.h
==============================================================================
--- branches/trac256/src/lib/exceptions/exceptions.h (original)
+++ branches/trac256/src/lib/exceptions/exceptions.h Sun Jul 11 06:21:39 2010
@@ -104,7 +104,7 @@
 };
 
 ///
-/// \brief A standard DNS module exception that is thrown if a parameter give
+/// \brief A generic exception that is thrown if a parameter given
 /// to a method would refer to or modify out-of-range data.
 ///
 class OutOfRange : public Exception {
@@ -114,7 +114,17 @@
 };
 
 ///
-/// \brief A standard DNS module exception that is thrown when an unexpected
+/// \brief A generic exception that is thrown if a parameter given
+/// to a method is considered invalid in that context.
+///
+class BadValue : public Exception {
+public:
+    BadValue(const char* file, size_t line, const char* what) :
+        isc::Exception(file, line, what) {}
+};
+
+///
+/// \brief A generic exception that is thrown when an unexpected
 /// error condition occurs.
 ///
 class Unexpected : public Exception {




More information about the bind10-changes mailing list