]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
3144. [bug] dns_dbiterator_seek() could trigger an assert when
authorEvan Hunt <each@isc.org>
Tue, 23 Aug 2011 00:59:23 +0000 (00:59 +0000)
committerEvan Hunt <each@isc.org>
Tue, 23 Aug 2011 00:59:23 +0000 (00:59 +0000)
used with a nonexistent database node. [RT #25358]

CHANGES
bin/tests/system/cacheclean/tests.sh
lib/dns/rbtdb.c
lib/dns/tests/Makefile.in
lib/dns/tests/dbiterator_test.c [new file with mode: 0644]
lib/dns/tests/testdata/dbiterator/zone1.data [new file with mode: 0644]
lib/dns/tests/testdata/dbiterator/zone2.data [new file with mode: 0644]
lib/isc/tests/Makefile.in

diff --git a/CHANGES b/CHANGES
index 9ad8a7e62d5c103d30e37c67dd20790ad496cb41..410d88c0a0d489c7a481a8853992d1ba0cd00a06 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+3144.  [bug]           dns_dbiterator_seek() could trigger an assert when
+                       used with a nonexistent database node. [RT #25358]
+
 3143.  [bug]           Silence clang compiler warnings. [RT #25174]
 
 3142.  [bug]           NAPTR is class agnostic. [RT #25429]
index d0d3f2bf14dc59e671c4cbf078d17dbbc5598f21..2e18ffe16a0e7a3e53e097414128836ace8f0418 100644 (file)
@@ -15,7 +15,7 @@
 # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 # PERFORMANCE OF THIS SOFTWARE.
 
-# $Id: tests.sh,v 1.7 2011/08/02 23:47:51 tbox Exp $
+# $Id: tests.sh,v 1.8 2011/08/23 00:59:23 each Exp $
 
 SYSTEMTESTTOP=..
 . $SYSTEMTESTTOP/conf.sh
@@ -129,6 +129,12 @@ in_cache txt third1.second1.top1.flushtest.example && ret=1
 if [ $ret != 0 ]; then echo "I:failed"; fi
 status=`expr $status + $ret`
 
+echo "I:check flushing a nonexistent name"
+ret=0
+$RNDC $RNDCOPTS flushname fake.flushtest.example || ret=1
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
 echo "I:check flushing of namespaces"
 ret=0
 clear_cache
@@ -155,6 +161,12 @@ in_cache txt second3.top2.flushtest.example && ret=1
 if [ $ret != 0 ]; then echo "I:failed"; fi
 status=`expr $status + $ret`
 
+echo "I:check flushing a nonexistent namespace"
+ret=0
+$RNDC $RNDCOPTS flushtree fake.flushtest.example || ret=1
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
 echo "I:check the number of cached records remaining"
 ret=0
 dump_cache
index 5d075ec6025d876c95bd0681e1258991a9679ae9..88ff8d63d2f87d49f874583e85b1b24ecce71183 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: rbtdb.c,v 1.315 2011/06/08 22:13:50 each Exp $ */
+/* $Id: rbtdb.c,v 1.316 2011/08/23 00:59:23 each Exp $ */
 
 /*! \file */
 
@@ -8480,7 +8480,7 @@ dbiterator_last(dns_dbiterator_t *iterator) {
 
 static isc_result_t
 dbiterator_seek(dns_dbiterator_t *iterator, dns_name_t *name) {
-       isc_result_t result;
+       isc_result_t result, tresult;
        rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator;
        dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)iterator->db;
        dns_name_t *iname, *origin;
@@ -8523,13 +8523,14 @@ dbiterator_seek(dns_dbiterator_t *iterator, dns_name_t *name) {
                                          DNS_RBTFIND_EMPTYDATA, NULL, NULL);
                if (result == DNS_R_PARTIALMATCH) {
                        dns_rbtnode_t *node = NULL;
-                       result = dns_rbt_findnode(rbtdb->nsec3, name, NULL,
+                       tresult = dns_rbt_findnode(rbtdb->nsec3, name, NULL,
                                                  &node, &rbtdbiter->nsec3chain,
                                                  DNS_RBTFIND_EMPTYDATA,
                                                  NULL, NULL);
-                       if (result == ISC_R_SUCCESS) {
+                       if (tresult == ISC_R_SUCCESS) {
                                rbtdbiter->node = node;
                                rbtdbiter->current = &rbtdbiter->nsec3chain;
+                               result = tresult;
                        }
                }
        }
index c193dd4d4bad59156503f3faa1ac8d749eb846c0..5a8dd7040e95f488340f3074734199bf3abe8589 100644 (file)
@@ -12,7 +12,7 @@
 # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 # PERFORMANCE OF THIS SOFTWARE.
 
-# $Id: Makefile.in,v 1.5 2011/07/06 01:36:32 each Exp $
+# $Id: Makefile.in,v 1.6 2011/08/23 00:59:23 each Exp $
 
 srcdir =       @srcdir@
 VPATH =                @srcdir@
@@ -38,11 +38,11 @@ LIBS =              @LIBS@ @ATFLIBS@
 
 OBJS =         dnstest.@O@
 SRCS =         dnstest.c master_test.c time_test.c update_test.c \
-               zonemgr_test.c
+               zonemgr_test.c dbiterator_test.c
 
 SUBDIRS =
 TARGETS =      master_test@EXEEXT@ time_test@EXEEXT@ update_test@EXEEXT@ \
-               zonemgr_test@EXEEXT@
+               zonemgr_test@EXEEXT@ dbiterator_test@EXEEXT@
 
 @BIND9_MAKE_RULES@
 
@@ -66,5 +66,13 @@ zonemgr_test@EXEEXT@: zonemgr_test.@O@ dnstest.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS}
                        zonemgr_test.@O@ dnstest.@O@ ${DNSLIBS} \
                                ${ISCLIBS} ${LIBS}
 
+dbiterator_test@EXEEXT@: dbiterator_test.@O@ dnstest.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS}
+       ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ \
+                       dbiterator_test.@O@ dnstest.@O@ ${DNSLIBS} \
+                               ${ISCLIBS} ${LIBS}
+
+unit::
+       sh ${top_srcdir}/unit/unittest.sh
+
 clean distclean::
        rm -f ${TARGETS}
diff --git a/lib/dns/tests/dbiterator_test.c b/lib/dns/tests/dbiterator_test.c
new file mode 100644 (file)
index 0000000..fc85120
--- /dev/null
@@ -0,0 +1,461 @@
+/*
+ * 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: dbiterator_test.c,v 1.2 2011/08/23 00:59:23 each Exp $ */
+
+/*! \file */
+
+#include <config.h>
+
+#include <atf-c.h>
+
+#include <unistd.h>
+
+#include <dns/db.h>
+#include <dns/dbiterator.h>
+#include <dns/name.h>
+
+#include "dnstest.h"
+
+/*
+ * Helper functions
+ */
+
+#define        BUFLEN          255
+#define        BIGBUFLEN       (64 * 1024)
+#define TEST_ORIGIN    "test"
+
+static isc_result_t
+setup_db(const char *testfile, dns_dbtype_t dbtype, dns_db_t **db) {
+       isc_result_t            result;
+       int                     len;
+       char                    origin[sizeof(TEST_ORIGIN)];
+       dns_name_t              dns_origin;
+       isc_buffer_t            source;
+       isc_buffer_t            target;
+       unsigned char           name_buf[BUFLEN];
+
+       strcpy(origin, TEST_ORIGIN);
+       len = strlen(origin);
+       isc_buffer_init(&source, origin, len);
+       isc_buffer_add(&source, len);
+       isc_buffer_setactive(&source, len);
+       isc_buffer_init(&target, name_buf, BUFLEN);
+       dns_name_init(&dns_origin, NULL);
+
+       result = dns_name_fromtext(&dns_origin, &source, dns_rootname,
+                                  0, &target);
+       if (result != ISC_R_SUCCESS)
+               return(result);
+
+       result = dns_db_create(mctx, "rbt", &dns_origin, dbtype, 
+                              dns_rdataclass_in, 0, NULL, db);
+       if (result != ISC_R_SUCCESS)
+               return (result);
+
+       /*
+        * atf-run changes us to a /tmp directory, so tests
+        * that access test data files must first chdir to the proper
+        * location.
+        */
+       if (chdir(TESTS) == -1)
+               return (ISC_R_FAILURE);
+
+       result = dns_db_load(*db, testfile);
+       return (result);
+}
+
+static isc_result_t
+make_name(const char *src, dns_name_t *name) {
+       isc_buffer_t b;
+       isc_buffer_init(&b, src, strlen(src));
+       isc_buffer_add(&b, strlen(src));
+       return (dns_name_fromtext(name, &b, dns_rootname, 0, NULL));
+}
+
+/*
+ * Individual unit tests
+ */
+
+/* create: make sure we can create a dbiterator */
+static void
+test_create(const atf_tc_t *tc) {
+       isc_result_t result;
+       dns_db_t *db = NULL;
+       dns_dbiterator_t *iter = NULL;
+
+       result = dns_test_begin(NULL, ISC_FALSE);
+       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+       result = setup_db(atf_tc_get_md_var(tc, "X-filename"),
+                         dns_dbtype_cache, &db);
+       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+       result = dns_db_createiterator(db, 0, &iter); 
+       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+       dns_dbiterator_destroy(&iter);
+       dns_db_detach(&db);
+       dns_test_end();
+}
+
+ATF_TC(create);
+ATF_TC_HEAD(create, tc) {
+       atf_tc_set_md_var(tc, "descr", "create a database iterator");
+       atf_tc_set_md_var(tc, "X-filename", "testdata/dbiterator/zone1.data");
+}
+ATF_TC_BODY(create, tc) {
+       test_create(tc);
+}
+
+ATF_TC(create_nsec3);
+ATF_TC_HEAD(create_nsec3, tc) {
+       atf_tc_set_md_var(tc, "descr", "create a database iterator (NSEC3)");
+       atf_tc_set_md_var(tc, "X-filename", "testdata/dbiterator/zone2.data");
+}
+ATF_TC_BODY(create_nsec3, tc) {
+       test_create(tc);
+}
+
+/* walk: walk a database */
+static void
+test_walk(const atf_tc_t *tc) {
+       isc_result_t result;
+       dns_db_t *db = NULL;
+       dns_dbiterator_t *iter = NULL;
+       dns_dbnode_t *node = NULL;
+       dns_name_t *name;
+       dns_fixedname_t f;
+       int i = 0;
+
+       UNUSED(tc);
+
+       dns_fixedname_init(&f);
+       name = dns_fixedname_name(&f);
+
+       result = dns_test_begin(NULL, ISC_FALSE);
+       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+       result = setup_db(atf_tc_get_md_var(tc, "X-filename"),
+                         dns_dbtype_cache, &db);
+       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+       result = dns_db_createiterator(db, 0, &iter); 
+       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+       for (result = dns_dbiterator_first(iter);
+            result == ISC_R_SUCCESS;
+            result = dns_dbiterator_next(iter)) {
+               result = dns_dbiterator_current(iter, &node, name);
+               dns_db_detachnode(db, &node);
+               i++;
+       }
+
+       ATF_CHECK_EQ(i, atoi(atf_tc_get_md_var(tc, "X-nodes")));
+
+       dns_dbiterator_destroy(&iter);
+       dns_db_detach(&db);
+       dns_test_end();
+}
+
+ATF_TC(walk);
+ATF_TC_HEAD(walk, tc) {
+       atf_tc_set_md_var(tc, "descr", "walk database");
+       atf_tc_set_md_var(tc, "X-filename", "testdata/dbiterator/zone1.data");
+       atf_tc_set_md_var(tc, "X-nodes", "12");
+}
+ATF_TC_BODY(walk, tc) {
+       test_walk(tc);
+}
+
+ATF_TC(walk_nsec3);
+ATF_TC_HEAD(walk_nsec3, tc) {
+       atf_tc_set_md_var(tc, "descr", "walk database");
+       atf_tc_set_md_var(tc, "X-filename", "testdata/dbiterator/zone2.data");
+       atf_tc_set_md_var(tc, "X-nodes", "33");
+}
+ATF_TC_BODY(walk_nsec3, tc) {
+       test_walk(tc);
+}
+
+/* reverse: walk database backwards */
+static void test_reverse(const atf_tc_t *tc) {
+       isc_result_t result;
+       dns_db_t *db = NULL;
+       dns_dbiterator_t *iter = NULL;
+       dns_dbnode_t *node = NULL;
+       dns_name_t *name;
+       dns_fixedname_t f;
+       int i = 0;
+
+       UNUSED(tc);
+
+       dns_fixedname_init(&f);
+       name = dns_fixedname_name(&f);
+
+       result = dns_test_begin(NULL, ISC_FALSE);
+       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+       result = setup_db(atf_tc_get_md_var(tc, "X-filename"),
+                         dns_dbtype_cache, &db);
+       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+       result = dns_db_createiterator(db, 0, &iter); 
+       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+       for (result = dns_dbiterator_last(iter);
+            result == ISC_R_SUCCESS;
+            result = dns_dbiterator_prev(iter)) {
+               result = dns_dbiterator_current(iter, &node, name);
+               dns_db_detachnode(db, &node);
+               i++;
+       }
+
+       ATF_CHECK_EQ(i, 12);
+
+       dns_dbiterator_destroy(&iter);
+       dns_db_detach(&db);
+       dns_test_end();
+}
+
+ATF_TC(reverse);
+ATF_TC_HEAD(reverse, tc) {
+       atf_tc_set_md_var(tc, "descr", "walk database backwards");
+       atf_tc_set_md_var(tc, "X-filename", "testdata/dbiterator/zone1.data");
+}
+ATF_TC_BODY(reverse, tc) {
+       test_reverse(tc);
+}
+
+ATF_TC(reverse_nsec3);
+ATF_TC_HEAD(reverse_nsec3, tc) {
+       atf_tc_set_md_var(tc, "descr", "walk database backwards");
+       atf_tc_set_md_var(tc, "X-filename", "testdata/dbiterator/zone2.data");
+}
+ATF_TC_BODY(reverse_nsec3, tc) {
+       test_reverse(tc);
+}
+
+/* seek: walk database starting at a particular node */
+static void test_seek(const atf_tc_t *tc) {
+       isc_result_t result;
+       dns_db_t *db = NULL;
+       dns_dbiterator_t *iter = NULL;
+       dns_dbnode_t *node = NULL;
+       dns_name_t *name, *seekname;
+       dns_fixedname_t f1, f2;
+       int i = 0;
+
+       UNUSED(tc);
+
+       dns_fixedname_init(&f1);
+       name = dns_fixedname_name(&f1);
+       dns_fixedname_init(&f2);
+       seekname = dns_fixedname_name(&f2);
+
+       result = dns_test_begin(NULL, ISC_FALSE);
+       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+       result = setup_db(atf_tc_get_md_var(tc, "X-filename"),
+                         dns_dbtype_cache, &db);
+       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+       result = dns_db_createiterator(db, 0, &iter); 
+       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+       result = make_name("c." TEST_ORIGIN, seekname);
+       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+       result = dns_dbiterator_seek(iter, seekname); 
+       ATF_CHECK_EQ(result, ISC_R_SUCCESS);
+
+       while (result == ISC_R_SUCCESS) {
+               result = dns_dbiterator_current(iter, &node, name);
+               dns_db_detachnode(db, &node);
+               result = dns_dbiterator_next(iter);
+               i++;
+       }
+
+       ATF_CHECK_EQ(i, atoi(atf_tc_get_md_var(tc, "X-nodes")));
+
+       dns_dbiterator_destroy(&iter);
+       dns_db_detach(&db);
+       dns_test_end();
+}
+
+ATF_TC(seek);
+ATF_TC_HEAD(seek, tc) {
+       atf_tc_set_md_var(tc, "descr", "walk database starting at "
+                                      "a particular node");
+       atf_tc_set_md_var(tc, "X-filename", "testdata/dbiterator/zone1.data");
+       atf_tc_set_md_var(tc, "X-nodes", "9");
+}
+ATF_TC_BODY(seek, tc) {
+       test_seek(tc);
+}
+
+ATF_TC(seek_nsec3);
+ATF_TC_HEAD(seek_nsec3, tc) {
+       atf_tc_set_md_var(tc, "descr", "walk database starting at "
+                                      "a particular node");
+       atf_tc_set_md_var(tc, "X-filename", "testdata/dbiterator/zone2.data");
+       atf_tc_set_md_var(tc, "X-nodes", "30");
+}
+ATF_TC_BODY(seek_nsec3, tc) {
+       test_seek(tc);
+}
+
+/*
+ * seek_emty: walk database starting at an empty nonterminal node
+ * (should fail)
+ */
+static void test_seek_empty(const atf_tc_t *tc) {
+       isc_result_t result;
+       dns_db_t *db = NULL;
+       dns_dbiterator_t *iter = NULL;
+       dns_name_t *seekname;
+       dns_fixedname_t f1;
+
+       UNUSED(tc);
+
+       dns_fixedname_init(&f1);
+       seekname = dns_fixedname_name(&f1);
+
+       result = dns_test_begin(NULL, ISC_FALSE);
+       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+       result = setup_db(atf_tc_get_md_var(tc, "X-filename"),
+                         dns_dbtype_cache, &db);
+       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+       result = dns_db_createiterator(db, 0, &iter); 
+       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+       result = make_name("d." TEST_ORIGIN, seekname);
+       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+       result = dns_dbiterator_seek(iter, seekname); 
+       ATF_CHECK_EQ(result, ISC_R_NOTFOUND);
+
+       dns_dbiterator_destroy(&iter);
+       dns_db_detach(&db);
+       dns_test_end();
+}
+
+ATF_TC(seek_empty);
+ATF_TC_HEAD(seek_empty, tc) {
+       atf_tc_set_md_var(tc, "descr", "walk database starting at an "
+                                      "empty nonterminal node");
+       atf_tc_set_md_var(tc, "X-filename", "testdata/dbiterator/zone1.data");
+}
+ATF_TC_BODY(seek_empty, tc) {
+       test_seek_empty(tc);
+}
+
+ATF_TC(seek_empty_nsec3);
+ATF_TC_HEAD(seek_empty_nsec3, tc) {
+       atf_tc_set_md_var(tc, "descr", "walk database starting at an "
+                                      "empty nonterminal node");
+       atf_tc_set_md_var(tc, "X-filename", "testdata/dbiterator/zone2.data");
+}
+ATF_TC_BODY(seek_empty_nsec3, tc) {
+       test_seek_empty(tc);
+}
+
+/*
+ * seek_emty: walk database starting at an empty nonterminal node
+ * (should fail)
+ */
+static void test_seek_nx(const atf_tc_t *tc) {
+       isc_result_t result;
+       dns_db_t *db = NULL;
+       dns_dbiterator_t *iter = NULL;
+       dns_name_t *seekname;
+       dns_fixedname_t f1;
+
+       UNUSED(tc);
+
+       dns_fixedname_init(&f1);
+       seekname = dns_fixedname_name(&f1);
+
+       result = dns_test_begin(NULL, ISC_FALSE);
+       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+       result = setup_db(atf_tc_get_md_var(tc, "X-filename"),
+                         dns_dbtype_cache, &db);
+       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+       result = dns_db_createiterator(db, 0, &iter); 
+       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+       result = make_name("nonexistent." TEST_ORIGIN, seekname);
+       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+       result = dns_dbiterator_seek(iter, seekname); 
+       ATF_CHECK_EQ(result, ISC_R_NOTFOUND);
+
+       dns_dbiterator_destroy(&iter);
+       dns_db_detach(&db);
+       dns_test_end();
+}
+
+ATF_TC(seek_nx);
+ATF_TC_HEAD(seek_nx, tc) {
+       atf_tc_set_md_var(tc, "descr", "attempt to walk database starting "
+                                      "at a nonexistent node");
+       atf_tc_set_md_var(tc, "X-filename", "testdata/dbiterator/zone1.data");
+}
+ATF_TC_BODY(seek_nx, tc) {
+       test_seek_nx(tc);
+}
+
+ATF_TC(seek_nx_nsec3);
+ATF_TC_HEAD(seek_nx_nsec3, tc) {
+       atf_tc_set_md_var(tc, "descr", "attempt to walk database starting "
+                                      "at a nonexistent node");
+       atf_tc_set_md_var(tc, "X-filename", "testdata/dbiterator/zone2.data");
+}
+ATF_TC_BODY(seek_nx_nsec3, tc) {
+       test_seek_nx(tc);
+}
+
+/*
+ * Main
+ */
+ATF_TP_ADD_TCS(tp) {
+       ATF_TP_ADD_TC(tp, create);
+       ATF_TP_ADD_TC(tp, create_nsec3);
+       ATF_TP_ADD_TC(tp, walk);
+       ATF_TP_ADD_TC(tp, walk_nsec3);
+       ATF_TP_ADD_TC(tp, reverse);
+       ATF_TP_ADD_TC(tp, reverse_nsec3);
+       ATF_TP_ADD_TC(tp, seek);
+       ATF_TP_ADD_TC(tp, seek_nsec3);
+       ATF_TP_ADD_TC(tp, seek_empty);
+       ATF_TP_ADD_TC(tp, seek_empty_nsec3);
+       ATF_TP_ADD_TC(tp, seek_nx);
+       ATF_TP_ADD_TC(tp, seek_nx_nsec3);
+       return (atf_no_error());
+}
+
+/*
+ * XXX:
+ * dns_dbiterator API calls that are not yet part of this unit test:
+ *
+ * dns_dbiterator_pause
+ * dns_dbiterator_origin
+ * dns_dbiterator_setcleanmode
+ */
diff --git a/lib/dns/tests/testdata/dbiterator/zone1.data b/lib/dns/tests/testdata/dbiterator/zone1.data
new file mode 100644 (file)
index 0000000..16f022c
--- /dev/null
@@ -0,0 +1,21 @@
+$TTL 600
+@              in      soa     localhost. postmaster.localhost. (
+                               2011080901      ;serial
+                               3600            ;refresh
+                               1800            ;retry
+                               604800          ;expiration
+                               600 )           ;minimum
+               in      ns      ns
+               in      ns      ns2
+ns             in      a       10.0.0.1
+ns2            in      a       10.0.0.2
+
+a              in      txt     "test"
+b              in      txt     "test"
+c              in      txt     "test"
+d.e.f          in      txt     "test"
+e              in      txt     "test"
+f.g.h          in      txt     "test"
+f.g.i          in      txt     "test"
+f.g.j          in      txt     "test"
+k              in      txt     "test"
diff --git a/lib/dns/tests/testdata/dbiterator/zone2.data b/lib/dns/tests/testdata/dbiterator/zone2.data
new file mode 100644 (file)
index 0000000..7265c27
--- /dev/null
@@ -0,0 +1,319 @@
+; File written on Mon Aug 15 16:51:56 2011
+; dnssec_signzone version 9.7.3rc1
+test.                  600     IN SOA  localhost. postmaster.localhost. (
+                                       2011080901 ; serial
+                                       3600       ; refresh (1 hour)
+                                       1800       ; retry (30 minutes)
+                                       604800     ; expire (1 week)
+                                       600        ; minimum (10 minutes)
+                                       )
+                       600     RRSIG   SOA 7 1 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       IoQPcpx+Y2btVBBdM2H/9ppRMjphB1thwrdh
+                                       midhKH+MXDAauUIENucugi3zLsc1o2ke8LnQ
+                                       v3lCLd/bb5MD1otuS8vOw1GWEFhXOUBZU6wS
+                                       QwEIcG4BiSlz7/GvOlRa2znkOmZ3c8bD/J3Y
+                                       XUWDI3BEDPgrZqfxEvoMyPEWjO8= )
+                       600     NS      ns.test.
+                       600     NS      ns2.test.
+                       600     RRSIG   NS 7 1 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       OgEimhmFIAqlH0hyQy3pTsveBHKyqs9WfO1S
+                                       uDPRj3DFgFEAjoY473T8GxG2C+jTVL/UMVcb
+                                       BTZ8wIAiUHhqKLcmr0q/1X+kNUs7tNi+6oMn
+                                       /jxaOuRL6c8Kf2gl2t4g6JTwQqLQhUHTfQP+
+                                       bEfKUr75VsVfxCQZIHlZ3/AlxZM= )
+                       600     DNSKEY  256 3 7 (
+                                       AwEAAc0FzrE7jUiaKIGZpIaFE8E989topAJN
+                                       dWIQUQ7BSKabmpBP2M+SXHwIiQ/yC25iqudO
+                                       IxjRcK7nHB1VoP84xU2oMj6eeSqQHf/bYaji
+                                       Y8IfR7lgrzoDWzq+0rtnKMJc/JM8SMkcoBAS
+                                       llvxarDJTZheZjlrCvhpRJC+FAkBsx81
+                                       ) ; key id = 39833
+                       600     DNSKEY  257 3 7 (
+                                       AwEAAc55LPDhBLqfDUpjYYbBt+N63CiZtKrD
+                                       UDGeFAerbw0MWIUi3PgMr7yGVrj8e5Qjp9UN
+                                       zBUax6NdhlYVtFA8CwMTXGBjxgyqUoWpce08
+                                       lswxfE70BpgUA6w5efs0/mYtX9/A76etCaSI
+                                       oNH2vfa47BCdCPDfC1uTgyeuNuDvhszHaSiD
+                                       8OY7tLa/voecUlq38sdqi2raf2DvgOm7rdFa
+                                       reXOS/WIj7zd4XYrV1JGthxOMVlQ7zdv9rVd
+                                       UNUIF2d4hwCZJQr0ejhmvB3m/DuNmNOPYmnv
+                                       KTmLSE+IJ6baqYvKOVxwV+SaCnuJEjv+3Yrx
+                                       8WQYD/iS9WBhC9FUit0dy+0=
+                                       ) ; key id = 57183
+                       600     RRSIG   DNSKEY 7 1 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       xPV+bSGUlbxA5MKBeeRbwUDh3Qc+dm77+OHQ
+                                       BHIr1L8/kRP5o5J7MqPA37kea6nhyltYf9xM
+                                       RsxyiaBGUUeLyWg/q6hTtkNgAHifOPAhiDz8
+                                       AJDSTdSsq9RVtjdobAD0jyzz9sWnB+TPSOmj
+                                       Nlyd7VtPVEuSYljgawwfBBO3Kho= )
+                       600     RRSIG   DNSKEY 7 1 600 20110914225156 (
+                                       20110815225156 57183 test.
+                                       S3jkC7AvyFc4ShfHt6AWgS4zpx9DzWHBK9gV
+                                       2H23OJzy8H1At/CjKxWVHLJ/io+ygryVnt/I
+                                       47Jyhh9i43TnXj8il475YsweGnXGZSorrcXA
+                                       3IsD2lOuRYnp3yetxe2ZrMGNDqqImE6X4x1a
+                                       UJI0cbE2UMZfUt8Rm5USiGzwAEgFD1OXxvMD
+                                       UT3flyp+Ote9FConK8gewV4wlJuBFemWT7BZ
+                                       lUYnoqfuAeEn2+1pIBS0iA0LNFjNBaEgtcjo
+                                       QeweN32yKoApau47Dl/Klw7KFT8+PLZ0QPbt
+                                       XAkJU7q94Q5aucDuHCSCTCc+2vZxdEnXKvRY
+                                       rfLuG8r/V5Kn+1iYrQ== )
+                       0       NSEC3PARAM 1 0 10 -
+                       0       RRSIG   NSEC3PARAM 7 1 0 20110914225156 (
+                                       20110815225156 39833 test.
+                                       kghSSeP8AZiQ/zmxgxAyG0itoUMo5adG5pxD
+                                       p8T3ZmbxEUSyG5acxBFkmeY39wVU0Cda8tWc
+                                       HHrMbB5e2GN8z6xJ0A4rVyXfKSYJSz+iKWfk
+                                       7sOFRjd8OLYE3di6PwIpk6ORUiRPMFLDQCH0
+                                       Q27hLsSoKyd50orKKI+ncjz7WzU= )
+a.test.                        600     IN TXT  "test"
+                       600     RRSIG   TXT 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       UEVOlnL6CDRNCfk/Xge2oaGYCV1+ewwi5zJ0
+                                       CX4DdwiNEkItL4HgBe8xXfxgFC3qySdsSYPE
+                                       1krdFyIkAclMCwHECd1UwZbGlMTEUGrE1KOB
+                                       8vQY+OhIV9TAhqNwnjbu7s2ZdNUv3wiUPcfk
+                                       hCJ4rzP6yeV2inLwZulXnhxb6Pk= )
+b.test.                        600     IN TXT  "test"
+                       600     RRSIG   TXT 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       HcyQlO9io6Rc5e4vVqlRmK5PacOaFQJmdERG
+                                       5Aobpgm1FuCLC7F+IMZ0d1XvBWnsw9iDzV43
+                                       UKzTGqUSmDiSBzs4QzHlacGickIW8EOV4xyJ
+                                       +mcJ0FZh4YNbkt6CiX+8SF6IxfCMhRMjpSsK
+                                       rWqJMG3LXkI6W9stShzsYAFBOzQ= )
+e.test.                        600     IN TXT  "test"
+                       600     RRSIG   TXT 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       jUn5FGRTL9OcFU7tvfkUnSwY8jA+8JynE0hi
+                                       ZJbYXDU5CiWGmR2B3yPHxUCewRqouyVCV8bc
+                                       xZsSuBxvcdYKryYDbjsmB83GlSEuxE9J7XZs
+                                       8SxUP8PobLVqzXgEZS/XRU2G+R915ZDP9/iL
+                                       z9oYwc9TkeyXbp8J/ZsH88tG980= )
+c.test.                        600     IN TXT  "test"
+                       600     RRSIG   TXT 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       cRxAj45oFDDCd8xQXxD1F0Qq8XeBWAj8EYS3
+                                       7nFXAgAy8sTczFvYCNGj79o7BALJwM4vc/wx
+                                       6rjsiO/sHgfTMEBDq6lH9Wql72uhwavI2SrL
+                                       /h/wBP5q4BXlQ4xp6cLhhdifOWhNTvLP+Fe5
+                                       U6yjvqneiKspze9SiFbcmRDiJds= )
+d.e.f.test.            600     IN TXT  "test"
+                       600     RRSIG   TXT 7 4 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       ENjCzr/P9rJmj5OJLzYwWtHtBg2Uz+qJDucz
+                                       I97Pq9F819/c5sxNfT4hgICCw6ZfT4ffbzye
+                                       fFJ0JVrh2cYOzu68ozlgek/Uml1UW0pDQVdI
+                                       s4zEgp4XK9wXUxtWChSqp5YXMdeHegZFu32i
+                                       IMNTbJDudwYSwhr2FyG92ZRi8Y8= )
+f.g.h.test.            600     IN TXT  "test"
+                       600     RRSIG   TXT 7 4 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       HT7iocFsfDjeX6j9RJdE3xfVGkIxhajFHgM/
+                                       T/mJj/al4HKV6Ajia8DhpdfDrgM2m7r+Pgcn
+                                       FSIstfebQsuFCnHX/gIalDND/grHKsetQnMP
+                                       Y7O4QLsRnTV53fdlqQ4eT+jBW6fzJdGySVN+
+                                       bg6kNJZS8DebjmlKtZz7tXjkP+4= )
+f.g.i.test.            600     IN TXT  "test"
+                       600     RRSIG   TXT 7 4 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       kHJJeNSL1rz4QRYqOzhGMQl1yIdio7l8Lg8H
+                                       f0TsvFLa6BudVtwKUm+Kz2QiDn7/Lew8w0KX
+                                       vVHxX/Vwl3Ixk54YgMKLNogz2TEvnh/VGiS7
+                                       8r0oSUrg0CFd+xDfxnLeRqX5NNfMuSJap5WH
+                                       Aw7IVeRjXDwJFYnytMEnTrhHHHg= )
+f.g.j.test.            600     IN TXT  "test"
+                       600     RRSIG   TXT 7 4 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       lIEHEhDFhOWK8W/F2xWELU2p/X77S2KTivm9
+                                       sY4k3RPsLNHE7p+lF8p72Lcb79rtltnoVYtE
+                                       pTIiaUcmgGwfaI4cwfXbeuEgnuTiLg7Xrefx
+                                       3GT86Q+8gfgbMXUmRA/eouWZhCOaYJN99gYz
+                                       urzDMiRLYmILHmLlnvo82SgXeuk= )
+k.test.                        600     IN TXT  "test"
+                       600     RRSIG   TXT 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       wC3zgYWsuLga8Vu3QFu/Ci8SzRbA5bvjSmDj
+                                       NzcpjU5cvJBxtgzatCr02AaUC94bI0JzNrEB
+                                       nFyWCYw55lyy+bAHU1u05UcQmz0n5yxkvmHX
+                                       i8ZjMyQkAvNKodJHaFQqUKKIDuSHD2EziKqg
+                                       eNn55YRS11ihkODehUVNl7TnYeA= )
+ns.test.               600     IN A    10.0.0.1
+                       600     RRSIG   A 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       VyK/WlQ6ikXdjF/arGzyAyYhOc8IYNBp4QLW
+                                       gtYjvbjIcV5+9JINWmUs61VjJ14nES1sI0xb
+                                       9vQJuiPXTM1awUAnvOKLhaX6fbJaEiR1w6Cf
+                                       RT5QKBMxNBKVStqdabHcigY4DUuc1PQk1vCw
+                                       yMUJt3nHNVMZk+XAycNHzBeYjik= )
+ns2.test.              600     IN A    10.0.0.2
+                       600     RRSIG   A 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       CX6UlZL+5NQJViKfbe/E3uIJk/wjUzoiHBhY
+                                       B6gS8nxZzlRPdTTXyMZoRa4etTZEbrRjnyXk
+                                       1rP47faCUwbh//XqukN9f7FZ4Y39NpPS2XpX
+                                       0Lx6M93Jz46lbzmseMFs2YmNMzzhN4uhRvl/
+                                       8gPtYsn9KMXnAlFfa4XrE5LNVyY= )
+1F3JQ6EANHNHOCMUPQTVNM339VDTR51C.test. 600 IN NSEC3 1 0 10 - 7QKPELF33JOK9BVJ7CKE99AHG40B0SH7 A RRSIG
+                       600     RRSIG   NSEC3 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       w7aS12lxLNh+G1B/2kEq1BO6IzYvyC8n/MGV
+                                       0jvFnapNXGZMPrPxGeO2wkw1JXepuXCv98be
+                                       M4SjQywaH+VP6ZMTIfjxRxtcCM+aLAFhiz0l
+                                       /MILEkjemmxjAfvV7emRVMwCGcoGI7qC3Xxq
+                                       q5g8EzJiYyTCOnI5LKRggn97wGg= )
+7QKPELF33JOK9BVJ7CKE99AHG40B0SH7.test. 600 IN NSEC3 1 0 10 - 94Q15K1V1VE5F87EI37T2B9A39EEC368 TXT RRSIG
+                       600     RRSIG   NSEC3 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       J4ObL3p4eN0jWh06M+rX2SSPANQoKfnosElB
+                                       KcKE7fLqEjKK7N6Yh6KUlbEP25tfeZ7W6GBJ
+                                       b7q6Nh0Ax8fYdc/6JVvmxcwWcx5Lw1TfITGB
+                                       ttFntJlbp1A8lwP3pn8Ksql1X2ogh78AsgTb
+                                       X5kmXVukC1oEzt98EAa/V/an8QA= )
+CS8M3UVG0UJDR6USBES4U9SNUGQI2RJE.test. 600 IN NSEC3 1 0 10 - ETEQB5V431INUIIE547FKSOF7O4DJ62J A RRSIG
+                       600     RRSIG   NSEC3 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       Vyd/2b0S15fACJ8TiPXKtScV9A/ZztVumZAm
+                                       o2S6jaVJKWik+8orDW+WiJ4/PEl26PK2m1uv
+                                       HD2beuUCHj9EnYkN/dzL3Bsc302qr9xqsh0q
+                                       VFS2moznoNG415ZV3vgYR7L9DAp43ZeFuw6I
+                                       7sr21hLYLUeo31xBsJg7RlOL+4s= )
+ETEQB5V431INUIIE547FKSOF7O4DJ62J.test. 600 IN NSEC3 1 0 10 - F8G1MB0JUEU3FBI11CAVFIPGEA3POOIM
+                       600     RRSIG   NSEC3 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       oOHs1eb3JYeOMOnzE2PS6NIXBNzSoTYPIxo/
+                                       P0d/ihsLKra3yNJNPTlu4kf+FZoNYAGtMK/D
+                                       6dZWFvtdswDdi2C5WSgsanuHqXq5Lr3A1nCe
+                                       cQI5PO4RrLymB+MtYg15CNKcnc0WmJO8deSR
+                                       WzNOarC+Iz1Xj3FkKDS4FFr+02Q= )
+94Q15K1V1VE5F87EI37T2B9A39EEC368.test. 600 IN NSEC3 1 0 10 - CS8M3UVG0UJDR6USBES4U9SNUGQI2RJE
+                       600     RRSIG   NSEC3 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       K0PvN7YtHQ63x/x2yXXa2S9GBGuTNJywDZ8M
+                                       wyMSwytCb9mn4hnKD5mJHaXGTw3YX7usbnEO
+                                       ce6hiJdN/VhMfbRMOvUpgyblOj4kXiYVZY1a
+                                       SyycfugK/Hu1j4az7lIhhnnx58GChA6mg8Vx
+                                       3Uz6cNDDCSTBTl09NyeUUrKWsHQ= )
+FBH6B0LHT9PPQB1P98D228HA1H52L8PO.test. 600 IN NSEC3 1 0 10 - JGU2L7C3LKLHAKC5RHUOORTI2DCKK3KL
+                       600     RRSIG   NSEC3 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       giXRE+4ZeIzDrhx1XkFSpIKGFd3UGzlrLZnO
+                                       Ur9nMUfwvU5A3fitEkdayo3ZDH7MQGpSotaH
+                                       ReiFXx3Z6Hm2NIN/RHYZQr9e0vbMYSjkANdu
+                                       HWBA1SrSq5SHyuy970mPd4jfTHiABCo6fJGB
+                                       ykGClZGou0WSaB+Ak19fMbeQ2Wo= )
+JGU2L7C3LKLHAKC5RHUOORTI2DCKK3KL.test. 600 IN NSEC3 1 0 10 - KFMJ88CKMKUQQJE59IKFBOLLLD4DF55H TXT RRSIG
+                       600     RRSIG   NSEC3 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       BHTDUgZdWNLgz3xHYMqvlWK/IJ0xrXESoREc
+                                       6D3sO9bcLTMYPO9t80itOlipwp4AmaVOBXPt
+                                       cKSdgsUXDEtHqNSxtGbNr5xQ+Aqsep0GX71V
+                                       HkcIuiNdTUw83dkajCHMkmQCbEjp9mbdiTmS
+                                       haNW2EsscldfaS1aq5tYUhCT3l4= )
+L993U6VC0DUV5QJ8TRPD2IQLM8FJ7AT9.test. 600 IN NSEC3 1 0 10 - LSMRLLNBQGGK8J6V40KLM2LG5TE4FS0P
+                       600     RRSIG   NSEC3 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       vE7K0Nrju4qLFDYkIyMY5bIMT0wu8MJdxL6u
+                                       7WVA4HepccKQcUnvVoBAcrA9+MUeteyrad8Y
+                                       SJvQIt7sz5t7FViWSq5IMPVPujWtW5J30LhJ
+                                       mOLd1KmnFWoVthJ1oFNzBM80A60seKNnEw1M
+                                       lV6Y+v0gNYIQensUb9w6SVMTpxE= )
+F8G1MB0JUEU3FBI11CAVFIPGEA3POOIM.test. 600 IN NSEC3 1 0 10 - FA1T7MKUUV9SD4VDBJQ3GRFK1IDTCKL7
+                       600     RRSIG   NSEC3 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       DkL9ONc0vpsKdG20ol8XPAaVfLb7kf1wnKbR
+                                       rQUB1trGSHm/Igo06of43zm9J+56htFJg1xD
+                                       I2de0sCUBQYyHVBBDiBAd1g+ZvcpUlLP0w8M
+                                       NxMviMiG/WQAdGXHwYfUimwMWD7gNGl1m05H
+                                       HwYmzGs+d1bClDNBrFhdfdL2+iA= )
+LSMRLLNBQGGK8J6V40KLM2LG5TE4FS0P.test. 600 IN NSEC3 1 0 10 - LUAN2Q3I2OCVSD41MP08HNA9JP22D38K
+                       600     RRSIG   NSEC3 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       ZgiWuMqodQuhwuAF6CIiJTsdRahi+poOiZAM
+                                       WXNP0wXfdptcG2uhbdDwy+0crhe3tuybhwcb
+                                       CuiaQUh0XNPhgF+qmXpGobaqBhCEvCF4K9qY
+                                       OCIoMfsI1pIBVbMw0+YXVarFZ8+mfNU/+6n6
+                                       yy2+1nCg3k4XR2Dpv4CeDBfcAuM= )
+NAL1UIEBM38NKMN6RQOKE8T781IA7UKI.test. 600 IN NSEC3 1 0 10 - OUSGP0LO9FGAROHDULQVSTI3OLQIBB39 TXT RRSIG
+                       600     RRSIG   NSEC3 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       x8JiXPI+EXHz8ZO/VW0/+9wWsBNqeSMxXZIV
+                                       ibOnogSg7Wi7Yq1xftKC2+xEevNxSZnBibEy
+                                       Sgro5xKTf0n7pD9hHVBLoYmOOnbXY3QNQ2EQ
+                                       y3LdPT355WmwVddVOOxNpNRp2zQyqg7BhVA3
+                                       wxY7tyVQd4x1+95ATUQBnFditdE= )
+KFMJ88CKMKUQQJE59IKFBOLLLD4DF55H.test. 600 IN NSEC3 1 0 10 - L993U6VC0DUV5QJ8TRPD2IQLM8FJ7AT9 TXT RRSIG
+                       600     RRSIG   NSEC3 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       KQPaN2Ecebifbl4Bz5Yo0x2DgGmZiVhpSydm
+                                       oy/5NtMjt7G472JrKlqByap+VxW0bpzo3IER
+                                       3P8Dsv7pfBD4/Cl5sFqwZL7wYy7RB4dQLVCi
+                                       Pepc/Mr3gR2XmL91fpGttMj5jGscnVQJCyFa
+                                       obzhsVaVImUQZFDPb0UQUHwIhOA= )
+LUAN2Q3I2OCVSD41MP08HNA9JP22D38K.test. 600 IN NSEC3 1 0 10 - NAL1UIEBM38NKMN6RQOKE8T781IA7UKI TXT RRSIG
+                       600     RRSIG   NSEC3 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       NJ+X3d0qh2+fbSnG0iQPxAeDIOzX5NTmY9fS
+                                       x7IO/DDcgUhPvl1YYdz5J999cec1zzOKp10J
+                                       YbsIAzg0w/Y4D4CBUw3IkcOrUFOODb6eJQGb
+                                       rVFRqmp3BUP4qOAWUZvx4oQ0KG4K/h/KJMbU
+                                       Vcdl7PF7G5O5hMyR9UWg4zal7Sk= )
+OUSGP0LO9FGAROHDULQVSTI3OLQIBB39.test. 600 IN NSEC3 1 0 10 - PQQ28M3U2MM08GGFV3JKR76G2H9IUJPC TXT RRSIG
+                       600     RRSIG   NSEC3 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       A/qxYrSE/smBGbST8j8eGPCrRnwvVa25kDha
+                                       IuA3nv0vzXhFvlruc9f0HRGwsq6A2pw3I5W+
+                                       xo2/JxsNyFOotdwaDDEBzqPkJmrzupxQS4Hm
+                                       rHSLnRnNw4QzvzNjAGWMYAoe3OeHC47wmAtI
+                                       qE91EHZTlPP28CUXOMo+7sCaOa8= )
+U0UVS2SUP89P2TM3PJO4TC1GPJ2O6519.test. 600 IN NSEC3 1 0 10 - VA2VG5BEMCKQP6MS5NHHGL18031BIA7M NS SOA RRSIG DNSKEY NSEC3PARAM
+                       600     RRSIG   NSEC3 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       rahhkfiF+Rk6oqbWTdu9qcwhmj5hbDuIFdiJ
+                                       GmaG+cFSv5Mjp+txNVCvBK9Hq/VpW0ypen/3
+                                       JC0sVAugSX+HAKAgyaMKmgWCvoQZ6ZSJUh7o
+                                       LRPcT+oxVXQAqjovxpaV8k6sYo44tpljPdOD
+                                       UluWAP5SrmJKjzCxs27KGRx8MK4= )
+VA2VG5BEMCKQP6MS5NHHGL18031BIA7M.test. 600 IN NSEC3 1 0 10 - VAKOQ2TPD7S25NFBJT73J3C4OGU10RJ5 TXT RRSIG
+                       600     RRSIG   NSEC3 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       XcBeZ8lo9Qo8z56+1FdGDjh6ZHCfO+MQ/wnY
+                                       TEUo/aWLkPTyq39nLhe0qVBJxmDpM+KQFuG9
+                                       cjQT5fvrlrY+lv6dedB64EBMYy4kKbIv7N5+
+                                       r6+sfWlvtKsfXxysLSk2+jLEm5NuLFrOdNas
+                                       WLVsq741D3YcWt4kM1HCyk3DNF8= )
+FA1T7MKUUV9SD4VDBJQ3GRFK1IDTCKL7.test. 600 IN NSEC3 1 0 10 - FBH6B0LHT9PPQB1P98D228HA1H52L8PO TXT RRSIG
+                       600     RRSIG   NSEC3 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       jB/vLrvx4sQQD7J3ZacAAyhcFmIPh7LH3ljw
+                                       IAIaeLb10oX5q1/nQKYdfq976TMy5sWpBcmd
+                                       i91WLxd+T/gOSumyP8bC3g+SUoyZ9wxY6A6a
+                                       MMx1rn0QA9IKrxMqojs9M3urJ8QAeIS+KyAn
+                                       rbyyJuG+EVm0prqlPZtzUi28WCI= )
+PQQ28M3U2MM08GGFV3JKR76G2H9IUJPC.test. 600 IN NSEC3 1 0 10 - U0UVS2SUP89P2TM3PJO4TC1GPJ2O6519
+                       600     RRSIG   NSEC3 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       asCOU9OkVWMvUU2IUpwMgdYf0faA04zPbaFf
+                                       qywYsv3NH01Lky6G3a0WUPAbBm7TAYx/ln8a
+                                       559vlpp/gpXEl9CcLrjO6wy5i0ryp8gVHtKJ
+                                       rQlEc/uw4SY+S5t7FuZc2rNRdAbxVMYuwrvm
+                                       HBsKDPblre3e06ZZFEmnGFzCgmg= )
+VAKOQ2TPD7S25NFBJT73J3C4OGU10RJ5.test. 600 IN NSEC3 1 0 10 - VNCCJH8JPOLGLAGVMV3FKS09M7RRDU47 TXT RRSIG
+                       600     RRSIG   NSEC3 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       Pt4tKB1p/jsyLYab9LSt5MF1KTRT18nRTOox
+                                       q0IACkXkKx7W5xv6nSYXIB+nQzNp1Y1hhoXn
+                                       9IFi0liPnIAOp73w4vybhfIdTFiEmHPHT6O9
+                                       VIx5cSriqBI6Qda8GtfeIb96P8SojbUk5BDI
+                                       g18iYjviGhQYRgpU3tg1qd7pbcc= )
+VNCCJH8JPOLGLAGVMV3FKS09M7RRDU47.test. 600 IN NSEC3 1 0 10 - 1F3JQ6EANHNHOCMUPQTVNM339VDTR51C
+                       600     RRSIG   NSEC3 7 2 600 20110914225156 (
+                                       20110815225156 39833 test.
+                                       ZMZPHawhkuzSV7C7zkgghH/jpw9CQVR1JUXq
+                                       pAeY2iIIWwNhfuskJaLgtu/5SuKnJtrv6D4N
+                                       g+lfEkBReia5xO/SCcHv8/hXEPH8vZ4xe1C9
+                                       6GVB6ip2hKw2g5HpyF7X18WgwZ0cqPWVg+Q+
+                                       xRLpXH+53391Wt5rG7qJswn5RLE= )
index eb415b861da3e7de21ca978685372d4964e9210a..abe8cf82c909cb414a13b98c3e530bff70a95eb2 100644 (file)
@@ -12,7 +12,7 @@
 # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 # PERFORMANCE OF THIS SOFTWARE.
 
-# $Id: Makefile.in,v 1.4 2011/07/28 21:05:09 ckb Exp $
+# $Id: Makefile.in,v 1.5 2011/08/23 00:59:23 each Exp $
 
 srcdir =       @srcdir@
 VPATH =                @srcdir@
@@ -54,5 +54,8 @@ hash_test@EXEEXT@: hash_test.@O@ ${ISCDEPLIBS}
        ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ \
                        hash_test.@O@ ${ISCLIBS} ${LIBS}
 
+unit::
+       sh ${top_srcdir}/unit/unittest.sh
+
 clean distclean::
        rm -f ${TARGETS}