BIND 10 trac826, updated. 0a707a589746a97c4cb8259f1e28f3c0b58e2352 [trac826] update
BIND 10 source code commits
bind10-changes at lists.isc.org
Sun Oct 23 14:04:47 UTC 2011
The branch, trac826 has been updated
via 0a707a589746a97c4cb8259f1e28f3c0b58e2352 (commit)
from b38415d5eb6577d2d998e92ac5968971613a1743 (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 0a707a589746a97c4cb8259f1e28f3c0b58e2352
Author: Francis Dupont <fdupont at isc.org>
Date: Sun Oct 23 16:04:30 2011 +0200
[trac826] update
Small changes in datasrc, updated Release.log and Debug.log, etc.
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 17 +
AUTHORS => TODO | 0
configure.ac | 26 +-
doc/Doxyfile | 2 +-
src/bin/auth/auth_messages.mes | 1 -
src/bin/auth/query.cc | 115 ++-
src/bin/auth/query.h | 43 +-
src/bin/auth/tests/query_unittest.cc | 269 +++-
src/bin/dhcp6/iface_mgr.h | 1 -
src/bin/msgq/Makefile.am | 2 +-
src/bin/resolver/resolver.cc | 2 +-
src/bin/stats/tests/Makefile.am | 3 +-
src/bin/stats/tests/isc/log_messages/Makefile.am | 7 -
src/bin/stats/tests/isc/log_messages/__init__.py | 18 -
.../tests/isc/log_messages/stats_httpd_messages.py | 16 -
.../stats/tests/isc/log_messages/stats_messages.py | 16 -
src/bin/stats/tests/test_utils.py | 13 +-
src/lib/asiodns/tests/io_service_unittest.cc | 1 -
src/lib/asiolink/io_endpoint.cc | 1 -
src/lib/asiolink/tests/interval_timer_unittest.cc | 1 -
src/lib/asiolink/tests/io_endpoint_unittest.cc | 1 -
src/lib/asiolink/tests/tcp_endpoint_unittest.cc | 2 -
src/lib/asiolink/tests/udp_endpoint_unittest.cc | 2 -
src/lib/cache/message_cache.cc | 2 -
src/lib/cache/rrset_cache.cc | 1 -
src/lib/cache/tests/message_entry_unittest.cc | 1 -
src/lib/cache/tests/rrset_entry_unittest.cc | 1 -
src/lib/datasrc/database.cc | 15 +-
src/lib/datasrc/tests/database_unittest.cc | 142 ++-
src/lib/datasrc/zone.h | 93 +-
src/lib/dns/rdata/generic/nsec_47.cc | 5 +
src/lib/dns/rdata/generic/nsec_47.h | 10 +
src/lib/python/isc/datasrc/datasrc.cc | 4 +
src/lib/python/isc/datasrc/finder_inc.cc | 57 +-
src/lib/python/isc/datasrc/tests/datasrc_test.py | 24 +
src/lib/testutils/dnsmessage_test.h | 28 +-
tests/system/README | 53 +-
tests/system/cleanall.sh | 2 +-
tests/system/common/rndc.conf | 25 +
tests/system/common/rndc.key | 22 +
tests/system/conf.sh.in | 45 +-
tests/system/ixfr/README | 86 ++
tests/system/ixfr/b10-config.db.in | 23 +
tests/system/ixfr/clean_ns.sh | 28 +
tests/system/ixfr/common_tests.sh.in | 78 +
tests/system/ixfr/db.example.common | 1556 ++++++++++++++++++++
tests/system/ixfr/db.example.n0.in | 29 +
tests/system/ixfr/db.example.n2.in | 28 +
tests/system/ixfr/db.example.n2.refresh.in | 28 +
tests/system/ixfr/db.example.n4.in | 31 +
tests/system/ixfr/db.example.n6.in | 29 +
tests/system/ixfr/in-1/clean.sh | 28 +
tests/system/ixfr/in-1/ns1/README | 3 +
tests/system/ixfr/in-1/nsx2/README | 3 +
tests/system/ixfr/in-1/setup.sh.in | 30 +
tests/system/ixfr/in-1/tests.sh | 37 +
tests/system/ixfr/in-2/clean.sh | 28 +
tests/system/ixfr/in-2/ns1/README | 3 +
tests/system/ixfr/in-2/nsx2/README | 3 +
tests/system/ixfr/in-2/setup.sh.in | 29 +
tests/system/ixfr/in-2/tests.sh | 81 +
tests/system/ixfr/in-3/clean.sh | 28 +
tests/system/ixfr/in-3/ns1/README | 3 +
tests/system/ixfr/in-3/nsx2/README | 3 +
tests/system/ixfr/in-3/setup.sh.in | 29 +
tests/system/ixfr/in-3/tests.sh | 55 +
tests/system/ixfr/in-4/clean.sh | 28 +
tests/system/ixfr/in-4/ns1/README | 3 +
tests/system/ixfr/in-4/nsx2/README | 3 +
tests/system/ixfr/in-4/setup.sh.in | 30 +
tests/system/ixfr/in-4/tests.sh | 53 +
tests/system/ixfr/ixfr_init.sh.in | 330 +++++
tests/system/ixfr/named_noixfr.conf | 41 +
tests/system/ixfr/named_nonotify.conf | 40 +
tests/system/ixfr/named_notify.conf | 41 +
tests/system/run.sh | 125 --
tests/system/run.sh.in | 125 ++
tests/system/start.pl | 4 +-
win32build/VS2010/Debug.log | 173 +--
win32build/VS2010/Release.log | 69 +-
80 files changed, 3873 insertions(+), 560 deletions(-)
copy AUTHORS => TODO (100%)
delete mode 100644 src/bin/stats/tests/isc/log_messages/Makefile.am
delete mode 100644 src/bin/stats/tests/isc/log_messages/__init__.py
delete mode 100644 src/bin/stats/tests/isc/log_messages/stats_httpd_messages.py
delete mode 100644 src/bin/stats/tests/isc/log_messages/stats_messages.py
create mode 100644 tests/system/common/rndc.conf
create mode 100644 tests/system/common/rndc.key
create mode 100644 tests/system/ixfr/README
create mode 100644 tests/system/ixfr/b10-config.db.in
create mode 100644 tests/system/ixfr/clean_ns.sh
create mode 100644 tests/system/ixfr/common_tests.sh.in
create mode 100644 tests/system/ixfr/db.example.common
create mode 100644 tests/system/ixfr/db.example.n0.in
create mode 100644 tests/system/ixfr/db.example.n2.in
create mode 100644 tests/system/ixfr/db.example.n2.refresh.in
create mode 100644 tests/system/ixfr/db.example.n4.in
create mode 100644 tests/system/ixfr/db.example.n6.in
create mode 100644 tests/system/ixfr/in-1/clean.sh
create mode 100644 tests/system/ixfr/in-1/ns1/README
create mode 100644 tests/system/ixfr/in-1/nsx2/README
create mode 100644 tests/system/ixfr/in-1/setup.sh.in
create mode 100644 tests/system/ixfr/in-1/tests.sh
create mode 100644 tests/system/ixfr/in-2/clean.sh
create mode 100644 tests/system/ixfr/in-2/ns1/README
create mode 100644 tests/system/ixfr/in-2/nsx2/README
create mode 100644 tests/system/ixfr/in-2/setup.sh.in
create mode 100644 tests/system/ixfr/in-2/tests.sh
create mode 100644 tests/system/ixfr/in-3/clean.sh
create mode 100644 tests/system/ixfr/in-3/ns1/README
create mode 100644 tests/system/ixfr/in-3/nsx2/README
create mode 100644 tests/system/ixfr/in-3/setup.sh.in
create mode 100644 tests/system/ixfr/in-3/tests.sh
create mode 100644 tests/system/ixfr/in-4/clean.sh
create mode 100644 tests/system/ixfr/in-4/ns1/README
create mode 100644 tests/system/ixfr/in-4/nsx2/README
create mode 100644 tests/system/ixfr/in-4/setup.sh.in
create mode 100644 tests/system/ixfr/in-4/tests.sh
create mode 100644 tests/system/ixfr/ixfr_init.sh.in
create mode 100644 tests/system/ixfr/named_noixfr.conf
create mode 100644 tests/system/ixfr/named_nonotify.conf
create mode 100644 tests/system/ixfr/named_notify.conf
delete mode 100755 tests/system/run.sh
create mode 100755 tests/system/run.sh.in
-----------------------------------------------------------------------
diff --git a/ChangeLog b/ChangeLog
index f1f8a9c..503964c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+301. [func] stephen
+ Add system test for IXFR over TCP.
+ (Trac #1213, git 68ee3818bcbecebf3e6789e81ea79d551a4ff3e8)
+
+300. [func]* tomek
+ libdhcp: DHCP packet library was implemented. Currently it handles
+ packet reception, option parsing, option generation and output
+ packet building. Generic and specialized classes for several
+ DHCPv6 options (IA_NA, IAADDR, address-list) are available. A
+ simple code was added that leverages libdhcp. It is a skeleton
+ DHCPv6 server. It receives incoming SOLICIT and REQUEST messages
+ and responds with proper ADVERTISE and REPLY. Note that since
+ LeaseManager is not implemented, server assigns the same
+ hardcoded lease for every client. This change removes existing
+ DHCPv6 echo server as it was only a proof of concept code.
+ (Trac #1186, git 67ea6de047d4dbd63c25fe7f03f5d5cc2452ad7d)
+
299. [build] jreed
Do not install the libfake_session, libtestutils, or libbench
libraries. They are used by tests within the source tree.
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..e69de29
diff --git a/configure.ac b/configure.ac
index b0f5f45..1fdf5bf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.59])
-AC_INIT(bind10-devel, 20110809, bind10-dev at isc.org)
+AC_INIT(bind10-devel, 20111021, bind10-dev at isc.org)
AC_CONFIG_SRCDIR(README)
AM_INIT_AUTOMAKE
AC_CONFIG_HEADERS([config.h])
@@ -770,6 +770,8 @@ fi
#
AC_PATH_PROGS(PERL, perl5 perl)
AC_SUBST(PERL)
+AC_PATH_PROGS(AWK, gawk awk)
+AC_SUBST(AWK)
AC_ARG_ENABLE(man, [AC_HELP_STRING([--enable-man],
[regenerate man pages [default=no]])], enable_man=yes, enable_man=no)
@@ -870,6 +872,8 @@ AC_CONFIG_FILES([Makefile
src/lib/dns/python/Makefile
src/lib/dns/python/tests/Makefile
src/lib/dns/benchmarks/Makefile
+ src/lib/dhcp/Makefile
+ src/lib/dhcp/tests/Makefile
src/lib/exceptions/Makefile
src/lib/exceptions/tests/Makefile
src/lib/datasrc/Makefile
@@ -965,9 +969,22 @@ AC_OUTPUT([doc/version.ent
src/lib/util/python/gen_wiredata.py
src/lib/server_common/tests/data_path.h
tests/system/conf.sh
+ tests/system/run.sh
tests/system/glue/setup.sh
tests/system/glue/nsx1/b10-config.db
tests/system/bindctl/nsx1/b10-config.db.template
+ tests/system/ixfr/db.example.n0
+ tests/system/ixfr/db.example.n2
+ tests/system/ixfr/db.example.n2.refresh
+ tests/system/ixfr/db.example.n4
+ tests/system/ixfr/db.example.n6
+ tests/system/ixfr/ixfr_init.sh
+ tests/system/ixfr/b10-config.db
+ tests/system/ixfr/common_tests.sh
+ tests/system/ixfr/in-1/setup.sh
+ tests/system/ixfr/in-2/setup.sh
+ tests/system/ixfr/in-3/setup.sh
+ tests/system/ixfr/in-4/setup.sh
], [
chmod +x src/bin/cmdctl/run_b10-cmdctl.sh
chmod +x src/bin/xfrin/run_b10-xfrin.sh
@@ -996,6 +1013,13 @@ AC_OUTPUT([doc/version.ent
chmod +x src/lib/util/python/gen_wiredata.py
chmod +x src/lib/python/isc/log/tests/log_console.py
chmod +x tests/system/conf.sh
+ chmod +x tests/system/run.sh
+ chmod +x tests/system/ixfr/ixfr_init.sh
+ chmod +x tests/system/ixfr/common_tests.sh
+ chmod +x tests/system/ixfr/in-1/setup.sh
+ chmod +x tests/system/ixfr/in-2/setup.sh
+ chmod +x tests/system/ixfr/in-3/setup.sh
+ chmod +x tests/system/ixfr/in-4/setup.sh
])
AC_OUTPUT
diff --git a/doc/Doxyfile b/doc/Doxyfile
index 8be9098..ee5aaf8 100644
--- a/doc/Doxyfile
+++ b/doc/Doxyfile
@@ -574,7 +574,7 @@ INPUT = ../src/lib/exceptions ../src/lib/cc \
../src/lib/log/compiler ../src/lib/asiolink/ ../src/lib/nsas \
../src/lib/testutils ../src/lib/cache ../src/lib/server_common/ \
../src/bin/sockcreator/ ../src/lib/util/ \
- ../src/lib/resolve ../src/lib/acl ../src/bin/dhcp6
+ ../src/lib/resolve ../src/lib/acl ../src/bin/dhcp6 ../src/lib/dhcp
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
diff --git a/src/bin/auth/auth_messages.mes b/src/bin/auth/auth_messages.mes
index 1ffa687..4706690 100644
--- a/src/bin/auth/auth_messages.mes
+++ b/src/bin/auth/auth_messages.mes
@@ -260,4 +260,3 @@ NOTIFY request will not be honored.
% AUTH_INVALID_STATISTICS_DATA invalid specification of statistics data specified
An error was encountered when the authoritiative server specified
statistics data which is invalid for the auth specification file.
-
diff --git a/src/bin/auth/query.cc b/src/bin/auth/query.cc
index ab6404e..5e8a9b1 100644
--- a/src/bin/auth/query.cc
+++ b/src/bin/auth/query.cc
@@ -12,6 +12,7 @@
// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
// PERFORMANCE OF THIS SOFTWARE.
+#include <algorithm> // for std::max
#include <vector>
#include <boost/foreach.hpp>
@@ -31,24 +32,24 @@ namespace isc {
namespace auth {
void
-Query::getAdditional(ZoneFinder& zone, const RRset& rrset) const {
+Query::addAdditional(ZoneFinder& zone, const RRset& rrset) {
RdataIteratorPtr rdata_iterator(rrset.getRdataIterator());
for (; !rdata_iterator->isLast(); rdata_iterator->next()) {
const Rdata& rdata(rdata_iterator->getCurrent());
if (rrset.getType() == RRType::NS()) {
// Need to perform the search in the "GLUE OK" mode.
const generic::NS& ns = dynamic_cast<const generic::NS&>(rdata);
- findAddrs(zone, ns.getNSName(), ZoneFinder::FIND_GLUE_OK);
+ addAdditionalAddrs(zone, ns.getNSName(), ZoneFinder::FIND_GLUE_OK);
} else if (rrset.getType() == RRType::MX()) {
const generic::MX& mx(dynamic_cast<const generic::MX&>(rdata));
- findAddrs(zone, mx.getMXName());
+ addAdditionalAddrs(zone, mx.getMXName());
}
}
}
void
-Query::findAddrs(ZoneFinder& zone, const Name& qname,
- const ZoneFinder::FindOptions options) const
+Query::addAdditionalAddrs(ZoneFinder& zone, const Name& qname,
+ const ZoneFinder::FindOptions options)
{
// Out of zone name
NameComparisonResult result = zone.getOrigin().compare(qname);
@@ -87,12 +88,12 @@ Query::findAddrs(ZoneFinder& zone, const Name& qname,
}
void
-Query::putSOA(ZoneFinder& zone) const {
- ZoneFinder::FindResult soa_result(zone.find(zone.getOrigin(),
+Query::addSOA(ZoneFinder& finder) {
+ ZoneFinder::FindResult soa_result(finder.find(finder.getOrigin(),
RRType::SOA(), NULL, dnssec_opt_));
if (soa_result.code != ZoneFinder::SUCCESS) {
isc_throw(NoSOA, "There's no SOA record in zone " <<
- zone.getOrigin().toText());
+ finder.getOrigin().toText());
} else {
/*
* FIXME:
@@ -104,26 +105,88 @@ Query::putSOA(ZoneFinder& zone) const {
}
}
+// Note: unless the data source client implementation or the zone content
+// is broken, 'nsec' should be a valid NSEC RR. Likewise, the call to
+// find() in this method should result in NXDOMAIN and an NSEC RR that proves
+// the non existent of matching wildcard. If these assumptions aren't met
+// due to a buggy data source implementation or a broken zone, we'll let
+// underlying libdns++ modules throw an exception, which would result in
+// either an SERVFAIL response or just ignoring the query. We at least prevent
+// a complete crash due to such broken behavior.
void
-Query::getAuthAdditional(ZoneFinder& zone) const {
+Query::addNXDOMAINProof(ZoneFinder& finder, ConstRRsetPtr nsec) {
+ if (nsec->getRdataCount() == 0) {
+ isc_throw(BadNSEC, "NSEC for NXDOMAIN is empty");
+ return;
+ }
+
+ // Add the NSEC proving NXDOMAIN to the authority section.
+ response_.addRRset(Message::SECTION_AUTHORITY,
+ boost::const_pointer_cast<RRset>(nsec), dnssec_);
+
+ // Next, identify the best possible wildcard name that would match
+ // the query name. It's the longer common suffix with the qname
+ // between the owner or the next domain of the NSEC that proves NXDOMAIN,
+ // prefixed by the wildcard label, "*". For example, for query name
+ // a.b.example.com, if the NXDOMAIN NSEC is
+ // b.example.com. NSEC c.example.com., the longer suffix is b.example.com.,
+ // and the best possible wildcard is *.b.example.com. If the NXDOMAIN
+ // NSEC is a.example.com. NSEC c.b.example.com., the longer suffix
+ // is the next domain of the NSEC, and we get the same wildcard name.
+ const int qlabels = qname_.getLabelCount();
+ const int olabels = qname_.compare(nsec->getName()).getCommonLabels();
+ const int nlabels = qname_.compare(
+ dynamic_cast<const generic::NSEC&>(nsec->getRdataIterator()->
+ getCurrent()).
+ getNextName()).getCommonLabels();
+ const int common_labels = std::max(olabels, nlabels);
+ const Name wildname(Name("*").concatenate(qname_.split(qlabels -
+ common_labels)));
+
+ // Confirm the wildcard doesn't exist (this should result in NXDOMAIN;
+ // otherwise we shouldn't have got NXDOMAIN for the original query in
+ // the first place).
+ const ZoneFinder::FindResult fresult = finder.find(wildname,
+ RRType::NSEC(), NULL,
+ dnssec_opt_);
+ if (fresult.code != ZoneFinder::NXDOMAIN || !fresult.rrset ||
+ fresult.rrset->getRdataCount() == 0) {
+ isc_throw(BadNSEC, "Unexpected result for wildcard NXDOMAIN proof");
+ return;
+ }
+
+ // Add the (no-) wildcard proof only when it's different from the NSEC
+ // that proves NXDOMAIN; sometimes they can be the same.
+ // Note: name comparison is relatively expensive. When we are at the
+ // stage of performance optimization, we should consider optimizing this
+ // for some optimized data source implementations.
+ if (nsec->getName() != fresult.rrset->getName()) {
+ response_.addRRset(Message::SECTION_AUTHORITY,
+ boost::const_pointer_cast<RRset>(fresult.rrset),
+ dnssec_);
+ }
+}
+
+void
+Query::addAuthAdditional(ZoneFinder& finder) {
// Fill in authority and addtional sections.
- ZoneFinder::FindResult ns_result = zone.find(zone.getOrigin(),
- RRType::NS(), NULL,
- dnssec_opt_);
+ ZoneFinder::FindResult ns_result = finder.find(finder.getOrigin(),
+ RRType::NS(), NULL,
+ dnssec_opt_);
// zone origin name should have NS records
if (ns_result.code != ZoneFinder::SUCCESS) {
isc_throw(NoApexNS, "There's no apex NS records in zone " <<
- zone.getOrigin().toText());
+ finder.getOrigin().toText());
} else {
response_.addRRset(Message::SECTION_AUTHORITY,
boost::const_pointer_cast<RRset>(ns_result.rrset), dnssec_);
// Handle additional for authority section
- getAdditional(zone, *ns_result.rrset);
+ addAdditional(finder, *ns_result.rrset);
}
}
void
-Query::process() const {
+Query::process() {
bool keep_doing = true;
const bool qtype_is_any = (qtype_ == RRType::ANY());
@@ -141,6 +204,7 @@ Query::process() const {
response_.setRcode(Rcode::REFUSED());
return;
}
+ ZoneFinder& zfinder = *result.zone_finder;
// Found a zone which is the nearest ancestor to QNAME, set the AA bit
response_.setHeaderFlag(Message::HEADERFLAG_AA);
@@ -149,8 +213,7 @@ Query::process() const {
keep_doing = false;
std::auto_ptr<RRsetList> target(qtype_is_any ? new RRsetList : NULL);
const ZoneFinder::FindResult db_result(
- result.zone_finder->find(qname_, qtype_, target.get(),
- dnssec_opt_));
+ zfinder.find(qname_, qtype_, target.get(), dnssec_opt_));
switch (db_result.code) {
case ZoneFinder::DNAME: {
// First, put the dname into the answer
@@ -217,14 +280,14 @@ Query::process() const {
response_.addRRset(Message::SECTION_ANSWER, rrset,
dnssec_);
// Handle additional for answer section
- getAdditional(*result.zone_finder, *rrset.get());
+ addAdditional(*result.zone_finder, *rrset.get());
}
} else {
response_.addRRset(Message::SECTION_ANSWER,
boost::const_pointer_cast<RRset>(db_result.rrset),
dnssec_);
// Handle additional for answer section
- getAdditional(*result.zone_finder, *db_result.rrset);
+ addAdditional(*result.zone_finder, *db_result.rrset);
}
// If apex NS records haven't been provided in the answer
// section, insert apex NS records into the authority section
@@ -234,7 +297,7 @@ Query::process() const {
db_result.code != ZoneFinder::SUCCESS ||
(qtype_ != RRType::NS() && !qtype_is_any))
{
- getAuthAdditional(*result.zone_finder);
+ addAuthAdditional(*result.zone_finder);
}
break;
case ZoneFinder::DELEGATION:
@@ -242,16 +305,20 @@ Query::process() const {
response_.addRRset(Message::SECTION_AUTHORITY,
boost::const_pointer_cast<RRset>(db_result.rrset),
dnssec_);
- getAdditional(*result.zone_finder, *db_result.rrset);
+ addAdditional(*result.zone_finder, *db_result.rrset);
break;
case ZoneFinder::NXDOMAIN:
- // Just empty answer with SOA in authority section
response_.setRcode(Rcode::NXDOMAIN());
- putSOA(*result.zone_finder);
+ addSOA(*result.zone_finder);
+
+ // If DNSSEC proof is requested and we've got it, add it.
+ if (dnssec_ && db_result.rrset) {
+ addNXDOMAINProof(zfinder, db_result.rrset);
+ }
break;
case ZoneFinder::NXRRSET:
// Just empty answer with SOA in authority section
- putSOA(*result.zone_finder);
+ addSOA(*result.zone_finder);
break;
default:
// These are new result codes (WILDCARD and WILDCARD_NXRRSET)
diff --git a/src/bin/auth/query.h b/src/bin/auth/query.h
index 0ebbed8..f43dc77 100644
--- a/src/bin/auth/query.h
+++ b/src/bin/auth/query.h
@@ -69,10 +69,16 @@ private:
/// Adds a SOA of the zone into the authority zone of response_.
/// Can throw NoSOA.
///
- void putSOA(isc::datasrc::ZoneFinder& zone) const;
+ void addSOA(isc::datasrc::ZoneFinder& finder);
+
+ /// Add NSEC RRs that prove an NXDOMAIN result.
+ ///
+ /// This corresponds to Section 3.1.3.2 of RFC 4035.
+ void addNXDOMAINProof(isc::datasrc::ZoneFinder& finder,
+ isc::dns::ConstRRsetPtr nsec);
/// \brief Look up additional data (i.e., address records for the names
- /// included in NS or MX records).
+ /// included in NS or MX records) and add them to the additional section.
///
/// Note: Any additional data which has already been provided in the
/// answer section (i.e., if the original query happend to be for the
@@ -85,8 +91,8 @@ private:
/// query is to be found.
/// \param rrset The RRset (i.e., NS or MX rrset) which require additional
/// processing.
- void getAdditional(isc::datasrc::ZoneFinder& zone,
- const isc::dns::RRset& rrset) const;
+ void addAdditional(isc::datasrc::ZoneFinder& zone,
+ const isc::dns::RRset& rrset);
/// \brief Find address records for a specified name.
///
@@ -104,13 +110,13 @@ private:
/// be found.
/// \param qname The name in rrset RDATA.
/// \param options The search options.
- void findAddrs(isc::datasrc::ZoneFinder& zone,
- const isc::dns::Name& qname,
- const isc::datasrc::ZoneFinder::FindOptions options
- = isc::datasrc::ZoneFinder::FIND_DEFAULT) const;
+ void addAdditionalAddrs(isc::datasrc::ZoneFinder& zone,
+ const isc::dns::Name& qname,
+ const isc::datasrc::ZoneFinder::FindOptions options
+ = isc::datasrc::ZoneFinder::FIND_DEFAULT);
/// \brief Look up a zone's NS RRset and their address records for an
- /// authoritative answer.
+ /// authoritative answer, and add them to the additional section.
///
/// On returning an authoritative answer, insert a zone's NS into the
/// authority section and AAAA/A RRs of each of the NS RDATA into the
@@ -125,9 +131,9 @@ private:
/// include AAAA/A RRs under a zone cut in additional section. (BIND 9
/// excludes under-cut RRs; NSD include them.)
///
- /// \param zone The \c ZoneFinder through which the NS and additional data
- /// for the query are to be found.
- void getAuthAdditional(isc::datasrc::ZoneFinder& zone) const;
+ /// \param finder The \c ZoneFinder through which the NS and additional
+ /// data for the query are to be found.
+ void addAuthAdditional(isc::datasrc::ZoneFinder& finder);
public:
/// Constructor from query parameters.
@@ -176,7 +182,7 @@ public:
/// This might throw BadZone or any of its specific subclasses, but that
/// shouldn't happen in real-life (as BadZone means wrong data, it should
/// have been rejected upon loading).
- void process() const;
+ void process();
/// \short Bad zone data encountered.
///
@@ -210,6 +216,17 @@ public:
{}
};
+ /// An invalid result is given when a valid NSEC is expected
+ ///
+ // This can only happen when the underlying data source implementation or
+ /// the zone is broken. By throwing an exception we treat such cases
+ /// as SERVFAIL.
+ struct BadNSEC : public BadZone {
+ BadNSEC(const char* file, size_t line, const char* what) :
+ BadZone(file, line, what)
+ {}
+ };
+
private:
const isc::datasrc::DataSourceClient& datasrc_client_;
const isc::dns::Name& qname_;
diff --git a/src/bin/auth/tests/query_unittest.cc b/src/bin/auth/tests/query_unittest.cc
index b2d1094..c5eb231 100644
--- a/src/bin/auth/tests/query_unittest.cc
+++ b/src/bin/auth/tests/query_unittest.cc
@@ -17,6 +17,7 @@
#include <map>
#include <boost/bind.hpp>
+#include <boost/scoped_ptr.hpp>
#include <dns/masterload.h>
#include <dns/message.h>
@@ -91,8 +92,49 @@ const char* const other_zone_rrs =
"cnamemailer.example.com. 3600 IN CNAME www.example.com.\n"
"cnamemx.example.com. 3600 IN MX 10 cnamemailer.example.com.\n"
"mx.delegation.example.com. 3600 IN A 192.0.2.100\n";
-
-// This is a mock Zone class for testing.
+// Used in NXDOMAIN proof test. We are going to test some unusual case where
+// the best possible wildcard is below the "next domain" of the NSEC RR that
+// proves the NXDOMAIN, i.e.,
+// mx.example.com. (exist)
+// (.no.example.com. (qname, NXDOMAIN)
+// ).no.example.com. (exist)
+// *.no.example.com. (best possible wildcard, not exist)
+const char* const no_txt =
+ ").no.example.com. 3600 IN AAAA 2001:db8::53\n";
+// NSEC records.
+const char* const nsec_apex_txt =
+ "example.com. 3600 IN NSEC cname.example.com. NS SOA NSEC RRSIG\n";
+const char* const nsec_mx_txt =
+ "mx.example.com. 3600 IN NSEC ).no.example.com. MX NSEC RRSIG\n";
+const char* const nsec_no_txt =
+ ").no.example.com. 3600 IN NSEC nz.no.example.com. AAAA NSEC RRSIG\n";
+
+// We'll also test the case where a single NSEC proves both NXDOMAIN and the
+// non existence of wildcard. The following records will be used for that
+// test.
+// ).no.example.com. (exist, whose NSEC proves everything)
+// *.no.example.com. (best possible wildcard, not exist)
+// nx.no.example.com. (NXDOMAIN)
+// nz.no.example.com. (exist)
+const char* const nz_txt =
+ "nz.no.example.com. 3600 IN AAAA 2001:db8::5300\n";
+const char* const nsec_nz_txt =
+ "nz.no.example.com. 3600 IN NSEC noglue.example.com. AAAA NSEC RRSIG\n";
+const char* const nsec_nxdomain_txt =
+ "noglue.example.com. 3600 IN NSEC www.example.com. A\n";
+
+// A helper function that generates a textual representation of RRSIG RDATA
+// for the given covered type. The resulting RRSIG may not necessarily make
+// sense in terms of the DNSSEC protocol, but for our testing purposes it's
+// okay.
+string
+getCommonRRSIGText(const string& type) {
+ return (type +
+ string(" 5 3 3600 20000101000000 20000201000000 12345 "
+ "example.com. FAKEFAKEFAKE"));
+}
+
+// This is a mock Zone Finder class for testing.
// It is a derived class of ZoneFinder for the convenient of tests.
// Its find() method emulates the common behavior of protocol compliant
// ZoneFinder classes, but simplifies some minor cases and also supports broken
@@ -112,16 +154,24 @@ public:
has_SOA_(true),
has_apex_NS_(true),
rrclass_(RRClass::IN()),
- include_rrsig_anyway_(false)
+ include_rrsig_anyway_(false),
+ nsec_name_(origin_)
{
stringstream zone_stream;
zone_stream << soa_txt << zone_ns_txt << ns_addrs_txt <<
delegation_txt << mx_txt << www_a_txt << cname_txt <<
cname_nxdom_txt << cname_out_txt << dname_txt << dname_a_txt <<
- other_zone_rrs;
+ other_zone_rrs << no_txt << nz_txt <<
+ nsec_apex_txt << nsec_mx_txt << nsec_no_txt << nsec_nz_txt <<
+ nsec_nxdomain_txt;
masterLoad(zone_stream, origin_, rrclass_,
boost::bind(&MockZoneFinder::loadRRset, this, _1));
+
+ empty_nsec_rrset_ = ConstRRsetPtr(new RRset(Name::ROOT_NAME(),
+ RRClass::IN(),
+ RRType::NSEC(),
+ RRTTL(3600)));
}
virtual isc::dns::Name getOrigin() const { return (origin_); }
virtual isc::dns::RRClass getClass() const { return (rrclass_); }
@@ -141,10 +191,24 @@ public:
// Turn this on if you want it to return RRSIGs regardless of FIND_GLUE_OK
void setIncludeRRSIGAnyway(bool on) { include_rrsig_anyway_ = on; }
+ // Once called, this "faked" result will be returned when NSEC is expected
+ // for the specified query name.
+ void setNSECResult(const Name& nsec_name, Result code,
+ ConstRRsetPtr rrset)
+ {
+ nsec_name_ = nsec_name;
+ nsec_result_.reset(new ZoneFinder::FindResult(code, rrset));
+ }
+
Name findPreviousName(const Name&) const {
isc_throw(isc::NotImplemented, "Mock doesn't support previous name");
}
+public:
+ // We allow the tests to use these for convenience
+ ConstRRsetPtr delegation_rrset_;
+ ConstRRsetPtr empty_nsec_rrset_;
+
private:
typedef map<RRType, ConstRRsetPtr> RRsetStore;
typedef map<Name, RRsetStore> Domains;
@@ -160,23 +224,17 @@ private:
// Add some signatures
} else if (rrset->getName() == Name("example.com.") &&
rrset->getType() == RRType::NS()) {
- rrset->addRRsig(RdataPtr(new generic::RRSIG("NS 5 3 3600 "
- "20000101000000 "
- "20000201000000 "
- "12345 example.com. "
- "FAKEFAKEFAKE")));
- } else if (rrset->getType() == RRType::A()) {
- rrset->addRRsig(RdataPtr(new generic::RRSIG("A 5 3 3600 "
- "20000101000000 "
- "20000201000000 "
- "12345 example.com. "
- "FAKEFAKEFAKE")));
- } else if (rrset->getType() == RRType::AAAA()) {
- rrset->addRRsig(RdataPtr(new generic::RRSIG("AAAA 5 3 3600 "
- "20000101000000 "
- "20000201000000 "
- "12345 example.com. "
- "FAKEFAKEFAKE")));
+ // For NS, we only have RRSIG for the origin name.
+ rrset->addRRsig(RdataPtr(new generic::RRSIG(
+ getCommonRRSIGText("NS"))));
+ } else {
+ // For others generate RRSIG unconditionally. Technically this
+ // is wrong because we shouldn't have it for names under a zone
+ // cut. But in our tests that doesn't matter, so we add them
+ // just for simplicity.
+ rrset->addRRsig(RdataPtr(new generic::RRSIG(
+ getCommonRRSIGText(rrset->getType().
+ toText()))));
}
}
@@ -186,10 +244,12 @@ private:
const Name dname_name_;
bool has_SOA_;
bool has_apex_NS_;
- ConstRRsetPtr delegation_rrset_;
ConstRRsetPtr dname_rrset_;
const RRClass rrclass_;
bool include_rrsig_anyway_;
+ // The following two will be used for faked NSEC cases
+ Name nsec_name_;
+ boost::scoped_ptr<ZoneFinder::FindResult> nsec_result_;
};
ZoneFinder::FindResult
@@ -267,7 +327,33 @@ MockZoneFinder::find(const Name& name, const RRType& type,
return (FindResult(NXRRSET, RRsetPtr()));
}
- // query name isn't found in our domains. returns NXDOMAIN.
+ // query name isn't found in our domains. This is an NXDOMAIN case.
+ // If we need DNSSEC proof, find the "previous name" that has an NSEC RR
+ // and return NXDOMAIN with the found NSEC. Otherwise, just return the
+ // NXDOMAIN code and NULL. If DNSSEC proof is requested but no NSEC is
+ // found, we return NULL, too. (For simplicity under the test conditions
+ // we don't care about pathological cases such as the name is "smaller"
+ // than the origin)
+ if ((options & FIND_DNSSEC) != 0) {
+ // Emulate a broken DataSourceClient for some special names.
+ if (nsec_result_ && nsec_name_ == name) {
+ return (*nsec_result_);
+ }
+
+ // Normal case
+ // XXX: some older g++ complains about operator!= if we use
+ // const_reverse_iterator
+ for (Domains::reverse_iterator it = domains_.rbegin();
+ it != domains_.rend();
+ ++it) {
+ RRsetStore::const_iterator nsec_it;
+ if ((*it).first < name &&
+ (nsec_it = (*it).second.find(RRType::NSEC()))
+ != (*it).second.end()) {
+ return (FindResult(NXDOMAIN, (*nsec_it).second));
+ }
+ }
+ }
return (FindResult(NXDOMAIN, RRsetPtr()));
}
@@ -433,8 +519,9 @@ TEST_F(QueryTest, exactAnyMatch) {
EXPECT_NO_THROW(Query(memory_client, Name("noglue.example.com"),
RRType::ANY(), response).process());
- responseCheck(response, Rcode::NOERROR(), AA_FLAG, 1, 3, 2,
- "noglue.example.com. 3600 IN A 192.0.2.53\n",
+ responseCheck(response, Rcode::NOERROR(), AA_FLAG, 2, 3, 2,
+ (string("noglue.example.com. 3600 IN A 192.0.2.53\n") +
+ string(nsec_nxdomain_txt)).c_str(),
zone_ns_txt,
"glue.delegation.example.com. 3600 IN A 192.0.2.153\n"
"glue.delegation.example.com. 3600 IN AAAA 2001:db8::53\n");
@@ -445,19 +532,17 @@ TEST_F(QueryTest, apexAnyMatch) {
// in the answer section from the additional.
EXPECT_NO_THROW(Query(memory_client, Name("example.com"),
RRType::ANY(), response).process());
- responseCheck(response, Rcode::NOERROR(), AA_FLAG, 4, 0, 3,
- "example.com. 3600 IN SOA . . 0 0 0 0 0\n"
- "example.com. 3600 IN NS glue.delegation.example.com.\n"
- "example.com. 3600 IN NS noglue.example.com.\n"
- "example.com. 3600 IN NS example.net.\n",
+ responseCheck(response, Rcode::NOERROR(), AA_FLAG, 5, 0, 3,
+ (string(soa_txt) + string(zone_ns_txt) +
+ string(nsec_apex_txt)).c_str(),
NULL, ns_addrs_txt, mock_finder->getOrigin());
}
TEST_F(QueryTest, mxANYMatch) {
EXPECT_NO_THROW(Query(memory_client, Name("mx.example.com"),
RRType::ANY(), response).process());
- responseCheck(response, Rcode::NOERROR(), AA_FLAG, 3, 3, 4,
- mx_txt, zone_ns_txt,
+ responseCheck(response, Rcode::NOERROR(), AA_FLAG, 4, 3, 4,
+ (string(mx_txt) + string(nsec_mx_txt)).c_str(), zone_ns_txt,
(string(ns_addrs_txt) + string(www_a_txt)).c_str());
}
@@ -502,6 +587,128 @@ TEST_F(QueryTest, nxdomain) {
NULL, soa_txt, NULL, mock_finder->getOrigin());
}
+TEST_F(QueryTest, nxdomainWithNSEC) {
+ // NXDOMAIN with DNSSEC proof. We should have SOA, NSEC that proves
+ // NXDOMAIN and NSEC that proves nonexistence of matching wildcard,
+ // as well as their RRSIGs.
+ EXPECT_NO_THROW(Query(memory_client, Name("nxdomain.example.com"), qtype,
+ response, true).process());
+ responseCheck(response, Rcode::NXDOMAIN(), AA_FLAG, 0, 6, 0,
+ NULL, (string(soa_txt) +
+ string("example.com. 3600 IN RRSIG ") +
+ getCommonRRSIGText("SOA") + "\n" +
+ string(nsec_nxdomain_txt) + "\n" +
+ string("noglue.example.com. 3600 IN RRSIG ") +
+ getCommonRRSIGText("NSEC") + "\n" +
+ string(nsec_apex_txt) + "\n" +
+ string("example.com. 3600 IN RRSIG ") +
+ getCommonRRSIGText("NSEC")).c_str(),
+ NULL, mock_finder->getOrigin());
+}
+
+TEST_F(QueryTest, nxdomainWithNSEC2) {
+ // See comments about no_txt. In this case the best possible wildcard
+ // is derived from the next domain of the NSEC that proves NXDOMAIN, and
+ // the NSEC to provide the non existence of wildcard is different from
+ // the first NSEC.
+ Query(memory_client, Name("(.no.example.com"), qtype,
+ response, true).process();
+ responseCheck(response, Rcode::NXDOMAIN(), AA_FLAG, 0, 6, 0,
+ NULL, (string(soa_txt) +
+ string("example.com. 3600 IN RRSIG ") +
+ getCommonRRSIGText("SOA") + "\n" +
+ string(nsec_mx_txt) + "\n" +
+ string("mx.example.com. 3600 IN RRSIG ") +
+ getCommonRRSIGText("NSEC") + "\n" +
+ string(nsec_no_txt) + "\n" +
+ string(").no.example.com. 3600 IN RRSIG ") +
+ getCommonRRSIGText("NSEC")).c_str(),
+ NULL, mock_finder->getOrigin());
+}
+
+TEST_F(QueryTest, nxdomainWithNSECDuplicate) {
+ // See comments about nz_txt. In this case we only need one NSEC,
+ // which proves both NXDOMAIN and the non existence of wildcard.
+ Query(memory_client, Name("nx.no.example.com"), qtype,
+ response, true).process();
+ responseCheck(response, Rcode::NXDOMAIN(), AA_FLAG, 0, 4, 0,
+ NULL, (string(soa_txt) +
+ string("example.com. 3600 IN RRSIG ") +
+ getCommonRRSIGText("SOA") + "\n" +
+ string(nsec_no_txt) + "\n" +
+ string(").no.example.com. 3600 IN RRSIG ") +
+ getCommonRRSIGText("NSEC")).c_str(),
+ NULL, mock_finder->getOrigin());
+}
+
+TEST_F(QueryTest, nxdomainBadNSEC1) {
+ // ZoneFinder::find() returns NXDOMAIN with non NSEC RR.
+ mock_finder->setNSECResult(Name("badnsec.example.com"),
+ ZoneFinder::NXDOMAIN,
+ mock_finder->delegation_rrset_);
+ EXPECT_THROW(Query(memory_client, Name("badnsec.example.com"), qtype,
+ response, true).process(),
+ std::bad_cast);
+}
+
+TEST_F(QueryTest, nxdomainBadNSEC2) {
+ // ZoneFinder::find() returns NXDOMAIN with an empty NSEC RR.
+ mock_finder->setNSECResult(Name("emptynsec.example.com"),
+ ZoneFinder::NXDOMAIN,
+ mock_finder->empty_nsec_rrset_);
+ EXPECT_THROW(Query(memory_client, Name("emptynsec.example.com"), qtype,
+ response, true).process(),
+ Query::BadNSEC);
+}
+
+TEST_F(QueryTest, nxdomainBadNSEC3) {
+ // "no-wildcard proof" returns SUCCESS. it should be NXDOMAIN.
+ mock_finder->setNSECResult(Name("*.example.com"),
+ ZoneFinder::SUCCESS,
+ mock_finder->delegation_rrset_);
+ EXPECT_THROW(Query(memory_client, Name("nxdomain.example.com"), qtype,
+ response, true).process(),
+ Query::BadNSEC);
+}
+
+TEST_F(QueryTest, nxdomainBadNSEC4) {
+ // "no-wildcard proof" doesn't return RRset.
+ mock_finder->setNSECResult(Name("*.example.com"),
+ ZoneFinder::NXDOMAIN, ConstRRsetPtr());
+ EXPECT_THROW(Query(memory_client, Name("nxdomain.example.com"), qtype,
+ response, true).process(),
+ Query::BadNSEC);
+}
+
+TEST_F(QueryTest, nxdomainBadNSEC5) {
+ // "no-wildcard proof" returns non NSEC.
+ mock_finder->setNSECResult(Name("*.example.com"),
+ ZoneFinder::NXDOMAIN,
+ mock_finder->delegation_rrset_);
+ // This is a bit odd, but we'll simply include the returned RRset.
+ Query(memory_client, Name("nxdomain.example.com"), qtype,
+ response, true).process();
+ responseCheck(response, Rcode::NXDOMAIN(), AA_FLAG, 0, 8, 0,
+ NULL, (string(soa_txt) +
+ string("example.com. 3600 IN RRSIG ") +
+ getCommonRRSIGText("SOA") + "\n" +
+ string(nsec_nxdomain_txt) + "\n" +
+ string("noglue.example.com. 3600 IN RRSIG ") +
+ getCommonRRSIGText("NSEC") + "\n" +
+ delegation_txt).c_str(),
+ NULL, mock_finder->getOrigin());
+}
+
+TEST_F(QueryTest, nxdomainBadNSEC6) {
+ // "no-wildcard proof" returns empty NSEC.
+ mock_finder->setNSECResult(Name("*.example.com"),
+ ZoneFinder::NXDOMAIN,
+ mock_finder->empty_nsec_rrset_);
+ EXPECT_THROW(Query(memory_client, Name("nxdomain.example.com"), qtype,
+ response, true).process(),
+ Query::BadNSEC);
+}
+
TEST_F(QueryTest, nxrrset) {
EXPECT_NO_THROW(Query(memory_client, Name("www.example.com"),
RRType::TXT(), response).process());
diff --git a/src/bin/dhcp6/iface_mgr.h b/src/bin/dhcp6/iface_mgr.h
index 45f6afe..249c7ef 100644
--- a/src/bin/dhcp6/iface_mgr.h
+++ b/src/bin/dhcp6/iface_mgr.h
@@ -15,7 +15,6 @@
#ifndef IFACE_MGR_H
#define IFACE_MGR_H
-#include <stdint.h>
#include <list>
#include <boost/shared_ptr.hpp>
#include <boost/scoped_array.hpp>
diff --git a/src/bin/msgq/Makefile.am b/src/bin/msgq/Makefile.am
index 0eebf00..908cab5 100644
--- a/src/bin/msgq/Makefile.am
+++ b/src/bin/msgq/Makefile.am
@@ -1,7 +1,7 @@
SUBDIRS = . tests
pkglibexecdir = $(libexecdir)/@PACKAGE@
-
+
pkglibexec_SCRIPTS = b10-msgq
CLEANFILES = b10-msgq msgq.pyc
diff --git a/src/bin/resolver/resolver.cc b/src/bin/resolver/resolver.cc
index e98d08f..1f59ce9 100644
--- a/src/bin/resolver/resolver.cc
+++ b/src/bin/resolver/resolver.cc
@@ -544,7 +544,7 @@ ResolverImpl::processNormalQuery(const IOMessage& io_message,
// ACL passed. Reject inappropriate queries for the resolver.
if (qtype == RRType::AXFR()) {
if (io_message.getSocket().getProtocol() == IPPROTO_UDP) {
- // Can't process AXFR request receoved over UDP
+ // Can't process AXFR request received over UDP
LOG_DEBUG(resolver_logger, RESOLVER_DBG_PROCESS, RESOLVER_AXFR_UDP);
makeErrorMessage(query_message, answer_message, buffer,
Rcode::FORMERR());
diff --git a/src/bin/stats/tests/Makefile.am b/src/bin/stats/tests/Makefile.am
index b5edc59..afd572f 100644
--- a/src/bin/stats/tests/Makefile.am
+++ b/src/bin/stats/tests/Makefile.am
@@ -1,7 +1,7 @@
PYCOVERAGE_RUN = @PYCOVERAGE_RUN@
PYTESTS = b10-stats_test.py b10-stats-httpd_test.py
EXTRA_DIST = $(PYTESTS) test_utils.py
-CLEANFILES = test_utils.pyc
+CLEANFILES = test_utils.pyc msgq_socket_test
# If necessary (rare cases), explicitly specify paths to dynamic libraries
# required by loadable python modules.
@@ -22,6 +22,7 @@ endif
$(LIBRARY_PATH_PLACEHOLDER) \
PYTHONPATH=$(COMMON_PYTHON_PATH):$(abs_top_builddir)/src/bin/stats:$(abs_top_builddir)/src/bin/stats/tests:$(abs_top_builddir)/src/bin/msgq:$(abs_top_builddir)/src/lib/python/isc/config \
B10_FROM_SOURCE=$(abs_top_srcdir) \
+ BIND10_MSGQ_SOCKET_FILE=$(abs_top_builddir)/msgq_socket \
CONFIG_TESTDATA_PATH=$(abs_top_srcdir)/src/lib/config/tests/testdata \
$(PYCOVERAGE_RUN) $(abs_srcdir)/$$pytest || exit ; \
done
diff --git a/src/bin/stats/tests/isc/log_messages/Makefile.am b/src/bin/stats/tests/isc/log_messages/Makefile.am
deleted file mode 100644
index 90b4499..0000000
--- a/src/bin/stats/tests/isc/log_messages/Makefile.am
+++ /dev/null
@@ -1,7 +0,0 @@
-EXTRA_DIST = __init__.py stats_messages.py stats_httpd_messages.py
-CLEANFILES = __init__.pyc stats_messages.pyc stats_httpd_messages.pyc
-
-CLEANDIRS = __pycache__
-
-clean-local:
- rm -rf $(CLEANDIRS)
diff --git a/src/bin/stats/tests/isc/log_messages/__init__.py b/src/bin/stats/tests/isc/log_messages/__init__.py
deleted file mode 100644
index 58e99e3..0000000
--- a/src/bin/stats/tests/isc/log_messages/__init__.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (C) 2011 Internet Systems Consortium.
-#
-# Permission to use, copy, modify, and distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM
-# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
-# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
-# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
-# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-'''
-This is a fake package that acts as a forwarder to the real package.
-'''
diff --git a/src/bin/stats/tests/isc/log_messages/stats_httpd_messages.py b/src/bin/stats/tests/isc/log_messages/stats_httpd_messages.py
deleted file mode 100644
index 0adb0f0..0000000
--- a/src/bin/stats/tests/isc/log_messages/stats_httpd_messages.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (C) 2011 Internet Systems Consortium.
-#
-# Permission to use, copy, modify, and distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM
-# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
-# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
-# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
-# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-from work.stats_httpd_messages import *
diff --git a/src/bin/stats/tests/isc/log_messages/stats_messages.py b/src/bin/stats/tests/isc/log_messages/stats_messages.py
deleted file mode 100644
index c05a6a8..0000000
--- a/src/bin/stats/tests/isc/log_messages/stats_messages.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (C) 2011 Internet Systems Consortium.
-#
-# Permission to use, copy, modify, and distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM
-# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
-# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
-# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
-# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-from work.stats_messages import *
diff --git a/src/bin/stats/tests/test_utils.py b/src/bin/stats/tests/test_utils.py
index da0bac4..5eb8f92 100644
--- a/src/bin/stats/tests/test_utils.py
+++ b/src/bin/stats/tests/test_utils.py
@@ -16,10 +16,6 @@ import isc.config.cfgmgr
import stats
import stats_httpd
-# Change value of BIND10_MSGQ_SOCKET_FILE in environment variables
-if 'BIND10_MSGQ_SOCKET_FILE' not in os.environ:
- os.environ['BIND10_MSGQ_SOCKET_FILE'] = tempfile.mktemp(prefix='msgq_socket_')
-
class SignalHandler():
"""A signal handler class for deadlock in unittest"""
def __init__(self, fail_handler, timeout=20):
@@ -112,7 +108,7 @@ class MockMsgq:
self.msgq.shutdown()
def shutdown(self):
- # do nothing for avoiding shutting down the msgq twice
+ # do nothing
pass
class MockCfgmgr:
@@ -362,3 +358,10 @@ class BaseModules:
self.cfgmgr.shutdown()
# MockMsgq
self.msgq.shutdown()
+ # remove the unused socket file
+ socket_file = self.msgq.server.msgq.socket_file
+ try:
+ if os.path.exists(socket_file):
+ os.remove(socket_file)
+ except OSError:
+ pass
diff --git a/src/lib/asiodns/tests/io_service_unittest.cc b/src/lib/asiodns/tests/io_service_unittest.cc
index 198b29e..cc64022 100644
--- a/src/lib/asiodns/tests/io_service_unittest.cc
+++ b/src/lib/asiodns/tests/io_service_unittest.cc
@@ -13,7 +13,6 @@
// PERFORMANCE OF THIS SOFTWARE.
#include <config.h>
-#include <stdint.h>
#include <gtest/gtest.h>
#include <asio.hpp>
diff --git a/src/lib/asiolink/io_endpoint.cc b/src/lib/asiolink/io_endpoint.cc
index 4d020c5..c1d3668 100644
--- a/src/lib/asiolink/io_endpoint.cc
+++ b/src/lib/asiolink/io_endpoint.cc
@@ -13,7 +13,6 @@
// PERFORMANCE OF THIS SOFTWARE.
#include <config.h>
-#include <stdint.h>
#ifdef _WIN32
#include <ws2tcpip.h>
diff --git a/src/lib/asiolink/tests/interval_timer_unittest.cc b/src/lib/asiolink/tests/interval_timer_unittest.cc
index d75f855..9fb31db 100644
--- a/src/lib/asiolink/tests/interval_timer_unittest.cc
+++ b/src/lib/asiolink/tests/interval_timer_unittest.cc
@@ -13,7 +13,6 @@
// PERFORMANCE OF THIS SOFTWARE.
#include <config.h>
-#include <stdint.h>
#include <gtest/gtest.h>
#include <asio.hpp>
diff --git a/src/lib/asiolink/tests/io_endpoint_unittest.cc b/src/lib/asiolink/tests/io_endpoint_unittest.cc
index 257a1a1..500eb88 100644
--- a/src/lib/asiolink/tests/io_endpoint_unittest.cc
+++ b/src/lib/asiolink/tests/io_endpoint_unittest.cc
@@ -13,7 +13,6 @@
// PERFORMANCE OF THIS SOFTWARE.
#include <config.h>
-#include <stdint.h>
#include <gtest/gtest.h>
#ifdef _WIN32
diff --git a/src/lib/asiolink/tests/tcp_endpoint_unittest.cc b/src/lib/asiolink/tests/tcp_endpoint_unittest.cc
index 43d7dff..6988082 100644
--- a/src/lib/asiolink/tests/tcp_endpoint_unittest.cc
+++ b/src/lib/asiolink/tests/tcp_endpoint_unittest.cc
@@ -14,8 +14,6 @@
#include <config.h>
-#include <stdint.h>
-
#include <string>
#include <gtest/gtest.h>
diff --git a/src/lib/asiolink/tests/udp_endpoint_unittest.cc b/src/lib/asiolink/tests/udp_endpoint_unittest.cc
index c0271c0..03de6b8 100644
--- a/src/lib/asiolink/tests/udp_endpoint_unittest.cc
+++ b/src/lib/asiolink/tests/udp_endpoint_unittest.cc
@@ -14,8 +14,6 @@
#include <config.h>
-#include <stdint.h>
-
#include <string>
#include <gtest/gtest.h>
diff --git a/src/lib/cache/message_cache.cc b/src/lib/cache/message_cache.cc
index b72dec5..e141bb5 100644
--- a/src/lib/cache/message_cache.cc
+++ b/src/lib/cache/message_cache.cc
@@ -15,8 +15,6 @@
#include <config.h>
-#include <time.h>
-
#include <nsas/nsas_entry_compare.h>
#include <nsas/hash_table.h>
#include <nsas/hash_deleter.h>
diff --git a/src/lib/cache/rrset_cache.cc b/src/lib/cache/rrset_cache.cc
index b851c95..1a5fd48 100644
--- a/src/lib/cache/rrset_cache.cc
+++ b/src/lib/cache/rrset_cache.cc
@@ -16,7 +16,6 @@
#include "rrset_cache.h"
#include "logger.h"
-#include <ctime>
#include <string>
#include <nsas/nsas_entry_compare.h>
#include <nsas/hash_table.h>
diff --git a/src/lib/cache/tests/message_entry_unittest.cc b/src/lib/cache/tests/message_entry_unittest.cc
index 5f5e0b0..8961ee9 100644
--- a/src/lib/cache/tests/message_entry_unittest.cc
+++ b/src/lib/cache/tests/message_entry_unittest.cc
@@ -12,7 +12,6 @@
#include <config.h>
#include <string>
-#include <time.h>
#include <gtest/gtest.h>
#include <dns/tests/unittest_util.h>
#include <dns/message.h>
diff --git a/src/lib/cache/tests/rrset_entry_unittest.cc b/src/lib/cache/tests/rrset_entry_unittest.cc
index c2cc663..58f4b3f 100644
--- a/src/lib/cache/tests/rrset_entry_unittest.cc
+++ b/src/lib/cache/tests/rrset_entry_unittest.cc
@@ -14,7 +14,6 @@
#include <config.h>
#include <string>
-#include <time.h>
#include <gtest/gtest.h>
#include <cache/cache_entry_key.h>
#include <cache/rrset_entry.h>
diff --git a/src/lib/datasrc/database.cc b/src/lib/datasrc/database.cc
index 454448e..39126b4 100644
--- a/src/lib/datasrc/database.cc
+++ b/src/lib/datasrc/database.cc
@@ -416,7 +416,7 @@ DatabaseClient::Finder::find(const isc::dns::Name& name,
size_t last_known(origin_label_count);
const size_t current_label_count(name.getLabelCount());
// This is how many labels we remove to get origin
- size_t remove_labels(current_label_count - origin_label_count);
+ const size_t remove_labels(current_label_count - origin_label_count);
// Now go trough all superdomains from origin down
for (int i(remove_labels); i > 0; --i) {
@@ -507,13 +507,18 @@ DatabaseClient::Finder::find(const isc::dns::Name& name,
arg(accessor_->getDBName()).arg(name);
records_found = true;
get_cover = dnssec_data;
+ } else if ((options & NO_WILDCARD) != 0) {
+ // If wildcard check is disabled, the search will ultimately
+ // terminate with NXDOMAIN. If DNSSEC is enabled, flag that
+ // we need to get the NSEC records to prove this.
+ if (dnssec_data) {
+ get_cover = true;
+ }
} else {
// It's not empty non-terminal. So check for wildcards.
// We remove labels one by one and look for the wildcard there.
// Go up to first non-empty domain.
-
- remove_labels = current_label_count - last_known;
- for (size_t i(1); i <= remove_labels; ++ i) {
+ for (size_t i(1); i <= current_label_count - last_known; ++i) {
// Construct the name with *
const Name superdomain(name.split(i));
const string wildcard("*." + superdomain.toText());
@@ -552,7 +557,7 @@ DatabaseClient::Finder::find(const isc::dns::Name& name,
if (cni != found.second.end() &&
type != RRType::CNAME()) {
result_rrset = cni->second;
- result_status = CNAME;
+ result_status = WILDCARD_CNAME;
} else if (nsi != found.second.end()) {
result_rrset = nsi->second;
result_status = DELEGATION;
diff --git a/src/lib/datasrc/tests/database_unittest.cc b/src/lib/datasrc/tests/database_unittest.cc
index 6315b54..d9cf999 100644
--- a/src/lib/datasrc/tests/database_unittest.cc
+++ b/src/lib/datasrc/tests/database_unittest.cc
@@ -175,8 +175,11 @@ const char* const TEST_RECORDS[][5] = {
{"*.delegatedwild.example.org.", "A", "3600", "", "192.0.2.5"},
{"wild.*.foo.example.org.", "A", "3600", "", "192.0.2.5"},
{"wild.*.foo.*.bar.example.org.", "A", "3600", "", "192.0.2.5"},
+ {"wild.*.foo.*.bar.example.org.", "NSEC", "3600", "",
+ "brokenns1.example.org. A NSEC"},
{"bao.example.org.", "NSEC", "3600", "", "wild.*.foo.*.bar.example.org. NSEC"},
{"*.cnamewild.example.org.", "CNAME", "3600", "", "www.example.org."},
+ {"*.dnamewild.example.org.", "DNAME", "3600", "", "dname.example.com."},
{"*.nswild.example.org.", "NS", "3600", "", "ns.example.com."},
// For NSEC empty non-terminal
{"l.example.org.", "NSEC", "3600", "", "empty.nonterminal.example.org. NSEC"},
@@ -258,9 +261,16 @@ private:
* implementation of the optional functionality.
*/
class MockAccessor : public NopAccessor {
- // Type of mock database "row"s
- typedef std::map<std::string, std::vector< std::vector<std::string> > >
- Domains;
+ // Type of mock database "row"s. This is a map whose keys are the
+ // own names. We internally sort them by the name comparison order.
+ struct NameCompare : public binary_function<string, string, bool> {
+ bool operator()(const string& n1, const string& n2) const {
+ return (Name(n1).compare(Name(n2)).getOrder() < 0);
+ }
+ };
+ typedef std::map<std::string,
+ std::vector< std::vector<std::string> >,
+ NameCompare > Domains;
public:
MockAccessor() : rollbacked_(false) {
@@ -343,7 +353,7 @@ private:
private:
const std::string searched_name_;
- int cur_record_;
+ size_t cur_record_;
std::vector< std::vector<std::string> > cur_name;
};
@@ -558,30 +568,36 @@ public:
virtual std::string findPreviousName(int id, const std::string& rname)
const
{
- // Hardcoded for now, but we could compute it from the data
- // Maybe do it when it is needed some time in future?
if (id == -1) {
isc_throw(isc::NotImplemented, "Test not implemented behaviour");
- } else if (id == 42) {
- if (rname == "org.example.nonterminal.") {
- return ("l.example.org.");
- } else if (rname == "org.example.aa.") {
- return ("example.org.");
- } else if (rname == "org.example.www2." ||
- rname == "org.example.www1.") {
- return ("www.example.org.");
- } else if (rname == "org.example.badnsec2.") {
+ } else if (id == READONLY_ZONE_ID) {
+ // For some specific names we intentionally return broken or
+ // unexpected result.
+ if (rname == "org.example.badnsec2.") {
return ("badnsec1.example.org.");
} else if (rname == "org.example.brokenname.") {
return ("brokenname...example.org.");
- } else if (rname == "org.example.bar.*.") {
- return ("bao.example.org.");
} else if (rname == "org.example.notimplnsec." ||
rname == "org.example.wild.here.") {
isc_throw(isc::NotImplemented, "Not implemented in this test");
- } else {
+ }
+
+ // For the general case, we search for the first name N in the
+ // domains that meets N >= reverse(rname) using lower_bound.
+ // The "previous name" is the name of the previous entry of N.
+ // Note that Domains are internally sorted by the Name comparison
+ // order. Due to the API requirement we are given a reversed
+ // name (rname), so we need to reverse it again to convert it
+ // to the original name.
+ Domains::const_iterator it(readonly_records_->lower_bound(
+ Name(rname).reverse().toText()));
+ if (it == readonly_records_->begin()) {
isc_throw(isc::Unexpected, "Unexpected name");
}
+ if (it == readonly_records_->end()) {
+ return ((*readonly_records_->rbegin()).first);
+ }
+ return ((*(--it)).first);
} else {
isc_throw(isc::Unexpected, "Unknown zone ID");
}
@@ -1031,8 +1047,8 @@ doFindTest(ZoneFinder& finder,
const ZoneFinder::FindOptions options = ZoneFinder::FIND_DEFAULT)
{
SCOPED_TRACE("doFindTest " + name.toText() + " " + type.toText());
- ZoneFinder::FindResult result =
- finder.find(name, type, NULL, options);
+ const ZoneFinder::FindResult result = finder.find(name, type, NULL,
+ options);
ASSERT_EQ(expected_result, result.code) << name << " " << type;
if (!expected_rdatas.empty() && result.rrset) {
checkRRset(result.rrset, expected_name != Name(".") ? expected_name :
@@ -1599,21 +1615,21 @@ TYPED_TEST(DatabaseClientTest, wildcard) {
"bar.example.org",
NULL
};
+ // Unless FIND_DNSSEC is specified, this is no different from other
+ // NXRRSET case.
for (const char** name = negative_names; *name != NULL; ++ name) {
doFindTest(*finder, isc::dns::Name(*name), this->qtype_,
this->qtype_, this->rrttl_, ZoneFinder::NXRRSET,
this->expected_rdatas_, this->expected_sig_rdatas_);
- // FIXME: What should be returned in this case? How does the
- // DNSSEC logic handle it?
}
+ // With FIND_DNSSEC, it should result in WILDCARD_NXRRSET.
const char* negative_dnssec_names[] = {
"a.bar.example.org.",
"foo.baz.bar.example.org.",
"a.foo.bar.example.org.",
NULL
};
-
this->expected_rdatas_.clear();
this->expected_rdatas_.push_back("wild.*.foo.*.bar.example.org. NSEC");
this->expected_sig_rdatas_.clear();
@@ -1624,15 +1640,27 @@ TYPED_TEST(DatabaseClientTest, wildcard) {
Name("bao.example.org."), ZoneFinder::FIND_DNSSEC);
}
- // Some strange things in the wild node
+ // CNAME on a wildcard. Maybe not so common, but not disallowed.
this->expected_rdatas_.clear();
this->expected_rdatas_.push_back("www.example.org.");
this->expected_sig_rdatas_.clear();
doFindTest(*finder, isc::dns::Name("a.cnamewild.example.org."),
isc::dns::RRType::TXT(), isc::dns::RRType::CNAME(),
- this->rrttl_, ZoneFinder::CNAME,
+ this->rrttl_, ZoneFinder::WILDCARD_CNAME,
this->expected_rdatas_, this->expected_sig_rdatas_);
+ // DNAME on a wildcard. In our implementation we ignore DNAMEs on a
+ // wildcard, but at a higher level we say the behavior is "unspecified".
+ // rfc2672bis strongly discourages the mixture of DNAME and wildcard
+ // (with SHOULD NOT).
+ this->expected_rdatas_.clear();
+ this->expected_sig_rdatas_.clear();
+ doFindTest(*finder, Name("a.dnamewild.example.org."),
+ this->qtype_, this->qtype_, this->rrttl_,
+ ZoneFinder::WILDCARD_NXRRSET, this->expected_rdatas_,
+ this->expected_sig_rdatas_);
+
+ // Some strange things in the wild node
this->expected_rdatas_.clear();
this->expected_rdatas_.push_back("ns.example.com.");
doFindTest(*finder, isc::dns::Name("a.nswild.example.org."),
@@ -1641,6 +1669,67 @@ TYPED_TEST(DatabaseClientTest, wildcard) {
this->expected_rdatas_, this->expected_sig_rdatas_);
}
+TYPED_TEST(DatabaseClientTest, noWildcard) {
+ // Tests with the NO_WILDCARD flag.
+
+ boost::shared_ptr<DatabaseClient::Finder> finder(this->getFinder());
+
+ // This would match *.wild.example.org, but with NO_WILDCARD should
+ // result in NXDOMAIN.
+ this->expected_rdatas_.push_back("cancel.here.wild.example.org. A "
+ "NSEC RRSIG");
+ this->expected_sig_rdatas_.push_back("NSEC 5 3 3600 20000101000000 "
+ "20000201000000 12345 example.org. "
+ "FAKEFAKEFAKE");
+ doFindTest(*finder, isc::dns::Name("a.wild.example.org"),
+ RRType::NSEC(), RRType::NSEC(), this->rrttl_,
+ ZoneFinder::NXDOMAIN, this->expected_rdatas_,
+ this->expected_sig_rdatas_, Name("*.wild.example.org."),
+ ZoneFinder::FIND_DNSSEC | ZoneFinder::NO_WILDCARD);
+
+ // Should be the same without FIND_DNSSEC (but in this case no RRsets
+ // will be returned)
+ doFindTest(*finder, isc::dns::Name("a.wild.example.org"),
+ RRType::NSEC(), RRType::NSEC(), this->rrttl_,
+ ZoneFinder::NXDOMAIN, this->empty_rdatas_,
+ this->empty_rdatas_, Name::ROOT_NAME(), // name is dummy
+ ZoneFinder::NO_WILDCARD);
+
+ // Same for wildcard empty non terminal.
+ this->expected_rdatas_.clear();
+ this->expected_rdatas_.push_back("brokenns1.example.org. A NSEC");
+ doFindTest(*finder, isc::dns::Name("a.bar.example.org"),
+ RRType::NSEC(), RRType::NSEC(), this->rrttl_,
+ ZoneFinder::NXDOMAIN, this->expected_rdatas_,
+ this->empty_rdatas_, Name("wild.*.foo.*.bar.example.org"),
+ ZoneFinder::FIND_DNSSEC | ZoneFinder::NO_WILDCARD);
+
+ // Search for a wildcard name with NO_WILDCARD. There should be no
+ // difference. This is, for example, necessary to provide non existence
+ // of matching wildcard for isnx.nonterminal.example.org.
+ this->expected_rdatas_.clear();
+ this->expected_rdatas_.push_back("empty.nonterminal.example.org. NSEC");
+ doFindTest(*finder, isc::dns::Name("*.nonterminal.example.org"),
+ RRType::NSEC(), RRType::NSEC(), this->rrttl_,
+ ZoneFinder::NXDOMAIN, this->expected_rdatas_,
+ this->empty_rdatas_, Name("l.example.org"),
+ ZoneFinder::FIND_DNSSEC | ZoneFinder::NO_WILDCARD);
+
+ // On the other hand, if there's exact match for the wildcard name
+ // it should be found regardless of NO_WILDCARD.
+ this->expected_rdatas_.clear();
+ this->expected_rdatas_.push_back("192.0.2.5");
+ this->expected_sig_rdatas_.clear();
+ this->expected_sig_rdatas_.push_back("A 5 3 3600 20000101000000 "
+ "20000201000000 12345 example.org. "
+ "FAKEFAKEFAKE");
+ doFindTest(*finder, isc::dns::Name("*.wild.example.org"),
+ this->qtype_, this->qtype_, this->rrttl_,
+ ZoneFinder::SUCCESS, this->expected_rdatas_,
+ this->expected_sig_rdatas_, Name("*.wild.example.org"),
+ ZoneFinder::NO_WILDCARD);
+}
+
TYPED_TEST(DatabaseClientTest, NXRRSET_NSEC) {
// The domain exists, but doesn't have this RRType
// So we should get its NSEC
@@ -1749,8 +1838,7 @@ TYPED_TEST(DatabaseClientTest, getOrigin) {
if (this->is_mock_) {
EXPECT_EQ(READONLY_ZONE_ID, finder->zone_id());
}
- bool test(this->zname_ == finder->getOrigin());
- EXPECT_EQ(test, true);
+ EXPECT_EQ(this->zname_, finder->getOrigin());
}
TYPED_TEST(DatabaseClientTest, updaterFinder) {
diff --git a/src/lib/datasrc/zone.h b/src/lib/datasrc/zone.h
index 04d0230..05f3e34 100644
--- a/src/lib/datasrc/zone.h
+++ b/src/lib/datasrc/zone.h
@@ -63,32 +63,70 @@ public:
/// actually the best wildcard we have). Data sources that don't
/// support DNSSEC don't need to distinguish them.
///
- /// In case of NXRRSET related results, the returned NSEC record
- /// belongs to the domain which would provide the result if it
- /// contained the correct type (in case of NXRRSET, it is the queried
- /// domain, in case of WILDCARD_NXRRSET, it is the wildcard domain
- /// that matched the query name). In case of an empty nonterminal,
- /// an NSEC is provided for the interval where the empty nonterminal
- /// lives. The end of the interval is the subdomain causing existence
- /// of the empty nonterminal (if there's sub.x.example.com, and no record
- /// in x.example.com, then x.example.com exists implicitly - is the empty
- /// nonterminal and sub.x.example.com is the subdomain causing it).
+ /// In case of CNAME, if the CNAME is a wildcard (i.e., its owner name
+ /// starts with the label "*"), WILDCARD_CNAME will be returned instead
+ /// of CNAME.
+ ///
+ /// In case of NXDOMAIN, the returned NSEC covers the queried domain
+ /// that proves that the query name does not exist in the zone. Note that
+ /// this does not necessarily prove it doesn't even match a wildcard
+ /// (even if the result of NXDOMAIN can only happen when there's no
+ /// matching wildcard either). It is caller's responsibility to provide
+ /// a proof that there is no matching wildcard if that proof is necessary.
+ ///
+ /// Various variants of "no data" cases are complicated, when involves
+ /// DNSSEC and wildcard processing. Referring to Section 3.1.3 of
+ /// RFC4035, we need to consider the following cases:
+ /// -# (Normal) no data: there is a matching non-wildcard name with a
+ /// different RR type. This is the "No Data" case of the RFC.
+ /// -# (Normal) empty non terminal: there is no matching (exact or
+ /// wildcard) name, but there is a subdomain with an RR of the query
+ /// name. This is one case of "Name Error" of the RFC.
+ /// -# Wildcard empty non terminal: similar to 2a, but the empty name
+ /// is a wildcard, and matches the query name by wildcard expansion.
+ /// This is a special case of "Name Error" of the RFC.
+ /// -# Wildcard no data: there is no exact match name, but there is a
+ /// wildcard name that matches the query name with a different type
+ /// of RR. This is the "Wildcard No Data" case of the RFC.
+ ///
+ /// In any case, \c find() will result in \c NXRRSET with no RRset
+ /// unless the \c FIND_DNSSEC option is specified. The rest of the
+ /// discussion only applies to the case where this option is specified.
+ ///
+ /// In case 1, \c find() will result in NXRRSET, and return NSEC of the
+ /// matching name.
+ ///
+ /// In case 2, \c find() will result in NXRRSET, and return NSEC for the
+ /// interval where the empty nonterminal lives. The end of the interval
+ /// is the subdomain causing existence of the empty nonterminal (if
+ /// there's sub.x.example.com, and no record in x.example.com, then
+ /// x.example.com exists implicitly - is the empty nonterminal and
+ /// sub.x.example.com is the subdomain causing it). Note that this NSEC
+ /// proves not only the existence of empty non terminal name but also
+ /// the non existence of possibly matching wildcard name, because
+ /// there can be no better wildcard match than the exact matching empty
+ /// name.
+ ///
+ /// In case 3, \c find() will result in WILDCARD_NXRRSET, and return NSEC
+ /// for the interval where the wildcard empty nonterminal lives.
+ /// Cases 2 and 3 are especially complicated and confusing. See the
+ /// examples below.
+ ///
+ /// In case 4, \c find() will result in WILDCARD_NXRRSET, and return
+ /// NSEC of the matching wildcard name.
///
/// Examples: if zone "example.com" has the following record:
/// \code
- /// a.b.example.com. NSEC c.example.com.
+ /// a.example.com. NSEC a.b.example.com.
/// \endcode
- /// a call to \c find() for "b.example.com." will result in NXRRSET,
- /// and if the FIND_DNSSEC option is set this NSEC will be returned.
+ /// a call to \c find() for "b.example.com." with the FIND_DNSSEC option
+ /// will result in NXRRSET, and this NSEC will be returned.
/// Likewise, if zone "example.org" has the following record,
/// \code
- /// x.*.example.org. NSEC a.example.org.
+ /// a.example.org. NSEC x.*.b.example.org.
/// \endcode
- /// a call to \c find() for "y.example.org" will result in
- /// WILDCARD_NXRRSET (*.example.org is an empty nonterminal wildcard node),
- /// and if the FIND_DNSSEC option is set this NSEC will be returned.
- ///
- /// In case of NXDOMAIN, the returned NSEC covers the queried domain.
+ /// a call to \c find() for "y.b.example.org" with FIND_DNSSEC will
+ /// result in NXRRSET_NXRRSET, and this NSEC will be returned.
enum Result {
SUCCESS, ///< An exact match is found.
DELEGATION, ///< The search encounters a zone cut.
@@ -97,6 +135,7 @@ public:
CNAME, ///< The search encounters and returns a CNAME RR
DNAME, ///< The search encounters and returns a DNAME RR
WILDCARD, ///< Succes by wildcard match, for DNSSEC
+ WILDCARD_CNAME, ///< CNAME on wildcard, search returns CNAME, for DNSSEC
WILDCARD_NXRRSET ///< NXRRSET on wildcard, for DNSSEC
};
@@ -142,10 +181,11 @@ public:
enum FindOptions {
FIND_DEFAULT = 0, ///< The default options
FIND_GLUE_OK = 1, ///< Allow search under a zone cut
- FIND_DNSSEC = 2 ///< Require DNSSEC data in the answer
+ FIND_DNSSEC = 2, ///< Require DNSSEC data in the answer
///< (RRSIG, NSEC, etc.). The implementation
///< is allowed to include it even if it is
///< not set.
+ NO_WILDCARD = 4 ///< Do not try wildcard matching.
};
///
@@ -185,6 +225,7 @@ public:
/// for the data that best matches the given name and type.
/// This method is expected to be "intelligent", and identifies the
/// best possible answer for the search key. Specifically,
+ ///
/// - If the search name belongs under a zone cut, it returns the code
/// of \c DELEGATION and the NS RRset at the zone cut.
/// - If there is no matching name, it returns the code of \c NXDOMAIN,
@@ -203,12 +244,14 @@ public:
/// - If the target isn't NULL, all RRsets under the domain are inserted
/// there and SUCCESS (or NXDOMAIN, in case of empty domain) is returned
/// instead of normall processing. This is intended to handle ANY query.
- /// \note: this behavior is controversial as we discussed in
- /// https://lists.isc.org/pipermail/bind10-dev/2011-January/001918.html
- /// We should revisit the interface before we heavily rely on it.
+ ///
+ /// \note This behavior is controversial as we discussed in
+ /// https://lists.isc.org/pipermail/bind10-dev/2011-January/001918.html
+ /// We should revisit the interface before we heavily rely on it.
///
/// The \c options parameter specifies customized behavior of the search.
/// Their semantics is as follows (they are or bit-field):
+ ///
/// - \c FIND_GLUE_OK Allow search under a zone cut. By default the search
/// will stop once it encounters a zone cut. If this option is specified
/// it remembers information about the highest zone cut and continues
@@ -220,6 +263,10 @@ public:
/// - \c FIND_DNSSEC Request that DNSSEC data (like NSEC, RRSIGs) are
/// returned with the answer. It is allowed for the data source to
/// include them even when not requested.
+ /// - \c NO_WILDCARD Do not try wildcard matching. This option is of no
+ /// use for normal lookups; it's intended to be used to get a DNSSEC
+ /// proof of the non existence of any matching wildcard or non existence
+ /// of an exact match when a wildcard match is found.
///
/// A derived version of this method may involve internal resource
/// allocation, especially for constructing the resulting RRset, and may
diff --git a/src/lib/dns/rdata/generic/nsec_47.cc b/src/lib/dns/rdata/generic/nsec_47.cc
index 9091ada..064f783 100644
--- a/src/lib/dns/rdata/generic/nsec_47.cc
+++ b/src/lib/dns/rdata/generic/nsec_47.cc
@@ -178,6 +178,11 @@ NSEC::toWire(AbstractMessageRenderer& renderer) const {
renderer.writeData(&impl_->typebits_[0], impl_->typebits_.size());
}
+const Name&
+NSEC::getNextName() const {
+ return (impl_->nextname_);
+}
+
int
NSEC::compare(const Rdata& other) const {
const NSEC& other_nsec = dynamic_cast<const NSEC&>(other);
diff --git a/src/lib/dns/rdata/generic/nsec_47.h b/src/lib/dns/rdata/generic/nsec_47.h
index b86a25b..005dd3a 100644
--- a/src/lib/dns/rdata/generic/nsec_47.h
+++ b/src/lib/dns/rdata/generic/nsec_47.h
@@ -38,6 +38,16 @@ public:
// END_COMMON_MEMBERS
NSEC& operator=(const NSEC& source);
~NSEC();
+
+ // specialized methods
+
+ /// Return the next domain name.
+ ///
+ /// \exception std::bad_alloc Resource allocation failure in name copy.
+ ///
+ /// \return The next domain name field in the form of \c Name object.
+ const Name& getNextName() const;
+
private:
NSECImpl* impl_;
};
diff --git a/src/lib/python/isc/datasrc/datasrc.cc b/src/lib/python/isc/datasrc/datasrc.cc
index 7676104..6ab29d8 100644
--- a/src/lib/python/isc/datasrc/datasrc.cc
+++ b/src/lib/python/isc/datasrc/datasrc.cc
@@ -132,6 +132,8 @@ initModulePart_ZoneFinder(PyObject* mod) {
Py_BuildValue("I", ZoneFinder::WILDCARD));
installClassVariable(zonefinder_type, "WILDCARD_NXRRSET",
Py_BuildValue("I", ZoneFinder::WILDCARD_NXRRSET));
+ installClassVariable(zonefinder_type, "WILDCARD_CNAME",
+ Py_BuildValue("I", ZoneFinder::WILDCARD_CNAME));
installClassVariable(zonefinder_type, "FIND_DEFAULT",
Py_BuildValue("I", ZoneFinder::FIND_DEFAULT));
@@ -139,6 +141,8 @@ initModulePart_ZoneFinder(PyObject* mod) {
Py_BuildValue("I", ZoneFinder::FIND_GLUE_OK));
installClassVariable(zonefinder_type, "FIND_DNSSEC",
Py_BuildValue("I", ZoneFinder::FIND_DNSSEC));
+ installClassVariable(zonefinder_type, "NO_WILDCARD",
+ Py_BuildValue("I", ZoneFinder::NO_WILDCARD));
} catch (const std::exception& ex) {
const std::string ex_what =
"Unexpected failure in ZoneFinder initialization: " +
diff --git a/src/lib/python/isc/datasrc/finder_inc.cc b/src/lib/python/isc/datasrc/finder_inc.cc
index bc8e62c..4a00e78 100644
--- a/src/lib/python/isc/datasrc/finder_inc.cc
+++ b/src/lib/python/isc/datasrc/finder_inc.cc
@@ -42,11 +42,20 @@ Return the RR class of the zone.\n\
\n\
";
+// Main changes from the C++ doxygen version:
+// - Return type: use tuple instead of the dedicated FindResult type
+// - NULL->None
+// - exceptions
const char* const ZoneFinder_find_doc = "\
-find(name, type, target=NULL, options=FIND_DEFAULT) -> (code, FindResult)\n\
+find(name, type, target=None, options=FIND_DEFAULT) -> (integer, RRset)\n\
\n\
Search the zone for a given pair of domain name and RR type.\n\
\n\
+Each derived version of this method searches the underlying backend\n\
+for the data that best matches the given name and type. This method is\n\
+expected to be \"intelligent\", and identifies the best possible\n\
+answer for the search key. Specifically,\n\
+\n\
- If the search name belongs under a zone cut, it returns the code of\n\
DELEGATION and the NS RRset at the zone cut.\n\
- If there is no matching name, it returns the code of NXDOMAIN, and,\n\
@@ -62,40 +71,46 @@ Search the zone for a given pair of domain name and RR type.\n\
and the code of SUCCESS will be returned.\n\
- If the search name matches a delegation point of DNAME, it returns\n\
the code of DNAME and that DNAME RR.\n\
-- If the result was synthesized by a wildcard match, it returns the\n\
- code WILDCARD and the synthesized RRset\n\
-- If the query matched a wildcard name, but not its type, it returns the\n\
- code WILDCARD_NXRRSET, and None\n\
-- If the target is a list, all RRsets under the domain are inserted\n\
+- If the target isn't None, all RRsets under the domain are inserted\n\
there and SUCCESS (or NXDOMAIN, in case of empty domain) is returned\n\
instead of normall processing. This is intended to handle ANY query.\n\
- : this behavior is controversial as we discussed in\n\
- https://lists.isc.org/pipermail/bind10-dev/2011-January/001918.html\n\
- We should revisit the interface before we heavily rely on it. The\n\
- options parameter specifies customized behavior of the search. Their\n\
- semantics is as follows:\n\
- (This feature is disable at this time)\n\
-- GLUE_OK Allow search under a zone cut. By default the search will\n\
- stop once it encounters a zone cut. If this option is specified it\n\
- remembers information about the highest zone cut and continues the\n\
- search until it finds an exact match for the given name or it\n\
+\n\
+Note: This behavior is controversial as we discussed in\n\
+https://lists.isc.org/pipermail/bind10-dev/2011-January/001918.html We\n\
+should revisit the interface before we heavily rely on it.\n\
+\n\
+The options parameter specifies customized behavior of the search.\n\
+Their semantics is as follows (they are or bit-field):\n\
+\n\
+- FIND_GLUE_OK Allow search under a zone cut. By default the search\n\
+ will stop once it encounters a zone cut. If this option is specified\n\
+ it remembers information about the highest zone cut and continues\n\
+ the search until it finds an exact match for the given name or it\n\
detects there is no exact match. If an exact match is found, RRsets\n\
for that name are searched just like the normal case; otherwise, if\n\
the search has encountered a zone cut, DELEGATION with the\n\
information of the highest zone cut will be returned.\n\
+- FIND_DNSSEC Request that DNSSEC data (like NSEC, RRSIGs) are\n\
+ returned with the answer. It is allowed for the data source to\n\
+ include them even when not requested.\n\
+- NO_WILDCARD Do not try wildcard matching. This option is of no use\n\
+ for normal lookups; it's intended to be used to get a DNSSEC proof\n\
+ of the non existence of any matching wildcard or non existence of an\n\
+ exact match when a wildcard match is found.\n\
+\n\
\n\
-This method raises an isc.datasrc.Error exception if there is an internal\n\
-error in the datasource.\n\
+This method raises an isc.datasrc.Error exception if there is an\n\
+internal error in the datasource.\n\
\n\
Parameters:\n\
name The domain name to be searched for.\n\
type The RR type to be searched for.\n\
- target If target is not NULL, insert all RRs under the domain\n\
+ target If target is not None, insert all RRs under the domain\n\
into it.\n\
options The search options.\n\
\n\
-Return Value(s): A tuple of a result code an a FindResult object enclosing\n\
-the search result (see above).\n\
+Return Value(s): A tuple of a result code (integer) and an RRset object\n\
+enclosing the search result (see above).\n\
";
const char* const ZoneFinder_find_previous_name_doc = "\
diff --git a/src/lib/python/isc/datasrc/tests/datasrc_test.py b/src/lib/python/isc/datasrc/tests/datasrc_test.py
index 75a0cfb..15fa347 100644
--- a/src/lib/python/isc/datasrc/tests/datasrc_test.py
+++ b/src/lib/python/isc/datasrc/tests/datasrc_test.py
@@ -15,6 +15,7 @@
import isc.log
import isc.datasrc
+from isc.datasrc import ZoneFinder
import isc.dns
import unittest
import os
@@ -191,6 +192,29 @@ class DataSrcClient(unittest.TestCase):
# can't construct directly
self.assertRaises(TypeError, isc.datasrc.ZoneFinder)
+ def test_findoptions(self):
+ '''A simple test to confirm no option is specified by default.
+
+ '''
+ self.assertFalse(ZoneFinder.FIND_DEFAULT & ZoneFinder.FIND_GLUE_OK)
+ self.assertFalse(ZoneFinder.FIND_DEFAULT & ZoneFinder.FIND_DNSSEC)
+ self.assertFalse(ZoneFinder.FIND_DEFAULT & ZoneFinder.NO_WILDCARD)
+
+ def test_findresults(self):
+ '''A simple test to confirm result codes are (defined and) different
+ for some combinations.
+
+ '''
+ self.assertNotEqual(ZoneFinder.SUCCESS, ZoneFinder.DELEGATION)
+ self.assertNotEqual(ZoneFinder.DELEGATION, ZoneFinder.NXDOMAIN)
+ self.assertNotEqual(ZoneFinder.NXDOMAIN, ZoneFinder.NXRRSET)
+ self.assertNotEqual(ZoneFinder.NXRRSET, ZoneFinder.CNAME)
+ self.assertNotEqual(ZoneFinder.CNAME, ZoneFinder.DNAME)
+ self.assertNotEqual(ZoneFinder.DNAME, ZoneFinder.WILDCARD)
+ self.assertNotEqual(ZoneFinder.WILDCARD, ZoneFinder.WILDCARD_CNAME)
+ self.assertNotEqual(ZoneFinder.WILDCARD_CNAME,
+ ZoneFinder.WILDCARD_NXRRSET)
+
def test_find(self):
dsc = isc.datasrc.DataSourceClient("sqlite3", READ_ZONE_DB_CONFIG)
diff --git a/src/lib/testutils/dnsmessage_test.h b/src/lib/testutils/dnsmessage_test.h
index eda6a6b..8fc2216 100644
--- a/src/lib/testutils/dnsmessage_test.h
+++ b/src/lib/testutils/dnsmessage_test.h
@@ -21,6 +21,7 @@
#include <dns/message.h>
#include <dns/name.h>
#include <dns/masterload.h>
+#include <dns/rdataclass.h>
#include <dns/rrclass.h>
#include <dns/rrset.h>
@@ -113,13 +114,32 @@ void rrsetCheck(isc::dns::ConstRRsetPtr expected_rrset,
/// The definitions in this name space are not supposed to be used publicly,
/// but are given here because they are used in templated functions.
namespace detail {
-// Helper matching class used in rrsetsCheck()
+// Helper matching class used in rrsetsCheck(). Basically we only have to
+// check the equality of name, RR type and RR class, but for RRSIGs we need
+// special additional checks because they are essentially different if their
+// 'type covered' are different. For simplicity, we only compare the types
+// of the first RRSIG RDATAs (and only check when they exist); if there's
+// further difference in the RDATA, the main comparison checks will detect it.
struct RRsetMatch : public std::unary_function<isc::dns::ConstRRsetPtr, bool> {
RRsetMatch(isc::dns::ConstRRsetPtr target) : target_(target) {}
bool operator()(isc::dns::ConstRRsetPtr rrset) const {
- return (rrset->getType() == target_->getType() &&
- rrset->getClass() == target_->getClass() &&
- rrset->getName() == target_->getName());
+ if (rrset->getType() != target_->getType() ||
+ rrset->getClass() != target_->getClass() ||
+ rrset->getName() != target_->getName()) {
+ return (false);
+ }
+ if (rrset->getType() != isc::dns::RRType::RRSIG()) {
+ return (true);
+ }
+ if (rrset->getRdataCount() == 0 || target_->getRdataCount() == 0) {
+ return (true);
+ }
+ isc::dns::RdataIteratorPtr rdit = rrset->getRdataIterator();
+ isc::dns::RdataIteratorPtr targetit = target_->getRdataIterator();
+ return (dynamic_cast<const isc::dns::rdata::generic::RRSIG&>(
+ rdit->getCurrent()).typeCovered() ==
+ dynamic_cast<const isc::dns::rdata::generic::RRSIG&>(
+ targetit->getCurrent()).typeCovered());
}
const isc::dns::ConstRRsetPtr target_;
private:
diff --git a/tests/system/README b/tests/system/README
index a43d49e..a1c0a97 100644
--- a/tests/system/README
+++ b/tests/system/README
@@ -5,48 +5,49 @@ See COPYRIGHT in the source root or http://isc.org/copyright.html for terms.
This is a simple test environment for running BIND 10 system tests
involving multiple name servers. It was originally developed for BIND
9, and has been ported to test BIND 10 implementations. Ideally we
-should share the same framework for both versions, so some part of
-the original setup are kept, even though they are BIND 9 specific and
-not currently used.
+should share the same framework for both versions, so some part of the
+original setup are kept, even though they are BIND 9 specific and not
+currently used.
-Also, these tests generally rely on BIND 9 programs, most commonly its
-dig, and will sometimes be its name server (named). So, the test
+Also, these tests generally rely on BIND 9 programs, most commonly
+its dig, and will sometimes be its name server (named). So, the test
environment assumes that there's a source tree of BIND 9 where its
-programs are built, and that an environment variable "BIND9_TOP" is
-set to point to the top directory of the source tree.
+programs are built, and that an environment variable "BIND9_TOP" is set
+to point to the top directory of the source tree.
There are multiple test suites, each in a separate subdirectory and
involving a different DNS setup. They are:
bindctl/ Some basic management operations using the bindctl tool
- glue/ Glue handling tests
+ glue/ Glue handling tests
+ ixfr/ Incremental transfer tests
+
(the following tests are planned to be added soon)
- dnssec/ DNSSEC tests
+ dnssec/ DNSSEC tests
masterfile/ Master file parser
- xfer/ Zone transfer tests
+ axfr/ Full-transfer tests
Typically each test suite sets up 2-5 instances of BIND 10 (or BIND 9
-named) and then performs one or more tests against them. Within the
-test suite subdirectory, each instance has a separate subdirectory
-containing its configuration data. By convention, these
-subdirectories are named "nsx1", "nsx2", etc for BIND 10 ("x" means
-BIND 10), and "ns1", "ns2", etc. for BIND 9.
+named) and then performs one or more tests against them. Within the test
+suite subdirectory, each instance has a separate subdirectory containing
+its configuration data. By convention, these subdirectories are named
+"nsx1", "nsx2", etc for BIND 10 ("x" means BIND 10), and "ns1", "ns2",
+etc. for BIND 9.
The tests are completely self-contained and do not require access to
-the real DNS. Generally, one of the test servers (ns[x]1) is set up
-as a root name server and is listed in the hints file of the others.
+the real DNS. Generally, one of the test servers (ns[x]1) is set up as
+a root name server and is listed in the hints file of the others.
-To enable all servers to run on the same machine, they bind to
-separate virtual IP address on the loopback interface. ns[x]1 runs on
-10.53.0.1, ns[x]2 on 10.53.0.2, etc. Before running any tests, you
-must set up these addresses by running "ifconfig.sh up" as root.
+To enable all servers to run on the same machine, they bind to separate
+virtual IP address on the loopback interface. ns[x]1 runs on 10.53.0.1,
+ns[x]2 on 10.53.0.2, etc. Before running any tests, you must set up
+these addresses by running "ifconfig.sh up" as root.
Mac OS X:
-If you wish to make the interfaces survive across reboots
-copy org.isc.bind.system and org.isc.bind.system to
-/Library/LaunchDaemons then run
-"launchctl load /Library/LaunchDaemons/org.isc.bind.system.plist" as
-root.
+If you wish to make the interfaces survive across reboots copy
+org.isc.bind.system and org.isc.bind.system to /Library/LaunchDaemons
+then run "launchctl load /Library/LaunchDaemons/org.isc.bind.system.plist"
+as root.
The servers use port 53210 instead of the usual port 53, so they can be
run without root privileges once the interfaces have been set up.
diff --git a/tests/system/cleanall.sh b/tests/system/cleanall.sh
index d23d103..434c6b1 100755
--- a/tests/system/cleanall.sh
+++ b/tests/system/cleanall.sh
@@ -27,7 +27,7 @@ find . -type f \( \
status=0
-for d in ./.* ./*
+for d in ./.* ./* ./*/*
do
case $d in ./.|./..) continue ;; esac
test -d $d || continue
diff --git a/tests/system/common/rndc.conf b/tests/system/common/rndc.conf
new file mode 100644
index 0000000..a897548
--- /dev/null
+++ b/tests/system/common/rndc.conf
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2000, 2001 Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+options {
+ default-key "rndc_key";
+};
+
+key rndc_key {
+ algorithm hmac-md5;
+ secret "1234abcd8765";
+};
diff --git a/tests/system/common/rndc.key b/tests/system/common/rndc.key
new file mode 100644
index 0000000..c2c3457
--- /dev/null
+++ b/tests/system/common/rndc.key
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id: rndc.key,v 1.3 2011-03-12 04:59:47 tbox Exp $ */
+
+key rndc_key {
+ secret "1234abcd8765";
+ algorithm hmac-md5;
+};
diff --git a/tests/system/conf.sh.in b/tests/system/conf.sh.in
index 66aa3f5..92f72fa 100755
--- a/tests/system/conf.sh.in
+++ b/tests/system/conf.sh.in
@@ -35,23 +35,36 @@ if [ -z $BIND9_TOP ]; then
fi
# Find the top of the source and test trees.
-TOP=@abs_top_srcdir@
-TEST_TOP=@abs_builddir@
-
-RUN_BIND10=$TOP/src/bin/bind10/run_bind10.sh
-RUN_BINDCTL=$TOP/src/bin/bindctl/run_bindctl.sh
-BINDCTL_CSV_DIR=@abs_srcdir@/common/
-B10_LOADZONE=$TOP/src/bin/loadzone/run_loadzone.sh
-BIND9_NAMED=$BIND9_TOP/bin/named/named
-DIG=$BIND9_TOP/bin/dig/dig
+export TOP=@abs_top_srcdir@
+export TEST_TOP=@abs_builddir@
+
+# Programs
+export RUN_BIND10=$TOP/src/bin/bind10/run_bind10.sh
+export RUN_BINDCTL=$TOP/src/bin/bindctl/run_bindctl.sh
+export BINDCTL_CSV_DIR=@abs_srcdir@/common/
+export B10_LOADZONE=$TOP/src/bin/loadzone/run_loadzone.sh
+export BIND9_NAMED=$BIND9_TOP/bin/named/named
+export DIG=$BIND9_TOP/bin/dig/dig
+export RNDC=$BIND9_TOP/bin/rndc/rndc
+
# Test tools borrowed from BIND 9's system test (without change).
-TESTSOCK=$BIND9_TOP/bin/tests/system/testsock.pl
-DIGCOMP=$BIND9_TOP/bin/tests/system/digcomp.pl
+export TESTSOCK=$BIND9_TOP/bin/tests/system/testsock.pl
+export DIGCOMP=$BIND9_TOP/bin/tests/system/digcomp.pl
+
+export SUBDIRS="bindctl glue ixfr/in-2"
+# Add appropriate subdirectories to the above statement as the tests become
+# available.
+#SUBDIRS="dnssec masterfile ixfr/in-1 ixfr/in-2 ixfr/in-4"
-SUBDIRS="bindctl glue"
-#SUBDIRS="dnssec masterfile xfer"
+# PERL will be an empty string if no perl interpreter was found. A similar
+# comment applies to AWK.
+export PERL=@PERL@
+export AWK=@AWK@
-# PERL will be an empty string if no perl interpreter was found.
-PERL=@PERL@
+# Other constants
+export RNDC_PORT=9953
+export DNS_PORT=53210
-export RUN_BIND10 BIND9_NAMED DIG SUBDIRS PERL TESTSOCK
+export TESTS_TOP=$TOP/tests
+export SYSTEM_TOP=$TESTS_TOP/system
+export IXFR_TOP=$SYSTEM_TOP/ixfr
diff --git a/tests/system/ixfr/README b/tests/system/ixfr/README
new file mode 100644
index 0000000..51cba8a
--- /dev/null
+++ b/tests/system/ixfr/README
@@ -0,0 +1,86 @@
+Introduction
+============
+The directories in-1 to in-4 implement the following tests of the IXFR-in
+capability of BIND 10.
+
+in-1: Check that BIND 10 can receive IXFR in a single UDP packet.
+in-2: Check that BIND 10 can receive IXFR via TCP.
+in-3: Check that BIND 10 will request AXFR if the server does not support IXFR.
+in-4: Check that BIND 10 will request IXFR when its SOA refresh times out
+
+The tests are described more fully in the document:
+
+http://bind10.isc.org/wiki/IxfrSystemTests
+
+Overview
+========
+All the tests use two nameservers:
+
+* A BIND 9 nameserver acting as the IXFR server (using the nomenclature
+of RFC 1995).
+* A BIND 10 nameserver acting at the IXFR client.
+
+In general, the tests attempt to set up the server and client independently.
+Communication is established between the systems by updating their
+configurations and a notification sent to the client. This should cause the
+client to request an IXFR from the server. (The exception is test 4, where the
+request is a result of the expiration of the SOA refresh time.)
+
+A check of zone files - or in these tests, of SOA serial number - can only
+reveal that a transfer has taken place. To check what has happened,
+e.g. whether the transfer was via UDP or whether a TCP request took place,
+the BIND 10 log file is searched for known message IDs.
+
+The searching of the log files for message IDs is one of the reasons that,
+unlike other system tests, the IXFR set of tests is broken up into separate
+tests that require the stopping and starting of nameservers (and tidying up of
+log files) between each test. Doing this means that only the existence of a
+particular message ID needs to be checked - there is no risk that another test
+produced it. The other reason is that the each IXFR test requires the
+nameservers to be in a specific state at the start of the test; this is easier
+to assure if they are not updating one another as the result of configuration
+settings established in the previous test.
+
+Test Files
+==========
+
+Data Files
+----------
+(All within tests/system/ixfr. Some .in files are processed to substitute
+for build variables in the build process to give the files listed here.)
+
+db.example.nX. These files hold the RRs for a zone for which should not
+fit within a single UDP packet. The files are different versions of the zone
+- the N-0 version (i.e. the latest version - "N" - the "-0" is present so
+that the files have a consistent name), N-2 etc. (See the full description
+of the tests for the meaning of N-2 etc.)
+
+db.example.common: A set of RRs to bulk out the zone to be larger than can
+be contained in a single UDP packet.
+
+db.example.n2.refresh: The N-2 version of the zone, but with a small SOA
+refresh time (for test 4).
+
+named_xxxx.conf: Various BIND 9 configuration files with NOTIFYs and/or
+IXFR enabled or disabled.
+
+Directories
+-----------
+The tests/system/ixfr directory holds the IXFR tests. Within that
+directory are subdirectories in-1 through in-4 for each test. And within
+each test directory are the directories ns1 (for the BIND 9 nameserver)
+and nsx2 (for the BIND 10 nameserver).
+
+Shell Scripts
+-------------
+The IXFR tests use the same framework as the rest of the system tests,
+being based around shell scripts. Many have a ".in" form as they require
+substitution of build variables before they can be used, and so are
+listed in configure.ac. The files specific to the IXFR tests are:
+
+tests/system/ixfr/ixfr_init.sh.in: defines environment variables and shell
+subroutines used in the tests. (This references system/conf.sh.in which
+defines most of them.)
+
+tests/system/ixfr/common_tests.sh.in: tests in-1 and in-2 are virtually
+identical - this holds the common code.
diff --git a/tests/system/ixfr/b10-config.db.in b/tests/system/ixfr/b10-config.db.in
new file mode 100644
index 0000000..946d80f
--- /dev/null
+++ b/tests/system/ixfr/b10-config.db.in
@@ -0,0 +1,23 @@
+{"version": 2,
+ "Xfrin": {
+ "zones": [{
+ "master_addr": "10.53.0.1",
+ "master_port": 53210,
+ "name": "example.",
+ "use_ixfr": true
+ }]
+ },
+ "Auth": {
+ "listen_on": [{
+ "address": "10.53.0.2",
+ "port": 53210
+ }],
+ "database_file": "@abs_builddir@/zone.sqlite3"
+ },
+ "Zonemgr": {
+ "secondary_zones": [{
+ "name": "example.",
+ "class": "IN"
+ }]
+ }
+}
diff --git a/tests/system/ixfr/clean_ns.sh b/tests/system/ixfr/clean_ns.sh
new file mode 100644
index 0000000..88f4ff1
--- /dev/null
+++ b/tests/system/ixfr/clean_ns.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# Clean up nameserver directories after zone transfer tests.
+
+rm -f ns1/named.conf
+rm -f ns1/db.example*
+rm -f ns1/named.memstats
+
+rm -f nsx2/bind10.run
+rm -f nsx2/b10-config.db
+rm -f ../zone.sqlite3
+
+rm -f client.dig
+rm -f server.dig
diff --git a/tests/system/ixfr/common_tests.sh.in b/tests/system/ixfr/common_tests.sh.in
new file mode 100644
index 0000000..90d0284
--- /dev/null
+++ b/tests/system/ixfr/common_tests.sh.in
@@ -0,0 +1,78 @@
+#!/bin/sh
+#
+# Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# \file
+# This script is used in a couple of IXFR tests.
+#
+# Preconditions:\n
+# The BIND 9 nameserver (ns1, 10.53.0.1, acting as the IXFR server) is loaded
+# with the N-4 version of the zone. (It may hold prior versions as well.)
+# Notifications are disabled.
+#
+# The BIND 10 nameserver (nsx2, 10.53.0.2, acting as the IXFR client) is loaded
+# with an earlier (unspecified) version of the zone.
+#
+# Actions:\n
+# This script updates the IXFR server with the N-2 and N-0 versions of the zone.
+# It then updates the BIND 10 configuration so that it looks for IXFRs from
+# the IXFR server and causes the server to send the client a NOTIFY. After
+# waiting for the client to update from the server, it compares ther zones of
+# the two system, reporting an error if they are different.
+#
+# Caller Actions:\n
+# The caller can pre-load the BIND 10 IXFR client with whatever version of the
+# zone it requires. It can also load the BIND 9 IXFR server with zones earlier
+# than N-4.
+#
+# After this test has finished, it is up to the caller to check the logs
+# to see if they report the expected behavior.
+#
+# \return 0 if the script executed successfully, non-zero otherwise
+
+# Set up variables etc.
+. @abs_top_builddir@/tests/system/conf.sh
+. $IXFR_TOP/ixfr_init.sh
+
+set -e
+
+# Store the SOA serial number of the BIND 10 client for later use.
+old_client_serial=`$DIG_SOA @$CLIENT_IP | $AWK '{print $3}'`
+echo "I:$CLIENT_NAME SOA serial of IXFR client is $old_client_serial"
+
+# Load the BIND 9 system (the IXFR server) with the "n - 2" and "n" version of
+# the zones. With ixfr-from-differences set to "yes", the nameserver should
+# generate the differences between them.
+echo "I:$SERVER_NAME updating IXFR-server for ixfr-in tests"
+update_server_zone $SERVER_NAME $SERVER_IP $IXFR_TOP/db.example.n2
+
+# Wait a bit - it seems that if two updates are loaded in quick succession,
+# the second sometimes gets lost.
+sleep 5
+update_server_zone $SERVER_NAME $SERVER_IP $IXFR_TOP/db.example.n0
+
+echo "I:$CLIENT_NAME forcing IXFR client to retrieve new version of the zone"
+$RUN_BINDCTL << .
+Xfrin retransfer zone_name="example"
+.
+
+# Wait for the client to update itself.
+wait_for_update $CLIENT_NAME $CLIENT_IP $old_client_serial
+
+# Has updated, compare the client and server's versions of the zone s- they
+# should be the same.
+compare_zones $SERVER_NAME $SERVER_IP $CLIENT_NAME $CLIENT_IP
+
+set +e
diff --git a/tests/system/ixfr/db.example.common b/tests/system/ixfr/db.example.common
new file mode 100644
index 0000000..90435ce
--- /dev/null
+++ b/tests/system/ixfr/db.example.common
@@ -0,0 +1,1556 @@
+; Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+;
+; Permission to use, copy, modify, and/or distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+; PERFORMANCE OF THIS SOFTWARE.
+
+; This files holds a number of AAAA records to bulk out a zone file beyond
+; 16kB. It is used in tests where it is required that the contents of a zone
+; do not fit into a single UDP packet.
+
+aaaa-000 IN AAAA 2001:db8::0000
+aaaa-001 IN AAAA 2001:db8::0001
+aaaa-002 IN AAAA 2001:db8::0002
+aaaa-003 IN AAAA 2001:db8::0003
+aaaa-004 IN AAAA 2001:db8::0004
+aaaa-005 IN AAAA 2001:db8::0005
+aaaa-006 IN AAAA 2001:db8::0006
+aaaa-007 IN AAAA 2001:db8::0007
+aaaa-008 IN AAAA 2001:db8::0008
+aaaa-009 IN AAAA 2001:db8::0009
+aaaa-010 IN AAAA 2001:db8::000a
+aaaa-011 IN AAAA 2001:db8::000b
+aaaa-012 IN AAAA 2001:db8::000c
+aaaa-013 IN AAAA 2001:db8::000d
+aaaa-014 IN AAAA 2001:db8::000e
+aaaa-015 IN AAAA 2001:db8::000f
+aaaa-016 IN AAAA 2001:db8::0010
+aaaa-017 IN AAAA 2001:db8::0011
+aaaa-018 IN AAAA 2001:db8::0012
+aaaa-019 IN AAAA 2001:db8::0013
+aaaa-020 IN AAAA 2001:db8::0014
+aaaa-021 IN AAAA 2001:db8::0015
+aaaa-022 IN AAAA 2001:db8::0016
+aaaa-023 IN AAAA 2001:db8::0017
+aaaa-024 IN AAAA 2001:db8::0018
+aaaa-025 IN AAAA 2001:db8::0019
+aaaa-026 IN AAAA 2001:db8::001a
+aaaa-027 IN AAAA 2001:db8::001b
+aaaa-028 IN AAAA 2001:db8::001c
+aaaa-029 IN AAAA 2001:db8::001d
+aaaa-030 IN AAAA 2001:db8::001e
+aaaa-031 IN AAAA 2001:db8::001f
+aaaa-032 IN AAAA 2001:db8::0020
+aaaa-033 IN AAAA 2001:db8::0021
+aaaa-034 IN AAAA 2001:db8::0022
+aaaa-035 IN AAAA 2001:db8::0023
+aaaa-036 IN AAAA 2001:db8::0024
+aaaa-037 IN AAAA 2001:db8::0025
+aaaa-038 IN AAAA 2001:db8::0026
+aaaa-039 IN AAAA 2001:db8::0027
+aaaa-040 IN AAAA 2001:db8::0028
+aaaa-041 IN AAAA 2001:db8::0029
+aaaa-042 IN AAAA 2001:db8::002a
+aaaa-043 IN AAAA 2001:db8::002b
+aaaa-044 IN AAAA 2001:db8::002c
+aaaa-045 IN AAAA 2001:db8::002d
+aaaa-046 IN AAAA 2001:db8::002e
+aaaa-047 IN AAAA 2001:db8::002f
+aaaa-048 IN AAAA 2001:db8::0030
+aaaa-049 IN AAAA 2001:db8::0031
+aaaa-050 IN AAAA 2001:db8::0032
+aaaa-051 IN AAAA 2001:db8::0033
+aaaa-052 IN AAAA 2001:db8::0034
+aaaa-053 IN AAAA 2001:db8::0035
+aaaa-054 IN AAAA 2001:db8::0036
+aaaa-055 IN AAAA 2001:db8::0037
+aaaa-056 IN AAAA 2001:db8::0038
+aaaa-057 IN AAAA 2001:db8::0039
+aaaa-058 IN AAAA 2001:db8::003a
+aaaa-059 IN AAAA 2001:db8::003b
+aaaa-060 IN AAAA 2001:db8::003c
+aaaa-061 IN AAAA 2001:db8::003d
+aaaa-062 IN AAAA 2001:db8::003e
+aaaa-063 IN AAAA 2001:db8::003f
+aaaa-064 IN AAAA 2001:db8::0040
+aaaa-065 IN AAAA 2001:db8::0041
+aaaa-066 IN AAAA 2001:db8::0042
+aaaa-067 IN AAAA 2001:db8::0043
+aaaa-068 IN AAAA 2001:db8::0044
+aaaa-069 IN AAAA 2001:db8::0045
+aaaa-070 IN AAAA 2001:db8::0046
+aaaa-071 IN AAAA 2001:db8::0047
+aaaa-072 IN AAAA 2001:db8::0048
+aaaa-073 IN AAAA 2001:db8::0049
+aaaa-074 IN AAAA 2001:db8::004a
+aaaa-075 IN AAAA 2001:db8::004b
+aaaa-076 IN AAAA 2001:db8::004c
+aaaa-077 IN AAAA 2001:db8::004d
+aaaa-078 IN AAAA 2001:db8::004e
+aaaa-079 IN AAAA 2001:db8::004f
+aaaa-080 IN AAAA 2001:db8::0050
+aaaa-081 IN AAAA 2001:db8::0051
+aaaa-082 IN AAAA 2001:db8::0052
+aaaa-083 IN AAAA 2001:db8::0053
+aaaa-084 IN AAAA 2001:db8::0054
+aaaa-085 IN AAAA 2001:db8::0055
+aaaa-086 IN AAAA 2001:db8::0056
+aaaa-087 IN AAAA 2001:db8::0057
+aaaa-088 IN AAAA 2001:db8::0058
+aaaa-089 IN AAAA 2001:db8::0059
+aaaa-090 IN AAAA 2001:db8::005a
+aaaa-091 IN AAAA 2001:db8::005b
+aaaa-092 IN AAAA 2001:db8::005c
+aaaa-093 IN AAAA 2001:db8::005d
+aaaa-094 IN AAAA 2001:db8::005e
+aaaa-095 IN AAAA 2001:db8::005f
+aaaa-096 IN AAAA 2001:db8::0060
+aaaa-097 IN AAAA 2001:db8::0061
+aaaa-098 IN AAAA 2001:db8::0062
+aaaa-099 IN AAAA 2001:db8::0063
+aaaa-100 IN AAAA 2001:db8::0064
+aaaa-101 IN AAAA 2001:db8::0065
+aaaa-102 IN AAAA 2001:db8::0066
+aaaa-103 IN AAAA 2001:db8::0067
+aaaa-104 IN AAAA 2001:db8::0068
+aaaa-105 IN AAAA 2001:db8::0069
+aaaa-106 IN AAAA 2001:db8::006a
+aaaa-107 IN AAAA 2001:db8::006b
+aaaa-108 IN AAAA 2001:db8::006c
+aaaa-109 IN AAAA 2001:db8::006d
+aaaa-110 IN AAAA 2001:db8::006e
+aaaa-111 IN AAAA 2001:db8::006f
+aaaa-112 IN AAAA 2001:db8::0070
+aaaa-113 IN AAAA 2001:db8::0071
+aaaa-114 IN AAAA 2001:db8::0072
+aaaa-115 IN AAAA 2001:db8::0073
+aaaa-116 IN AAAA 2001:db8::0074
+aaaa-117 IN AAAA 2001:db8::0075
+aaaa-118 IN AAAA 2001:db8::0076
+aaaa-119 IN AAAA 2001:db8::0077
+aaaa-120 IN AAAA 2001:db8::0078
+aaaa-121 IN AAAA 2001:db8::0079
+aaaa-122 IN AAAA 2001:db8::007a
+aaaa-123 IN AAAA 2001:db8::007b
+aaaa-124 IN AAAA 2001:db8::007c
+aaaa-125 IN AAAA 2001:db8::007d
+aaaa-126 IN AAAA 2001:db8::007e
+aaaa-127 IN AAAA 2001:db8::007f
+aaaa-128 IN AAAA 2001:db8::0080
+aaaa-129 IN AAAA 2001:db8::0081
+aaaa-130 IN AAAA 2001:db8::0082
+aaaa-131 IN AAAA 2001:db8::0083
+aaaa-132 IN AAAA 2001:db8::0084
+aaaa-133 IN AAAA 2001:db8::0085
+aaaa-134 IN AAAA 2001:db8::0086
+aaaa-135 IN AAAA 2001:db8::0087
+aaaa-136 IN AAAA 2001:db8::0088
+aaaa-137 IN AAAA 2001:db8::0089
+aaaa-138 IN AAAA 2001:db8::008a
+aaaa-139 IN AAAA 2001:db8::008b
+aaaa-140 IN AAAA 2001:db8::008c
+aaaa-141 IN AAAA 2001:db8::008d
+aaaa-142 IN AAAA 2001:db8::008e
+aaaa-143 IN AAAA 2001:db8::008f
+aaaa-144 IN AAAA 2001:db8::0090
+aaaa-145 IN AAAA 2001:db8::0091
+aaaa-146 IN AAAA 2001:db8::0092
+aaaa-147 IN AAAA 2001:db8::0093
+aaaa-148 IN AAAA 2001:db8::0094
+aaaa-149 IN AAAA 2001:db8::0095
+aaaa-150 IN AAAA 2001:db8::0096
+aaaa-151 IN AAAA 2001:db8::0097
+aaaa-152 IN AAAA 2001:db8::0098
+aaaa-153 IN AAAA 2001:db8::0099
+aaaa-154 IN AAAA 2001:db8::009a
+aaaa-155 IN AAAA 2001:db8::009b
+aaaa-156 IN AAAA 2001:db8::009c
+aaaa-157 IN AAAA 2001:db8::009d
+aaaa-158 IN AAAA 2001:db8::009e
+aaaa-159 IN AAAA 2001:db8::009f
+aaaa-160 IN AAAA 2001:db8::00a0
+aaaa-161 IN AAAA 2001:db8::00a1
+aaaa-162 IN AAAA 2001:db8::00a2
+aaaa-163 IN AAAA 2001:db8::00a3
+aaaa-164 IN AAAA 2001:db8::00a4
+aaaa-165 IN AAAA 2001:db8::00a5
+aaaa-166 IN AAAA 2001:db8::00a6
+aaaa-167 IN AAAA 2001:db8::00a7
+aaaa-168 IN AAAA 2001:db8::00a8
+aaaa-169 IN AAAA 2001:db8::00a9
+aaaa-170 IN AAAA 2001:db8::00aa
+aaaa-171 IN AAAA 2001:db8::00ab
+aaaa-172 IN AAAA 2001:db8::00ac
+aaaa-173 IN AAAA 2001:db8::00ad
+aaaa-174 IN AAAA 2001:db8::00ae
+aaaa-175 IN AAAA 2001:db8::00af
+aaaa-176 IN AAAA 2001:db8::00b0
+aaaa-177 IN AAAA 2001:db8::00b1
+aaaa-178 IN AAAA 2001:db8::00b2
+aaaa-179 IN AAAA 2001:db8::00b3
+aaaa-180 IN AAAA 2001:db8::00b4
+aaaa-181 IN AAAA 2001:db8::00b5
+aaaa-182 IN AAAA 2001:db8::00b6
+aaaa-183 IN AAAA 2001:db8::00b7
+aaaa-184 IN AAAA 2001:db8::00b8
+aaaa-185 IN AAAA 2001:db8::00b9
+aaaa-186 IN AAAA 2001:db8::00ba
+aaaa-187 IN AAAA 2001:db8::00bb
+aaaa-188 IN AAAA 2001:db8::00bc
+aaaa-189 IN AAAA 2001:db8::00bd
+aaaa-190 IN AAAA 2001:db8::00be
+aaaa-191 IN AAAA 2001:db8::00bf
+aaaa-192 IN AAAA 2001:db8::00c0
+aaaa-193 IN AAAA 2001:db8::00c1
+aaaa-194 IN AAAA 2001:db8::00c2
+aaaa-195 IN AAAA 2001:db8::00c3
+aaaa-196 IN AAAA 2001:db8::00c4
+aaaa-197 IN AAAA 2001:db8::00c5
+aaaa-198 IN AAAA 2001:db8::00c6
+aaaa-199 IN AAAA 2001:db8::00c7
+aaaa-200 IN AAAA 2001:db8::00c8
+aaaa-201 IN AAAA 2001:db8::00c9
+aaaa-202 IN AAAA 2001:db8::00ca
+aaaa-203 IN AAAA 2001:db8::00cb
+aaaa-204 IN AAAA 2001:db8::00cc
+aaaa-205 IN AAAA 2001:db8::00cd
+aaaa-206 IN AAAA 2001:db8::00ce
+aaaa-207 IN AAAA 2001:db8::00cf
+aaaa-208 IN AAAA 2001:db8::00d0
+aaaa-209 IN AAAA 2001:db8::00d1
+aaaa-210 IN AAAA 2001:db8::00d2
+aaaa-211 IN AAAA 2001:db8::00d3
+aaaa-212 IN AAAA 2001:db8::00d4
+aaaa-213 IN AAAA 2001:db8::00d5
+aaaa-214 IN AAAA 2001:db8::00d6
+aaaa-215 IN AAAA 2001:db8::00d7
+aaaa-216 IN AAAA 2001:db8::00d8
+aaaa-217 IN AAAA 2001:db8::00d9
+aaaa-218 IN AAAA 2001:db8::00da
+aaaa-219 IN AAAA 2001:db8::00db
+aaaa-220 IN AAAA 2001:db8::00dc
+aaaa-221 IN AAAA 2001:db8::00dd
+aaaa-222 IN AAAA 2001:db8::00de
+aaaa-223 IN AAAA 2001:db8::00df
+aaaa-224 IN AAAA 2001:db8::00e0
+aaaa-225 IN AAAA 2001:db8::00e1
+aaaa-226 IN AAAA 2001:db8::00e2
+aaaa-227 IN AAAA 2001:db8::00e3
+aaaa-228 IN AAAA 2001:db8::00e4
+aaaa-229 IN AAAA 2001:db8::00e5
+aaaa-230 IN AAAA 2001:db8::00e6
+aaaa-231 IN AAAA 2001:db8::00e7
+aaaa-232 IN AAAA 2001:db8::00e8
+aaaa-233 IN AAAA 2001:db8::00e9
+aaaa-234 IN AAAA 2001:db8::00ea
+aaaa-235 IN AAAA 2001:db8::00eb
+aaaa-236 IN AAAA 2001:db8::00ec
+aaaa-237 IN AAAA 2001:db8::00ed
+aaaa-238 IN AAAA 2001:db8::00ee
+aaaa-239 IN AAAA 2001:db8::00ef
+aaaa-240 IN AAAA 2001:db8::00f0
+aaaa-241 IN AAAA 2001:db8::00f1
+aaaa-242 IN AAAA 2001:db8::00f2
+aaaa-243 IN AAAA 2001:db8::00f3
+aaaa-244 IN AAAA 2001:db8::00f4
+aaaa-245 IN AAAA 2001:db8::00f5
+aaaa-246 IN AAAA 2001:db8::00f6
+aaaa-247 IN AAAA 2001:db8::00f7
+aaaa-248 IN AAAA 2001:db8::00f8
+aaaa-249 IN AAAA 2001:db8::00f9
+aaaa-250 IN AAAA 2001:db8::00fa
+aaaa-251 IN AAAA 2001:db8::00fb
+aaaa-252 IN AAAA 2001:db8::00fc
+aaaa-253 IN AAAA 2001:db8::00fd
+aaaa-254 IN AAAA 2001:db8::00fe
+aaaa-255 IN AAAA 2001:db8::00ff
+aaaa-256 IN AAAA 2001:db8::0100
+aaaa-257 IN AAAA 2001:db8::0101
+aaaa-258 IN AAAA 2001:db8::0102
+aaaa-259 IN AAAA 2001:db8::0103
+aaaa-260 IN AAAA 2001:db8::0104
+aaaa-261 IN AAAA 2001:db8::0105
+aaaa-262 IN AAAA 2001:db8::0106
+aaaa-263 IN AAAA 2001:db8::0107
+aaaa-264 IN AAAA 2001:db8::0108
+aaaa-265 IN AAAA 2001:db8::0109
+aaaa-266 IN AAAA 2001:db8::010a
+aaaa-267 IN AAAA 2001:db8::010b
+aaaa-268 IN AAAA 2001:db8::010c
+aaaa-269 IN AAAA 2001:db8::010d
+aaaa-270 IN AAAA 2001:db8::010e
+aaaa-271 IN AAAA 2001:db8::010f
+aaaa-272 IN AAAA 2001:db8::0110
+aaaa-273 IN AAAA 2001:db8::0111
+aaaa-274 IN AAAA 2001:db8::0112
+aaaa-275 IN AAAA 2001:db8::0113
+aaaa-276 IN AAAA 2001:db8::0114
+aaaa-277 IN AAAA 2001:db8::0115
+aaaa-278 IN AAAA 2001:db8::0116
+aaaa-279 IN AAAA 2001:db8::0117
+aaaa-280 IN AAAA 2001:db8::0118
+aaaa-281 IN AAAA 2001:db8::0119
+aaaa-282 IN AAAA 2001:db8::011a
+aaaa-283 IN AAAA 2001:db8::011b
+aaaa-284 IN AAAA 2001:db8::011c
+aaaa-285 IN AAAA 2001:db8::011d
+aaaa-286 IN AAAA 2001:db8::011e
+aaaa-287 IN AAAA 2001:db8::011f
+aaaa-288 IN AAAA 2001:db8::0120
+aaaa-289 IN AAAA 2001:db8::0121
+aaaa-290 IN AAAA 2001:db8::0122
+aaaa-291 IN AAAA 2001:db8::0123
+aaaa-292 IN AAAA 2001:db8::0124
+aaaa-293 IN AAAA 2001:db8::0125
+aaaa-294 IN AAAA 2001:db8::0126
+aaaa-295 IN AAAA 2001:db8::0127
+aaaa-296 IN AAAA 2001:db8::0128
+aaaa-297 IN AAAA 2001:db8::0129
+aaaa-298 IN AAAA 2001:db8::012a
+aaaa-299 IN AAAA 2001:db8::012b
+aaaa-300 IN AAAA 2001:db8::012c
+aaaa-301 IN AAAA 2001:db8::012d
+aaaa-302 IN AAAA 2001:db8::012e
+aaaa-303 IN AAAA 2001:db8::012f
+aaaa-304 IN AAAA 2001:db8::0130
+aaaa-305 IN AAAA 2001:db8::0131
+aaaa-306 IN AAAA 2001:db8::0132
+aaaa-307 IN AAAA 2001:db8::0133
+aaaa-308 IN AAAA 2001:db8::0134
+aaaa-309 IN AAAA 2001:db8::0135
+aaaa-310 IN AAAA 2001:db8::0136
+aaaa-311 IN AAAA 2001:db8::0137
+aaaa-312 IN AAAA 2001:db8::0138
+aaaa-313 IN AAAA 2001:db8::0139
+aaaa-314 IN AAAA 2001:db8::013a
+aaaa-315 IN AAAA 2001:db8::013b
+aaaa-316 IN AAAA 2001:db8::013c
+aaaa-317 IN AAAA 2001:db8::013d
+aaaa-318 IN AAAA 2001:db8::013e
+aaaa-319 IN AAAA 2001:db8::013f
+aaaa-320 IN AAAA 2001:db8::0140
+aaaa-321 IN AAAA 2001:db8::0141
+aaaa-322 IN AAAA 2001:db8::0142
+aaaa-323 IN AAAA 2001:db8::0143
+aaaa-324 IN AAAA 2001:db8::0144
+aaaa-325 IN AAAA 2001:db8::0145
+aaaa-326 IN AAAA 2001:db8::0146
+aaaa-327 IN AAAA 2001:db8::0147
+aaaa-328 IN AAAA 2001:db8::0148
+aaaa-329 IN AAAA 2001:db8::0149
+aaaa-330 IN AAAA 2001:db8::014a
+aaaa-331 IN AAAA 2001:db8::014b
+aaaa-332 IN AAAA 2001:db8::014c
+aaaa-333 IN AAAA 2001:db8::014d
+aaaa-334 IN AAAA 2001:db8::014e
+aaaa-335 IN AAAA 2001:db8::014f
+aaaa-336 IN AAAA 2001:db8::0150
+aaaa-337 IN AAAA 2001:db8::0151
+aaaa-338 IN AAAA 2001:db8::0152
+aaaa-339 IN AAAA 2001:db8::0153
+aaaa-340 IN AAAA 2001:db8::0154
+aaaa-341 IN AAAA 2001:db8::0155
+aaaa-342 IN AAAA 2001:db8::0156
+aaaa-343 IN AAAA 2001:db8::0157
+aaaa-344 IN AAAA 2001:db8::0158
+aaaa-345 IN AAAA 2001:db8::0159
+aaaa-346 IN AAAA 2001:db8::015a
+aaaa-347 IN AAAA 2001:db8::015b
+aaaa-348 IN AAAA 2001:db8::015c
+aaaa-349 IN AAAA 2001:db8::015d
+aaaa-350 IN AAAA 2001:db8::015e
+aaaa-351 IN AAAA 2001:db8::015f
+aaaa-352 IN AAAA 2001:db8::0160
+aaaa-353 IN AAAA 2001:db8::0161
+aaaa-354 IN AAAA 2001:db8::0162
+aaaa-355 IN AAAA 2001:db8::0163
+aaaa-356 IN AAAA 2001:db8::0164
+aaaa-357 IN AAAA 2001:db8::0165
+aaaa-358 IN AAAA 2001:db8::0166
+aaaa-359 IN AAAA 2001:db8::0167
+aaaa-360 IN AAAA 2001:db8::0168
+aaaa-361 IN AAAA 2001:db8::0169
+aaaa-362 IN AAAA 2001:db8::016a
+aaaa-363 IN AAAA 2001:db8::016b
+aaaa-364 IN AAAA 2001:db8::016c
+aaaa-365 IN AAAA 2001:db8::016d
+aaaa-366 IN AAAA 2001:db8::016e
+aaaa-367 IN AAAA 2001:db8::016f
+aaaa-368 IN AAAA 2001:db8::0170
+aaaa-369 IN AAAA 2001:db8::0171
+aaaa-370 IN AAAA 2001:db8::0172
+aaaa-371 IN AAAA 2001:db8::0173
+aaaa-372 IN AAAA 2001:db8::0174
+aaaa-373 IN AAAA 2001:db8::0175
+aaaa-374 IN AAAA 2001:db8::0176
+aaaa-375 IN AAAA 2001:db8::0177
+aaaa-376 IN AAAA 2001:db8::0178
+aaaa-377 IN AAAA 2001:db8::0179
+aaaa-378 IN AAAA 2001:db8::017a
+aaaa-379 IN AAAA 2001:db8::017b
+aaaa-380 IN AAAA 2001:db8::017c
+aaaa-381 IN AAAA 2001:db8::017d
+aaaa-382 IN AAAA 2001:db8::017e
+aaaa-383 IN AAAA 2001:db8::017f
+aaaa-384 IN AAAA 2001:db8::0180
+aaaa-385 IN AAAA 2001:db8::0181
+aaaa-386 IN AAAA 2001:db8::0182
+aaaa-387 IN AAAA 2001:db8::0183
+aaaa-388 IN AAAA 2001:db8::0184
+aaaa-389 IN AAAA 2001:db8::0185
+aaaa-390 IN AAAA 2001:db8::0186
+aaaa-391 IN AAAA 2001:db8::0187
+aaaa-392 IN AAAA 2001:db8::0188
+aaaa-393 IN AAAA 2001:db8::0189
+aaaa-394 IN AAAA 2001:db8::018a
+aaaa-395 IN AAAA 2001:db8::018b
+aaaa-396 IN AAAA 2001:db8::018c
+aaaa-397 IN AAAA 2001:db8::018d
+aaaa-398 IN AAAA 2001:db8::018e
+aaaa-399 IN AAAA 2001:db8::018f
+aaaa-400 IN AAAA 2001:db8::0190
+aaaa-401 IN AAAA 2001:db8::0191
+aaaa-402 IN AAAA 2001:db8::0192
+aaaa-403 IN AAAA 2001:db8::0193
+aaaa-404 IN AAAA 2001:db8::0194
+aaaa-405 IN AAAA 2001:db8::0195
+aaaa-406 IN AAAA 2001:db8::0196
+aaaa-407 IN AAAA 2001:db8::0197
+aaaa-408 IN AAAA 2001:db8::0198
+aaaa-409 IN AAAA 2001:db8::0199
+aaaa-410 IN AAAA 2001:db8::019a
+aaaa-411 IN AAAA 2001:db8::019b
+aaaa-412 IN AAAA 2001:db8::019c
+aaaa-413 IN AAAA 2001:db8::019d
+aaaa-414 IN AAAA 2001:db8::019e
+aaaa-415 IN AAAA 2001:db8::019f
+aaaa-416 IN AAAA 2001:db8::01a0
+aaaa-417 IN AAAA 2001:db8::01a1
+aaaa-418 IN AAAA 2001:db8::01a2
+aaaa-419 IN AAAA 2001:db8::01a3
+aaaa-420 IN AAAA 2001:db8::01a4
+aaaa-421 IN AAAA 2001:db8::01a5
+aaaa-422 IN AAAA 2001:db8::01a6
+aaaa-423 IN AAAA 2001:db8::01a7
+aaaa-424 IN AAAA 2001:db8::01a8
+aaaa-425 IN AAAA 2001:db8::01a9
+aaaa-426 IN AAAA 2001:db8::01aa
+aaaa-427 IN AAAA 2001:db8::01ab
+aaaa-428 IN AAAA 2001:db8::01ac
+aaaa-429 IN AAAA 2001:db8::01ad
+aaaa-430 IN AAAA 2001:db8::01ae
+aaaa-431 IN AAAA 2001:db8::01af
+aaaa-432 IN AAAA 2001:db8::01b0
+aaaa-433 IN AAAA 2001:db8::01b1
+aaaa-434 IN AAAA 2001:db8::01b2
+aaaa-435 IN AAAA 2001:db8::01b3
+aaaa-436 IN AAAA 2001:db8::01b4
+aaaa-437 IN AAAA 2001:db8::01b5
+aaaa-438 IN AAAA 2001:db8::01b6
+aaaa-439 IN AAAA 2001:db8::01b7
+aaaa-440 IN AAAA 2001:db8::01b8
+aaaa-441 IN AAAA 2001:db8::01b9
+aaaa-442 IN AAAA 2001:db8::01ba
+aaaa-443 IN AAAA 2001:db8::01bb
+aaaa-444 IN AAAA 2001:db8::01bc
+aaaa-445 IN AAAA 2001:db8::01bd
+aaaa-446 IN AAAA 2001:db8::01be
+aaaa-447 IN AAAA 2001:db8::01bf
+aaaa-448 IN AAAA 2001:db8::01c0
+aaaa-449 IN AAAA 2001:db8::01c1
+aaaa-450 IN AAAA 2001:db8::01c2
+aaaa-451 IN AAAA 2001:db8::01c3
+aaaa-452 IN AAAA 2001:db8::01c4
+aaaa-453 IN AAAA 2001:db8::01c5
+aaaa-454 IN AAAA 2001:db8::01c6
+aaaa-455 IN AAAA 2001:db8::01c7
+aaaa-456 IN AAAA 2001:db8::01c8
+aaaa-457 IN AAAA 2001:db8::01c9
+aaaa-458 IN AAAA 2001:db8::01ca
+aaaa-459 IN AAAA 2001:db8::01cb
+aaaa-460 IN AAAA 2001:db8::01cc
+aaaa-461 IN AAAA 2001:db8::01cd
+aaaa-462 IN AAAA 2001:db8::01ce
+aaaa-463 IN AAAA 2001:db8::01cf
+aaaa-464 IN AAAA 2001:db8::01d0
+aaaa-465 IN AAAA 2001:db8::01d1
+aaaa-466 IN AAAA 2001:db8::01d2
+aaaa-467 IN AAAA 2001:db8::01d3
+aaaa-468 IN AAAA 2001:db8::01d4
+aaaa-469 IN AAAA 2001:db8::01d5
+aaaa-470 IN AAAA 2001:db8::01d6
+aaaa-471 IN AAAA 2001:db8::01d7
+aaaa-472 IN AAAA 2001:db8::01d8
+aaaa-473 IN AAAA 2001:db8::01d9
+aaaa-474 IN AAAA 2001:db8::01da
+aaaa-475 IN AAAA 2001:db8::01db
+aaaa-476 IN AAAA 2001:db8::01dc
+aaaa-477 IN AAAA 2001:db8::01dd
+aaaa-478 IN AAAA 2001:db8::01de
+aaaa-479 IN AAAA 2001:db8::01df
+aaaa-480 IN AAAA 2001:db8::01e0
+aaaa-481 IN AAAA 2001:db8::01e1
+aaaa-482 IN AAAA 2001:db8::01e2
+aaaa-483 IN AAAA 2001:db8::01e3
+aaaa-484 IN AAAA 2001:db8::01e4
+aaaa-485 IN AAAA 2001:db8::01e5
+aaaa-486 IN AAAA 2001:db8::01e6
+aaaa-487 IN AAAA 2001:db8::01e7
+aaaa-488 IN AAAA 2001:db8::01e8
+aaaa-489 IN AAAA 2001:db8::01e9
+aaaa-490 IN AAAA 2001:db8::01ea
+aaaa-491 IN AAAA 2001:db8::01eb
+aaaa-492 IN AAAA 2001:db8::01ec
+aaaa-493 IN AAAA 2001:db8::01ed
+aaaa-494 IN AAAA 2001:db8::01ee
+aaaa-495 IN AAAA 2001:db8::01ef
+aaaa-496 IN AAAA 2001:db8::01f0
+aaaa-497 IN AAAA 2001:db8::01f1
+aaaa-498 IN AAAA 2001:db8::01f2
+aaaa-499 IN AAAA 2001:db8::01f3
+aaaa-500 IN AAAA 2001:db8::01f4
+aaaa-501 IN AAAA 2001:db8::01f5
+aaaa-502 IN AAAA 2001:db8::01f6
+aaaa-503 IN AAAA 2001:db8::01f7
+aaaa-504 IN AAAA 2001:db8::01f8
+aaaa-505 IN AAAA 2001:db8::01f9
+aaaa-506 IN AAAA 2001:db8::01fa
+aaaa-507 IN AAAA 2001:db8::01fb
+aaaa-508 IN AAAA 2001:db8::01fc
+aaaa-509 IN AAAA 2001:db8::01fd
+aaaa-510 IN AAAA 2001:db8::01fe
+aaaa-511 IN AAAA 2001:db8::01ff
+
+bbbb-000 IN AAAA 2001:db8::1:0000
+bbbb-001 IN AAAA 2001:db8::1:0001
+bbbb-002 IN AAAA 2001:db8::1:0002
+bbbb-003 IN AAAA 2001:db8::1:0003
+bbbb-004 IN AAAA 2001:db8::1:0004
+bbbb-005 IN AAAA 2001:db8::1:0005
+bbbb-006 IN AAAA 2001:db8::1:0006
+bbbb-007 IN AAAA 2001:db8::1:0007
+bbbb-008 IN AAAA 2001:db8::1:0008
+bbbb-009 IN AAAA 2001:db8::1:0009
+bbbb-010 IN AAAA 2001:db8::1:000a
+bbbb-011 IN AAAA 2001:db8::1:000b
+bbbb-012 IN AAAA 2001:db8::1:000c
+bbbb-013 IN AAAA 2001:db8::1:000d
+bbbb-014 IN AAAA 2001:db8::1:000e
+bbbb-015 IN AAAA 2001:db8::1:000f
+bbbb-016 IN AAAA 2001:db8::1:0010
+bbbb-017 IN AAAA 2001:db8::1:0011
+bbbb-018 IN AAAA 2001:db8::1:0012
+bbbb-019 IN AAAA 2001:db8::1:0013
+bbbb-020 IN AAAA 2001:db8::1:0014
+bbbb-021 IN AAAA 2001:db8::1:0015
+bbbb-022 IN AAAA 2001:db8::1:0016
+bbbb-023 IN AAAA 2001:db8::1:0017
+bbbb-024 IN AAAA 2001:db8::1:0018
+bbbb-025 IN AAAA 2001:db8::1:0019
+bbbb-026 IN AAAA 2001:db8::1:001a
+bbbb-027 IN AAAA 2001:db8::1:001b
+bbbb-028 IN AAAA 2001:db8::1:001c
+bbbb-029 IN AAAA 2001:db8::1:001d
+bbbb-030 IN AAAA 2001:db8::1:001e
+bbbb-031 IN AAAA 2001:db8::1:001f
+bbbb-032 IN AAAA 2001:db8::1:0020
+bbbb-033 IN AAAA 2001:db8::1:0021
+bbbb-034 IN AAAA 2001:db8::1:0022
+bbbb-035 IN AAAA 2001:db8::1:0023
+bbbb-036 IN AAAA 2001:db8::1:0024
+bbbb-037 IN AAAA 2001:db8::1:0025
+bbbb-038 IN AAAA 2001:db8::1:0026
+bbbb-039 IN AAAA 2001:db8::1:0027
+bbbb-040 IN AAAA 2001:db8::1:0028
+bbbb-041 IN AAAA 2001:db8::1:0029
+bbbb-042 IN AAAA 2001:db8::1:002a
+bbbb-043 IN AAAA 2001:db8::1:002b
+bbbb-044 IN AAAA 2001:db8::1:002c
+bbbb-045 IN AAAA 2001:db8::1:002d
+bbbb-046 IN AAAA 2001:db8::1:002e
+bbbb-047 IN AAAA 2001:db8::1:002f
+bbbb-048 IN AAAA 2001:db8::1:0030
+bbbb-049 IN AAAA 2001:db8::1:0031
+bbbb-050 IN AAAA 2001:db8::1:0032
+bbbb-051 IN AAAA 2001:db8::1:0033
+bbbb-052 IN AAAA 2001:db8::1:0034
+bbbb-053 IN AAAA 2001:db8::1:0035
+bbbb-054 IN AAAA 2001:db8::1:0036
+bbbb-055 IN AAAA 2001:db8::1:0037
+bbbb-056 IN AAAA 2001:db8::1:0038
+bbbb-057 IN AAAA 2001:db8::1:0039
+bbbb-058 IN AAAA 2001:db8::1:003a
+bbbb-059 IN AAAA 2001:db8::1:003b
+bbbb-060 IN AAAA 2001:db8::1:003c
+bbbb-061 IN AAAA 2001:db8::1:003d
+bbbb-062 IN AAAA 2001:db8::1:003e
+bbbb-063 IN AAAA 2001:db8::1:003f
+bbbb-064 IN AAAA 2001:db8::1:0040
+bbbb-065 IN AAAA 2001:db8::1:0041
+bbbb-066 IN AAAA 2001:db8::1:0042
+bbbb-067 IN AAAA 2001:db8::1:0043
+bbbb-068 IN AAAA 2001:db8::1:0044
+bbbb-069 IN AAAA 2001:db8::1:0045
+bbbb-070 IN AAAA 2001:db8::1:0046
+bbbb-071 IN AAAA 2001:db8::1:0047
+bbbb-072 IN AAAA 2001:db8::1:0048
+bbbb-073 IN AAAA 2001:db8::1:0049
+bbbb-074 IN AAAA 2001:db8::1:004a
+bbbb-075 IN AAAA 2001:db8::1:004b
+bbbb-076 IN AAAA 2001:db8::1:004c
+bbbb-077 IN AAAA 2001:db8::1:004d
+bbbb-078 IN AAAA 2001:db8::1:004e
+bbbb-079 IN AAAA 2001:db8::1:004f
+bbbb-080 IN AAAA 2001:db8::1:0050
+bbbb-081 IN AAAA 2001:db8::1:0051
+bbbb-082 IN AAAA 2001:db8::1:0052
+bbbb-083 IN AAAA 2001:db8::1:0053
+bbbb-084 IN AAAA 2001:db8::1:0054
+bbbb-085 IN AAAA 2001:db8::1:0055
+bbbb-086 IN AAAA 2001:db8::1:0056
+bbbb-087 IN AAAA 2001:db8::1:0057
+bbbb-088 IN AAAA 2001:db8::1:0058
+bbbb-089 IN AAAA 2001:db8::1:0059
+bbbb-090 IN AAAA 2001:db8::1:005a
+bbbb-091 IN AAAA 2001:db8::1:005b
+bbbb-092 IN AAAA 2001:db8::1:005c
+bbbb-093 IN AAAA 2001:db8::1:005d
+bbbb-094 IN AAAA 2001:db8::1:005e
+bbbb-095 IN AAAA 2001:db8::1:005f
+bbbb-096 IN AAAA 2001:db8::1:0060
+bbbb-097 IN AAAA 2001:db8::1:0061
+bbbb-098 IN AAAA 2001:db8::1:0062
+bbbb-099 IN AAAA 2001:db8::1:0063
+bbbb-100 IN AAAA 2001:db8::1:0064
+bbbb-101 IN AAAA 2001:db8::1:0065
+bbbb-102 IN AAAA 2001:db8::1:0066
+bbbb-103 IN AAAA 2001:db8::1:0067
+bbbb-104 IN AAAA 2001:db8::1:0068
+bbbb-105 IN AAAA 2001:db8::1:0069
+bbbb-106 IN AAAA 2001:db8::1:006a
+bbbb-107 IN AAAA 2001:db8::1:006b
+bbbb-108 IN AAAA 2001:db8::1:006c
+bbbb-109 IN AAAA 2001:db8::1:006d
+bbbb-110 IN AAAA 2001:db8::1:006e
+bbbb-111 IN AAAA 2001:db8::1:006f
+bbbb-112 IN AAAA 2001:db8::1:0070
+bbbb-113 IN AAAA 2001:db8::1:0071
+bbbb-114 IN AAAA 2001:db8::1:0072
+bbbb-115 IN AAAA 2001:db8::1:0073
+bbbb-116 IN AAAA 2001:db8::1:0074
+bbbb-117 IN AAAA 2001:db8::1:0075
+bbbb-118 IN AAAA 2001:db8::1:0076
+bbbb-119 IN AAAA 2001:db8::1:0077
+bbbb-120 IN AAAA 2001:db8::1:0078
+bbbb-121 IN AAAA 2001:db8::1:0079
+bbbb-122 IN AAAA 2001:db8::1:007a
+bbbb-123 IN AAAA 2001:db8::1:007b
+bbbb-124 IN AAAA 2001:db8::1:007c
+bbbb-125 IN AAAA 2001:db8::1:007d
+bbbb-126 IN AAAA 2001:db8::1:007e
+bbbb-127 IN AAAA 2001:db8::1:007f
+bbbb-128 IN AAAA 2001:db8::1:0080
+bbbb-129 IN AAAA 2001:db8::1:0081
+bbbb-130 IN AAAA 2001:db8::1:0082
+bbbb-131 IN AAAA 2001:db8::1:0083
+bbbb-132 IN AAAA 2001:db8::1:0084
+bbbb-133 IN AAAA 2001:db8::1:0085
+bbbb-134 IN AAAA 2001:db8::1:0086
+bbbb-135 IN AAAA 2001:db8::1:0087
+bbbb-136 IN AAAA 2001:db8::1:0088
+bbbb-137 IN AAAA 2001:db8::1:0089
+bbbb-138 IN AAAA 2001:db8::1:008a
+bbbb-139 IN AAAA 2001:db8::1:008b
+bbbb-140 IN AAAA 2001:db8::1:008c
+bbbb-141 IN AAAA 2001:db8::1:008d
+bbbb-142 IN AAAA 2001:db8::1:008e
+bbbb-143 IN AAAA 2001:db8::1:008f
+bbbb-144 IN AAAA 2001:db8::1:0090
+bbbb-145 IN AAAA 2001:db8::1:0091
+bbbb-146 IN AAAA 2001:db8::1:0092
+bbbb-147 IN AAAA 2001:db8::1:0093
+bbbb-148 IN AAAA 2001:db8::1:0094
+bbbb-149 IN AAAA 2001:db8::1:0095
+bbbb-150 IN AAAA 2001:db8::1:0096
+bbbb-151 IN AAAA 2001:db8::1:0097
+bbbb-152 IN AAAA 2001:db8::1:0098
+bbbb-153 IN AAAA 2001:db8::1:0099
+bbbb-154 IN AAAA 2001:db8::1:009a
+bbbb-155 IN AAAA 2001:db8::1:009b
+bbbb-156 IN AAAA 2001:db8::1:009c
+bbbb-157 IN AAAA 2001:db8::1:009d
+bbbb-158 IN AAAA 2001:db8::1:009e
+bbbb-159 IN AAAA 2001:db8::1:009f
+bbbb-160 IN AAAA 2001:db8::1:00a0
+bbbb-161 IN AAAA 2001:db8::1:00a1
+bbbb-162 IN AAAA 2001:db8::1:00a2
+bbbb-163 IN AAAA 2001:db8::1:00a3
+bbbb-164 IN AAAA 2001:db8::1:00a4
+bbbb-165 IN AAAA 2001:db8::1:00a5
+bbbb-166 IN AAAA 2001:db8::1:00a6
+bbbb-167 IN AAAA 2001:db8::1:00a7
+bbbb-168 IN AAAA 2001:db8::1:00a8
+bbbb-169 IN AAAA 2001:db8::1:00a9
+bbbb-170 IN AAAA 2001:db8::1:00aa
+bbbb-171 IN AAAA 2001:db8::1:00ab
+bbbb-172 IN AAAA 2001:db8::1:00ac
+bbbb-173 IN AAAA 2001:db8::1:00ad
+bbbb-174 IN AAAA 2001:db8::1:00ae
+bbbb-175 IN AAAA 2001:db8::1:00af
+bbbb-176 IN AAAA 2001:db8::1:00b0
+bbbb-177 IN AAAA 2001:db8::1:00b1
+bbbb-178 IN AAAA 2001:db8::1:00b2
+bbbb-179 IN AAAA 2001:db8::1:00b3
+bbbb-180 IN AAAA 2001:db8::1:00b4
+bbbb-181 IN AAAA 2001:db8::1:00b5
+bbbb-182 IN AAAA 2001:db8::1:00b6
+bbbb-183 IN AAAA 2001:db8::1:00b7
+bbbb-184 IN AAAA 2001:db8::1:00b8
+bbbb-185 IN AAAA 2001:db8::1:00b9
+bbbb-186 IN AAAA 2001:db8::1:00ba
+bbbb-187 IN AAAA 2001:db8::1:00bb
+bbbb-188 IN AAAA 2001:db8::1:00bc
+bbbb-189 IN AAAA 2001:db8::1:00bd
+bbbb-190 IN AAAA 2001:db8::1:00be
+bbbb-191 IN AAAA 2001:db8::1:00bf
+bbbb-192 IN AAAA 2001:db8::1:00c0
+bbbb-193 IN AAAA 2001:db8::1:00c1
+bbbb-194 IN AAAA 2001:db8::1:00c2
+bbbb-195 IN AAAA 2001:db8::1:00c3
+bbbb-196 IN AAAA 2001:db8::1:00c4
+bbbb-197 IN AAAA 2001:db8::1:00c5
+bbbb-198 IN AAAA 2001:db8::1:00c6
+bbbb-199 IN AAAA 2001:db8::1:00c7
+bbbb-200 IN AAAA 2001:db8::1:00c8
+bbbb-201 IN AAAA 2001:db8::1:00c9
+bbbb-202 IN AAAA 2001:db8::1:00ca
+bbbb-203 IN AAAA 2001:db8::1:00cb
+bbbb-204 IN AAAA 2001:db8::1:00cc
+bbbb-205 IN AAAA 2001:db8::1:00cd
+bbbb-206 IN AAAA 2001:db8::1:00ce
+bbbb-207 IN AAAA 2001:db8::1:00cf
+bbbb-208 IN AAAA 2001:db8::1:00d0
+bbbb-209 IN AAAA 2001:db8::1:00d1
+bbbb-210 IN AAAA 2001:db8::1:00d2
+bbbb-211 IN AAAA 2001:db8::1:00d3
+bbbb-212 IN AAAA 2001:db8::1:00d4
+bbbb-213 IN AAAA 2001:db8::1:00d5
+bbbb-214 IN AAAA 2001:db8::1:00d6
+bbbb-215 IN AAAA 2001:db8::1:00d7
+bbbb-216 IN AAAA 2001:db8::1:00d8
+bbbb-217 IN AAAA 2001:db8::1:00d9
+bbbb-218 IN AAAA 2001:db8::1:00da
+bbbb-219 IN AAAA 2001:db8::1:00db
+bbbb-220 IN AAAA 2001:db8::1:00dc
+bbbb-221 IN AAAA 2001:db8::1:00dd
+bbbb-222 IN AAAA 2001:db8::1:00de
+bbbb-223 IN AAAA 2001:db8::1:00df
+bbbb-224 IN AAAA 2001:db8::1:00e0
+bbbb-225 IN AAAA 2001:db8::1:00e1
+bbbb-226 IN AAAA 2001:db8::1:00e2
+bbbb-227 IN AAAA 2001:db8::1:00e3
+bbbb-228 IN AAAA 2001:db8::1:00e4
+bbbb-229 IN AAAA 2001:db8::1:00e5
+bbbb-230 IN AAAA 2001:db8::1:00e6
+bbbb-231 IN AAAA 2001:db8::1:00e7
+bbbb-232 IN AAAA 2001:db8::1:00e8
+bbbb-233 IN AAAA 2001:db8::1:00e9
+bbbb-234 IN AAAA 2001:db8::1:00ea
+bbbb-235 IN AAAA 2001:db8::1:00eb
+bbbb-236 IN AAAA 2001:db8::1:00ec
+bbbb-237 IN AAAA 2001:db8::1:00ed
+bbbb-238 IN AAAA 2001:db8::1:00ee
+bbbb-239 IN AAAA 2001:db8::1:00ef
+bbbb-240 IN AAAA 2001:db8::1:00f0
+bbbb-241 IN AAAA 2001:db8::1:00f1
+bbbb-242 IN AAAA 2001:db8::1:00f2
+bbbb-243 IN AAAA 2001:db8::1:00f3
+bbbb-244 IN AAAA 2001:db8::1:00f4
+bbbb-245 IN AAAA 2001:db8::1:00f5
+bbbb-246 IN AAAA 2001:db8::1:00f6
+bbbb-247 IN AAAA 2001:db8::1:00f7
+bbbb-248 IN AAAA 2001:db8::1:00f8
+bbbb-249 IN AAAA 2001:db8::1:00f9
+bbbb-250 IN AAAA 2001:db8::1:00fa
+bbbb-251 IN AAAA 2001:db8::1:00fb
+bbbb-252 IN AAAA 2001:db8::1:00fc
+bbbb-253 IN AAAA 2001:db8::1:00fd
+bbbb-254 IN AAAA 2001:db8::1:00fe
+bbbb-255 IN AAAA 2001:db8::1:00ff
+bbbb-256 IN AAAA 2001:db8::1:0100
+bbbb-257 IN AAAA 2001:db8::1:0101
+bbbb-258 IN AAAA 2001:db8::1:0102
+bbbb-259 IN AAAA 2001:db8::1:0103
+bbbb-260 IN AAAA 2001:db8::1:0104
+bbbb-261 IN AAAA 2001:db8::1:0105
+bbbb-262 IN AAAA 2001:db8::1:0106
+bbbb-263 IN AAAA 2001:db8::1:0107
+bbbb-264 IN AAAA 2001:db8::1:0108
+bbbb-265 IN AAAA 2001:db8::1:0109
+bbbb-266 IN AAAA 2001:db8::1:010a
+bbbb-267 IN AAAA 2001:db8::1:010b
+bbbb-268 IN AAAA 2001:db8::1:010c
+bbbb-269 IN AAAA 2001:db8::1:010d
+bbbb-270 IN AAAA 2001:db8::1:010e
+bbbb-271 IN AAAA 2001:db8::1:010f
+bbbb-272 IN AAAA 2001:db8::1:0110
+bbbb-273 IN AAAA 2001:db8::1:0111
+bbbb-274 IN AAAA 2001:db8::1:0112
+bbbb-275 IN AAAA 2001:db8::1:0113
+bbbb-276 IN AAAA 2001:db8::1:0114
+bbbb-277 IN AAAA 2001:db8::1:0115
+bbbb-278 IN AAAA 2001:db8::1:0116
+bbbb-279 IN AAAA 2001:db8::1:0117
+bbbb-280 IN AAAA 2001:db8::1:0118
+bbbb-281 IN AAAA 2001:db8::1:0119
+bbbb-282 IN AAAA 2001:db8::1:011a
+bbbb-283 IN AAAA 2001:db8::1:011b
+bbbb-284 IN AAAA 2001:db8::1:011c
+bbbb-285 IN AAAA 2001:db8::1:011d
+bbbb-286 IN AAAA 2001:db8::1:011e
+bbbb-287 IN AAAA 2001:db8::1:011f
+bbbb-288 IN AAAA 2001:db8::1:0120
+bbbb-289 IN AAAA 2001:db8::1:0121
+bbbb-290 IN AAAA 2001:db8::1:0122
+bbbb-291 IN AAAA 2001:db8::1:0123
+bbbb-292 IN AAAA 2001:db8::1:0124
+bbbb-293 IN AAAA 2001:db8::1:0125
+bbbb-294 IN AAAA 2001:db8::1:0126
+bbbb-295 IN AAAA 2001:db8::1:0127
+bbbb-296 IN AAAA 2001:db8::1:0128
+bbbb-297 IN AAAA 2001:db8::1:0129
+bbbb-298 IN AAAA 2001:db8::1:012a
+bbbb-299 IN AAAA 2001:db8::1:012b
+bbbb-300 IN AAAA 2001:db8::1:012c
+bbbb-301 IN AAAA 2001:db8::1:012d
+bbbb-302 IN AAAA 2001:db8::1:012e
+bbbb-303 IN AAAA 2001:db8::1:012f
+bbbb-304 IN AAAA 2001:db8::1:0130
+bbbb-305 IN AAAA 2001:db8::1:0131
+bbbb-306 IN AAAA 2001:db8::1:0132
+bbbb-307 IN AAAA 2001:db8::1:0133
+bbbb-308 IN AAAA 2001:db8::1:0134
+bbbb-309 IN AAAA 2001:db8::1:0135
+bbbb-310 IN AAAA 2001:db8::1:0136
+bbbb-311 IN AAAA 2001:db8::1:0137
+bbbb-312 IN AAAA 2001:db8::1:0138
+bbbb-313 IN AAAA 2001:db8::1:0139
+bbbb-314 IN AAAA 2001:db8::1:013a
+bbbb-315 IN AAAA 2001:db8::1:013b
+bbbb-316 IN AAAA 2001:db8::1:013c
+bbbb-317 IN AAAA 2001:db8::1:013d
+bbbb-318 IN AAAA 2001:db8::1:013e
+bbbb-319 IN AAAA 2001:db8::1:013f
+bbbb-320 IN AAAA 2001:db8::1:0140
+bbbb-321 IN AAAA 2001:db8::1:0141
+bbbb-322 IN AAAA 2001:db8::1:0142
+bbbb-323 IN AAAA 2001:db8::1:0143
+bbbb-324 IN AAAA 2001:db8::1:0144
+bbbb-325 IN AAAA 2001:db8::1:0145
+bbbb-326 IN AAAA 2001:db8::1:0146
+bbbb-327 IN AAAA 2001:db8::1:0147
+bbbb-328 IN AAAA 2001:db8::1:0148
+bbbb-329 IN AAAA 2001:db8::1:0149
+bbbb-330 IN AAAA 2001:db8::1:014a
+bbbb-331 IN AAAA 2001:db8::1:014b
+bbbb-332 IN AAAA 2001:db8::1:014c
+bbbb-333 IN AAAA 2001:db8::1:014d
+bbbb-334 IN AAAA 2001:db8::1:014e
+bbbb-335 IN AAAA 2001:db8::1:014f
+bbbb-336 IN AAAA 2001:db8::1:0150
+bbbb-337 IN AAAA 2001:db8::1:0151
+bbbb-338 IN AAAA 2001:db8::1:0152
+bbbb-339 IN AAAA 2001:db8::1:0153
+bbbb-340 IN AAAA 2001:db8::1:0154
+bbbb-341 IN AAAA 2001:db8::1:0155
+bbbb-342 IN AAAA 2001:db8::1:0156
+bbbb-343 IN AAAA 2001:db8::1:0157
+bbbb-344 IN AAAA 2001:db8::1:0158
+bbbb-345 IN AAAA 2001:db8::1:0159
+bbbb-346 IN AAAA 2001:db8::1:015a
+bbbb-347 IN AAAA 2001:db8::1:015b
+bbbb-348 IN AAAA 2001:db8::1:015c
+bbbb-349 IN AAAA 2001:db8::1:015d
+bbbb-350 IN AAAA 2001:db8::1:015e
+bbbb-351 IN AAAA 2001:db8::1:015f
+bbbb-352 IN AAAA 2001:db8::1:0160
+bbbb-353 IN AAAA 2001:db8::1:0161
+bbbb-354 IN AAAA 2001:db8::1:0162
+bbbb-355 IN AAAA 2001:db8::1:0163
+bbbb-356 IN AAAA 2001:db8::1:0164
+bbbb-357 IN AAAA 2001:db8::1:0165
+bbbb-358 IN AAAA 2001:db8::1:0166
+bbbb-359 IN AAAA 2001:db8::1:0167
+bbbb-360 IN AAAA 2001:db8::1:0168
+bbbb-361 IN AAAA 2001:db8::1:0169
+bbbb-362 IN AAAA 2001:db8::1:016a
+bbbb-363 IN AAAA 2001:db8::1:016b
+bbbb-364 IN AAAA 2001:db8::1:016c
+bbbb-365 IN AAAA 2001:db8::1:016d
+bbbb-366 IN AAAA 2001:db8::1:016e
+bbbb-367 IN AAAA 2001:db8::1:016f
+bbbb-368 IN AAAA 2001:db8::1:0170
+bbbb-369 IN AAAA 2001:db8::1:0171
+bbbb-370 IN AAAA 2001:db8::1:0172
+bbbb-371 IN AAAA 2001:db8::1:0173
+bbbb-372 IN AAAA 2001:db8::1:0174
+bbbb-373 IN AAAA 2001:db8::1:0175
+bbbb-374 IN AAAA 2001:db8::1:0176
+bbbb-375 IN AAAA 2001:db8::1:0177
+bbbb-376 IN AAAA 2001:db8::1:0178
+bbbb-377 IN AAAA 2001:db8::1:0179
+bbbb-378 IN AAAA 2001:db8::1:017a
+bbbb-379 IN AAAA 2001:db8::1:017b
+bbbb-380 IN AAAA 2001:db8::1:017c
+bbbb-381 IN AAAA 2001:db8::1:017d
+bbbb-382 IN AAAA 2001:db8::1:017e
+bbbb-383 IN AAAA 2001:db8::1:017f
+bbbb-384 IN AAAA 2001:db8::1:0180
+bbbb-385 IN AAAA 2001:db8::1:0181
+bbbb-386 IN AAAA 2001:db8::1:0182
+bbbb-387 IN AAAA 2001:db8::1:0183
+bbbb-388 IN AAAA 2001:db8::1:0184
+bbbb-389 IN AAAA 2001:db8::1:0185
+bbbb-390 IN AAAA 2001:db8::1:0186
+bbbb-391 IN AAAA 2001:db8::1:0187
+bbbb-392 IN AAAA 2001:db8::1:0188
+bbbb-393 IN AAAA 2001:db8::1:0189
+bbbb-394 IN AAAA 2001:db8::1:018a
+bbbb-395 IN AAAA 2001:db8::1:018b
+bbbb-396 IN AAAA 2001:db8::1:018c
+bbbb-397 IN AAAA 2001:db8::1:018d
+bbbb-398 IN AAAA 2001:db8::1:018e
+bbbb-399 IN AAAA 2001:db8::1:018f
+bbbb-400 IN AAAA 2001:db8::1:0190
+bbbb-401 IN AAAA 2001:db8::1:0191
+bbbb-402 IN AAAA 2001:db8::1:0192
+bbbb-403 IN AAAA 2001:db8::1:0193
+bbbb-404 IN AAAA 2001:db8::1:0194
+bbbb-405 IN AAAA 2001:db8::1:0195
+bbbb-406 IN AAAA 2001:db8::1:0196
+bbbb-407 IN AAAA 2001:db8::1:0197
+bbbb-408 IN AAAA 2001:db8::1:0198
+bbbb-409 IN AAAA 2001:db8::1:0199
+bbbb-410 IN AAAA 2001:db8::1:019a
+bbbb-411 IN AAAA 2001:db8::1:019b
+bbbb-412 IN AAAA 2001:db8::1:019c
+bbbb-413 IN AAAA 2001:db8::1:019d
+bbbb-414 IN AAAA 2001:db8::1:019e
+bbbb-415 IN AAAA 2001:db8::1:019f
+bbbb-416 IN AAAA 2001:db8::1:01a0
+bbbb-417 IN AAAA 2001:db8::1:01a1
+bbbb-418 IN AAAA 2001:db8::1:01a2
+bbbb-419 IN AAAA 2001:db8::1:01a3
+bbbb-420 IN AAAA 2001:db8::1:01a4
+bbbb-421 IN AAAA 2001:db8::1:01a5
+bbbb-422 IN AAAA 2001:db8::1:01a6
+bbbb-423 IN AAAA 2001:db8::1:01a7
+bbbb-424 IN AAAA 2001:db8::1:01a8
+bbbb-425 IN AAAA 2001:db8::1:01a9
+bbbb-426 IN AAAA 2001:db8::1:01aa
+bbbb-427 IN AAAA 2001:db8::1:01ab
+bbbb-428 IN AAAA 2001:db8::1:01ac
+bbbb-429 IN AAAA 2001:db8::1:01ad
+bbbb-430 IN AAAA 2001:db8::1:01ae
+bbbb-431 IN AAAA 2001:db8::1:01af
+bbbb-432 IN AAAA 2001:db8::1:01b0
+bbbb-433 IN AAAA 2001:db8::1:01b1
+bbbb-434 IN AAAA 2001:db8::1:01b2
+bbbb-435 IN AAAA 2001:db8::1:01b3
+bbbb-436 IN AAAA 2001:db8::1:01b4
+bbbb-437 IN AAAA 2001:db8::1:01b5
+bbbb-438 IN AAAA 2001:db8::1:01b6
+bbbb-439 IN AAAA 2001:db8::1:01b7
+bbbb-440 IN AAAA 2001:db8::1:01b8
+bbbb-441 IN AAAA 2001:db8::1:01b9
+bbbb-442 IN AAAA 2001:db8::1:01ba
+bbbb-443 IN AAAA 2001:db8::1:01bb
+bbbb-444 IN AAAA 2001:db8::1:01bc
+bbbb-445 IN AAAA 2001:db8::1:01bd
+bbbb-446 IN AAAA 2001:db8::1:01be
+bbbb-447 IN AAAA 2001:db8::1:01bf
+bbbb-448 IN AAAA 2001:db8::1:01c0
+bbbb-449 IN AAAA 2001:db8::1:01c1
+bbbb-450 IN AAAA 2001:db8::1:01c2
+bbbb-451 IN AAAA 2001:db8::1:01c3
+bbbb-452 IN AAAA 2001:db8::1:01c4
+bbbb-453 IN AAAA 2001:db8::1:01c5
+bbbb-454 IN AAAA 2001:db8::1:01c6
+bbbb-455 IN AAAA 2001:db8::1:01c7
+bbbb-456 IN AAAA 2001:db8::1:01c8
+bbbb-457 IN AAAA 2001:db8::1:01c9
+bbbb-458 IN AAAA 2001:db8::1:01ca
+bbbb-459 IN AAAA 2001:db8::1:01cb
+bbbb-460 IN AAAA 2001:db8::1:01cc
+bbbb-461 IN AAAA 2001:db8::1:01cd
+bbbb-462 IN AAAA 2001:db8::1:01ce
+bbbb-463 IN AAAA 2001:db8::1:01cf
+bbbb-464 IN AAAA 2001:db8::1:01d0
+bbbb-465 IN AAAA 2001:db8::1:01d1
+bbbb-466 IN AAAA 2001:db8::1:01d2
+bbbb-467 IN AAAA 2001:db8::1:01d3
+bbbb-468 IN AAAA 2001:db8::1:01d4
+bbbb-469 IN AAAA 2001:db8::1:01d5
+bbbb-470 IN AAAA 2001:db8::1:01d6
+bbbb-471 IN AAAA 2001:db8::1:01d7
+bbbb-472 IN AAAA 2001:db8::1:01d8
+bbbb-473 IN AAAA 2001:db8::1:01d9
+bbbb-474 IN AAAA 2001:db8::1:01da
+bbbb-475 IN AAAA 2001:db8::1:01db
+bbbb-476 IN AAAA 2001:db8::1:01dc
+bbbb-477 IN AAAA 2001:db8::1:01dd
+bbbb-478 IN AAAA 2001:db8::1:01de
+bbbb-479 IN AAAA 2001:db8::1:01df
+bbbb-480 IN AAAA 2001:db8::1:01e0
+bbbb-481 IN AAAA 2001:db8::1:01e1
+bbbb-482 IN AAAA 2001:db8::1:01e2
+bbbb-483 IN AAAA 2001:db8::1:01e3
+bbbb-484 IN AAAA 2001:db8::1:01e4
+bbbb-485 IN AAAA 2001:db8::1:01e5
+bbbb-486 IN AAAA 2001:db8::1:01e6
+bbbb-487 IN AAAA 2001:db8::1:01e7
+bbbb-488 IN AAAA 2001:db8::1:01e8
+bbbb-489 IN AAAA 2001:db8::1:01e9
+bbbb-490 IN AAAA 2001:db8::1:01ea
+bbbb-491 IN AAAA 2001:db8::1:01eb
+bbbb-492 IN AAAA 2001:db8::1:01ec
+bbbb-493 IN AAAA 2001:db8::1:01ed
+bbbb-494 IN AAAA 2001:db8::1:01ee
+bbbb-495 IN AAAA 2001:db8::1:01ef
+bbbb-496 IN AAAA 2001:db8::1:01f0
+bbbb-497 IN AAAA 2001:db8::1:01f1
+bbbb-498 IN AAAA 2001:db8::1:01f2
+bbbb-499 IN AAAA 2001:db8::1:01f3
+bbbb-500 IN AAAA 2001:db8::1:01f4
+bbbb-501 IN AAAA 2001:db8::1:01f5
+bbbb-502 IN AAAA 2001:db8::1:01f6
+bbbb-503 IN AAAA 2001:db8::1:01f7
+bbbb-504 IN AAAA 2001:db8::1:01f8
+bbbb-505 IN AAAA 2001:db8::1:01f9
+bbbb-506 IN AAAA 2001:db8::1:01fa
+bbbb-507 IN AAAA 2001:db8::1:01fb
+bbbb-508 IN AAAA 2001:db8::1:01fc
+bbbb-509 IN AAAA 2001:db8::1:01fd
+bbbb-510 IN AAAA 2001:db8::1:01fe
+bbbb-511 IN AAAA 2001:db8::1:01ff
+
+cccc-000 IN AAAA 2001:db8::2:0000
+cccc-001 IN AAAA 2001:db8::2:0001
+cccc-002 IN AAAA 2001:db8::2:0002
+cccc-003 IN AAAA 2001:db8::2:0003
+cccc-004 IN AAAA 2001:db8::2:0004
+cccc-005 IN AAAA 2001:db8::2:0005
+cccc-006 IN AAAA 2001:db8::2:0006
+cccc-007 IN AAAA 2001:db8::2:0007
+cccc-008 IN AAAA 2001:db8::2:0008
+cccc-009 IN AAAA 2001:db8::2:0009
+cccc-010 IN AAAA 2001:db8::2:000a
+cccc-011 IN AAAA 2001:db8::2:000b
+cccc-012 IN AAAA 2001:db8::2:000c
+cccc-013 IN AAAA 2001:db8::2:000d
+cccc-014 IN AAAA 2001:db8::2:000e
+cccc-015 IN AAAA 2001:db8::2:000f
+cccc-016 IN AAAA 2001:db8::2:0010
+cccc-017 IN AAAA 2001:db8::2:0011
+cccc-018 IN AAAA 2001:db8::2:0012
+cccc-019 IN AAAA 2001:db8::2:0013
+cccc-020 IN AAAA 2001:db8::2:0014
+cccc-021 IN AAAA 2001:db8::2:0015
+cccc-022 IN AAAA 2001:db8::2:0016
+cccc-023 IN AAAA 2001:db8::2:0017
+cccc-024 IN AAAA 2001:db8::2:0018
+cccc-025 IN AAAA 2001:db8::2:0019
+cccc-026 IN AAAA 2001:db8::2:001a
+cccc-027 IN AAAA 2001:db8::2:001b
+cccc-028 IN AAAA 2001:db8::2:001c
+cccc-029 IN AAAA 2001:db8::2:001d
+cccc-030 IN AAAA 2001:db8::2:001e
+cccc-031 IN AAAA 2001:db8::2:001f
+cccc-032 IN AAAA 2001:db8::2:0020
+cccc-033 IN AAAA 2001:db8::2:0021
+cccc-034 IN AAAA 2001:db8::2:0022
+cccc-035 IN AAAA 2001:db8::2:0023
+cccc-036 IN AAAA 2001:db8::2:0024
+cccc-037 IN AAAA 2001:db8::2:0025
+cccc-038 IN AAAA 2001:db8::2:0026
+cccc-039 IN AAAA 2001:db8::2:0027
+cccc-040 IN AAAA 2001:db8::2:0028
+cccc-041 IN AAAA 2001:db8::2:0029
+cccc-042 IN AAAA 2001:db8::2:002a
+cccc-043 IN AAAA 2001:db8::2:002b
+cccc-044 IN AAAA 2001:db8::2:002c
+cccc-045 IN AAAA 2001:db8::2:002d
+cccc-046 IN AAAA 2001:db8::2:002e
+cccc-047 IN AAAA 2001:db8::2:002f
+cccc-048 IN AAAA 2001:db8::2:0030
+cccc-049 IN AAAA 2001:db8::2:0031
+cccc-050 IN AAAA 2001:db8::2:0032
+cccc-051 IN AAAA 2001:db8::2:0033
+cccc-052 IN AAAA 2001:db8::2:0034
+cccc-053 IN AAAA 2001:db8::2:0035
+cccc-054 IN AAAA 2001:db8::2:0036
+cccc-055 IN AAAA 2001:db8::2:0037
+cccc-056 IN AAAA 2001:db8::2:0038
+cccc-057 IN AAAA 2001:db8::2:0039
+cccc-058 IN AAAA 2001:db8::2:003a
+cccc-059 IN AAAA 2001:db8::2:003b
+cccc-060 IN AAAA 2001:db8::2:003c
+cccc-061 IN AAAA 2001:db8::2:003d
+cccc-062 IN AAAA 2001:db8::2:003e
+cccc-063 IN AAAA 2001:db8::2:003f
+cccc-064 IN AAAA 2001:db8::2:0040
+cccc-065 IN AAAA 2001:db8::2:0041
+cccc-066 IN AAAA 2001:db8::2:0042
+cccc-067 IN AAAA 2001:db8::2:0043
+cccc-068 IN AAAA 2001:db8::2:0044
+cccc-069 IN AAAA 2001:db8::2:0045
+cccc-070 IN AAAA 2001:db8::2:0046
+cccc-071 IN AAAA 2001:db8::2:0047
+cccc-072 IN AAAA 2001:db8::2:0048
+cccc-073 IN AAAA 2001:db8::2:0049
+cccc-074 IN AAAA 2001:db8::2:004a
+cccc-075 IN AAAA 2001:db8::2:004b
+cccc-076 IN AAAA 2001:db8::2:004c
+cccc-077 IN AAAA 2001:db8::2:004d
+cccc-078 IN AAAA 2001:db8::2:004e
+cccc-079 IN AAAA 2001:db8::2:004f
+cccc-080 IN AAAA 2001:db8::2:0050
+cccc-081 IN AAAA 2001:db8::2:0051
+cccc-082 IN AAAA 2001:db8::2:0052
+cccc-083 IN AAAA 2001:db8::2:0053
+cccc-084 IN AAAA 2001:db8::2:0054
+cccc-085 IN AAAA 2001:db8::2:0055
+cccc-086 IN AAAA 2001:db8::2:0056
+cccc-087 IN AAAA 2001:db8::2:0057
+cccc-088 IN AAAA 2001:db8::2:0058
+cccc-089 IN AAAA 2001:db8::2:0059
+cccc-090 IN AAAA 2001:db8::2:005a
+cccc-091 IN AAAA 2001:db8::2:005b
+cccc-092 IN AAAA 2001:db8::2:005c
+cccc-093 IN AAAA 2001:db8::2:005d
+cccc-094 IN AAAA 2001:db8::2:005e
+cccc-095 IN AAAA 2001:db8::2:005f
+cccc-096 IN AAAA 2001:db8::2:0060
+cccc-097 IN AAAA 2001:db8::2:0061
+cccc-098 IN AAAA 2001:db8::2:0062
+cccc-099 IN AAAA 2001:db8::2:0063
+cccc-100 IN AAAA 2001:db8::2:0064
+cccc-101 IN AAAA 2001:db8::2:0065
+cccc-102 IN AAAA 2001:db8::2:0066
+cccc-103 IN AAAA 2001:db8::2:0067
+cccc-104 IN AAAA 2001:db8::2:0068
+cccc-105 IN AAAA 2001:db8::2:0069
+cccc-106 IN AAAA 2001:db8::2:006a
+cccc-107 IN AAAA 2001:db8::2:006b
+cccc-108 IN AAAA 2001:db8::2:006c
+cccc-109 IN AAAA 2001:db8::2:006d
+cccc-110 IN AAAA 2001:db8::2:006e
+cccc-111 IN AAAA 2001:db8::2:006f
+cccc-112 IN AAAA 2001:db8::2:0070
+cccc-113 IN AAAA 2001:db8::2:0071
+cccc-114 IN AAAA 2001:db8::2:0072
+cccc-115 IN AAAA 2001:db8::2:0073
+cccc-116 IN AAAA 2001:db8::2:0074
+cccc-117 IN AAAA 2001:db8::2:0075
+cccc-118 IN AAAA 2001:db8::2:0076
+cccc-119 IN AAAA 2001:db8::2:0077
+cccc-120 IN AAAA 2001:db8::2:0078
+cccc-121 IN AAAA 2001:db8::2:0079
+cccc-122 IN AAAA 2001:db8::2:007a
+cccc-123 IN AAAA 2001:db8::2:007b
+cccc-124 IN AAAA 2001:db8::2:007c
+cccc-125 IN AAAA 2001:db8::2:007d
+cccc-126 IN AAAA 2001:db8::2:007e
+cccc-127 IN AAAA 2001:db8::2:007f
+cccc-128 IN AAAA 2001:db8::2:0080
+cccc-129 IN AAAA 2001:db8::2:0081
+cccc-130 IN AAAA 2001:db8::2:0082
+cccc-131 IN AAAA 2001:db8::2:0083
+cccc-132 IN AAAA 2001:db8::2:0084
+cccc-133 IN AAAA 2001:db8::2:0085
+cccc-134 IN AAAA 2001:db8::2:0086
+cccc-135 IN AAAA 2001:db8::2:0087
+cccc-136 IN AAAA 2001:db8::2:0088
+cccc-137 IN AAAA 2001:db8::2:0089
+cccc-138 IN AAAA 2001:db8::2:008a
+cccc-139 IN AAAA 2001:db8::2:008b
+cccc-140 IN AAAA 2001:db8::2:008c
+cccc-141 IN AAAA 2001:db8::2:008d
+cccc-142 IN AAAA 2001:db8::2:008e
+cccc-143 IN AAAA 2001:db8::2:008f
+cccc-144 IN AAAA 2001:db8::2:0090
+cccc-145 IN AAAA 2001:db8::2:0091
+cccc-146 IN AAAA 2001:db8::2:0092
+cccc-147 IN AAAA 2001:db8::2:0093
+cccc-148 IN AAAA 2001:db8::2:0094
+cccc-149 IN AAAA 2001:db8::2:0095
+cccc-150 IN AAAA 2001:db8::2:0096
+cccc-151 IN AAAA 2001:db8::2:0097
+cccc-152 IN AAAA 2001:db8::2:0098
+cccc-153 IN AAAA 2001:db8::2:0099
+cccc-154 IN AAAA 2001:db8::2:009a
+cccc-155 IN AAAA 2001:db8::2:009b
+cccc-156 IN AAAA 2001:db8::2:009c
+cccc-157 IN AAAA 2001:db8::2:009d
+cccc-158 IN AAAA 2001:db8::2:009e
+cccc-159 IN AAAA 2001:db8::2:009f
+cccc-160 IN AAAA 2001:db8::2:00a0
+cccc-161 IN AAAA 2001:db8::2:00a1
+cccc-162 IN AAAA 2001:db8::2:00a2
+cccc-163 IN AAAA 2001:db8::2:00a3
+cccc-164 IN AAAA 2001:db8::2:00a4
+cccc-165 IN AAAA 2001:db8::2:00a5
+cccc-166 IN AAAA 2001:db8::2:00a6
+cccc-167 IN AAAA 2001:db8::2:00a7
+cccc-168 IN AAAA 2001:db8::2:00a8
+cccc-169 IN AAAA 2001:db8::2:00a9
+cccc-170 IN AAAA 2001:db8::2:00aa
+cccc-171 IN AAAA 2001:db8::2:00ab
+cccc-172 IN AAAA 2001:db8::2:00ac
+cccc-173 IN AAAA 2001:db8::2:00ad
+cccc-174 IN AAAA 2001:db8::2:00ae
+cccc-175 IN AAAA 2001:db8::2:00af
+cccc-176 IN AAAA 2001:db8::2:00b0
+cccc-177 IN AAAA 2001:db8::2:00b1
+cccc-178 IN AAAA 2001:db8::2:00b2
+cccc-179 IN AAAA 2001:db8::2:00b3
+cccc-180 IN AAAA 2001:db8::2:00b4
+cccc-181 IN AAAA 2001:db8::2:00b5
+cccc-182 IN AAAA 2001:db8::2:00b6
+cccc-183 IN AAAA 2001:db8::2:00b7
+cccc-184 IN AAAA 2001:db8::2:00b8
+cccc-185 IN AAAA 2001:db8::2:00b9
+cccc-186 IN AAAA 2001:db8::2:00ba
+cccc-187 IN AAAA 2001:db8::2:00bb
+cccc-188 IN AAAA 2001:db8::2:00bc
+cccc-189 IN AAAA 2001:db8::2:00bd
+cccc-190 IN AAAA 2001:db8::2:00be
+cccc-191 IN AAAA 2001:db8::2:00bf
+cccc-192 IN AAAA 2001:db8::2:00c0
+cccc-193 IN AAAA 2001:db8::2:00c1
+cccc-194 IN AAAA 2001:db8::2:00c2
+cccc-195 IN AAAA 2001:db8::2:00c3
+cccc-196 IN AAAA 2001:db8::2:00c4
+cccc-197 IN AAAA 2001:db8::2:00c5
+cccc-198 IN AAAA 2001:db8::2:00c6
+cccc-199 IN AAAA 2001:db8::2:00c7
+cccc-200 IN AAAA 2001:db8::2:00c8
+cccc-201 IN AAAA 2001:db8::2:00c9
+cccc-202 IN AAAA 2001:db8::2:00ca
+cccc-203 IN AAAA 2001:db8::2:00cb
+cccc-204 IN AAAA 2001:db8::2:00cc
+cccc-205 IN AAAA 2001:db8::2:00cd
+cccc-206 IN AAAA 2001:db8::2:00ce
+cccc-207 IN AAAA 2001:db8::2:00cf
+cccc-208 IN AAAA 2001:db8::2:00d0
+cccc-209 IN AAAA 2001:db8::2:00d1
+cccc-210 IN AAAA 2001:db8::2:00d2
+cccc-211 IN AAAA 2001:db8::2:00d3
+cccc-212 IN AAAA 2001:db8::2:00d4
+cccc-213 IN AAAA 2001:db8::2:00d5
+cccc-214 IN AAAA 2001:db8::2:00d6
+cccc-215 IN AAAA 2001:db8::2:00d7
+cccc-216 IN AAAA 2001:db8::2:00d8
+cccc-217 IN AAAA 2001:db8::2:00d9
+cccc-218 IN AAAA 2001:db8::2:00da
+cccc-219 IN AAAA 2001:db8::2:00db
+cccc-220 IN AAAA 2001:db8::2:00dc
+cccc-221 IN AAAA 2001:db8::2:00dd
+cccc-222 IN AAAA 2001:db8::2:00de
+cccc-223 IN AAAA 2001:db8::2:00df
+cccc-224 IN AAAA 2001:db8::2:00e0
+cccc-225 IN AAAA 2001:db8::2:00e1
+cccc-226 IN AAAA 2001:db8::2:00e2
+cccc-227 IN AAAA 2001:db8::2:00e3
+cccc-228 IN AAAA 2001:db8::2:00e4
+cccc-229 IN AAAA 2001:db8::2:00e5
+cccc-230 IN AAAA 2001:db8::2:00e6
+cccc-231 IN AAAA 2001:db8::2:00e7
+cccc-232 IN AAAA 2001:db8::2:00e8
+cccc-233 IN AAAA 2001:db8::2:00e9
+cccc-234 IN AAAA 2001:db8::2:00ea
+cccc-235 IN AAAA 2001:db8::2:00eb
+cccc-236 IN AAAA 2001:db8::2:00ec
+cccc-237 IN AAAA 2001:db8::2:00ed
+cccc-238 IN AAAA 2001:db8::2:00ee
+cccc-239 IN AAAA 2001:db8::2:00ef
+cccc-240 IN AAAA 2001:db8::2:00f0
+cccc-241 IN AAAA 2001:db8::2:00f1
+cccc-242 IN AAAA 2001:db8::2:00f2
+cccc-243 IN AAAA 2001:db8::2:00f3
+cccc-244 IN AAAA 2001:db8::2:00f4
+cccc-245 IN AAAA 2001:db8::2:00f5
+cccc-246 IN AAAA 2001:db8::2:00f6
+cccc-247 IN AAAA 2001:db8::2:00f7
+cccc-248 IN AAAA 2001:db8::2:00f8
+cccc-249 IN AAAA 2001:db8::2:00f9
+cccc-250 IN AAAA 2001:db8::2:00fa
+cccc-251 IN AAAA 2001:db8::2:00fb
+cccc-252 IN AAAA 2001:db8::2:00fc
+cccc-253 IN AAAA 2001:db8::2:00fd
+cccc-254 IN AAAA 2001:db8::2:00fe
+cccc-255 IN AAAA 2001:db8::2:00ff
+cccc-256 IN AAAA 2001:db8::2:0100
+cccc-257 IN AAAA 2001:db8::2:0101
+cccc-258 IN AAAA 2001:db8::2:0102
+cccc-259 IN AAAA 2001:db8::2:0103
+cccc-260 IN AAAA 2001:db8::2:0104
+cccc-261 IN AAAA 2001:db8::2:0105
+cccc-262 IN AAAA 2001:db8::2:0106
+cccc-263 IN AAAA 2001:db8::2:0107
+cccc-264 IN AAAA 2001:db8::2:0108
+cccc-265 IN AAAA 2001:db8::2:0109
+cccc-266 IN AAAA 2001:db8::2:010a
+cccc-267 IN AAAA 2001:db8::2:010b
+cccc-268 IN AAAA 2001:db8::2:010c
+cccc-269 IN AAAA 2001:db8::2:010d
+cccc-270 IN AAAA 2001:db8::2:010e
+cccc-271 IN AAAA 2001:db8::2:010f
+cccc-272 IN AAAA 2001:db8::2:0110
+cccc-273 IN AAAA 2001:db8::2:0111
+cccc-274 IN AAAA 2001:db8::2:0112
+cccc-275 IN AAAA 2001:db8::2:0113
+cccc-276 IN AAAA 2001:db8::2:0114
+cccc-277 IN AAAA 2001:db8::2:0115
+cccc-278 IN AAAA 2001:db8::2:0116
+cccc-279 IN AAAA 2001:db8::2:0117
+cccc-280 IN AAAA 2001:db8::2:0118
+cccc-281 IN AAAA 2001:db8::2:0119
+cccc-282 IN AAAA 2001:db8::2:011a
+cccc-283 IN AAAA 2001:db8::2:011b
+cccc-284 IN AAAA 2001:db8::2:011c
+cccc-285 IN AAAA 2001:db8::2:011d
+cccc-286 IN AAAA 2001:db8::2:011e
+cccc-287 IN AAAA 2001:db8::2:011f
+cccc-288 IN AAAA 2001:db8::2:0120
+cccc-289 IN AAAA 2001:db8::2:0121
+cccc-290 IN AAAA 2001:db8::2:0122
+cccc-291 IN AAAA 2001:db8::2:0123
+cccc-292 IN AAAA 2001:db8::2:0124
+cccc-293 IN AAAA 2001:db8::2:0125
+cccc-294 IN AAAA 2001:db8::2:0126
+cccc-295 IN AAAA 2001:db8::2:0127
+cccc-296 IN AAAA 2001:db8::2:0128
+cccc-297 IN AAAA 2001:db8::2:0129
+cccc-298 IN AAAA 2001:db8::2:012a
+cccc-299 IN AAAA 2001:db8::2:012b
+cccc-300 IN AAAA 2001:db8::2:012c
+cccc-301 IN AAAA 2001:db8::2:012d
+cccc-302 IN AAAA 2001:db8::2:012e
+cccc-303 IN AAAA 2001:db8::2:012f
+cccc-304 IN AAAA 2001:db8::2:0130
+cccc-305 IN AAAA 2001:db8::2:0131
+cccc-306 IN AAAA 2001:db8::2:0132
+cccc-307 IN AAAA 2001:db8::2:0133
+cccc-308 IN AAAA 2001:db8::2:0134
+cccc-309 IN AAAA 2001:db8::2:0135
+cccc-310 IN AAAA 2001:db8::2:0136
+cccc-311 IN AAAA 2001:db8::2:0137
+cccc-312 IN AAAA 2001:db8::2:0138
+cccc-313 IN AAAA 2001:db8::2:0139
+cccc-314 IN AAAA 2001:db8::2:013a
+cccc-315 IN AAAA 2001:db8::2:013b
+cccc-316 IN AAAA 2001:db8::2:013c
+cccc-317 IN AAAA 2001:db8::2:013d
+cccc-318 IN AAAA 2001:db8::2:013e
+cccc-319 IN AAAA 2001:db8::2:013f
+cccc-320 IN AAAA 2001:db8::2:0140
+cccc-321 IN AAAA 2001:db8::2:0141
+cccc-322 IN AAAA 2001:db8::2:0142
+cccc-323 IN AAAA 2001:db8::2:0143
+cccc-324 IN AAAA 2001:db8::2:0144
+cccc-325 IN AAAA 2001:db8::2:0145
+cccc-326 IN AAAA 2001:db8::2:0146
+cccc-327 IN AAAA 2001:db8::2:0147
+cccc-328 IN AAAA 2001:db8::2:0148
+cccc-329 IN AAAA 2001:db8::2:0149
+cccc-330 IN AAAA 2001:db8::2:014a
+cccc-331 IN AAAA 2001:db8::2:014b
+cccc-332 IN AAAA 2001:db8::2:014c
+cccc-333 IN AAAA 2001:db8::2:014d
+cccc-334 IN AAAA 2001:db8::2:014e
+cccc-335 IN AAAA 2001:db8::2:014f
+cccc-336 IN AAAA 2001:db8::2:0150
+cccc-337 IN AAAA 2001:db8::2:0151
+cccc-338 IN AAAA 2001:db8::2:0152
+cccc-339 IN AAAA 2001:db8::2:0153
+cccc-340 IN AAAA 2001:db8::2:0154
+cccc-341 IN AAAA 2001:db8::2:0155
+cccc-342 IN AAAA 2001:db8::2:0156
+cccc-343 IN AAAA 2001:db8::2:0157
+cccc-344 IN AAAA 2001:db8::2:0158
+cccc-345 IN AAAA 2001:db8::2:0159
+cccc-346 IN AAAA 2001:db8::2:015a
+cccc-347 IN AAAA 2001:db8::2:015b
+cccc-348 IN AAAA 2001:db8::2:015c
+cccc-349 IN AAAA 2001:db8::2:015d
+cccc-350 IN AAAA 2001:db8::2:015e
+cccc-351 IN AAAA 2001:db8::2:015f
+cccc-352 IN AAAA 2001:db8::2:0160
+cccc-353 IN AAAA 2001:db8::2:0161
+cccc-354 IN AAAA 2001:db8::2:0162
+cccc-355 IN AAAA 2001:db8::2:0163
+cccc-356 IN AAAA 2001:db8::2:0164
+cccc-357 IN AAAA 2001:db8::2:0165
+cccc-358 IN AAAA 2001:db8::2:0166
+cccc-359 IN AAAA 2001:db8::2:0167
+cccc-360 IN AAAA 2001:db8::2:0168
+cccc-361 IN AAAA 2001:db8::2:0169
+cccc-362 IN AAAA 2001:db8::2:016a
+cccc-363 IN AAAA 2001:db8::2:016b
+cccc-364 IN AAAA 2001:db8::2:016c
+cccc-365 IN AAAA 2001:db8::2:016d
+cccc-366 IN AAAA 2001:db8::2:016e
+cccc-367 IN AAAA 2001:db8::2:016f
+cccc-368 IN AAAA 2001:db8::2:0170
+cccc-369 IN AAAA 2001:db8::2:0171
+cccc-370 IN AAAA 2001:db8::2:0172
+cccc-371 IN AAAA 2001:db8::2:0173
+cccc-372 IN AAAA 2001:db8::2:0174
+cccc-373 IN AAAA 2001:db8::2:0175
+cccc-374 IN AAAA 2001:db8::2:0176
+cccc-375 IN AAAA 2001:db8::2:0177
+cccc-376 IN AAAA 2001:db8::2:0178
+cccc-377 IN AAAA 2001:db8::2:0179
+cccc-378 IN AAAA 2001:db8::2:017a
+cccc-379 IN AAAA 2001:db8::2:017b
+cccc-380 IN AAAA 2001:db8::2:017c
+cccc-381 IN AAAA 2001:db8::2:017d
+cccc-382 IN AAAA 2001:db8::2:017e
+cccc-383 IN AAAA 2001:db8::2:017f
+cccc-384 IN AAAA 2001:db8::2:0180
+cccc-385 IN AAAA 2001:db8::2:0181
+cccc-386 IN AAAA 2001:db8::2:0182
+cccc-387 IN AAAA 2001:db8::2:0183
+cccc-388 IN AAAA 2001:db8::2:0184
+cccc-389 IN AAAA 2001:db8::2:0185
+cccc-390 IN AAAA 2001:db8::2:0186
+cccc-391 IN AAAA 2001:db8::2:0187
+cccc-392 IN AAAA 2001:db8::2:0188
+cccc-393 IN AAAA 2001:db8::2:0189
+cccc-394 IN AAAA 2001:db8::2:018a
+cccc-395 IN AAAA 2001:db8::2:018b
+cccc-396 IN AAAA 2001:db8::2:018c
+cccc-397 IN AAAA 2001:db8::2:018d
+cccc-398 IN AAAA 2001:db8::2:018e
+cccc-399 IN AAAA 2001:db8::2:018f
+cccc-400 IN AAAA 2001:db8::2:0190
+cccc-401 IN AAAA 2001:db8::2:0191
+cccc-402 IN AAAA 2001:db8::2:0192
+cccc-403 IN AAAA 2001:db8::2:0193
+cccc-404 IN AAAA 2001:db8::2:0194
+cccc-405 IN AAAA 2001:db8::2:0195
+cccc-406 IN AAAA 2001:db8::2:0196
+cccc-407 IN AAAA 2001:db8::2:0197
+cccc-408 IN AAAA 2001:db8::2:0198
+cccc-409 IN AAAA 2001:db8::2:0199
+cccc-410 IN AAAA 2001:db8::2:019a
+cccc-411 IN AAAA 2001:db8::2:019b
+cccc-412 IN AAAA 2001:db8::2:019c
+cccc-413 IN AAAA 2001:db8::2:019d
+cccc-414 IN AAAA 2001:db8::2:019e
+cccc-415 IN AAAA 2001:db8::2:019f
+cccc-416 IN AAAA 2001:db8::2:01a0
+cccc-417 IN AAAA 2001:db8::2:01a1
+cccc-418 IN AAAA 2001:db8::2:01a2
+cccc-419 IN AAAA 2001:db8::2:01a3
+cccc-420 IN AAAA 2001:db8::2:01a4
+cccc-421 IN AAAA 2001:db8::2:01a5
+cccc-422 IN AAAA 2001:db8::2:01a6
+cccc-423 IN AAAA 2001:db8::2:01a7
+cccc-424 IN AAAA 2001:db8::2:01a8
+cccc-425 IN AAAA 2001:db8::2:01a9
+cccc-426 IN AAAA 2001:db8::2:01aa
+cccc-427 IN AAAA 2001:db8::2:01ab
+cccc-428 IN AAAA 2001:db8::2:01ac
+cccc-429 IN AAAA 2001:db8::2:01ad
+cccc-430 IN AAAA 2001:db8::2:01ae
+cccc-431 IN AAAA 2001:db8::2:01af
+cccc-432 IN AAAA 2001:db8::2:01b0
+cccc-433 IN AAAA 2001:db8::2:01b1
+cccc-434 IN AAAA 2001:db8::2:01b2
+cccc-435 IN AAAA 2001:db8::2:01b3
+cccc-436 IN AAAA 2001:db8::2:01b4
+cccc-437 IN AAAA 2001:db8::2:01b5
+cccc-438 IN AAAA 2001:db8::2:01b6
+cccc-439 IN AAAA 2001:db8::2:01b7
+cccc-440 IN AAAA 2001:db8::2:01b8
+cccc-441 IN AAAA 2001:db8::2:01b9
+cccc-442 IN AAAA 2001:db8::2:01ba
+cccc-443 IN AAAA 2001:db8::2:01bb
+cccc-444 IN AAAA 2001:db8::2:01bc
+cccc-445 IN AAAA 2001:db8::2:01bd
+cccc-446 IN AAAA 2001:db8::2:01be
+cccc-447 IN AAAA 2001:db8::2:01bf
+cccc-448 IN AAAA 2001:db8::2:01c0
+cccc-449 IN AAAA 2001:db8::2:01c1
+cccc-450 IN AAAA 2001:db8::2:01c2
+cccc-451 IN AAAA 2001:db8::2:01c3
+cccc-452 IN AAAA 2001:db8::2:01c4
+cccc-453 IN AAAA 2001:db8::2:01c5
+cccc-454 IN AAAA 2001:db8::2:01c6
+cccc-455 IN AAAA 2001:db8::2:01c7
+cccc-456 IN AAAA 2001:db8::2:01c8
+cccc-457 IN AAAA 2001:db8::2:01c9
+cccc-458 IN AAAA 2001:db8::2:01ca
+cccc-459 IN AAAA 2001:db8::2:01cb
+cccc-460 IN AAAA 2001:db8::2:01cc
+cccc-461 IN AAAA 2001:db8::2:01cd
+cccc-462 IN AAAA 2001:db8::2:01ce
+cccc-463 IN AAAA 2001:db8::2:01cf
+cccc-464 IN AAAA 2001:db8::2:01d0
+cccc-465 IN AAAA 2001:db8::2:01d1
+cccc-466 IN AAAA 2001:db8::2:01d2
+cccc-467 IN AAAA 2001:db8::2:01d3
+cccc-468 IN AAAA 2001:db8::2:01d4
+cccc-469 IN AAAA 2001:db8::2:01d5
+cccc-470 IN AAAA 2001:db8::2:01d6
+cccc-471 IN AAAA 2001:db8::2:01d7
+cccc-472 IN AAAA 2001:db8::2:01d8
+cccc-473 IN AAAA 2001:db8::2:01d9
+cccc-474 IN AAAA 2001:db8::2:01da
+cccc-475 IN AAAA 2001:db8::2:01db
+cccc-476 IN AAAA 2001:db8::2:01dc
+cccc-477 IN AAAA 2001:db8::2:01dd
+cccc-478 IN AAAA 2001:db8::2:01de
+cccc-479 IN AAAA 2001:db8::2:01df
+cccc-480 IN AAAA 2001:db8::2:01e0
+cccc-481 IN AAAA 2001:db8::2:01e1
+cccc-482 IN AAAA 2001:db8::2:01e2
+cccc-483 IN AAAA 2001:db8::2:01e3
+cccc-484 IN AAAA 2001:db8::2:01e4
+cccc-485 IN AAAA 2001:db8::2:01e5
+cccc-486 IN AAAA 2001:db8::2:01e6
+cccc-487 IN AAAA 2001:db8::2:01e7
+cccc-488 IN AAAA 2001:db8::2:01e8
+cccc-489 IN AAAA 2001:db8::2:01e9
+cccc-490 IN AAAA 2001:db8::2:01ea
+cccc-491 IN AAAA 2001:db8::2:01eb
+cccc-492 IN AAAA 2001:db8::2:01ec
+cccc-493 IN AAAA 2001:db8::2:01ed
+cccc-494 IN AAAA 2001:db8::2:01ee
+cccc-495 IN AAAA 2001:db8::2:01ef
+cccc-496 IN AAAA 2001:db8::2:01f0
+cccc-497 IN AAAA 2001:db8::2:01f1
+cccc-498 IN AAAA 2001:db8::2:01f2
+cccc-499 IN AAAA 2001:db8::2:01f3
+cccc-500 IN AAAA 2001:db8::2:01f4
+cccc-501 IN AAAA 2001:db8::2:01f5
+cccc-502 IN AAAA 2001:db8::2:01f6
+cccc-503 IN AAAA 2001:db8::2:01f7
+cccc-504 IN AAAA 2001:db8::2:01f8
+cccc-505 IN AAAA 2001:db8::2:01f9
+cccc-506 IN AAAA 2001:db8::2:01fa
+cccc-507 IN AAAA 2001:db8::2:01fb
+cccc-508 IN AAAA 2001:db8::2:01fc
+cccc-509 IN AAAA 2001:db8::2:01fd
+cccc-510 IN AAAA 2001:db8::2:01fe
+cccc-511 IN AAAA 2001:db8::2:01ff
diff --git a/tests/system/ixfr/db.example.n0.in b/tests/system/ixfr/db.example.n0.in
new file mode 100644
index 0000000..92fa0b0
--- /dev/null
+++ b/tests/system/ixfr/db.example.n0.in
@@ -0,0 +1,29 @@
+; Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+;
+; Permission to use, copy, modify, and/or distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+; PERFORMANCE OF THIS SOFTWARE.
+
+$ORIGIN example.
+$TTL 3600
+
+@ IN SOA ns1.example. hostmaster.example. 100 3600 900 7200 300
+
+ IN NS ns1.example.
+ IN NS ns2.example.
+
+ns1 IN A 192.0.2.1
+ns2 IN A 192.0.2.2
+
+a-1 IN A 192.0.2.101
+b-1 IN A 192.0.2.201
+
+$INCLUDE @abs_top_builddir@/tests/system/ixfr/db.example.common
diff --git a/tests/system/ixfr/db.example.n2.in b/tests/system/ixfr/db.example.n2.in
new file mode 100644
index 0000000..6a999af
--- /dev/null
+++ b/tests/system/ixfr/db.example.n2.in
@@ -0,0 +1,28 @@
+; Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+;
+; Permission to use, copy, modify, and/or distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+; PERFORMANCE OF THIS SOFTWARE.
+
+$ORIGIN example.
+$TTL 3600
+
+@ IN SOA ns1.example. hostmaster.example. 98 3600 900 7200 300
+
+ IN NS ns1.example.
+ IN NS ns2.example.
+
+ns1 IN A 192.0.2.1
+ns2 IN A 192.0.2.2
+
+a-1 IN A 192.0.2.101
+
+$INCLUDE @abs_top_builddir@/tests/system/ixfr/db.example.common
diff --git a/tests/system/ixfr/db.example.n2.refresh.in b/tests/system/ixfr/db.example.n2.refresh.in
new file mode 100644
index 0000000..2c59416
--- /dev/null
+++ b/tests/system/ixfr/db.example.n2.refresh.in
@@ -0,0 +1,28 @@
+; Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+;
+; Permission to use, copy, modify, and/or distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+; PERFORMANCE OF THIS SOFTWARE.
+
+$ORIGIN example.
+$TTL 3600
+
+@ IN SOA ns1.example. hostmaster.example. 98 30 2 7200 300
+
+ IN NS ns1.example.
+ IN NS ns2.example.
+
+ns1 IN A 192.0.2.1
+ns2 IN A 192.0.2.2
+
+a-1 IN A 192.0.2.101
+
+$INCLUDE @abs_top_builddir@/tests/system/ixfr/db.example.common
diff --git a/tests/system/ixfr/db.example.n4.in b/tests/system/ixfr/db.example.n4.in
new file mode 100644
index 0000000..ae15a54
--- /dev/null
+++ b/tests/system/ixfr/db.example.n4.in
@@ -0,0 +1,31 @@
+; Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+;
+; Permission to use, copy, modify, and/or distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+; PERFORMANCE OF THIS SOFTWARE.
+
+$ORIGIN example.
+$TTL 3600
+
+@ IN SOA ns1.example. hostmaster.example. 96 3600 900 7200 300
+
+ IN NS ns1.example.
+ IN NS ns2.example.
+
+ns1 IN A 192.0.2.1
+ns2 IN A 192.0.2.2
+
+a-1 IN A 192.0.2.101
+a-2 IN A 192.0.2.102
+b-1 IN A 192.0.2.201
+b-2 IN A 192.0.2.202
+
+$INCLUDE @abs_top_builddir@/tests/system/ixfr/db.example.common
diff --git a/tests/system/ixfr/db.example.n6.in b/tests/system/ixfr/db.example.n6.in
new file mode 100644
index 0000000..33a82a0
--- /dev/null
+++ b/tests/system/ixfr/db.example.n6.in
@@ -0,0 +1,29 @@
+; Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+;
+; Permission to use, copy, modify, and/or distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+; PERFORMANCE OF THIS SOFTWARE.
+
+$ORIGIN example.
+$TTL 3600
+
+@ IN SOA ns1.example. hostmaster.example. 94 3600 900 7200 300
+
+ IN NS ns1.example.
+ IN NS ns2.example.
+
+ns1 IN A 192.0.2.1
+ns2 IN A 192.0.2.2
+
+a-1 IN A 192.0.2.101
+a-2 IN A 192.0.2.102
+b-1 IN A 192.0.2.201
+b-2 IN A 192.0.2.202
diff --git a/tests/system/ixfr/in-1/clean.sh b/tests/system/ixfr/in-1/clean.sh
new file mode 100644
index 0000000..88f4ff1
--- /dev/null
+++ b/tests/system/ixfr/in-1/clean.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# Clean up nameserver directories after zone transfer tests.
+
+rm -f ns1/named.conf
+rm -f ns1/db.example*
+rm -f ns1/named.memstats
+
+rm -f nsx2/bind10.run
+rm -f nsx2/b10-config.db
+rm -f ../zone.sqlite3
+
+rm -f client.dig
+rm -f server.dig
diff --git a/tests/system/ixfr/in-1/ns1/README b/tests/system/ixfr/in-1/ns1/README
new file mode 100644
index 0000000..aaa8a31
--- /dev/null
+++ b/tests/system/ixfr/in-1/ns1/README
@@ -0,0 +1,3 @@
+This directory should be empty. A README file is placed here to ensure git
+notes the directory's presence. It can be removed if other files are placed
+here.
diff --git a/tests/system/ixfr/in-1/nsx2/README b/tests/system/ixfr/in-1/nsx2/README
new file mode 100644
index 0000000..aaa8a31
--- /dev/null
+++ b/tests/system/ixfr/in-1/nsx2/README
@@ -0,0 +1,3 @@
+This directory should be empty. A README file is placed here to ensure git
+notes the directory's presence. It can be removed if other files are placed
+here.
diff --git a/tests/system/ixfr/in-1/setup.sh.in b/tests/system/ixfr/in-1/setup.sh.in
new file mode 100644
index 0000000..d4c3978
--- /dev/null
+++ b/tests/system/ixfr/in-1/setup.sh.in
@@ -0,0 +1,30 @@
+#!/bin/sh
+#
+# Copyright (C) 2004, 2007, 2011 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2001, 2002 Internet Software Consortium.
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+. @abs_top_builddir@/tests/system/conf.sh
+
+# Clean up from last time
+sh clean.sh
+
+# Set up the initial version of the IXFR server - load the n-4 version of the
+# zone. The configuration file enables IXFR and disabled notifies.
+cp -f $IXFR_TOP/named_nonotify.conf ns1/named.conf
+cp -f $IXFR_TOP/db.example.n4 ns1/db.example
+
+# Set up the IXFR client - load the same version of the zone.
+cp -f $IXFR_TOP/b10-config.db nsx2/b10-config.db
+${B10_LOADZONE} -o . -d $IXFR_TOP/zone.sqlite3 $IXFR_TOP/db.example.n4
diff --git a/tests/system/ixfr/in-1/tests.sh b/tests/system/ixfr/in-1/tests.sh
new file mode 100644
index 0000000..2f49ddf
--- /dev/null
+++ b/tests/system/ixfr/in-1/tests.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+#
+# Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# \file
+# This script performs the first IXFR-IN test. A BIND 9 nameserver (the
+# "server") contains a version of the zone (version N) and two previous
+# versions, N-2 and N-4. A BIND 10 nameserver (the "client") is loaded with
+# version N-4 of the zone. A NOTIFY is sent to it, and it is expected that
+# it will send an IXFR to the server and update itself with the latest version
+# of the zone. (The changes are such that the update should be in the form of
+# a single UDP packet.)
+#
+# The pre-requisites for this test are the same as for the common tests, so
+# we can execute that directly.
+
+. ../common_tests.sh
+status=$?
+
+# TODO: Check the BIND 10 log, looking for the IXFR messages that indicate that
+# it has initiated an IXFR and that it received the update within a single
+# packet.
+
+echo "I:exit status: $status"
+exit $status
diff --git a/tests/system/ixfr/in-2/clean.sh b/tests/system/ixfr/in-2/clean.sh
new file mode 100644
index 0000000..88f4ff1
--- /dev/null
+++ b/tests/system/ixfr/in-2/clean.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# Clean up nameserver directories after zone transfer tests.
+
+rm -f ns1/named.conf
+rm -f ns1/db.example*
+rm -f ns1/named.memstats
+
+rm -f nsx2/bind10.run
+rm -f nsx2/b10-config.db
+rm -f ../zone.sqlite3
+
+rm -f client.dig
+rm -f server.dig
diff --git a/tests/system/ixfr/in-2/ns1/README b/tests/system/ixfr/in-2/ns1/README
new file mode 100644
index 0000000..aaa8a31
--- /dev/null
+++ b/tests/system/ixfr/in-2/ns1/README
@@ -0,0 +1,3 @@
+This directory should be empty. A README file is placed here to ensure git
+notes the directory's presence. It can be removed if other files are placed
+here.
diff --git a/tests/system/ixfr/in-2/nsx2/README b/tests/system/ixfr/in-2/nsx2/README
new file mode 100644
index 0000000..aaa8a31
--- /dev/null
+++ b/tests/system/ixfr/in-2/nsx2/README
@@ -0,0 +1,3 @@
+This directory should be empty. A README file is placed here to ensure git
+notes the directory's presence. It can be removed if other files are placed
+here.
diff --git a/tests/system/ixfr/in-2/setup.sh.in b/tests/system/ixfr/in-2/setup.sh.in
new file mode 100644
index 0000000..a5f64e5
--- /dev/null
+++ b/tests/system/ixfr/in-2/setup.sh.in
@@ -0,0 +1,29 @@
+#!/bin/sh
+#
+# Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+. @abs_top_builddir@/tests/system/conf.sh
+
+# Clean up from last time
+sh clean.sh
+
+# Set up the initial version of the IXFR server - load the n-6 version of the
+# zone. The configuration file enables IXFR and disables notifies.
+cp -f $IXFR_TOP/named_nonotify.conf ns1/named.conf
+cp -f $IXFR_TOP/db.example.n6 ns1/db.example
+
+# Set up the IXFR client - load an earlier version of the zone
+cp -f $IXFR_TOP/b10-config.db nsx2/b10-config.db
+${B10_LOADZONE} -o . -d $IXFR_TOP/zone.sqlite3 $IXFR_TOP/db.example.n6
diff --git a/tests/system/ixfr/in-2/tests.sh b/tests/system/ixfr/in-2/tests.sh
new file mode 100644
index 0000000..7b1e2a8
--- /dev/null
+++ b/tests/system/ixfr/in-2/tests.sh
@@ -0,0 +1,81 @@
+#!/bin/sh
+#
+# Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# \file
+# This script performs the first IXFR-IN test. A BIND 9 nameserver (the
+# "server") contains a version of the zone (version N) and three previous
+# versions, N-2, N-4 and N-6. A BIND 10 nameserver (the "client") is loaded
+# with version N-6 of the zone. A NOTIFY is sent to it, and it is expected that
+# it will send an IXFR to the server and update itself with the latest version
+# of the zone. (The changes are such that the update will have to take place
+# over TCP.)
+
+. ../ixfr_init.sh
+
+# On entry, the IXFR server is at version N-6. The common tests assume that
+# it is an N-4, so update it.
+echo "I:$SERVER_NAME updating IXFR-server to suitable start version"
+update_server_zone $SERVER_NAME $SERVER_IP $IXFR_TOP/db.example.n4
+if [ $? -ne 0 ];
+then
+ exit 1
+fi
+
+# The pre-requisites for this test are the same as for the common tests, so
+# we can execute that directly.
+. ../common_tests.sh
+if [ $? -ne 0 ];
+then
+ exit 1
+fi
+
+# TEMPORARY: at the time of writing (October 2011) BIND 10 does not attempt
+# a UDP transfer first. Therefore just check for TCP transfer.
+
+# Check that the client initiated and completed an IXFR. Use a simple grep as
+# the syntax and capabilities of egrep may vary between systems.
+grep XFRIN_XFR_TRANSFER_STARTED nsx2/bind10.run | grep IXFR > /dev/null
+if [ $? -ne 0 ];
+then
+ echo "R:$CLIENT_NAME FAIL no 'IXFR started' message in the BIND 10 log"
+ exit 1
+fi
+
+grep XFRIN_XFR_TRANSFER_SUCCESS nsx2/bind10.run | grep IXFR > /dev/null
+if [ $? -ne 0 ];
+then
+ echo "R:$CLIENT_NAME FAIL no 'IXFR successful' message in the BIND 10 log"
+ exit 1
+fi
+
+# Look in the named log file to see if a TCP IXFR was requested. Again use a
+# simple grep.
+grep "transfer of" ns1/named.run | grep "sending TCP message" > /dev/null
+if [ $? -ne 0 ];
+then
+ echo "R:$SERVER_NAME FAIL no 'sending TCP' message in the BIND 9 log"
+ exit 1
+fi
+
+grep "IXFR ended" ns1/named.run > /dev/null
+if [ $? -ne 0 ];
+then
+ echo "R:$SERVER_NAME FAIL no 'IXFR ended' message in the BIND 9 log"
+ exit 1
+fi
+
+echo "I:exit status: 0"
+exit 0
diff --git a/tests/system/ixfr/in-3/clean.sh b/tests/system/ixfr/in-3/clean.sh
new file mode 100644
index 0000000..88f4ff1
--- /dev/null
+++ b/tests/system/ixfr/in-3/clean.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# Clean up nameserver directories after zone transfer tests.
+
+rm -f ns1/named.conf
+rm -f ns1/db.example*
+rm -f ns1/named.memstats
+
+rm -f nsx2/bind10.run
+rm -f nsx2/b10-config.db
+rm -f ../zone.sqlite3
+
+rm -f client.dig
+rm -f server.dig
diff --git a/tests/system/ixfr/in-3/ns1/README b/tests/system/ixfr/in-3/ns1/README
new file mode 100644
index 0000000..aaa8a31
--- /dev/null
+++ b/tests/system/ixfr/in-3/ns1/README
@@ -0,0 +1,3 @@
+This directory should be empty. A README file is placed here to ensure git
+notes the directory's presence. It can be removed if other files are placed
+here.
diff --git a/tests/system/ixfr/in-3/nsx2/README b/tests/system/ixfr/in-3/nsx2/README
new file mode 100644
index 0000000..aaa8a31
--- /dev/null
+++ b/tests/system/ixfr/in-3/nsx2/README
@@ -0,0 +1,3 @@
+This directory should be empty. A README file is placed here to ensure git
+notes the directory's presence. It can be removed if other files are placed
+here.
diff --git a/tests/system/ixfr/in-3/setup.sh.in b/tests/system/ixfr/in-3/setup.sh.in
new file mode 100644
index 0000000..867e06e
--- /dev/null
+++ b/tests/system/ixfr/in-3/setup.sh.in
@@ -0,0 +1,29 @@
+#!/bin/sh
+#
+# Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+. @abs_top_builddir@/tests/system/conf.sh
+# Clean up from last time
+
+sh clean.sh
+
+# Set up the initial version of the IXFR server - load the latest version of
+# the zone.
+cp -f $IXFR_TOP/named_noixfr.conf ns1/named.conf
+cp -f $IXFR_TOP/db.example.n0 ns1/db.example
+
+# Set up the IXFR client - load a previous version of the zone.
+cp -f $IXFR_TOP/b10-config.db nsx2/b10-config.db
+${B10_LOADZONE} -o . -d $IXFR_TOP/zone.sqlite3 $IXFR_TOP/db.example.n2
diff --git a/tests/system/ixfr/in-3/tests.sh b/tests/system/ixfr/in-3/tests.sh
new file mode 100644
index 0000000..858b815
--- /dev/null
+++ b/tests/system/ixfr/in-3/tests.sh
@@ -0,0 +1,55 @@
+#!/bin/sh
+#
+# Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# \file
+# This script performs the third IXFR-IN test. A BIND 9 nameserver (the
+# "server") contains a version of the zone (version N) and has IXFRs disabled.
+# A BIND 10 nameserver (the "client") is loaded with version N-2 of the zone.
+# A NOTIFY is sent to it, and it is expected that it will send an IXFR to the
+# server; the server should not respond to the request, so the client should
+# then send an AXFR request and receive the latest copy of the zone.
+
+. ../ixfr_init.sh
+status=$?
+
+# Store the SOA serial number of the BIND 10 client for later use.
+old_client_serial=`$DIG_SOA @$CLIENT_IP | $AWK '{print $3}'`
+echo "I:SOA serial of IXFR client $CLIENT_NAME is $old_client_serial"
+
+# TODO: Need to alter configuration of BIND 10 server such that it accepts
+# NOTIFYs from and sends IXFR requests to the BIND 9 master.
+
+# If required, get the IXFR server to notify the IXFR client of the new zone.
+# Do this by allowing notifies and then triggering a re-notification of the
+# server.
+echo "I:notifying IXFR-client $CLIENT_NAME of presence of new version of zone"
+do_rndc $SERVER_NAME $SERVER_IP notify example
+status=`expr $status + $?`
+
+# Wait for the client to update itself.
+wait_for_update $CLIENT_NAME $CLIENT_IP $old_client_serial
+status=`expr $status + $?`
+
+# Has updated, get the latest serial of the client and server - they
+# should be the same.
+compare_soa $SERVER_NAME $SERVER_IP $CLIENT_NAME $CLIENT_IP
+status=`expr $status + $?`
+
+# TODO: Check the BIND 10 log, looking for the IXFR messages that indicate that
+# it has initiated an IXFR and then an AXFR.
+
+echo "I:exit status: $status"
+exit $status
diff --git a/tests/system/ixfr/in-4/clean.sh b/tests/system/ixfr/in-4/clean.sh
new file mode 100644
index 0000000..88f4ff1
--- /dev/null
+++ b/tests/system/ixfr/in-4/clean.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# Clean up nameserver directories after zone transfer tests.
+
+rm -f ns1/named.conf
+rm -f ns1/db.example*
+rm -f ns1/named.memstats
+
+rm -f nsx2/bind10.run
+rm -f nsx2/b10-config.db
+rm -f ../zone.sqlite3
+
+rm -f client.dig
+rm -f server.dig
diff --git a/tests/system/ixfr/in-4/ns1/README b/tests/system/ixfr/in-4/ns1/README
new file mode 100644
index 0000000..aaa8a31
--- /dev/null
+++ b/tests/system/ixfr/in-4/ns1/README
@@ -0,0 +1,3 @@
+This directory should be empty. A README file is placed here to ensure git
+notes the directory's presence. It can be removed if other files are placed
+here.
diff --git a/tests/system/ixfr/in-4/nsx2/README b/tests/system/ixfr/in-4/nsx2/README
new file mode 100644
index 0000000..aaa8a31
--- /dev/null
+++ b/tests/system/ixfr/in-4/nsx2/README
@@ -0,0 +1,3 @@
+This directory should be empty. A README file is placed here to ensure git
+notes the directory's presence. It can be removed if other files are placed
+here.
diff --git a/tests/system/ixfr/in-4/setup.sh.in b/tests/system/ixfr/in-4/setup.sh.in
new file mode 100644
index 0000000..7419e27
--- /dev/null
+++ b/tests/system/ixfr/in-4/setup.sh.in
@@ -0,0 +1,30 @@
+#!/bin/sh
+#
+# Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+. @abs_top_builddir@/tests/system/conf.sh
+# Clean up from last time
+
+sh clean.sh
+
+# Set up the initial version of the ixfr server - load the last-but-one version
+# of the zone.
+cp $IXFR_TOP/named_nonotify.conf ns1/named.conf
+cp -f $IXFR_TOP/db.example.n2.refresh ns1/db.example
+
+# Set up the IXFR client - load a previous version of the zone with a short
+# refresh time.
+cp -f $IXFR_TOP/b10-config.db nsx2/b10-config.db
+${B10_LOADZONE} -o . -d $IXFR_TOP/zone.sqlite3 $IXFR_TOP/db.example.n2.refresh
diff --git a/tests/system/ixfr/in-4/tests.sh b/tests/system/ixfr/in-4/tests.sh
new file mode 100644
index 0000000..3024253
--- /dev/null
+++ b/tests/system/ixfr/in-4/tests.sh
@@ -0,0 +1,53 @@
+#!/bin/sh
+#
+# Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# \file
+# This script performs the fourth IXFR-IN test. A BIND 9 nameserver (the
+# "server") contains a version of the zone (version N) and has IXFRs enabled.
+# A BIND 10 nameserver (the "client") is loaded with version N-2 of the zone
+# and a small refresh time. After this expires, the IXFR client should send
+# an IXFR request to the IXFR server.
+
+. ../ixfr_init.sh
+status=$?
+
+# Ensure the server has the latest copy of the zone. The implicit assumption
+# here is that starting the two systems and reloading the IXFR server takes
+# less time than the SOA refresh time set in the "db.example.n2.refresh" zone
+# file.
+cp $IXFR_TOP/db.example.n0 ns1/db.example
+do_rndc $SERVER_NAME $SERVER_IP reload
+
+# Store the SOA serial number of the BIND 10 client for later use.
+old_client_serial=`$DIG_SOA @$CLIENT_IP | $AWK '{print $3}'`
+echo "I:SOA serial of IXFR client $CLIENT_NAME is $old_client_serial"
+
+# Wait for the client to update itself. 30 seconds has been given as the
+# refresh interface and 2 seconds as the retry interval. The wait_for_update
+# function will check for up to a minute looking for the new serial.
+wait_for_update $CLIENT_NAME $CLIENT_IP $old_client_serial
+status=`expr $status + $?`
+
+# Has updated, get the latest serial of the client and server - they
+# should be the same.
+compare_soa $SERVER_NAME $SERVER_IP $CLIENT_NAME $CLIENT_IP
+status=`expr $status + $?`
+
+# TODO: Check the BIND 10 log, looking for the IXFR messages that indicate that
+# the client has initiated the IXFR.
+
+echo "I:exit status: $status"
+exit $status
diff --git a/tests/system/ixfr/ixfr_init.sh.in b/tests/system/ixfr/ixfr_init.sh.in
new file mode 100644
index 0000000..ba6049e
--- /dev/null
+++ b/tests/system/ixfr/ixfr_init.sh.in
@@ -0,0 +1,330 @@
+#!/bin/sh
+#
+# Copyright (C) 2011 Internet Software Consortium.
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# \file
+# This file should be run by all IXFR tests before doing anything else. It
+# includes the main configuration script to set the environment variables as
+# well as defining useful shell subroutines.
+
+. @abs_top_builddir@/tests/system/conf.sh
+
+# Useful symbols used in the IXFR tests.
+
+# Short-hand for getting SOA - just supply address of the server
+DIG_SOA="$DIG +norecurse +short -p $DNS_PORT example. SOA"
+
+# All IXFR tests use a BIND 9 server serving a BIND 10 client. These have the
+# smae name and use the same address in all tests.
+SERVER_NAME=ns1
+SERVER_IP=10.53.0.1 # BIND 9
+
+CLIENT_NAME=nsx2
+CLIENT_IP=10.53.0.2 # BIND 10
+
+# \brief Check Arguments
+#
+# Most functions take the name of nameserver as the first argument and its IP
+# address as the second. This function is passed "$*" and just checks that
+# both $1 and $2 are defined.
+#
+# \arg $* Arguments passed to caller
+#
+# \return status 0 => $1 and $2 are defined, 1 => they are not.
+check_name_ip() {
+
+ if [ "$1" = "" ];
+ then
+ echo "R:FAIL name of server not supplied"
+ return 1
+ fi
+
+ if [ "$2" = "" ];
+ then
+ echo "R:FAIL IP address of server not supplied"
+ return 1
+ fi
+
+ return 0
+}
+
+
+# \brief Perform RNDC Command
+#
+# Controls the BIND 9 IXFR server. Called do_rndc (instead of rndc) to avoid
+# confusion if rndc itself is in the search path.
+#
+# \arg $1 - Name of the server (ns1, nsx2 etc.)
+# \arg $2 - IP address of the server
+# \arg $* - Command to execute (which may be multiple tokens)
+#
+# \return 0 on success, 1 on failure (in which case an error message will
+# have been output).
+do_rndc () {
+
+ # If the following checks fail, the code is wrong.
+
+ check_name_ip $*
+ if [ $? -ne 0 ];
+ then
+ echo "R:FAIL do_rndc - name or ip address of server not supplied"
+ return 1
+ fi
+
+ name=$1
+ shift
+ ip=$1
+ shift
+
+ if [ "$1" = "" ];
+ then
+ echo "R:FAIL do_rndc - rndc command not supplied"
+ return 1
+ fi
+
+ $RNDC -c $SYSTEM_TOP/common/rndc.conf -s $ip -p $RNDC_PORT $* 2>&1 \
+ | sed "s/^/I:$name /"
+}
+
+# \brief Wait for update
+#
+# Given a serial number and a server, poll the nameserver until the SOA serial
+# number is different from that given. The poll takes place every five seconds
+# for a minute.
+#
+# \arg $1 - Name of the server
+# \arg $2 - IP address of the server
+# \arg $3 - Serial number to check against
+#
+# \return 0 if the serial number is different (requires another poll to obtain
+# it), 1 if the serial number has not changed after one minute.
+wait_for_update() {
+
+ # If the following checks fail, the code is wrong.
+
+ check_name_ip $*
+ if [ $? -ne 0 ];
+ then
+ echo "R:FAIL wait_for_update - name or ip address of system not supplied"
+ return 1
+
+ fi
+
+ name=$1
+ shift
+ ip=$1
+ shift
+
+ serial=$1
+ if [ "$serial" = "" ];
+ then
+ echo "R:FAIL wait_for_update - serial number not supplied"
+ return 1
+ fi
+
+ # Now poll the server looking for the new serial number
+
+ echo "I:$name waiting for SOA serial to change from $serial"
+ for i in 1 2 3 4 5 6 7 8 9 10 11 12
+ do
+ if [ $i -gt 1 ];
+ then
+ sleep 5
+ fi
+
+ new_serial=`$DIG_SOA @$ip | $AWK '{print $3}'`
+ if [ "$new_serial" != "$serial" ];
+ then
+ echo "I:$name SOA serial was at $serial, now at $new_serial"
+ return 0
+ fi
+ done
+
+ echo "R:$name FAIL serial number has not updated"
+ return 1
+}
+
+
+
+# \brief Update server zone
+#
+# Reloads the example. zone in the BIND 9 IXFR server and waits a maximum of
+# one minute for it to be served.
+#
+# \arg $1 - Name of the server (ns1, nsx2 etc.)
+# \arg $2 - IP address of the server
+# \arg $3 - Zone file to load
+# \arg $* - Command to execute (which may be multiple tokens)
+#
+# \return 0 on success, 1 on failure (for which an error message will have
+# been output).
+update_server_zone() {
+
+ # If the following checks fail, the code is wrong.
+
+ check_name_ip $*
+ if [ $? -ne 0 ];
+ then
+ echo "R:FAIL update_server_zone - name or ip address of server not supplied"
+ return 1
+ fi
+
+ name=$1
+ shift
+ ip=$1
+ shift
+
+ file=$1
+ shift
+ if [ "$file" = "" ];
+ then
+ echo "R:FAIL update_server_zone - new zone file not supplied"
+ return 1
+ fi
+
+ if [ ! -e $file ];
+ then
+ echo "R:FAIL update_server_zone - zone file does not exist: $file"
+ return 1
+ fi
+
+ old_serial=`$DIG_SOA @$ip | $AWK '{print $3}'`
+
+ echo "I:$name IXFR server loading $file"
+ cp $file $name/db.example
+ do_rndc $name $ip reload
+ if [ $? -ne 0 ];
+ then
+ return 1 # Message will have already been output
+ fi
+
+ wait_for_update $name $ip $old_serial
+ if [ $? -ne 0 ];
+ then
+ echo "R:$name FAIL IXFR server did not update zone after reload"
+ return 1
+ fi
+ new_serial=`$DIG_SOA @$ip | $AWK '{print $3}'`
+
+ return 0
+}
+
+# \brief Compare client and server SOAs
+#
+# Checks the SOAs of two systems and reports if they are not equal.
+#
+# \arg $1 Name of the IXFR server
+# \arg $2 IP of the IXFR server
+# \arg $3 Name of the IXFR client
+# \arg $4 IP of the IXFR client
+#
+# \return 0 if the systems have the same SOA, 1 if not. In the latter case,
+# an error will be output.
+compare_soa() {
+
+ # If the following checks fail, the code is wrong.
+
+ check_name_ip $*
+ if [ $? -ne 0 ];
+ then
+ echo "R:FAIL compare_soa - name or ip address of server not supplied"
+ return 1
+ fi
+
+ server_name=$1
+ shift
+ server_ip=$1
+ shift
+
+ check_name_ip $*
+ if [ $? -ne 0 ];
+ then
+ echo "R:FAIL compare_soa - name or ip address of client not supplied"
+ return 1
+ fi
+
+ client_name=$1
+ shift
+ client_ip=$1
+ shift
+
+ client_serial=`$DIG_SOA @$client_ip | $AWK '{print $3}'`
+ server_serial=`$DIG_SOA @$server_ip | $AWK '{print $3}'`
+ if [ "$client_serial" != "$server_serial" ];
+ then
+ echo "R:FAIL client $client_name serial $client_serial not same as server $server_name serial $server_serial"
+ return 1
+ fi
+
+ return 0
+}
+
+# \brief Compare client and server zones
+#
+# Checks the zones of two systems and reports if they are not identical.
+#
+# The check is simplistic. Each zone is listed via "dig", after which comment
+# lines, blank lines and spaces/tabs are removed, and the result sorted. The
+# output from each system is then compared. They should be identical.
+#
+# \arg $1 Name of the IXFR server
+# \arg $2 IP of the IXFR server
+# \arg $3 Name of the IXFR client
+# \arg $4 IP of the IXFR client
+#
+# \return 0 if the zones are the same, 1 if not.
+compare_zones() {
+
+ # If the following checks fail, the code is wrong.
+
+ check_name_ip $*
+ if [ $? -ne 0 ];
+ then
+ echo "R:FAIL compare_zones - name or ip address of server not supplied"
+ return 1
+ fi
+
+ server_name=$1
+ shift
+ server_ip=$1
+ shift
+
+ check_name_ip $*
+ if [ $? -ne 0 ];
+ then
+ echo "R:FAIL compare_zones - name or ip address of client not supplied"
+ return 1
+ fi
+
+ client_name=$1
+ shift
+ client_ip=$1
+ shift
+
+ $DIG @$client_ip -p $DNS_PORT example. axfr | grep -v '^;' | grep -v '^$' \
+ | sed -e 's/ //g' -e 's/\t//g' | sort > client.dig
+ $DIG @$server_ip -p $DNS_PORT example. axfr | grep -v '^;' | grep -v '^$' \
+ | sed -e 's/ //g' -e 's/\t//g' | sort > server.dig
+ diff client.dig server.dig
+ if [ $? -eq 0 ];
+ then
+ echo "I:client and server zones identical"
+ else
+ echo "R:FAIL client $client_name zone not same as server $server_name zone"
+ return 1
+ fi
+
+ return 0
+}
diff --git a/tests/system/ixfr/named_noixfr.conf b/tests/system/ixfr/named_noixfr.conf
new file mode 100644
index 0000000..b0d972a
--- /dev/null
+++ b/tests/system/ixfr/named_noixfr.conf
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2004, 2007, 2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2000, 2001 Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+include "../../../common/rndc.key";
+
+controls {
+ inet 10.53.0.1 port 9953 allow { any; } keys { rndc_key; };
+};
+
+options {
+ query-source address 10.53.0.1;
+ notify-source 10.53.0.1;
+ transfer-source 10.53.0.1;
+ port 53210;
+ pid-file "named.pid";
+ listen-on { 10.53.0.1; };
+ listen-on-v6 { none; };
+ recursion no;
+ ixfr-from-differences no;
+ notify explicit;
+ also-notify { 10.53.0.2; };
+};
+
+zone "example" {
+ type master;
+ file "db.example";
+};
diff --git a/tests/system/ixfr/named_nonotify.conf b/tests/system/ixfr/named_nonotify.conf
new file mode 100644
index 0000000..c08c212
--- /dev/null
+++ b/tests/system/ixfr/named_nonotify.conf
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2004, 2007, 2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2000, 2001 Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+include "../../../common/rndc.key";
+
+controls {
+ inet 10.53.0.1 port 9953 allow { any; } keys { rndc_key; };
+};
+
+options {
+ query-source address 10.53.0.1;
+ notify-source 10.53.0.1;
+ transfer-source 10.53.0.1;
+ port 53210;
+ pid-file "named.pid";
+ listen-on { 10.53.0.1; };
+ listen-on-v6 { none; };
+ recursion no;
+ ixfr-from-differences yes;
+ notify no;
+};
+
+zone "example" {
+ type master;
+ file "db.example";
+};
diff --git a/tests/system/ixfr/named_notify.conf b/tests/system/ixfr/named_notify.conf
new file mode 100644
index 0000000..df45e6f
--- /dev/null
+++ b/tests/system/ixfr/named_notify.conf
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2004, 2007, 2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2000, 2001 Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+include "../../../common/rndc.key";
+
+controls {
+ inet 10.53.0.1 port 9953 allow { any; } keys { rndc_key; };
+};
+
+options {
+ query-source address 10.53.0.1;
+ notify-source 10.53.0.1;
+ transfer-source 10.53.0.1;
+ port 53210;
+ pid-file "named.pid";
+ listen-on { 10.53.0.1; };
+ listen-on-v6 { none; };
+ recursion no;
+ ixfr-from-differences yes;
+ notify explicit;
+ also-notify { 10.53.0.2; };
+};
+
+zone "example" {
+ type master;
+ file "db.example";
+};
diff --git a/tests/system/run.sh b/tests/system/run.sh
deleted file mode 100755
index 4f852f4..0000000
--- a/tests/system/run.sh
+++ /dev/null
@@ -1,125 +0,0 @@
-#!/bin/sh
-#
-# Copyright (C) 2004, 2007, 2010 Internet Systems Consortium, Inc. ("ISC")
-# Copyright (C) 2000, 2001 Internet Software Consortium.
-#
-# Permission to use, copy, modify, and/or distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
-# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
-# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-#
-# Run a system test.
-#
-
-SYSTEMTESTTOP=.
-. $SYSTEMTESTTOP/conf.sh
-
-stopservers=true
-
-case $1 in
- --keep) stopservers=false; shift ;;
-esac
-
-test $# -gt 0 || { echo "usage: $0 [--keep] test-directory" >&2; exit 1; }
-
-test=$1
-shift
-
-test -d $test || { echo "$0: $test: no such test" >&2; exit 1; }
-
-echo "S:$test:`date`" >&2
-echo "T:$test:1:A" >&2
-echo "A:System test $test" >&2
-
-if [ x$PERL = x ]
-then
- echo "I:Perl not available. Skipping test." >&2
- echo "R:UNTESTED" >&2
- echo "E:$test:`date`" >&2
- exit 0;
-fi
-
-$PERL $TESTSOCK || {
- echo "I:Network interface aliases not set up. Skipping test." >&2;
- echo "R:UNTESTED" >&2;
- echo "E:$test:`date`" >&2;
- exit 0;
-}
-
-
-# Check for test-specific prerequisites.
-test ! -f $test/prereq.sh || ( cd $test && sh prereq.sh "$@" )
-result=$?
-
-if [ $result -eq 0 ]; then
- : prereqs ok
-else
- echo "I:Prerequisites for $test missing, skipping test." >&2
- [ $result -eq 255 ] && echo "R:SKIPPED" || echo "R:UNTESTED"
- echo "E:$test:`date`" >&2
- exit 0
-fi
-
-# Check for PKCS#11 support
-if
- test ! -f $test/usepkcs11 || sh cleanpkcs11.sh
-then
- : pkcs11 ok
-else
- echo "I:Need PKCS#11 for $test, skipping test." >&2
- echo "R:PKCS11ONLY" >&2
- echo "E:$test:`date`" >&2
- exit 0
-fi
-
-# Set up any dynamically generated test data
-if test -f $test/setup.sh
-then
- ( cd $test && sh setup.sh "$@" )
-fi
-
-# Start name servers running
-$PERL start.pl $test || exit 1
-
-# Run the tests
-( cd $test ; sh tests.sh )
-
-status=$?
-
-if $stopservers
-then
- :
-else
- exit $status
-fi
-
-# Shutdown
-$PERL stop.pl $test
-
-status=`expr $status + $?`
-
-if [ $status != 0 ]; then
- echo "R:FAIL"
- # Don't clean up - we need the evidence.
- find . -name core -exec chmod 0644 '{}' \;
-else
- echo "R:PASS"
-
- # Clean up.
- if test -f $test/clean.sh
- then
- ( cd $test && sh clean.sh "$@" )
- fi
-fi
-
-echo "E:$test:`date`"
-
-exit $status
diff --git a/tests/system/run.sh.in b/tests/system/run.sh.in
new file mode 100755
index 0000000..619b865
--- /dev/null
+++ b/tests/system/run.sh.in
@@ -0,0 +1,125 @@
+#!/bin/sh
+#
+# Copyright (C) 2004, 2007, 2010 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2000, 2001 Internet Software Consortium.
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+#
+# Run a system test.
+#
+
+SYSTEMTOP=@abs_top_builddir@/tests/system
+. $SYSTEMTOP/conf.sh
+
+stopservers=true
+
+case $1 in
+ --keep) stopservers=false; shift ;;
+esac
+
+test $# -gt 0 || { echo "usage: $0 [--keep] test-directory" >&2; exit 1; }
+
+test=$1
+shift
+
+test -d $test || { echo "$0: $test: no such test" >&2; exit 1; }
+
+echo "S:$test:`date`" >&2
+echo "T:$test:1:A" >&2
+echo "A:System test $test" >&2
+
+if [ x$PERL = x ]
+then
+ echo "I:Perl not available. Skipping test." >&2
+ echo "R:UNTESTED" >&2
+ echo "E:$test:`date`" >&2
+ exit 0;
+fi
+
+$PERL $TESTSOCK || {
+ echo "I:Network interface aliases not set up. Skipping test." >&2;
+ echo "R:UNTESTED" >&2;
+ echo "E:$test:`date`" >&2;
+ exit 0;
+}
+
+
+# Check for test-specific prerequisites.
+test ! -f $test/prereq.sh || ( cd $test && sh prereq.sh "$@" )
+result=$?
+
+if [ $result -eq 0 ]; then
+ : prereqs ok
+else
+ echo "I:Prerequisites for $test missing, skipping test." >&2
+ [ $result -eq 255 ] && echo "R:SKIPPED" || echo "R:UNTESTED"
+ echo "E:$test:`date`" >&2
+ exit 0
+fi
+
+# Check for PKCS#11 support
+if
+ test ! -f $test/usepkcs11 || sh cleanpkcs11.sh
+then
+ : pkcs11 ok
+else
+ echo "I:Need PKCS#11 for $test, skipping test." >&2
+ echo "R:PKCS11ONLY" >&2
+ echo "E:$test:`date`" >&2
+ exit 0
+fi
+
+# Set up any dynamically generated test data
+if test -f $test/setup.sh
+then
+ ( cd $test && sh setup.sh "$@" )
+fi
+
+# Start name servers running
+$PERL $SYSTEMTOP/start.pl $test || exit 1
+
+# Run the tests
+( cd $test ; sh tests.sh )
+
+status=$?
+
+if $stopservers
+then
+ :
+else
+ exit $status
+fi
+
+# Shutdown
+$PERL $SYSTEMTOP/stop.pl $test
+
+status=`expr $status + $?`
+
+if [ $status != 0 ]; then
+ echo "R:FAIL"
+ # Don't clean up - we need the evidence.
+ find . -name core -exec chmod 0644 '{}' \;
+else
+ echo "R:PASS"
+
+ # Clean up.
+ if test -f $test/clean.sh
+ then
+ ( cd $test && sh clean.sh "$@" )
+ fi
+fi
+
+echo "E:$test:`date`"
+
+exit $status
diff --git a/tests/system/start.pl b/tests/system/start.pl
index 56f00c4..daa4577 100755
--- a/tests/system/start.pl
+++ b/tests/system/start.pl
@@ -53,7 +53,7 @@ if ($server && !-d "$test/$server") {
my $topdir = abs_path("$test/..");
my $testdir = abs_path("$test");
my $RUN_BIND10 = $ENV{'RUN_BIND10'};
-my $NAMED = $ENV{'NAMED'};
+my $NAMED = $ENV{'BIND9_NAMED'};
my $LWRESD = $ENV{'LWRESD'};
my $DIG = $ENV{'DIG'};
my $PERL = $ENV{'PERL'};
@@ -182,7 +182,7 @@ sub start_server {
exit 1;
}
- # print "I:starting server $server\n";
+ print "I:starting server $server\n";
chdir "$testdir/$server";
diff --git a/win32build/VS2010/Debug.log b/win32build/VS2010/Debug.log
index 6f75ea9..5261f6c 100755
--- a/win32build/VS2010/Debug.log
+++ b/win32build/VS2010/Debug.log
@@ -204,11 +204,11 @@ c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(2528): warning C4
c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(2670): warning C4244: 'argument' : conversion from 'int' to 'const uint8_t', possible loss of data
c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(2671): warning C4244: 'argument' : conversion from 'int' to 'uint8_t', possible loss of data
c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(2745): warning C4244: 'argument' : conversion from 'const int' to 'uint16_t', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(3188): warning C4244: 'argument' : conversion from 'unsigned int' to 'uint8_t', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(3188): warning C4244: 'argument' : conversion from 'unsigned int' to 'uint8_t', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(4233): warning C4244: 'argument' : conversion from 'const int32_t' to 'uint16_t', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(4233): warning C4244: 'argument' : conversion from 'const int32_t' to 'uint16_t', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(4233): warning C4244: 'argument' : conversion from 'const int32_t' to 'uint16_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(3193): warning C4244: 'argument' : conversion from 'unsigned int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(3193): warning C4244: 'argument' : conversion from 'unsigned int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(4238): warning C4244: 'argument' : conversion from 'const int32_t' to 'uint16_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(4238): warning C4244: 'argument' : conversion from 'const int32_t' to 'uint16_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(4238): warning C4244: 'argument' : conversion from 'const int32_t' to 'uint16_t', possible loss of data
c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdata\generic\detail\ds_like.h(98): warning C4244: '=' : conversion from 'uint32_t' to 'uint16_t', possible loss of data
c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdata\generic\detail\ds_like.h(65) : while compiling class template member function 'isc::dns::rdata::generic::detail::DSLikeImpl<Type,typeCode>::DSLikeImpl(const std::string &)'
with
@@ -246,7 +246,7 @@ c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdata\generic\detail\txt_like.h
Type=isc::dns::rdata::generic::SPF,
typeCode=99
]
- c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(3536) : see reference to class template instantiation 'isc::dns::rdata::generic::TXTLikeImpl<Type,typeCode>' being compiled
+ c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(3541) : see reference to class template instantiation 'isc::dns::rdata::generic::TXTLikeImpl<Type,typeCode>' being compiled
with
[
Type=isc::dns::rdata::generic::SPF,
@@ -266,7 +266,7 @@ c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdata\generic\detail\txt_like.h
Type=isc::dns::rdata::generic::TXT,
typeCode=16
]
- c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(3662) : see reference to class template instantiation 'isc::dns::rdata::generic::TXTLikeImpl<Type,typeCode>' being compiled
+ c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(3667) : see reference to class template instantiation 'isc::dns::rdata::generic::TXTLikeImpl<Type,typeCode>' being compiled
with
[
Type=isc::dns::rdata::generic::TXT,
@@ -360,7 +360,7 @@ c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\message.cc(323): warning C4244:
c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\message.cc(794): warning C4244: 'argument' : conversion from 'uint16_t' to 'const uint8_t', possible loss of data
c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\message.cc(807): warning C4389: '!=' : signed/unsigned mismatch
Generating Code...
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(2823): warning C4702: unreachable code
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dns\rdataclass.cc(2828): warning C4702: unreachable code
Compiling...
masterload.cc
exceptions.cc
@@ -739,46 +739,50 @@ c:\program files (x86)\microsoft visual studio 10.0\vc\include\utility(163): war
libserver_common.vcxproj -> C:\cygwin\home\dupont\bind10.trac826\win32build\VS2010\libserver_common\Debug\libserver_common.lib
------ Build started: Project: libdhcp, Configuration: Debug Win32 ------
pkt6.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.cc(88): warning C4244: 'return' : conversion from 'unsigned int' to 'unsigned short', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.cc(137): warning C4244: '=' : conversion from 'int' to 'char', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.cc(147): warning C4244: 'initializing' : conversion from 'unsigned int' to 'unsigned short', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.cc(292): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.cc(72): warning C4244: 'return' : conversion from 'unsigned int' to 'unsigned short', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.cc(105): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.cc(115): warning C4244: 'initializing' : conversion from 'unsigned int' to 'unsigned short', possible loss of data
+ pkt4.cc
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
option6_iaaddr.cc
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
option6_ia.cc
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
option6_addrlst.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option6_addrlst.cc(135): warning C4244: 'return' : conversion from 'unsigned int' to 'unsigned short', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option6_addrlst.cc(137): warning C4244: 'return' : conversion from 'const size_t' to 'unsigned short', possible loss of data
option.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option.cc(73): warning C4244: '=' : conversion from 'unsigned short' to 'char', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option.cc(74): warning C4244: '=' : conversion from 'unsigned int' to 'char', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option.cc(95): warning C4244: 'argument' : conversion from 'int' to 'u_short', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option.cc(161): warning C4244: 'return' : conversion from 'int' to 'unsigned short', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option.cc(76): warning C4244: '=' : conversion from 'unsigned short' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option.cc(77): warning C4244: '=' : conversion from 'unsigned int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option.cc(171): warning C4244: 'return' : conversion from 'int' to 'unsigned short', possible loss of data
libdhcp.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\libdhcp.cc(69): warning C4244: 'argument' : conversion from 'unsigned int' to 'unsigned short', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\libdhcp.cc(75): warning C4244: 'argument' : conversion from 'unsigned int' to 'unsigned short', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\libdhcp.cc(83): warning C4244: 'argument' : conversion from 'unsigned int' to 'unsigned short', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\libdhcp.cc(113): warning C4245: 'return' : conversion from 'int' to 'unsigned int', signed/unsigned mismatch
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
Generating Code...
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\libdhcp.cc(134): warning C4702: unreachable code
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option.cc(119): warning C4702: unreachable code
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option.cc(128): warning C4702: unreachable code
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.cc(109): warning C4702: unreachable code
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.cc(196): warning C4702: unreachable code
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\libdhcp.cc(127): warning C4702: unreachable code
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option.cc(122): warning C4702: unreachable code
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\option.cc(131): warning C4702: unreachable code
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.cc(86): warning C4702: unreachable code
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.cc(148): warning C4702: unreachable code
libdhcp.vcxproj -> C:\cygwin\home\dupont\bind10.trac826\win32build\VS2010\libdhcp\Debug\libdhcp.lib
------ Build started: Project: b10-dhcp6, Configuration: Debug Win32 ------
1 file(s) copied.
getopt.cc
- pkt6.cc
main.cc
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\main.cc(105): warning C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h(433) : see declaration of 'getenv'
c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\main.cc(107): warning C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdlib.h(433) : see declaration of 'getenv'
iface_mgr.cc
-c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\iface_mgr.cc(271): warning C4244: 'argument' : conversion from 'int' to 'u_short', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\iface_mgr.cc(454): warning C4244: 'argument' : conversion from 'int' to 'u_short', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\iface_mgr.cc(267): warning C4244: 'argument' : conversion from 'int' to 'u_short', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\iface_mgr.cc(430): warning C4244: 'argument' : conversion from 'int' to 'u_short', possible loss of data
dhcp6_srv.cc
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\dhcp6_srv.cc(130): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
Generating Code...
-c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\dhcp6_srv.cc(60): warning C4702: unreachable code
b10-dhcp6.vcxproj -> C:\cygwin\home\dupont\bind10.trac826\win32build\VS2010\b10-dhcp6\Debug\b10-dhcp6.exe
------ Build started: Project: b10-resolver, Configuration: Debug Win32 ------
1 file(s) copied.
@@ -896,69 +900,38 @@ c:\cygwin\home\dupont\bind10.trac826\src\lib\resolve\tests\recursive_query_unitt
------ Build started: Project: libdhcp_tests, Configuration: Debug Win32 ------
run_unittests.cc
pkt6_unittest.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(67): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(68): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(68): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(71): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(71): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(71): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(72): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(72): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(72): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(72): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(73): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(75): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(78): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(78): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(78): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(79): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(79): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(79): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(79): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(80): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(82): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(84): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt6_unittest.cc(85): warning C4309: '=' : truncation of constant value
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+ pkt4_unittest.cc
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt4_unittest.cc(54): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt4_unittest.cc(279): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt4_unittest.cc(280): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt4_unittest.cc(287): warning C4244: 'argument' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt4_unittest.cc(287): warning C4244: 'argument' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt4_unittest.cc(366): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt4_unittest.cc(367): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt4_unittest.cc(403): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\pkt4_unittest.cc(404): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
option_unittest.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(70): warning C4244: '=' : conversion from 'int' to 'char', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(102): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(103): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(104): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(105): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(146): warning C4244: '=' : conversion from 'int' to 'char', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(190): warning C4244: '=' : conversion from 'int' to 'char', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(224): warning C4244: '=' : conversion from 'int' to 'char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(74): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(154): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(200): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option_unittest.cc(236): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
option6_ia_unittest.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_ia_unittest.cc(49): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_ia_unittest.cc(50): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_ia_unittest.cc(51): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_ia_unittest.cc(52): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_ia_unittest.cc(54): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_ia_unittest.cc(59): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_ia_unittest.cc(139): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_ia_unittest.cc(140): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_ia_unittest.cc(141): warning C4309: '=' : truncation of constant value
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_ia_unittest.cc(231): warning C4800: 'isc::dhcp::Option6IA *' : forcing value to bool 'true' or 'false' (performance warning)
option6_iaaddr_unittest.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(49): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(52): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(53): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(54): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(55): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(60): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(62): warning C4309: '=' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(63): warning C4309: '=' : truncation of constant value
option6_addrlst_unittest.cc
libdhcp_unittest.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\libdhcp_unittest.cc(52): warning C4244: '=' : conversion from 'int' to 'char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\tests\libdhcp_unittest.cc(54): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
Generating Code...
libdhcp_tests.vcxproj -> C:\cygwin\home\dupont\bind10.trac826\win32build\VS2010\libdhcp_tests\Debug\run_unittests.exe
------ Build started: Project: libcache_tests, Configuration: Debug Win32 ------
unittest_util.cc
run_unittests.cc
rrset_entry_unittest.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\cache\tests\rrset_entry_unittest.cc(114): warning C4244: 'initializing' : conversion from 'time_t' to 'uint32_t', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\cache\tests\rrset_entry_unittest.cc(113): warning C4244: 'initializing' : conversion from 'time_t' to 'uint32_t', possible loss of data
c:\cygwin\home\dupont\gtest\include\gtest\gtest.h(1449): warning C4018: '<' : signed/unsigned mismatch
- c:\cygwin\home\dupont\bind10.trac826\src\lib\cache\tests\rrset_entry_unittest.cc(103) : see reference to function template instantiation 'testing::AssertionResult testing::internal::CmpHelperLT<uint32_t,int>(const char *,const char *,const T1 &,const T2 &)' being compiled
+ c:\cygwin\home\dupont\bind10.trac826\src\lib\cache\tests\rrset_entry_unittest.cc(102) : see reference to function template instantiation 'testing::AssertionResult testing::internal::CmpHelperLT<uint32_t,int>(const char *,const char *,const T1 &,const T2 &)' being compiled
with
[
T1=uint32_t,
@@ -1084,11 +1057,13 @@ c:\cygwin\home\dupont\gtest\include\gtest\gtest.h(1445): warning C4389: '!=' : s
Generating Code...
libnsas_tests.vcxproj -> C:\cygwin\home\dupont\bind10.trac826\win32build\VS2010\libnsas_tests\Debug\run_unittests.exe
------ Build started: Project: b10-dhcp6_tests, Configuration: Debug Win32 ------
- pkt6_unittest.cc
iface_mgr_unittest.cc
-c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\tests\iface_mgr_unittest.cc(270): warning C4244: '=' : conversion from 'int' to 'char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\tests\iface_mgr_unittest.cc(108): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
+ c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdio.h(371) : see declaration of 'sprintf'
+c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\tests\iface_mgr_unittest.cc(410): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
c:\cygwin\home\dupont\gtest\include\gtest\gtest.h(1445): warning C4389: '!=' : signed/unsigned mismatch
- c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\tests\iface_mgr_unittest.cc(163) : see reference to function template instantiation 'testing::AssertionResult testing::internal::CmpHelperNE<int,SOCKET>(const char *,const char *,const T1 &,const T2 &)' being compiled
+ c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\tests\iface_mgr_unittest.cc(302) : see reference to function template instantiation 'testing::AssertionResult testing::internal::CmpHelperNE<int,SOCKET>(const char *,const char *,const T1 &,const T2 &)' being compiled
with
[
T1=int,
@@ -1096,13 +1071,16 @@ c:\cygwin\home\dupont\gtest\include\gtest\gtest.h(1445): warning C4389: '!=' : s
]
dhcp6_unittests.cc
dhcp6_srv_unittest.cc
- pkt6.cc
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\tests\dhcp6_srv_unittest.cc(83): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
iface_mgr.cc
-c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\iface_mgr.cc(271): warning C4244: 'argument' : conversion from 'int' to 'u_short', possible loss of data
-c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\iface_mgr.cc(454): warning C4244: 'argument' : conversion from 'int' to 'u_short', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\iface_mgr.cc(267): warning C4244: 'argument' : conversion from 'int' to 'u_short', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\iface_mgr.cc(430): warning C4244: 'argument' : conversion from 'int' to 'u_short', possible loss of data
dhcp6_srv.cc
+c:\cygwin\home\dupont\bind10.trac826\src\lib\dhcp\pkt6.h(110): warning C4244: 'return' : conversion from 'int' to 'unsigned char', possible loss of data
+c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\dhcp6_srv.cc(130): warning C4244: '=' : conversion from 'int' to 'uint8_t', possible loss of data
Generating Code...
-c:\cygwin\home\dupont\bind10.trac826\src\bin\dhcp6\dhcp6_srv.cc(60): warning C4702: unreachable code
b10-dhcp6_tests.vcxproj -> C:\cygwin\home\dupont\bind10.trac826\win32build\VS2010\b10-dhcp6_tests\Debug\dhcp6_unittests.exe
------ Build started: Project: libasiodns_tests, Configuration: Debug Win32 ------
unittest_util.cc
@@ -1234,12 +1212,6 @@ c:\cygwin\home\dupont\bind10.trac826\src\lib\asiolink\tcp_endpoint.h(100): warni
io_socket_unittest.cc
io_endpoint_unittest.cc
io_address_unittest.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\asiolink\tests\io_address_unittest.cc(68): warning C4309: 'initializing' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\asiolink\tests\io_address_unittest.cc(69): warning C4309: 'initializing' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\asiolink\tests\io_address_unittest.cc(69): warning C4309: 'initializing' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\asiolink\tests\io_address_unittest.cc(69): warning C4309: 'initializing' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\asiolink\tests\io_address_unittest.cc(69): warning C4309: 'initializing' : truncation of constant value
-c:\cygwin\home\dupont\bind10.trac826\src\lib\asiolink\tests\io_address_unittest.cc(71): warning C4309: 'initializing' : truncation of constant value
interval_timer_unittest.cc
c:\program files (x86)\boost\boost_1_44\boost\token_functions.hpp(220): warning C4127: conditional expression is constant
c:\program files (x86)\boost\boost_1_44\boost\token_functions.hpp(218) : while compiling class template member function 'bool boost::tokenizer_detail::traits_extension<traits>::isspace(char)'
@@ -1395,7 +1367,7 @@ c:\program files (x86)\boost\boost_1_44\boost\algorithm\string\detail\find_forma
[
T=boost::posix_time::time_duration
]
- c:\cygwin\home\dupont\bind10.trac826\src\lib\asiolink\tests\interval_timer_unittest.cc(185) : see reference to function template instantiation 'testing::Message &testing::Message::operator <<<boost::posix_time::time_duration>(const T &)' being compiled
+ c:\cygwin\home\dupont\bind10.trac826\src\lib\asiolink\tests\interval_timer_unittest.cc(184) : see reference to function template instantiation 'testing::Message &testing::Message::operator <<<boost::posix_time::time_duration>(const T &)' being compiled
with
[
T=boost::posix_time::time_duration
@@ -1464,11 +1436,11 @@ c:\cygwin\home\dupont\bind10.trac826\src\lib\python\isc\datasrc\finder_python.cc
c:\program files (x86)\microsoft visual studio 10.0\vc\include\math.h(162): warning C4211: nonstandard extension used : redefined extern to static
c:\cygwin\home\dupont\bind10.trac826\src\lib\util\python\pycppwrapper_util.h(194): warning C4127: conditional expression is constant
c:\cygwin\home\dupont\bind10.trac826\src\lib\util\python\pycppwrapper_util.h(203): warning C4127: conditional expression is constant
-c:\cygwin\home\dupont\bind10.trac826\src\lib\python\isc\datasrc\datasrc.cc(219): warning C4127: conditional expression is constant
-c:\cygwin\home\dupont\bind10.trac826\src\lib\python\isc\datasrc\datasrc.cc(224): warning C4127: conditional expression is constant
-c:\cygwin\home\dupont\bind10.trac826\src\lib\python\isc\datasrc\datasrc.cc(229): warning C4127: conditional expression is constant
-c:\cygwin\home\dupont\bind10.trac826\src\lib\python\isc\datasrc\datasrc.cc(234): warning C4127: conditional expression is constant
-c:\cygwin\home\dupont\bind10.trac826\src\lib\python\isc\datasrc\datasrc.cc(247): warning C4127: conditional expression is constant
+c:\cygwin\home\dupont\bind10.trac826\src\lib\python\isc\datasrc\datasrc.cc(223): warning C4127: conditional expression is constant
+c:\cygwin\home\dupont\bind10.trac826\src\lib\python\isc\datasrc\datasrc.cc(228): warning C4127: conditional expression is constant
+c:\cygwin\home\dupont\bind10.trac826\src\lib\python\isc\datasrc\datasrc.cc(233): warning C4127: conditional expression is constant
+c:\cygwin\home\dupont\bind10.trac826\src\lib\python\isc\datasrc\datasrc.cc(238): warning C4127: conditional expression is constant
+c:\cygwin\home\dupont\bind10.trac826\src\lib\python\isc\datasrc\datasrc.cc(251): warning C4127: conditional expression is constant
client_python.cc
c:\program files (x86)\microsoft visual studio 10.0\vc\include\math.h(162): warning C4211: nonstandard extension used : redefined extern to static
c:\cygwin\home\dupont\bind10.trac826\src\lib\util\python\pycppwrapper_util.h(194): warning C4127: conditional expression is constant
@@ -1749,7 +1721,6 @@ c:\cygwin\home\dupont\bind10.trac826\src\lib\datasrc\rbtree.h(134): warning C424
datasrc_unittest.cc
c:\cygwin\home\dupont\bind10.trac826\src\lib\datasrc\tests\datasrc_unittest.cc(63): warning C4244: 'initializing' : conversion from 'isc::dns::Opcode::CodeValue' to 'const uint16_t', possible loss of data
database_unittest.cc
-c:\cygwin\home\dupont\bind10.trac826\src\lib\datasrc\tests\database_unittest.cc(333): warning C4018: '<' : signed/unsigned mismatch
client_unittest.cc
cache_unittest.cc
Generating Code...
diff --git a/win32build/VS2010/Release.log b/win32build/VS2010/Release.log
index b50fb0f..fdca50b 100755
--- a/win32build/VS2010/Release.log
+++ b/win32build/VS2010/Release.log
@@ -119,7 +119,7 @@ C:\cygwin\home\dupont\bind10.trac826\src\lib\dns/rdata/generic/detail/txt_like.h
Type=isc::dns::rdata::generic::SPF,
typeCode=99
]
- ..\..\..\src\lib\dns\rdataclass.cc(3536) : see reference to class template instantiation 'isc::dns::rdata::generic::TXTLikeImpl<Type,typeCode>' being compiled
+ ..\..\..\src\lib\dns\rdataclass.cc(3541) : see reference to class template instantiation 'isc::dns::rdata::generic::TXTLikeImpl<Type,typeCode>' being compiled
with
[
Type=isc::dns::rdata::generic::SPF,
@@ -132,7 +132,7 @@ C:\cygwin\home\dupont\bind10.trac826\src\lib\dns/rdata/generic/detail/txt_like.h
Type=isc::dns::rdata::generic::TXT,
typeCode=16
]
- ..\..\..\src\lib\dns\rdataclass.cc(3662) : see reference to class template instantiation 'isc::dns::rdata::generic::TXTLikeImpl<Type,typeCode>' being compiled
+ ..\..\..\src\lib\dns\rdataclass.cc(3667) : see reference to class template instantiation 'isc::dns::rdata::generic::TXTLikeImpl<Type,typeCode>' being compiled
with
[
Type=isc::dns::rdata::generic::TXT,
@@ -347,10 +347,11 @@ c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\utility(163): war
------ Build started: Project: libdhcp, Configuration: Release Win32 ------
libdhcp.cc
option.cc
-..\..\..\src\lib\dhcp\option.cc(73): warning C4244: '=' : conversion from 'unsigned short' to 'char', possible loss of data
+..\..\..\src\lib\dhcp\option.cc(76): warning C4244: '=' : conversion from 'unsigned short' to 'uint8_t', possible loss of data
option6_addrlst.cc
option6_ia.cc
option6_iaaddr.cc
+ pkt4.cc
pkt6.cc
libdhcp.vcxproj -> C:\cygwin\home\dupont\bind10.trac826\win32build\VS2010\libdhcp\Release\libdhcp.lib
------ Build started: Project: b10-dhcp6, Configuration: Release Win32 ------
@@ -362,7 +363,6 @@ c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\utility(163): war
c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdlib.h(433) : see declaration of 'getenv'
..\..\..\src\bin\dhcp6\main.cc(107): warning C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdlib.h(433) : see declaration of 'getenv'
- pkt6.cc
getopt.cc
Generating code
Finished generating code
@@ -438,53 +438,11 @@ C:\cygwin\home\dupont\gtest\include\gtest/gtest.h(1449): warning C4018: '<' : si
libdhcp_unittest.cc
option6_addrlst_unittest.cc
option6_iaaddr_unittest.cc
-..\..\..\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(49): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(52): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(53): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(54): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(55): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(60): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(62): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_iaaddr_unittest.cc(63): warning C4309: '=' : truncation of constant value
option6_ia_unittest.cc
-..\..\..\src\lib\dhcp\tests\option6_ia_unittest.cc(49): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_ia_unittest.cc(50): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_ia_unittest.cc(51): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_ia_unittest.cc(52): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_ia_unittest.cc(54): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_ia_unittest.cc(59): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_ia_unittest.cc(139): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_ia_unittest.cc(140): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option6_ia_unittest.cc(141): warning C4309: '=' : truncation of constant value
+..\..\..\src\lib\dhcp\tests\option6_ia_unittest.cc(231): warning C4800: 'isc::dhcp::Option6IA *' : forcing value to bool 'true' or 'false' (performance warning)
option_unittest.cc
-..\..\..\src\lib\dhcp\tests\option_unittest.cc(102): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option_unittest.cc(103): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option_unittest.cc(104): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\option_unittest.cc(105): warning C4309: '=' : truncation of constant value
+ pkt4_unittest.cc
pkt6_unittest.cc
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(67): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(68): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(68): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(71): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(71): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(71): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(72): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(72): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(72): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(72): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(73): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(75): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(78): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(78): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(78): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(79): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(79): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(79): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(79): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(80): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(82): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(84): warning C4309: '=' : truncation of constant value
-..\..\..\src\lib\dhcp\tests\pkt6_unittest.cc(85): warning C4309: '=' : truncation of constant value
run_unittests.cc
Generating code
Finished generating code
@@ -497,9 +455,9 @@ C:\cygwin\home\dupont\gtest\include\gtest/gtest.h(1449): warning C4018: '<' : si
resolver_cache_unittest.cc
rrset_cache_unittest.cc
rrset_entry_unittest.cc
-..\..\..\src\lib\cache\tests\rrset_entry_unittest.cc(114): warning C4244: 'initializing' : conversion from 'time_t' to 'uint32_t', possible loss of data
+..\..\..\src\lib\cache\tests\rrset_entry_unittest.cc(113): warning C4244: 'initializing' : conversion from 'time_t' to 'uint32_t', possible loss of data
C:\cygwin\home\dupont\gtest\include\gtest/gtest.h(1449): warning C4018: '<' : signed/unsigned mismatch
- ..\..\..\src\lib\cache\tests\rrset_entry_unittest.cc(103) : see reference to function template instantiation 'testing::AssertionResult testing::internal::CmpHelperLT<uint32_t,int>(const char *,const char *,const T1 &,const T2 &)' being compiled
+ ..\..\..\src\lib\cache\tests\rrset_entry_unittest.cc(102) : see reference to function template instantiation 'testing::AssertionResult testing::internal::CmpHelperLT<uint32_t,int>(const char *,const char *,const T1 &,const T2 &)' being compiled
with
[
T1=uint32_t,
@@ -607,11 +565,11 @@ C:\cygwin\home\dupont\gtest\include\gtest/gtest.h(1453): warning C4018: '>' : si
------ Build started: Project: b10-dhcp6_tests, Configuration: Release Win32 ------
dhcp6_srv.cc
iface_mgr.cc
- pkt6.cc
dhcp6_srv_unittest.cc
dhcp6_unittests.cc
iface_mgr_unittest.cc
- pkt6_unittest.cc
+..\..\..\src\bin\dhcp6\tests\iface_mgr_unittest.cc(108): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
+ c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdio.h(371) : see declaration of 'sprintf'
Generating code
Finished generating code
b10-dhcp6_tests.vcxproj -> C:\cygwin\home\dupont\bind10.trac826\win32build\VS2010\b10-dhcp6_tests\Release\dhcp6_unittests.exe
@@ -646,12 +604,6 @@ C:\cygwin\home\dupont\gtest\include\gtest/gtest.h(1453): warning C4018: '>' : si
------ Build started: Project: libasiolink_tests, Configuration: Release Win32 ------
interval_timer_unittest.cc
io_address_unittest.cc
-..\..\..\src\lib\asiolink\tests\io_address_unittest.cc(68): warning C4309: 'initializing' : truncation of constant value
-..\..\..\src\lib\asiolink\tests\io_address_unittest.cc(69): warning C4309: 'initializing' : truncation of constant value
-..\..\..\src\lib\asiolink\tests\io_address_unittest.cc(69): warning C4309: 'initializing' : truncation of constant value
-..\..\..\src\lib\asiolink\tests\io_address_unittest.cc(69): warning C4309: 'initializing' : truncation of constant value
-..\..\..\src\lib\asiolink\tests\io_address_unittest.cc(69): warning C4309: 'initializing' : truncation of constant value
-..\..\..\src\lib\asiolink\tests\io_address_unittest.cc(71): warning C4309: 'initializing' : truncation of constant value
io_endpoint_unittest.cc
io_socket_unittest.cc
run_unittests.cc
@@ -926,7 +878,6 @@ C:\cygwin\home\dupont\gtest\include\gtest/gtest.h(1449): warning C4018: '<' : si
cache_unittest.cc
client_unittest.cc
database_unittest.cc
-..\..\..\src\lib\datasrc\tests\database_unittest.cc(333): warning C4018: '<' : signed/unsigned mismatch
datasrc_unittest.cc
factory_unittest.cc
logger_unittest.cc
More information about the bind10-changes
mailing list