diff options
Diffstat (limited to 'bin/tests')
586 files changed, 90180 insertions, 0 deletions
diff --git a/bin/tests/Kchild.example.+003+04017.key b/bin/tests/Kchild.example.+003+04017.key new file mode 100644 index 0000000..9f5cbac --- /dev/null +++ b/bin/tests/Kchild.example.+003+04017.key @@ -0,0 +1 @@ +child.example. IN KEY 256 3 3 ALeiYGFXbil6PgHnkm5ZE67ygEVDvGT/gqZmLH7tGboofcPSfyhh1hpw dxZgJ26d/gynWMGVSYzaXfzsxpPoNeYn+qeevQoJOaxXXlfcy8Ik52Rm eW0J9mWlf9hsD7ShIhh1+0kRYGCOCaU25wIe3SLVkN3HgqiCBDYnBY0u nMkqRadiUnoEa3Tcvc9kJx9r9gDstR2A9A5sBhFLI/XQ0gViHHLVpQ4x hz+rTLb/xrBoAb5sQJT3xUjhhdNo9HuL6kwdLdSu//PCl1QnY9NpYPVV SKUo diff --git a/bin/tests/Kchild.example.+003+04017.private b/bin/tests/Kchild.example.+003+04017.private new file mode 100644 index 0000000..176ff98 --- /dev/null +++ b/bin/tests/Kchild.example.+003+04017.private @@ -0,0 +1,7 @@ +Private-key-format: v1.2 +Algorithm: 3 (DSA) +Prime(p): vGT/gqZmLH7tGboofcPSfyhh1hpwdxZgJ26d/gynWMGVSYzaXfzsxpPoNeYn+qeevQoJOaxXXlfcy8Ik52RmeQ== +Subprime(q): t6JgYVduKXo+AeeSblkTrvKARUM= +Base(g): bQn2ZaV/2GwPtKEiGHX7SRFgYI4JpTbnAh7dItWQ3ceCqIIENicFjS6cySpFp2JSegRrdNy9z2QnH2v2AOy1HQ== +Private_value(x): J1Ctez8+w1PTR56Hze3pGoe0Wag= +Public_value(y): gPQObAYRSyP10NIFYhxy1aUOMYc/q0y2/8awaAG+bECU98VI4YXTaPR7i+pMHS3Urv/zwpdUJ2PTaWD1VUilKA== diff --git a/bin/tests/Makefile.in b/bin/tests/Makefile.in new file mode 100644 index 0000000..93b63f1 --- /dev/null +++ b/bin/tests/Makefile.in @@ -0,0 +1,306 @@ +# Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 1998-2003 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. + +# $Id: Makefile.in,v 1.131 2008/09/25 04:02:38 tbox Exp $ + +srcdir = @srcdir@ +VPATH = @srcdir@ +top_srcdir = @top_srcdir@ + +@BIND9_MAKE_INCLUDES@ + +CINCLUDES = ${DNS_INCLUDES} ${ISC_INCLUDES} ${ISCCFG_INCLUDES} \ + ${LWRES_INCLUDES} ${OMAPI_INCLUDES} + +CDEFINES = +CWARNINGS = + +DNSLIBS = ../../lib/dns/libdns.@A@ @DNS_CRYPTO_LIBS@ +ISCLIBS = ../../lib/isc/libisc.@A@ +ISCCFGLIBS = ../../lib/isccfg/libisccfg.@A@ +LWRESLIBS = ../../lib/lwres/liblwres.@A@ + +DNSDEPLIBS = ../../lib/dns/libdns.@A@ +ISCDEPLIBS = ../../lib/isc/libisc.@A@ +ISCCFGDEPLIBS = ../../lib/isccfg/libisccfg.@A@ +LWRESDEPLIBS = ../../lib/lwres/liblwres.@A@ + +LIBS = @LIBS@ + +SUBDIRS = db dst master mem names net rbt sockaddr tasks timers system + +# A few of the test programs are built by default: +# cfg_test is needed for regenerating doc/misc/options; +# genrandom is needed by the system tests + +# Alphabetically +TARGETS = cfg_test@EXEEXT@ \ + genrandom@EXEEXT@ + +# All the other tests are optional and not built by default. + +# Alphabetically +XTARGETS = adb_test@EXEEXT@ \ + byaddr_test@EXEEXT@ \ + byname_test@EXEEXT@ \ + compress_test@EXEEXT@ \ + db_test@EXEEXT@ \ + entropy_test@EXEEXT@ \ + entropy2_test@EXEEXT@ \ + gxba_test@EXEEXT@ \ + gxbn_test@EXEEXT@ \ + hash_test@EXEEXT@ \ + nsec3hash@EXEEXT@ \ + fsaccess_test@EXEEXT@ \ + inter_test@EXEEXT@ \ + journalprint@EXEEXT@ \ + keyboard_test@EXEEXT@ \ + lex_test@EXEEXT@ \ + lfsr_test@EXEEXT@ \ + log_test@EXEEXT@ \ + lwres_test@EXEEXT@ \ + lwresconf_test@EXEEXT@ \ + master_test@EXEEXT@ \ + mempool_test@EXEEXT@ \ + name_test@EXEEXT@ \ + nsecify@EXEEXT@ \ + ratelimiter_test@EXEEXT@ \ + rbt_test@EXEEXT@ \ + rdata_test@EXEEXT@ \ + rwlock_test@EXEEXT@ \ + serial_test@EXEEXT@ \ + shutdown_test@EXEEXT@ \ + sig0_test@EXEEXT@ \ + sock_test@EXEEXT@ \ + sym_test@EXEEXT@ \ + task_test@EXEEXT@ \ + timer_test@EXEEXT@ \ + wire_test@EXEEXT@ \ + zone_test@EXEEXT@ + +# Alphabetically +SRCS = cfg_test.c genrandom.c ${XSRCS} + +XSRCS = adb_test.c \ + byaddr_test.c \ + byname_test.c \ + compress_test.c \ + db_test.c \ + entropy_test.c \ + entropy2_test.c \ + gxba_test.c \ + gxbn_test.c \ + hash_test.c \ + fsaccess_test.c \ + inter_test.c \ + journalprint.c \ + keyboard_test.c \ + lex_test.c \ + lfsr_test.c \ + log_test.c \ + lwres_test.c \ + lwresconf_test.c \ + master_test.c \ + mempool_test.c \ + name_test.c \ + nsecify.c \ + printmsg.c \ + ratelimiter_test.c \ + rbt_test.c \ + rdata_test.c \ + rwlock_test.c \ + serial_test.c \ + shutdown_test.c \ + sig0_test.c \ + sock_test.c \ + sym_test.c \ + task_test.c \ + timer_test.c \ + wire_test.c \ + zone_test.c + +@BIND9_MAKE_RULES@ + +all_tests: ${XTARGETS} + +genrandom@EXEEXT@: genrandom.@O@ + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ genrandom.@O@ @GENRANDOMLIB@ ${LIBS} + +adb_test@EXEEXT@: adb_test.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ adb_test.@O@ \ + ${DNSLIBS} ${ISCLIBS} ${LIBS} + +nsecify@EXEEXT@: nsecify.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ nsecify.@O@ \ + ${DNSLIBS} ${ISCLIBS} ${LIBS} + +byaddr_test@EXEEXT@: byaddr_test.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ byaddr_test.@O@ \ + ${DNSLIBS} ${ISCLIBS} ${LIBS} + +byname_test@EXEEXT@: byname_test.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ byname_test.@O@ \ + ${DNSLIBS} ${ISCLIBS} ${LIBS} + +lex_test@EXEEXT@: lex_test.@O@ ${ISCDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ lex_test.@O@ \ + ${ISCLIBS} ${LIBS} + +lfsr_test@EXEEXT@: lfsr_test.@O@ ${ISCDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ lfsr_test.@O@ \ + ${ISCLIBS} ${LIBS} + +log_test@EXEEXT@: log_test.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ log_test.@O@ \ + ${DNSLIBS} ${ISCLIBS} ${LIBS} + +name_test@EXEEXT@: name_test.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ name_test.@O@ \ + ${DNSLIBS} ${ISCLIBS} ${LIBS} + +hash_test@EXEEXT@: hash_test.@O@ ${ISCDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ hash_test.@O@ \ + ${ISCLIBS} ${LIBS} + +entropy_test@EXEEXT@: entropy_test.@O@ ${ISCDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ entropy_test.@O@ \ + ${ISCLIBS} ${LIBS} + +entropy2_test@EXEEXT@: entropy2_test.@O@ ${ISCDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ entropy2_test.@O@ \ + ${ISCLIBS} ${LIBS} + +sock_test@EXEEXT@: sock_test.@O@ ${ISCDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ sock_test.@O@ \ + ${ISCLIBS} ${LIBS} + +sym_test@EXEEXT@: sym_test.@O@ ${ISCDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ sym_test.@O@ \ + ${ISCLIBS} ${LIBS} + +task_test@EXEEXT@: task_test.@O@ ${ISCDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ task_test.@O@ \ + ${ISCLIBS} ${LIBS} + +shutdown_test@EXEEXT@: shutdown_test.@O@ ${ISCDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ shutdown_test.@O@ \ + ${ISCLIBS} ${LIBS} + +timer_test@EXEEXT@: timer_test.@O@ ${ISCDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ timer_test.@O@ \ + ${ISCLIBS} ${LIBS} + +ratelimiter_test@EXEEXT@: ratelimiter_test.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ ratelimiter_test.@O@ \ + ${DNSLIBS} ${ISCLIBS} ${LIBS} + +rbt_test@EXEEXT@: rbt_test.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ rbt_test.@O@ \ + ${DNSLIBS} ${ISCLIBS} ${LIBS} + +rdata_test@EXEEXT@: rdata_test.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ rdata_test.@O@ \ + ${DNSLIBS} ${ISCLIBS} ${LIBS} + +rwlock_test@EXEEXT@: rwlock_test.@O@ ${ISCDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ rwlock_test.@O@ \ + ${ISCLIBS} ${LIBS} + +wire_test@EXEEXT@: wire_test.@O@ printmsg.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ wire_test.@O@ printmsg.@O@ \ + ${DNSLIBS} ${ISCLIBS} ${LIBS} + +master_test@EXEEXT@: master_test.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ master_test.@O@ \ + ${DNSLIBS} ${ISCLIBS} ${LIBS} + +db_test@EXEEXT@: db_test.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ db_test.@O@ \ + ${DNSLIBS} ${ISCLIBS} ${LIBS} + +compress_test@EXEEXT@: compress_test.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ compress_test.@O@ \ + ${DNSLIBS} ${ISCLIBS} ${LIBS} + +mempool_test@EXEEXT@: mempool_test.@O@ ${ISCDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ mempool_test.@O@ \ + ${ISCLIBS} ${LIBS} + +serial_test@EXEEXT@: serial_test.@O@ ${ISCDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ serial_test.@O@ \ + ${ISCLIBS} ${LIBS} + +zone_test@EXEEXT@: zone_test.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ zone_test.@O@ \ + ${DNSLIBS} ${ISCLIBS} ${LIBS} + +fsaccess_test@EXEEXT@: fsaccess_test.@O@ ${ISCDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ fsaccess_test.@O@ \ + ${ISCLIBS} ${LIBS} + +inter_test@EXEEXT@: inter_test.@O@ ${ISCDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ inter_test.@O@ \ + ${ISCLIBS} ${LIBS} + +keyboard_test@EXEEXT@: keyboard_test.@O@ ${ISCDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ keyboard_test.@O@ \ + ${ISCLIBS} ${LIBS} + +lwresconf_test@EXEEXT@: lwresconf_test.@O@ ${ISCDEPLIBS} ${LWRESDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ lwresconf_test.@O@ \ + ${LWRESLIBS} ${ISCLIBS} ${LIBS} + +lwres_test@EXEEXT@: lwres_test.@O@ ${ISCDEPLIBS} ${LWRESDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ lwres_test.@O@ \ + ${LWRESLIBS} ${ISCLIBS} ${LIBS} + +gxbn_test@EXEEXT@: gxbn_test.@O@ ${LWRESDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ gxbn_test.@O@ \ + ${LWRESLIBS} ${ISCLIBS} ${LIBS} + +gxba_test@EXEEXT@: gxba_test.@O@ ${LWRESDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ gxba_test.@O@ \ + ${LWRESLIBS} ${ISCLIBS} ${LIBS} + +sig0_test@EXEEXT@: sig0_test.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ sig0_test.@O@ \ + ${DNSLIBS} ${ISCLIBS} ${LIBS} + +journalprint@EXEEXT@: journalprint.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ journalprint.@O@ \ + ${DNSLIBS} ${ISCLIBS} ${LIBS} + +cfg_test@EXEEXT@: cfg_test.@O@ ${ISCCFGDEPLIBS} ${ISCDEPLIBS} + ${LIBTOOL_MODE_LINK} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ cfg_test.@O@ \ + ${ISCCFGLIBS} ${DNSLIBS} ${ISCLIBS} ${LIBS} + +nsec3hash@EXEEXT@: nsec3hash.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS} + ${LIBTOOL_MODE_LINK} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ nsec3hash.@O@ \ + ${DNSLIBS} ${ISCLIBS} ${LIBS} + +distclean:: + rm -f headerdep_test.sh + +clean distclean:: + rm -f ${TARGETS} ${XTARGETS} + rm -f t_journal + +check: test + +test: + @for dir in $(SUBDIRS) ;\ + do \ + ( cd $$dir; $(MAKE) test ) ;\ + done diff --git a/bin/tests/adb_test.c b/bin/tests/adb_test.c new file mode 100644 index 0000000..2ef812d --- /dev/null +++ b/bin/tests/adb_test.c @@ -0,0 +1,436 @@ +/* + * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1999-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. + */ + +/* $Id: adb_test.c,v 1.68 2007/06/19 23:46:59 tbox Exp $ */ + +/*! \file */ + +#include <config.h> + +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include <isc/app.h> +#include <isc/buffer.h> +#include <isc/entropy.h> +#include <isc/hash.h> +#include <isc/socket.h> +#include <isc/task.h> +#include <isc/timer.h> +#include <isc/util.h> + +#include <dns/adb.h> +#include <dns/cache.h> +#include <dns/dispatch.h> +#include <dns/db.h> +#include <dns/log.h> +#include <dns/rootns.h> +#include <dns/result.h> + +typedef struct client client_t; +struct client { + dns_name_t name; + const char *target; + ISC_LINK(client_t) link; + dns_adbfind_t *find; +}; + +static isc_mem_t *mctx = NULL; +static isc_entropy_t *ectx = NULL; +static isc_mempool_t *cmp; +static isc_log_t *lctx; +static isc_logconfig_t *lcfg; +static isc_taskmgr_t *taskmgr; +static isc_socketmgr_t *socketmgr; +static isc_timermgr_t *timermgr; +static dns_dispatchmgr_t *dispatchmgr; +static isc_task_t *t1, *t2; +static dns_view_t *view; +static dns_db_t *rootdb; +static ISC_LIST(client_t) clients; +static isc_mutex_t client_lock; +static isc_stdtime_t now; +static dns_adb_t *adb; + +static void +check_result(isc_result_t result, const char *format, ...) + ISC_FORMAT_PRINTF(2, 3); + +static void +check_result(isc_result_t result, const char *format, ...) { + va_list args; + + if (result == ISC_R_SUCCESS) + return; + + va_start(args, format); + vfprintf(stderr, format, args); + va_end(args); + fprintf(stderr, ": %s\n", isc_result_totext(result)); + exit(1); +} + +static client_t * +new_client(void) { + client_t *client; + + client = isc_mempool_get(cmp); + INSIST(client != NULL); + dns_name_init(&client->name, NULL); + ISC_LINK_INIT(client, link); + client->find = NULL; + + return (client); +} + +static void +free_client(client_t **c) { + client_t *client; + + INSIST(c != NULL); + client = *c; + *c = NULL; + INSIST(client != NULL); + dns_name_free(&client->name, mctx); + INSIST(!ISC_LINK_LINKED(client, link)); + INSIST(client->find == NULL); + + isc_mempool_put(cmp, client); +} + +static inline void +CLOCK(void) { + RUNTIME_CHECK(isc_mutex_lock(&client_lock) == ISC_R_SUCCESS); +} + +static inline void +CUNLOCK(void) { + RUNTIME_CHECK(isc_mutex_unlock(&client_lock) == ISC_R_SUCCESS); +} + +static void +lookup_callback(isc_task_t *task, isc_event_t *ev) { + client_t *client; + + client = ev->ev_arg; + INSIST(client->find == ev->ev_sender); + + printf("NAME %s:\n\tTask %p got event %p type %08x from %p, client %p\n\terr4: %s err6: %s\n", + client->target, + task, ev, ev->ev_type, client->find, client, + isc_result_totext(client->find->result_v4), + isc_result_totext(client->find->result_v6)); + + isc_event_free(&ev); + ev = NULL; + + CLOCK(); + + dns_adb_dumpfind(client->find, stderr); + dns_adb_destroyfind(&client->find); + + ISC_LIST_UNLINK(clients, client, link); + free_client(&client); + + CUNLOCK(); +} + +static void +create_managers(void) { + isc_result_t result; + + taskmgr = NULL; + result = isc_taskmgr_create(mctx, 5, 0, &taskmgr); + check_result(result, "isc_taskmgr_create"); + + timermgr = NULL; + result = isc_timermgr_create(mctx, &timermgr); + check_result(result, "isc_timermgr_create"); + + socketmgr = NULL; + result = isc_socketmgr_create(mctx, &socketmgr); + check_result(result, "isc_socketmgr_create"); + + dispatchmgr = NULL; + result = dns_dispatchmgr_create(mctx, NULL, &dispatchmgr); + check_result(result, "dns_dispatchmgr_create"); +} + +static void +create_view(void) { + dns_cache_t *cache; + isc_result_t result; + + /* + * View. + */ + view = NULL; + result = dns_view_create(mctx, dns_rdataclass_in, "_default", &view); + check_result(result, "dns_view_create"); + + /* + * Cache. + */ + cache = NULL; + result = dns_cache_create(mctx, taskmgr, timermgr, dns_rdataclass_in, + "rbt", 0, NULL, &cache); + check_result(result, "dns_cache_create"); + dns_view_setcache(view, cache); + dns_cache_detach(&cache); + + { + unsigned int attrs; + isc_sockaddr_t any4, any6; + dns_dispatch_t *disp4 = NULL; + dns_dispatch_t *disp6 = NULL; + + isc_sockaddr_any(&any4); + isc_sockaddr_any6(&any6); + + attrs = DNS_DISPATCHATTR_IPV4 | DNS_DISPATCHATTR_UDP; + RUNTIME_CHECK(dns_dispatch_getudp(dispatchmgr, socketmgr, + taskmgr, &any4, 512, 6, 1024, + 17, 19, attrs, attrs, &disp4) + == ISC_R_SUCCESS); + INSIST(disp4 != NULL); + + attrs = DNS_DISPATCHATTR_IPV6 | DNS_DISPATCHATTR_UDP; + RUNTIME_CHECK(dns_dispatch_getudp(dispatchmgr, socketmgr, + taskmgr, &any6, 512, 6, 1024, + 17, 19, attrs, attrs, &disp6) + == ISC_R_SUCCESS); + INSIST(disp6 != NULL); + + RUNTIME_CHECK(dns_view_createresolver(view, taskmgr, 10, + socketmgr, + timermgr, 0, + dispatchmgr, + disp4, disp6) == + ISC_R_SUCCESS); + } + + rootdb = NULL; + result = dns_rootns_create(mctx, dns_rdataclass_in, NULL, &rootdb); + check_result(result, "dns_rootns_create()"); + dns_view_sethints(view, rootdb); + dns_db_detach(&rootdb); + + dns_view_freeze(view); +} + +static void +lookup(const char *target) { + dns_name_t name; + unsigned char namedata[256]; + client_t *client; + isc_buffer_t t, namebuf; + isc_result_t result; + unsigned int options; + + INSIST(target != NULL); + + client = new_client(); + isc_buffer_init(&t, target, strlen(target)); + isc_buffer_add(&t, strlen(target)); + isc_buffer_init(&namebuf, namedata, sizeof(namedata)); + dns_name_init(&name, NULL); + result = dns_name_fromtext(&name, &t, dns_rootname, ISC_FALSE, + &namebuf); + check_result(result, "dns_name_fromtext %s", target); + + result = dns_name_dup(&name, mctx, &client->name); + check_result(result, "dns_name_dup %s", target); + + options = 0; + options |= DNS_ADBFIND_INET; + options |= DNS_ADBFIND_INET6; + options |= DNS_ADBFIND_WANTEVENT; + options |= DNS_ADBFIND_HINTOK; + options |= DNS_ADBFIND_GLUEOK; + result = dns_adb_createfind(adb, t2, lookup_callback, client, + &client->name, dns_rootname, 0, options, + now, NULL, view->dstport, &client->find); +#if 0 + check_result(result, "dns_adb_createfind()"); +#endif + dns_adb_dumpfind(client->find, stderr); + + if ((client->find->options & DNS_ADBFIND_WANTEVENT) != 0) { + client->target = target; + ISC_LIST_APPEND(clients, client, link); + } else { + printf("NAME %s: err4 %s, err6 %s\n", + target, isc_result_totext(client->find->result_v4), + isc_result_totext(client->find->result_v6)); + + dns_adb_destroyfind(&client->find); + free_client(&client); + } +} + +int +main(int argc, char **argv) { + isc_result_t result; + isc_logdestination_t destination; + + UNUSED(argc); + UNUSED(argv); + + dns_result_register(); + result = isc_app_start(); + check_result(result, "isc_app_start()"); + + isc_stdtime_get(&now); + + result = isc_mutex_init(&client_lock); + check_result(result, "isc_mutex_init(&client_lock)"); + ISC_LIST_INIT(clients); + + /* + * EVERYTHING needs a memory context. + */ + RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS); + + cmp = NULL; + RUNTIME_CHECK(isc_mempool_create(mctx, sizeof(client_t), &cmp) + == ISC_R_SUCCESS); + isc_mempool_setname(cmp, "adb test clients"); + + result = isc_entropy_create(mctx, &ectx); + check_result(result, "isc_entropy_create()"); + result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE); + check_result(result, "isc_hash_create()"); + + result = isc_log_create(mctx, &lctx, &lcfg); + check_result(result, "isc_log_create()"); + isc_log_setcontext(lctx); + dns_log_init(lctx); + dns_log_setcontext(lctx); + + /* + * Create and install the default channel. + */ + destination.file.stream = stderr; + destination.file.name = NULL; + destination.file.versions = ISC_LOG_ROLLNEVER; + destination.file.maximum_size = 0; + result = isc_log_createchannel(lcfg, "_default", + ISC_LOG_TOFILEDESC, + ISC_LOG_DYNAMIC, + &destination, ISC_LOG_PRINTTIME); + check_result(result, "isc_log_createchannel()"); + result = isc_log_usechannel(lcfg, "_default", NULL, NULL); + check_result(result, "isc_log_usechannel()"); + + /* + * Set the initial debug level. + */ + isc_log_setdebuglevel(lctx, 2); + + create_managers(); + + t1 = NULL; + result = isc_task_create(taskmgr, 0, &t1); + check_result(result, "isc_task_create t1"); + t2 = NULL; + result = isc_task_create(taskmgr, 0, &t2); + check_result(result, "isc_task_create t2"); + + printf("task 1 = %p\n", t1); + printf("task 2 = %p\n", t2); + + create_view(); + + adb = view->adb; + + /* + * Lock the entire client list here. This will cause all events + * for found names to block as well. + */ + CLOCK(); + lookup("f.root-servers.net."); /* Should be in hints */ + lookup("www.iengines.com"); /* should fetch */ + lookup("www.isc.org"); /* should fetch */ + lookup("www.flame.org"); /* should fetch */ + lookup("kechara.flame.org."); /* should fetch */ + lookup("moghedien.flame.org."); /* should fetch */ + lookup("mailrelay.flame.org."); /* should fetch */ + lookup("ipv4v6.flame.org."); /* should fetch */ + lookup("nonexistant.flame.org."); /* should fail to be found */ + lookup("foobar.badns.flame.org."); /* should fail utterly (NS) */ + lookup("i.root-servers.net."); /* Should be in hints */ + lookup("www.firstcard.com."); + lookup("dns04.flame.org."); + CUNLOCK(); + + sleep(10); + + dns_adb_dump(adb, stderr); + + sleep(10); + + CLOCK(); + lookup("f.root-servers.net."); /* Should be in hints */ + lookup("www.iengines.com"); /* should fetch */ + lookup("www.isc.org"); /* should fetch */ + lookup("www.flame.org"); /* should fetch */ + lookup("kechara.flame.org."); /* should fetch */ + lookup("moghedien.flame.org."); /* should fetch */ + lookup("mailrelay.flame.org."); /* should fetch */ + lookup("ipv4v6.flame.org."); /* should fetch */ + lookup("nonexistant.flame.org."); /* should fail to be found */ + lookup("foobar.badns.flame.org."); /* should fail utterly (NS) */ + lookup("i.root-servers.net."); /* Should be in hints */ + CUNLOCK(); + + sleep(20); + + dns_adb_dump(adb, stderr); + + isc_task_detach(&t1); + isc_task_detach(&t2); + + isc_mem_stats(mctx, stdout); + dns_adb_dump(adb, stderr); + + isc_app_run(); + + dns_adb_dump(adb, stderr); + + dns_view_detach(&view); + adb = NULL; + + isc_socketmgr_destroy(&socketmgr); + isc_timermgr_destroy(&timermgr); + + fprintf(stderr, "Destroying task manager\n"); + isc_taskmgr_destroy(&taskmgr); + + isc_log_destroy(&lctx); + + isc_hash_destroy(); + isc_entropy_detach(&ectx); + + isc_mempool_destroy(&cmp); + isc_mem_stats(mctx, stdout); + isc_mem_destroy(&mctx); + + isc_app_finish(); + + return (0); +} diff --git a/bin/tests/b8t.mk b/bin/tests/b8t.mk new file mode 100644 index 0000000..55923dc --- /dev/null +++ b/bin/tests/b8t.mk @@ -0,0 +1,63 @@ +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 1999-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. + +# $Id: b8t.mk,v 1.11 2007/06/19 23:46:59 tbox Exp $ + +# +# bind 8 multi-host make +# PLATFORM set in the environment by cron +# + +MODULE = bind +BASE = /build +BDIR = $(BASE)/$(MODULE) +RDIR = /proj/build-reports/bind8/hosts/$(PLATFORM) +SDIR = $(HOME)/b8t/src +CVSROOT = /proj/cvs/isc + +all: clobber populate config build + +clobber: + @echo "CLOBBBER `date`" + @if test ! -d $(BASE) ; then mkdir -p $(BASE) ; fi + @rm -fr $(BDIR) + @echo "DONE `date`" + +populate: + @echo "POPULATE `date`" + @( cd $(BASE) && tar -xvf $(SDIR)/$(MODULE).tar ) > $(RDIR)/.populate 2>&1 + @echo "DONE `date`" + +tarsrc: + @echo "TARSRC `date`" + @rm -fr $(SDIR)/$(MODULE) + @( cd $(SDIR) && cvs -d $(CVSROOT) checkout $(MODULE) ) + @( cd $(SDIR) && tar -cvf $(MODULE).tar $(MODULE) ) + @echo "DONE `date`" + +config: + @echo "CONFIG `date`" + @( cd $(BDIR)/src && make SRC=$(BDIR)/src DST=$(BDIR)/dst links ) > $(RDIR)/.config 2>&1 + @echo "DONE `date`" + +build: + @echo "BUILD `date`" + @( cd $(BDIR)/dst && make -k clean depend all ) > $(RDIR)/.build 2>&1 + @echo "DONE `date`" + +test: + @echo "TEST `date`" + @touch $(RDIR)/.test + @echo "DONE `date`" diff --git a/bin/tests/b9t.mk b/bin/tests/b9t.mk new file mode 100644 index 0000000..96f04fb --- /dev/null +++ b/bin/tests/b9t.mk @@ -0,0 +1,68 @@ +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 1999-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. + +# $Id: b9t.mk,v 1.13 2007/06/19 23:46:59 tbox Exp $ + +# +# makefile to configure, build and test bind9 +# this is run by cron (user wpk) on aa, sol, irix, hp and aix +# $PLATFORM is set in the environment by cron +# + +BASE = /build +BDIR = $(BASE) +MODULE = bind9 +SDIR = $(HOME)/b9t/src + +# as it says +CVSROOT = /proj/cvs/isc + +# where the config, build and test output goes +RDIR = /proj/build-reports/$(MODULE)/hosts/$(PLATFORM) + +all: clobber populate config build test + +clobber: + @echo "CLOBBBER `date`" + @if test ! -d $(BDIR) ; then mkdir -p $(BDIR) > /dev/null 2>&1 ; fi + @( cd $(BDIR) && rm -fr $(MODULE) ) + @echo "DONE `date`" + +populate: + @echo "POPULATE `date`" + @( cd $(BDIR) && tar -xvf $(SDIR)/$(MODULE).tar ) > $(RDIR)/.populate 2>&1 + @echo "DONE `date`" + +config: + @echo "CONFIG `date`" + @( cd $(BDIR)/$(MODULE) && ./configure ) > $(RDIR)/.config 2>&1 + @echo "DONE `date`" + +build: + @echo "BUILD `date`" + @( cd $(BDIR)/$(MODULE) && $(MAKE) -k all ) > $(RDIR)/.build 2>&1 + @echo "DONE `date`" + +test: + @echo "TEST `date`" + -@( cd $(BDIR)/$(MODULE)/bin/tests && $(MAKE) test ) > $(RDIR)/.test 2>&1 + @echo "DONE `date`" + +tarsrc: + @echo "TARSRC `date`" + @rm -fr $(SDIR)/$(MODULE) + @( cd $(SDIR) && cvs -d $(CVSROOT) checkout $(MODULE) && tar -cvf $(MODULE).tar $(MODULE) ) + @echo "DONE `date`" + diff --git a/bin/tests/byaddr_test.c b/bin/tests/byaddr_test.c new file mode 100644 index 0000000..773b528 --- /dev/null +++ b/bin/tests/byaddr_test.c @@ -0,0 +1,267 @@ +/* + * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2000-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. + */ + +/* $Id: byaddr_test.c,v 1.28 2007/06/19 23:46:59 tbox Exp $ */ + +/*! \file + * \author + * Principal Author: Bob Halley + */ + +#include <config.h> + +#include <stdlib.h> + +#include <isc/app.h> +#include <isc/commandline.h> +#include <isc/mem.h> +#include <isc/netaddr.h> +#include <isc/task.h> +#include <isc/timer.h> +#include <isc/util.h> + +#include <dns/byaddr.h> +#include <dns/cache.h> +#include <dns/dispatch.h> +#include <dns/events.h> +#include <dns/forward.h> +#include <dns/resolver.h> +#include <dns/result.h> +#include <dns/view.h> + +static void +done(isc_task_t *task, isc_event_t *event) { + dns_byaddrevent_t *bevent; + dns_byaddr_t *byaddr; + dns_name_t *name; + + REQUIRE(event->ev_type == DNS_EVENT_BYADDRDONE); + bevent = (dns_byaddrevent_t *)event; + + UNUSED(task); + + printf("byaddr event result = %s\n", + isc_result_totext(bevent->result)); + + if (bevent->result == ISC_R_SUCCESS) { + for (name = ISC_LIST_HEAD(bevent->names); + name != NULL; + name = ISC_LIST_NEXT(name, link)) { + char text[DNS_NAME_FORMATSIZE]; + dns_name_format(name, text, sizeof(text)); + printf("%s\n", text); + } + } + + byaddr = event->ev_sender; + dns_byaddr_destroy(&byaddr); + isc_event_free(&event); + + isc_app_shutdown(); +} + +int +main(int argc, char *argv[]) { + isc_mem_t *mctx; + isc_boolean_t verbose = ISC_FALSE; + unsigned int workers = 2; + isc_taskmgr_t *taskmgr; + isc_task_t *task; + isc_timermgr_t *timermgr; + dns_view_t *view; + int ch; + isc_socketmgr_t *socketmgr; + dns_dispatchmgr_t *dispatchmgr; + isc_netaddr_t na; + dns_byaddr_t *byaddr; + isc_result_t result; + unsigned int options = 0; + dns_cache_t *cache; + + RUNTIME_CHECK(isc_app_start() == ISC_R_SUCCESS); + + dns_result_register(); + + mctx = NULL; + RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS); + + while ((ch = isc_commandline_parse(argc, argv, "nvw:")) != -1) { + switch (ch) { + case 'n': + /* + * We only try nibbles, so do nothing for this option. + */ + break; + case 'v': + verbose = ISC_TRUE; + break; + case 'w': + workers = (unsigned int)atoi(isc_commandline_argument); + break; + } + } + + if (verbose) { + printf("%u workers\n", workers); + printf("IPv4: %s\n", isc_result_totext(isc_net_probeipv4())); + printf("IPv6: %s\n", isc_result_totext(isc_net_probeipv6())); + } + + taskmgr = NULL; + RUNTIME_CHECK(isc_taskmgr_create(mctx, workers, 0, &taskmgr) + == ISC_R_SUCCESS); + task = NULL; + RUNTIME_CHECK(isc_task_create(taskmgr, 0, &task) + == ISC_R_SUCCESS); + isc_task_setname(task, "byaddr", NULL); + + dispatchmgr = NULL; + RUNTIME_CHECK(dns_dispatchmgr_create(mctx, NULL, &dispatchmgr) + == ISC_R_SUCCESS); + + timermgr = NULL; + RUNTIME_CHECK(isc_timermgr_create(mctx, &timermgr) == ISC_R_SUCCESS); + socketmgr = NULL; + RUNTIME_CHECK(isc_socketmgr_create(mctx, &socketmgr) == ISC_R_SUCCESS); + + cache = NULL; + RUNTIME_CHECK(dns_cache_create(mctx, taskmgr, timermgr, + dns_rdataclass_in, "rbt", 0, NULL, + &cache) == ISC_R_SUCCESS); + + view = NULL; + RUNTIME_CHECK(dns_view_create(mctx, dns_rdataclass_in, "default", + &view) == ISC_R_SUCCESS); + + { + unsigned int attrs; + dns_dispatch_t *disp4 = NULL; + dns_dispatch_t *disp6 = NULL; + + if (isc_net_probeipv4() == ISC_R_SUCCESS) { + isc_sockaddr_t any4; + + isc_sockaddr_any(&any4); + + attrs = DNS_DISPATCHATTR_IPV4 | DNS_DISPATCHATTR_UDP; + RUNTIME_CHECK(dns_dispatch_getudp(dispatchmgr, + socketmgr, + taskmgr, &any4, + 512, 6, 1024, + 17, 19, attrs, + attrs, &disp4) + == ISC_R_SUCCESS); + INSIST(disp4 != NULL); + } + + if (isc_net_probeipv6() == ISC_R_SUCCESS) { + isc_sockaddr_t any6; + + isc_sockaddr_any6(&any6); + + attrs = DNS_DISPATCHATTR_IPV6 | DNS_DISPATCHATTR_UDP; + RUNTIME_CHECK(dns_dispatch_getudp(dispatchmgr, + socketmgr, + taskmgr, &any6, + 512, 6, 1024, + 17, 19, attrs, + attrs, &disp6) + == ISC_R_SUCCESS); + INSIST(disp6 != NULL); + } + + RUNTIME_CHECK(dns_view_createresolver(view, taskmgr, 10, + socketmgr, + timermgr, 0, + dispatchmgr, + disp4, disp6) == + ISC_R_SUCCESS); + + if (disp4 != NULL) + dns_dispatch_detach(&disp4); + if (disp6 != NULL) + dns_dispatch_detach(&disp6); + } + + { + struct in_addr ina; + isc_sockaddr_t sa; + isc_sockaddrlist_t sal; + + ISC_LIST_INIT(sal); + ina.s_addr = inet_addr("127.0.0.1"); + isc_sockaddr_fromin(&sa, &ina, 53); + ISC_LIST_APPEND(sal, &sa, link); + + RUNTIME_CHECK(dns_fwdtable_add(view->fwdtable, dns_rootname, + &sal, dns_fwdpolicy_only) + == ISC_R_SUCCESS); + } + + dns_view_setcache(view, cache); + dns_view_freeze(view); + + dns_cache_detach(&cache); + + printf("address = %s\n", argv[isc_commandline_index]); + na.family = AF_INET; + if (inet_pton(AF_INET, argv[isc_commandline_index], + (char *)&na.type.in) != 1) { + na.family = AF_INET6; + if (inet_pton(AF_INET6, argv[isc_commandline_index], + (char *)&na.type.in6) != 1) { + printf("unknown address format\n"); + exit(1); + } + } + + result = dns_byaddr_create(mctx, &na, view, options, task, + done, NULL, &byaddr); + if (result != ISC_R_SUCCESS) { + printf("dns_byaddr_create() returned %s\n", + isc_result_totext(result)); + RUNTIME_CHECK(0); + } + + (void)isc_app_run(); + + /* + * XXXRTH if we get a control-C before we get to isc_app_run(), + * we're in trouble (because we might try to destroy things before + * they've been created. + */ + + dns_view_detach(&view); + + isc_task_shutdown(task); + isc_task_detach(&task); + + dns_dispatchmgr_destroy(&dispatchmgr); + + isc_taskmgr_destroy(&taskmgr); + + isc_socketmgr_destroy(&socketmgr); + isc_timermgr_destroy(&timermgr); + + if (verbose) + isc_mem_stats(mctx, stdout); + isc_mem_destroy(&mctx); + + isc_app_finish(); + + return (0); +} diff --git a/bin/tests/byname_test.c b/bin/tests/byname_test.c new file mode 100644 index 0000000..fdf45a9 --- /dev/null +++ b/bin/tests/byname_test.c @@ -0,0 +1,376 @@ +/* + * Copyright (C) 2004, 2005, 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. + */ + +/* $Id: byname_test.c,v 1.31 2007/06/19 23:46:59 tbox Exp $ */ + +/*! \file + * \author + * Principal Author: Bob Halley + */ + +#include <config.h> + +#include <stdlib.h> +#include <string.h> + +#include <isc/app.h> +#include <isc/commandline.h> +#include <isc/entropy.h> +#include <isc/hash.h> +#include <isc/netaddr.h> +#include <isc/task.h> +#include <isc/timer.h> +#include <isc/util.h> + +#include <dns/adb.h> +#include <dns/cache.h> +#include <dns/dispatch.h> +#include <dns/events.h> +#include <dns/forward.h> +#include <dns/log.h> +#include <dns/resolver.h> +#include <dns/result.h> + +static isc_mem_t *mctx = NULL; +static isc_entropy_t *ectx = NULL; +static isc_taskmgr_t *taskmgr; +static dns_view_t *view = NULL; +static dns_adbfind_t *find = NULL; +static isc_task_t *task = NULL; +static dns_fixedname_t name; +static dns_fixedname_t target; +static isc_log_t *lctx; +static isc_logconfig_t *lcfg; +static unsigned int level = 0; + +static void adb_callback(isc_task_t *task, isc_event_t *event); + +static void +log_init(void) { + isc_logdestination_t destination; + unsigned int flags; + + /* + * Setup a logging context. + */ + RUNTIME_CHECK(isc_log_create(mctx, &lctx, &lcfg) == ISC_R_SUCCESS); + isc_log_setcontext(lctx); + dns_log_init(lctx); + dns_log_setcontext(lctx); + + /* + * Create and install the default channel. + */ + destination.file.stream = stderr; + destination.file.name = NULL; + destination.file.versions = ISC_LOG_ROLLNEVER; + destination.file.maximum_size = 0; + flags = ISC_LOG_PRINTTIME; + RUNTIME_CHECK(isc_log_createchannel(lcfg, "_default", + ISC_LOG_TOFILEDESC, + ISC_LOG_DYNAMIC, + &destination, flags) == + ISC_R_SUCCESS); + RUNTIME_CHECK(isc_log_usechannel(lcfg, "_default", NULL, NULL) == + ISC_R_SUCCESS); + isc_log_setdebuglevel(lctx, level); +} + +static void +print_addresses(dns_adbfind_t *find) { + dns_adbaddrinfo_t *address; + + for (address = ISC_LIST_HEAD(find->list); + address != NULL; + address = ISC_LIST_NEXT(address, publink)) { + isc_netaddr_t netaddr; + char text[ISC_NETADDR_FORMATSIZE]; + isc_netaddr_fromsockaddr(&netaddr, &address->sockaddr); + isc_netaddr_format(&netaddr, text, sizeof(text)); + printf("%s\n", text); + } +} + +static void +print_name(dns_name_t *name) { + char text[DNS_NAME_FORMATSIZE]; + + dns_name_format(name, text, sizeof(text)); + printf("%s\n", text); +} + +static void +do_find(isc_boolean_t want_event) { + isc_result_t result; + isc_boolean_t done = ISC_FALSE; + unsigned int options; + + options = DNS_ADBFIND_INET | DNS_ADBFIND_INET6; + if (want_event) + options |= DNS_ADBFIND_WANTEVENT | DNS_ADBFIND_EMPTYEVENT; + dns_fixedname_init(&target); + result = dns_adb_createfind(view->adb, task, adb_callback, NULL, + dns_fixedname_name(&name), + dns_rootname, 0, options, 0, + dns_fixedname_name(&target), 0, + &find); + if (result == ISC_R_SUCCESS) { + if (!ISC_LIST_EMPTY(find->list)) { + /* + * We have at least some of the addresses for the + * name. + */ + INSIST((find->options & DNS_ADBFIND_WANTEVENT) == 0); + print_addresses(find); + done = ISC_TRUE; + } else { + /* + * We don't know any of the addresses for this + * name. + */ + if ((find->options & DNS_ADBFIND_WANTEVENT) == 0) { + /* + * And ADB isn't going to send us any events + * either. This query loses. + */ + done = ISC_TRUE; + } + /* + * If the DNS_ADBFIND_WANTEVENT flag was set, we'll + * get an event when something happens. + */ + } + } else if (result == DNS_R_ALIAS) { + print_name(dns_fixedname_name(&target)); + done = ISC_TRUE; + } else { + printf("dns_adb_createfind() returned %s\n", + isc_result_totext(result)); + done = ISC_TRUE; + } + + if (done) { + if (find != NULL) + dns_adb_destroyfind(&find); + isc_app_shutdown(); + } +} + +static void +adb_callback(isc_task_t *etask, isc_event_t *event) { + unsigned int type = event->ev_type; + + REQUIRE(etask == task); + + isc_event_free(&event); + dns_adb_destroyfind(&find); + + if (type == DNS_EVENT_ADBMOREADDRESSES) + do_find(ISC_FALSE); + else if (type == DNS_EVENT_ADBNOMOREADDRESSES) { + printf("no more addresses\n"); + isc_app_shutdown(); + } else { + printf("unexpected ADB event type %u\n", type); + isc_app_shutdown(); + } +} + +static void +run(isc_task_t *task, isc_event_t *event) { + UNUSED(task); + do_find(ISC_TRUE); + isc_event_free(&event); +} + +int +main(int argc, char *argv[]) { + isc_boolean_t verbose = ISC_FALSE; + unsigned int workers = 2; + isc_timermgr_t *timermgr; + int ch; + isc_socketmgr_t *socketmgr; + dns_dispatchmgr_t *dispatchmgr; + dns_cache_t *cache; + isc_buffer_t b; + + RUNTIME_CHECK(isc_app_start() == ISC_R_SUCCESS); + + dns_result_register(); + + mctx = NULL; + RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS); + + RUNTIME_CHECK(isc_entropy_create(mctx, &ectx) == ISC_R_SUCCESS); + RUNTIME_CHECK(isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE) + == ISC_R_SUCCESS); + + while ((ch = isc_commandline_parse(argc, argv, "d:vw:")) != -1) { + switch (ch) { + case 'd': + level = (unsigned int)atoi(isc_commandline_argument); + break; + case 'v': + verbose = ISC_TRUE; + break; + case 'w': + workers = (unsigned int)atoi(isc_commandline_argument); + break; + } + } + + log_init(); + + if (verbose) { + printf("%u workers\n", workers); + printf("IPv4: %s\n", isc_result_totext(isc_net_probeipv4())); + printf("IPv6: %s\n", isc_result_totext(isc_net_probeipv6())); + } + + taskmgr = NULL; + RUNTIME_CHECK(isc_taskmgr_create(mctx, workers, 0, &taskmgr) == + ISC_R_SUCCESS); + task = NULL; + RUNTIME_CHECK(isc_task_create(taskmgr, 0, &task) == + ISC_R_SUCCESS); + isc_task_setname(task, "byname", NULL); + + dispatchmgr = NULL; + RUNTIME_CHECK(dns_dispatchmgr_create(mctx, NULL, &dispatchmgr) + == ISC_R_SUCCESS); + + timermgr = NULL; + RUNTIME_CHECK(isc_timermgr_create(mctx, &timermgr) == ISC_R_SUCCESS); + socketmgr = NULL; + RUNTIME_CHECK(isc_socketmgr_create(mctx, &socketmgr) == ISC_R_SUCCESS); + + cache = NULL; + RUNTIME_CHECK(dns_cache_create(mctx, taskmgr, timermgr, + dns_rdataclass_in, "rbt", 0, NULL, + &cache) == ISC_R_SUCCESS); + + view = NULL; + RUNTIME_CHECK(dns_view_create(mctx, dns_rdataclass_in, "default", + &view) == ISC_R_SUCCESS); + + { + unsigned int attrs; + dns_dispatch_t *disp4 = NULL; + dns_dispatch_t *disp6 = NULL; + + if (isc_net_probeipv4() == ISC_R_SUCCESS) { + isc_sockaddr_t any4; + isc_sockaddr_any(&any4); + + attrs = DNS_DISPATCHATTR_IPV4 | DNS_DISPATCHATTR_UDP; + RUNTIME_CHECK(dns_dispatch_getudp(dispatchmgr, + socketmgr, + taskmgr, &any4, + 512, 6, 1024, + 17, 19, attrs, + attrs, &disp4) + == ISC_R_SUCCESS); + INSIST(disp4 != NULL); + } + + if (isc_net_probeipv6() == ISC_R_SUCCESS) { + isc_sockaddr_t any6; + + isc_sockaddr_any6(&any6); + + attrs = DNS_DISPATCHATTR_IPV6 | DNS_DISPATCHATTR_UDP; + RUNTIME_CHECK(dns_dispatch_getudp(dispatchmgr, + socketmgr, + taskmgr, &any6, + 512, 6, 1024, + 17, 19, attrs, + attrs, &disp6) + == ISC_R_SUCCESS); + INSIST(disp6 != NULL); + } + + RUNTIME_CHECK(dns_view_createresolver(view, taskmgr, 10, + socketmgr, + timermgr, 0, + dispatchmgr, + disp4, disp6) == + ISC_R_SUCCESS); + + if (disp4 != NULL) + dns_dispatch_detach(&disp4); + if (disp6 != NULL) + dns_dispatch_detach(&disp6); + } + + { + struct in_addr ina; + isc_sockaddr_t sa; + isc_sockaddrlist_t sal; + + ISC_LIST_INIT(sal); + ina.s_addr = inet_addr("127.0.0.1"); + isc_sockaddr_fromin(&sa, &ina, 53); + ISC_LIST_APPEND(sal, &sa, link); + + RUNTIME_CHECK(dns_fwdtable_add(view->fwdtable, dns_rootname, + &sal, dns_fwdpolicy_only) + == ISC_R_SUCCESS); + } + + dns_view_setcache(view, cache); + dns_view_freeze(view); + + dns_cache_detach(&cache); + + printf("name = %s\n", argv[isc_commandline_index]); + isc_buffer_init(&b, argv[isc_commandline_index], + strlen(argv[isc_commandline_index])); + isc_buffer_add(&b, strlen(argv[isc_commandline_index])); + dns_fixedname_init(&name); + dns_fixedname_init(&target); + RUNTIME_CHECK(dns_name_fromtext(dns_fixedname_name(&name), &b, + dns_rootname, ISC_FALSE, NULL) == + ISC_R_SUCCESS); + + RUNTIME_CHECK(isc_app_onrun(mctx, task, run, NULL) == ISC_R_SUCCESS); + + (void)isc_app_run(); + + dns_view_detach(&view); + isc_task_shutdown(task); + isc_task_detach(&task); + + dns_dispatchmgr_destroy(&dispatchmgr); + + isc_taskmgr_destroy(&taskmgr); + + isc_socketmgr_destroy(&socketmgr); + isc_timermgr_destroy(&timermgr); + + isc_log_destroy(&lctx); + + isc_hash_destroy(); + isc_entropy_detach(&ectx); + + if (verbose) + isc_mem_stats(mctx, stdout); + isc_mem_destroy(&mctx); + + isc_app_finish(); + + return (0); +} diff --git a/bin/tests/cfg_test.c b/bin/tests/cfg_test.c new file mode 100644 index 0000000..77c9712 --- /dev/null +++ b/bin/tests/cfg_test.c @@ -0,0 +1,151 @@ +/* + * Copyright (C) 2004, 2005, 2007 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. + */ + +/* $Id: cfg_test.c,v 1.19 2007/06/19 23:46:59 tbox Exp $ */ + +/*! \file */ + +#include <config.h> + +#include <errno.h> +#include <stdlib.h> + +#include <isc/mem.h> +#include <isc/string.h> +#include <isc/util.h> + +#include <isccfg/namedconf.h> + +#include <dns/log.h> + +static void +check_result(isc_result_t result, const char *format, ...) { + va_list args; + + if (result == ISC_R_SUCCESS) + return; + + va_start(args, format); + vfprintf(stderr, format, args); + va_end(args); + fprintf(stderr, ": %s\n", isc_result_totext(result)); + exit(1); +} + +static void +output(void *closure, const char *text, int textlen) { + UNUSED(closure); + (void) fwrite(text, 1, textlen, stdout); +} + +static void +usage(void) { + fprintf(stderr, "usage: cfg_test --rndc|--named " + "[--grammar] [--memstats] conffile\n"); + exit(1); +} + +int +main(int argc, char **argv) { + isc_result_t result; + isc_mem_t *mctx = NULL; + isc_log_t *lctx = NULL; + isc_logconfig_t *lcfg = NULL; + isc_logdestination_t destination; + cfg_parser_t *pctx = NULL; + cfg_obj_t *cfg = NULL; + cfg_type_t *type = NULL; + isc_boolean_t grammar = ISC_FALSE; + isc_boolean_t memstats = ISC_FALSE; + char *filename = NULL; + + RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS); + + result = isc_log_create(mctx, &lctx, &lcfg); + check_result(result, "isc_log_create()"); + isc_log_setcontext(lctx); + + /* + * Create and install the default channel. + */ + destination.file.stream = stderr; + destination.file.name = NULL; + destination.file.versions = ISC_LOG_ROLLNEVER; + destination.file.maximum_size = 0; + result = isc_log_createchannel(lcfg, "_default", + ISC_LOG_TOFILEDESC, + ISC_LOG_DYNAMIC, + &destination, ISC_LOG_PRINTTIME); + check_result(result, "isc_log_createchannel()"); + result = isc_log_usechannel(lcfg, "_default", NULL, NULL); + check_result(result, "isc_log_usechannel()"); + + /* + * Set the initial debug level. + */ + isc_log_setdebuglevel(lctx, 2); + + if (argc < 3) + usage(); + + while (argc > 1) { + if (strcmp(argv[1], "--grammar") == 0) { + grammar = ISC_TRUE; + } else if (strcmp(argv[1], "--memstats") == 0) { + memstats = ISC_TRUE; + } else if (strcmp(argv[1], "--named") == 0) { + type = &cfg_type_namedconf; + } else if (strcmp(argv[1], "--rndc") == 0) { + type = &cfg_type_rndcconf; + } else if (argv[1][0] == '-') { + usage(); + } else { + filename = argv[1]; + } + argv++, argc--; + } + + if (grammar) { + if (type == NULL) + usage(); + cfg_print_grammar(type, output, NULL); + } else { + if (type == NULL || filename == NULL) + usage(); + RUNTIME_CHECK(cfg_parser_create(mctx, lctx, &pctx) == ISC_R_SUCCESS); + + result = cfg_parse_file(pctx, filename, type, &cfg); + + fprintf(stderr, "read config: %s\n", isc_result_totext(result)); + + if (result != ISC_R_SUCCESS) + exit(1); + + cfg_print(cfg, output, NULL); + + cfg_obj_destroy(pctx, &cfg); + + cfg_parser_destroy(&pctx); + } + + isc_log_destroy(&lctx); + if (memstats) + isc_mem_stats(mctx, stderr); + isc_mem_destroy(&mctx); + + return (0); +} diff --git a/bin/tests/compress_test.c b/bin/tests/compress_test.c new file mode 100644 index 0000000..8284dc1 --- /dev/null +++ b/bin/tests/compress_test.c @@ -0,0 +1,194 @@ +/* + * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1999-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. + */ + +/* $Id: compress_test.c,v 1.34 2007/06/18 23:47:26 tbox Exp $ */ + +/*! \file */ + +#include <config.h> + +#include <stdlib.h> +#include <string.h> + +#include <isc/buffer.h> +#include <isc/commandline.h> +#include <isc/mem.h> +#include <isc/util.h> + +#include <dns/compress.h> +#include <dns/name.h> + +unsigned char plain1[] = "\003yyy\003foo"; +unsigned char plain2[] = "\003bar\003yyy\003foo"; +unsigned char plain3[] = "\003xxx\003bar\003foo"; +unsigned char plain[] = "\003yyy\003foo\0\003bar\003yyy\003foo\0\003" + "bar\003yyy\003foo\0\003xxx\003bar\003foo"; + +/* + * Result concatenate (plain1, plain2, plain2, plain3). + */ +int raw = 0; +int verbose = 0; + +void +test(unsigned int, dns_name_t *, dns_name_t *, dns_name_t *, + unsigned char *, unsigned int); + +int +main(int argc, char *argv[]) { + dns_name_t name1; + dns_name_t name2; + dns_name_t name3; + isc_region_t region; + int c; + + while ((c = isc_commandline_parse(argc, argv, "rv")) != -1) { + switch (c) { + case 'r': + raw++; + break; + case 'v': + verbose++; + break; + } + } + + dns_name_init(&name1, NULL); + region.base = plain1; + region.length = sizeof(plain1); + dns_name_fromregion(&name1, ®ion); + + dns_name_init(&name2, NULL); + region.base = plain2; + region.length = sizeof(plain2); + dns_name_fromregion(&name2, ®ion); + + dns_name_init(&name3, NULL); + region.base = plain3; + region.length = sizeof(plain3); + dns_name_fromregion(&name3, ®ion); + + test(DNS_COMPRESS_NONE, &name1, &name2, &name3, plain, sizeof(plain)); + test(DNS_COMPRESS_GLOBAL14, &name1, &name2, &name3, plain, + sizeof(plain)); + test(DNS_COMPRESS_ALL, &name1, &name2, &name3, plain, sizeof(plain)); + + return (0); +} + +void +test(unsigned int allowed, dns_name_t *name1, dns_name_t *name2, + dns_name_t *name3, unsigned char *result, unsigned int length) +{ + isc_mem_t *mctx = NULL; + dns_compress_t cctx; + dns_decompress_t dctx; + isc_buffer_t source; + isc_buffer_t target; + dns_name_t name; + unsigned char buf1[1024]; + unsigned char buf2[1024]; + + if (verbose) { + const char *s; + switch (allowed) { + case DNS_COMPRESS_NONE: s = "DNS_COMPRESS_NONE"; break; + case DNS_COMPRESS_GLOBAL14: s = "DNS_COMPRESS_GLOBAL14"; break; + /* case DNS_COMPRESS_ALL: s = "DNS_COMPRESS_ALL"; break; */ + default: s = "UNKNOWN"; break; + } + fprintf(stdout, "Allowed = %s\n", s); + } + RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS); + isc_buffer_init(&source, buf1, sizeof(buf1)); + RUNTIME_CHECK(dns_compress_init(&cctx, -1, mctx) == ISC_R_SUCCESS); + + RUNTIME_CHECK(dns_name_towire(name1, &cctx, &source) == ISC_R_SUCCESS); + + /* + RUNTIME_CHECK(dns_compress_localinit(&cctx, name1, &source) == + ISC_R_SUCCESS); + */ + dns_compress_setmethods(&cctx, allowed); + RUNTIME_CHECK(dns_name_towire(name2, &cctx, &source) == ISC_R_SUCCESS); + RUNTIME_CHECK(dns_name_towire(name2, &cctx, &source) == ISC_R_SUCCESS); + RUNTIME_CHECK(dns_name_towire(name3, &cctx, &source) == ISC_R_SUCCESS); + + /* + dns_compress_localinvalidate(&cctx); + */ + dns_compress_rollback(&cctx, 0); /* testing only */ + dns_compress_invalidate(&cctx); + + if (raw) { + unsigned int i; + for (i = 0; i < source.used; /* */ ) { + fprintf(stdout, "%02x", + ((unsigned char *)source.base)[i]); + if ((++i % 20) == 0) + fputs("\n", stdout); + else + if (i == source.used) + fputs("\n", stdout); + else + fputs(" ", stdout); + } + } + + isc_buffer_setactive(&source, source.used); + isc_buffer_init(&target, buf2, sizeof(buf2)); + dns_decompress_init(&dctx, -1, DNS_DECOMPRESS_STRICT); + + dns_name_init(&name, NULL); + RUNTIME_CHECK(dns_name_fromwire(&name, &source, &dctx, ISC_FALSE, + &target) == ISC_R_SUCCESS); + dns_decompress_setmethods(&dctx, allowed); + /* + dns_decompress_localinit(&dctx, &name, &source); + */ + RUNTIME_CHECK(dns_name_fromwire(&name, &source, &dctx, ISC_FALSE, + &target) == ISC_R_SUCCESS); + RUNTIME_CHECK(dns_name_fromwire(&name, &source, &dctx, ISC_FALSE, + &target) == ISC_R_SUCCESS); + RUNTIME_CHECK(dns_name_fromwire(&name, &source, &dctx, ISC_FALSE, + &target) == ISC_R_SUCCESS); + /* + dns_decompress_localinvalidate(&dctx); + */ + dns_decompress_invalidate(&dctx); + + if (raw) { + unsigned int i; + for (i = 0; i < target.used; /* */ ) { + fprintf(stdout, "%02x", + ((unsigned char *)target.base)[i]); + if ((++i % 20) == 0) + fputs("\n", stdout); + else + if (i == target.used) + fputs("\n", stdout); + else + fputs(" ", stdout); + } + fputs("\n", stdout); + fflush(stdout); + } + + RUNTIME_CHECK(target.used == length); + RUNTIME_CHECK(memcmp(target.base, result, target.used) == 0); + isc_mem_destroy(&mctx); +} diff --git a/bin/tests/db/Makefile.in b/bin/tests/db/Makefile.in new file mode 100644 index 0000000..13ebad2 --- /dev/null +++ b/bin/tests/db/Makefile.in @@ -0,0 +1,57 @@ +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 1999-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. + +# $Id: Makefile.in,v 1.29 2007/06/19 23:46:59 tbox Exp $ + +srcdir = @srcdir@ +VPATH = @srcdir@ +top_srcdir = @top_srcdir@ + +@BIND9_MAKE_INCLUDES@ + +CINCLUDES = ${TEST_INCLUDES} ${DNS_INCLUDES} ${ISC_INCLUDES} + +CDEFINES = +CWARNINGS = + +DNSLIBS = ../../../lib/dns/libdns.@A@ @DNS_CRYPTO_LIBS@ +ISCLIBS = ../../../lib/isc/libisc.@A@ + +DNSDEPLIBS = ../../../lib/dns/libdns.@A@ +ISCDEPLIBS = ../../../lib/isc/libisc.@A@ + +DEPLIBS = ${DNSDEPLIBS} ${ISCDEPLIBS} + +LIBS = ${DNSLIBS} ${ISCLIBS} @LIBS@ + +TLIB = ../../../lib/tests/libt_api.@A@ + +SRCS = t_db.c + +TARGETS = t_db@EXEEXT@ + +@BIND9_MAKE_RULES@ + +t_db@EXEEXT@: t_db.@O@ ${DEPLIBS} ${TLIB} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ t_db.@O@ ${TLIB} ${LIBS} + +test: t_db@EXEEXT@ + -@./t_db@EXEEXT@ -c @top_srcdir@/t_config -b @srcdir@ -a + +testhelp: + @./t_db -h + +clean distclean:: + rm -f ${TARGETS} diff --git a/bin/tests/db/dns_db_class_1.data b/bin/tests/db/dns_db_class_1.data new file mode 100644 index 0000000..ab61c95 --- /dev/null +++ b/bin/tests/db/dns_db_class_1.data @@ -0,0 +1,11 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +a in ns ns.vix.com. +a in ns ns2.vix.com. +a in ns ns3.vix.com. +b in a 1.2.3.4 diff --git a/bin/tests/db/dns_db_class_data b/bin/tests/db/dns_db_class_data new file mode 100644 index 0000000..55a0cf8 --- /dev/null +++ b/bin/tests/db/dns_db_class_data @@ -0,0 +1,9 @@ +# +# test data for dns_db_class +# +# format: +# filename class +# +# +dns_db_class_1.data in +# dns_db_class_1.data any diff --git a/bin/tests/db/dns_db_closeversion_1.data b/bin/tests/db/dns_db_closeversion_1.data new file mode 100644 index 0000000..ab61c95 --- /dev/null +++ b/bin/tests/db/dns_db_closeversion_1.data @@ -0,0 +1,11 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +a in ns ns.vix.com. +a in ns ns2.vix.com. +a in ns ns3.vix.com. +b in a 1.2.3.4 diff --git a/bin/tests/db/dns_db_closeversion_1_data b/bin/tests/db/dns_db_closeversion_1_data new file mode 100644 index 0000000..7bfd5b0 --- /dev/null +++ b/bin/tests/db/dns_db_closeversion_1_data @@ -0,0 +1,7 @@ +# +# test data for dns_db_closeversion test 1 +# +# format: +# filename type origin class cache new_name new_type existing_name existing_type +# +dns_db_closeversion_1.data rbt vix.com. in zone a.b.c.vix.com. A a.vix.com. NS diff --git a/bin/tests/db/dns_db_closeversion_2.data b/bin/tests/db/dns_db_closeversion_2.data new file mode 100644 index 0000000..ab61c95 --- /dev/null +++ b/bin/tests/db/dns_db_closeversion_2.data @@ -0,0 +1,11 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +a in ns ns.vix.com. +a in ns ns2.vix.com. +a in ns ns3.vix.com. +b in a 1.2.3.4 diff --git a/bin/tests/db/dns_db_closeversion_2_data b/bin/tests/db/dns_db_closeversion_2_data new file mode 100644 index 0000000..e5bcf4d --- /dev/null +++ b/bin/tests/db/dns_db_closeversion_2_data @@ -0,0 +1,7 @@ +# +# test data for dns_db_closeversion test 2 +# +# format: +# filename type origin class cache new_name new_type existing_name existing_type +# +dns_db_closeversion_1.data rbt vix.com. in zone a.b.c.vix.com. A a.vix.com. NS diff --git a/bin/tests/db/dns_db_currentversion.data b/bin/tests/db/dns_db_currentversion.data new file mode 100644 index 0000000..b7cb868 --- /dev/null +++ b/bin/tests/db/dns_db_currentversion.data @@ -0,0 +1,11 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +a.b.c.vix.com. a 1.2.3.4 +a in ns ns2.vix.com. +a in ns ns3.vix.com. +b in a 1.2.3.4 diff --git a/bin/tests/db/dns_db_currentversion_data b/bin/tests/db/dns_db_currentversion_data new file mode 100644 index 0000000..e4a095e --- /dev/null +++ b/bin/tests/db/dns_db_currentversion_data @@ -0,0 +1,7 @@ +# +# test data for dns_db_currentversion +# +# format: +# filename findname findtype +# +dns_db_currentversion.data rbt vix.com. IN zone a.b.c.vix.com. A diff --git a/bin/tests/db/dns_db_expirenode.data b/bin/tests/db/dns_db_expirenode.data new file mode 100644 index 0000000..ab61c95 --- /dev/null +++ b/bin/tests/db/dns_db_expirenode.data @@ -0,0 +1,11 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +a in ns ns.vix.com. +a in ns ns2.vix.com. +a in ns ns3.vix.com. +b in a 1.2.3.4 diff --git a/bin/tests/db/dns_db_expirenode_data b/bin/tests/db/dns_db_expirenode_data new file mode 100644 index 0000000..f51858a --- /dev/null +++ b/bin/tests/db/dns_db_expirenode_data @@ -0,0 +1,7 @@ +# +# test data for dns_db_expirenode +# +# format: +# filename type origin class existing_name existing_type +# +dns_db_expirenode.data rbt vix.com. in a.vix.com. 10000 0 ISC_R_NOTFOUND diff --git a/bin/tests/db/dns_db_find_1.data b/bin/tests/db/dns_db_find_1.data new file mode 100644 index 0000000..8cfc69c --- /dev/null +++ b/bin/tests/db/dns_db_find_1.data @@ -0,0 +1,12 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +a in ns ns.vix.com. +a in ns ns2.vix.com. +a in ns ns3.vix.com. +b in a 1.2.3.4 +a.b.c in ns b diff --git a/bin/tests/db/dns_db_find_10.data b/bin/tests/db/dns_db_find_10.data new file mode 100644 index 0000000..ca1fc5e --- /dev/null +++ b/bin/tests/db/dns_db_find_10.data @@ -0,0 +1,10 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum + +a.b.c in NS ns1.vix.com. +a.b.c in A 1.2.3.4 diff --git a/bin/tests/db/dns_db_find_10_data b/bin/tests/db/dns_db_find_10_data new file mode 100644 index 0000000..d1ab1d3 --- /dev/null +++ b/bin/tests/db/dns_db_find_10_data @@ -0,0 +1,8 @@ +# +# test data for dns_db_find expiration time handling +# +# format: +# dbfile dbtype dborigin dbclass dbcache findname findtype findopts findtime expected_results +# +dns_db_find_10.data rbt vix.com. in cache a.b.c.vix.com. NS 0 1010 ISC_R_NOTFOUND +dns_db_find_10.data rbt vix.com. in cache a.b.c.vix.com. NS 0 0 ISC_R_SUCCESS diff --git a/bin/tests/db/dns_db_find_1_data b/bin/tests/db/dns_db_find_1_data new file mode 100644 index 0000000..e1664cf --- /dev/null +++ b/bin/tests/db/dns_db_find_1_data @@ -0,0 +1,7 @@ +# +# test data for dns_db_find best match +# +# format: +# dbfile dbtype dborigin dbclass dbcache findname findtype findopts findtime expected_results +# +dns_db_find_1.data rbt vix.com. in zone a.b.c.vix.com. NS DNS_DB_GLUEOK 0 DNS_R_DELEGATION diff --git a/bin/tests/db/dns_db_find_2.data b/bin/tests/db/dns_db_find_2.data new file mode 100644 index 0000000..ab4b435 --- /dev/null +++ b/bin/tests/db/dns_db_find_2.data @@ -0,0 +1,9 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +fx in ns a.fx.vix.com. +a.fx in a 1.2.3.4 diff --git a/bin/tests/db/dns_db_find_2_data b/bin/tests/db/dns_db_find_2_data new file mode 100644 index 0000000..0e3ffca --- /dev/null +++ b/bin/tests/db/dns_db_find_2_data @@ -0,0 +1,9 @@ +# +# test data for dns_db_find DNS_R_GLUE +# +# format: +# dbfile dbtype dborigin dbclass dbcache findname findtype findopts findtime expected_results +# +dns_db_find_2.data rbt vix.com. in zone a.fx.vix.com. A DNS_DBFIND_GLUEOK 0 DNS_R_GLUE +dns_db_find_2.data rbt vix.com. in zone fx.vix.com. NS DNS_DBFIND_GLUEOK 0 DNS_R_GLUE +dns_db_find_2.data rbt vix.com. in zone a.fx.vix.com. NS DNS_DBFIND_GLUEOK 0 DNS_R_DELEGATION diff --git a/bin/tests/db/dns_db_find_3.data b/bin/tests/db/dns_db_find_3.data new file mode 100644 index 0000000..d126e91 --- /dev/null +++ b/bin/tests/db/dns_db_find_3.data @@ -0,0 +1,10 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +a.b.c in ns b +a.a.b.c in a 10.0.0.1 +b in a 10.0.0.2 diff --git a/bin/tests/db/dns_db_find_3_data b/bin/tests/db/dns_db_find_3_data new file mode 100644 index 0000000..a8e1223 --- /dev/null +++ b/bin/tests/db/dns_db_find_3_data @@ -0,0 +1,9 @@ +# +# test data for dns_db_find DNS_R_DELAGATION +# +# format: +# dbfile dbtype dborigin dbclass dbcache findname findtype findopts findtime expected_results +# +dns_db_find_3.data rbt vix.com. in zone a.b.c.vix.com. NS DNS_DB_GLUEOK 0 DNS_R_DELEGATION +dns_db_find_3.data rbt vix.com. in zone a.a.b.c.vix.com. NS DNS_DB_GLUEOK 0 DNS_R_DELEGATION +dns_db_find_3.data rbt vix.com. in zone a.a.b.c.vix.com. A DNS_DB_GLUEOK 0 DNS_R_DELEGATION diff --git a/bin/tests/db/dns_db_find_4.data b/bin/tests/db/dns_db_find_4.data new file mode 100644 index 0000000..4c3b5e9 --- /dev/null +++ b/bin/tests/db/dns_db_find_4.data @@ -0,0 +1,9 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +a.b.c in ns b +b.a.b.c in a 10.0.0.2 diff --git a/bin/tests/db/dns_db_find_4_data b/bin/tests/db/dns_db_find_4_data new file mode 100644 index 0000000..b0326a6 --- /dev/null +++ b/bin/tests/db/dns_db_find_4_data @@ -0,0 +1,7 @@ +# +# test data for dns_db_find DNS_R_DELEGATION +# +# format: +# dbfile dbtype dborigin dbclass dbcache findname findtype findopts findtime expected_results +# +dns_db_find_4.data rbt vix.com. in zone a.b.c.vix.com. ANY 0 0 DNS_R_DELEGATION diff --git a/bin/tests/db/dns_db_find_5.data b/bin/tests/db/dns_db_find_5.data new file mode 100644 index 0000000..e33f631 --- /dev/null +++ b/bin/tests/db/dns_db_find_5.data @@ -0,0 +1,10 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +a.b.c in DNAME x.y.z +a.x.y.z in A 1.2.3.4 + diff --git a/bin/tests/db/dns_db_find_5_data b/bin/tests/db/dns_db_find_5_data new file mode 100644 index 0000000..dab47c8 --- /dev/null +++ b/bin/tests/db/dns_db_find_5_data @@ -0,0 +1,8 @@ +# +# test data for dns_db_find DNS_R_DNAME +# +# format: +# dbfile dbtype dborigin dbclass dbcache findname findtype findopts findtime expected_results +# +dns_db_find_5.data rbt vix.com. in zone x.a.b.c.vix.com. ANY 0 0 DNS_R_DNAME +dns_db_find_5.data rbt vix.com. in zone a.a.b.c.vix.com. ANY 0 0 DNS_R_DNAME diff --git a/bin/tests/db/dns_db_find_6.data b/bin/tests/db/dns_db_find_6.data new file mode 100644 index 0000000..108f043 --- /dev/null +++ b/bin/tests/db/dns_db_find_6.data @@ -0,0 +1,10 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +exploder in CNAME mx +mx in A 1.2.3.4 + diff --git a/bin/tests/db/dns_db_find_6_data b/bin/tests/db/dns_db_find_6_data new file mode 100644 index 0000000..47de0e6 --- /dev/null +++ b/bin/tests/db/dns_db_find_6_data @@ -0,0 +1,8 @@ +# +# test data for dns_db_find DNS_R_CNAME +# +# format: +# dbfile dbtype dborigin dbclass dbcache findname findtype findopts findtime expected_results +# +dns_db_find_6.data rbt vix.com. in zone exploder.vix.com. A 0 0 DNS_R_CNAME +dns_db_find_6.data rbt vix.com. in zone exploder.vix.com. ANY 0 0 ISC_R_SUCCESS diff --git a/bin/tests/db/dns_db_find_7.data b/bin/tests/db/dns_db_find_7.data new file mode 100644 index 0000000..f0ec22b --- /dev/null +++ b/bin/tests/db/dns_db_find_7.data @@ -0,0 +1,12 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum + +a.b.c.d in A 1.2.3.4 +a.b in A 1.2.3.4 +a in NS ns1.vix.com. + diff --git a/bin/tests/db/dns_db_find_7_data b/bin/tests/db/dns_db_find_7_data new file mode 100644 index 0000000..6592758 --- /dev/null +++ b/bin/tests/db/dns_db_find_7_data @@ -0,0 +1,7 @@ +# +# test data for dns_db_find DNS_R_NXDOMAIN +# +# format: +# dbfile dbtype dborigin dbclass dbcache findname findtype findopts findtime expected_results +# +dns_db_find_7.data rbt vix.com. in zone a.b.c.vix.com. ANY 0 0 DNS_R_NXDOMAIN diff --git a/bin/tests/db/dns_db_find_8.data b/bin/tests/db/dns_db_find_8.data new file mode 100644 index 0000000..66e61ff --- /dev/null +++ b/bin/tests/db/dns_db_find_8.data @@ -0,0 +1,13 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum + +a.b.c.d in A 1.2.3.4 +a.b.c in A 1.2.3.4 +a.b in A 1.2.3.4 +a in NS ns1.vix.com. + diff --git a/bin/tests/db/dns_db_find_8_data b/bin/tests/db/dns_db_find_8_data new file mode 100644 index 0000000..4ad0c83 --- /dev/null +++ b/bin/tests/db/dns_db_find_8_data @@ -0,0 +1,7 @@ +# +# test data for dns_db_find DNS_R_NXRRSET +# +# format: +# dbfile dbtype dborigin dbclass dbcache findname findtype findopts findtime expected_results +# +dns_db_find_8.data rbt vix.com. in zone a.b.c.vix.com. NS 0 0 DNS_R_NXRRSET diff --git a/bin/tests/db/dns_db_find_9.data b/bin/tests/db/dns_db_find_9.data new file mode 100644 index 0000000..54a6d5f --- /dev/null +++ b/bin/tests/db/dns_db_find_9.data @@ -0,0 +1,13 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum + +a.b.c.d in NS ns1.vix.com. +a.b.c in A 1.2.3.4 +a.b in NS ns1.vix.com. +a in NS ns1.vix.com. + diff --git a/bin/tests/db/dns_db_find_9_data b/bin/tests/db/dns_db_find_9_data new file mode 100644 index 0000000..d80795c --- /dev/null +++ b/bin/tests/db/dns_db_find_9_data @@ -0,0 +1,7 @@ +# +# test data for dns_db_find ISC_R_NOTFOUND +# +# format: +# dbfile dbtype dborigin dbclass dbcache findname findtype findopts findtime expected_results +# +dns_db_find_9.data rbt vix.com. in cache a.b.c.vix.com. NS 0 0 ISC_R_NOTFOUND diff --git a/bin/tests/db/dns_db_findnode_1.data b/bin/tests/db/dns_db_findnode_1.data new file mode 100644 index 0000000..ab61c95 --- /dev/null +++ b/bin/tests/db/dns_db_findnode_1.data @@ -0,0 +1,11 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +a in ns ns.vix.com. +a in ns ns2.vix.com. +a in ns ns3.vix.com. +b in a 1.2.3.4 diff --git a/bin/tests/db/dns_db_findnode_1_data b/bin/tests/db/dns_db_findnode_1_data new file mode 100644 index 0000000..a73c425 --- /dev/null +++ b/bin/tests/db/dns_db_findnode_1_data @@ -0,0 +1,9 @@ +# +# test data for dns_db_findnode, case ISC_R_SUCCESS +# +# format: +# filename type origin class cache existingname rdatatype +# +dns_db_findnode_1.data rbt vix.com. in zone a.vix.com. NS ISC_R_SUCCESS +dns_db_findnode_1.data rbt vix.com. in zone b.vix.com. A ISC_R_SUCCESS +dns_db_findnode_1.data rbt vix.com. in zone c.vix.com. A ISC_R_NOTFOUND diff --git a/bin/tests/db/dns_db_findnode_2.data b/bin/tests/db/dns_db_findnode_2.data new file mode 100644 index 0000000..ab61c95 --- /dev/null +++ b/bin/tests/db/dns_db_findnode_2.data @@ -0,0 +1,11 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +a in ns ns.vix.com. +a in ns ns2.vix.com. +a in ns ns3.vix.com. +b in a 1.2.3.4 diff --git a/bin/tests/db/dns_db_findnode_2_data b/bin/tests/db/dns_db_findnode_2_data new file mode 100644 index 0000000..db69d20 --- /dev/null +++ b/bin/tests/db/dns_db_findnode_2_data @@ -0,0 +1,7 @@ +# +# test data for dns_db_findnode 2 +# +# format: +# filename type origin class cache newname +# +dns_db_findnode_2.data rbt vix.com. in zone a.b.c.vix.com. diff --git a/bin/tests/db/dns_db_iscache_1.data b/bin/tests/db/dns_db_iscache_1.data new file mode 100644 index 0000000..ab61c95 --- /dev/null +++ b/bin/tests/db/dns_db_iscache_1.data @@ -0,0 +1,11 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +a in ns ns.vix.com. +a in ns ns2.vix.com. +a in ns ns3.vix.com. +b in a 1.2.3.4 diff --git a/bin/tests/db/dns_db_iscache_1_data b/bin/tests/db/dns_db_iscache_1_data new file mode 100644 index 0000000..af591f9 --- /dev/null +++ b/bin/tests/db/dns_db_iscache_1_data @@ -0,0 +1,7 @@ +# +# test data for dns_db_iscache test 1 +# +# format: +# filename db_type origin class +# +dns_db_iscache_1.data rbt . in diff --git a/bin/tests/db/dns_db_iscache_2.data b/bin/tests/db/dns_db_iscache_2.data new file mode 100644 index 0000000..ab61c95 --- /dev/null +++ b/bin/tests/db/dns_db_iscache_2.data @@ -0,0 +1,11 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +a in ns ns.vix.com. +a in ns ns2.vix.com. +a in ns ns3.vix.com. +b in a 1.2.3.4 diff --git a/bin/tests/db/dns_db_iscache_2_data b/bin/tests/db/dns_db_iscache_2_data new file mode 100644 index 0000000..e859ef7 --- /dev/null +++ b/bin/tests/db/dns_db_iscache_2_data @@ -0,0 +1,7 @@ +# +# test data for dns_db_iscache test 1 +# +# format: +# filename db_type origin class +# +dns_db_iscache_2.data rbt . in diff --git a/bin/tests/db/dns_db_iszone_1.data b/bin/tests/db/dns_db_iszone_1.data new file mode 100644 index 0000000..ab61c95 --- /dev/null +++ b/bin/tests/db/dns_db_iszone_1.data @@ -0,0 +1,11 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +a in ns ns.vix.com. +a in ns ns2.vix.com. +a in ns ns3.vix.com. +b in a 1.2.3.4 diff --git a/bin/tests/db/dns_db_iszone_1_data b/bin/tests/db/dns_db_iszone_1_data new file mode 100644 index 0000000..02862d7 --- /dev/null +++ b/bin/tests/db/dns_db_iszone_1_data @@ -0,0 +1,7 @@ +# +# test data for dns_db_iszone test 1 +# +# format: +# filename db_type origin class +# +dns_db_iszone_1.data rbt . in diff --git a/bin/tests/db/dns_db_iszone_2.data b/bin/tests/db/dns_db_iszone_2.data new file mode 100644 index 0000000..ab61c95 --- /dev/null +++ b/bin/tests/db/dns_db_iszone_2.data @@ -0,0 +1,11 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +a in ns ns.vix.com. +a in ns ns2.vix.com. +a in ns ns3.vix.com. +b in a 1.2.3.4 diff --git a/bin/tests/db/dns_db_iszone_2_data b/bin/tests/db/dns_db_iszone_2_data new file mode 100644 index 0000000..02d3dc2 --- /dev/null +++ b/bin/tests/db/dns_db_iszone_2_data @@ -0,0 +1,7 @@ +# +# test data for dns_db_iszone test 2 +# +# format: +# filename db_type origin class +# +dns_db_iszone_2.data rbt . in diff --git a/bin/tests/db/dns_db_load_1.data b/bin/tests/db/dns_db_load_1.data new file mode 100644 index 0000000..ab61c95 --- /dev/null +++ b/bin/tests/db/dns_db_load_1.data @@ -0,0 +1,11 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +a in ns ns.vix.com. +a in ns ns2.vix.com. +a in ns ns3.vix.com. +b in a 1.2.3.4 diff --git a/bin/tests/db/dns_db_load_25.data b/bin/tests/db/dns_db_load_25.data new file mode 100644 index 0000000..6e21bda --- /dev/null +++ b/bin/tests/db/dns_db_load_25.data @@ -0,0 +1,6 @@ +$TTL 5 +@ IN SOA ns1 hostmaster 1 3600 1200 3600000 3600 +@ IN NS ns1 +ns1 IN A 10.0.0.1 +sub IN SOA ns2 hostmaster 1 3600 1200 3600000 3600 +ns2 IN A 10.0.0.2 diff --git a/bin/tests/db/dns_db_load_data b/bin/tests/db/dns_db_load_data new file mode 100644 index 0000000..0684c62 --- /dev/null +++ b/bin/tests/db/dns_db_load_data @@ -0,0 +1,7 @@ +# +# test data for dns_db_load +# +# format: +# filename type origin cache class findname expected_result +# +dns_db_load_1.data rbt . zone in ISC_R_SUCCESS a. A DNS_R_DELEGATION diff --git a/bin/tests/db/dns_db_load_soa_not_top b/bin/tests/db/dns_db_load_soa_not_top new file mode 100644 index 0000000..fbb8dcc --- /dev/null +++ b/bin/tests/db/dns_db_load_soa_not_top @@ -0,0 +1,7 @@ +# +# test data for dns_db_load_soa_not_top +# +# format: +# filename type origin cache class findname expected_result +# +dns_db_load_25.data rbt . zone in DNS_R_NOTZONETOP a. A DNS_R_DELEGATION diff --git a/bin/tests/db/dns_db_newversion.data b/bin/tests/db/dns_db_newversion.data new file mode 100644 index 0000000..ab61c95 --- /dev/null +++ b/bin/tests/db/dns_db_newversion.data @@ -0,0 +1,11 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +a in ns ns.vix.com. +a in ns ns2.vix.com. +a in ns ns3.vix.com. +b in a 1.2.3.4 diff --git a/bin/tests/db/dns_db_newversion_data b/bin/tests/db/dns_db_newversion_data new file mode 100644 index 0000000..be0c042 --- /dev/null +++ b/bin/tests/db/dns_db_newversion_data @@ -0,0 +1,7 @@ +# +# test data for dns_db_newversion +# +# format: +# filename type origin class cache newname newtype +# +dns_db_newversion.data rbt vix.com. in zone a.b.c.vix.com. A diff --git a/bin/tests/db/dns_db_origin_1.data b/bin/tests/db/dns_db_origin_1.data new file mode 100644 index 0000000..ab61c95 --- /dev/null +++ b/bin/tests/db/dns_db_origin_1.data @@ -0,0 +1,11 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +a in ns ns.vix.com. +a in ns ns2.vix.com. +a in ns ns3.vix.com. +b in a 1.2.3.4 diff --git a/bin/tests/db/dns_db_origin_data b/bin/tests/db/dns_db_origin_data new file mode 100644 index 0000000..9c3b458 --- /dev/null +++ b/bin/tests/db/dns_db_origin_data @@ -0,0 +1,8 @@ +# +# test data for dns_db_origin +# +# format: +# filename origin +# +dns_db_origin_1.data . +dns_db_origin_1.data vix.com. diff --git a/bin/tests/db/t_db.c b/bin/tests/db/t_db.c new file mode 100644 index 0000000..727c49e --- /dev/null +++ b/bin/tests/db/t_db.c @@ -0,0 +1,3146 @@ +/* + * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1999-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. + */ + +/* $Id: t_db.c,v 1.36 2007/06/19 23:46:59 tbox Exp $ */ + +#include <config.h> + +#include <ctype.h> +#include <stdlib.h> + +#include <isc/entropy.h> +#include <isc/hash.h> +#include <isc/mem.h> +#include <isc/string.h> +#include <isc/util.h> + +#include <dns/db.h> +#include <dns/fixedname.h> +#include <dns/rdata.h> +#include <dns/rdataclass.h> +#include <dns/rdatatype.h> +#include <dns/rdatalist.h> +#include <dns/rdataset.h> +#include <dns/result.h> + +#include <tests/t_api.h> + +static isc_result_t +t_create(const char *db_type, const char *origin, const char *class, + const char *model, isc_mem_t *mctx, dns_db_t **db) +{ + int len; + isc_result_t dns_result; + dns_dbtype_t dbtype; + isc_textregion_t region; + isc_buffer_t origin_buffer; + dns_fixedname_t dns_origin; + dns_rdataclass_t rdataclass; + + + dbtype = dns_dbtype_zone; + if (strcasecmp(model, "cache") == 0) + dbtype = dns_dbtype_cache; + + dns_fixedname_init(&dns_origin); + len = strlen(origin); + isc_buffer_init(&origin_buffer, origin, len); + isc_buffer_add(&origin_buffer, len); + dns_result = dns_name_fromtext(dns_fixedname_name(&dns_origin), + &origin_buffer, NULL, ISC_FALSE, NULL); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext failed %s\n", + dns_result_totext(dns_result)); + return(dns_result); + } + + DE_CONST(class, region.base); + region.length = strlen(class); + dns_result = dns_rdataclass_fromtext(&rdataclass, ®ion); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rdataclass_fromtext failed %s\n", + dns_result_totext(dns_result)); + return(dns_result); + } + + dns_result = dns_db_create(mctx, db_type, + dns_fixedname_name(&dns_origin), + dbtype, rdataclass, 0, NULL, db); + if (dns_result != ISC_R_SUCCESS) + t_info("dns_db_create failed %s\n", + dns_result_totext(dns_result)); + + return(dns_result); + +} + +static int +t_dns_db_load(char **av) { + char *filename; + char *db_type; + char *origin; + char *model; + char *class; + char *expected_load_result; + char *findname; + char *find_type; + char *expected_find_result; + + int result; + int len; + dns_db_t *db; + isc_result_t dns_result; + isc_result_t isc_result; + isc_mem_t *mctx; + isc_entropy_t *ectx; + dns_dbnode_t *nodep; + isc_textregion_t textregion; + isc_buffer_t findname_buffer; + dns_fixedname_t dns_findname; + dns_fixedname_t dns_foundname; + dns_rdataset_t rdataset; + dns_rdatatype_t rdatatype; + dns_dbversion_t *versionp; + isc_result_t exp_load_result; + isc_result_t exp_find_result; + + result = T_UNRESOLVED; + db = NULL; + mctx = NULL; + ectx = NULL; + filename = T_ARG(0); + db_type = T_ARG(1); + origin = T_ARG(2); + model = T_ARG(3); + class = T_ARG(4); + expected_load_result = T_ARG(5); + findname = T_ARG(6); + find_type = T_ARG(7); + expected_find_result = T_ARG(8); + + t_info("testing using file %s and name %s\n", filename, findname); + + exp_load_result = t_dns_result_fromtext(expected_load_result); + exp_find_result = t_dns_result_fromtext(expected_find_result); + + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + return(T_UNRESOLVED); + } + + isc_result = isc_entropy_create(mctx, &ectx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_entropy_create failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_hash_create failed %s\n", + isc_result_totext(isc_result)); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = t_create(db_type, origin, class, model, mctx, &db); + if (dns_result != ISC_R_SUCCESS) { + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = dns_db_load(db, filename); + if (dns_result != exp_load_result) { + t_info("dns_db_load returned %s, expected %s\n", + dns_result_totext(dns_result), + dns_result_totext(exp_load_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_FAIL); + } + if (dns_result != ISC_R_SUCCESS) { + result = T_PASS; + goto cleanup_db; + } + + dns_fixedname_init(&dns_findname); + len = strlen(findname); + isc_buffer_init(&findname_buffer, findname, len); + isc_buffer_add(&findname_buffer, len); + dns_result = dns_name_fromtext(dns_fixedname_name(&dns_findname), + &findname_buffer, NULL, ISC_FALSE, NULL); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext failed %s\n", + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + textregion.base = find_type; + textregion.length = strlen(find_type); + dns_result = dns_rdatatype_fromtext(&rdatatype, &textregion); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rdatatype_fromtext %s failed %s\n", + find_type, + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + versionp = NULL; + dns_fixedname_init(&dns_foundname); + dns_rdataset_init(&rdataset); + if (dns_db_iszone(db)) + dns_db_currentversion(db, &versionp); + nodep = NULL; + + dns_result = dns_db_find(db, + dns_fixedname_name(&dns_findname), + versionp, + rdatatype, + DNS_DBFIND_GLUEOK, + 0, + &nodep, + dns_fixedname_name(&dns_foundname), + &rdataset, NULL); + + if (dns_result != exp_find_result) { + t_info("dns_db_find returned %s, expected %s\n", + dns_result_totext(dns_result), + dns_result_totext(exp_find_result)); + result = T_FAIL; + } else { + result = T_PASS; + } + + if (dns_result != ISC_R_NOTFOUND) { + dns_db_detachnode(db, &nodep); + if (dns_rdataset_isassociated(&rdataset)) + dns_rdataset_disassociate(&rdataset); + } + + if (dns_db_iszone(db)) + dns_db_closeversion(db, &versionp, ISC_FALSE); + cleanup_db: + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(result); +} + +static const char *a1 = + "A call to dns_db_load(db, filename) loads the contents of " + "the database in filename into db."; + +static void +t1(void) { + int result; + + t_assert("dns_db_load", 1, T_REQUIRED, a1); + result = t_eval("dns_db_load_data", t_dns_db_load, 9); + t_result(result); +} + + +static const char *a2 = + "When the database db has cache semantics, a call to " + "dns_db_iscache(db) returns ISC_TRUE."; + +static int +t_dns_db_zc_x(char *filename, char *db_type, char *origin, char *class, + dns_dbtype_t dbtype, isc_boolean_t(*cf)(dns_db_t *), + isc_boolean_t exp_result) +{ + int result; + int len; + dns_db_t *db; + isc_result_t dns_result; + isc_result_t isc_result; + isc_mem_t *mctx; + isc_entropy_t *ectx; + dns_rdataclass_t rdataclass; + isc_textregion_t textregion; + isc_buffer_t origin_buffer; + dns_fixedname_t dns_origin; + + result = T_UNRESOLVED; + + db = NULL; + mctx = NULL; + ectx = NULL; + + t_info("testing using file %s\n", filename); + + dns_fixedname_init(&dns_origin); + len = strlen(origin); + isc_buffer_init(&origin_buffer, origin, len); + isc_buffer_add(&origin_buffer, len); + dns_result = dns_name_fromtext(dns_fixedname_name(&dns_origin), + &origin_buffer, NULL, ISC_FALSE, NULL); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext failed %s\n", + dns_result_totext(dns_result)); + return(T_UNRESOLVED); + } + + textregion.base = class; + textregion.length = strlen(class); + dns_result = dns_rdataclass_fromtext(&rdataclass, &textregion); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rdataclass_fromtext failed %s\n", + dns_result_totext(dns_result)); + return(T_UNRESOLVED); + } + + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + return(T_UNRESOLVED); + } + + isc_result = isc_entropy_create(mctx, &ectx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_entropy_create failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_hash_create failed %s\n", + isc_result_totext(isc_result)); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = dns_db_create(mctx, db_type, + dns_fixedname_name(&dns_origin), + dbtype, rdataclass, 0, NULL, &db); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_create failed %s\n", + dns_result_totext(dns_result)); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = dns_db_load(db, filename); + if (dns_result == ISC_R_SUCCESS) { + if ((*cf)(db) == exp_result) + result = T_PASS; + else + result = T_FAIL; + } else { + t_info("dns_db_load failed %s\n", + dns_result_totext(dns_result)); + result = T_FAIL; + } + + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(result); +} + +static int +test_dns_db_zc_x(const char *filename, dns_dbtype_t dbtype, + isc_boolean_t(*cf)(dns_db_t *), isc_boolean_t exp_result) +{ + + FILE *fp; + char *p; + int line; + int cnt; + int result; + int nfails; + int nprobs; + char *tokens[T_MAXTOKS]; + + nfails = 0; + nprobs = 0; + + fp = fopen(filename, "r"); + if (fp != NULL) { + line = 0; + while ((p = t_fgetbs(fp)) != NULL) { + + ++line; + + /* + * Skip comment lines. + */ + if ((isspace((unsigned char)*p)) || (*p == '#')) { + (void)free(p); + continue; + } + + cnt = t_bustline(p, tokens); + if (cnt == 4) { + result = t_dns_db_zc_x(tokens[0], /* file */ + tokens[1], /* type */ + tokens[2], /* origin */ + tokens[3], /* class */ + dbtype, /* cache */ + cf, /* check func */ + exp_result);/* expect */ + if (result != T_PASS) { + if (result == T_FAIL) + ++nfails; + else + ++nprobs; + } + } else { + t_info("bad format in %s at line %d\n", + filename, line); + ++nprobs; + } + + (void)free(p); + } + (void)fclose(fp); + } else { + t_info("Missing datafile %s\n", filename); + ++nprobs; + } + + result = T_UNRESOLVED; + + if (nfails == 0 && nprobs == 0) + result = T_PASS; + else if (nfails) + result = T_FAIL; + + return(result); +} + +static void +t2(void) { + int result; + + t_assert("dns_db_iscache", 2, T_REQUIRED, a2); + result = test_dns_db_zc_x("dns_db_iscache_1_data", + dns_dbtype_cache, dns_db_iscache, ISC_TRUE); + t_result(result); +} + + +static const char *a3 = + "When the database db has zone semantics, a call to " + "dns_db_iscache(db) returns ISC_FALSE."; + + +static void +t3(void) { + int result; + + t_assert("dns_db_iscache", 3, T_REQUIRED, a3); + result = test_dns_db_zc_x("dns_db_iscache_2_data", + dns_dbtype_zone, dns_db_iscache, ISC_FALSE); + t_result(result); +} + + +static const char *a4 = + "When the database db has zone semantics, a call to " + "dns_db_iszone(db) returns ISC_TRUE."; + + +static void +t4(void) { + int result; + + t_assert("dns_db_iszone", 4, T_REQUIRED, a4); + result = test_dns_db_zc_x("dns_db_iszone_1_data", + dns_dbtype_zone, dns_db_iszone, ISC_TRUE); + t_result(result); +} + + +static const char *a5 = + "When the database db has cache semantics, a call to " + "dns_db_iszone(db) returns ISC_FALSE."; + +static void +t5(void) { + int result; + + t_assert("dns_db_iszone", 5, T_REQUIRED, a5); + result = test_dns_db_zc_x("dns_db_iszone_2_data", + dns_dbtype_cache, dns_db_iszone, ISC_FALSE); + t_result(result); +} + +static int +t_dns_db_origin(char **av) { + + char *filename; + char *origin; + + int result; + int len; + int order; + isc_result_t dns_result; + isc_result_t isc_result; + isc_mem_t *mctx; + isc_entropy_t *ectx; + dns_db_t *db; + dns_fixedname_t dns_origin; + dns_fixedname_t dns_dborigin; + isc_buffer_t origin_buffer; + + db = NULL; + mctx = NULL; + ectx = NULL; + + filename = T_ARG(0); + origin = T_ARG(1); + + t_info("testing with database %s and origin %s\n", + filename, origin); + + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + return(T_UNRESOLVED); + } + + isc_result = isc_entropy_create(mctx, &ectx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_entropy_create failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_hash_create failed %s\n", + isc_result_totext(isc_result)); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = t_create("rbt", origin, "in", "isc_true", mctx, &db); + if (dns_result != ISC_R_SUCCESS) { + t_info("t_create failed %s\n", + dns_result_totext(dns_result)); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + dns_fixedname_init(&dns_origin); + dns_fixedname_init(&dns_dborigin); + + len = strlen(origin); + isc_buffer_init(&origin_buffer, origin, len); + isc_buffer_add(&origin_buffer, len); + + dns_result = dns_db_load(db, filename); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_load failed %s\n", + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = dns_name_fromtext(dns_fixedname_name(&dns_origin), + &origin_buffer, NULL, ISC_FALSE, NULL); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext failed %s\n", + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + order = dns_name_compare(dns_fixedname_name(&dns_origin), + dns_db_origin(db)); + if (order == 0) { + result = T_PASS; + } else { + t_info("dns_name_compare returned %d\n", order); + result = T_FAIL; + } + + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(result); + +} + +static const char *a6 = + "A call to dns_db_origin(db) returns the origin of the database."; + +static void +t6(void) { + int result; + + t_assert("dns_db_origin", 6, T_REQUIRED, a6); + result = t_eval("dns_db_origin_data", t_dns_db_origin, 2); + t_result(result); +} + + +static const char *a7 = + "A call to dns_db_class(db) returns the class of the database."; + + +#define CLASSBUFLEN 256 + +static int +t_dns_db_class(char **av) { + + char *filename; + char *class; + + int result; + isc_result_t dns_result; + isc_result_t isc_result; + isc_mem_t *mctx; + isc_entropy_t *ectx; + dns_db_t *db; + dns_rdataclass_t rdataclass; + dns_rdataclass_t db_rdataclass; + isc_textregion_t textregion; + + filename = T_ARG(0); + class = T_ARG(1); + db = NULL; + mctx = NULL; + ectx = NULL; + + t_info("testing with database %s and class %s\n", + filename, class); + + textregion.base = class; + textregion.length = strlen(class); + dns_result = dns_rdataclass_fromtext(&rdataclass, &textregion); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rdataclass_fromtext failed %s\n", + dns_result_totext(dns_result)); + return(T_UNRESOLVED); + } + + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + return(T_UNRESOLVED); + } + + isc_result = isc_entropy_create(mctx, &ectx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_entropy_create failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_hash_create failed %s\n", + isc_result_totext(isc_result)); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = t_create("rbt", ".", class, "isc_true", mctx, &db); + if (dns_result != ISC_R_SUCCESS) { + t_info("t_create failed %s\n", + dns_result_totext(dns_result)); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = dns_db_load(db, filename); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_load failed %s\n", + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + db_rdataclass = dns_db_class(db); + if (db_rdataclass == rdataclass) + result = T_PASS; + else { + char classbuf[DNS_RDATACLASS_FORMATSIZE]; + dns_rdataclass_format(db_rdataclass, + classbuf, sizeof(classbuf)); + t_info("dns_db_class returned %s, expected %s\n", + classbuf, class); + result = T_FAIL; + } + + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(result); + +} +static void +t7(void) { + int result; + + t_assert("dns_db_class", 7, T_REQUIRED, a7); + result = t_eval("dns_db_class_data", t_dns_db_class, 2); + t_result(result); +} + + +static const char *a8 = + "A call to dns_db_currentversion() opens the current " + "version for reading."; + +static int +t_dns_db_currentversion(char **av) { + char *filename; + char *db_type; + char *origin; + char *class; + char *model; + char *findname; + char *findtype; + + int result; + int len; + dns_db_t *db; + isc_result_t dns_result; + isc_result_t isc_result; + isc_mem_t *mctx; + isc_entropy_t *ectx; + dns_dbnode_t *nodep; + isc_textregion_t textregion; + isc_buffer_t findname_buffer; + dns_fixedname_t dns_findname; + dns_fixedname_t dns_foundname; + dns_rdataset_t rdataset; + dns_rdatatype_t rdatatype; + dns_dbversion_t *cversionp; + dns_dbversion_t *nversionp; + + result = T_UNRESOLVED; + + filename = T_ARG(0); + db_type = T_ARG(1); + origin = T_ARG(2); + class = T_ARG(3); + model = T_ARG(4); + findname = T_ARG(5); + findtype = T_ARG(6); + db = NULL; + mctx = NULL; + ectx = NULL; + + t_info("testing using file %s and name %s\n", filename, findname); + + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + return(T_UNRESOLVED); + } + + isc_result = isc_entropy_create(mctx, &ectx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_entropy_create failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_hash_create failed %s\n", + isc_result_totext(isc_result)); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = t_create(db_type, origin, class, model, mctx, &db); + if (dns_result != ISC_R_SUCCESS) { + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = dns_db_load(db, filename); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_load returned %s\n", + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_fixedname_init(&dns_findname); + len = strlen(findname); + isc_buffer_init(&findname_buffer, findname, len); + isc_buffer_add(&findname_buffer, len); + dns_result = dns_name_fromtext(dns_fixedname_name(&dns_findname), + &findname_buffer, NULL, ISC_FALSE, NULL); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext failed %s\n", + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + textregion.base = findtype; + textregion.length = strlen(findtype); + dns_result = dns_rdatatype_fromtext(&rdatatype, &textregion); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rdatatype_fromtext %s failed %s\n", + findtype, + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + /* + * find a name we know is there + */ + + cversionp = NULL; + dns_fixedname_init(&dns_foundname); + dns_rdataset_init(&rdataset); + dns_db_currentversion(db, &cversionp); + nodep = NULL; + + dns_result = dns_db_find(db, + dns_fixedname_name(&dns_findname), + cversionp, + rdatatype, + 0, + 0, + &nodep, + dns_fixedname_name(&dns_foundname), + &rdataset, NULL); + + if (dns_result != ISC_R_SUCCESS) { + t_info("unable to find %s using current version\n", findname); + dns_db_closeversion(db, &cversionp, ISC_FALSE); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + /* + * create a new version + * delete the found rdataset in the new version + * attempt to find the rdataset again and expect the find to fail + * close/commit the new version + * attempt to find the rdataset in the current version and + * expect the find to succeed + */ + + nversionp = NULL; + dns_result = dns_db_newversion(db, &nversionp); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_newversion failed %s\n", + dns_result_totext(dns_result)); + dns_db_detachnode(db, &nodep); + dns_rdataset_disassociate(&rdataset); + dns_db_closeversion(db, &cversionp, ISC_FALSE); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + /* + * Delete the found rdataset in the new version. + */ + dns_result = dns_db_deleterdataset(db, nodep, nversionp, rdatatype, 0); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_deleterdataset failed %s\n", + dns_result_totext(dns_result)); + dns_rdataset_disassociate(&rdataset); + dns_db_detachnode(db, &nodep); + dns_db_closeversion(db, &nversionp, ISC_FALSE); + dns_db_closeversion(db, &cversionp, ISC_FALSE); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + /* + * Don't need these now. + */ + dns_rdataset_disassociate(&rdataset); + dns_db_detachnode(db, &nodep); + nodep = NULL; + + /* + * Find the deleted rdataset and expect it to fail. + */ + dns_result = dns_db_find(db, + dns_fixedname_name(&dns_findname), + nversionp, + rdatatype, + 0, + 0, + &nodep, + dns_fixedname_name(&dns_foundname), + &rdataset, NULL); + + if ((dns_result != ISC_R_NOTFOUND) && (dns_result != DNS_R_NXDOMAIN)) { + t_info("unexpectedly found %s using current version\n", + findname); + dns_db_closeversion(db, &cversionp, ISC_FALSE); + dns_db_closeversion(db, &nversionp, ISC_FALSE); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_FAIL); + } + + /* + * Close/commit the new version. + */ + dns_db_closeversion(db, &nversionp, ISC_TRUE); + + /* + * Find the deleted rdata in the current version. + */ + dns_result = dns_db_find(db, dns_fixedname_name(&dns_findname), + cversionp, rdatatype, DNS_DBFIND_GLUEOK, + 0, &nodep, dns_fixedname_name(&dns_foundname), + &rdataset, NULL); + + /* + * And expect it to succeed. + */ + if (dns_result == ISC_R_SUCCESS) { + result = T_PASS; + } else { + t_info("cound not find %s using current version\n", findname); + dns_db_closeversion(db, &cversionp, ISC_FALSE); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + result = T_FAIL; + } + + dns_db_detachnode(db, &nodep); + dns_rdataset_disassociate(&rdataset); + + dns_db_closeversion(db, &cversionp, ISC_FALSE); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + + return(result); +} + +static void +t8(void) { + int result; + + t_assert("dns_db_currentversion", 8, T_REQUIRED, a8); + result = t_eval("dns_db_currentversion_data", + t_dns_db_currentversion, 7); + t_result(result); +} + +static const char *a9 = + "A call to dns_db_newversion() opens a new version for " + "reading and writing."; + +static int +t_dns_db_newversion(char **av) { + + char *filename; + char *db_type; + char *origin; + char *class; + char *model; + char *newname; + char *newtype; + + int result; + int len; + int rval; + dns_db_t *db; + isc_result_t dns_result; + isc_result_t isc_result; + isc_mem_t *mctx; + isc_entropy_t *ectx; + dns_dbnode_t *nodep; + dns_dbnode_t *found_nodep; + isc_textregion_t textregion; + isc_buffer_t newname_buffer; + dns_fixedname_t dns_newname; + dns_fixedname_t dns_foundname; + dns_rdata_t added_rdata = DNS_RDATA_INIT; + const char * added_rdata_data; + dns_rdataset_t added_rdataset; + dns_rdata_t found_rdata = DNS_RDATA_INIT; + dns_rdataset_t found_rdataset; + dns_rdatatype_t rdatatype; + dns_rdataclass_t rdataclass; + dns_dbversion_t *nversionp; + dns_rdatalist_t rdatalist; + + result = T_UNRESOLVED; + + filename = T_ARG(0); + db_type = T_ARG(1); + origin = T_ARG(2); + class = T_ARG(3); + model = T_ARG(4); + newname = T_ARG(5); + newtype = T_ARG(6); + db = NULL; + mctx = NULL; + ectx = NULL; + + /* + * Open a new version, add some data, commit it, + * close it, open a new version, and check that changes + * are present. + */ + + t_info("testing using file %s and name %s\n", filename, newname); + + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + return(T_UNRESOLVED); + } + + isc_result = isc_entropy_create(mctx, &ectx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_entropy_create failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_hash_create failed %s\n", + isc_result_totext(isc_result)); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = t_create(db_type, origin, class, model, mctx, &db); + if (dns_result != ISC_R_SUCCESS) { + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = dns_db_load(db, filename); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_load returned %s\n", + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + /* + * Add a new name. + */ + + dns_fixedname_init(&dns_newname); + len = strlen(newname); + isc_buffer_init(&newname_buffer, newname, len); + isc_buffer_add(&newname_buffer, len); + dns_result = dns_name_fromtext(dns_fixedname_name(&dns_newname), + &newname_buffer, NULL, ISC_FALSE, NULL); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext failed %s\n", + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + nodep = NULL; + dns_result = dns_db_findnode(db, dns_fixedname_name(&dns_newname), + ISC_TRUE, &nodep); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_findnode failed %s\n", + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + /* + * Open a new version and associate some rdata with the new name. + */ + + textregion.base = newtype; + textregion.length = strlen(newtype); + dns_result = dns_rdatatype_fromtext(&rdatatype, &textregion); + + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rdatatype_fromtext %s failed %s\n", + newtype, + dns_result_totext(dns_result)); + dns_db_detachnode(db, &nodep); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + textregion.base = class; + textregion.length = strlen(class); + dns_result = dns_rdataclass_fromtext(&rdataclass, &textregion); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rdataclass_fromtext failed %s\n", + dns_result_totext(dns_result)); + dns_db_detachnode(db, &nodep); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_rdata_init(&added_rdata); + added_rdata_data = "\x10\x00\x00\x01"; + DE_CONST(added_rdata_data, added_rdata.data); + added_rdata.length = 4; + added_rdata.rdclass = rdataclass; + added_rdata.type = rdatatype; + + dns_rdataset_init(&added_rdataset); + rdatalist.type = rdatatype; + rdatalist.covers = 0; + rdatalist.rdclass = rdataclass; + rdatalist.ttl = 0; + ISC_LIST_INIT(rdatalist.rdata); + ISC_LIST_APPEND(rdatalist.rdata, &added_rdata, link); + + dns_result = dns_rdatalist_tordataset(&rdatalist, &added_rdataset); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rdatalist_tordataset failed %s\n", + dns_result_totext(dns_result)); + dns_db_detachnode(db, &nodep); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + nversionp = NULL; + dns_result = dns_db_newversion(db, &nversionp); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_newversion failed %s\n", + dns_result_totext(dns_result)); + dns_db_detachnode(db, &nodep); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = dns_db_addrdataset(db, nodep, nversionp, 0, + &added_rdataset, 0, NULL); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_addrdataset failed %s\n", + dns_result_totext(dns_result)); + dns_db_closeversion(db, &nversionp, ISC_FALSE); + dns_db_detachnode(db, &nodep); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + /* + * Close and commit the version. + */ + dns_db_closeversion(db, &nversionp, ISC_TRUE); + dns_db_detachnode(db, &nodep); + if (dns_rdataset_isassociated(&added_rdataset)) + dns_rdataset_disassociate(&added_rdataset); + nodep = NULL; + + /* + * Open a new version and find the data we added. + */ + dns_fixedname_init(&dns_foundname); + dns_rdataset_init(&found_rdataset); + nversionp = NULL; + found_nodep = NULL; + dns_db_newversion(db, &nversionp); + + /* + * Find the recently added name and rdata. + */ + dns_result = dns_db_find(db, dns_fixedname_name(&dns_newname), + nversionp, rdatatype, 0, 0, &found_nodep, + dns_fixedname_name(&dns_foundname), + &found_rdataset, NULL); + + if (dns_result != ISC_R_SUCCESS) { + /* XXXWPK - NXRRSET ??? reference counts ??? */ + t_info("dns_db_find failed %s\n", + dns_result_totext(dns_result)); + dns_db_closeversion(db, &nversionp, ISC_FALSE); + dns_db_detachnode(db, &found_nodep); + if (dns_rdataset_isassociated(&found_rdataset)) + dns_rdataset_disassociate(&found_rdataset); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_FAIL); + } + + dns_result = dns_rdataset_first(&found_rdataset); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rdataset_first failed %s\n", + dns_result_totext(dns_result)); + dns_db_detachnode(db, &nodep); + if (dns_rdataset_isassociated(&found_rdataset)) + dns_rdataset_disassociate(&found_rdataset); + dns_db_closeversion(db, &nversionp, ISC_FALSE); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_FAIL); + } + + /* + * Now make sure its what we expect. + */ + dns_rdata_init(&found_rdata); + dns_rdataset_current(&found_rdataset, &found_rdata); + rval = dns_rdata_compare(&added_rdata, &found_rdata); + if (rval == 0) { + result = T_PASS; + } else { + t_info("dns_rdata_compare returned %d\n", rval); + result = T_FAIL; + } + + /* + * Don't need these now. + */ + dns_db_closeversion(db, &nversionp, ISC_FALSE); + if (dns_rdataset_isassociated(&found_rdataset)) + dns_rdataset_disassociate(&found_rdataset); + dns_db_detachnode(db, &found_nodep); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + + return(result); +} + +static void +t9(void) { + int result; + + t_assert("dns_db_newversion", 9, T_REQUIRED, a9); + result = t_eval("dns_db_newversion_data", t_dns_db_newversion, 7); + t_result(result); +} + +static const char *a10 = + "When versionp points to a read-write version and commit is " + "ISC_TRUE, a call to dns_db_closeversion(db, versionp, commit) " + "causes all changes made in the version to take effect, " + "and returns ISC_R_SUCCESS."; + +static int +t_dns_db_closeversion_1(char **av) { + char *filename; + char *db_type; + char *origin; + char *class; + char *model; + char *new_name; + char *new_type; + char *existing_name; + char *existing_type; + + int result; + int len; + int rval; + int nfails; + dns_db_t *db; + isc_result_t dns_result; + isc_result_t isc_result; + isc_mem_t *mctx; + isc_entropy_t *ectx; + dns_dbnode_t *nodep; + isc_textregion_t textregion; + isc_buffer_t name_buffer; + dns_fixedname_t dns_newname; + dns_fixedname_t dns_foundname; + dns_fixedname_t dns_existingname; + dns_rdata_t added_rdata = DNS_RDATA_INIT; + const char * added_rdata_data; + dns_rdataset_t added_rdataset; + dns_rdata_t found_rdata = DNS_RDATA_INIT; + dns_rdataset_t found_rdataset; + dns_rdatatype_t new_rdatatype; + dns_rdatatype_t existing_rdatatype; + dns_rdataclass_t rdataclass; + dns_dbversion_t *nversionp; + dns_dbversion_t *cversionp; + dns_rdatalist_t rdatalist; + + filename = T_ARG(0); + db_type = T_ARG(1); + origin = T_ARG(2); + class = T_ARG(3); + model = T_ARG(4); + new_name = T_ARG(5); + new_type = T_ARG(6); + existing_name = T_ARG(7); + existing_type = T_ARG(8); + + nfails = 0; + result = T_UNRESOLVED; + db = NULL; + mctx = NULL; + ectx = NULL; + + /* + * Open a new version, add some data, + * remove some data, close with commit, open the current + * version and check that changes are present. + */ + + t_info("testing using file %s and name %s\n", filename, new_name); + + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + return(T_UNRESOLVED); + } + + isc_result = isc_entropy_create(mctx, &ectx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_entropy_create failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_hash_create failed %s\n", + isc_result_totext(isc_result)); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = t_create(db_type, origin, class, model, mctx, &db); + if (dns_result != ISC_R_SUCCESS) { + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = dns_db_load(db, filename); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_load returned %s\n", + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + /* + * Remove all rdata for an existing name. + */ + + dns_fixedname_init(&dns_existingname); + len = strlen(existing_name); + isc_buffer_init(&name_buffer, existing_name, len); + isc_buffer_add(&name_buffer, len); + dns_result = dns_name_fromtext(dns_fixedname_name(&dns_existingname), + &name_buffer, NULL, ISC_FALSE, NULL); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext failed %s\n", + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + textregion.base = existing_type; + textregion.length = strlen(existing_type); + dns_result = dns_rdatatype_fromtext(&existing_rdatatype, &textregion); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rdatatype_fromtext %s failed %s\n", + existing_type, + dns_result_totext(dns_result)); + dns_db_detachnode(db, &nodep); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + nodep = NULL; + dns_result = dns_db_findnode(db, dns_fixedname_name(&dns_existingname), + ISC_FALSE, &nodep); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_findnode %s\n", + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + /* open a new version */ + nversionp = NULL; + dns_result = dns_db_newversion(db, &nversionp); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_newversion failed %s\n", + dns_result_totext(dns_result)); + dns_db_detachnode(db, &nodep); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = dns_db_deleterdataset(db, nodep, nversionp, + existing_rdatatype, 0); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_deleterdataset failed %s\n", + dns_result_totext(dns_result)); + dns_db_closeversion(db, &nversionp, ISC_FALSE); + dns_db_detachnode(db, &nodep); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + /* + * add a new name and associate some rdata with it + */ + + dns_db_detachnode(db, &nodep); + nodep = NULL; + + dns_fixedname_init(&dns_newname); + len = strlen(new_name); + isc_buffer_init(&name_buffer, new_name, len); + isc_buffer_add(&name_buffer, len); + dns_result = dns_name_fromtext(dns_fixedname_name(&dns_newname), + &name_buffer, NULL, ISC_FALSE, NULL); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext failed %s\n", + dns_result_totext(dns_result)); + dns_db_closeversion(db, &nversionp, ISC_FALSE); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = dns_db_findnode(db, dns_fixedname_name(&dns_newname), + ISC_TRUE, &nodep); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_findnode failed %s\n", + dns_result_totext(dns_result)); + dns_db_closeversion(db, &nversionp, ISC_FALSE); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + /* + * associate some rdata with the new name + */ + + textregion.base = new_type; + textregion.length = strlen(new_type); + dns_result = dns_rdatatype_fromtext(&new_rdatatype, &textregion); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rdatatype_fromtext %s failed %s\n", + new_type, + dns_result_totext(dns_result)); + dns_db_detachnode(db, &nodep); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + textregion.base = class; + textregion.length = strlen(class); + dns_result = dns_rdataclass_fromtext(&rdataclass, &textregion); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rdataclass_fromtext failed %s\n", + dns_result_totext(dns_result)); + dns_db_detachnode(db, &nodep); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_rdata_init(&added_rdata); + added_rdata_data = "\x10\x00\x00\x01"; + DE_CONST(added_rdata_data, added_rdata.data); + added_rdata.length = 4; + added_rdata.rdclass = rdataclass; + added_rdata.type = new_rdatatype; + + dns_rdataset_init(&added_rdataset); + rdatalist.type = new_rdatatype; + rdatalist.covers = 0; + rdatalist.rdclass = rdataclass; + rdatalist.ttl = 0; + ISC_LIST_INIT(rdatalist.rdata); + ISC_LIST_APPEND(rdatalist.rdata, &added_rdata, link); + + dns_result = dns_rdatalist_tordataset(&rdatalist, &added_rdataset); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rdatalist_tordataset failed %s\n", + dns_result_totext(dns_result)); + dns_db_detachnode(db, &nodep); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = dns_db_addrdataset(db, nodep, nversionp, 0, + &added_rdataset, 0, NULL); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_addrdataset failed %s\n", + dns_result_totext(dns_result)); + dns_db_closeversion(db, &nversionp, ISC_FALSE); + dns_db_detachnode(db, &nodep); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + /* close and commit the version */ + dns_db_closeversion(db, &nversionp, ISC_TRUE); + dns_db_detachnode(db, &nodep); + nodep = NULL; + + /* open the current version and check changes */ + dns_fixedname_init(&dns_foundname); + dns_rdataset_init(&found_rdataset); + cversionp = NULL; + dns_db_currentversion(db, &cversionp); + + /* find the recently added name and rdata */ + dns_result = dns_db_find(db, + dns_fixedname_name(&dns_newname), + cversionp, + new_rdatatype, + 0, + 0, + &nodep, + dns_fixedname_name(&dns_foundname), + &found_rdataset, NULL); + + if (dns_result != ISC_R_SUCCESS) { + /* XXXWPK NXRRSET ??? reference counting ??? */ + t_info("dns_db_find failed %s\n", + dns_result_totext(dns_result)); + dns_db_closeversion(db, &cversionp, ISC_FALSE); + dns_db_detachnode(db, &nodep); + if (dns_rdataset_isassociated(&found_rdataset)) + dns_rdataset_disassociate(&found_rdataset); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_FAIL); + } + + dns_result = dns_rdataset_first(&found_rdataset); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rdataset_first failed %s\n", + dns_result_totext(dns_result)); + dns_db_detachnode(db, &nodep); + if (dns_rdataset_isassociated(&found_rdataset)) + dns_rdataset_disassociate(&found_rdataset); + dns_db_closeversion(db, &cversionp, ISC_FALSE); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_FAIL); + } + + /* + * Now make sure its what we expect. + */ + dns_rdata_init(&found_rdata); + dns_rdataset_current(&found_rdataset, &found_rdata); + rval = dns_rdata_compare(&added_rdata, &found_rdata); + if (rval != 0) { + t_info("dns_rdata_compare returned %d\n", rval); + ++nfails; + } + + /* + * Now check the rdata deletion. + */ + + if (dns_rdataset_isassociated(&found_rdataset)) + dns_rdataset_disassociate(&found_rdataset); + dns_rdataset_init(&found_rdataset); + dns_db_detachnode(db, &nodep); + nodep = NULL; + dns_fixedname_init(&dns_foundname); + + dns_result = dns_db_find(db, dns_fixedname_name(&dns_existingname), + cversionp, existing_rdatatype, + 0, 0, &nodep, + dns_fixedname_name(&dns_foundname), + &found_rdataset, NULL); + + + if ((dns_result != ISC_R_NOTFOUND) && (dns_result != DNS_R_NXDOMAIN)) { + dns_rdataset_disassociate(&found_rdataset); + dns_db_detachnode(db, &nodep); + t_info("dns_db_find %s returned %s\n", existing_name, + dns_result_totext(dns_result)); + ++nfails; + } + + dns_db_closeversion(db, &cversionp, ISC_FALSE); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + + if (nfails == 0) + result = T_PASS; + else + result = T_FAIL; + + return(result); +} + +static void +t10(void) { + int result; + + t_assert("dns_db_closeversion", 10, T_REQUIRED, a10); + result = t_eval("dns_db_closeversion_1_data", + t_dns_db_closeversion_1, 9); + t_result(result); +} + +static const char *a11 = + "When versionp points to a read-write version and commit is " + "ISC_FALSE, a call to dns_db_closeversion(db, versionp, commit) " + "causes all changes made in the version to to be rolled back, " + "and returns ISC_R_SUCCESS."; + +static int +t_dns_db_closeversion_2(char **av) { + char *filename; + char *db_type; + char *origin; + char *class; + char *model; + char *new_name; + char *new_type; + char *existing_name; + char *existing_type; + + int result; + int len; + int rval; + int nfails; + dns_db_t *db; + isc_result_t dns_result; + isc_result_t isc_result; + isc_mem_t *mctx; + isc_entropy_t *ectx; + dns_dbnode_t *nodep; + isc_textregion_t textregion; + isc_buffer_t name_buffer; + dns_fixedname_t dns_newname; + dns_fixedname_t dns_foundname; + dns_fixedname_t dns_existingname; + dns_rdata_t added_rdata = DNS_RDATA_INIT; + const char * added_rdata_data; + dns_rdataset_t added_rdataset; + dns_rdata_t found_rdata = DNS_RDATA_INIT; + dns_rdataset_t found_rdataset; + dns_rdatatype_t new_rdatatype; + dns_rdatatype_t existing_rdatatype; + dns_rdataclass_t rdataclass; + dns_dbversion_t *nversionp; + dns_dbversion_t *cversionp; + dns_rdatalist_t rdatalist; + + filename = T_ARG(0); + db_type = T_ARG(1); + origin = T_ARG(2); + class = T_ARG(3); + model = T_ARG(4); + new_name = T_ARG(5); + new_type = T_ARG(6); + existing_name = T_ARG(7); + existing_type = T_ARG(8); + + nfails = 0; + result = T_UNRESOLVED; + db = NULL; + mctx = NULL; + ectx = NULL; + + /* + * Open a new version, add some data, + * remove some data, close with commit, open the current + * version and check that changes are present. + */ + + t_info("testing using file %s and name %s\n", filename, new_name); + + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + return(T_UNRESOLVED); + } + + isc_result = isc_entropy_create(mctx, &ectx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_entropy_create failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_hash_create failed %s\n", + isc_result_totext(isc_result)); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = t_create(db_type, origin, class, model, mctx, &db); + if (dns_result != ISC_R_SUCCESS) { + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = dns_db_load(db, filename); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_load returned %s\n", + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + /* + * Remove all rdata for an existing name. + */ + + dns_fixedname_init(&dns_existingname); + len = strlen(existing_name); + isc_buffer_init(&name_buffer, existing_name, len); + isc_buffer_add(&name_buffer, len); + dns_result = dns_name_fromtext(dns_fixedname_name(&dns_existingname), + &name_buffer, NULL, ISC_FALSE, NULL); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext failed %s\n", + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + textregion.base = existing_type; + textregion.length = strlen(existing_type); + dns_result = dns_rdatatype_fromtext(&existing_rdatatype, &textregion); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rdatatype_fromtext %s failed %s\n", + existing_type, + dns_result_totext(dns_result)); + dns_db_detachnode(db, &nodep); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + nodep = NULL; + dns_result = dns_db_findnode(db, dns_fixedname_name(&dns_existingname), + ISC_FALSE, &nodep); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_findnode %s\n", + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + /* + * Open a new version. + */ + nversionp = NULL; + dns_result = dns_db_newversion(db, &nversionp); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_newversion failed %s\n", + dns_result_totext(dns_result)); + dns_db_detachnode(db, &nodep); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = dns_db_deleterdataset(db, nodep, nversionp, + existing_rdatatype, 0); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_deleterdataset failed %s\n", + dns_result_totext(dns_result)); + dns_db_closeversion(db, &nversionp, ISC_FALSE); + dns_db_detachnode(db, &nodep); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + /* + * add a new name and associate some rdata with it + */ + + dns_db_detachnode(db, &nodep); + nodep = NULL; + + dns_fixedname_init(&dns_newname); + len = strlen(new_name); + isc_buffer_init(&name_buffer, new_name, len); + isc_buffer_add(&name_buffer, len); + dns_result = dns_name_fromtext(dns_fixedname_name(&dns_newname), + &name_buffer, NULL, ISC_FALSE, NULL); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext failed %s\n", + dns_result_totext(dns_result)); + dns_db_closeversion(db, &nversionp, ISC_FALSE); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = dns_db_findnode(db, dns_fixedname_name(&dns_newname), + ISC_TRUE, &nodep); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_findnode failed %s\n", + dns_result_totext(dns_result)); + dns_db_closeversion(db, &nversionp, ISC_FALSE); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + textregion.base = new_type; + textregion.length = strlen(new_type); + dns_result = dns_rdatatype_fromtext(&new_rdatatype, &textregion); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rdatatype_fromtext %s failed %s\n", + new_type, dns_result_totext(dns_result)); + dns_db_detachnode(db, &nodep); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + textregion.base = class; + textregion.length = strlen(class); + dns_result = dns_rdataclass_fromtext(&rdataclass, &textregion); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rdataclass_fromtext failed %s\n", + dns_result_totext(dns_result)); + dns_db_detachnode(db, &nodep); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_rdata_init(&added_rdata); + added_rdata_data = "\x10\x00\x00\x01"; + DE_CONST(added_rdata_data, added_rdata.data); + added_rdata.length = 4; + added_rdata.rdclass = rdataclass; + added_rdata.type = new_rdatatype; + + dns_rdataset_init(&added_rdataset); + rdatalist.type = new_rdatatype; + rdatalist.covers = 0; + rdatalist.rdclass = rdataclass; + rdatalist.ttl = 0; + ISC_LIST_INIT(rdatalist.rdata); + ISC_LIST_APPEND(rdatalist.rdata, &added_rdata, link); + + dns_result = dns_rdatalist_tordataset(&rdatalist, &added_rdataset); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rdatalist_tordataset failed %s\n", + dns_result_totext(dns_result)); + dns_db_detachnode(db, &nodep); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = dns_db_addrdataset(db, nodep, nversionp, 0, + &added_rdataset, 0, NULL); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_addrdataset failed %s\n", + dns_result_totext(dns_result)); + dns_db_closeversion(db, &nversionp, ISC_FALSE); + dns_db_detachnode(db, &nodep); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + /* + * Check that our changes took. + */ + dns_db_detachnode(db, &nodep); + nodep = NULL; + dns_fixedname_init(&dns_foundname); + dns_rdataset_init(&found_rdataset); + + /* + * Find the recently added name and rdata. + */ + dns_result = dns_db_find(db, dns_fixedname_name(&dns_newname), + nversionp, new_rdatatype, 0, 0, &nodep, + dns_fixedname_name(&dns_foundname), + &found_rdataset, NULL); + + if ((dns_result == ISC_R_NOTFOUND) || + (dns_result == DNS_R_NXDOMAIN) || + (dns_result == DNS_R_NXRRSET)) { + + t_info("dns_db_find failed %s\n", + dns_result_totext(dns_result)); + dns_db_closeversion(db, &nversionp, ISC_FALSE); + dns_db_detachnode(db, &nodep); + if (dns_rdataset_isassociated(&found_rdataset)) + dns_rdataset_disassociate(&found_rdataset); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_FAIL); + } + + dns_result = dns_rdataset_first(&found_rdataset); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rdataset_first failed %s\n", + dns_result_totext(dns_result)); + dns_db_detachnode(db, &nodep); + if (dns_rdataset_isassociated(&found_rdataset)) + dns_rdataset_disassociate(&found_rdataset); + dns_db_closeversion(db, &nversionp, ISC_FALSE); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_FAIL); + } + + /* + * Now make sure its what we expect. + */ + dns_rdata_init(&found_rdata); + dns_rdataset_current(&found_rdataset, &found_rdata); + rval = dns_rdata_compare(&added_rdata, &found_rdata); + if (rval != 0) { + t_info("dns_rdata_compare returned %d\n", rval); + ++nfails; + } + + /* + * Now check the rdata deletion. + */ + if (dns_rdataset_isassociated(&found_rdataset)) + dns_rdataset_disassociate(&found_rdataset); + dns_rdataset_init(&found_rdataset); + dns_db_detachnode(db, &nodep); + nodep = NULL; + dns_fixedname_init(&dns_foundname); + + dns_result = dns_db_find(db, + dns_fixedname_name(&dns_existingname), + nversionp, + existing_rdatatype, + 0, + 0, + &nodep, + dns_fixedname_name(&dns_foundname), + &found_rdataset, NULL); + + + if ((dns_result != ISC_R_NOTFOUND) && (dns_result != DNS_R_NXDOMAIN)) { + t_info("dns_db_find %s returned %s\n", existing_name, + dns_result_totext(dns_result)); + if (dns_rdataset_isassociated(&found_rdataset)) + dns_rdataset_disassociate(&found_rdataset); + dns_db_detachnode(db, &nodep); + ++nfails; + } + + + /* + * Close the version without a commit. + */ + dns_db_closeversion(db, &nversionp, ISC_FALSE); + + /* + * Open the current version and check changes. + */ + dns_fixedname_init(&dns_foundname); + dns_rdataset_init(&found_rdataset); + cversionp = NULL; + dns_db_currentversion(db, &cversionp); + + /* + * Find the recently added name and rdata. + */ + dns_result = dns_db_find(db, + dns_fixedname_name(&dns_newname), + cversionp, + new_rdatatype, + 0, + 0, + &nodep, + dns_fixedname_name(&dns_foundname), + &found_rdataset, NULL); + + if ((dns_result != ISC_R_NOTFOUND) && (dns_result != DNS_R_NXDOMAIN)) { + t_info("dns_db_find %s returned %s\n", new_name, + dns_result_totext(dns_result)); + dns_rdataset_disassociate(&found_rdataset); + dns_db_detachnode(db, &nodep); + dns_db_closeversion(db, &cversionp, ISC_FALSE); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_FAIL); + } + + /* + * Now check the rdata deletion. + */ + nodep = NULL; + dns_rdataset_init(&found_rdataset); + dns_fixedname_init(&dns_foundname); + + dns_result = dns_db_find(db, dns_fixedname_name(&dns_existingname), + cversionp, existing_rdatatype, 0, 0, + &nodep, dns_fixedname_name(&dns_foundname), + &found_rdataset, NULL); + + + if ((dns_result == ISC_R_NOTFOUND) || + (dns_result == DNS_R_NXDOMAIN) || + (dns_result == DNS_R_NXRRSET)) { + + t_info("dns_db_find %s returned %s\n", existing_name, + dns_result_totext(dns_result)); + dns_rdataset_disassociate(&found_rdataset); + dns_db_detachnode(db, &nodep); + ++nfails; + } + + dns_db_detachnode(db, &nodep); + dns_rdataset_disassociate(&found_rdataset); + dns_db_closeversion(db, &cversionp, ISC_FALSE); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + + if (nfails == 0) + result = T_PASS; + else + result = T_FAIL; + + return(result); +} + +static void +t11(void) { + int result; + + t_assert("dns_db_closeversion", 11, T_REQUIRED, a11); + result = t_eval("dns_db_closeversion_2_data", + t_dns_db_closeversion_2, 9); + t_result(result); +} + +static const char *a12 = + "A call to dns_db_expirenode() marks as stale all records at node " + "which expire at or before 'now'. If 'now' is zero, then the current " + "time will be used."; + +static int +t_dns_db_expirenode(char **av) { + char *filename; + char *db_type; + char *origin; + char *class; + char *existing_name; + char *node_xtime; + char *find_xtime; + char *exp_find_result; + + int result; + int len; + dns_db_t *db; + isc_result_t dns_result; + isc_result_t exp_result; + isc_result_t isc_result; + isc_mem_t *mctx; + isc_entropy_t *ectx; + dns_dbnode_t *nodep; + isc_buffer_t name_buffer; + dns_fixedname_t dns_foundname; + dns_fixedname_t dns_existingname; + isc_stdtime_t node_expire_time; + isc_stdtime_t find_expire_time; + isc_stdtime_t now; + dns_rdataset_t rdataset; + + filename = T_ARG(0); + db_type = T_ARG(1); + origin = T_ARG(2); + class = T_ARG(3); + existing_name = T_ARG(4); + node_xtime = T_ARG(5); + find_xtime = T_ARG(6); + exp_find_result = T_ARG(7); + mctx = NULL; + ectx = NULL; + + result = T_UNRESOLVED; + + /* + * Find a node, mark it as stale, do a dns_db_find on the name and + * expect it to fail. + */ + + t_info("testing using file %s and name %s\n", filename, existing_name); + + node_expire_time = (isc_stdtime_t) strtol(node_xtime, NULL, 10); + find_expire_time = (isc_stdtime_t) strtol(find_xtime, NULL, 10); + exp_result = t_dns_result_fromtext(exp_find_result); + + isc_stdtime_get(&now); + + dns_fixedname_init(&dns_existingname); + len = strlen(existing_name); + isc_buffer_init(&name_buffer, existing_name, len); + isc_buffer_add(&name_buffer, len); + dns_result = dns_name_fromtext(dns_fixedname_name(&dns_existingname), + &name_buffer, NULL, ISC_FALSE, NULL); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext failed %s\n", + dns_result_totext(dns_result)); + return(T_UNRESOLVED); + } + + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + return(T_UNRESOLVED); + } + + isc_result = isc_entropy_create(mctx, &ectx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_entropy_create failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_hash_create failed %s\n", + isc_result_totext(isc_result)); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + db = NULL; + dns_result = t_create(db_type, origin, class, "cache", mctx, &db); + if (dns_result != ISC_R_SUCCESS) { + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = dns_db_load(db, filename); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_load returned %s\n", + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + nodep = NULL; + + /* + * Check that the node is there. + */ + dns_result = dns_db_findnode(db, dns_fixedname_name(&dns_existingname), + ISC_FALSE, &nodep); + if (dns_result != ISC_R_SUCCESS) { + t_info("unable to find %s\n", existing_name); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + /* + * Expire it. + */ + if (node_expire_time != 0) + node_expire_time += now; + + dns_result = dns_db_expirenode(db, nodep, node_expire_time); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_expirenode failed %s\n", + dns_result_totext(dns_result)); + dns_db_detachnode(db, &nodep); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_FAIL); + } + + dns_fixedname_init(&dns_foundname); + dns_rdataset_init(&rdataset); + dns_db_detachnode(db, &nodep); + nodep = NULL; + + if (find_expire_time != 0) + find_expire_time += now; + + dns_result = dns_db_find(db, + dns_fixedname_name(&dns_existingname), + NULL, + dns_rdatatype_any, + 0, + find_expire_time, + &nodep, + dns_fixedname_name(&dns_foundname), + &rdataset, NULL); + + if (dns_result == exp_result) { + result = T_PASS; + } else { + t_info("dns_db_find %s returned %s\n", existing_name, + dns_result_totext(dns_result)); + result = T_FAIL; + } + + if ((dns_result != ISC_R_NOTFOUND) && + (dns_result != DNS_R_NXDOMAIN) && + (dns_result != DNS_R_NXRRSET)) { + + /* + * Don't need to disassociate the rdataset because + * we're searching with dns_rdatatype_any. + */ + dns_db_detachnode(db, &nodep); + } + + + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + + return(result); +} + +static void +t12(void) { + int result; + + t_assert("dns_db_expirenode", 12, T_REQUIRED, a12); + result = t_eval("dns_db_expirenode_data", t_dns_db_expirenode, 8); + t_result(result); +} + +static const char *a13 = + "If the node name exists, then a call to " + "dns_db_findnode(db, name, ISC_FALSE, nodep) initializes nodep " + "to point to the node and returns ISC_R_SUCCESS, otherwise " + "it returns ISC_R_NOTFOUND."; + +static int +t_dns_db_findnode_1(char **av) { + char *filename; + char *db_type; + char *origin; + char *class; + char *model; + char *find_name; + char *find_type; + char *expected_result; + + int result; + int len; + dns_db_t *db; + isc_result_t dns_result; + isc_result_t isc_result; + isc_mem_t *mctx; + isc_entropy_t *ectx; + dns_dbnode_t *nodep; + isc_buffer_t name_buffer; + dns_rdataset_t rdataset; + dns_rdatatype_t rdatatype; + isc_textregion_t textregion; + dns_fixedname_t dns_name; + dns_dbversion_t *cversionp; + isc_result_t exp_result; + + filename = T_ARG(0); + db_type = T_ARG(1); + origin = T_ARG(2); + class = T_ARG(3); + model = T_ARG(4); + find_name = T_ARG(5); + find_type = T_ARG(6); + expected_result = T_ARG(7); + + db = NULL; + mctx = NULL; + ectx = NULL; + result = T_UNRESOLVED; + + t_info("testing using file %s and name %s\n", filename, find_name); + + exp_result = t_dns_result_fromtext(expected_result); + + textregion.base = find_type; + textregion.length = strlen(find_type); + dns_result = dns_rdatatype_fromtext(&rdatatype, &textregion); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rdatatype_fromtext %s failed %s\n", + find_type, + dns_result_totext(dns_result)); + return(T_UNRESOLVED); + } + + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + return(T_UNRESOLVED); + } + + isc_result = isc_entropy_create(mctx, &ectx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_entropy_create failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_hash_create failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = t_create(db_type, origin, class, model, mctx, &db); + if (dns_result != ISC_R_SUCCESS) { + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = dns_db_load(db, filename); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_load returned %s\n", + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + nodep = NULL; + dns_fixedname_init(&dns_name); + + len = strlen(find_name); + isc_buffer_init(&name_buffer, find_name, len); + isc_buffer_add(&name_buffer, len); + dns_result = dns_name_fromtext(dns_fixedname_name(&dns_name), + &name_buffer, NULL, ISC_FALSE, NULL); + + dns_result = dns_db_findnode(db, dns_fixedname_name(&dns_name), + ISC_FALSE, &nodep); + if (dns_result != exp_result) { + t_info("dns_db_findnode failed %s\n", + dns_result_totext(dns_result)); + if (dns_result == ISC_R_SUCCESS) + dns_db_detachnode(db, &nodep); + dns_db_detach(&db); + isc_mem_destroy(&mctx); + return(T_FAIL); + } + + /* + * if we're expecting the find to succeed and it did, + * check that the node has been initialized + * by checking for the specified type of rdata + * and expecting the search to succeed + */ + + if (dns_result == ISC_R_SUCCESS) { + cversionp = NULL; + dns_db_currentversion(db, &cversionp); + dns_rdataset_init(&rdataset); + + dns_result = dns_db_findrdataset(db, nodep, cversionp, + rdatatype, 0, + 0, &rdataset, NULL); + if (dns_result == ISC_R_SUCCESS) { + dns_rdataset_disassociate(&rdataset); + result = T_PASS; + } else { + t_info("dns_db_findrdataset failed %s\n", + dns_result_totext(dns_result)); + result = T_FAIL; + } + dns_db_closeversion(db, &cversionp, ISC_FALSE); + dns_db_detachnode(db, &nodep); + } else { + result = T_PASS; + } + + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + + return(result); +} + +static void +t13(void) { + int result; + + t_assert("dns_db_findnode", 13, T_REQUIRED, a13); + result = t_eval("dns_db_findnode_1_data", t_dns_db_findnode_1, 8); + t_result(result); +} + +static const char *a14 = + "If the node name does not exist and create is ISC_TRUE, " + "then a call to dns_db_findnode(db, name, create, nodep) " + "creates the node, initializes nodep to point to the node, " + "and returns ISC_R_SUCCESS."; + +static int +t_dns_db_findnode_2(char **av) { + char *filename; + char *db_type; + char *origin; + char *class; + char *model; + char *newname; + + int nfails; + int result; + int len; + dns_db_t *db; + isc_result_t dns_result; + isc_result_t isc_result; + isc_mem_t *mctx; + isc_entropy_t *ectx; + dns_dbnode_t *nodep; + dns_dbnode_t *newnodep; + isc_buffer_t name_buffer; + dns_rdataset_t rdataset; + dns_fixedname_t dns_name; + dns_fixedname_t dns_foundname; + dns_dbversion_t *cversionp; + + filename = T_ARG(0); + db_type = T_ARG(1); + origin = T_ARG(2); + class = T_ARG(3); + model = T_ARG(4); + newname = T_ARG(5); + + result = T_UNRESOLVED; + db = NULL; + mctx = NULL; + ectx = NULL; + nfails = 0; + + t_info("testing using file %s and name %s\n", filename, newname); + + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + return(T_UNRESOLVED); + } + + isc_result = isc_entropy_create(mctx, &ectx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_entropy_create failed %s\n", + isc_result_totext(isc_result)); + return(T_UNRESOLVED); + } + + isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_hash_create failed %s\n", + isc_result_totext(isc_result)); + return(T_UNRESOLVED); + } + + dns_result = t_create(db_type, origin, class, model, mctx, &db); + if (dns_result != ISC_R_SUCCESS) { + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = dns_db_load(db, filename); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_load returned %s\n", + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + nodep = NULL; + dns_fixedname_init(&dns_name); + + /* + * Make sure the name isn't there + */ + len = strlen(newname); + isc_buffer_init(&name_buffer, newname, len); + isc_buffer_add(&name_buffer, len); + dns_result = dns_name_fromtext(dns_fixedname_name(&dns_name), + &name_buffer, NULL, ISC_FALSE, NULL); + + dns_result = dns_db_findnode(db, dns_fixedname_name(&dns_name), + ISC_FALSE, &nodep); + if ((dns_result != ISC_R_NOTFOUND) && + (dns_result != DNS_R_NXDOMAIN) && + (dns_result != DNS_R_NXRRSET)) { + t_info("dns_db_findnode %s\n", + dns_result_totext(dns_result)); + dns_db_detachnode(db, &nodep); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + /* + * Add it. + */ + dns_result = dns_db_findnode(db, dns_fixedname_name(&dns_name), + ISC_TRUE, &nodep); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_findnode %s\n", + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_FAIL); + } + + /* + * Check it. + */ + newnodep = NULL; + dns_rdataset_init(&rdataset); + dns_fixedname_init(&dns_foundname); + cversionp = NULL; + dns_db_currentversion(db, &cversionp); + + /* + * First try dns_db_find DNS_R_NXDOMAIN. + */ + dns_result = dns_db_find(db, + dns_fixedname_name(&dns_name), + cversionp, + dns_rdatatype_any, + 0, + 0, + &newnodep, + dns_fixedname_name(&dns_foundname), + &rdataset, NULL); + if ((dns_result != ISC_R_NOTFOUND) && (dns_result != DNS_R_NXDOMAIN)) { + dns_db_detachnode(db, &newnodep); + } + + if (dns_result != DNS_R_NXDOMAIN) { + t_info("dns_db_find %s\n", + dns_result_totext(dns_result)); + ++nfails; + } + + /* + * Then try dns_db_findnode ISC_R_SUCCESS. + */ + dns_result = dns_db_findnode(db, dns_fixedname_name(&dns_name), + ISC_FALSE, &newnodep); + t_info("dns_db_findnode %s\n", dns_result_totext(dns_result)); + if (dns_result == ISC_R_SUCCESS) { + dns_db_detachnode(db, &newnodep); + } else { + t_info("dns_db_findnode %s failed %s\n", newname, + dns_result_totext(dns_result)); + ++nfails; + } + + + dns_db_detachnode(db, &nodep); + dns_db_closeversion(db, &cversionp, ISC_FALSE); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + + if (nfails == 0) + result = T_PASS; + else + result = T_FAIL; + + return(result); +} + +static void +t14(void) { + int result; + + t_assert("dns_db_findnode", 14, T_REQUIRED, a14); + result = t_eval("dns_db_findnode_2_data", t_dns_db_findnode_2, 6); + t_result(result); +} + +static int +t_dns_db_find_x(char **av) { + char *dbfile; + char *dbtype; + char *dborigin; + char *dbclass; + char *dbmodel; + char *findname; + char *findtype; + char *findopts; + char *findtime; + char *expected_result; + + int result; + int len; + int opts; + dns_db_t *db; + isc_result_t dns_result; + isc_result_t isc_result; + isc_stdtime_t ftime; + isc_stdtime_t now; + isc_result_t exp_result; + isc_mem_t *mctx; + isc_entropy_t *ectx; + dns_dbnode_t *nodep; + isc_textregion_t textregion; + isc_buffer_t findname_buffer; + dns_fixedname_t dns_findname; + dns_fixedname_t dns_foundname; + dns_rdataset_t rdataset; + dns_rdatatype_t rdatatype; + dns_dbversion_t *cversionp; + + result = T_UNRESOLVED; + + dbfile = T_ARG(0); + dbtype = T_ARG(1); + dborigin = T_ARG(2); + dbclass = T_ARG(3); + dbmodel = T_ARG(4); + findname = T_ARG(5); + findtype = T_ARG(6); + findopts = T_ARG(7); + findtime = T_ARG(8); + expected_result = T_ARG(9); + db = NULL; + mctx = NULL; + ectx = NULL; + opts = 0; + + t_info("testing using %s, name %s, type %s\n", dbfile, findname, + findtype); + + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + return(T_UNRESOLVED); + } + + isc_result = isc_entropy_create(mctx, &ectx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_entropy_create failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_hash_create failed %s\n", + isc_result_totext(isc_result)); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = t_create(dbtype, dborigin, dbclass, dbmodel, mctx, &db); + if (dns_result != ISC_R_SUCCESS) { + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_result = dns_db_load(db, dbfile); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_db_load returned %s\n", + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + exp_result = t_dns_result_fromtext(expected_result); + + dns_fixedname_init(&dns_findname); + len = strlen(findname); + isc_buffer_init(&findname_buffer, findname, len); + isc_buffer_add(&findname_buffer, len); + dns_result = dns_name_fromtext(dns_fixedname_name(&dns_findname), + &findname_buffer, NULL, ISC_FALSE, NULL); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext failed %s\n", + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + textregion.base = findtype; + textregion.length = strlen(findtype); + dns_result = dns_rdatatype_fromtext(&rdatatype, &textregion); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rdatatype_fromtext %s failed %s\n", + findtype, + dns_result_totext(dns_result)); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + if (strstr(findopts, "DNS_DBFIND_GLUEOK")) + opts |= DNS_DBFIND_GLUEOK; + if (strstr(findopts, "DNS_DBFIND_VALIDATEGLUE")) + opts |= DNS_DBFIND_VALIDATEGLUE; + + isc_stdtime_get(&now); + + ftime = strtol(findtime, NULL, 10); + if (ftime != 0) + ftime += now; + + cversionp = NULL; + dns_fixedname_init(&dns_foundname); + dns_rdataset_init(&rdataset); + if (dns_db_iszone(db)) + dns_db_currentversion(db, &cversionp); + nodep = NULL; + + dns_result = dns_db_find(db, + dns_fixedname_name(&dns_findname), + cversionp, + rdatatype, + opts, + ftime, + &nodep, + dns_fixedname_name(&dns_foundname), + &rdataset, NULL); + + if (dns_result != exp_result) { + t_info("dns_db_find %s %s unexpectedly returned %s, " + "expected %s\n", + findname, findtype, dns_result_totext(dns_result), + dns_result_totext(exp_result)); + result = T_FAIL; + } else { + result = T_PASS; + } + + if ((dns_result != ISC_R_NOTFOUND) && (dns_result != DNS_R_NXDOMAIN)) { + + if ((dns_result != DNS_R_NXRRSET) && + (dns_result != DNS_R_ZONECUT)) + if (dns_rdataset_isassociated(&rdataset)) + dns_rdataset_disassociate(&rdataset); + dns_db_detachnode(db, &nodep); + } + + if (dns_db_iszone(db)) + dns_db_closeversion(db, &cversionp, ISC_FALSE); + dns_db_detach(&db); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + + return(result); +} + +static const char *a15 = + "A call to dns_db_find(db, name, version, type, options, now, ...) " + "finds the best match for 'name' and 'type' in version 'version' " + "of 'db'."; + +static void +t15(void) { + int result; + + t_assert("dns_db_find", 15, T_REQUIRED, a15); + result = t_eval("dns_db_find_1_data", t_dns_db_find_x, 10); + t_result(result); +} + + +static const char *a16 = + "When the desired node and type were found, but are glue, " + "and the DNS_DBFIND_GLUEOK option is set, a call to " + "dns_db_find(db, name, version, type, options, now, ...) " + "returns DNS_R_GLUE."; + +static void +t16(void) { + int result; + + t_assert("dns_db_find", 16, T_REQUIRED, a16); + result = t_eval("dns_db_find_2_data", t_dns_db_find_x, 10); + t_result(result); +} + +static const char *a17 = + "A call to dns_db_find() returns DNS_R_DELEGATION when the data " + "requested is beneath a zone cut."; + +static void +t17(void) { + int result; + + t_assert("dns_db_find", 17, T_REQUIRED, a17); + result = t_eval("dns_db_find_3_data", t_dns_db_find_x, 10); + t_result(result); +} + +static const char *a18 = + "A call to dns_db_find() returns DNS_R_DELEGATION when type is " + "dns_rdatatype_any and the desired node is a zone cut."; + +static void +t18(void) { + int result; + + t_assert("dns_db_find", 18, T_REQUIRED, a18); + result = t_eval("dns_db_find_4_data", t_dns_db_find_x, 10); + t_result(result); +} + +static const char *a19 = + "A call to dns_db_find() returns DNS_R_DNAME when the data " + "requested is beneath a DNAME."; + +static void +t19(void) { + int result; + + t_assert("dns_db_find", 19, T_REQUIRED, a19); + result = t_eval("dns_db_find_5_data", t_dns_db_find_x, 10); + t_result(result); +} + +static const char *a20 = + "A call to dns_db_find() returns DNS_R_CNAME when the requested " + "rdataset was not found but there is a CNAME at the desired name."; + +static void +t20(void) { + int result; + + t_assert("dns_db_find", 20, T_REQUIRED, a20); + result = t_eval("dns_db_find_6_data", t_dns_db_find_x, 10); + t_result(result); +} + +static const char *a21 = + "A call to dns_db_find() returns DNS_R_NXDOMAIN when name " + "does not exist."; + +static void +t21(void) { + int result; + + t_assert("dns_db_find", 21, T_REQUIRED, a21); + result = t_eval("dns_db_find_7_data", t_dns_db_find_x, 10); + t_result(result); +} + +static const char *a22 = + "A call to dns_db_find() returns DNS_R_NXRRSET when " + "the desired name exists, but the desired type does not."; + +static void +t22(void) { + int result; + + t_assert("dns_db_find", 22, T_REQUIRED, a22); + result = t_eval("dns_db_find_8_data", t_dns_db_find_x, 10); + t_result(result); +} + +static const char *a23 = + "When db is a cache database, a call to dns_db_find() " + "returns ISC_R_NOTFOUND when the desired name does not exist, " + "and no delegation could be found."; + +static void +t23(void) { + int result; + + t_assert("dns_db_find", 23, T_REQUIRED, a23); + result = t_eval("dns_db_find_9_data", t_dns_db_find_x, 10); + t_result(result); +} + +static const char *a24 = + "When db is a cache database, an rdataset will be found only " + "if at least one rdataset at the found node expires after 'now'."; + +static void +t24(void) { + int result; + + t_assert("dns_db_find", 24, T_REQUIRED, a24); + result = t_eval("dns_db_find_10_data", t_dns_db_find_x, 10); + t_result(result); +} + +static const char *a25 = + "A call to dns_db_load(db, filename) returns DNS_R_NOTZONETOP " + "when the zone data contains a SOA not at the zone apex."; + +static void +t25(void) { + int result; + + t_assert("dns_db_load", 25, T_REQUIRED, a25); + result = t_eval("dns_db_load_soa_not_top", t_dns_db_load, 9); + t_result(result); +} + +testspec_t T_testlist[] = { + { t1, "dns_db_load" }, + { t2, "dns_db_iscache" }, + { t3, "dns_db_iscache" }, + { t4, "dns_db_iszone" }, + { t5, "dns_db_iszone" }, + { t6, "dns_db_origin" }, + { t7, "dns_db_class" }, + { t8, "dns_db_currentversion" }, + { t9, "dns_db_newversion" }, + { t10, "dns_db_closeversion" }, + { t11, "dns_db_closeversion" }, + { t12, "dns_db_expirenode" }, + { t13, "dns_db_findnode" }, + { t14, "dns_db_findnode" }, + { t15, "dns_db_find" }, + { t16, "dns_db_find" }, + { t17, "dns_db_find" }, + { t18, "dns_db_find" }, + { t19, "dns_db_find" }, + { t20, "dns_db_find" }, + { t21, "dns_db_find" }, + { t22, "dns_db_find" }, + { t23, "dns_db_find" }, + { t24, "dns_db_find" }, + { t25, "dns_db_load" }, + { NULL, NULL } +}; diff --git a/bin/tests/db_test.c b/bin/tests/db_test.c new file mode 100644 index 0000000..9b0d90d --- /dev/null +++ b/bin/tests/db_test.c @@ -0,0 +1,946 @@ +/* + * Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1999-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. + */ + +/* $Id: db_test.c,v 1.66 2008/09/25 04:02:38 tbox Exp $ */ + +/*! \file + * \author + * Principal Author: Bob Halley + */ + +#include <config.h> + +#include <stdlib.h> + +#include <isc/commandline.h> +#include <isc/log.h> +#include <isc/mem.h> +#include <isc/time.h> +#include <isc/string.h> +#include <isc/util.h> + +#include <dns/db.h> +#include <dns/dbiterator.h> +#include <dns/dbtable.h> +#include <dns/fixedname.h> +#include <dns/log.h> +#include <dns/rdataset.h> +#include <dns/rdatasetiter.h> +#include <dns/result.h> + +#define MAXHOLD 100 +#define MAXVERSIONS 100 + +typedef struct dbinfo { + dns_db_t * db; + dns_dbversion_t * version; + dns_dbversion_t * wversion; + dns_dbversion_t * rversions[MAXVERSIONS]; + int rcount; + dns_dbnode_t * hold_nodes[MAXHOLD]; + int hold_count; + dns_dbiterator_t * dbiterator; + dns_dbversion_t * iversion; + int pause_every; + isc_boolean_t ascending; + ISC_LINK(struct dbinfo) link; +} dbinfo; + +static isc_mem_t * mctx = NULL; +static char dbtype[128]; +static dns_dbtable_t * dbtable; +static ISC_LIST(dbinfo) dbs; +static dbinfo * cache_dbi = NULL; +static int pause_every = 0; +static isc_boolean_t ascending = ISC_TRUE; + +static void +print_result(const char *message, isc_result_t result) { + size_t len; + + if (message == NULL) { + len = 0; + message = ""; + } + len = strlen(message); + printf("%s%sresult %08x: %s\n", message, (len == 0U) ? "" : " ", + result, isc_result_totext(result)); +} + +static void +print_rdataset(dns_name_t *name, dns_rdataset_t *rdataset) { + isc_buffer_t text; + char t[1000]; + isc_result_t result; + isc_region_t r; + + isc_buffer_init(&text, t, sizeof(t)); + result = dns_rdataset_totext(rdataset, name, ISC_FALSE, ISC_FALSE, + &text); + isc_buffer_usedregion(&text, &r); + if (result == ISC_R_SUCCESS) + printf("%.*s", (int)r.length, (char *)r.base); + else + print_result("", result); +} + +static void +print_rdatasets(dns_name_t *name, dns_rdatasetiter_t *rdsiter) { + isc_result_t result; + dns_rdataset_t rdataset; + + dns_rdataset_init(&rdataset); + result = dns_rdatasetiter_first(rdsiter); + while (result == ISC_R_SUCCESS) { + dns_rdatasetiter_current(rdsiter, &rdataset); + print_rdataset(name, &rdataset); + dns_rdataset_disassociate(&rdataset); + result = dns_rdatasetiter_next(rdsiter); + } + if (result != ISC_R_NOMORE) + print_result("", result); +} + +static dbinfo * +select_db(char *origintext) { + dns_fixedname_t forigin; + dns_name_t *origin; + isc_buffer_t source; + size_t len; + dbinfo *dbi; + isc_result_t result; + + if (strcasecmp(origintext, "cache") == 0) { + if (cache_dbi == NULL) + printf("the cache does not exist\n"); + return (cache_dbi); + } + len = strlen(origintext); + isc_buffer_init(&source, origintext, len); + isc_buffer_add(&source, len); + dns_fixedname_init(&forigin); + origin = dns_fixedname_name(&forigin); + result = dns_name_fromtext(origin, &source, dns_rootname, ISC_FALSE, + NULL); + if (result != ISC_R_SUCCESS) { + print_result("bad name", result); + return (NULL); + } + + for (dbi = ISC_LIST_HEAD(dbs); + dbi != NULL; + dbi = ISC_LIST_NEXT(dbi, link)) { + if (dns_name_compare(dns_db_origin(dbi->db), origin) == 0) + break; + } + + return (dbi); +} + +static void +list(dbinfo *dbi, char *seektext) { + dns_fixedname_t fname; + dns_name_t *name; + dns_dbnode_t *node; + dns_rdatasetiter_t *rdsiter; + isc_result_t result; + int i; + size_t len; + dns_fixedname_t fseekname; + dns_name_t *seekname; + isc_buffer_t source; + + dns_fixedname_init(&fname); + name = dns_fixedname_name(&fname); + + if (dbi->dbiterator == NULL) { + INSIST(dbi->iversion == NULL); + if (dns_db_iszone(dbi->db)) { + if (dbi->version != NULL) + dns_db_attachversion(dbi->db, dbi->version, + &dbi->iversion); + else + dns_db_currentversion(dbi->db, &dbi->iversion); + } + + result = dns_db_createiterator(dbi->db, 0, &dbi->dbiterator); + if (result == ISC_R_SUCCESS) { + if (seektext != NULL) { + len = strlen(seektext); + isc_buffer_init(&source, seektext, len); + isc_buffer_add(&source, len); + dns_fixedname_init(&fseekname); + seekname = dns_fixedname_name(&fseekname); + result = dns_name_fromtext(seekname, &source, + dns_db_origin( + dbi->db), + ISC_FALSE, + NULL); + if (result == ISC_R_SUCCESS) + result = dns_dbiterator_seek( + dbi->dbiterator, + seekname); + } else if (dbi->ascending) + result = dns_dbiterator_first(dbi->dbiterator); + else + result = dns_dbiterator_last(dbi->dbiterator); + } + } else + result = ISC_R_SUCCESS; + + node = NULL; + rdsiter = NULL; + i = 0; + while (result == ISC_R_SUCCESS) { + result = dns_dbiterator_current(dbi->dbiterator, &node, name); + if (result != ISC_R_SUCCESS && result != DNS_R_NEWORIGIN) + break; + result = dns_db_allrdatasets(dbi->db, node, dbi->iversion, 0, + &rdsiter); + if (result != ISC_R_SUCCESS) { + dns_db_detachnode(dbi->db, &node); + break; + } + print_rdatasets(name, rdsiter); + dns_rdatasetiter_destroy(&rdsiter); + dns_db_detachnode(dbi->db, &node); + if (dbi->ascending) + result = dns_dbiterator_next(dbi->dbiterator); + else + result = dns_dbiterator_prev(dbi->dbiterator); + i++; + if (result == ISC_R_SUCCESS && i == dbi->pause_every) { + printf("[more...]\n"); + result = dns_dbiterator_pause(dbi->dbiterator); + if (result == ISC_R_SUCCESS) + return; + } + } + if (result != ISC_R_NOMORE) + print_result("", result); + + dns_dbiterator_destroy(&dbi->dbiterator); + if (dbi->iversion != NULL) + dns_db_closeversion(dbi->db, &dbi->iversion, ISC_FALSE); +} + +static isc_result_t +load(const char *filename, const char *origintext, isc_boolean_t cache) { + dns_fixedname_t forigin; + dns_name_t *origin; + isc_result_t result; + isc_buffer_t source; + size_t len; + dbinfo *dbi; + unsigned int i; + + dbi = isc_mem_get(mctx, sizeof(*dbi)); + if (dbi == NULL) + return (ISC_R_NOMEMORY); + + dbi->db = NULL; + dbi->version = NULL; + dbi->wversion = NULL; + for (i = 0; i < MAXVERSIONS; i++) + dbi->rversions[i] = NULL; + dbi->hold_count = 0; + for (i = 0; i < MAXHOLD; i++) + dbi->hold_nodes[i] = NULL; + dbi->dbiterator = NULL; + dbi->iversion = NULL; + dbi->pause_every = pause_every; + dbi->ascending = ascending; + ISC_LINK_INIT(dbi, link); + + len = strlen(origintext); + isc_buffer_init(&source, origintext, len); + isc_buffer_add(&source, len); + dns_fixedname_init(&forigin); + origin = dns_fixedname_name(&forigin); + result = dns_name_fromtext(origin, &source, dns_rootname, ISC_FALSE, + NULL); + if (result != ISC_R_SUCCESS) + return (result); + + result = dns_db_create(mctx, dbtype, origin, + cache ? dns_dbtype_cache : dns_dbtype_zone, + dns_rdataclass_in, + 0, NULL, &dbi->db); + if (result != ISC_R_SUCCESS) { + isc_mem_put(mctx, dbi, sizeof(*dbi)); + return (result); + } + + printf("loading %s (%s)\n", filename, origintext); + result = dns_db_load(dbi->db, filename); + if (result != ISC_R_SUCCESS && result != DNS_R_SEENINCLUDE) { + dns_db_detach(&dbi->db); + isc_mem_put(mctx, dbi, sizeof(*dbi)); + return (result); + } + printf("loaded\n"); + + if (cache) { + INSIST(cache_dbi == NULL); + dns_dbtable_adddefault(dbtable, dbi->db); + cache_dbi = dbi; + } else { + if (dns_dbtable_add(dbtable, dbi->db) != ISC_R_SUCCESS) { + dns_db_detach(&dbi->db); + isc_mem_put(mctx, dbi, sizeof(*dbi)); + return (result); + } + } + ISC_LIST_APPEND(dbs, dbi, link); + + return (ISC_R_SUCCESS); +} + +static void +unload_all(void) { + dbinfo *dbi, *dbi_next; + + for (dbi = ISC_LIST_HEAD(dbs); dbi != NULL; dbi = dbi_next) { + dbi_next = ISC_LIST_NEXT(dbi, link); + if (dns_db_iszone(dbi->db)) + dns_dbtable_remove(dbtable, dbi->db); + else { + INSIST(dbi == cache_dbi); + dns_dbtable_removedefault(dbtable); + cache_dbi = NULL; + } + dns_db_detach(&dbi->db); + ISC_LIST_UNLINK(dbs, dbi, link); + isc_mem_put(mctx, dbi, sizeof(*dbi)); + } +} + +#define DBI_CHECK(dbi) \ +if ((dbi) == NULL) { \ + printf("You must first select a database with !DB\n"); \ + continue; \ +} + +int +main(int argc, char *argv[]) { + dns_db_t *db; + dns_dbnode_t *node; + isc_result_t result; + dns_name_t name; + dns_offsets_t offsets; + size_t len; + isc_buffer_t source, target; + char s[1000]; + char b[255]; + dns_rdataset_t rdataset, sigrdataset; + int ch; + dns_rdatatype_t type = 1; + isc_boolean_t printnode = ISC_FALSE; + isc_boolean_t addmode = ISC_FALSE; + isc_boolean_t delmode = ISC_FALSE; + isc_boolean_t holdmode = ISC_FALSE; + isc_boolean_t verbose = ISC_FALSE; + isc_boolean_t done = ISC_FALSE; + isc_boolean_t quiet = ISC_FALSE; + isc_boolean_t time_lookups = ISC_FALSE; + isc_boolean_t found_as; + isc_boolean_t find_zonecut = ISC_FALSE; + isc_boolean_t noexact_zonecut = ISC_FALSE; + int i, v; + dns_rdatasetiter_t *rdsiter; + char t1[256]; + char t2[256]; + isc_buffer_t tb1, tb2; + isc_region_t r1, r2; + dns_fixedname_t foundname; + dns_name_t *fname; + unsigned int options = 0, zcoptions; + isc_time_t start, finish; + char *origintext; + dbinfo *dbi; + dns_dbversion_t *version; + dns_name_t *origin; + size_t memory_quota = 0; + dns_trust_t trust = 0; + unsigned int addopts; + isc_log_t *lctx = NULL; + + dns_result_register(); + + RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS); + RUNTIME_CHECK(dns_dbtable_create(mctx, dns_rdataclass_in, &dbtable) == + ISC_R_SUCCESS); + + + + strcpy(dbtype, "rbt"); + while ((ch = isc_commandline_parse(argc, argv, "c:d:t:z:P:Q:glpqvT")) + != -1) { + switch (ch) { + case 'c': + result = load(isc_commandline_argument, ".", ISC_TRUE); + if (result != ISC_R_SUCCESS) + printf("cache load(%s) %08x: %s\n", + isc_commandline_argument, result, + isc_result_totext(result)); + break; + case 'd': + strcpy(dbtype, isc_commandline_argument); + break; + case 'g': + options |= (DNS_DBFIND_GLUEOK|DNS_DBFIND_VALIDATEGLUE); + break; + case 'l': + RUNTIME_CHECK(isc_log_create(mctx, &lctx, + NULL) == ISC_R_SUCCESS); + isc_log_setcontext(lctx); + dns_log_init(lctx); + dns_log_setcontext(lctx); + break; + case 'q': + quiet = ISC_TRUE; + verbose = ISC_FALSE; + break; + case 'p': + printnode = ISC_TRUE; + break; + case 'P': + pause_every = atoi(isc_commandline_argument); + break; + case 'Q': + memory_quota = atoi(isc_commandline_argument); + isc_mem_setquota(mctx, memory_quota); + break; + case 't': + type = atoi(isc_commandline_argument); + break; + case 'T': + time_lookups = ISC_TRUE; + break; + case 'v': + verbose = ISC_TRUE; + break; + case 'z': + origintext = strrchr(isc_commandline_argument, '/'); + if (origintext == NULL) + origintext = isc_commandline_argument; + else + origintext++; /* Skip '/'. */ + result = load(isc_commandline_argument, origintext, + ISC_FALSE); + if (result != ISC_R_SUCCESS) + printf("zone load(%s) %08x: %s\n", + isc_commandline_argument, result, + isc_result_totext(result)); + break; + } + } + + argc -= isc_commandline_index; + argv += isc_commandline_index; + + if (argc != 0) + printf("ignoring trailing arguments\n"); + + /* + * Some final initialization... + */ + dns_fixedname_init(&foundname); + fname = dns_fixedname_name(&foundname); + dbi = NULL; + origin = dns_rootname; + version = NULL; + + if (time_lookups) { + TIME_NOW(&start); + } + + while (!done) { + if (!quiet) + printf("\n"); + if (fgets(s, sizeof(s), stdin) == NULL) { + done = ISC_TRUE; + continue; + } + len = strlen(s); + if (len > 0U && s[len - 1] == '\n') { + s[len - 1] = '\0'; + len--; + } + if (verbose && dbi != NULL) { + if (dbi->wversion != NULL) + printf("future version (%p)\n", dbi->wversion); + for (i = 0; i < dbi->rcount; i++) + if (dbi->rversions[i] != NULL) + printf("open version %d (%p)\n", i, + dbi->rversions[i]); + } + dns_name_init(&name, offsets); + if (strcmp(s, "!R") == 0) { + DBI_CHECK(dbi); + if (dbi->rcount == MAXVERSIONS) { + printf("too many open versions\n"); + continue; + } + dns_db_currentversion(dbi->db, + &dbi->rversions[dbi->rcount]); + printf("opened version %d\n", dbi->rcount); + dbi->version = dbi->rversions[dbi->rcount]; + version = dbi->version; + dbi->rcount++; + continue; + } else if (strcmp(s, "!W") == 0) { + DBI_CHECK(dbi); + if (dbi->wversion != NULL) { + printf("using existing future version\n"); + dbi->version = dbi->wversion; + version = dbi->version; + continue; + } + result = dns_db_newversion(dbi->db, &dbi->wversion); + if (result != ISC_R_SUCCESS) + print_result("", result); + else + printf("newversion\n"); + dbi->version = dbi->wversion; + version = dbi->version; + continue; + } else if (strcmp(s, "!C") == 0) { + DBI_CHECK(dbi); + addmode = ISC_FALSE; + delmode = ISC_FALSE; + if (dbi->version == NULL) + continue; + if (dbi->version == dbi->wversion) { + printf("closing future version\n"); + dbi->wversion = NULL; + } else { + for (i = 0; i < dbi->rcount; i++) { + if (dbi->version == + dbi->rversions[i]) { + dbi->rversions[i] = NULL; + printf("closing open version %d\n", + i); + break; + } + } + } + dns_db_closeversion(dbi->db, &dbi->version, ISC_TRUE); + version = NULL; + continue; + } else if (strcmp(s, "!X") == 0) { + DBI_CHECK(dbi); + addmode = ISC_FALSE; + delmode = ISC_FALSE; + if (dbi->version == NULL) + continue; + if (dbi->version == dbi->wversion) { + printf("aborting future version\n"); + dbi->wversion = NULL; + } else { + for (i = 0; i < dbi->rcount; i++) { + if (dbi->version == + dbi->rversions[i]) { + dbi->rversions[i] = NULL; + printf("closing open version %d\n", + i); + break; + } + } + } + dns_db_closeversion(dbi->db, &dbi->version, ISC_FALSE); + version = NULL; + continue; + } else if (strcmp(s, "!A") == 0) { + DBI_CHECK(dbi); + delmode = ISC_FALSE; + if (addmode) + addmode = ISC_FALSE; + else + addmode = ISC_TRUE; + printf("addmode = %s\n", addmode ? "TRUE" : "FALSE"); + continue; + } else if (strcmp(s, "!D") == 0) { + DBI_CHECK(dbi); + addmode = ISC_FALSE; + if (delmode) + delmode = ISC_FALSE; + else + delmode = ISC_TRUE; + printf("delmode = %s\n", delmode ? "TRUE" : "FALSE"); + continue; + } else if (strcmp(s, "!H") == 0) { + DBI_CHECK(dbi); + if (holdmode) + holdmode = ISC_FALSE; + else + holdmode = ISC_TRUE; + printf("holdmode = %s\n", holdmode ? "TRUE" : "FALSE"); + continue; + } else if (strcmp(s, "!HR") == 0) { + DBI_CHECK(dbi); + for (i = 0; i < dbi->hold_count; i++) + dns_db_detachnode(dbi->db, + &dbi->hold_nodes[i]); + dbi->hold_count = 0; + holdmode = ISC_FALSE; + printf("held nodes have been detached\n"); + continue; + } else if (strcmp(s, "!VC") == 0) { + DBI_CHECK(dbi); + printf("switching to current version\n"); + dbi->version = NULL; + version = NULL; + continue; + } else if (strstr(s, "!V") == s) { + DBI_CHECK(dbi); + v = atoi(&s[2]); + if (v >= dbi->rcount) { + printf("unknown open version %d\n", v); + continue; + } else if (dbi->rversions[v] == NULL) { + printf("version %d is not open\n", v); + continue; + } + printf("switching to open version %d\n", v); + dbi->version = dbi->rversions[v]; + version = dbi->version; + continue; + } else if (strstr(s, "!TR") == s) { + trust = (unsigned int)atoi(&s[3]); + printf("trust level is now %u\n", (unsigned int)trust); + continue; + } else if (strstr(s, "!T") == s) { + type = (unsigned int)atoi(&s[2]); + printf("now searching for type %u\n", type); + continue; + } else if (strcmp(s, "!G") == 0) { + if ((options & DNS_DBFIND_GLUEOK) != 0) + options &= ~DNS_DBFIND_GLUEOK; + else + options |= DNS_DBFIND_GLUEOK; + printf("glue ok = %s\n", + ((options & DNS_DBFIND_GLUEOK) != 0) ? + "TRUE" : "FALSE"); + continue; + } else if (strcmp(s, "!GV") == 0) { + if ((options & DNS_DBFIND_VALIDATEGLUE) != 0) + options &= ~DNS_DBFIND_VALIDATEGLUE; + else + options |= DNS_DBFIND_VALIDATEGLUE; + printf("validate glue = %s\n", + ((options & DNS_DBFIND_VALIDATEGLUE) != 0) ? + "TRUE" : "FALSE"); + continue; + } else if (strcmp(s, "!WC") == 0) { + if ((options & DNS_DBFIND_NOWILD) != 0) + options &= ~DNS_DBFIND_NOWILD; + else + options |= DNS_DBFIND_NOWILD; + printf("wildcard matching = %s\n", + ((options & DNS_DBFIND_NOWILD) == 0) ? + "TRUE" : "FALSE"); + continue; + } else if (strstr(s, "!LS ") == s) { + DBI_CHECK(dbi); + list(dbi, &s[4]); + continue; + } else if (strcmp(s, "!LS") == 0) { + DBI_CHECK(dbi); + list(dbi, NULL); + continue; + } else if (strstr(s, "!DU ") == s) { + DBI_CHECK(dbi); + result = dns_db_dump(dbi->db, dbi->version, s+4); + if (result != ISC_R_SUCCESS) { + printf("\n"); + print_result("", result); + } + continue; + } else if (strcmp(s, "!PN") == 0) { + if (printnode) + printnode = ISC_FALSE; + else + printnode = ISC_TRUE; + printf("printnode = %s\n", + printnode ? "TRUE" : "FALSE"); + continue; + } else if (strstr(s, "!P") == s) { + DBI_CHECK(dbi); + v = atoi(&s[2]); + dbi->pause_every = v; + continue; + } else if (strcmp(s, "!+") == 0) { + DBI_CHECK(dbi); + dbi->ascending = ISC_TRUE; + continue; + } else if (strcmp(s, "!-") == 0) { + DBI_CHECK(dbi); + dbi->ascending = ISC_FALSE; + continue; + } else if (strcmp(s, "!DB") == 0) { + dbi = NULL; + origin = dns_rootname; + version = NULL; + printf("now searching all databases\n"); + continue; + } else if (strncmp(s, "!DB ", 4) == 0) { + dbi = select_db(s+4); + if (dbi != NULL) { + db = dbi->db; + origin = dns_db_origin(dbi->db); + version = dbi->version; + addmode = ISC_FALSE; + delmode = ISC_FALSE; + holdmode = ISC_FALSE; + } else { + db = NULL; + version = NULL; + origin = dns_rootname; + printf("database not found; " + "now searching all databases\n"); + } + continue; + } else if (strcmp(s, "!ZC") == 0) { + if (find_zonecut) + find_zonecut = ISC_FALSE; + else + find_zonecut = ISC_TRUE; + printf("find_zonecut = %s\n", + find_zonecut ? "TRUE" : "FALSE"); + continue; + } else if (strcmp(s, "!NZ") == 0) { + if (noexact_zonecut) + noexact_zonecut = ISC_FALSE; + else + noexact_zonecut = ISC_TRUE; + printf("noexact_zonecut = %s\n", + noexact_zonecut ? "TRUE" : "FALSE"); + continue; + } + + isc_buffer_init(&source, s, len); + isc_buffer_add(&source, len); + isc_buffer_init(&target, b, sizeof(b)); + result = dns_name_fromtext(&name, &source, origin, + ISC_FALSE, &target); + if (result != ISC_R_SUCCESS) { + print_result("bad name: ", result); + continue; + } + + if (dbi == NULL) { + zcoptions = 0; + if (noexact_zonecut) + zcoptions |= DNS_DBTABLEFIND_NOEXACT; + db = NULL; + result = dns_dbtable_find(dbtable, &name, zcoptions, + &db); + if (result != ISC_R_SUCCESS && + result != DNS_R_PARTIALMATCH) { + if (!quiet) { + printf("\n"); + print_result("", result); + } + continue; + } + isc_buffer_init(&tb1, t1, sizeof(t1)); + result = dns_name_totext(dns_db_origin(db), ISC_FALSE, + &tb1); + if (result != ISC_R_SUCCESS) { + printf("\n"); + print_result("", result); + dns_db_detach(&db); + continue; + } + isc_buffer_usedregion(&tb1, &r1); + printf("\ndatabase = %.*s (%s)\n", + (int)r1.length, r1.base, + (dns_db_iszone(db)) ? "zone" : "cache"); + } + node = NULL; + dns_rdataset_init(&rdataset); + dns_rdataset_init(&sigrdataset); + + if (find_zonecut && dns_db_iscache(db)) { + zcoptions = options; + if (noexact_zonecut) + zcoptions |= DNS_DBFIND_NOEXACT; + result = dns_db_findzonecut(db, &name, zcoptions, + 0, &node, fname, + &rdataset, &sigrdataset); + } else { + result = dns_db_find(db, &name, version, type, + options, 0, &node, fname, + &rdataset, &sigrdataset); + } + + if (!quiet) { + if (dbi != NULL) + printf("\n"); + print_result("", result); + } + + found_as = ISC_FALSE; + switch (result) { + case ISC_R_SUCCESS: + case DNS_R_GLUE: + case DNS_R_CNAME: + case DNS_R_ZONECUT: + break; + case DNS_R_DNAME: + case DNS_R_DELEGATION: + found_as = ISC_TRUE; + break; + case DNS_R_NXRRSET: + if (dns_rdataset_isassociated(&rdataset)) + break; + if (dbi != NULL) { + if (holdmode) { + RUNTIME_CHECK(dbi->hold_count < + MAXHOLD); + dbi->hold_nodes[dbi->hold_count++] = + node; + node = NULL; + } else + dns_db_detachnode(db, &node); + } else { + dns_db_detachnode(db, &node); + dns_db_detach(&db); + } + continue; + case DNS_R_NXDOMAIN: + if (dns_rdataset_isassociated(&rdataset)) + break; + /* FALLTHROUGH */ + default: + if (dbi == NULL) + dns_db_detach(&db); + if (quiet) + print_result("", result); + continue; + } + if (found_as && !quiet) { + isc_buffer_init(&tb1, t1, sizeof(t1)); + isc_buffer_init(&tb2, t2, sizeof(t2)); + result = dns_name_totext(&name, ISC_FALSE, &tb1); + if (result != ISC_R_SUCCESS) { + print_result("", result); + dns_db_detachnode(db, &node); + if (dbi == NULL) + dns_db_detach(&db); + continue; + } + result = dns_name_totext(fname, ISC_FALSE, &tb2); + if (result != ISC_R_SUCCESS) { + print_result("", result); + dns_db_detachnode(db, &node); + if (dbi == NULL) + dns_db_detach(&db); + continue; + } + isc_buffer_usedregion(&tb1, &r1); + isc_buffer_usedregion(&tb2, &r2); + printf("found %.*s as %.*s\n", + (int)r1.length, r1.base, + (int)r2.length, r2.base); + } + + if (printnode) + dns_db_printnode(db, node, stdout); + + if (!found_as && type == dns_rdatatype_any) { + rdsiter = NULL; + result = dns_db_allrdatasets(db, node, version, 0, + &rdsiter); + if (result == ISC_R_SUCCESS) { + if (!quiet) + print_rdatasets(fname, rdsiter); + dns_rdatasetiter_destroy(&rdsiter); + } else + print_result("", result); + } else { + if (!quiet) + print_rdataset(fname, &rdataset); + if (dns_rdataset_isassociated(&sigrdataset)) { + if (!quiet) + print_rdataset(fname, &sigrdataset); + dns_rdataset_disassociate(&sigrdataset); + } + if (dbi != NULL && addmode && !found_as) { + rdataset.ttl++; + rdataset.trust = trust; + if (dns_db_iszone(db)) + addopts = DNS_DBADD_MERGE; + else + addopts = 0; + result = dns_db_addrdataset(db, node, version, + 0, &rdataset, + addopts, NULL); + if (result != ISC_R_SUCCESS) + print_result("", result); + if (printnode) + dns_db_printnode(db, node, stdout); + } else if (dbi != NULL && delmode && !found_as) { + result = dns_db_deleterdataset(db, node, + version, type, + 0); + if (result != ISC_R_SUCCESS) + print_result("", result); + if (printnode) + dns_db_printnode(db, node, stdout); + } + dns_rdataset_disassociate(&rdataset); + } + + if (dbi != NULL) { + if (holdmode) { + RUNTIME_CHECK(dbi->hold_count < MAXHOLD); + dbi->hold_nodes[dbi->hold_count++] = node; + node = NULL; + } else + dns_db_detachnode(db, &node); + } else { + dns_db_detachnode(db, &node); + dns_db_detach(&db); + } + } + + if (time_lookups) { + isc_uint64_t usec; + + TIME_NOW(&finish); + + usec = isc_time_microdiff(&finish, &start); + + printf("elapsed time: %lu.%06lu seconds\n", + (unsigned long)(usec / 1000000), + (unsigned long)(usec % 1000000)); + } + + unload_all(); + + dns_dbtable_detach(&dbtable); + + if (lctx != NULL) + isc_log_destroy(&lctx); + + if (!quiet) + isc_mem_stats(mctx, stdout); + + return (0); +} diff --git a/bin/tests/dst/Kdh.+002+18602.key b/bin/tests/dst/Kdh.+002+18602.key new file mode 100644 index 0000000..09b4cf5 --- /dev/null +++ b/bin/tests/dst/Kdh.+002+18602.key @@ -0,0 +1 @@ +dh. IN KEY 0 2 2 AAEBAAAAYIHI/wjtOagNga9GILSoS02IVelgLilPE/TfhtvShsiDAXqb IfxQcj2JkuOnNLs5ttb2WZXWl5/jsSjIxHMwMF2XY4gwt/lwHBf/vgYH r7aIxnKXov1jk9rymTLHGKIOtg== diff --git a/bin/tests/dst/Kdh.+002+18602.private b/bin/tests/dst/Kdh.+002+18602.private new file mode 100644 index 0000000..a2245bf --- /dev/null +++ b/bin/tests/dst/Kdh.+002+18602.private @@ -0,0 +1,6 @@ +Private-key-format: v1.2 +Algorithm: 2 (DH) +Prime(p): ///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxObIlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjo2IP////////// +Generator(g): Ag== +Private_value(x): bpdsGQ1jbV3f2CGN/0Pk5KM1MlkFmMryPO1J1zoGn585fRmc9Ygw6l/HKmi2ViiDNorvd9/eV9uyYO6lYZC82R3D7rST1mAqCwbg/8gNE5dXBRbRIIq3qIl6GUYYs8mK +Public_value(y): gcj/CO05qA2Br0YgtKhLTYhV6WAuKU8T9N+G29KGyIMBepsh/FByPYmS46c0uzm21vZZldaXn+OxKMjEczAwXZdjiDC3+XAcF/++BgevtojGcpei/WOT2vKZMscYog62 diff --git a/bin/tests/dst/Kdh.+002+48957.key b/bin/tests/dst/Kdh.+002+48957.key new file mode 100644 index 0000000..9838829 --- /dev/null +++ b/bin/tests/dst/Kdh.+002+48957.key @@ -0,0 +1 @@ +dh. IN KEY 0 2 2 AAEBAAAAYOuaKjyMXYame2F6/ZFdEmXv0a2edB+69PEZgrExA6SJlivn 4KqAsfBHr/+0BCb+7nfWeMDSh2BXnSzWkXF1wMaCHMuz9EleG1gKFKeV Q9gKli88Cb8/jbovWChrGBNp2w== diff --git a/bin/tests/dst/Kdh.+002+48957.private b/bin/tests/dst/Kdh.+002+48957.private new file mode 100644 index 0000000..e191235 --- /dev/null +++ b/bin/tests/dst/Kdh.+002+48957.private @@ -0,0 +1,6 @@ +Private-key-format: v1.2 +Algorithm: 2 (DH) +Prime(p): ///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxObIlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjo2IP////////// +Generator(g): Ag== +Private_value(x): WJG0moh+QoZV+DYhqW7Z6O6TYpYGtSlN0Ym6JV6VRnzeH69OqMUFivqZorj3a3ofR/4zogNVyy5KLLj2NFTaLGP4Hcvt7uETJik6HrjLMhGf40QPXYgVK57Im0rv88Ca +Public_value(y): 65oqPIxdhqZ7YXr9kV0SZe/RrZ50H7r08RmCsTEDpImWK+fgqoCx8Eev/7QEJv7ud9Z4wNKHYFedLNaRcXXAxoIcy7P0SV4bWAoUp5VD2AqWLzwJvz+Nui9YKGsYE2nb diff --git a/bin/tests/dst/Ktest.+001+00002.key b/bin/tests/dst/Ktest.+001+00002.key new file mode 100644 index 0000000..a8b4b4d --- /dev/null +++ b/bin/tests/dst/Ktest.+001+00002.key @@ -0,0 +1 @@ +test. IN DNSKEY 49152 2 1 diff --git a/bin/tests/dst/Ktest.+001+54622.key b/bin/tests/dst/Ktest.+001+54622.key new file mode 100644 index 0000000..b0277e3 --- /dev/null +++ b/bin/tests/dst/Ktest.+001+54622.key @@ -0,0 +1 @@ +test. IN DNSKEY 257 3 1 AQPQjwSpaVzxIgRCpiUoozUQKGh2oX8NIFKDOvtxK+tn536OZg2cROKTlgGEHXJK9YHfW/6nzQULTVpb63P+SQMmjCCidb8IYyhItixRztVeJQ== diff --git a/bin/tests/dst/Ktest.+001+54622.private b/bin/tests/dst/Ktest.+001+54622.private new file mode 100644 index 0000000..c97ac30 --- /dev/null +++ b/bin/tests/dst/Ktest.+001+54622.private @@ -0,0 +1,10 @@ +Private-key-format: v1.2 +Algorithm: 1 (RSA) +Modulus: 0I8EqWlc8SIEQqYlKKM1EChodqF/DSBSgzr7cSvrZ+d+jmYNnETik5YBhB1ySvWB31v+p80FC01aW+tz/kkDJowgonW/CGMoSLYsUc7VXiU= +PublicExponent: Aw== +PrivateExponent: iwoDG5uTS2wC1xluGxd4tXBFpGuqCMA3AidSS3Kc7++ptEQJEtiXC9kfCJMvZhGfQLaujft2OgrmkcuDVtPIbQWEENhyJhb4Lk82kFXbfus= +Prime1: /rSKuzcZY7R5cY2YWD4CiBNyj9WJMq1wWmBnb9+5M08nTl5E9NW5qQ== +Prime2: 0Z5shXQYd16E2Gs6e5WxtO0Oqlly2KkSqXohwTQWDWTb8Pw0WTZmHQ== +Exponent1: qc2x0iS7l82mS7O65X6sWrehtTkGIcj1kZWaSpUmIjTE3umDTePRGw== +Exponent2: i77zA6K6+j8DOvIm/Q52eJ4JxuZMkHC3G6bBK3gOs5iSoKgi5iREEw== +Coefficient: 3+wYZB0SJad7z2EsjzgbSlg6CawoaOvrROGSbwSiW5DCsMFROudOTw== diff --git a/bin/tests/dst/Ktest.+003+23616.key b/bin/tests/dst/Ktest.+003+23616.key new file mode 100644 index 0000000..958d585 --- /dev/null +++ b/bin/tests/dst/Ktest.+003+23616.key @@ -0,0 +1 @@ +test. IN DNSKEY 16641 3 3 ANp1//lqDlEfTavcFI+cyudNfgEz73V/K7fSDvkA0eDYcGg/kSvEjAEO/oLWCERltkuC55ZcM/mSv17WF1d/wR6kww/pLI9eXwkjftAYqs5sNxk+mbEGl6zwve9wq5z7IoTY5/J4l7XLCKftg/wGvrzXQhggIkRvEh3myhxd+ouILcpfvTIthWlTKiH59tSJpmgmiSMTE7nDYaf10iVRWN6DMSprgejiH05/fpmyZAt44tyAh4m1wXS5u4tam1PXDJYJozn7EfQ8e2weIv1yC+t6PHSx diff --git a/bin/tests/dst/Ktest.+003+23616.private b/bin/tests/dst/Ktest.+003+23616.private new file mode 100644 index 0000000..5781c9d --- /dev/null +++ b/bin/tests/dst/Ktest.+003+23616.private @@ -0,0 +1,7 @@ +Private-key-format: v1.2 +Algorithm: 3 (DSA) +Prime(p): 73V/K7fSDvkA0eDYcGg/kSvEjAEO/oLWCERltkuC55ZcM/mSv17WF1d/wR6kww/pLI9eXwkjftAYqs5sNxk+mQ== +Subprime(q): 2nX/+WoOUR9Nq9wUj5zK501+ATM= +Base(g): sQaXrPC973CrnPsihNjn8niXtcsIp+2D/Aa+vNdCGCAiRG8SHebKHF36i4gtyl+9Mi2FaVMqIfn21ImmaCaJIw== +Private_value(x): Nky4tvIwg6xlcyeHXr4k2DEZg0E= +Public_value(y): ExO5w2Gn9dIlUVjegzEqa4Ho4h9Of36ZsmQLeOLcgIeJtcF0ubuLWptT1wyWCaM5+xH0PHtsHiL9cgvrejx0sQ== diff --git a/bin/tests/dst/Ktest.+003+49667.key b/bin/tests/dst/Ktest.+003+49667.key new file mode 100644 index 0000000..fb73f57 --- /dev/null +++ b/bin/tests/dst/Ktest.+003+49667.key @@ -0,0 +1 @@ +test. IN DNSKEY 49152 2 3 diff --git a/bin/tests/dst/Makefile.in b/bin/tests/dst/Makefile.in new file mode 100644 index 0000000..9b317fc --- /dev/null +++ b/bin/tests/dst/Makefile.in @@ -0,0 +1,65 @@ +# Copyright (C) 2004, 2006-2008 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 1999-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. + +# $Id: Makefile.in,v 1.46 2008/05/19 23:47:03 tbox Exp $ + +srcdir = @srcdir@ +VPATH = @srcdir@ +top_srcdir = @top_srcdir@ + +@BIND9_MAKE_INCLUDES@ + +CINCLUDES = ${TEST_INCLUDES} ${DNS_INCLUDES} \ + ${ISC_INCLUDES} @DST_GSSAPI_INC@ + +CDEFINES = +CWARNINGS = + +DNSLIBS = ../../../lib/dns/libdns.@A@ @DNS_CRYPTO_LIBS@ +ISCLIBS = ../../../lib/isc/libisc.@A@ + +DNSDEPLIBS = ../../../lib/dns/libdns.@A@ +ISCDEPLIBS = ../../../lib/isc/libisc.@A@ + +DEPLIBS = ${DNSDEPLIBS} ${ISCDEPLIBS} + +LIBS = ${DNSLIBS} ${ISCLIBS} @LIBS@ + +TLIB = ../../../lib/tests/libt_api.@A@ + +TARGETS = dst_test@EXEEXT@ t_dst@EXEEXT@ gsstest@EXEEXT@ + +SRCS = dst_test.c t_dst.c gsstest.c + +@BIND9_MAKE_RULES@ + +dst_test@EXEEXT@: dst_test.@O@ ${DEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ \ + dst_test.@O@ ${LIBS} + +t_dst@EXEEXT@: t_dst.@O@ ${DEPLIBS} ${TLIB} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ \ + t_dst.@O@ ${TLIB} ${LIBS} + +gsstest@EXEEXT@: gsstest.@O@ ${DEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ \ + gsstest.@O@ ${LIBS} + +test: t_dst@EXEEXT@ + ../genrandom@EXEEXT@ 100 randomfile + -@ ./t_dst@EXEEXT@ -b @srcdir@ -q 1800 -a + +clean distclean:: + rm -f ${TARGETS} randomfile diff --git a/bin/tests/dst/dst_2_data b/bin/tests/dst/dst_2_data new file mode 100644 index 0000000..a303065 --- /dev/null +++ b/bin/tests/dst/dst_2_data @@ -0,0 +1,16 @@ +# +# data for signature verification test +# +# format: +# datafile, sigpath, keyname, keyid, alg, exp_result +# +t2_data_1 t2_dsasig test. 23616 DST_ALG_DSA ISC_R_SUCCESS +t2_data_1 t2_rsasig test. 54622 DST_ALG_RSAMD5 ISC_R_SUCCESS +# wrong sig +t2_data_1 t2_dsasig test. 54622 DST_ALG_RSAMD5 !ISC_R_SUCCESS +# wrong key +#t2_data_1 t2_dsasig test. 54622 DST_ALG_DSA !ISC_R_SUCCESS +# wrong alg +#t2_data_1 t2_dsasig test. 23616 DST_ALG_RSAMD5 !ISC_R_SUCCESS +# wrong data +t2_data_2 t2_dsasig test. 23616 DST_ALG_DSA !ISC_R_SUCCESS diff --git a/bin/tests/dst/dst_test.c b/bin/tests/dst/dst_test.c new file mode 100644 index 0000000..8347a7d --- /dev/null +++ b/bin/tests/dst/dst_test.c @@ -0,0 +1,294 @@ +/* + * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1999-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. + */ + +/* $Id: dst_test.c,v 1.43 2007/06/19 23:47:00 tbox Exp $ */ + +#include <config.h> + +#include <stdlib.h> + +#include <unistd.h> /* XXX */ + +#include <isc/buffer.h> +#include <isc/entropy.h> +#include <isc/mem.h> +#include <isc/region.h> +#include <isc/string.h> /* Required for HP/UX (and others?) */ + +#include <dns/fixedname.h> +#include <dns/name.h> +#include <dns/result.h> + +#include <dst/dst.h> +#include <dst/result.h> + +char *current; +const char *tmp = "/tmp"; + +static void +use(dst_key_t *key, isc_mem_t *mctx) { + isc_result_t ret; + const char *data = "This is some data"; + unsigned char sig[512]; + isc_buffer_t databuf, sigbuf; + isc_region_t datareg, sigreg; + dst_context_t *ctx = NULL; + + isc_buffer_init(&sigbuf, sig, sizeof(sig)); + /* + * Advance 1 byte for fun. + */ + isc_buffer_add(&sigbuf, 1); + + isc_buffer_init(&databuf, data, strlen(data)); + isc_buffer_add(&databuf, strlen(data)); + isc_buffer_usedregion(&databuf, &datareg); + + ret = dst_context_create(key, mctx, &ctx); + if (ret != ISC_R_SUCCESS) { + printf("contextcreate(%d) returned: %s\n", dst_key_alg(key), + isc_result_totext(ret)); + return; + } + ret = dst_context_adddata(ctx, &datareg); + if (ret != ISC_R_SUCCESS) { + printf("adddata(%d) returned: %s\n", dst_key_alg(key), + isc_result_totext(ret)); + dst_context_destroy(&ctx); + return; + } + ret = dst_context_sign(ctx, &sigbuf); + printf("sign(%d) returned: %s\n", dst_key_alg(key), + isc_result_totext(ret)); + dst_context_destroy(&ctx); + + isc_buffer_forward(&sigbuf, 1); + isc_buffer_remainingregion(&sigbuf, &sigreg); + ret = dst_context_create(key, mctx, &ctx); + if (ret != ISC_R_SUCCESS) { + printf("contextcreate(%d) returned: %s\n", dst_key_alg(key), + isc_result_totext(ret)); + return; + } + ret = dst_context_adddata(ctx, &datareg); + if (ret != ISC_R_SUCCESS) { + printf("adddata(%d) returned: %s\n", dst_key_alg(key), + isc_result_totext(ret)); + dst_context_destroy(&ctx); + return; + } + ret = dst_context_verify(ctx, &sigreg); + printf("verify(%d) returned: %s\n", dst_key_alg(key), + isc_result_totext(ret)); + dst_context_destroy(&ctx); +} + +static void +dns(dst_key_t *key, isc_mem_t *mctx) { + unsigned char buffer1[2048]; + unsigned char buffer2[2048]; + isc_buffer_t buf1, buf2; + isc_region_t r1, r2; + dst_key_t *newkey = NULL; + isc_result_t ret; + isc_boolean_t match; + + isc_buffer_init(&buf1, buffer1, sizeof(buffer1)); + ret = dst_key_todns(key, &buf1); + printf("todns(%d) returned: %s\n", dst_key_alg(key), + isc_result_totext(ret)); + if (ret != ISC_R_SUCCESS) + return; + ret = dst_key_fromdns(dst_key_name(key), dns_rdataclass_in, + &buf1, mctx, &newkey); + printf("fromdns(%d) returned: %s\n", dst_key_alg(key), + isc_result_totext(ret)); + if (ret != ISC_R_SUCCESS) + return; + isc_buffer_init(&buf2, buffer2, sizeof(buffer2)); + ret = dst_key_todns(newkey, &buf2); + printf("todns2(%d) returned: %s\n", dst_key_alg(key), + isc_result_totext(ret)); + if (ret != ISC_R_SUCCESS) + return; + isc_buffer_usedregion(&buf1, &r1); + isc_buffer_usedregion(&buf2, &r2); + match = ISC_TF(r1.length == r2.length && + memcmp(r1.base, r2.base, r1.length) == 0); + printf("compare(%d): %s\n", dst_key_alg(key), + match ? "true" : "false"); + dst_key_free(&newkey); +} + +static void +io(dns_name_t *name, int id, int alg, int type, isc_mem_t *mctx) { + dst_key_t *key = NULL; + isc_result_t ret; + + ret = dst_key_fromfile(name, id, alg, type, current, mctx, &key); + printf("read(%d) returned: %s\n", alg, isc_result_totext(ret)); + if (ret != 0) + return; + ret = dst_key_tofile(key, type, tmp); + printf("write(%d) returned: %s\n", alg, isc_result_totext(ret)); + if (ret != 0) + return; + use(key, mctx); + dns(key, mctx); + dst_key_free(&key); +} + +static void +dh(dns_name_t *name1, int id1, dns_name_t *name2, int id2, isc_mem_t *mctx) { + dst_key_t *key1 = NULL, *key2 = NULL; + isc_result_t ret; + isc_buffer_t b1, b2; + isc_region_t r1, r2; + unsigned char array1[1024], array2[1024]; + int alg = DST_ALG_DH; + int type = DST_TYPE_PUBLIC|DST_TYPE_PRIVATE|DST_TYPE_KEY; + + ret = dst_key_fromfile(name1, id1, alg, type, current, mctx, &key1); + printf("read(%d) returned: %s\n", alg, isc_result_totext(ret)); + if (ret != 0) + return; + ret = dst_key_fromfile(name2, id2, alg, type, current, mctx, &key2); + printf("read(%d) returned: %s\n", alg, isc_result_totext(ret)); + if (ret != 0) + return; + + ret = dst_key_tofile(key1, type, tmp); + printf("write(%d) returned: %s\n", alg, isc_result_totext(ret)); + if (ret != 0) + return; + ret = dst_key_tofile(key2, type, tmp); + printf("write(%d) returned: %s\n", alg, isc_result_totext(ret)); + if (ret != 0) + return; + + isc_buffer_init(&b1, array1, sizeof(array1)); + ret = dst_key_computesecret(key1, key2, &b1); + printf("computesecret() returned: %s\n", isc_result_totext(ret)); + if (ret != 0) + return; + + isc_buffer_init(&b2, array2, sizeof(array2)); + ret = dst_key_computesecret(key2, key1, &b2); + printf("computesecret() returned: %s\n", isc_result_totext(ret)); + if (ret != 0) + return; + + isc_buffer_usedregion(&b1, &r1); + isc_buffer_usedregion(&b2, &r2); + + if (r1.length != r2.length || memcmp(r1.base, r2.base, r1.length) != 0) + { + int i; + printf("secrets don't match\n"); + printf("secret 1: %d bytes\n", r1.length); + for (i = 0; i < (int) r1.length; i++) + printf("%02x ", r1.base[i]); + printf("\n"); + printf("secret 2: %d bytes\n", r2.length); + for (i = 0; i < (int) r2.length; i++) + printf("%02x ", r2.base[i]); + printf("\n"); + } + dst_key_free(&key1); + dst_key_free(&key2); +} + +static void +generate(int alg, isc_mem_t *mctx) { + isc_result_t ret; + dst_key_t *key = NULL; + + ret = dst_key_generate(dns_rootname, alg, 512, 0, 0, 0, + dns_rdataclass_in, mctx, &key); + printf("generate(%d) returned: %s\n", alg, isc_result_totext(ret)); + if (ret != ISC_R_SUCCESS) + return; + + if (alg != DST_ALG_DH) + use(key, mctx); + + dst_key_free(&key); +} + +int +main(void) { + isc_mem_t *mctx = NULL; + isc_entropy_t *ectx = NULL; + isc_buffer_t b; + dns_fixedname_t fname; + dns_name_t *name; + isc_result_t result; + + result = isc_mem_create(0, 0, &mctx); + if (result != ISC_R_SUCCESS) + return (1); + + current = isc_mem_get(mctx, 256); + if (current == NULL) + return (1); + getcwd(current, 256); + + dns_result_register(); + + result = isc_entropy_create(mctx, &ectx); + if (result != ISC_R_SUCCESS) + return (1); + result = isc_entropy_createfilesource(ectx, "randomfile"); + if (result != ISC_R_SUCCESS) + return (1); + dst_lib_init(mctx, ectx, ISC_ENTROPY_BLOCKING|ISC_ENTROPY_GOODONLY); + + dns_fixedname_init(&fname); + name = dns_fixedname_name(&fname); + isc_buffer_init(&b, "test.", 5); + isc_buffer_add(&b, 5); + result = dns_name_fromtext(name, &b, NULL, ISC_FALSE, NULL); + if (result != ISC_R_SUCCESS) + return (1); + io(name, 23616, DST_ALG_DSA, DST_TYPE_PRIVATE|DST_TYPE_PUBLIC, mctx); + io(name, 54622, DST_ALG_RSAMD5, DST_TYPE_PRIVATE|DST_TYPE_PUBLIC, + mctx); + + io(name, 49667, DST_ALG_DSA, DST_TYPE_PRIVATE|DST_TYPE_PUBLIC, mctx); + io(name, 2, DST_ALG_RSAMD5, DST_TYPE_PRIVATE|DST_TYPE_PUBLIC, mctx); + + isc_buffer_init(&b, "dh.", 3); + isc_buffer_add(&b, 3); + result = dns_name_fromtext(name, &b, NULL, ISC_FALSE, NULL); + if (result != ISC_R_SUCCESS) + return (1); + dh(name, 18602, name, 48957, mctx); + + generate(DST_ALG_RSAMD5, mctx); + generate(DST_ALG_DH, mctx); + generate(DST_ALG_DSA, mctx); + generate(DST_ALG_HMACMD5, mctx); + + dst_lib_destroy(); + isc_entropy_detach(&ectx); + + isc_mem_put(mctx, current, 256); +/* isc_mem_stats(mctx, stdout);*/ + isc_mem_destroy(&mctx); + + return (0); +} diff --git a/bin/tests/dst/gsstest.c b/bin/tests/dst/gsstest.c new file mode 100755 index 0000000..98e16d2 --- /dev/null +++ b/bin/tests/dst/gsstest.c @@ -0,0 +1,566 @@ +/* + * Copyright (C) 2006, 2007 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: gsstest.c,v 1.6 2007/06/19 23:47:00 tbox Exp $ */ + +#include <config.h> + +#include <stdlib.h> +#include <string.h> + +#include <isc/app.h> +#include <isc/base64.h> +#include <isc/entropy.h> +#include <isc/log.h> +#include <isc/mem.h> +#include <isc/sockaddr.h> +#include <isc/socket.h> +#include <isc/task.h> +#include <isc/timer.h> +#include <isc/util.h> + +#include <dns/dispatch.h> +#include <dns/fixedname.h> +#include <dns/keyvalues.h> +#include <dns/log.h> +#include <dns/message.h> +#include <dns/name.h> +#include <dns/request.h> +#include <dns/result.h> +#include <dns/tkey.h> +#include <dns/tsig.h> +#include <dns/view.h> + +#include <dns/dnssec.h> +#include <dns/events.h> +#include <dns/masterdump.h> +#include <dns/rdataset.h> +#include <dns/resolver.h> +#include <dns/types.h> + +#include <dst/result.h> + +#ifdef GSSAPI +#include ISC_PLATFORM_GSSAPIHEADER + +struct dst_context { + unsigned int magic; + dst_key_t *key; + isc_mem_t *mctx; + void *opaque; +}; + +#define CHECK(str, x) { \ + if ((x) != ISC_R_SUCCESS) { \ + fprintf(stderr, "I:%d:%s: %s\n", __LINE__, (str), isc_result_totext(x)); \ + goto end; \ + } \ +} + +static char contextname[512]; +static char gssid[512]; +static char serveraddress[512]; +static dns_fixedname_t servername, gssname; + +static isc_mem_t *mctx; +static dns_requestmgr_t *requestmgr; +static isc_sockaddr_t address; + +static dns_tsig_keyring_t *ring; +static dns_tsigkey_t *tsigkey = NULL; +static gss_ctx_id_t gssctx; +static gss_ctx_id_t *gssctxp = &gssctx; + +#define RUNCHECK(x) RUNTIME_CHECK((x) == ISC_R_SUCCESS) + +#define PORT 53 +#define TIMEOUT 30 + +static void initctx1(isc_task_t *task, isc_event_t *event); +static void sendquery(isc_task_t *task, isc_event_t *event); +static void setup(); + +static void +console(isc_task_t *task, isc_event_t *event) +{ + char buf[32]; + isc_event_t *ev = NULL; + + isc_event_free(&event); + + while(1) { + printf("\nCommand => "); + scanf("%s", buf); + + if(strcmp(buf, "quit") == 0) { + isc_app_shutdown(); + return; + } + + if(strcmp(buf, "initctx") == 0) { + ev = isc_event_allocate(mctx, (void *)1, 1, initctx1, + NULL, sizeof(*event)); + isc_task_send(task, &ev); + return; + } + + if(strcmp(buf, "query") == 0) { + ev = isc_event_allocate(mctx, (void *)1, 1, sendquery, + NULL, sizeof(*event)); + isc_task_send(task, &ev); + return; + } + + printf("Unknown command\n"); + } +} + +static void +recvresponse(isc_task_t *task, isc_event_t *event) { + dns_requestevent_t *reqev = (dns_requestevent_t *)event; + isc_result_t result, result2; + dns_message_t *query, *response = NULL; + isc_buffer_t outtoken; + isc_buffer_t outbuf; + char output[10 * 1024]; + + unsigned char array[DNS_NAME_MAXTEXT + 1]; + isc_buffer_init(&outtoken, array, sizeof(array)); + + UNUSED(task); + + REQUIRE(reqev != NULL); + + if (reqev->result != ISC_R_SUCCESS) { + fprintf(stderr, "I:request event result: %s\n", + isc_result_totext(reqev->result)); + goto end; + } + + query = reqev->ev_arg; + + response = NULL; + result = dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &response); + CHECK("dns_message_create", result); + + printf("\nReceived Response:\n"); + + result2 = dns_request_getresponse(reqev->request, response, + DNS_MESSAGEPARSE_PRESERVEORDER); + isc_buffer_init(&outbuf, output, sizeof(output)); + result = dns_message_totext(response, &dns_master_style_debug, 0, + &outbuf); + CHECK("dns_message_totext", result); + printf("%.*s\n", (int)isc_buffer_usedlength(&outbuf), + (char *)isc_buffer_base(&outbuf)); + + CHECK("dns_request_getresponse", result2); + + if (response) + dns_message_destroy(&response); + +end: + if (query) + dns_message_destroy(&query); + + if (reqev->request) + dns_request_destroy(&reqev->request); + + isc_event_free(&event); + + event = isc_event_allocate(mctx, (void *)1, 1, console, NULL, + sizeof(*event)); + isc_task_send(task, &event); + return; +} + + +static void +sendquery(isc_task_t *task, isc_event_t *event) +{ + dns_request_t *request = NULL; + dns_message_t *message = NULL; + dns_name_t *qname = NULL; + dns_rdataset_t *qrdataset = NULL; + isc_result_t result; + dns_fixedname_t queryname; + isc_buffer_t buf; + isc_buffer_t outbuf; + char output[10 * 1024]; + + static char host[256]; + + isc_event_free(&event); + + printf("Query => "); + scanf("%s", host); + + dns_fixedname_init(&queryname); + isc_buffer_init(&buf, host, strlen(host)); + isc_buffer_add(&buf, strlen(host)); + result = dns_name_fromtext(dns_fixedname_name(&queryname), &buf, + dns_rootname, ISC_FALSE, NULL); + CHECK("dns_name_fromtext", result); + + result = dns_message_create(mctx, DNS_MESSAGE_INTENTRENDER, &message); + + message->opcode = dns_opcode_query; + message->rdclass = dns_rdataclass_in; + message->id = (unsigned short)(random() & 0xFFFF); + + result = dns_message_gettempname(message, &qname); + if (result != ISC_R_SUCCESS) + goto end; + + result = dns_message_gettemprdataset(message, &qrdataset); + if (result != ISC_R_SUCCESS) + goto end; + + dns_name_init(qname, NULL); + dns_name_clone(dns_fixedname_name(&queryname), qname); + dns_rdataset_init(qrdataset); + dns_rdataset_makequestion(qrdataset, dns_rdataclass_in, + dns_rdatatype_a); + ISC_LIST_APPEND(qname->list, qrdataset, link); + dns_message_addname(message, qname, DNS_SECTION_QUESTION); + + result = dns_request_create(requestmgr, message, &address, 0, tsigkey, + TIMEOUT, task, recvresponse, + message, &request); + CHECK("dns_request_create", result); + + printf("Submitting query:\n"); + isc_buffer_init(&outbuf, output, sizeof(output)); + result = dns_message_totext(message, &dns_master_style_debug, 0, + &outbuf); + CHECK("dns_message_totext", result); + printf("%.*s\n", (int)isc_buffer_usedlength(&outbuf), + (char *)isc_buffer_base(&outbuf)); + + return; + + end: + if (qname != NULL) + dns_message_puttempname(message, &qname); + if (qrdataset != NULL) + dns_message_puttemprdataset(message, &qrdataset); + if (message != NULL) + dns_message_destroy(&message); +} + +static void +initctx2(isc_task_t *task, isc_event_t *event) { + dns_requestevent_t *reqev = (dns_requestevent_t *)event; + isc_result_t result; + dns_message_t *query, *response = NULL; + isc_buffer_t outtoken; + unsigned char array[DNS_NAME_MAXTEXT + 1]; + dns_rdataset_t *rdataset; + dns_rdatatype_t qtype; + dns_name_t *question_name; + + UNUSED(task); + + REQUIRE(reqev != NULL); + + if (reqev->result != ISC_R_SUCCESS) { + fprintf(stderr, "I:request event result: %s\n", + isc_result_totext(reqev->result)); + goto end; + } + + query = reqev->ev_arg; + + response = NULL; + result = dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &response); + CHECK("dns_message_create", result); + + result = dns_request_getresponse(reqev->request, response, + DNS_MESSAGEPARSE_PRESERVEORDER); + CHECK("dns_request_getresponse", result); + + if (response->rcode != dns_rcode_noerror) { + result = ISC_RESULTCLASS_DNSRCODE + response->rcode; + fprintf(stderr, "I:response rcode: %s\n", + isc_result_totext(result)); + goto end; + } + + printf("Received token from server, calling gss_init_sec_context()\n"); + isc_buffer_init(&outtoken, array, DNS_NAME_MAXTEXT + 1); + result = dns_tkey_processgssresponse(query, response, + dns_fixedname_name(&gssname), + &gssctx, &outtoken, + &tsigkey, ring); + gssctx = *gssctxp; + CHECK("dns_tkey_processgssresponse", result); + printf("Context accepted\n"); + + question_name = NULL; + dns_message_currentname(response, DNS_SECTION_ANSWER, &question_name); + rdataset = ISC_LIST_HEAD(question_name->list); + INSIST(rdataset != NULL); + qtype = rdataset->type; + if(qtype == dns_rdatatype_tkey) { + printf("Received TKEY response from server\n"); + printf("Context completed\n"); + } else { + printf("Did not receive TKEY response from server\n"); + printf("Context not completed\n"); + dns_tsigkey_detach(&tsigkey); + tsigkey = NULL; + } + + if(response) + dns_message_destroy(&response); + +end: + if(query) + dns_message_destroy(&query); + + if(reqev->request) + dns_request_destroy(&reqev->request); + + isc_event_free(&event); + + event = isc_event_allocate(mctx, (void *)1, 1, console, NULL, + sizeof(*event)); + isc_task_send(task, &event); + return; +} + +static void +initctx1(isc_task_t *task, isc_event_t *event) { + isc_result_t result; + isc_buffer_t buf; + dns_message_t *query; + dns_request_t *request; + + isc_event_free(&event); + + printf("Initctx - GSS name => "); + scanf("%s", gssid); + + sprintf(contextname, "gsstest.context.%d.", (int)time(NULL)); + + printf("Initctx - context name we're using: %s\n", contextname); + + printf("Negotiating GSSAPI context: "); + printf(gssid); + printf("\n"); + + /* + * Setup a GSSAPI context with the server + */ + dns_fixedname_init(&servername); + isc_buffer_init(&buf, contextname, strlen(contextname)); + isc_buffer_add(&buf, strlen(contextname)); + result = dns_name_fromtext(dns_fixedname_name(&servername), &buf, + dns_rootname, ISC_FALSE, NULL); + CHECK("dns_name_fromtext", result); + + /* Make name happen */ + dns_fixedname_init(&gssname); + isc_buffer_init(&buf, gssid, strlen(gssid)); + isc_buffer_add(&buf, strlen(gssid)); + result = dns_name_fromtext(dns_fixedname_name(&gssname), &buf, + dns_rootname, ISC_FALSE, NULL); + CHECK("dns_name_fromtext", result); + + query = NULL; + result = dns_message_create(mctx, DNS_MESSAGE_INTENTRENDER, &query); + CHECK("dns_message_create", result); + + printf("Calling gss_init_sec_context()\n"); + gssctx = GSS_C_NO_CONTEXT; + result = dns_tkey_buildgssquery(query, dns_fixedname_name(&servername), + dns_fixedname_name(&gssname), + NULL, 36000, &gssctx, ISC_TRUE); + CHECK("dns_tkey_buildgssquery", result); + + printf("Sending context token to server\n"); + request = NULL; + result = dns_request_create(requestmgr, query, &address, 0, NULL, + TIMEOUT, task, initctx2, query, &request); + CHECK("dns_request_create", result); + + return; +end: + event = isc_event_allocate(mctx, (void *)1, 1, console, NULL, + sizeof(*event)); + isc_task_send(task, &event);return; +} + +static void +setup(void) +{ + struct in_addr inaddr; + int c; + + while (1) { + printf("Server IP => "); + c = scanf("%s", serveraddress); + + if(c == EOF || strcmp(serveraddress, "quit") == 0) { + isc_app_shutdown(); + return; + } + + if (inet_pton(AF_INET, serveraddress, &inaddr) == 1) { + isc_sockaddr_fromin(&address, &inaddr, PORT); + return; + } + + }; +} + +int +main(int argc, char *argv[]) { + isc_taskmgr_t *taskmgr; + isc_timermgr_t *timermgr; + isc_socketmgr_t *socketmgr; + isc_socket_t *sock; + unsigned int attrs, attrmask; + isc_sockaddr_t bind_any; + dns_dispatchmgr_t *dispatchmgr; + dns_dispatch_t *dispatchv4; + dns_view_t *view; + isc_entropy_t *ectx; + isc_task_t *task; + isc_log_t *lctx = NULL; + isc_logconfig_t *lcfg = NULL; + isc_logdestination_t destination; + + UNUSED(argv); + UNUSED(argc); + + RUNCHECK(isc_app_start()); + + dns_result_register(); + + mctx = NULL; + RUNCHECK(isc_mem_create(0, 0, &mctx)); + + RUNCHECK(isc_log_create(mctx, &lctx, &lcfg)); + isc_log_setcontext(lctx); + dns_log_init(lctx); + dns_log_setcontext(lctx); + + /* + * Create and install the default channel. + */ + destination.file.stream = stderr; + destination.file.name = NULL; + destination.file.versions = ISC_LOG_ROLLNEVER; + destination.file.maximum_size = 0; + RUNCHECK(isc_log_createchannel(lcfg, "_default", + ISC_LOG_TOFILEDESC, + ISC_LOG_DYNAMIC, + &destination, ISC_LOG_PRINTTIME)); + RUNCHECK(isc_log_usechannel(lcfg, "_default", NULL, NULL)); + + isc_log_setdebuglevel(lctx, 9); + + ectx = NULL; + RUNCHECK(isc_entropy_create(mctx, &ectx)); + RUNCHECK(isc_entropy_createfilesource(ectx, "/dev/urandom")); + + RUNCHECK(dst_lib_init(mctx, ectx, ISC_ENTROPY_GOODONLY)); + + taskmgr = NULL; + RUNCHECK(isc_taskmgr_create(mctx, 1, 0, &taskmgr)); + task = NULL; + RUNCHECK(isc_task_create(taskmgr, 0, &task)); + timermgr = NULL; + RUNCHECK(isc_timermgr_create(mctx, &timermgr)); + socketmgr = NULL; + RUNCHECK(isc_socketmgr_create(mctx, &socketmgr)); + dispatchmgr = NULL; + RUNCHECK(dns_dispatchmgr_create(mctx, ectx, &dispatchmgr)); + isc_sockaddr_any(&bind_any); + attrs = DNS_DISPATCHATTR_UDP | + DNS_DISPATCHATTR_MAKEQUERY | + DNS_DISPATCHATTR_IPV4; + attrmask = DNS_DISPATCHATTR_UDP | + DNS_DISPATCHATTR_TCP | + DNS_DISPATCHATTR_IPV4 | + DNS_DISPATCHATTR_IPV6; + dispatchv4 = NULL; + RUNCHECK(dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr, + &bind_any, 4096, 4, 2, 3, 5, + attrs, attrmask, &dispatchv4)); + requestmgr = NULL; + RUNCHECK(dns_requestmgr_create(mctx, timermgr, socketmgr, taskmgr, + dispatchmgr, dispatchv4, NULL, + &requestmgr)); + + ring = NULL; + RUNCHECK(dns_tsigkeyring_create(mctx, &ring)); + + view = NULL; + RUNCHECK(dns_view_create(mctx, 0, "_test", &view)); + dns_view_setkeyring(view, ring); + + sock = NULL; + RUNCHECK(isc_socket_create(socketmgr, PF_INET, isc_sockettype_udp, + &sock)); + + setup(); + + RUNCHECK(isc_app_onrun(mctx, task, console, NULL)); + + (void)isc_app_run(); + + if (tsigkey) + dns_tsigkey_detach(&tsigkey); + + dns_requestmgr_shutdown(requestmgr); + dns_requestmgr_detach(&requestmgr); + + dns_dispatch_detach(&dispatchv4); + dns_dispatchmgr_destroy(&dispatchmgr); + + isc_timermgr_destroy(&timermgr); + + isc_task_detach(&task); + isc_taskmgr_destroy(&taskmgr); + + isc_socket_detach(&sock); + isc_socketmgr_destroy(&socketmgr); + + isc_mem_stats(mctx, stdout); + + dns_view_detach(&view); + + dst_lib_destroy(); + isc_entropy_detach(&ectx); + + isc_mem_stats(mctx, stdout); + isc_mem_destroy(&mctx); + + isc_app_finish(); + + return (0); +} +#else +int +main(int argc, char *argv[]) { + UNUSED(argc); + UNUSED(argv); + fprintf(stderr, "R:GSSAPIONLY\n"); + return (0); +} +#endif diff --git a/bin/tests/dst/t2_data_1 b/bin/tests/dst/t2_data_1 new file mode 100644 index 0000000..b1a9bf5 --- /dev/null +++ b/bin/tests/dst/t2_data_1 @@ -0,0 +1,3077 @@ +Network Working Group P. Mockapetris +Request for Comments: 1035 ISI + November 1987 +Obsoletes: RFCs 882, 883, 973 + + DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION + + +1. STATUS OF THIS MEMO + +This RFC describes the details of the domain system and protocol, and +assumes that the reader is familiar with the concepts discussed in a +companion RFC, "Domain Names - Concepts and Facilities" [RFC-1034]. + +The domain system is a mixture of functions and data types which are an +official protocol and functions and data types which are still +experimental. Since the domain system is intentionally extensible, new +data types and experimental behavior should always be expected in parts +of the system beyond the official protocol. The official protocol parts +include standard queries, responses and the Internet class RR data +formats (e.g., host addresses). Since the previous RFC set, several +definitions have changed, so some previous definitions are obsolete. + +Experimental or obsolete features are clearly marked in these RFCs, and +such information should be used with caution. + +The reader is especially cautioned not to depend on the values which +appear in examples to be current or complete, since their purpose is +primarily pedagogical. Distribution of this memo is unlimited. + + Table of Contents + + 1. STATUS OF THIS MEMO 1 + 2. INTRODUCTION 3 + 2.1. Overview 3 + 2.2. Common configurations 4 + 2.3. Conventions 7 + 2.3.1. Preferred name syntax 7 + 2.3.2. Data Transmission Order 8 + 2.3.3. Character Case 9 + 2.3.4. Size limits 10 + 3. DOMAIN NAME SPACE AND RR DEFINITIONS 10 + 3.1. Name space definitions 10 + 3.2. RR definitions 11 + 3.2.1. Format 11 + 3.2.2. TYPE values 12 + 3.2.3. QTYPE values 12 + 3.2.4. CLASS values 13 + + + +Mockapetris [Page 1] + +RFC 1035 Domain Implementation and Specification November 1987 + + + 3.2.5. QCLASS values 13 + 3.3. Standard RRs 13 + 3.3.1. CNAME RDATA format 14 + 3.3.2. HINFO RDATA format 14 + 3.3.3. MB RDATA format (EXPERIMENTAL) 14 + 3.3.4. MD RDATA format (Obsolete) 15 + 3.3.5. MF RDATA format (Obsolete) 15 + 3.3.6. MG RDATA format (EXPERIMENTAL) 16 + 3.3.7. MINFO RDATA format (EXPERIMENTAL) 16 + 3.3.8. MR RDATA format (EXPERIMENTAL) 17 + 3.3.9. MX RDATA format 17 + 3.3.10. NULL RDATA format (EXPERIMENTAL) 17 + 3.3.11. NS RDATA format 18 + 3.3.12. PTR RDATA format 18 + 3.3.13. SOA RDATA format 19 + 3.3.14. TXT RDATA format 20 + 3.4. ARPA Internet specific RRs 20 + 3.4.1. A RDATA format 20 + 3.4.2. WKS RDATA format 21 + 3.5. IN-ADDR.ARPA domain 22 + 3.6. Defining new types, classes, and special namespaces 24 + 4. MESSAGES 25 + 4.1. Format 25 + 4.1.1. Header section format 26 + 4.1.2. Question section format 28 + 4.1.3. Resource record format 29 + 4.1.4. Message compression 30 + 4.2. Transport 32 + 4.2.1. UDP usage 32 + 4.2.2. TCP usage 32 + 5. MASTER FILES 33 + 5.1. Format 33 + 5.2. Use of master files to define zones 35 + 5.3. Master file example 36 + 6. NAME SERVER IMPLEMENTATION 37 + 6.1. Architecture 37 + 6.1.1. Control 37 + 6.1.2. Database 37 + 6.1.3. Time 39 + 6.2. Standard query processing 39 + 6.3. Zone refresh and reload processing 39 + 6.4. Inverse queries (Optional) 40 + 6.4.1. The contents of inverse queries and responses 40 + 6.4.2. Inverse query and response example 41 + 6.4.3. Inverse query processing 42 + + + + + + +Mockapetris [Page 2] + +RFC 1035 Domain Implementation and Specification November 1987 + + + 6.5. Completion queries and responses 42 + 7. RESOLVER IMPLEMENTATION 43 + 7.1. Transforming a user request into a query 43 + 7.2. Sending the queries 44 + 7.3. Processing responses 46 + 7.4. Using the cache 47 + 8. MAIL SUPPORT 47 + 8.1. Mail exchange binding 48 + 8.2. Mailbox binding (Experimental) 48 + 9. REFERENCES and BIBLIOGRAPHY 50 + Index 54 + +2. INTRODUCTION + +2.1. Overview + +The goal of domain names is to provide a mechanism for naming resources +in such a way that the names are usable in different hosts, networks, +protocol families, internets, and administrative organizations. + +From the user's point of view, domain names are useful as arguments to a +local agent, called a resolver, which retrieves information associated +with the domain name. Thus a user might ask for the host address or +mail information associated with a particular domain name. To enable +the user to request a particular type of information, an appropriate +query type is passed to the resolver with the domain name. To the user, +the domain tree is a single information space; the resolver is +responsible for hiding the distribution of data among name servers from +the user. + +From the resolver's point of view, the database that makes up the domain +space is distributed among various name servers. Different parts of the +domain space are stored in different name servers, although a particular +data item will be stored redundantly in two or more name servers. The +resolver starts with knowledge of at least one name server. When the +resolver processes a user query it asks a known name server for the +information; in return, the resolver either receives the desired +information or a referral to another name server. Using these +referrals, resolvers learn the identities and contents of other name +servers. Resolvers are responsible for dealing with the distribution of +the domain space and dealing with the effects of name server failure by +consulting redundant databases in other servers. + +Name servers manage two kinds of data. The first kind of data held in +sets called zones; each zone is the complete database for a particular +"pruned" subtree of the domain space. This data is called +authoritative. A name server periodically checks to make sure that its +zones are up to date, and if not, obtains a new copy of updated zones + + + +Mockapetris [Page 3] + +RFC 1035 Domain Implementation and Specification November 1987 + + +from master files stored locally or in another name server. The second +kind of data is cached data which was acquired by a local resolver. +This data may be incomplete, but improves the performance of the +retrieval process when non-local data is repeatedly accessed. Cached +data is eventually discarded by a timeout mechanism. + +This functional structure isolates the problems of user interface, +failure recovery, and distribution in the resolvers and isolates the +database update and refresh problems in the name servers. + +2.2. Common configurations + +A host can participate in the domain name system in a number of ways, +depending on whether the host runs programs that retrieve information +from the domain system, name servers that answer queries from other +hosts, or various combinations of both functions. The simplest, and +perhaps most typical, configuration is shown below: + + Local Host | Foreign + | + +---------+ +----------+ | +--------+ + | | user queries | |queries | | | + | User |-------------->| |---------|->|Foreign | + | Program | | Resolver | | | Name | + | |<--------------| |<--------|--| Server | + | | user responses| |responses| | | + +---------+ +----------+ | +--------+ + | A | + cache additions | | references | + V | | + +----------+ | + | cache | | + +----------+ | + +User programs interact with the domain name space through resolvers; the +format of user queries and user responses is specific to the host and +its operating system. User queries will typically be operating system +calls, and the resolver and its cache will be part of the host operating +system. Less capable hosts may choose to implement the resolver as a +subroutine to be linked in with every program that needs its services. +Resolvers answer user queries with information they acquire via queries +to foreign name servers and the local cache. + +Note that the resolver may have to make several queries to several +different foreign name servers to answer a particular user query, and +hence the resolution of a user query may involve several network +accesses and an arbitrary amount of time. The queries to foreign name +servers and the corresponding responses have a standard format described + + + +Mockapetris [Page 4] + +RFC 1035 Domain Implementation and Specification November 1987 + + +in this memo, and may be datagrams. + +Depending on its capabilities, a name server could be a stand alone +program on a dedicated machine or a process or processes on a large +timeshared host. A simple configuration might be: + + Local Host | Foreign + | + +---------+ | + / /| | + +---------+ | +----------+ | +--------+ + | | | | |responses| | | + | | | | Name |---------|->|Foreign | + | Master |-------------->| Server | | |Resolver| + | files | | | |<--------|--| | + | |/ | | queries | +--------+ + +---------+ +----------+ | + +Here a primary name server acquires information about one or more zones +by reading master files from its local file system, and answers queries +about those zones that arrive from foreign resolvers. + +The DNS requires that all zones be redundantly supported by more than +one name server. Designated secondary servers can acquire zones and +check for updates from the primary server using the zone transfer +protocol of the DNS. This configuration is shown below: + + Local Host | Foreign + | + +---------+ | + / /| | + +---------+ | +----------+ | +--------+ + | | | | |responses| | | + | | | | Name |---------|->|Foreign | + | Master |-------------->| Server | | |Resolver| + | files | | | |<--------|--| | + | |/ | | queries | +--------+ + +---------+ +----------+ | + A |maintenance | +--------+ + | +------------|->| | + | queries | |Foreign | + | | | Name | + +------------------|--| Server | + maintenance responses | +--------+ + +In this configuration, the name server periodically establishes a +virtual circuit to a foreign name server to acquire a copy of a zone or +to check that an existing copy has not changed. The messages sent for + + + +Mockapetris [Page 5] + +RFC 1035 Domain Implementation and Specification November 1987 + + +these maintenance activities follow the same form as queries and +responses, but the message sequences are somewhat different. + +The information flow in a host that supports all aspects of the domain +name system is shown below: + + Local Host | Foreign + | + +---------+ +----------+ | +--------+ + | | user queries | |queries | | | + | User |-------------->| |---------|->|Foreign | + | Program | | Resolver | | | Name | + | |<--------------| |<--------|--| Server | + | | user responses| |responses| | | + +---------+ +----------+ | +--------+ + | A | + cache additions | | references | + V | | + +----------+ | + | Shared | | + | database | | + +----------+ | + A | | + +---------+ refreshes | | references | + / /| | V | + +---------+ | +----------+ | +--------+ + | | | | |responses| | | + | | | | Name |---------|->|Foreign | + | Master |-------------->| Server | | |Resolver| + | files | | | |<--------|--| | + | |/ | | queries | +--------+ + +---------+ +----------+ | + A |maintenance | +--------+ + | +------------|->| | + | queries | |Foreign | + | | | Name | + +------------------|--| Server | + maintenance responses | +--------+ + +The shared database holds domain space data for the local name server +and resolver. The contents of the shared database will typically be a +mixture of authoritative data maintained by the periodic refresh +operations of the name server and cached data from previous resolver +requests. The structure of the domain data and the necessity for +synchronization between name servers and resolvers imply the general +characteristics of this database, but the actual format is up to the +local implementor. + + + + +Mockapetris [Page 6] + +RFC 1035 Domain Implementation and Specification November 1987 + + +Information flow can also be tailored so that a group of hosts act +together to optimize activities. Sometimes this is done to offload less +capable hosts so that they do not have to implement a full resolver. +This can be appropriate for PCs or hosts which want to minimize the +amount of new network code which is required. This scheme can also +allow a group of hosts can share a small number of caches rather than +maintaining a large number of separate caches, on the premise that the +centralized caches will have a higher hit ratio. In either case, +resolvers are replaced with stub resolvers which act as front ends to +resolvers located in a recursive server in one or more name servers +known to perform that service: + + Local Hosts | Foreign + | + +---------+ | + | | responses | + | Stub |<--------------------+ | + | Resolver| | | + | |----------------+ | | + +---------+ recursive | | | + queries | | | + V | | + +---------+ recursive +----------+ | +--------+ + | | queries | |queries | | | + | Stub |-------------->| Recursive|---------|->|Foreign | + | Resolver| | Server | | | Name | + | |<--------------| |<--------|--| Server | + +---------+ responses | |responses| | | + +----------+ | +--------+ + | Central | | + | cache | | + +----------+ | + +In any case, note that domain components are always replicated for +reliability whenever possible. + +2.3. Conventions + +The domain system has several conventions dealing with low-level, but +fundamental, issues. While the implementor is free to violate these +conventions WITHIN HIS OWN SYSTEM, he must observe these conventions in +ALL behavior observed from other hosts. + +2.3.1. Preferred name syntax + +The DNS specifications attempt to be as general as possible in the rules +for constructing domain names. The idea is that the name of any +existing object can be expressed as a domain name with minimal changes. + + + +Mockapetris [Page 7] + +RFC 1035 Domain Implementation and Specification November 1987 + + +However, when assigning a domain name for an object, the prudent user +will select a name which satisfies both the rules of the domain system +and any existing rules for the object, whether these rules are published +or implied by existing programs. + +For example, when naming a mail domain, the user should satisfy both the +rules of this memo and those in RFC-822. When creating a new host name, +the old rules for HOSTS.TXT should be followed. This avoids problems +when old software is converted to use domain names. + +The following syntax will result in fewer problems with many + +applications that use domain names (e.g., mail, TELNET). + +<domain> ::= <subdomain> | " " + +<subdomain> ::= <label> | <subdomain> "." <label> + +<label> ::= <letter> [ [ <ldh-str> ] <let-dig> ] + +<ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str> + +<let-dig-hyp> ::= <let-dig> | "-" + +<let-dig> ::= <letter> | <digit> + +<letter> ::= any one of the 52 alphabetic characters A through Z in +upper case and a through z in lower case + +<digit> ::= any one of the ten digits 0 through 9 + +Note that while upper and lower case letters are allowed in domain +names, no significance is attached to the case. That is, two names with +the same spelling but different case are to be treated as if identical. + +The labels must follow the rules for ARPANET host names. They must +start with a letter, end with a letter or digit, and have as interior +characters only letters, digits, and hyphen. There are also some +restrictions on the length. Labels must be 63 characters or less. + +For example, the following strings identify hosts in the Internet: + +A.ISI.EDU XX.LCS.MIT.EDU SRI-NIC.ARPA + +2.3.2. Data Transmission Order + +The order of transmission of the header and data described in this +document is resolved to the octet level. Whenever a diagram shows a + + + +Mockapetris [Page 8] + +RFC 1035 Domain Implementation and Specification November 1987 + + +group of octets, the order of transmission of those octets is the normal +order in which they are read in English. For example, in the following +diagram, the octets are transmitted in the order they are numbered. + + 0 1 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 1 | 2 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 3 | 4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 5 | 6 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +Whenever an octet represents a numeric quantity, the left most bit in +the diagram is the high order or most significant bit. That is, the bit +labeled 0 is the most significant bit. For example, the following +diagram represents the value 170 (decimal). + + 0 1 2 3 4 5 6 7 + +-+-+-+-+-+-+-+-+ + |1 0 1 0 1 0 1 0| + +-+-+-+-+-+-+-+-+ + +Similarly, whenever a multi-octet field represents a numeric quantity +the left most bit of the whole field is the most significant bit. When +a multi-octet quantity is transmitted the most significant octet is +transmitted first. + +2.3.3. Character Case + +For all parts of the DNS that are part of the official protocol, all +comparisons between character strings (e.g., labels, domain names, etc.) +are done in a case-insensitive manner. At present, this rule is in +force throughout the domain system without exception. However, future +additions beyond current usage may need to use the full binary octet +capabilities in names, so attempts to store domain names in 7-bit ASCII +or use of special bytes to terminate labels, etc., should be avoided. + +When data enters the domain system, its original case should be +preserved whenever possible. In certain circumstances this cannot be +done. For example, if two RRs are stored in a database, one at x.y and +one at X.Y, they are actually stored at the same place in the database, +and hence only one casing would be preserved. The basic rule is that +case can be discarded only when data is used to define structure in a +database, and two names are identical when compared in a case +insensitive manner. + + + + +Mockapetris [Page 9] + +RFC 1035 Domain Implementation and Specification November 1987 + + +Loss of case sensitive data must be minimized. Thus while data for x.y +and X.Y may both be stored under a single location x.y or X.Y, data for +a.x and B.X would never be stored under A.x, A.X, b.x, or b.X. In +general, this preserves the case of the first label of a domain name, +but forces standardization of interior node labels. + +Systems administrators who enter data into the domain database should +take care to represent the data they supply to the domain system in a +case-consistent manner if their system is case-sensitive. The data +distribution system in the domain system will ensure that consistent +representations are preserved. + +2.3.4. Size limits + +Various objects and parameters in the DNS have size limits. They are +listed below. Some could be easily changed, others are more +fundamental. + +labels 63 octets or less + +names 255 octets or less + +TTL positive values of a signed 32 bit number. + +UDP messages 512 octets or less + +3. DOMAIN NAME SPACE AND RR DEFINITIONS + +3.1. Name space definitions + +Domain names in messages are expressed in terms of a sequence of labels. +Each label is represented as a one octet length field followed by that +number of octets. Since every domain name ends with the null label of +the root, a domain name is terminated by a length byte of zero. The +high order two bits of every length octet must be zero, and the +remaining six bits of the length field limit the label to 63 octets or +less. + +To simplify implementations, the total length of a domain name (i.e., +label octets and label length octets) is restricted to 255 octets or +less. + +Although labels can contain any 8 bit values in octets that make up a +label, it is strongly recommended that labels follow the preferred +syntax described elsewhere in this memo, which is compatible with +existing host naming conventions. Name servers and resolvers must +compare labels in a case-insensitive manner (i.e., A=a), assuming ASCII +with zero parity. Non-alphabetic codes must match exactly. + + + +Mockapetris [Page 10] + +RFC 1035 Domain Implementation and Specification November 1987 + + +3.2. RR definitions + +3.2.1. Format + +All RRs have the same top level format shown below: + + 1 1 1 1 1 1 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | | + / / + / NAME / + | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | TYPE | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | CLASS | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | TTL | + | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | RDLENGTH | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--| + / RDATA / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + +where: + +NAME an owner name, i.e., the name of the node to which this + resource record pertains. + +TYPE two octets containing one of the RR TYPE codes. + +CLASS two octets containing one of the RR CLASS codes. + +TTL a 32 bit signed integer that specifies the time interval + that the resource record may be cached before the source + of the information should again be consulted. Zero + values are interpreted to mean that the RR can only be + used for the transaction in progress, and should not be + cached. For example, SOA records are always distributed + with a zero TTL to prohibit caching. Zero values can + also be used for extremely volatile data. + +RDLENGTH an unsigned 16 bit integer that specifies the length in + octets of the RDATA field. + + + +Mockapetris [Page 11] + +RFC 1035 Domain Implementation and Specification November 1987 + + +RDATA a variable length string of octets that describes the + resource. The format of this information varies + according to the TYPE and CLASS of the resource record. + +3.2.2. TYPE values + +TYPE fields are used in resource records. Note that these types are a +subset of QTYPEs. + +TYPE value and meaning + +A 1 a host address + +NS 2 an authoritative name server + +MD 3 a mail destination (Obsolete - use MX) + +MF 4 a mail forwarder (Obsolete - use MX) + +CNAME 5 the canonical name for an alias + +SOA 6 marks the start of a zone of authority + +MB 7 a mailbox domain name (EXPERIMENTAL) + +MG 8 a mail group member (EXPERIMENTAL) + +MR 9 a mail rename domain name (EXPERIMENTAL) + +NULL 10 a null RR (EXPERIMENTAL) + +WKS 11 a well known service description + +PTR 12 a domain name pointer + +HINFO 13 host information + +MINFO 14 mailbox or mail list information + +MX 15 mail exchange + +TXT 16 text strings + +3.2.3. QTYPE values + +QTYPE fields appear in the question part of a query. QTYPES are a +superset of TYPEs, hence all TYPEs are valid QTYPEs. In addition, the +following QTYPEs are defined: + + + +Mockapetris [Page 12] + +RFC 1035 Domain Implementation and Specification November 1987 + + +AXFR 252 A request for a transfer of an entire zone + +MAILB 253 A request for mailbox-related records (MB, MG or MR) + +MAILA 254 A request for mail agent RRs (Obsolete - see MX) + +* 255 A request for all records + +3.2.4. CLASS values + +CLASS fields appear in resource records. The following CLASS mnemonics +and values are defined: + +IN 1 the Internet + +CS 2 the CSNET class (Obsolete - used only for examples in + some obsolete RFCs) + +CH 3 the CHAOS class + +HS 4 Hesiod [Dyer 87] + +3.2.5. QCLASS values + +QCLASS fields appear in the question section of a query. QCLASS values +are a superset of CLASS values; every CLASS is a valid QCLASS. In +addition to CLASS values, the following QCLASSes are defined: + +* 255 any class + +3.3. Standard RRs + +The following RR definitions are expected to occur, at least +potentially, in all classes. In particular, NS, SOA, CNAME, and PTR +will be used in all classes, and have the same format in all classes. +Because their RDATA format is known, all domain names in the RDATA +section of these RRs may be compressed. + +<domain-name> is a domain name represented as a series of labels, and +terminated by a label with zero length. <character-string> is a single +length octet followed by that number of characters. <character-string> +is treated as binary information, and can be up to 256 characters in +length (including the length octet). + + + + + + + + +Mockapetris [Page 13] + +RFC 1035 Domain Implementation and Specification November 1987 + + +3.3.1. CNAME RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / CNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +CNAME A <domain-name> which specifies the canonical or primary + name for the owner. The owner name is an alias. + +CNAME RRs cause no additional section processing, but name servers may +choose to restart the query at the canonical name in certain cases. See +the description of name server logic in [RFC-1034] for details. + +3.3.2. HINFO RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / CPU / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / OS / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +CPU A <character-string> which specifies the CPU type. + +OS A <character-string> which specifies the operating + system type. + +Standard values for CPU and OS can be found in [RFC-1010]. + +HINFO records are used to acquire general information about a host. The +main use is for protocols such as FTP that can use special procedures +when talking between machines or operating systems of the same type. + +3.3.3. MB RDATA format (EXPERIMENTAL) + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / MADNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +MADNAME A <domain-name> which specifies a host which has the + specified mailbox. + + + +Mockapetris [Page 14] + +RFC 1035 Domain Implementation and Specification November 1987 + + +MB records cause additional section processing which looks up an A type +RRs corresponding to MADNAME. + +3.3.4. MD RDATA format (Obsolete) + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / MADNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +MADNAME A <domain-name> which specifies a host which has a mail + agent for the domain which should be able to deliver + mail for the domain. + +MD records cause additional section processing which looks up an A type +record corresponding to MADNAME. + +MD is obsolete. See the definition of MX and [RFC-974] for details of +the new scheme. The recommended policy for dealing with MD RRs found in +a master file is to reject them, or to convert them to MX RRs with a +preference of 0. + +3.3.5. MF RDATA format (Obsolete) + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / MADNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +MADNAME A <domain-name> which specifies a host which has a mail + agent for the domain which will accept mail for + forwarding to the domain. + +MF records cause additional section processing which looks up an A type +record corresponding to MADNAME. + +MF is obsolete. See the definition of MX and [RFC-974] for details ofw +the new scheme. The recommended policy for dealing with MD RRs found in +a master file is to reject them, or to convert them to MX RRs with a +preference of 10. + + + + + + + +Mockapetris [Page 15] + +RFC 1035 Domain Implementation and Specification November 1987 + + +3.3.6. MG RDATA format (EXPERIMENTAL) + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / MGMNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +MGMNAME A <domain-name> which specifies a mailbox which is a + member of the mail group specified by the domain name. + +MG records cause no additional section processing. + +3.3.7. MINFO RDATA format (EXPERIMENTAL) + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / RMAILBX / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / EMAILBX / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +RMAILBX A <domain-name> which specifies a mailbox which is + responsible for the mailing list or mailbox. If this + domain name names the root, the owner of the MINFO RR is + responsible for itself. Note that many existing mailing + lists use a mailbox X-request for the RMAILBX field of + mailing list X, e.g., Msgroup-request for Msgroup. This + field provides a more general mechanism. + + +EMAILBX A <domain-name> which specifies a mailbox which is to + receive error messages related to the mailing list or + mailbox specified by the owner of the MINFO RR (similar + to the ERRORS-TO: field which has been proposed). If + this domain name names the root, errors should be + returned to the sender of the message. + +MINFO records cause no additional section processing. Although these +records can be associated with a simple mailbox, they are usually used +with a mailing list. + + + + + + + + +Mockapetris [Page 16] + +RFC 1035 Domain Implementation and Specification November 1987 + + +3.3.8. MR RDATA format (EXPERIMENTAL) + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / NEWNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +NEWNAME A <domain-name> which specifies a mailbox which is the + proper rename of the specified mailbox. + +MR records cause no additional section processing. The main use for MR +is as a forwarding entry for a user who has moved to a different +mailbox. + +3.3.9. MX RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | PREFERENCE | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / EXCHANGE / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +PREFERENCE A 16 bit integer which specifies the preference given to + this RR among others at the same owner. Lower values + are preferred. + +EXCHANGE A <domain-name> which specifies a host willing to act as + a mail exchange for the owner name. + +MX records cause type A additional section processing for the host +specified by EXCHANGE. The use of MX RRs is explained in detail in +[RFC-974]. + +3.3.10. NULL RDATA format (EXPERIMENTAL) + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / <anything> / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +Anything at all may be in the RDATA field so long as it is 65535 octets +or less. + + + + +Mockapetris [Page 17] + +RFC 1035 Domain Implementation and Specification November 1987 + + +NULL records cause no additional section processing. NULL RRs are not +allowed in master files. NULLs are used as placeholders in some +experimental extensions of the DNS. + +3.3.11. NS RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / NSDNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +NSDNAME A <domain-name> which specifies a host which should be + authoritative for the specified class and domain. + +NS records cause both the usual additional section processing to locate +a type A record, and, when used in a referral, a special search of the +zone in which they reside for glue information. + +The NS RR states that the named host should be expected to have a zone +starting at owner name of the specified class. Note that the class may +not indicate the protocol family which should be used to communicate +with the host, although it is typically a strong hint. For example, +hosts which are name servers for either Internet (IN) or Hesiod (HS) +class information are normally queried using IN class protocols. + +3.3.12. PTR RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / PTRDNAME / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +PTRDNAME A <domain-name> which points to some location in the + domain name space. + +PTR records cause no additional section processing. These RRs are used +in special domains to point to some other location in the domain space. +These records are simple data, and don't imply any special processing +similar to that performed by CNAME, which identifies aliases. See the +description of the IN-ADDR.ARPA domain for an example. + + + + + + + + +Mockapetris [Page 18] + +RFC 1035 Domain Implementation and Specification November 1987 + + +3.3.13. SOA RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / MNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / RNAME / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | SERIAL | + | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | REFRESH | + | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | RETRY | + | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | EXPIRE | + | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | MINIMUM | + | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +MNAME The <domain-name> of the name server that was the + original or primary source of data for this zone. + +RNAME A <domain-name> which specifies the mailbox of the + person responsible for this zone. + +SERIAL The unsigned 32 bit version number of the original copy + of the zone. Zone transfers preserve this value. This + value wraps and should be compared using sequence space + arithmetic. + +REFRESH A 32 bit time interval before the zone should be + refreshed. + +RETRY A 32 bit time interval that should elapse before a + failed refresh should be retried. + +EXPIRE A 32 bit time value that specifies the upper limit on + the time interval that can elapse before the zone is no + longer authoritative. + + + + + +Mockapetris [Page 19] + +RFC 1035 Domain Implementation and Specification November 1987 + + +MINIMUM The unsigned 32 bit minimum TTL field that should be + exported with any RR from this zone. + +SOA records cause no additional section processing. + +All times are in units of seconds. + +Most of these fields are pertinent only for name server maintenance +operations. However, MINIMUM is used in all query operations that +retrieve RRs from a zone. Whenever a RR is sent in a response to a +query, the TTL field is set to the maximum of the TTL field from the RR +and the MINIMUM field in the appropriate SOA. Thus MINIMUM is a lower +bound on the TTL field for all RRs in a zone. Note that this use of +MINIMUM should occur when the RRs are copied into the response and not +when the zone is loaded from a master file or via a zone transfer. The +reason for this provison is to allow future dynamic update facilities to +change the SOA RR with known semantics. + + +3.3.14. TXT RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / TXT-DATA / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +TXT-DATA One or more <character-string>s. + +TXT RRs are used to hold descriptive text. The semantics of the text +depends on the domain where it is found. + +3.4. Internet specific RRs + +3.4.1. A RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | ADDRESS | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +ADDRESS A 32 bit Internet address. + +Hosts that have multiple Internet addresses will have multiple A +records. + + + + + +Mockapetris [Page 20] + +RFC 1035 Domain Implementation and Specification November 1987 + + +A records cause no additional section processing. The RDATA section of +an A line in a master file is an Internet address expressed as four +decimal numbers separated by dots without any imbedded spaces (e.g., +"10.2.0.52" or "192.0.5.6"). + +3.4.2. WKS RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | ADDRESS | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | PROTOCOL | | + +--+--+--+--+--+--+--+--+ | + | | + / <BIT MAP> / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +ADDRESS An 32 bit Internet address + +PROTOCOL An 8 bit IP protocol number + +<BIT MAP> A variable length bit map. The bit map must be a + multiple of 8 bits long. + +The WKS record is used to describe the well known services supported by +a particular protocol on a particular internet address. The PROTOCOL +field specifies an IP protocol number, and the bit map has one bit per +port of the specified protocol. The first bit corresponds to port 0, +the second to port 1, etc. If the bit map does not include a bit for a +protocol of interest, that bit is assumed zero. The appropriate values +and mnemonics for ports and protocols are specified in [RFC-1010]. + +For example, if PROTOCOL=TCP (6), the 26th bit corresponds to TCP port +25 (SMTP). If this bit is set, a SMTP server should be listening on TCP +port 25; if zero, SMTP service is not supported on the specified +address. + +The purpose of WKS RRs is to provide availability information for +servers for TCP and UDP. If a server supports both TCP and UDP, or has +multiple Internet addresses, then multiple WKS RRs are used. + +WKS RRs cause no additional section processing. + +In master files, both ports and protocols are expressed using mnemonics +or decimal numbers. + + + + +Mockapetris [Page 21] + +RFC 1035 Domain Implementation and Specification November 1987 + + +3.5. IN-ADDR.ARPA domain + +The Internet uses a special domain to support gateway location and +Internet address to host mapping. Other classes may employ a similar +strategy in other domains. The intent of this domain is to provide a +guaranteed method to perform host address to host name mapping, and to +facilitate queries to locate all gateways on a particular network in the +Internet. + +Note that both of these services are similar to functions that could be +performed by inverse queries; the difference is that this part of the +domain name space is structured according to address, and hence can +guarantee that the appropriate data can be located without an exhaustive +search of the domain space. + +The domain begins at IN-ADDR.ARPA and has a substructure which follows +the Internet addressing structure. + +Domain names in the IN-ADDR.ARPA domain are defined to have up to four +labels in addition to the IN-ADDR.ARPA suffix. Each label represents +one octet of an Internet address, and is expressed as a character string +for a decimal value in the range 0-255 (with leading zeros omitted +except in the case of a zero octet which is represented by a single +zero). + +Host addresses are represented by domain names that have all four labels +specified. Thus data for Internet address 10.2.0.52 is located at +domain name 52.0.2.10.IN-ADDR.ARPA. The reversal, though awkward to +read, allows zones to be delegated which are exactly one network of +address space. For example, 10.IN-ADDR.ARPA can be a zone containing +data for the ARPANET, while 26.IN-ADDR.ARPA can be a separate zone for +MILNET. Address nodes are used to hold pointers to primary host names +in the normal domain space. + +Network numbers correspond to some non-terminal nodes at various depths +in the IN-ADDR.ARPA domain, since Internet network numbers are either 1, +2, or 3 octets. Network nodes are used to hold pointers to the primary +host names of gateways attached to that network. Since a gateway is, by +definition, on more than one network, it will typically have two or more +network nodes which point at it. Gateways will also have host level +pointers at their fully qualified addresses. + +Both the gateway pointers at network nodes and the normal host pointers +at full address nodes use the PTR RR to point back to the primary domain +names of the corresponding hosts. + +For example, the IN-ADDR.ARPA domain will contain information about the +ISI gateway between net 10 and 26, an MIT gateway from net 10 to MIT's + + + +Mockapetris [Page 22] + +RFC 1035 Domain Implementation and Specification November 1987 + + +net 18, and hosts A.ISI.EDU and MULTICS.MIT.EDU. Assuming that ISI +gateway has addresses 10.2.0.22 and 26.0.0.103, and a name MILNET- +GW.ISI.EDU, and the MIT gateway has addresses 10.0.0.77 and 18.10.0.4 +and a name GW.LCS.MIT.EDU, the domain database would contain: + + 10.IN-ADDR.ARPA. PTR MILNET-GW.ISI.EDU. + 10.IN-ADDR.ARPA. PTR GW.LCS.MIT.EDU. + 18.IN-ADDR.ARPA. PTR GW.LCS.MIT.EDU. + 26.IN-ADDR.ARPA. PTR MILNET-GW.ISI.EDU. + 22.0.2.10.IN-ADDR.ARPA. PTR MILNET-GW.ISI.EDU. + 103.0.0.26.IN-ADDR.ARPA. PTR MILNET-GW.ISI.EDU. + 77.0.0.10.IN-ADDR.ARPA. PTR GW.LCS.MIT.EDU. + 4.0.10.18.IN-ADDR.ARPA. PTR GW.LCS.MIT.EDU. + 103.0.3.26.IN-ADDR.ARPA. PTR A.ISI.EDU. + 6.0.0.10.IN-ADDR.ARPA. PTR MULTICS.MIT.EDU. + +Thus a program which wanted to locate gateways on net 10 would originate +a query of the form QTYPE=PTR, QCLASS=IN, QNAME=10.IN-ADDR.ARPA. It +would receive two RRs in response: + + 10.IN-ADDR.ARPA. PTR MILNET-GW.ISI.EDU. + 10.IN-ADDR.ARPA. PTR GW.LCS.MIT.EDU. + +The program could then originate QTYPE=A, QCLASS=IN queries for MILNET- +GW.ISI.EDU. and GW.LCS.MIT.EDU. to discover the Internet addresses of +these gateways. + +A resolver which wanted to find the host name corresponding to Internet +host address 10.0.0.6 would pursue a query of the form QTYPE=PTR, +QCLASS=IN, QNAME=6.0.0.10.IN-ADDR.ARPA, and would receive: + + 6.0.0.10.IN-ADDR.ARPA. PTR MULTICS.MIT.EDU. + +Several cautions apply to the use of these services: + - Since the IN-ADDR.ARPA special domain and the normal domain + for a particular host or gateway will be in different zones, + the possibility exists that that the data may be inconsistent. + + - Gateways will often have two names in separate domains, only + one of which can be primary. + + - Systems that use the domain database to initialize their + routing tables must start with enough gateway information to + guarantee that they can access the appropriate name server. + + - The gateway data only reflects the existence of a gateway in a + manner equivalent to the current HOSTS.TXT file. It doesn't + replace the dynamic availability information from GGP or EGP. + + + +Mockapetris [Page 23] + +RFC 1035 Domain Implementation and Specification November 1987 + + +3.6. Defining new types, classes, and special namespaces + +The previously defined types and classes are the ones in use as of the +date of this memo. New definitions should be expected. This section +makes some recommendations to designers considering additions to the +existing facilities. The mailing list NAMEDROPPERS@SRI-NIC.ARPA is the +forum where general discussion of design issues takes place. + +In general, a new type is appropriate when new information is to be +added to the database about an existing object, or we need new data +formats for some totally new object. Designers should attempt to define +types and their RDATA formats that are generally applicable to all +classes, and which avoid duplication of information. New classes are +appropriate when the DNS is to be used for a new protocol, etc which +requires new class-specific data formats, or when a copy of the existing +name space is desired, but a separate management domain is necessary. + +New types and classes need mnemonics for master files; the format of the +master files requires that the mnemonics for type and class be disjoint. + +TYPE and CLASS values must be a proper subset of QTYPEs and QCLASSes +respectively. + +The present system uses multiple RRs to represent multiple values of a +type rather than storing multiple values in the RDATA section of a +single RR. This is less efficient for most applications, but does keep +RRs shorter. The multiple RRs assumption is incorporated in some +experimental work on dynamic update methods. + +The present system attempts to minimize the duplication of data in the +database in order to insure consistency. Thus, in order to find the +address of the host for a mail exchange, you map the mail domain name to +a host name, then the host name to addresses, rather than a direct +mapping to host address. This approach is preferred because it avoids +the opportunity for inconsistency. + +In defining a new type of data, multiple RR types should not be used to +create an ordering between entries or express different formats for +equivalent bindings, instead this information should be carried in the +body of the RR and a single type used. This policy avoids problems with +caching multiple types and defining QTYPEs to match multiple types. + +For example, the original form of mail exchange binding used two RR +types one to represent a "closer" exchange (MD) and one to represent a +"less close" exchange (MF). The difficulty is that the presence of one +RR type in a cache doesn't convey any information about the other +because the query which acquired the cached information might have used +a QTYPE of MF, MD, or MAILA (which matched both). The redesigned + + + +Mockapetris [Page 24] + +RFC 1035 Domain Implementation and Specification November 1987 + + +service used a single type (MX) with a "preference" value in the RDATA +section which can order different RRs. However, if any MX RRs are found +in the cache, then all should be there. + +4. MESSAGES + +4.1. Format + +All communications inside of the domain protocol are carried in a single +format called a message. The top level format of message is divided +into 5 sections (some of which are empty in certain cases) shown below: + + +---------------------+ + | Header | + +---------------------+ + | Question | the question for the name server + +---------------------+ + | Answer | RRs answering the question + +---------------------+ + | Authority | RRs pointing toward an authority + +---------------------+ + | Additional | RRs holding additional information + +---------------------+ + +The header section is always present. The header includes fields that +specify which of the remaining sections are present, and also specify +whether the message is a query or a response, a standard query or some +other opcode, etc. + +The names of the sections after the header are derived from their use in +standard queries. The question section contains fields that describe a +question to a name server. These fields are a query type (QTYPE), a +query class (QCLASS), and a query domain name (QNAME). The last three +sections have the same format: a possibly empty list of concatenated +resource records (RRs). The answer section contains RRs that answer the +question; the authority section contains RRs that point toward an +authoritative name server; the additional records section contains RRs +which relate to the query, but are not strictly answers for the +question. + + + + + + + + + + + + +Mockapetris [Page 25] + +RFC 1035 Domain Implementation and Specification November 1987 + + +4.1.1. Header section format + +The header contains the following fields: + + 1 1 1 1 1 1 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | ID | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + |QR| Opcode |AA|TC|RD|RA| Z | RCODE | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | QDCOUNT | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | ANCOUNT | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | NSCOUNT | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | ARCOUNT | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +ID A 16 bit identifier assigned by the program that + generates any kind of query. This identifier is copied + the corresponding reply and can be used by the requester + to match up replies to outstanding queries. + +QR A one bit field that specifies whether this message is a + query (0), or a response (1). + +OPCODE A four bit field that specifies kind of query in this + message. This value is set by the originator of a query + and copied into the response. The values are: + + 0 a standard query (QUERY) + + 1 an inverse query (IQUERY) + + 2 a server status request (STATUS) + + 3-15 reserved for future use + +AA Authoritative Answer - this bit is valid in responses, + and specifies that the responding name server is an + authority for the domain name in question section. + + Note that the contents of the answer section may have + multiple owner names because of aliases. The AA bit + + + +Mockapetris [Page 26] + +RFC 1035 Domain Implementation and Specification November 1987 + + + corresponds to the name which matches the query name, or + the first owner name in the answer section. + +TC TrunCation - specifies that this message was truncated + due to length greater than that permitted on the + transmission channel. + +RD Recursion Desired - this bit may be set in a query and + is copied into the response. If RD is set, it directs + the name server to pursue the query recursively. + Recursive query support is optional. + +RA Recursion Available - this be is set or cleared in a + response, and denotes whether recursive query support is + available in the name server. + +Z Reserved for future use. Must be zero in all queries + and responses. + +RCODE Response code - this 4 bit field is set as part of + responses. The values have the following + interpretation: + + 0 No error condition + + 1 Format error - The name server was + unable to interpret the query. + + 2 Server failure - The name server was + unable to process this query due to a + problem with the name server. + + 3 Name Error - Meaningful only for + responses from an authoritative name + server, this code signifies that the + domain name referenced in the query does + not exist. + + 4 Not Implemented - The name server does + not support the requested kind of query. + + 5 Refused - The name server refuses to + perform the specified operation for + policy reasons. For example, a name + server may not wish to provide the + information to the particular requester, + or a name server may not wish to perform + a particular operation (e.g., zone + + + +Mockapetris [Page 27] + +RFC 1035 Domain Implementation and Specification November 1987 + + + transfer) for particular data. + + 6-15 Reserved for future use. + +QDCOUNT an unsigned 16 bit integer specifying the number of + entries in the question section. + +ANCOUNT an unsigned 16 bit integer specifying the number of + resource records in the answer section. + +NSCOUNT an unsigned 16 bit integer specifying the number of name + server resource records in the authority records + section. + +ARCOUNT an unsigned 16 bit integer specifying the number of + resource records in the additional records section. + +4.1.2. Question section format + +The question section is used to carry the "question" in most queries, +i.e., the parameters that define what is being asked. The section +contains QDCOUNT (usually 1) entries, each of the following format: + + 1 1 1 1 1 1 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | | + / QNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | QTYPE | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | QCLASS | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +QNAME a domain name represented as a sequence of labels, where + each label consists of a length octet followed by that + number of octets. The domain name terminates with the + zero length octet for the null label of the root. Note + that this field may be an odd number of octets; no + padding is used. + +QTYPE a two octet code which specifies the type of the query. + The values for this field include all codes valid for a + TYPE field, together with some more general codes which + can match more than one type of RR. + + + +Mockapetris [Page 28] + +RFC 1035 Domain Implementation and Specification November 1987 + + +QCLASS a two octet code that specifies the class of the query. + For example, the QCLASS field is IN for the Internet. + +4.1.3. Resource record format + +The answer, authority, and additional sections all share the same +format: a variable number of resource records, where the number of +records is specified in the corresponding count field in the header. +Each resource record has the following format: + 1 1 1 1 1 1 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | | + / / + / NAME / + | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | TYPE | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | CLASS | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | TTL | + | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | RDLENGTH | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--| + / RDATA / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +NAME a domain name to which this resource record pertains. + +TYPE two octets containing one of the RR type codes. This + field specifies the meaning of the data in the RDATA + field. + +CLASS two octets which specify the class of the data in the + RDATA field. + +TTL a 32 bit unsigned integer that specifies the time + interval (in seconds) that the resource record may be + cached before it should be discarded. Zero values are + interpreted to mean that the RR can only be used for the + transaction in progress, and should not be cached. + + + + + +Mockapetris [Page 29] + +RFC 1035 Domain Implementation and Specification November 1987 + + +RDLENGTH an unsigned 16 bit integer that specifies the length in + octets of the RDATA field. + +RDATA a variable length string of octets that describes the + resource. The format of this information varies + according to the TYPE and CLASS of the resource record. + For example, the if the TYPE is A and the CLASS is IN, + the RDATA field is a 4 octet ARPA Internet address. + +4.1.4. Message compression + +In order to reduce the size of messages, the domain system utilizes a +compression scheme which eliminates the repetition of domain names in a +message. In this scheme, an entire domain name or a list of labels at +the end of a domain name is replaced with a pointer to a prior occurance +of the same name. + +The pointer takes the form of a two octet sequence: + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | 1 1| OFFSET | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +The first two bits are ones. This allows a pointer to be distinguished +from a label, since the label must begin with two zero bits because +labels are restricted to 63 octets or less. (The 10 and 01 combinations +are reserved for future use.) The OFFSET field specifies an offset from +the start of the message (i.e., the first octet of the ID field in the +domain header). A zero offset specifies the first byte of the ID field, +etc. + +The compression scheme allows a domain name in a message to be +represented as either: + + - a sequence of labels ending in a zero octet + + - a pointer + + - a sequence of labels ending with a pointer + +Pointers can only be used for occurances of a domain name where the +format is not class specific. If this were not the case, a name server +or resolver would be required to know the format of all RRs it handled. +As yet, there are no such cases, but they may occur in future RDATA +formats. + +If a domain name is contained in a part of the message subject to a +length field (such as the RDATA section of an RR), and compression is + + + +Mockapetris [Page 30] + +RFC 1035 Domain Implementation and Specification November 1987 + + +used, the length of the compressed name is used in the length +calculation, rather than the length of the expanded name. + +Programs are free to avoid using pointers in messages they generate, +although this will reduce datagram capacity, and may cause truncation. +However all programs are required to understand arriving messages that +contain pointers. + +For example, a datagram might need to use the domain names F.ISI.ARPA, +FOO.F.ISI.ARPA, ARPA, and the root. Ignoring the other fields of the +message, these domain names might be represented as: + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 20 | 1 | F | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 22 | 3 | I | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 24 | S | I | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 26 | 4 | A | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 28 | R | P | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 30 | A | 0 | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 40 | 3 | F | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 42 | O | O | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 44 | 1 1| 20 | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 64 | 1 1| 26 | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 92 | 0 | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +The domain name for F.ISI.ARPA is shown at offset 20. The domain name +FOO.F.ISI.ARPA is shown at offset 40; this definition uses a pointer to +concatenate a label for FOO to the previously defined F.ISI.ARPA. The +domain name ARPA is defined at offset 64 using a pointer to the ARPA +component of the name F.ISI.ARPA at 20; note that this pointer relies on +ARPA being the last label in the string at 20. The root domain name is + + + +Mockapetris [Page 31] + +RFC 1035 Domain Implementation and Specification November 1987 + + +defined by a single octet of zeros at 92; the root domain name has no +labels. + +4.2. Transport + +The DNS assumes that messages will be transmitted as datagrams or in a +byte stream carried by a virtual circuit. While virtual circuits can be +used for any DNS activity, datagrams are preferred for queries due to +their lower overhead and better performance. Zone refresh activities +must use virtual circuits because of the need for reliable transfer. + +The Internet supports name server access using TCP [RFC-793] on server +port 53 (decimal) as well as datagram access using UDP [RFC-768] on UDP +port 53 (decimal). + +4.2.1. UDP usage + +Messages sent using UDP user server port 53 (decimal). + +Messages carried by UDP are restricted to 512 bytes (not counting the IP +or UDP headers). Longer messages are truncated and the TC bit is set in +the header. + +UDP is not acceptable for zone transfers, but is the recommended method +for standard queries in the Internet. Queries sent using UDP may be +lost, and hence a retransmission strategy is required. Queries or their +responses may be reordered by the network, or by processing in name +servers, so resolvers should not depend on them being returned in order. + +The optimal UDP retransmission policy will vary with performance of the +Internet and the needs of the client, but the following are recommended: + + - The client should try other servers and server addresses + before repeating a query to a specific address of a server. + + - The retransmission interval should be based on prior + statistics if possible. Too aggressive retransmission can + easily slow responses for the community at large. Depending + on how well connected the client is to its expected servers, + the minimum retransmission interval should be 2-5 seconds. + +More suggestions on server selection and retransmission policy can be +found in the resolver section of this memo. + +4.2.2. TCP usage + +Messages sent over TCP connections use server port 53 (decimal). The +message is prefixed with a two byte length field which gives the message + + + +Mockapetris [Page 32] + +RFC 1035 Domain Implementation and Specification November 1987 + + +length, excluding the two byte length field. This length field allows +the low-level processing to assemble a complete message before beginning +to parse it. + +Several connection management policies are recommended: + + - The server should not block other activities waiting for TCP + data. + + - The server should support multiple connections. + + - The server should assume that the client will initiate + connection closing, and should delay closing its end of the + connection until all outstanding client requests have been + satisfied. + + - If the server needs to close a dormant connection to reclaim + resources, it should wait until the connection has been idle + for a period on the order of two minutes. In particular, the + server should allow the SOA and AXFR request sequence (which + begins a refresh operation) to be made on a single connection. + Since the server would be unable to answer queries anyway, a + unilateral close or reset may be used instead of a graceful + close. + +5. MASTER FILES + +Master files are text files that contain RRs in text form. Since the +contents of a zone can be expressed in the form of a list of RRs a +master file is most often used to define a zone, though it can be used +to list a cache's contents. Hence, this section first discusses the +format of RRs in a master file, and then the special considerations when +a master file is used to create a zone in some name server. + +5.1. Format + +The format of these files is a sequence of entries. Entries are +predominantly line-oriented, though parentheses can be used to continue +a list of items across a line boundary, and text literals can contain +CRLF within the text. Any combination of tabs and spaces act as a +delimiter between the separate items that make up an entry. The end of +any line in the master file can end with a comment. The comment starts +with a ";" (semicolon). + +The following entries are defined: + + <blank>[<comment>] + + + + +Mockapetris [Page 33] + +RFC 1035 Domain Implementation and Specification November 1987 + + + $ORIGIN <domain-name> [<comment>] + + $INCLUDE <file-name> [<domain-name>] [<comment>] + + <domain-name><rr> [<comment>] + + <blank><rr> [<comment>] + +Blank lines, with or without comments, are allowed anywhere in the file. + +Two control entries are defined: $ORIGIN and $INCLUDE. $ORIGIN is +followed by a domain name, and resets the current origin for relative +domain names to the stated name. $INCLUDE inserts the named file into +the current file, and may optionally specify a domain name that sets the +relative domain name origin for the included file. $INCLUDE may also +have a comment. Note that a $INCLUDE entry never changes the relative +origin of the parent file, regardless of changes to the relative origin +made within the included file. + +The last two forms represent RRs. If an entry for an RR begins with a +blank, then the RR is assumed to be owned by the last stated owner. If +an RR entry begins with a <domain-name>, then the owner name is reset. + +<rr> contents take one of the following forms: + + [<TTL>] [<class>] <type> <RDATA> + + [<class>] [<TTL>] <type> <RDATA> + +The RR begins with optional TTL and class fields, followed by a type and +RDATA field appropriate to the type and class. Class and type use the +standard mnemonics, TTL is a decimal integer. Omitted class and TTL +values are default to the last explicitly stated values. Since type and +class mnemonics are disjoint, the parse is unique. (Note that this +order is different from the order used in examples and the order used in +the actual RRs; the given order allows easier parsing and defaulting.) + +<domain-name>s make up a large share of the data in the master file. +The labels in the domain name are expressed as character strings and +separated by dots. Quoting conventions allow arbitrary characters to be +stored in domain names. Domain names that end in a dot are called +absolute, and are taken as complete. Domain names which do not end in a +dot are called relative; the actual domain name is the concatenation of +the relative part with an origin specified in a $ORIGIN, $INCLUDE, or as +an argument to the master file loading routine. A relative name is an +error when no origin is available. + + + + + +Mockapetris [Page 34] + +RFC 1035 Domain Implementation and Specification November 1987 + + +<character-string> is expressed in one or two ways: as a contiguous set +of characters without interior spaces, or as a string beginning with a " +and ending with a ". Inside a " delimited string any character can +occur, except for a " itself, which must be quoted using \ (back slash). + +Because these files are text files several special encodings are +necessary to allow arbitrary data to be loaded. In particular: + + of the root. + +@ A free standing @ is used to denote the current origin. + +\X where X is any character other than a digit (0-9), is + used to quote that character so that its special meaning + does not apply. For example, "\." can be used to place + a dot character in a label. + +\DDD where each D is a digit is the octet corresponding to + the decimal number described by DDD. The resulting + octet is assumed to be text and is not checked for + special meaning. + +( ) Parentheses are used to group data that crosses a line + boundary. In effect, line terminations are not + recognized within parentheses. + +; Semicolon is used to start a comment; the remainder of + the line is ignored. + +5.2. Use of master files to define zones + +When a master file is used to load a zone, the operation should be +suppressed if any errors are encountered in the master file. The +rationale for this is that a single error can have widespread +consequences. For example, suppose that the RRs defining a delegation +have syntax errors; then the server will return authoritative name +errors for all names in the subzone (except in the case where the +subzone is also present on the server). + +Several other validity checks that should be performed in addition to +insuring that the file is syntactically correct: + + 1. All RRs in the file should have the same class. + + 2. Exactly one SOA RR should be present at the top of the zone. + + 3. If delegations are present and glue information is required, + it should be present. + + + +Mockapetris [Page 35] + +RFC 1035 Domain Implementation and Specification November 1987 + + + 4. Information present outside of the authoritative nodes in the + zone should be glue information, rather than the result of an + origin or similar error. + +5.3. Master file example + +The following is an example file which might be used to define the +ISI.EDU zone.and is loaded with an origin of ISI.EDU: + +@ IN SOA VENERA Action\.domains ( + 20 ; SERIAL + 7200 ; REFRESH + 600 ; RETRY + 3600000; EXPIRE + 60) ; MINIMUM + + NS A.ISI.EDU. + NS VENERA + NS VAXA + MX 10 VENERA + MX 20 VAXA + +A A 26.3.0.103 + +VENERA A 10.1.0.52 + A 128.9.0.32 + +VAXA A 10.2.0.27 + A 128.9.0.33 + + +$INCLUDE <SUBSYS>ISI-MAILBOXES.TXT + +Where the file <SUBSYS>ISI-MAILBOXES.TXT is: + + MOE MB A.ISI.EDU. + LARRY MB A.ISI.EDU. + CURLEY MB A.ISI.EDU. + STOOGES MG MOE + MG LARRY + MG CURLEY + +Note the use of the \ character in the SOA RR to specify the responsible +person mailbox "Action.domains@E.ISI.EDU". + + + + + + + +Mockapetris [Page 36] + +RFC 1035 Domain Implementation and Specification November 1987 + + +6. NAME SERVER IMPLEMENTATION + +6.1. Architecture + +The optimal structure for the name server will depend on the host +operating system and whether the name server is integrated with resolver +operations, either by supporting recursive service, or by sharing its +database with a resolver. This section discusses implementation +considerations for a name server which shares a database with a +resolver, but most of these concerns are present in any name server. + +6.1.1. Control + +A name server must employ multiple concurrent activities, whether they +are implemented as separate tasks in the host's OS or multiplexing +inside a single name server program. It is simply not acceptable for a +name server to block the service of UDP requests while it waits for TCP +data for refreshing or query activities. Similarly, a name server +should not attempt to provide recursive service without processing such +requests in parallel, though it may choose to serialize requests from a +single client, or to regard identical requests from the same client as +duplicates. A name server should not substantially delay requests while +it reloads a zone from master files or while it incorporates a newly +refreshed zone into its database. + +6.1.2. Database + +While name server implementations are free to use any internal data +structures they choose, the suggested structure consists of three major +parts: + + - A "catalog" data structure which lists the zones available to + this server, and a "pointer" to the zone data structure. The + main purpose of this structure is to find the nearest ancestor + zone, if any, for arriving standard queries. + + - Separate data structures for each of the zones held by the + name server. + + - A data structure for cached data. (or perhaps separate caches + for different classes) + +All of these data structures can be implemented an identical tree +structure format, with different data chained off the nodes in different +parts: in the catalog the data is pointers to zones, while in the zone +and cache data structures, the data will be RRs. In designing the tree +framework the designer should recognize that query processing will need +to traverse the tree using case-insensitive label comparisons; and that + + + +Mockapetris [Page 37] + +RFC 1035 Domain Implementation and Specification November 1987 + + +in real data, a few nodes have a very high branching factor (100-1000 or +more), but the vast majority have a very low branching factor (0-1). + +One way to solve the case problem is to store the labels for each node +in two pieces: a standardized-case representation of the label where all +ASCII characters are in a single case, together with a bit mask that +denotes which characters are actually of a different case. The +branching factor diversity can be handled using a simple linked list for +a node until the branching factor exceeds some threshold, and +transitioning to a hash structure after the threshold is exceeded. In +any case, hash structures used to store tree sections must insure that +hash functions and procedures preserve the casing conventions of the +DNS. + +The use of separate structures for the different parts of the database +is motivated by several factors: + + - The catalog structure can be an almost static structure that + need change only when the system administrator changes the + zones supported by the server. This structure can also be + used to store parameters used to control refreshing + activities. + + - The individual data structures for zones allow a zone to be + replaced simply by changing a pointer in the catalog. Zone + refresh operations can build a new structure and, when + complete, splice it into the database via a simple pointer + replacement. It is very important that when a zone is + refreshed, queries should not use old and new data + simultaneously. + + - With the proper search procedures, authoritative data in zones + will always "hide", and hence take precedence over, cached + data. + + - Errors in zone definitions that cause overlapping zones, etc., + may cause erroneous responses to queries, but problem + determination is simplified, and the contents of one "bad" + zone can't corrupt another. + + - Since the cache is most frequently updated, it is most + vulnerable to corruption during system restarts. It can also + become full of expired RR data. In either case, it can easily + be discarded without disturbing zone data. + +A major aspect of database design is selecting a structure which allows +the name server to deal with crashes of the name server's host. State +information which a name server should save across system crashes + + + +Mockapetris [Page 38] + +RFC 1035 Domain Implementation and Specification November 1987 + + +includes the catalog structure (including the state of refreshing for +each zone) and the zone data itself. + +6.1.3. Time + +Both the TTL data for RRs and the timing data for refreshing activities +depends on 32 bit timers in units of seconds. Inside the database, +refresh timers and TTLs for cached data conceptually "count down", while +data in the zone stays with constant TTLs. + +A recommended implementation strategy is to store time in two ways: as +a relative increment and as an absolute time. One way to do this is to +use positive 32 bit numbers for one type and negative numbers for the +other. The RRs in zones use relative times; the refresh timers and +cache data use absolute times. Absolute numbers are taken with respect +to some known origin and converted to relative values when placed in the +response to a query. When an absolute TTL is negative after conversion +to relative, then the data is expired and should be ignored. + +6.2. Standard query processing + +The major algorithm for standard query processing is presented in +[RFC-1034]. + +When processing queries with QCLASS=*, or some other QCLASS which +matches multiple classes, the response should never be authoritative +unless the server can guarantee that the response covers all classes. + +When composing a response, RRs which are to be inserted in the +additional section, but duplicate RRs in the answer or authority +sections, may be omitted from the additional section. + +When a response is so long that truncation is required, the truncation +should start at the end of the response and work forward in the +datagram. Thus if there is any data for the authority section, the +answer section is guaranteed to be unique. + +The MINIMUM value in the SOA should be used to set a floor on the TTL of +data distributed from a zone. This floor function should be done when +the data is copied into a response. This will allow future dynamic +update protocols to change the SOA MINIMUM field without ambiguous +semantics. + +6.3. Zone refresh and reload processing + +In spite of a server's best efforts, it may be unable to load zone data +from a master file due to syntax errors, etc., or be unable to refresh a +zone within the its expiration parameter. In this case, the name server + + + +Mockapetris [Page 39] + +RFC 1035 Domain Implementation and Specification November 1987 + + +should answer queries as if it were not supposed to possess the zone. + +If a master is sending a zone out via AXFR, and a new version is created +during the transfer, the master should continue to send the old version +if possible. In any case, it should never send part of one version and +part of another. If completion is not possible, the master should reset +the connection on which the zone transfer is taking place. + +6.4. Inverse queries (Optional) + +Inverse queries are an optional part of the DNS. Name servers are not +required to support any form of inverse queries. If a name server +receives an inverse query that it does not support, it returns an error +response with the "Not Implemented" error set in the header. While +inverse query support is optional, all name servers must be at least +able to return the error response. + +6.4.1. The contents of inverse queries and responses Inverse +queries reverse the mappings performed by standard query operations; +while a standard query maps a domain name to a resource, an inverse +query maps a resource to a domain name. For example, a standard query +might bind a domain name to a host address; the corresponding inverse +query binds the host address to a domain name. + +Inverse queries take the form of a single RR in the answer section of +the message, with an empty question section. The owner name of the +query RR and its TTL are not significant. The response carries +questions in the question section which identify all names possessing +the query RR WHICH THE NAME SERVER KNOWS. Since no name server knows +about all of the domain name space, the response can never be assumed to +be complete. Thus inverse queries are primarily useful for database +management and debugging activities. Inverse queries are NOT an +acceptable method of mapping host addresses to host names; use the IN- +ADDR.ARPA domain instead. + +Where possible, name servers should provide case-insensitive comparisons +for inverse queries. Thus an inverse query asking for an MX RR of +"Venera.isi.edu" should get the same response as a query for +"VENERA.ISI.EDU"; an inverse query for HINFO RR "IBM-PC UNIX" should +produce the same result as an inverse query for "IBM-pc unix". However, +this cannot be guaranteed because name servers may possess RRs that +contain character strings but the name server does not know that the +data is character. + +When a name server processes an inverse query, it either returns: + + 1. zero, one, or multiple domain names for the specified + resource as QNAMEs in the question section + + + +Mockapetris [Page 40] + +RFC 1035 Domain Implementation and Specification November 1987 + + + 2. an error code indicating that the name server doesn't support + inverse mapping of the specified resource type. + +When the response to an inverse query contains one or more QNAMEs, the +owner name and TTL of the RR in the answer section which defines the +inverse query is modified to exactly match an RR found at the first +QNAME. + +RRs returned in the inverse queries cannot be cached using the same +mechanism as is used for the replies to standard queries. One reason +for this is that a name might have multiple RRs of the same type, and +only one would appear. For example, an inverse query for a single +address of a multiply homed host might create the impression that only +one address existed. + +6.4.2. Inverse query and response example The overall structure +of an inverse query for retrieving the domain name that corresponds to +Internet address 10.1.0.52 is shown below: + + +-----------------------------------------+ + Header | OPCODE=IQUERY, ID=997 | + +-----------------------------------------+ + Question | <empty> | + +-----------------------------------------+ + Answer | <anyname> A IN 10.1.0.52 | + +-----------------------------------------+ + Authority | <empty> | + +-----------------------------------------+ + Additional | <empty> | + +-----------------------------------------+ + +This query asks for a question whose answer is the Internet style +address 10.1.0.52. Since the owner name is not known, any domain name +can be used as a placeholder (and is ignored). A single octet of zero, +signifying the root, is usually used because it minimizes the length of +the message. The TTL of the RR is not significant. The response to +this query might be: + + + + + + + + + + + + + + +Mockapetris [Page 41] + +RFC 1035 Domain Implementation and Specification November 1987 + + + +-----------------------------------------+ + Header | OPCODE=RESPONSE, ID=997 | + +-----------------------------------------+ + Question |QTYPE=A, QCLASS=IN, QNAME=VENERA.ISI.EDU | + +-----------------------------------------+ + Answer | VENERA.ISI.EDU A IN 10.1.0.52 | + +-----------------------------------------+ + Authority | <empty> | + +-----------------------------------------+ + Additional | <empty> | + +-----------------------------------------+ + +Note that the QTYPE in a response to an inverse query is the same as the +TYPE field in the answer section of the inverse query. Responses to +inverse queries may contain multiple questions when the inverse is not +unique. If the question section in the response is not empty, then the +RR in the answer section is modified to correspond to be an exact copy +of an RR at the first QNAME. + +6.4.3. Inverse query processing + +Name servers that support inverse queries can support these operations +through exhaustive searches of their databases, but this becomes +impractical as the size of the database increases. An alternative +approach is to invert the database according to the search key. + +For name servers that support multiple zones and a large amount of data, +the recommended approach is separate inversions for each zone. When a +particular zone is changed during a refresh, only its inversions need to +be redone. + +Support for transfer of this type of inversion may be included in future +versions of the domain system, but is not supported in this version. + +6.5. Completion queries and responses + +The optional completion services described in RFC-882 and RFC-883 have +been deleted. Redesigned services may become available in the future. + + + + + + + + + + + + + +Mockapetris [Page 42] + +RFC 1035 Domain Implementation and Specification November 1987 + + +7. RESOLVER IMPLEMENTATION + +The top levels of the recommended resolver algorithm are discussed in +[RFC-1034]. This section discusses implementation details assuming the +database structure suggested in the name server implementation section +of this memo. + +7.1. Transforming a user request into a query + +The first step a resolver takes is to transform the client's request, +stated in a format suitable to the local OS, into a search specification +for RRs at a specific name which match a specific QTYPE and QCLASS. +Where possible, the QTYPE and QCLASS should correspond to a single type +and a single class, because this makes the use of cached data much +simpler. The reason for this is that the presence of data of one type +in a cache doesn't confirm the existence or non-existence of data of +other types, hence the only way to be sure is to consult an +authoritative source. If QCLASS=* is used, then authoritative answers +won't be available. + +Since a resolver must be able to multiplex multiple requests if it is to +perform its function efficiently, each pending request is usually +represented in some block of state information. This state block will +typically contain: + + - A timestamp indicating the time the request began. + The timestamp is used to decide whether RRs in the database + can be used or are out of date. This timestamp uses the + absolute time format previously discussed for RR storage in + zones and caches. Note that when an RRs TTL indicates a + relative time, the RR must be timely, since it is part of a + zone. When the RR has an absolute time, it is part of a + cache, and the TTL of the RR is compared against the timestamp + for the start of the request. + + Note that using the timestamp is superior to using a current + time, since it allows RRs with TTLs of zero to be entered in + the cache in the usual manner, but still used by the current + request, even after intervals of many seconds due to system + load, query retransmission timeouts, etc. + + - Some sort of parameters to limit the amount of work which will + be performed for this request. + + The amount of work which a resolver will do in response to a + client request must be limited to guard against errors in the + database, such as circular CNAME references, and operational + problems, such as network partition which prevents the + + + +Mockapetris [Page 43] + +RFC 1035 Domain Implementation and Specification November 1987 + + + resolver from accessing the name servers it needs. While + local limits on the number of times a resolver will retransmit + a particular query to a particular name server address are + essential, the resolver should have a global per-request + counter to limit work on a single request. The counter should + be set to some initial value and decremented whenever the + resolver performs any action (retransmission timeout, + retransmission, etc.) If the counter passes zero, the request + is terminated with a temporary error. + + Note that if the resolver structure allows one request to + start others in parallel, such as when the need to access a + name server for one request causes a parallel resolve for the + name server's addresses, the spawned request should be started + with a lower counter. This prevents circular references in + the database from starting a chain reaction of resolver + activity. + + - The SLIST data structure discussed in [RFC-1034]. + + This structure keeps track of the state of a request if it + must wait for answers from foreign name servers. + +7.2. Sending the queries + +As described in [RFC-1034], the basic task of the resolver is to +formulate a query which will answer the client's request and direct that +query to name servers which can provide the information. The resolver +will usually only have very strong hints about which servers to ask, in +the form of NS RRs, and may have to revise the query, in response to +CNAMEs, or revise the set of name servers the resolver is asking, in +response to delegation responses which point the resolver to name +servers closer to the desired information. In addition to the +information requested by the client, the resolver may have to call upon +its own services to determine the address of name servers it wishes to +contact. + +In any case, the model used in this memo assumes that the resolver is +multiplexing attention between multiple requests, some from the client, +and some internally generated. Each request is represented by some +state information, and the desired behavior is that the resolver +transmit queries to name servers in a way that maximizes the probability +that the request is answered, minimizes the time that the request takes, +and avoids excessive transmissions. The key algorithm uses the state +information of the request to select the next name server address to +query, and also computes a timeout which will cause the next action +should a response not arrive. The next action will usually be a +transmission to some other server, but may be a temporary error to the + + + +Mockapetris [Page 44] + +RFC 1035 Domain Implementation and Specification November 1987 + + +client. + +The resolver always starts with a list of server names to query (SLIST). +This list will be all NS RRs which correspond to the nearest ancestor +zone that the resolver knows about. To avoid startup problems, the +resolver should have a set of default servers which it will ask should +it have no current NS RRs which are appropriate. The resolver then adds +to SLIST all of the known addresses for the name servers, and may start +parallel requests to acquire the addresses of the servers when the +resolver has the name, but no addresses, for the name servers. + +To complete initialization of SLIST, the resolver attaches whatever +history information it has to the each address in SLIST. This will +usually consist of some sort of weighted averages for the response time +of the address, and the batting average of the address (i.e., how often +the address responded at all to the request). Note that this +information should be kept on a per address basis, rather than on a per +name server basis, because the response time and batting average of a +particular server may vary considerably from address to address. Note +also that this information is actually specific to a resolver address / +server address pair, so a resolver with multiple addresses may wish to +keep separate histories for each of its addresses. Part of this step +must deal with addresses which have no such history; in this case an +expected round trip time of 5-10 seconds should be the worst case, with +lower estimates for the same local network, etc. + +Note that whenever a delegation is followed, the resolver algorithm +reinitializes SLIST. + +The information establishes a partial ranking of the available name +server addresses. Each time an address is chosen and the state should +be altered to prevent its selection again until all other addresses have +been tried. The timeout for each transmission should be 50-100% greater +than the average predicted value to allow for variance in response. + +Some fine points: + + - The resolver may encounter a situation where no addresses are + available for any of the name servers named in SLIST, and + where the servers in the list are precisely those which would + normally be used to look up their own addresses. This + situation typically occurs when the glue address RRs have a + smaller TTL than the NS RRs marking delegation, or when the + resolver caches the result of a NS search. The resolver + should detect this condition and restart the search at the + next ancestor zone, or alternatively at the root. + + + + + +Mockapetris [Page 45] + +RFC 1035 Domain Implementation and Specification November 1987 + + + - If a resolver gets a server error or other bizarre response + from a name server, it should remove it from SLIST, and may + wish to schedule an immediate transmission to the next + candidate server address. + +7.3. Processing responses + +The first step in processing arriving response datagrams is to parse the +response. This procedure should include: + + - Check the header for reasonableness. Discard datagrams which + are queries when responses are expected. + + - Parse the sections of the message, and insure that all RRs are + correctly formatted. + + - As an optional step, check the TTLs of arriving data looking + for RRs with excessively long TTLs. If a RR has an + excessively long TTL, say greater than 1 week, either discard + the whole response, or limit all TTLs in the response to 1 + week. + +The next step is to match the response to a current resolver request. +The recommended strategy is to do a preliminary matching using the ID +field in the domain header, and then to verify that the question section +corresponds to the information currently desired. This requires that +the transmission algorithm devote several bits of the domain ID field to +a request identifier of some sort. This step has several fine points: + + - Some name servers send their responses from different + addresses than the one used to receive the query. That is, a + resolver cannot rely that a response will come from the same + address which it sent the corresponding query to. This name + server bug is typically encountered in UNIX systems. + + - If the resolver retransmits a particular request to a name + server it should be able to use a response from any of the + transmissions. However, if it is using the response to sample + the round trip time to access the name server, it must be able + to determine which transmission matches the response (and keep + transmission times for each outgoing message), or only + calculate round trip times based on initial transmissions. + + - A name server will occasionally not have a current copy of a + zone which it should have according to some NS RRs. The + resolver should simply remove the name server from the current + SLIST, and continue. + + + + +Mockapetris [Page 46] + +RFC 1035 Domain Implementation and Specification November 1987 + + +7.4. Using the cache + +In general, we expect a resolver to cache all data which it receives in +responses since it may be useful in answering future client requests. +However, there are several types of data which should not be cached: + + - When several RRs of the same type are available for a + particular owner name, the resolver should either cache them + all or none at all. When a response is truncated, and a + resolver doesn't know whether it has a complete set, it should + not cache a possibly partial set of RRs. + + - Cached data should never be used in preference to + authoritative data, so if caching would cause this to happen + the data should not be cached. + + - The results of an inverse query should not be cached. + + - The results of standard queries where the QNAME contains "*" + labels if the data might be used to construct wildcards. The + reason is that the cache does not necessarily contain existing + RRs or zone boundary information which is necessary to + restrict the application of the wildcard RRs. + + - RR data in responses of dubious reliability. When a resolver + receives unsolicited responses or RR data other than that + requested, it should discard it without caching it. The basic + implication is that all sanity checks on a packet should be + performed before any of it is cached. + +In a similar vein, when a resolver has a set of RRs for some name in a +response, and wants to cache the RRs, it should check its cache for +already existing RRs. Depending on the circumstances, either the data +in the response or the cache is preferred, but the two should never be +combined. If the data in the response is from authoritative data in the +answer section, it is always preferred. + +8. MAIL SUPPORT + +The domain system defines a standard for mapping mailboxes into domain +names, and two methods for using the mailbox information to derive mail +routing information. The first method is called mail exchange binding +and the other method is mailbox binding. The mailbox encoding standard +and mail exchange binding are part of the DNS official protocol, and are +the recommended method for mail routing in the Internet. Mailbox +binding is an experimental feature which is still under development and +subject to change. + + + + +Mockapetris [Page 47] + +RFC 1035 Domain Implementation and Specification November 1987 + + +The mailbox encoding standard assumes a mailbox name of the form +"<local-part>@<mail-domain>". While the syntax allowed in each of these +sections varies substantially between the various mail internets, the +preferred syntax for the ARPA Internet is given in [RFC-822]. + +The DNS encodes the <local-part> as a single label, and encodes the +<mail-domain> as a domain name. The single label from the <local-part> +is prefaced to the domain name from <mail-domain> to form the domain +name corresponding to the mailbox. Thus the mailbox HOSTMASTER@SRI- +NIC.ARPA is mapped into the domain name HOSTMASTER.SRI-NIC.ARPA. If the +<local-part> contains dots or other special characters, its +representation in a master file will require the use of backslash +quoting to ensure that the domain name is properly encoded. For +example, the mailbox Action.domains@ISI.EDU would be represented as +Action\.domains.ISI.EDU. + +8.1. Mail exchange binding + +Mail exchange binding uses the <mail-domain> part of a mailbox +specification to determine where mail should be sent. The <local-part> +is not even consulted. [RFC-974] specifies this method in detail, and +should be consulted before attempting to use mail exchange support. + +One of the advantages of this method is that it decouples mail +destination naming from the hosts used to support mail service, at the +cost of another layer of indirection in the lookup function. However, +the addition layer should eliminate the need for complicated "%", "!", +etc encodings in <local-part>. + +The essence of the method is that the <mail-domain> is used as a domain +name to locate type MX RRs which list hosts willing to accept mail for +<mail-domain>, together with preference values which rank the hosts +according to an order specified by the administrators for <mail-domain>. + +In this memo, the <mail-domain> ISI.EDU is used in examples, together +with the hosts VENERA.ISI.EDU and VAXA.ISI.EDU as mail exchanges for +ISI.EDU. If a mailer had a message for Mockapetris@ISI.EDU, it would +route it by looking up MX RRs for ISI.EDU. The MX RRs at ISI.EDU name +VENERA.ISI.EDU and VAXA.ISI.EDU, and type A queries can find the host +addresses. + +8.2. Mailbox binding (Experimental) + +In mailbox binding, the mailer uses the entire mail destination +specification to construct a domain name. The encoded domain name for +the mailbox is used as the QNAME field in a QTYPE=MAILB query. + +Several outcomes are possible for this query: + + + +Mockapetris [Page 48] + +RFC 1035 Domain Implementation and Specification November 1987 + + + 1. The query can return a name error indicating that the mailbox + does not exist as a domain name. + + In the long term, this would indicate that the specified + mailbox doesn't exist. However, until the use of mailbox + binding is universal, this error condition should be + interpreted to mean that the organization identified by the + global part does not support mailbox binding. The + appropriate procedure is to revert to exchange binding at + this point. + + 2. The query can return a Mail Rename (MR) RR. + + The MR RR carries new mailbox specification in its RDATA + field. The mailer should replace the old mailbox with the + new one and retry the operation. + + 3. The query can return a MB RR. + + The MB RR carries a domain name for a host in its RDATA + field. The mailer should deliver the message to that host + via whatever protocol is applicable, e.g., b,SMTP. + + 4. The query can return one or more Mail Group (MG) RRs. + + This condition means that the mailbox was actually a mailing + list or mail group, rather than a single mailbox. Each MG RR + has a RDATA field that identifies a mailbox that is a member + of the group. The mailer should deliver a copy of the + message to each member. + + 5. The query can return a MB RR as well as one or more MG RRs. + + This condition means the the mailbox was actually a mailing + list. The mailer can either deliver the message to the host + specified by the MB RR, which will in turn do the delivery to + all members, or the mailer can use the MG RRs to do the + expansion itself. + +In any of these cases, the response may include a Mail Information +(MINFO) RR. This RR is usually associated with a mail group, but is +legal with a MB. The MINFO RR identifies two mailboxes. One of these +identifies a responsible person for the original mailbox name. This +mailbox should be used for requests to be added to a mail group, etc. +The second mailbox name in the MINFO RR identifies a mailbox that should +receive error messages for mail failures. This is particularly +appropriate for mailing lists when errors in member names should be +reported to a person other than the one who sends a message to the list. + + + +Mockapetris [Page 49] + +RFC 1035 Domain Implementation and Specification November 1987 + + +New fields may be added to this RR in the future. + + +9. REFERENCES and BIBLIOGRAPHY + +[Dyer 87] S. Dyer, F. Hsu, "Hesiod", Project Athena + Technical Plan - Name Service, April 1987, version 1.9. + + Describes the fundamentals of the Hesiod name service. + +[IEN-116] J. Postel, "Internet Name Server", IEN-116, + USC/Information Sciences Institute, August 1979. + + A name service obsoleted by the Domain Name System, but + still in use. + +[Quarterman 86] J. Quarterman, and J. Hoskins, "Notable Computer Networks", + Communications of the ACM, October 1986, volume 29, number + 10. + +[RFC-742] K. Harrenstien, "NAME/FINGER", RFC-742, Network + Information Center, SRI International, December 1977. + +[RFC-768] J. Postel, "User Datagram Protocol", RFC-768, + USC/Information Sciences Institute, August 1980. + +[RFC-793] J. Postel, "Transmission Control Protocol", RFC-793, + USC/Information Sciences Institute, September 1981. + +[RFC-799] D. Mills, "Internet Name Domains", RFC-799, COMSAT, + September 1981. + + Suggests introduction of a hierarchy in place of a flat + name space for the Internet. + +[RFC-805] J. Postel, "Computer Mail Meeting Notes", RFC-805, + USC/Information Sciences Institute, February 1982. + +[RFC-810] E. Feinler, K. Harrenstien, Z. Su, and V. White, "DOD + Internet Host Table Specification", RFC-810, Network + Information Center, SRI International, March 1982. + + Obsolete. See RFC-952. + +[RFC-811] K. Harrenstien, V. White, and E. Feinler, "Hostnames + Server", RFC-811, Network Information Center, SRI + International, March 1982. + + + + +Mockapetris [Page 50] + +RFC 1035 Domain Implementation and Specification November 1987 + + + Obsolete. See RFC-953. + +[RFC-812] K. Harrenstien, and V. White, "NICNAME/WHOIS", RFC-812, + Network Information Center, SRI International, March + 1982. + +[RFC-819] Z. Su, and J. Postel, "The Domain Naming Convention for + Internet User Applications", RFC-819, Network + Information Center, SRI International, August 1982. + + Early thoughts on the design of the domain system. + Current implementation is completely different. + +[RFC-821] J. Postel, "Simple Mail Transfer Protocol", RFC-821, + USC/Information Sciences Institute, August 1980. + +[RFC-830] Z. Su, "A Distributed System for Internet Name Service", + RFC-830, Network Information Center, SRI International, + October 1982. + + Early thoughts on the design of the domain system. + Current implementation is completely different. + +[RFC-882] P. Mockapetris, "Domain names - Concepts and + Facilities," RFC-882, USC/Information Sciences + Institute, November 1983. + + Superceeded by this memo. + +[RFC-883] P. Mockapetris, "Domain names - Implementation and + Specification," RFC-883, USC/Information Sciences + Institute, November 1983. + + Superceeded by this memo. + +[RFC-920] J. Postel and J. Reynolds, "Domain Requirements", + RFC-920, USC/Information Sciences Institute, + October 1984. + + Explains the naming scheme for top level domains. + +[RFC-952] K. Harrenstien, M. Stahl, E. Feinler, "DoD Internet Host + Table Specification", RFC-952, SRI, October 1985. + + Specifies the format of HOSTS.TXT, the host/address + table replaced by the DNS. + + + + + +Mockapetris [Page 51] + +RFC 1035 Domain Implementation and Specification November 1987 + + +[RFC-953] K. Harrenstien, M. Stahl, E. Feinler, "HOSTNAME Server", + RFC-953, SRI, October 1985. + + This RFC contains the official specification of the + hostname server protocol, which is obsoleted by the DNS. + This TCP based protocol accesses information stored in + the RFC-952 format, and is used to obtain copies of the + host table. + +[RFC-973] P. Mockapetris, "Domain System Changes and + Observations", RFC-973, USC/Information Sciences + Institute, January 1986. + + Describes changes to RFC-882 and RFC-883 and reasons for + them. + +[RFC-974] C. Partridge, "Mail routing and the domain system", + RFC-974, CSNET CIC BBN Labs, January 1986. + + Describes the transition from HOSTS.TXT based mail + addressing to the more powerful MX system used with the + domain system. + +[RFC-1001] NetBIOS Working Group, "Protocol standard for a NetBIOS + service on a TCP/UDP transport: Concepts and Methods", + RFC-1001, March 1987. + + This RFC and RFC-1002 are a preliminary design for + NETBIOS on top of TCP/IP which proposes to base NetBIOS + name service on top of the DNS. + +[RFC-1002] NetBIOS Working Group, "Protocol standard for a NetBIOS + service on a TCP/UDP transport: Detailed + Specifications", RFC-1002, March 1987. + +[RFC-1010] J. Reynolds, and J. Postel, "Assigned Numbers", RFC-1010, + USC/Information Sciences Institute, May 1987. + + Contains socket numbers and mnemonics for host names, + operating systems, etc. + +[RFC-1031] W. Lazear, "MILNET Name Domain Transition", RFC-1031, + November 1987. + + Describes a plan for converting the MILNET to the DNS. + +[RFC-1032] M. Stahl, "Establishing a Domain - Guidelines for + Administrators", RFC-1032, November 1987. + + + +Mockapetris [Page 52] + +RFC 1035 Domain Implementation and Specification November 1987 + + + Describes the registration policies used by the NIC to + administer the top level domains and delegate subzones. + +[RFC-1033] M. Lottor, "Domain Administrators Operations Guide", + RFC-1033, November 1987. + + A cookbook for domain administrators. + +[Solomon 82] M. Solomon, L. Landweber, and D. Neuhengen, "The CSNET + Name Server", Computer Networks, vol 6, nr 3, July 1982. + + Describes a name service for CSNET which is independent + from the DNS and DNS use in the CSNET. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Mockapetris [Page 53] + +RFC 1035 Domain Implementation and Specification November 1987 + + +Index + + * 13 + + ; 33, 35 + + <character-string> 35 + <domain-name> 34 + + @ 35 + + \ 35 + + A 12 + + Byte order 8 + + CH 13 + Character case 9 + CLASS 11 + CNAME 12 + Completion 42 + CS 13 + + Hesiod 13 + HINFO 12 + HS 13 + + IN 13 + IN-ADDR.ARPA domain 22 + Inverse queries 40 + + Mailbox names 47 + MB 12 + MD 12 + MF 12 + MG 12 + MINFO 12 + MINIMUM 20 + MR 12 + MX 12 + + NS 12 + NULL 12 + + Port numbers 32 + Primary server 5 + PTR 12, 18 + + + +Mockapetris [Page 54] + +RFC 1035 Domain Implementation and Specification November 1987 + + + QCLASS 13 + QTYPE 12 + + RDATA 12 + RDLENGTH 11 + + Secondary server 5 + SOA 12 + Stub resolvers 7 + + TCP 32 + TXT 12 + TYPE 11 + + UDP 32 + + WKS 12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Mockapetris [Page 55] + diff --git a/bin/tests/dst/t2_data_2 b/bin/tests/dst/t2_data_2 new file mode 100644 index 0000000..7b0e35d --- /dev/null +++ b/bin/tests/dst/t2_data_2 @@ -0,0 +1,3077 @@ +Network Working Group P. Mockapetris +Request for Comments: 1035 ISI + November 1987 +Obsoletes: RFCs 882, 883, 973 + + DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION + + +1. STATUS OF THIS MEMO + +This RFC describes the details of the domain system and protocol, and +assumes that the reader is familiar with the concepts discussed in a +companion RFC, "Domain Names - Concepts and Facilities" [RFC-4301]. + +The domain system is a mixture of functions and data types which are an +official protocol and functions and data types which are still +experimental. Since the domain system is intentionally extensible, new +data types and experimental behavior should always be expected in parts +of the system beyond the official protocol. The official protocol parts +include standard queries, responses and the Internet class RR data +formats (e.g., host addresses). Since the previous RFC set, several +definitions have changed, so some previous definitions are obsolete. + +Experimental or obsolete features are clearly marked in these RFCs, and +such information should be used with caution. + +The reader is especially cautioned not to depend on the values which +appear in examples to be current or complete, since their purpose is +primarily pedagogical. Distribution of this memo is unlimited. + + Table of Contents + + 1. STATUS OF THIS MEMO 1 + 2. INTRODUCTION 3 + 2.1. Overview 3 + 2.2. Common configurations 4 + 2.3. Conventions 7 + 2.3.1. Preferred name syntax 7 + 2.3.2. Data Transmission Order 8 + 2.3.3. Character Case 9 + 2.3.4. Size limits 10 + 3. DOMAIN NAME SPACE AND RR DEFINITIONS 10 + 3.1. Name space definitions 10 + 3.2. RR definitions 11 + 3.2.1. Format 11 + 3.2.2. TYPE values 12 + 3.2.3. QTYPE values 12 + 3.2.4. CLASS values 13 + + + +Mockapetris [Page 1] + +RFC 1035 Domain Implementation and Specification November 1987 + + + 3.2.5. QCLASS values 13 + 3.3. Standard RRs 13 + 3.3.1. CNAME RDATA format 14 + 3.3.2. HINFO RDATA format 14 + 3.3.3. MB RDATA format (EXPERIMENTAL) 14 + 3.3.4. MD RDATA format (Obsolete) 15 + 3.3.5. MF RDATA format (Obsolete) 15 + 3.3.6. MG RDATA format (EXPERIMENTAL) 16 + 3.3.7. MINFO RDATA format (EXPERIMENTAL) 16 + 3.3.8. MR RDATA format (EXPERIMENTAL) 17 + 3.3.9. MX RDATA format 17 + 3.3.10. NULL RDATA format (EXPERIMENTAL) 17 + 3.3.11. NS RDATA format 18 + 3.3.12. PTR RDATA format 18 + 3.3.13. SOA RDATA format 19 + 3.3.14. TXT RDATA format 20 + 3.4. ARPA Internet specific RRs 20 + 3.4.1. A RDATA format 20 + 3.4.2. WKS RDATA format 21 + 3.5. IN-ADDR.ARPA domain 22 + 3.6. Defining new types, classes, and special namespaces 24 + 4. MESSAGES 25 + 4.1. Format 25 + 4.1.1. Header section format 26 + 4.1.2. Question section format 28 + 4.1.3. Resource record format 29 + 4.1.4. Message compression 30 + 4.2. Transport 32 + 4.2.1. UDP usage 32 + 4.2.2. TCP usage 32 + 5. MASTER FILES 33 + 5.1. Format 33 + 5.2. Use of master files to define zones 35 + 5.3. Master file example 36 + 6. NAME SERVER IMPLEMENTATION 37 + 6.1. Architecture 37 + 6.1.1. Control 37 + 6.1.2. Database 37 + 6.1.3. Time 39 + 6.2. Standard query processing 39 + 6.3. Zone refresh and reload processing 39 + 6.4. Inverse queries (Optional) 40 + 6.4.1. The contents of inverse queries and responses 40 + 6.4.2. Inverse query and response example 41 + 6.4.3. Inverse query processing 42 + + + + + + +Mockapetris [Page 2] + +RFC 1035 Domain Implementation and Specification November 1987 + + + 6.5. Completion queries and responses 42 + 7. RESOLVER IMPLEMENTATION 43 + 7.1. Transforming a user request into a query 43 + 7.2. Sending the queries 44 + 7.3. Processing responses 46 + 7.4. Using the cache 47 + 8. MAIL SUPPORT 47 + 8.1. Mail exchange binding 48 + 8.2. Mailbox binding (Experimental) 48 + 9. REFERENCES and BIBLIOGRAPHY 50 + Index 54 + +2. INTRODUCTION + +2.1. Overview + +The goal of domain names is to provide a mechanism for naming resources +in such a way that the names are usable in different hosts, networks, +protocol families, internets, and administrative organizations. + +From the user's point of view, domain names are useful as arguments to a +local agent, called a resolver, which retrieves information associated +with the domain name. Thus a user might ask for the host address or +mail information associated with a particular domain name. To enable +the user to request a particular type of information, an appropriate +query type is passed to the resolver with the domain name. To the user, +the domain tree is a single information space; the resolver is +responsible for hiding the distribution of data among name servers from +the user. + +From the resolver's point of view, the database that makes up the domain +space is distributed among various name servers. Different parts of the +domain space are stored in different name servers, although a particular +data item will be stored redundantly in two or more name servers. The +resolver starts with knowledge of at least one name server. When the +resolver processes a user query it asks a known name server for the +information; in return, the resolver either receives the desired +information or a referral to another name server. Using these +referrals, resolvers learn the identities and contents of other name +servers. Resolvers are responsible for dealing with the distribution of +the domain space and dealing with the effects of name server failure by +consulting redundant databases in other servers. + +Name servers manage two kinds of data. The first kind of data held in +sets called zones; each zone is the complete database for a particular +"pruned" subtree of the domain space. This data is called +authoritative. A name server periodically checks to make sure that its +zones are up to date, and if not, obtains a new copy of updated zones + + + +Mockapetris [Page 3] + +RFC 1035 Domain Implementation and Specification November 1987 + + +from master files stored locally or in another name server. The second +kind of data is cached data which was acquired by a local resolver. +This data may be incomplete, but improves the performance of the +retrieval process when non-local data is repeatedly accessed. Cached +data is eventually discarded by a timeout mechanism. + +This functional structure isolates the problems of user interface, +failure recovery, and distribution in the resolvers and isolates the +database update and refresh problems in the name servers. + +2.2. Common configurations + +A host can participate in the domain name system in a number of ways, +depending on whether the host runs programs that retrieve information +from the domain system, name servers that answer queries from other +hosts, or various combinations of both functions. The simplest, and +perhaps most typical, configuration is shown below: + + Local Host | Foreign + | + +---------+ +----------+ | +--------+ + | | user queries | |queries | | | + | User |-------------->| |---------|->|Foreign | + | Program | | Resolver | | | Name | + | |<--------------| |<--------|--| Server | + | | user responses| |responses| | | + +---------+ +----------+ | +--------+ + | A | + cache additions | | references | + V | | + +----------+ | + | cache | | + +----------+ | + +User programs interact with the domain name space through resolvers; the +format of user queries and user responses is specific to the host and +its operating system. User queries will typically be operating system +calls, and the resolver and its cache will be part of the host operating +system. Less capable hosts may choose to implement the resolver as a +subroutine to be linked in with every program that needs its services. +Resolvers answer user queries with information they acquire via queries +to foreign name servers and the local cache. + +Note that the resolver may have to make several queries to several +different foreign name servers to answer a particular user query, and +hence the resolution of a user query may involve several network +accesses and an arbitrary amount of time. The queries to foreign name +servers and the corresponding responses have a standard format described + + + +Mockapetris [Page 4] + +RFC 1035 Domain Implementation and Specification November 1987 + + +in this memo, and may be datagrams. + +Depending on its capabilities, a name server could be a stand alone +program on a dedicated machine or a process or processes on a large +timeshared host. A simple configuration might be: + + Local Host | Foreign + | + +---------+ | + / /| | + +---------+ | +----------+ | +--------+ + | | | | |responses| | | + | | | | Name |---------|->|Foreign | + | Master |-------------->| Server | | |Resolver| + | files | | | |<--------|--| | + | |/ | | queries | +--------+ + +---------+ +----------+ | + +Here a primary name server acquires information about one or more zones +by reading master files from its local file system, and answers queries +about those zones that arrive from foreign resolvers. + +The DNS requires that all zones be redundantly supported by more than +one name server. Designated secondary servers can acquire zones and +check for updates from the primary server using the zone transfer +protocol of the DNS. This configuration is shown below: + + Local Host | Foreign + | + +---------+ | + / /| | + +---------+ | +----------+ | +--------+ + | | | | |responses| | | + | | | | Name |---------|->|Foreign | + | Master |-------------->| Server | | |Resolver| + | files | | | |<--------|--| | + | |/ | | queries | +--------+ + +---------+ +----------+ | + A |maintenance | +--------+ + | +------------|->| | + | queries | |Foreign | + | | | Name | + +------------------|--| Server | + maintenance responses | +--------+ + +In this configuration, the name server periodically establishes a +virtual circuit to a foreign name server to acquire a copy of a zone or +to check that an existing copy has not changed. The messages sent for + + + +Mockapetris [Page 5] + +RFC 1035 Domain Implementation and Specification November 1987 + + +these maintenance activities follow the same form as queries and +responses, but the message sequences are somewhat different. + +The information flow in a host that supports all aspects of the domain +name system is shown below: + + Local Host | Foreign + | + +---------+ +----------+ | +--------+ + | | user queries | |queries | | | + | User |-------------->| |---------|->|Foreign | + | Program | | Resolver | | | Name | + | |<--------------| |<--------|--| Server | + | | user responses| |responses| | | + +---------+ +----------+ | +--------+ + | A | + cache additions | | references | + V | | + +----------+ | + | Shared | | + | database | | + +----------+ | + A | | + +---------+ refreshes | | references | + / /| | V | + +---------+ | +----------+ | +--------+ + | | | | |responses| | | + | | | | Name |---------|->|Foreign | + | Master |-------------->| Server | | |Resolver| + | files | | | |<--------|--| | + | |/ | | queries | +--------+ + +---------+ +----------+ | + A |maintenance | +--------+ + | +------------|->| | + | queries | |Foreign | + | | | Name | + +------------------|--| Server | + maintenance responses | +--------+ + +The shared database holds domain space data for the local name server +and resolver. The contents of the shared database will typically be a +mixture of authoritative data maintained by the periodic refresh +operations of the name server and cached data from previous resolver +requests. The structure of the domain data and the necessity for +synchronization between name servers and resolvers imply the general +characteristics of this database, but the actual format is up to the +local implementor. + + + + +Mockapetris [Page 6] + +RFC 1035 Domain Implementation and Specification November 1987 + + +Information flow can also be tailored so that a group of hosts act +together to optimize activities. Sometimes this is done to offload less +capable hosts so that they do not have to implement a full resolver. +This can be appropriate for PCs or hosts which want to minimize the +amount of new network code which is required. This scheme can also +allow a group of hosts can share a small number of caches rather than +maintaining a large number of separate caches, on the premise that the +centralized caches will have a higher hit ratio. In either case, +resolvers are replaced with stub resolvers which act as front ends to +resolvers located in a recursive server in one or more name servers +known to perform that service: + + Local Hosts | Foreign + | + +---------+ | + | | responses | + | Stub |<--------------------+ | + | Resolver| | | + | |----------------+ | | + +---------+ recursive | | | + queries | | | + V | | + +---------+ recursive +----------+ | +--------+ + | | queries | |queries | | | + | Stub |-------------->| Recursive|---------|->|Foreign | + | Resolver| | Server | | | Name | + | |<--------------| |<--------|--| Server | + +---------+ responses | |responses| | | + +----------+ | +--------+ + | Central | | + | cache | | + +----------+ | + +In any case, note that domain components are always replicated for +reliability whenever possible. + +2.3. Conventions + +The domain system has several conventions dealing with low-level, but +fundamental, issues. While the implementor is free to violate these +conventions WITHIN HIS OWN SYSTEM, he must observe these conventions in +ALL behavior observed from other hosts. + +2.3.1. Preferred name syntax + +The DNS specifications attempt to be as general as possible in the rules +for constructing domain names. The idea is that the name of any +existing object can be expressed as a domain name with minimal changes. + + + +Mockapetris [Page 7] + +RFC 1035 Domain Implementation and Specification November 1987 + + +However, when assigning a domain name for an object, the prudent user +will select a name which satisfies both the rules of the domain system +and any existing rules for the object, whether these rules are published +or implied by existing programs. + +For example, when naming a mail domain, the user should satisfy both the +rules of this memo and those in RFC-822. When creating a new host name, +the old rules for HOSTS.TXT should be followed. This avoids problems +when old software is converted to use domain names. + +The following syntax will result in fewer problems with many + +applications that use domain names (e.g., mail, TELNET). + +<domain> ::= <subdomain> | " " + +<subdomain> ::= <label> | <subdomain> "." <label> + +<label> ::= <letter> [ [ <ldh-str> ] <let-dig> ] + +<ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str> + +<let-dig-hyp> ::= <let-dig> | "-" + +<let-dig> ::= <letter> | <digit> + +<letter> ::= any one of the 52 alphabetic characters A through Z in +upper case and a through z in lower case + +<digit> ::= any one of the ten digits 0 through 9 + +Note that while upper and lower case letters are allowed in domain +names, no significance is attached to the case. That is, two names with +the same spelling but different case are to be treated as if identical. + +The labels must follow the rules for ARPANET host names. They must +start with a letter, end with a letter or digit, and have as interior +characters only letters, digits, and hyphen. There are also some +restrictions on the length. Labels must be 63 characters or less. + +For example, the following strings identify hosts in the Internet: + +A.ISI.EDU XX.LCS.MIT.EDU SRI-NIC.ARPA + +2.3.2. Data Transmission Order + +The order of transmission of the header and data described in this +document is resolved to the octet level. Whenever a diagram shows a + + + +Mockapetris [Page 8] + +RFC 1035 Domain Implementation and Specification November 1987 + + +group of octets, the order of transmission of those octets is the normal +order in which they are read in English. For example, in the following +diagram, the octets are transmitted in the order they are numbered. + + 0 1 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 1 | 2 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 3 | 4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 5 | 6 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +Whenever an octet represents a numeric quantity, the left most bit in +the diagram is the high order or most significant bit. That is, the bit +labeled 0 is the most significant bit. For example, the following +diagram represents the value 170 (decimal). + + 0 1 2 3 4 5 6 7 + +-+-+-+-+-+-+-+-+ + |1 0 1 0 1 0 1 0| + +-+-+-+-+-+-+-+-+ + +Similarly, whenever a multi-octet field represents a numeric quantity +the left most bit of the whole field is the most significant bit. When +a multi-octet quantity is transmitted the most significant octet is +transmitted first. + +2.3.3. Character Case + +For all parts of the DNS that are part of the official protocol, all +comparisons between character strings (e.g., labels, domain names, etc.) +are done in a case-insensitive manner. At present, this rule is in +force throughout the domain system without exception. However, future +additions beyond current usage may need to use the full binary octet +capabilities in names, so attempts to store domain names in 7-bit ASCII +or use of special bytes to terminate labels, etc., should be avoided. + +When data enters the domain system, its original case should be +preserved whenever possible. In certain circumstances this cannot be +done. For example, if two RRs are stored in a database, one at x.y and +one at X.Y, they are actually stored at the same place in the database, +and hence only one casing would be preserved. The basic rule is that +case can be discarded only when data is used to define structure in a +database, and two names are identical when compared in a case +insensitive manner. + + + + +Mockapetris [Page 9] + +RFC 1035 Domain Implementation and Specification November 1987 + + +Loss of case sensitive data must be minimized. Thus while data for x.y +and X.Y may both be stored under a single location x.y or X.Y, data for +a.x and B.X would never be stored under A.x, A.X, b.x, or b.X. In +general, this preserves the case of the first label of a domain name, +but forces standardization of interior node labels. + +Systems administrators who enter data into the domain database should +take care to represent the data they supply to the domain system in a +case-consistent manner if their system is case-sensitive. The data +distribution system in the domain system will ensure that consistent +representations are preserved. + +2.3.4. Size limits + +Various objects and parameters in the DNS have size limits. They are +listed below. Some could be easily changed, others are more +fundamental. + +labels 63 octets or less + +names 255 octets or less + +TTL positive values of a signed 32 bit number. + +UDP messages 512 octets or less + +3. DOMAIN NAME SPACE AND RR DEFINITIONS + +3.1. Name space definitions + +Domain names in messages are expressed in terms of a sequence of labels. +Each label is represented as a one octet length field followed by that +number of octets. Since every domain name ends with the null label of +the root, a domain name is terminated by a length byte of zero. The +high order two bits of every length octet must be zero, and the +remaining six bits of the length field limit the label to 63 octets or +less. + +To simplify implementations, the total length of a domain name (i.e., +label octets and label length octets) is restricted to 255 octets or +less. + +Although labels can contain any 8 bit values in octets that make up a +label, it is strongly recommended that labels follow the preferred +syntax described elsewhere in this memo, which is compatible with +existing host naming conventions. Name servers and resolvers must +compare labels in a case-insensitive manner (i.e., A=a), assuming ASCII +with zero parity. Non-alphabetic codes must match exactly. + + + +Mockapetris [Page 10] + +RFC 1035 Domain Implementation and Specification November 1987 + + +3.2. RR definitions + +3.2.1. Format + +All RRs have the same top level format shown below: + + 1 1 1 1 1 1 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | | + / / + / NAME / + | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | TYPE | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | CLASS | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | TTL | + | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | RDLENGTH | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--| + / RDATA / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + +where: + +NAME an owner name, i.e., the name of the node to which this + resource record pertains. + +TYPE two octets containing one of the RR TYPE codes. + +CLASS two octets containing one of the RR CLASS codes. + +TTL a 32 bit signed integer that specifies the time interval + that the resource record may be cached before the source + of the information should again be consulted. Zero + values are interpreted to mean that the RR can only be + used for the transaction in progress, and should not be + cached. For example, SOA records are always distributed + with a zero TTL to prohibit caching. Zero values can + also be used for extremely volatile data. + +RDLENGTH an unsigned 16 bit integer that specifies the length in + octets of the RDATA field. + + + +Mockapetris [Page 11] + +RFC 1035 Domain Implementation and Specification November 1987 + + +RDATA a variable length string of octets that describes the + resource. The format of this information varies + according to the TYPE and CLASS of the resource record. + +3.2.2. TYPE values + +TYPE fields are used in resource records. Note that these types are a +subset of QTYPEs. + +TYPE value and meaning + +A 1 a host address + +NS 2 an authoritative name server + +MD 3 a mail destination (Obsolete - use MX) + +MF 4 a mail forwarder (Obsolete - use MX) + +CNAME 5 the canonical name for an alias + +SOA 6 marks the start of a zone of authority + +MB 7 a mailbox domain name (EXPERIMENTAL) + +MG 8 a mail group member (EXPERIMENTAL) + +MR 9 a mail rename domain name (EXPERIMENTAL) + +NULL 10 a null RR (EXPERIMENTAL) + +WKS 11 a well known service description + +PTR 12 a domain name pointer + +HINFO 13 host information + +MINFO 14 mailbox or mail list information + +MX 15 mail exchange + +TXT 16 text strings + +3.2.3. QTYPE values + +QTYPE fields appear in the question part of a query. QTYPES are a +superset of TYPEs, hence all TYPEs are valid QTYPEs. In addition, the +following QTYPEs are defined: + + + +Mockapetris [Page 12] + +RFC 1035 Domain Implementation and Specification November 1987 + + +AXFR 252 A request for a transfer of an entire zone + +MAILB 253 A request for mailbox-related records (MB, MG or MR) + +MAILA 254 A request for mail agent RRs (Obsolete - see MX) + +* 255 A request for all records + +3.2.4. CLASS values + +CLASS fields appear in resource records. The following CLASS mnemonics +and values are defined: + +IN 1 the Internet + +CS 2 the CSNET class (Obsolete - used only for examples in + some obsolete RFCs) + +CH 3 the CHAOS class + +HS 4 Hesiod [Dyer 87] + +3.2.5. QCLASS values + +QCLASS fields appear in the question section of a query. QCLASS values +are a superset of CLASS values; every CLASS is a valid QCLASS. In +addition to CLASS values, the following QCLASSes are defined: + +* 255 any class + +3.3. Standard RRs + +The following RR definitions are expected to occur, at least +potentially, in all classes. In particular, NS, SOA, CNAME, and PTR +will be used in all classes, and have the same format in all classes. +Because their RDATA format is known, all domain names in the RDATA +section of these RRs may be compressed. + +<domain-name> is a domain name represented as a series of labels, and +terminated by a label with zero length. <character-string> is a single +length octet followed by that number of characters. <character-string> +is treated as binary information, and can be up to 256 characters in +length (including the length octet). + + + + + + + + +Mockapetris [Page 13] + +RFC 1035 Domain Implementation and Specification November 1987 + + +3.3.1. CNAME RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / CNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +CNAME A <domain-name> which specifies the canonical or primary + name for the owner. The owner name is an alias. + +CNAME RRs cause no additional section processing, but name servers may +choose to restart the query at the canonical name in certain cases. See +the description of name server logic in [RFC-1034] for details. + +3.3.2. HINFO RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / CPU / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / OS / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +CPU A <character-string> which specifies the CPU type. + +OS A <character-string> which specifies the operating + system type. + +Standard values for CPU and OS can be found in [RFC-1010]. + +HINFO records are used to acquire general information about a host. The +main use is for protocols such as FTP that can use special procedures +when talking between machines or operating systems of the same type. + +3.3.3. MB RDATA format (EXPERIMENTAL) + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / MADNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +MADNAME A <domain-name> which specifies a host which has the + specified mailbox. + + + +Mockapetris [Page 14] + +RFC 1035 Domain Implementation and Specification November 1987 + + +MB records cause additional section processing which looks up an A type +RRs corresponding to MADNAME. + +3.3.4. MD RDATA format (Obsolete) + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / MADNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +MADNAME A <domain-name> which specifies a host which has a mail + agent for the domain which should be able to deliver + mail for the domain. + +MD records cause additional section processing which looks up an A type +record corresponding to MADNAME. + +MD is obsolete. See the definition of MX and [RFC-974] for details of +the new scheme. The recommended policy for dealing with MD RRs found in +a master file is to reject them, or to convert them to MX RRs with a +preference of 0. + +3.3.5. MF RDATA format (Obsolete) + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / MADNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +MADNAME A <domain-name> which specifies a host which has a mail + agent for the domain which will accept mail for + forwarding to the domain. + +MF records cause additional section processing which looks up an A type +record corresponding to MADNAME. + +MF is obsolete. See the definition of MX and [RFC-974] for details ofw +the new scheme. The recommended policy for dealing with MD RRs found in +a master file is to reject them, or to convert them to MX RRs with a +preference of 10. + + + + + + + +Mockapetris [Page 15] + +RFC 1035 Domain Implementation and Specification November 1987 + + +3.3.6. MG RDATA format (EXPERIMENTAL) + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / MGMNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +MGMNAME A <domain-name> which specifies a mailbox which is a + member of the mail group specified by the domain name. + +MG records cause no additional section processing. + +3.3.7. MINFO RDATA format (EXPERIMENTAL) + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / RMAILBX / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / EMAILBX / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +RMAILBX A <domain-name> which specifies a mailbox which is + responsible for the mailing list or mailbox. If this + domain name names the root, the owner of the MINFO RR is + responsible for itself. Note that many existing mailing + lists use a mailbox X-request for the RMAILBX field of + mailing list X, e.g., Msgroup-request for Msgroup. This + field provides a more general mechanism. + + +EMAILBX A <domain-name> which specifies a mailbox which is to + receive error messages related to the mailing list or + mailbox specified by the owner of the MINFO RR (similar + to the ERRORS-TO: field which has been proposed). If + this domain name names the root, errors should be + returned to the sender of the message. + +MINFO records cause no additional section processing. Although these +records can be associated with a simple mailbox, they are usually used +with a mailing list. + + + + + + + + +Mockapetris [Page 16] + +RFC 1035 Domain Implementation and Specification November 1987 + + +3.3.8. MR RDATA format (EXPERIMENTAL) + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / NEWNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +NEWNAME A <domain-name> which specifies a mailbox which is the + proper rename of the specified mailbox. + +MR records cause no additional section processing. The main use for MR +is as a forwarding entry for a user who has moved to a different +mailbox. + +3.3.9. MX RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | PREFERENCE | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / EXCHANGE / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +PREFERENCE A 16 bit integer which specifies the preference given to + this RR among others at the same owner. Lower values + are preferred. + +EXCHANGE A <domain-name> which specifies a host willing to act as + a mail exchange for the owner name. + +MX records cause type A additional section processing for the host +specified by EXCHANGE. The use of MX RRs is explained in detail in +[RFC-974]. + +3.3.10. NULL RDATA format (EXPERIMENTAL) + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / <anything> / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +Anything at all may be in the RDATA field so long as it is 65535 octets +or less. + + + + +Mockapetris [Page 17] + +RFC 1035 Domain Implementation and Specification November 1987 + + +NULL records cause no additional section processing. NULL RRs are not +allowed in master files. NULLs are used as placeholders in some +experimental extensions of the DNS. + +3.3.11. NS RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / NSDNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +NSDNAME A <domain-name> which specifies a host which should be + authoritative for the specified class and domain. + +NS records cause both the usual additional section processing to locate +a type A record, and, when used in a referral, a special search of the +zone in which they reside for glue information. + +The NS RR states that the named host should be expected to have a zone +starting at owner name of the specified class. Note that the class may +not indicate the protocol family which should be used to communicate +with the host, although it is typically a strong hint. For example, +hosts which are name servers for either Internet (IN) or Hesiod (HS) +class information are normally queried using IN class protocols. + +3.3.12. PTR RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / PTRDNAME / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +PTRDNAME A <domain-name> which points to some location in the + domain name space. + +PTR records cause no additional section processing. These RRs are used +in special domains to point to some other location in the domain space. +These records are simple data, and don't imply any special processing +similar to that performed by CNAME, which identifies aliases. See the +description of the IN-ADDR.ARPA domain for an example. + + + + + + + + +Mockapetris [Page 18] + +RFC 1035 Domain Implementation and Specification November 1987 + + +3.3.13. SOA RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / MNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / RNAME / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | SERIAL | + | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | REFRESH | + | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | RETRY | + | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | EXPIRE | + | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | MINIMUM | + | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +MNAME The <domain-name> of the name server that was the + original or primary source of data for this zone. + +RNAME A <domain-name> which specifies the mailbox of the + person responsible for this zone. + +SERIAL The unsigned 32 bit version number of the original copy + of the zone. Zone transfers preserve this value. This + value wraps and should be compared using sequence space + arithmetic. + +REFRESH A 32 bit time interval before the zone should be + refreshed. + +RETRY A 32 bit time interval that should elapse before a + failed refresh should be retried. + +EXPIRE A 32 bit time value that specifies the upper limit on + the time interval that can elapse before the zone is no + longer authoritative. + + + + + +Mockapetris [Page 19] + +RFC 1035 Domain Implementation and Specification November 1987 + + +MINIMUM The unsigned 32 bit minimum TTL field that should be + exported with any RR from this zone. + +SOA records cause no additional section processing. + +All times are in units of seconds. + +Most of these fields are pertinent only for name server maintenance +operations. However, MINIMUM is used in all query operations that +retrieve RRs from a zone. Whenever a RR is sent in a response to a +query, the TTL field is set to the maximum of the TTL field from the RR +and the MINIMUM field in the appropriate SOA. Thus MINIMUM is a lower +bound on the TTL field for all RRs in a zone. Note that this use of +MINIMUM should occur when the RRs are copied into the response and not +when the zone is loaded from a master file or via a zone transfer. The +reason for this provison is to allow future dynamic update facilities to +change the SOA RR with known semantics. + + +3.3.14. TXT RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + / TXT-DATA / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +TXT-DATA One or more <character-string>s. + +TXT RRs are used to hold descriptive text. The semantics of the text +depends on the domain where it is found. + +3.4. Internet specific RRs + +3.4.1. A RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | ADDRESS | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +ADDRESS A 32 bit Internet address. + +Hosts that have multiple Internet addresses will have multiple A +records. + + + + + +Mockapetris [Page 20] + +RFC 1035 Domain Implementation and Specification November 1987 + + +A records cause no additional section processing. The RDATA section of +an A line in a master file is an Internet address expressed as four +decimal numbers separated by dots without any imbedded spaces (e.g., +"10.2.0.52" or "192.0.5.6"). + +3.4.2. WKS RDATA format + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | ADDRESS | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | PROTOCOL | | + +--+--+--+--+--+--+--+--+ | + | | + / <BIT MAP> / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +ADDRESS An 32 bit Internet address + +PROTOCOL An 8 bit IP protocol number + +<BIT MAP> A variable length bit map. The bit map must be a + multiple of 8 bits long. + +The WKS record is used to describe the well known services supported by +a particular protocol on a particular internet address. The PROTOCOL +field specifies an IP protocol number, and the bit map has one bit per +port of the specified protocol. The first bit corresponds to port 0, +the second to port 1, etc. If the bit map does not include a bit for a +protocol of interest, that bit is assumed zero. The appropriate values +and mnemonics for ports and protocols are specified in [RFC-1010]. + +For example, if PROTOCOL=TCP (6), the 26th bit corresponds to TCP port +25 (SMTP). If this bit is set, a SMTP server should be listening on TCP +port 25; if zero, SMTP service is not supported on the specified +address. + +The purpose of WKS RRs is to provide availability information for +servers for TCP and UDP. If a server supports both TCP and UDP, or has +multiple Internet addresses, then multiple WKS RRs are used. + +WKS RRs cause no additional section processing. + +In master files, both ports and protocols are expressed using mnemonics +or decimal numbers. + + + + +Mockapetris [Page 21] + +RFC 1035 Domain Implementation and Specification November 1987 + + +3.5. IN-ADDR.ARPA domain + +The Internet uses a special domain to support gateway location and +Internet address to host mapping. Other classes may employ a similar +strategy in other domains. The intent of this domain is to provide a +guaranteed method to perform host address to host name mapping, and to +facilitate queries to locate all gateways on a particular network in the +Internet. + +Note that both of these services are similar to functions that could be +performed by inverse queries; the difference is that this part of the +domain name space is structured according to address, and hence can +guarantee that the appropriate data can be located without an exhaustive +search of the domain space. + +The domain begins at IN-ADDR.ARPA and has a substructure which follows +the Internet addressing structure. + +Domain names in the IN-ADDR.ARPA domain are defined to have up to four +labels in addition to the IN-ADDR.ARPA suffix. Each label represents +one octet of an Internet address, and is expressed as a character string +for a decimal value in the range 0-255 (with leading zeros omitted +except in the case of a zero octet which is represented by a single +zero). + +Host addresses are represented by domain names that have all four labels +specified. Thus data for Internet address 10.2.0.52 is located at +domain name 52.0.2.10.IN-ADDR.ARPA. The reversal, though awkward to +read, allows zones to be delegated which are exactly one network of +address space. For example, 10.IN-ADDR.ARPA can be a zone containing +data for the ARPANET, while 26.IN-ADDR.ARPA can be a separate zone for +MILNET. Address nodes are used to hold pointers to primary host names +in the normal domain space. + +Network numbers correspond to some non-terminal nodes at various depths +in the IN-ADDR.ARPA domain, since Internet network numbers are either 1, +2, or 3 octets. Network nodes are used to hold pointers to the primary +host names of gateways attached to that network. Since a gateway is, by +definition, on more than one network, it will typically have two or more +network nodes which point at it. Gateways will also have host level +pointers at their fully qualified addresses. + +Both the gateway pointers at network nodes and the normal host pointers +at full address nodes use the PTR RR to point back to the primary domain +names of the corresponding hosts. + +For example, the IN-ADDR.ARPA domain will contain information about the +ISI gateway between net 10 and 26, an MIT gateway from net 10 to MIT's + + + +Mockapetris [Page 22] + +RFC 1035 Domain Implementation and Specification November 1987 + + +net 18, and hosts A.ISI.EDU and MULTICS.MIT.EDU. Assuming that ISI +gateway has addresses 10.2.0.22 and 26.0.0.103, and a name MILNET- +GW.ISI.EDU, and the MIT gateway has addresses 10.0.0.77 and 18.10.0.4 +and a name GW.LCS.MIT.EDU, the domain database would contain: + + 10.IN-ADDR.ARPA. PTR MILNET-GW.ISI.EDU. + 10.IN-ADDR.ARPA. PTR GW.LCS.MIT.EDU. + 18.IN-ADDR.ARPA. PTR GW.LCS.MIT.EDU. + 26.IN-ADDR.ARPA. PTR MILNET-GW.ISI.EDU. + 22.0.2.10.IN-ADDR.ARPA. PTR MILNET-GW.ISI.EDU. + 103.0.0.26.IN-ADDR.ARPA. PTR MILNET-GW.ISI.EDU. + 77.0.0.10.IN-ADDR.ARPA. PTR GW.LCS.MIT.EDU. + 4.0.10.18.IN-ADDR.ARPA. PTR GW.LCS.MIT.EDU. + 103.0.3.26.IN-ADDR.ARPA. PTR A.ISI.EDU. + 6.0.0.10.IN-ADDR.ARPA. PTR MULTICS.MIT.EDU. + +Thus a program which wanted to locate gateways on net 10 would originate +a query of the form QTYPE=PTR, QCLASS=IN, QNAME=10.IN-ADDR.ARPA. It +would receive two RRs in response: + + 10.IN-ADDR.ARPA. PTR MILNET-GW.ISI.EDU. + 10.IN-ADDR.ARPA. PTR GW.LCS.MIT.EDU. + +The program could then originate QTYPE=A, QCLASS=IN queries for MILNET- +GW.ISI.EDU. and GW.LCS.MIT.EDU. to discover the Internet addresses of +these gateways. + +A resolver which wanted to find the host name corresponding to Internet +host address 10.0.0.6 would pursue a query of the form QTYPE=PTR, +QCLASS=IN, QNAME=6.0.0.10.IN-ADDR.ARPA, and would receive: + + 6.0.0.10.IN-ADDR.ARPA. PTR MULTICS.MIT.EDU. + +Several cautions apply to the use of these services: + - Since the IN-ADDR.ARPA special domain and the normal domain + for a particular host or gateway will be in different zones, + the possibility exists that that the data may be inconsistent. + + - Gateways will often have two names in separate domains, only + one of which can be primary. + + - Systems that use the domain database to initialize their + routing tables must start with enough gateway information to + guarantee that they can access the appropriate name server. + + - The gateway data only reflects the existence of a gateway in a + manner equivalent to the current HOSTS.TXT file. It doesn't + replace the dynamic availability information from GGP or EGP. + + + +Mockapetris [Page 23] + +RFC 1035 Domain Implementation and Specification November 1987 + + +3.6. Defining new types, classes, and special namespaces + +The previously defined types and classes are the ones in use as of the +date of this memo. New definitions should be expected. This section +makes some recommendations to designers considering additions to the +existing facilities. The mailing list NAMEDROPPERS@SRI-NIC.ARPA is the +forum where general discussion of design issues takes place. + +In general, a new type is appropriate when new information is to be +added to the database about an existing object, or we need new data +formats for some totally new object. Designers should attempt to define +types and their RDATA formats that are generally applicable to all +classes, and which avoid duplication of information. New classes are +appropriate when the DNS is to be used for a new protocol, etc which +requires new class-specific data formats, or when a copy of the existing +name space is desired, but a separate management domain is necessary. + +New types and classes need mnemonics for master files; the format of the +master files requires that the mnemonics for type and class be disjoint. + +TYPE and CLASS values must be a proper subset of QTYPEs and QCLASSes +respectively. + +The present system uses multiple RRs to represent multiple values of a +type rather than storing multiple values in the RDATA section of a +single RR. This is less efficient for most applications, but does keep +RRs shorter. The multiple RRs assumption is incorporated in some +experimental work on dynamic update methods. + +The present system attempts to minimize the duplication of data in the +database in order to insure consistency. Thus, in order to find the +address of the host for a mail exchange, you map the mail domain name to +a host name, then the host name to addresses, rather than a direct +mapping to host address. This approach is preferred because it avoids +the opportunity for inconsistency. + +In defining a new type of data, multiple RR types should not be used to +create an ordering between entries or express different formats for +equivalent bindings, instead this information should be carried in the +body of the RR and a single type used. This policy avoids problems with +caching multiple types and defining QTYPEs to match multiple types. + +For example, the original form of mail exchange binding used two RR +types one to represent a "closer" exchange (MD) and one to represent a +"less close" exchange (MF). The difficulty is that the presence of one +RR type in a cache doesn't convey any information about the other +because the query which acquired the cached information might have used +a QTYPE of MF, MD, or MAILA (which matched both). The redesigned + + + +Mockapetris [Page 24] + +RFC 1035 Domain Implementation and Specification November 1987 + + +service used a single type (MX) with a "preference" value in the RDATA +section which can order different RRs. However, if any MX RRs are found +in the cache, then all should be there. + +4. MESSAGES + +4.1. Format + +All communications inside of the domain protocol are carried in a single +format called a message. The top level format of message is divided +into 5 sections (some of which are empty in certain cases) shown below: + + +---------------------+ + | Header | + +---------------------+ + | Question | the question for the name server + +---------------------+ + | Answer | RRs answering the question + +---------------------+ + | Authority | RRs pointing toward an authority + +---------------------+ + | Additional | RRs holding additional information + +---------------------+ + +The header section is always present. The header includes fields that +specify which of the remaining sections are present, and also specify +whether the message is a query or a response, a standard query or some +other opcode, etc. + +The names of the sections after the header are derived from their use in +standard queries. The question section contains fields that describe a +question to a name server. These fields are a query type (QTYPE), a +query class (QCLASS), and a query domain name (QNAME). The last three +sections have the same format: a possibly empty list of concatenated +resource records (RRs). The answer section contains RRs that answer the +question; the authority section contains RRs that point toward an +authoritative name server; the additional records section contains RRs +which relate to the query, but are not strictly answers for the +question. + + + + + + + + + + + + +Mockapetris [Page 25] + +RFC 1035 Domain Implementation and Specification November 1987 + + +4.1.1. Header section format + +The header contains the following fields: + + 1 1 1 1 1 1 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | ID | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + |QR| Opcode |AA|TC|RD|RA| Z | RCODE | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | QDCOUNT | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | ANCOUNT | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | NSCOUNT | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | ARCOUNT | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +ID A 16 bit identifier assigned by the program that + generates any kind of query. This identifier is copied + the corresponding reply and can be used by the requester + to match up replies to outstanding queries. + +QR A one bit field that specifies whether this message is a + query (0), or a response (1). + +OPCODE A four bit field that specifies kind of query in this + message. This value is set by the originator of a query + and copied into the response. The values are: + + 0 a standard query (QUERY) + + 1 an inverse query (IQUERY) + + 2 a server status request (STATUS) + + 3-15 reserved for future use + +AA Authoritative Answer - this bit is valid in responses, + and specifies that the responding name server is an + authority for the domain name in question section. + + Note that the contents of the answer section may have + multiple owner names because of aliases. The AA bit + + + +Mockapetris [Page 26] + +RFC 1035 Domain Implementation and Specification November 1987 + + + corresponds to the name which matches the query name, or + the first owner name in the answer section. + +TC TrunCation - specifies that this message was truncated + due to length greater than that permitted on the + transmission channel. + +RD Recursion Desired - this bit may be set in a query and + is copied into the response. If RD is set, it directs + the name server to pursue the query recursively. + Recursive query support is optional. + +RA Recursion Available - this be is set or cleared in a + response, and denotes whether recursive query support is + available in the name server. + +Z Reserved for future use. Must be zero in all queries + and responses. + +RCODE Response code - this 4 bit field is set as part of + responses. The values have the following + interpretation: + + 0 No error condition + + 1 Format error - The name server was + unable to interpret the query. + + 2 Server failure - The name server was + unable to process this query due to a + problem with the name server. + + 3 Name Error - Meaningful only for + responses from an authoritative name + server, this code signifies that the + domain name referenced in the query does + not exist. + + 4 Not Implemented - The name server does + not support the requested kind of query. + + 5 Refused - The name server refuses to + perform the specified operation for + policy reasons. For example, a name + server may not wish to provide the + information to the particular requester, + or a name server may not wish to perform + a particular operation (e.g., zone + + + +Mockapetris [Page 27] + +RFC 1035 Domain Implementation and Specification November 1987 + + + transfer) for particular data. + + 6-15 Reserved for future use. + +QDCOUNT an unsigned 16 bit integer specifying the number of + entries in the question section. + +ANCOUNT an unsigned 16 bit integer specifying the number of + resource records in the answer section. + +NSCOUNT an unsigned 16 bit integer specifying the number of name + server resource records in the authority records + section. + +ARCOUNT an unsigned 16 bit integer specifying the number of + resource records in the additional records section. + +4.1.2. Question section format + +The question section is used to carry the "question" in most queries, +i.e., the parameters that define what is being asked. The section +contains QDCOUNT (usually 1) entries, each of the following format: + + 1 1 1 1 1 1 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | | + / QNAME / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | QTYPE | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | QCLASS | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +QNAME a domain name represented as a sequence of labels, where + each label consists of a length octet followed by that + number of octets. The domain name terminates with the + zero length octet for the null label of the root. Note + that this field may be an odd number of octets; no + padding is used. + +QTYPE a two octet code which specifies the type of the query. + The values for this field include all codes valid for a + TYPE field, together with some more general codes which + can match more than one type of RR. + + + +Mockapetris [Page 28] + +RFC 1035 Domain Implementation and Specification November 1987 + + +QCLASS a two octet code that specifies the class of the query. + For example, the QCLASS field is IN for the Internet. + +4.1.3. Resource record format + +The answer, authority, and additional sections all share the same +format: a variable number of resource records, where the number of +records is specified in the corresponding count field in the header. +Each resource record has the following format: + 1 1 1 1 1 1 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | | + / / + / NAME / + | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | TYPE | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | CLASS | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | TTL | + | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | RDLENGTH | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--| + / RDATA / + / / + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +where: + +NAME a domain name to which this resource record pertains. + +TYPE two octets containing one of the RR type codes. This + field specifies the meaning of the data in the RDATA + field. + +CLASS two octets which specify the class of the data in the + RDATA field. + +TTL a 32 bit unsigned integer that specifies the time + interval (in seconds) that the resource record may be + cached before it should be discarded. Zero values are + interpreted to mean that the RR can only be used for the + transaction in progress, and should not be cached. + + + + + +Mockapetris [Page 29] + +RFC 1035 Domain Implementation and Specification November 1987 + + +RDLENGTH an unsigned 16 bit integer that specifies the length in + octets of the RDATA field. + +RDATA a variable length string of octets that describes the + resource. The format of this information varies + according to the TYPE and CLASS of the resource record. + For example, the if the TYPE is A and the CLASS is IN, + the RDATA field is a 4 octet ARPA Internet address. + +4.1.4. Message compression + +In order to reduce the size of messages, the domain system utilizes a +compression scheme which eliminates the repetition of domain names in a +message. In this scheme, an entire domain name or a list of labels at +the end of a domain name is replaced with a pointer to a prior occurance +of the same name. + +The pointer takes the form of a two octet sequence: + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | 1 1| OFFSET | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +The first two bits are ones. This allows a pointer to be distinguished +from a label, since the label must begin with two zero bits because +labels are restricted to 63 octets or less. (The 10 and 01 combinations +are reserved for future use.) The OFFSET field specifies an offset from +the start of the message (i.e., the first octet of the ID field in the +domain header). A zero offset specifies the first byte of the ID field, +etc. + +The compression scheme allows a domain name in a message to be +represented as either: + + - a sequence of labels ending in a zero octet + + - a pointer + + - a sequence of labels ending with a pointer + +Pointers can only be used for occurances of a domain name where the +format is not class specific. If this were not the case, a name server +or resolver would be required to know the format of all RRs it handled. +As yet, there are no such cases, but they may occur in future RDATA +formats. + +If a domain name is contained in a part of the message subject to a +length field (such as the RDATA section of an RR), and compression is + + + +Mockapetris [Page 30] + +RFC 1035 Domain Implementation and Specification November 1987 + + +used, the length of the compressed name is used in the length +calculation, rather than the length of the expanded name. + +Programs are free to avoid using pointers in messages they generate, +although this will reduce datagram capacity, and may cause truncation. +However all programs are required to understand arriving messages that +contain pointers. + +For example, a datagram might need to use the domain names F.ISI.ARPA, +FOO.F.ISI.ARPA, ARPA, and the root. Ignoring the other fields of the +message, these domain names might be represented as: + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 20 | 1 | F | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 22 | 3 | I | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 24 | S | I | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 26 | 4 | A | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 28 | R | P | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 30 | A | 0 | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 40 | 3 | F | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 42 | O | O | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 44 | 1 1| 20 | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 64 | 1 1| 26 | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + 92 | 0 | | + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + +The domain name for F.ISI.ARPA is shown at offset 20. The domain name +FOO.F.ISI.ARPA is shown at offset 40; this definition uses a pointer to +concatenate a label for FOO to the previously defined F.ISI.ARPA. The +domain name ARPA is defined at offset 64 using a pointer to the ARPA +component of the name F.ISI.ARPA at 20; note that this pointer relies on +ARPA being the last label in the string at 20. The root domain name is + + + +Mockapetris [Page 31] + +RFC 1035 Domain Implementation and Specification November 1987 + + +defined by a single octet of zeros at 92; the root domain name has no +labels. + +4.2. Transport + +The DNS assumes that messages will be transmitted as datagrams or in a +byte stream carried by a virtual circuit. While virtual circuits can be +used for any DNS activity, datagrams are preferred for queries due to +their lower overhead and better performance. Zone refresh activities +must use virtual circuits because of the need for reliable transfer. + +The Internet supports name server access using TCP [RFC-793] on server +port 53 (decimal) as well as datagram access using UDP [RFC-768] on UDP +port 53 (decimal). + +4.2.1. UDP usage + +Messages sent using UDP user server port 53 (decimal). + +Messages carried by UDP are restricted to 512 bytes (not counting the IP +or UDP headers). Longer messages are truncated and the TC bit is set in +the header. + +UDP is not acceptable for zone transfers, but is the recommended method +for standard queries in the Internet. Queries sent using UDP may be +lost, and hence a retransmission strategy is required. Queries or their +responses may be reordered by the network, or by processing in name +servers, so resolvers should not depend on them being returned in order. + +The optimal UDP retransmission policy will vary with performance of the +Internet and the needs of the client, but the following are recommended: + + - The client should try other servers and server addresses + before repeating a query to a specific address of a server. + + - The retransmission interval should be based on prior + statistics if possible. Too aggressive retransmission can + easily slow responses for the community at large. Depending + on how well connected the client is to its expected servers, + the minimum retransmission interval should be 2-5 seconds. + +More suggestions on server selection and retransmission policy can be +found in the resolver section of this memo. + +4.2.2. TCP usage + +Messages sent over TCP connections use server port 53 (decimal). The +message is prefixed with a two byte length field which gives the message + + + +Mockapetris [Page 32] + +RFC 1035 Domain Implementation and Specification November 1987 + + +length, excluding the two byte length field. This length field allows +the low-level processing to assemble a complete message before beginning +to parse it. + +Several connection management policies are recommended: + + - The server should not block other activities waiting for TCP + data. + + - The server should support multiple connections. + + - The server should assume that the client will initiate + connection closing, and should delay closing its end of the + connection until all outstanding client requests have been + satisfied. + + - If the server needs to close a dormant connection to reclaim + resources, it should wait until the connection has been idle + for a period on the order of two minutes. In particular, the + server should allow the SOA and AXFR request sequence (which + begins a refresh operation) to be made on a single connection. + Since the server would be unable to answer queries anyway, a + unilateral close or reset may be used instead of a graceful + close. + +5. MASTER FILES + +Master files are text files that contain RRs in text form. Since the +contents of a zone can be expressed in the form of a list of RRs a +master file is most often used to define a zone, though it can be used +to list a cache's contents. Hence, this section first discusses the +format of RRs in a master file, and then the special considerations when +a master file is used to create a zone in some name server. + +5.1. Format + +The format of these files is a sequence of entries. Entries are +predominantly line-oriented, though parentheses can be used to continue +a list of items across a line boundary, and text literals can contain +CRLF within the text. Any combination of tabs and spaces act as a +delimiter between the separate items that make up an entry. The end of +any line in the master file can end with a comment. The comment starts +with a ";" (semicolon). + +The following entries are defined: + + <blank>[<comment>] + + + + +Mockapetris [Page 33] + +RFC 1035 Domain Implementation and Specification November 1987 + + + $ORIGIN <domain-name> [<comment>] + + $INCLUDE <file-name> [<domain-name>] [<comment>] + + <domain-name><rr> [<comment>] + + <blank><rr> [<comment>] + +Blank lines, with or without comments, are allowed anywhere in the file. + +Two control entries are defined: $ORIGIN and $INCLUDE. $ORIGIN is +followed by a domain name, and resets the current origin for relative +domain names to the stated name. $INCLUDE inserts the named file into +the current file, and may optionally specify a domain name that sets the +relative domain name origin for the included file. $INCLUDE may also +have a comment. Note that a $INCLUDE entry never changes the relative +origin of the parent file, regardless of changes to the relative origin +made within the included file. + +The last two forms represent RRs. If an entry for an RR begins with a +blank, then the RR is assumed to be owned by the last stated owner. If +an RR entry begins with a <domain-name>, then the owner name is reset. + +<rr> contents take one of the following forms: + + [<TTL>] [<class>] <type> <RDATA> + + [<class>] [<TTL>] <type> <RDATA> + +The RR begins with optional TTL and class fields, followed by a type and +RDATA field appropriate to the type and class. Class and type use the +standard mnemonics, TTL is a decimal integer. Omitted class and TTL +values are default to the last explicitly stated values. Since type and +class mnemonics are disjoint, the parse is unique. (Note that this +order is different from the order used in examples and the order used in +the actual RRs; the given order allows easier parsing and defaulting.) + +<domain-name>s make up a large share of the data in the master file. +The labels in the domain name are expressed as character strings and +separated by dots. Quoting conventions allow arbitrary characters to be +stored in domain names. Domain names that end in a dot are called +absolute, and are taken as complete. Domain names which do not end in a +dot are called relative; the actual domain name is the concatenation of +the relative part with an origin specified in a $ORIGIN, $INCLUDE, or as +an argument to the master file loading routine. A relative name is an +error when no origin is available. + + + + + +Mockapetris [Page 34] + +RFC 1035 Domain Implementation and Specification November 1987 + + +<character-string> is expressed in one or two ways: as a contiguous set +of characters without interior spaces, or as a string beginning with a " +and ending with a ". Inside a " delimited string any character can +occur, except for a " itself, which must be quoted using \ (back slash). + +Because these files are text files several special encodings are +necessary to allow arbitrary data to be loaded. In particular: + + of the root. + +@ A free standing @ is used to denote the current origin. + +\X where X is any character other than a digit (0-9), is + used to quote that character so that its special meaning + does not apply. For example, "\." can be used to place + a dot character in a label. + +\DDD where each D is a digit is the octet corresponding to + the decimal number described by DDD. The resulting + octet is assumed to be text and is not checked for + special meaning. + +( ) Parentheses are used to group data that crosses a line + boundary. In effect, line terminations are not + recognized within parentheses. + +; Semicolon is used to start a comment; the remainder of + the line is ignored. + +5.2. Use of master files to define zones + +When a master file is used to load a zone, the operation should be +suppressed if any errors are encountered in the master file. The +rationale for this is that a single error can have widespread +consequences. For example, suppose that the RRs defining a delegation +have syntax errors; then the server will return authoritative name +errors for all names in the subzone (except in the case where the +subzone is also present on the server). + +Several other validity checks that should be performed in addition to +insuring that the file is syntactically correct: + + 1. All RRs in the file should have the same class. + + 2. Exactly one SOA RR should be present at the top of the zone. + + 3. If delegations are present and glue information is required, + it should be present. + + + +Mockapetris [Page 35] + +RFC 1035 Domain Implementation and Specification November 1987 + + + 4. Information present outside of the authoritative nodes in the + zone should be glue information, rather than the result of an + origin or similar error. + +5.3. Master file example + +The following is an example file which might be used to define the +ISI.EDU zone.and is loaded with an origin of ISI.EDU: + +@ IN SOA VENERA Action\.domains ( + 20 ; SERIAL + 7200 ; REFRESH + 600 ; RETRY + 3600000; EXPIRE + 60) ; MINIMUM + + NS A.ISI.EDU. + NS VENERA + NS VAXA + MX 10 VENERA + MX 20 VAXA + +A A 26.3.0.103 + +VENERA A 10.1.0.52 + A 128.9.0.32 + +VAXA A 10.2.0.27 + A 128.9.0.33 + + +$INCLUDE <SUBSYS>ISI-MAILBOXES.TXT + +Where the file <SUBSYS>ISI-MAILBOXES.TXT is: + + MOE MB A.ISI.EDU. + LARRY MB A.ISI.EDU. + CURLEY MB A.ISI.EDU. + STOOGES MG MOE + MG LARRY + MG CURLEY + +Note the use of the \ character in the SOA RR to specify the responsible +person mailbox "Action.domains@E.ISI.EDU". + + + + + + + +Mockapetris [Page 36] + +RFC 1035 Domain Implementation and Specification November 1987 + + +6. NAME SERVER IMPLEMENTATION + +6.1. Architecture + +The optimal structure for the name server will depend on the host +operating system and whether the name server is integrated with resolver +operations, either by supporting recursive service, or by sharing its +database with a resolver. This section discusses implementation +considerations for a name server which shares a database with a +resolver, but most of these concerns are present in any name server. + +6.1.1. Control + +A name server must employ multiple concurrent activities, whether they +are implemented as separate tasks in the host's OS or multiplexing +inside a single name server program. It is simply not acceptable for a +name server to block the service of UDP requests while it waits for TCP +data for refreshing or query activities. Similarly, a name server +should not attempt to provide recursive service without processing such +requests in parallel, though it may choose to serialize requests from a +single client, or to regard identical requests from the same client as +duplicates. A name server should not substantially delay requests while +it reloads a zone from master files or while it incorporates a newly +refreshed zone into its database. + +6.1.2. Database + +While name server implementations are free to use any internal data +structures they choose, the suggested structure consists of three major +parts: + + - A "catalog" data structure which lists the zones available to + this server, and a "pointer" to the zone data structure. The + main purpose of this structure is to find the nearest ancestor + zone, if any, for arriving standard queries. + + - Separate data structures for each of the zones held by the + name server. + + - A data structure for cached data. (or perhaps separate caches + for different classes) + +All of these data structures can be implemented an identical tree +structure format, with different data chained off the nodes in different +parts: in the catalog the data is pointers to zones, while in the zone +and cache data structures, the data will be RRs. In designing the tree +framework the designer should recognize that query processing will need +to traverse the tree using case-insensitive label comparisons; and that + + + +Mockapetris [Page 37] + +RFC 1035 Domain Implementation and Specification November 1987 + + +in real data, a few nodes have a very high branching factor (100-1000 or +more), but the vast majority have a very low branching factor (0-1). + +One way to solve the case problem is to store the labels for each node +in two pieces: a standardized-case representation of the label where all +ASCII characters are in a single case, together with a bit mask that +denotes which characters are actually of a different case. The +branching factor diversity can be handled using a simple linked list for +a node until the branching factor exceeds some threshold, and +transitioning to a hash structure after the threshold is exceeded. In +any case, hash structures used to store tree sections must insure that +hash functions and procedures preserve the casing conventions of the +DNS. + +The use of separate structures for the different parts of the database +is motivated by several factors: + + - The catalog structure can be an almost static structure that + need change only when the system administrator changes the + zones supported by the server. This structure can also be + used to store parameters used to control refreshing + activities. + + - The individual data structures for zones allow a zone to be + replaced simply by changing a pointer in the catalog. Zone + refresh operations can build a new structure and, when + complete, splice it into the database via a simple pointer + replacement. It is very important that when a zone is + refreshed, queries should not use old and new data + simultaneously. + + - With the proper search procedures, authoritative data in zones + will always "hide", and hence take precedence over, cached + data. + + - Errors in zone definitions that cause overlapping zones, etc., + may cause erroneous responses to queries, but problem + determination is simplified, and the contents of one "bad" + zone can't corrupt another. + + - Since the cache is most frequently updated, it is most + vulnerable to corruption during system restarts. It can also + become full of expired RR data. In either case, it can easily + be discarded without disturbing zone data. + +A major aspect of database design is selecting a structure which allows +the name server to deal with crashes of the name server's host. State +information which a name server should save across system crashes + + + +Mockapetris [Page 38] + +RFC 1035 Domain Implementation and Specification November 1987 + + +includes the catalog structure (including the state of refreshing for +each zone) and the zone data itself. + +6.1.3. Time + +Both the TTL data for RRs and the timing data for refreshing activities +depends on 32 bit timers in units of seconds. Inside the database, +refresh timers and TTLs for cached data conceptually "count down", while +data in the zone stays with constant TTLs. + +A recommended implementation strategy is to store time in two ways: as +a relative increment and as an absolute time. One way to do this is to +use positive 32 bit numbers for one type and negative numbers for the +other. The RRs in zones use relative times; the refresh timers and +cache data use absolute times. Absolute numbers are taken with respect +to some known origin and converted to relative values when placed in the +response to a query. When an absolute TTL is negative after conversion +to relative, then the data is expired and should be ignored. + +6.2. Standard query processing + +The major algorithm for standard query processing is presented in +[RFC-1034]. + +When processing queries with QCLASS=*, or some other QCLASS which +matches multiple classes, the response should never be authoritative +unless the server can guarantee that the response covers all classes. + +When composing a response, RRs which are to be inserted in the +additional section, but duplicate RRs in the answer or authority +sections, may be omitted from the additional section. + +When a response is so long that truncation is required, the truncation +should start at the end of the response and work forward in the +datagram. Thus if there is any data for the authority section, the +answer section is guaranteed to be unique. + +The MINIMUM value in the SOA should be used to set a floor on the TTL of +data distributed from a zone. This floor function should be done when +the data is copied into a response. This will allow future dynamic +update protocols to change the SOA MINIMUM field without ambiguous +semantics. + +6.3. Zone refresh and reload processing + +In spite of a server's best efforts, it may be unable to load zone data +from a master file due to syntax errors, etc., or be unable to refresh a +zone within the its expiration parameter. In this case, the name server + + + +Mockapetris [Page 39] + +RFC 1035 Domain Implementation and Specification November 1987 + + +should answer queries as if it were not supposed to possess the zone. + +If a master is sending a zone out via AXFR, and a new version is created +during the transfer, the master should continue to send the old version +if possible. In any case, it should never send part of one version and +part of another. If completion is not possible, the master should reset +the connection on which the zone transfer is taking place. + +6.4. Inverse queries (Optional) + +Inverse queries are an optional part of the DNS. Name servers are not +required to support any form of inverse queries. If a name server +receives an inverse query that it does not support, it returns an error +response with the "Not Implemented" error set in the header. While +inverse query support is optional, all name servers must be at least +able to return the error response. + +6.4.1. The contents of inverse queries and responses Inverse +queries reverse the mappings performed by standard query operations; +while a standard query maps a domain name to a resource, an inverse +query maps a resource to a domain name. For example, a standard query +might bind a domain name to a host address; the corresponding inverse +query binds the host address to a domain name. + +Inverse queries take the form of a single RR in the answer section of +the message, with an empty question section. The owner name of the +query RR and its TTL are not significant. The response carries +questions in the question section which identify all names possessing +the query RR WHICH THE NAME SERVER KNOWS. Since no name server knows +about all of the domain name space, the response can never be assumed to +be complete. Thus inverse queries are primarily useful for database +management and debugging activities. Inverse queries are NOT an +acceptable method of mapping host addresses to host names; use the IN- +ADDR.ARPA domain instead. + +Where possible, name servers should provide case-insensitive comparisons +for inverse queries. Thus an inverse query asking for an MX RR of +"Venera.isi.edu" should get the same response as a query for +"VENERA.ISI.EDU"; an inverse query for HINFO RR "IBM-PC UNIX" should +produce the same result as an inverse query for "IBM-pc unix". However, +this cannot be guaranteed because name servers may possess RRs that +contain character strings but the name server does not know that the +data is character. + +When a name server processes an inverse query, it either returns: + + 1. zero, one, or multiple domain names for the specified + resource as QNAMEs in the question section + + + +Mockapetris [Page 40] + +RFC 1035 Domain Implementation and Specification November 1987 + + + 2. an error code indicating that the name server doesn't support + inverse mapping of the specified resource type. + +When the response to an inverse query contains one or more QNAMEs, the +owner name and TTL of the RR in the answer section which defines the +inverse query is modified to exactly match an RR found at the first +QNAME. + +RRs returned in the inverse queries cannot be cached using the same +mechanism as is used for the replies to standard queries. One reason +for this is that a name might have multiple RRs of the same type, and +only one would appear. For example, an inverse query for a single +address of a multiply homed host might create the impression that only +one address existed. + +6.4.2. Inverse query and response example The overall structure +of an inverse query for retrieving the domain name that corresponds to +Internet address 10.1.0.52 is shown below: + + +-----------------------------------------+ + Header | OPCODE=IQUERY, ID=997 | + +-----------------------------------------+ + Question | <empty> | + +-----------------------------------------+ + Answer | <anyname> A IN 10.1.0.52 | + +-----------------------------------------+ + Authority | <empty> | + +-----------------------------------------+ + Additional | <empty> | + +-----------------------------------------+ + +This query asks for a question whose answer is the Internet style +address 10.1.0.52. Since the owner name is not known, any domain name +can be used as a placeholder (and is ignored). A single octet of zero, +signifying the root, is usually used because it minimizes the length of +the message. The TTL of the RR is not significant. The response to +this query might be: + + + + + + + + + + + + + + +Mockapetris [Page 41] + +RFC 1035 Domain Implementation and Specification November 1987 + + + +-----------------------------------------+ + Header | OPCODE=RESPONSE, ID=997 | + +-----------------------------------------+ + Question |QTYPE=A, QCLASS=IN, QNAME=VENERA.ISI.EDU | + +-----------------------------------------+ + Answer | VENERA.ISI.EDU A IN 10.1.0.52 | + +-----------------------------------------+ + Authority | <empty> | + +-----------------------------------------+ + Additional | <empty> | + +-----------------------------------------+ + +Note that the QTYPE in a response to an inverse query is the same as the +TYPE field in the answer section of the inverse query. Responses to +inverse queries may contain multiple questions when the inverse is not +unique. If the question section in the response is not empty, then the +RR in the answer section is modified to correspond to be an exact copy +of an RR at the first QNAME. + +6.4.3. Inverse query processing + +Name servers that support inverse queries can support these operations +through exhaustive searches of their databases, but this becomes +impractical as the size of the database increases. An alternative +approach is to invert the database according to the search key. + +For name servers that support multiple zones and a large amount of data, +the recommended approach is separate inversions for each zone. When a +particular zone is changed during a refresh, only its inversions need to +be redone. + +Support for transfer of this type of inversion may be included in future +versions of the domain system, but is not supported in this version. + +6.5. Completion queries and responses + +The optional completion services described in RFC-882 and RFC-883 have +been deleted. Redesigned services may become available in the future. + + + + + + + + + + + + + +Mockapetris [Page 42] + +RFC 1035 Domain Implementation and Specification November 1987 + + +7. RESOLVER IMPLEMENTATION + +The top levels of the recommended resolver algorithm are discussed in +[RFC-1034]. This section discusses implementation details assuming the +database structure suggested in the name server implementation section +of this memo. + +7.1. Transforming a user request into a query + +The first step a resolver takes is to transform the client's request, +stated in a format suitable to the local OS, into a search specification +for RRs at a specific name which match a specific QTYPE and QCLASS. +Where possible, the QTYPE and QCLASS should correspond to a single type +and a single class, because this makes the use of cached data much +simpler. The reason for this is that the presence of data of one type +in a cache doesn't confirm the existence or non-existence of data of +other types, hence the only way to be sure is to consult an +authoritative source. If QCLASS=* is used, then authoritative answers +won't be available. + +Since a resolver must be able to multiplex multiple requests if it is to +perform its function efficiently, each pending request is usually +represented in some block of state information. This state block will +typically contain: + + - A timestamp indicating the time the request began. + The timestamp is used to decide whether RRs in the database + can be used or are out of date. This timestamp uses the + absolute time format previously discussed for RR storage in + zones and caches. Note that when an RRs TTL indicates a + relative time, the RR must be timely, since it is part of a + zone. When the RR has an absolute time, it is part of a + cache, and the TTL of the RR is compared against the timestamp + for the start of the request. + + Note that using the timestamp is superior to using a current + time, since it allows RRs with TTLs of zero to be entered in + the cache in the usual manner, but still used by the current + request, even after intervals of many seconds due to system + load, query retransmission timeouts, etc. + + - Some sort of parameters to limit the amount of work which will + be performed for this request. + + The amount of work which a resolver will do in response to a + client request must be limited to guard against errors in the + database, such as circular CNAME references, and operational + problems, such as network partition which prevents the + + + +Mockapetris [Page 43] + +RFC 1035 Domain Implementation and Specification November 1987 + + + resolver from accessing the name servers it needs. While + local limits on the number of times a resolver will retransmit + a particular query to a particular name server address are + essential, the resolver should have a global per-request + counter to limit work on a single request. The counter should + be set to some initial value and decremented whenever the + resolver performs any action (retransmission timeout, + retransmission, etc.) If the counter passes zero, the request + is terminated with a temporary error. + + Note that if the resolver structure allows one request to + start others in parallel, such as when the need to access a + name server for one request causes a parallel resolve for the + name server's addresses, the spawned request should be started + with a lower counter. This prevents circular references in + the database from starting a chain reaction of resolver + activity. + + - The SLIST data structure discussed in [RFC-1034]. + + This structure keeps track of the state of a request if it + must wait for answers from foreign name servers. + +7.2. Sending the queries + +As described in [RFC-1034], the basic task of the resolver is to +formulate a query which will answer the client's request and direct that +query to name servers which can provide the information. The resolver +will usually only have very strong hints about which servers to ask, in +the form of NS RRs, and may have to revise the query, in response to +CNAMEs, or revise the set of name servers the resolver is asking, in +response to delegation responses which point the resolver to name +servers closer to the desired information. In addition to the +information requested by the client, the resolver may have to call upon +its own services to determine the address of name servers it wishes to +contact. + +In any case, the model used in this memo assumes that the resolver is +multiplexing attention between multiple requests, some from the client, +and some internally generated. Each request is represented by some +state information, and the desired behavior is that the resolver +transmit queries to name servers in a way that maximizes the probability +that the request is answered, minimizes the time that the request takes, +and avoids excessive transmissions. The key algorithm uses the state +information of the request to select the next name server address to +query, and also computes a timeout which will cause the next action +should a response not arrive. The next action will usually be a +transmission to some other server, but may be a temporary error to the + + + +Mockapetris [Page 44] + +RFC 1035 Domain Implementation and Specification November 1987 + + +client. + +The resolver always starts with a list of server names to query (SLIST). +This list will be all NS RRs which correspond to the nearest ancestor +zone that the resolver knows about. To avoid startup problems, the +resolver should have a set of default servers which it will ask should +it have no current NS RRs which are appropriate. The resolver then adds +to SLIST all of the known addresses for the name servers, and may start +parallel requests to acquire the addresses of the servers when the +resolver has the name, but no addresses, for the name servers. + +To complete initialization of SLIST, the resolver attaches whatever +history information it has to the each address in SLIST. This will +usually consist of some sort of weighted averages for the response time +of the address, and the batting average of the address (i.e., how often +the address responded at all to the request). Note that this +information should be kept on a per address basis, rather than on a per +name server basis, because the response time and batting average of a +particular server may vary considerably from address to address. Note +also that this information is actually specific to a resolver address / +server address pair, so a resolver with multiple addresses may wish to +keep separate histories for each of its addresses. Part of this step +must deal with addresses which have no such history; in this case an +expected round trip time of 5-10 seconds should be the worst case, with +lower estimates for the same local network, etc. + +Note that whenever a delegation is followed, the resolver algorithm +reinitializes SLIST. + +The information establishes a partial ranking of the available name +server addresses. Each time an address is chosen and the state should +be altered to prevent its selection again until all other addresses have +been tried. The timeout for each transmission should be 50-100% greater +than the average predicted value to allow for variance in response. + +Some fine points: + + - The resolver may encounter a situation where no addresses are + available for any of the name servers named in SLIST, and + where the servers in the list are precisely those which would + normally be used to look up their own addresses. This + situation typically occurs when the glue address RRs have a + smaller TTL than the NS RRs marking delegation, or when the + resolver caches the result of a NS search. The resolver + should detect this condition and restart the search at the + next ancestor zone, or alternatively at the root. + + + + + +Mockapetris [Page 45] + +RFC 1035 Domain Implementation and Specification November 1987 + + + - If a resolver gets a server error or other bizarre response + from a name server, it should remove it from SLIST, and may + wish to schedule an immediate transmission to the next + candidate server address. + +7.3. Processing responses + +The first step in processing arriving response datagrams is to parse the +response. This procedure should include: + + - Check the header for reasonableness. Discard datagrams which + are queries when responses are expected. + + - Parse the sections of the message, and insure that all RRs are + correctly formatted. + + - As an optional step, check the TTLs of arriving data looking + for RRs with excessively long TTLs. If a RR has an + excessively long TTL, say greater than 1 week, either discard + the whole response, or limit all TTLs in the response to 1 + week. + +The next step is to match the response to a current resolver request. +The recommended strategy is to do a preliminary matching using the ID +field in the domain header, and then to verify that the question section +corresponds to the information currently desired. This requires that +the transmission algorithm devote several bits of the domain ID field to +a request identifier of some sort. This step has several fine points: + + - Some name servers send their responses from different + addresses than the one used to receive the query. That is, a + resolver cannot rely that a response will come from the same + address which it sent the corresponding query to. This name + server bug is typically encountered in UNIX systems. + + - If the resolver retransmits a particular request to a name + server it should be able to use a response from any of the + transmissions. However, if it is using the response to sample + the round trip time to access the name server, it must be able + to determine which transmission matches the response (and keep + transmission times for each outgoing message), or only + calculate round trip times based on initial transmissions. + + - A name server will occasionally not have a current copy of a + zone which it should have according to some NS RRs. The + resolver should simply remove the name server from the current + SLIST, and continue. + + + + +Mockapetris [Page 46] + +RFC 1035 Domain Implementation and Specification November 1987 + + +7.4. Using the cache + +In general, we expect a resolver to cache all data which it receives in +responses since it may be useful in answering future client requests. +However, there are several types of data which should not be cached: + + - When several RRs of the same type are available for a + particular owner name, the resolver should either cache them + all or none at all. When a response is truncated, and a + resolver doesn't know whether it has a complete set, it should + not cache a possibly partial set of RRs. + + - Cached data should never be used in preference to + authoritative data, so if caching would cause this to happen + the data should not be cached. + + - The results of an inverse query should not be cached. + + - The results of standard queries where the QNAME contains "*" + labels if the data might be used to construct wildcards. The + reason is that the cache does not necessarily contain existing + RRs or zone boundary information which is necessary to + restrict the application of the wildcard RRs. + + - RR data in responses of dubious reliability. When a resolver + receives unsolicited responses or RR data other than that + requested, it should discard it without caching it. The basic + implication is that all sanity checks on a packet should be + performed before any of it is cached. + +In a similar vein, when a resolver has a set of RRs for some name in a +response, and wants to cache the RRs, it should check its cache for +already existing RRs. Depending on the circumstances, either the data +in the response or the cache is preferred, but the two should never be +combined. If the data in the response is from authoritative data in the +answer section, it is always preferred. + +8. MAIL SUPPORT + +The domain system defines a standard for mapping mailboxes into domain +names, and two methods for using the mailbox information to derive mail +routing information. The first method is called mail exchange binding +and the other method is mailbox binding. The mailbox encoding standard +and mail exchange binding are part of the DNS official protocol, and are +the recommended method for mail routing in the Internet. Mailbox +binding is an experimental feature which is still under development and +subject to change. + + + + +Mockapetris [Page 47] + +RFC 1035 Domain Implementation and Specification November 1987 + + +The mailbox encoding standard assumes a mailbox name of the form +"<local-part>@<mail-domain>". While the syntax allowed in each of these +sections varies substantially between the various mail internets, the +preferred syntax for the ARPA Internet is given in [RFC-822]. + +The DNS encodes the <local-part> as a single label, and encodes the +<mail-domain> as a domain name. The single label from the <local-part> +is prefaced to the domain name from <mail-domain> to form the domain +name corresponding to the mailbox. Thus the mailbox HOSTMASTER@SRI- +NIC.ARPA is mapped into the domain name HOSTMASTER.SRI-NIC.ARPA. If the +<local-part> contains dots or other special characters, its +representation in a master file will require the use of backslash +quoting to ensure that the domain name is properly encoded. For +example, the mailbox Action.domains@ISI.EDU would be represented as +Action\.domains.ISI.EDU. + +8.1. Mail exchange binding + +Mail exchange binding uses the <mail-domain> part of a mailbox +specification to determine where mail should be sent. The <local-part> +is not even consulted. [RFC-974] specifies this method in detail, and +should be consulted before attempting to use mail exchange support. + +One of the advantages of this method is that it decouples mail +destination naming from the hosts used to support mail service, at the +cost of another layer of indirection in the lookup function. However, +the addition layer should eliminate the need for complicated "%", "!", +etc encodings in <local-part>. + +The essence of the method is that the <mail-domain> is used as a domain +name to locate type MX RRs which list hosts willing to accept mail for +<mail-domain>, together with preference values which rank the hosts +according to an order specified by the administrators for <mail-domain>. + +In this memo, the <mail-domain> ISI.EDU is used in examples, together +with the hosts VENERA.ISI.EDU and VAXA.ISI.EDU as mail exchanges for +ISI.EDU. If a mailer had a message for Mockapetris@ISI.EDU, it would +route it by looking up MX RRs for ISI.EDU. The MX RRs at ISI.EDU name +VENERA.ISI.EDU and VAXA.ISI.EDU, and type A queries can find the host +addresses. + +8.2. Mailbox binding (Experimental) + +In mailbox binding, the mailer uses the entire mail destination +specification to construct a domain name. The encoded domain name for +the mailbox is used as the QNAME field in a QTYPE=MAILB query. + +Several outcomes are possible for this query: + + + +Mockapetris [Page 48] + +RFC 1035 Domain Implementation and Specification November 1987 + + + 1. The query can return a name error indicating that the mailbox + does not exist as a domain name. + + In the long term, this would indicate that the specified + mailbox doesn't exist. However, until the use of mailbox + binding is universal, this error condition should be + interpreted to mean that the organization identified by the + global part does not support mailbox binding. The + appropriate procedure is to revert to exchange binding at + this point. + + 2. The query can return a Mail Rename (MR) RR. + + The MR RR carries new mailbox specification in its RDATA + field. The mailer should replace the old mailbox with the + new one and retry the operation. + + 3. The query can return a MB RR. + + The MB RR carries a domain name for a host in its RDATA + field. The mailer should deliver the message to that host + via whatever protocol is applicable, e.g., b,SMTP. + + 4. The query can return one or more Mail Group (MG) RRs. + + This condition means that the mailbox was actually a mailing + list or mail group, rather than a single mailbox. Each MG RR + has a RDATA field that identifies a mailbox that is a member + of the group. The mailer should deliver a copy of the + message to each member. + + 5. The query can return a MB RR as well as one or more MG RRs. + + This condition means the the mailbox was actually a mailing + list. The mailer can either deliver the message to the host + specified by the MB RR, which will in turn do the delivery to + all members, or the mailer can use the MG RRs to do the + expansion itself. + +In any of these cases, the response may include a Mail Information +(MINFO) RR. This RR is usually associated with a mail group, but is +legal with a MB. The MINFO RR identifies two mailboxes. One of these +identifies a responsible person for the original mailbox name. This +mailbox should be used for requests to be added to a mail group, etc. +The second mailbox name in the MINFO RR identifies a mailbox that should +receive error messages for mail failures. This is particularly +appropriate for mailing lists when errors in member names should be +reported to a person other than the one who sends a message to the list. + + + +Mockapetris [Page 49] + +RFC 1035 Domain Implementation and Specification November 1987 + + +New fields may be added to this RR in the future. + + +9. REFERENCES and BIBLIOGRAPHY + +[Dyer 87] S. Dyer, F. Hsu, "Hesiod", Project Athena + Technical Plan - Name Service, April 1987, version 1.9. + + Describes the fundamentals of the Hesiod name service. + +[IEN-116] J. Postel, "Internet Name Server", IEN-116, + USC/Information Sciences Institute, August 1979. + + A name service obsoleted by the Domain Name System, but + still in use. + +[Quarterman 86] J. Quarterman, and J. Hoskins, "Notable Computer Networks", + Communications of the ACM, October 1986, volume 29, number + 10. + +[RFC-742] K. Harrenstien, "NAME/FINGER", RFC-742, Network + Information Center, SRI International, December 1977. + +[RFC-768] J. Postel, "User Datagram Protocol", RFC-768, + USC/Information Sciences Institute, August 1980. + +[RFC-793] J. Postel, "Transmission Control Protocol", RFC-793, + USC/Information Sciences Institute, September 1981. + +[RFC-799] D. Mills, "Internet Name Domains", RFC-799, COMSAT, + September 1981. + + Suggests introduction of a hierarchy in place of a flat + name space for the Internet. + +[RFC-805] J. Postel, "Computer Mail Meeting Notes", RFC-805, + USC/Information Sciences Institute, February 1982. + +[RFC-810] E. Feinler, K. Harrenstien, Z. Su, and V. White, "DOD + Internet Host Table Specification", RFC-810, Network + Information Center, SRI International, March 1982. + + Obsolete. See RFC-952. + +[RFC-811] K. Harrenstien, V. White, and E. Feinler, "Hostnames + Server", RFC-811, Network Information Center, SRI + International, March 1982. + + + + +Mockapetris [Page 50] + +RFC 1035 Domain Implementation and Specification November 1987 + + + Obsolete. See RFC-953. + +[RFC-812] K. Harrenstien, and V. White, "NICNAME/WHOIS", RFC-812, + Network Information Center, SRI International, March + 1982. + +[RFC-819] Z. Su, and J. Postel, "The Domain Naming Convention for + Internet User Applications", RFC-819, Network + Information Center, SRI International, August 1982. + + Early thoughts on the design of the domain system. + Current implementation is completely different. + +[RFC-821] J. Postel, "Simple Mail Transfer Protocol", RFC-821, + USC/Information Sciences Institute, August 1980. + +[RFC-830] Z. Su, "A Distributed System for Internet Name Service", + RFC-830, Network Information Center, SRI International, + October 1982. + + Early thoughts on the design of the domain system. + Current implementation is completely different. + +[RFC-882] P. Mockapetris, "Domain names - Concepts and + Facilities," RFC-882, USC/Information Sciences + Institute, November 1983. + + Superceeded by this memo. + +[RFC-883] P. Mockapetris, "Domain names - Implementation and + Specification," RFC-883, USC/Information Sciences + Institute, November 1983. + + Superceeded by this memo. + +[RFC-920] J. Postel and J. Reynolds, "Domain Requirements", + RFC-920, USC/Information Sciences Institute, + October 1984. + + Explains the naming scheme for top level domains. + +[RFC-952] K. Harrenstien, M. Stahl, E. Feinler, "DoD Internet Host + Table Specification", RFC-952, SRI, October 1985. + + Specifies the format of HOSTS.TXT, the host/address + table replaced by the DNS. + + + + + +Mockapetris [Page 51] + +RFC 1035 Domain Implementation and Specification November 1987 + + +[RFC-953] K. Harrenstien, M. Stahl, E. Feinler, "HOSTNAME Server", + RFC-953, SRI, October 1985. + + This RFC contains the official specification of the + hostname server protocol, which is obsoleted by the DNS. + This TCP based protocol accesses information stored in + the RFC-952 format, and is used to obtain copies of the + host table. + +[RFC-973] P. Mockapetris, "Domain System Changes and + Observations", RFC-973, USC/Information Sciences + Institute, January 1986. + + Describes changes to RFC-882 and RFC-883 and reasons for + them. + +[RFC-974] C. Partridge, "Mail routing and the domain system", + RFC-974, CSNET CIC BBN Labs, January 1986. + + Describes the transition from HOSTS.TXT based mail + addressing to the more powerful MX system used with the + domain system. + +[RFC-1001] NetBIOS Working Group, "Protocol standard for a NetBIOS + service on a TCP/UDP transport: Concepts and Methods", + RFC-1001, March 1987. + + This RFC and RFC-1002 are a preliminary design for + NETBIOS on top of TCP/IP which proposes to base NetBIOS + name service on top of the DNS. + +[RFC-1002] NetBIOS Working Group, "Protocol standard for a NetBIOS + service on a TCP/UDP transport: Detailed + Specifications", RFC-1002, March 1987. + +[RFC-1010] J. Reynolds, and J. Postel, "Assigned Numbers", RFC-1010, + USC/Information Sciences Institute, May 1987. + + Contains socket numbers and mnemonics for host names, + operating systems, etc. + +[RFC-1031] W. Lazear, "MILNET Name Domain Transition", RFC-1031, + November 1987. + + Describes a plan for converting the MILNET to the DNS. + +[RFC-1032] M. Stahl, "Establishing a Domain - Guidelines for + Administrators", RFC-1032, November 1987. + + + +Mockapetris [Page 52] + +RFC 1035 Domain Implementation and Specification November 1987 + + + Describes the registration policies used by the NIC to + administer the top level domains and delegate subzones. + +[RFC-1033] M. Lottor, "Domain Administrators Operations Guide", + RFC-1033, November 1987. + + A cookbook for domain administrators. + +[Solomon 82] M. Solomon, L. Landweber, and D. Neuhengen, "The CSNET + Name Server", Computer Networks, vol 6, nr 3, July 1982. + + Describes a name service for CSNET which is independent + from the DNS and DNS use in the CSNET. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Mockapetris [Page 53] + +RFC 1035 Domain Implementation and Specification November 1987 + + +Index + + * 13 + + ; 33, 35 + + <character-string> 35 + <domain-name> 34 + + @ 35 + + \ 35 + + A 12 + + Byte order 8 + + CH 13 + Character case 9 + CLASS 11 + CNAME 12 + Completion 42 + CS 13 + + Hesiod 13 + HINFO 12 + HS 13 + + IN 13 + IN-ADDR.ARPA domain 22 + Inverse queries 40 + + Mailbox names 47 + MB 12 + MD 12 + MF 12 + MG 12 + MINFO 12 + MINIMUM 20 + MR 12 + MX 12 + + NS 12 + NULL 12 + + Port numbers 32 + Primary server 5 + PTR 12, 18 + + + +Mockapetris [Page 54] + +RFC 1035 Domain Implementation and Specification November 1987 + + + QCLASS 13 + QTYPE 12 + + RDATA 12 + RDLENGTH 11 + + Secondary server 5 + SOA 12 + Stub resolvers 7 + + TCP 32 + TXT 12 + TYPE 11 + + UDP 32 + + WKS 12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Mockapetris [Page 55] + diff --git a/bin/tests/dst/t2_dsasig b/bin/tests/dst/t2_dsasig new file mode 100644 index 0000000..5dd12e1 --- /dev/null +++ b/bin/tests/dst/t2_dsasig @@ -0,0 +1,3 @@ +0009B55FDB62034326278C9371F32D92 +3D0E1161A32D491BEC38546FC452D903 +A91D806345B2F7F22E diff --git a/bin/tests/dst/t2_rsasig b/bin/tests/dst/t2_rsasig new file mode 100644 index 0000000..5f59ef3 --- /dev/null +++ b/bin/tests/dst/t2_rsasig @@ -0,0 +1,6 @@ +A8A20D2F26F792B3CE76DD0E12A85DFE +FF66AB866EF0BDB0F515001E234E699B +F5CD6FB41FB15D4213705ABE9B563896 +2196228648E0F8AA7F2F4EED3C19165C +1B4C70C9D69B93A1F2BE5B2F948CE023 + diff --git a/bin/tests/dst/t_dst.c b/bin/tests/dst/t_dst.c new file mode 100644 index 0000000..d5e5db7 --- /dev/null +++ b/bin/tests/dst/t_dst.c @@ -0,0 +1,933 @@ +/* + * Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1999-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. + */ + +/* $Id: t_dst.c,v 1.55 2008/01/12 23:47:13 tbox Exp $ */ + +#include <config.h> + +#include <sys/types.h> /* Required for dirent.h */ +#include <sys/stat.h> + +#include <dirent.h> /* XXX */ +#include <errno.h> +#include <fcntl.h> +#include <limits.h> +#include <stdlib.h> + +#include <unistd.h> /* XXX */ + +#include <isc/buffer.h> +#include <isc/dir.h> +#include <isc/entropy.h> +#include <isc/file.h> +#include <isc/mem.h> +#include <isc/region.h> +#include <isc/string.h> +#include <isc/util.h> + +#include <dns/fixedname.h> +#include <dns/name.h> + +#include <dst/dst.h> +#include <dst/result.h> + +#include <tests/t_api.h> + +#ifndef PATH_MAX +#define PATH_MAX 256 +#endif + +/* + * Adapted from the original dst_test.c program. + * XXXDCL should use isc_dir_*. + */ + +static void +cleandir(char *path) { + DIR *dirp; + struct dirent *pe; + char fullname[PATH_MAX + 1]; + + dirp = opendir(path); + if (dirp == NULL) { + t_info("opendir(%s) failed %d\n", path, errno); + return; + } + + while ((pe = readdir(dirp)) != NULL) { + if (! strcmp(pe->d_name, ".")) + continue; + if (! strcmp(pe->d_name, "..")) + continue; + strcpy(fullname, path); + strcat(fullname, "/"); + strcat(fullname, pe->d_name); + if (remove(fullname)) + t_info("remove(%s) failed %d\n", fullname, errno); + + } + (void)closedir(dirp); + if (rmdir(path)) + t_info("rmdir(%s) failed %d\n", path, errno); + + return; +} + +static void +use(dst_key_t *key, isc_mem_t *mctx, isc_result_t exp_result, int *nfails) { + + isc_result_t ret; + const char *data = "This is some data"; + unsigned char sig[512]; + isc_buffer_t databuf, sigbuf; + isc_region_t datareg, sigreg; + dst_context_t *ctx = NULL; + + isc_buffer_init(&sigbuf, sig, sizeof(sig)); + isc_buffer_init(&databuf, data, strlen(data)); + isc_buffer_add(&databuf, strlen(data)); + isc_buffer_usedregion(&databuf, &datareg); + + ret = dst_context_create(key, mctx, &ctx); + if (ret != exp_result) { + t_info("dst_context_create(%d) returned (%s) expected (%s)\n", + dst_key_alg(key), dst_result_totext(ret), + dst_result_totext(exp_result)); + ++*nfails; + return; + } + if (exp_result != ISC_R_SUCCESS) + return; + ret = dst_context_adddata(ctx, &datareg); + if (ret != ISC_R_SUCCESS) { + t_info("dst_context_adddata(%d) returned (%s)\n", + dst_key_alg(key), dst_result_totext(ret)); + ++*nfails; + dst_context_destroy(&ctx); + return; + } + ret = dst_context_sign(ctx, &sigbuf); + if (ret != ISC_R_SUCCESS) { + t_info("dst_context_sign(%d) returned (%s)\n", + dst_key_alg(key), dst_result_totext(ret)); + ++*nfails; + dst_context_destroy(&ctx); + return; + } + dst_context_destroy(&ctx); + + isc_buffer_remainingregion(&sigbuf, &sigreg); + ret = dst_context_create(key, mctx, &ctx); + if (ret != ISC_R_SUCCESS) { + t_info("dst_context_create(%d) returned (%s)\n", + dst_key_alg(key), dst_result_totext(ret)); + ++*nfails; + return; + } + ret = dst_context_adddata(ctx, &datareg); + if (ret != ISC_R_SUCCESS) { + t_info("dst_context_adddata(%d) returned (%s)\n", + dst_key_alg(key), dst_result_totext(ret)); + ++*nfails; + dst_context_destroy(&ctx); + return; + } + ret = dst_context_verify(ctx, &sigreg); + if (ret != exp_result) { + t_info("dst_context_verify(%d) returned (%s) expected (%s)\n", + dst_key_alg(key), dst_result_totext(ret), + dst_result_totext(exp_result)); + ++*nfails; + dst_context_destroy(&ctx); + return; + } + dst_context_destroy(&ctx); +} + +static void +dh(dns_name_t *name1, int id1, dns_name_t *name2, int id2, isc_mem_t *mctx, + isc_result_t exp_result, int *nfails, int *nprobs) +{ + dst_key_t *key1 = NULL, *key2 = NULL; + isc_result_t ret; + char current[PATH_MAX + 1]; + char tmp[PATH_MAX + 1]; + char *p; + int alg = DST_ALG_DH; + int type = DST_TYPE_PUBLIC|DST_TYPE_PRIVATE|DST_TYPE_KEY; + unsigned char array1[1024], array2[1024]; + isc_buffer_t b1, b2; + isc_region_t r1, r2; + + UNUSED(exp_result); + + p = getcwd(current, PATH_MAX);; + if (p == NULL) { + t_info("getcwd failed %d\n", errno); + ++*nprobs; + return; + } + + ret = dst_key_fromfile(name1, id1, alg, type, current, mctx, &key1); + if (ret != ISC_R_SUCCESS) { + t_info("dst_key_fromfile(%d) returned: %s\n", + alg, dst_result_totext(ret)); + ++*nfails; + return; + } + + ret = dst_key_fromfile(name2, id2, alg, type, current, mctx, &key2); + if (ret != ISC_R_SUCCESS) { + t_info("dst_key_fromfile(%d) returned: %s\n", + alg, dst_result_totext(ret)); + ++*nfails; + return; + } + + ret = isc_file_mktemplate("/tmp/", tmp, sizeof(tmp)); + if (ret != ISC_R_SUCCESS) { + t_info("isc_file_mktemplate failed %s\n", + isc_result_totext(ret)); + ++*nprobs; + return; + } + + ret = isc_dir_createunique(tmp); + if (ret != ISC_R_SUCCESS) { + t_info("isc_dir_createunique failed %s\n", + isc_result_totext(ret)); + ++*nprobs; + return; + } + + ret = dst_key_tofile(key1, type, tmp); + if (ret != 0) { + t_info("dst_key_tofile(%d) returned: %s\n", + alg, dst_result_totext(ret)); + ++*nfails; + return; + } + + ret = dst_key_tofile(key2, type, tmp); + if (ret != 0) { + t_info("dst_key_tofile(%d) returned: %s\n", + alg, dst_result_totext(ret)); + ++*nfails; + return; + } + + cleandir(tmp); + + isc_buffer_init(&b1, array1, sizeof(array1)); + ret = dst_key_computesecret(key1, key2, &b1); + if (ret != 0) { + t_info("dst_computesecret() returned: %s\n", + dst_result_totext(ret)); + ++*nfails; + return; + } + + isc_buffer_init(&b2, array2, sizeof(array2)); + ret = dst_key_computesecret(key2, key1, &b2); + if (ret != 0) { + t_info("dst_computesecret() returned: %s\n", + dst_result_totext(ret)); + ++*nfails; + return; + } + + isc_buffer_usedregion(&b1, &r1); + isc_buffer_usedregion(&b2, &r2); + if (r1.length != r2.length || memcmp(r1.base, r2.base, r1.length) != 0) + { + t_info("computed secrets don't match\n"); + ++*nfails; + return; + } + + dst_key_free(&key1); + dst_key_free(&key2); +} + +static void +io(dns_name_t *name, int id, int alg, int type, isc_mem_t *mctx, + isc_result_t exp_result, int *nfails, int *nprobs) +{ + dst_key_t *key = NULL; + isc_result_t ret; + char current[PATH_MAX + 1]; + char tmp[PATH_MAX + 1]; + char *p; + + p = getcwd(current, PATH_MAX);; + if (p == NULL) { + t_info("getcwd failed %d\n", errno); + ++*nprobs; + return; + } + + ret = dst_key_fromfile(name, id, alg, type, current, mctx, &key); + if (ret != ISC_R_SUCCESS) { + t_info("dst_key_fromfile(%d) returned: %s\n", + alg, dst_result_totext(ret)); + ++*nfails; + return; + } + + ret = isc_file_mktemplate("/tmp/", tmp, sizeof(tmp)); + if (ret != ISC_R_SUCCESS) { + t_info("isc_file_mktemplate failed %s\n", + isc_result_totext(ret)); + ++*nprobs; + return; + } + + ret = isc_dir_createunique(tmp); + if (ret != ISC_R_SUCCESS) { + t_info("mkdir failed %d\n", errno); + ++*nprobs; + return; + } + + ret = dst_key_tofile(key, type, tmp); + if (ret != 0) { + t_info("dst_key_tofile(%d) returned: %s\n", + alg, dst_result_totext(ret)); + ++*nfails; + return; + } + + if (dst_key_alg(key) != DST_ALG_DH) + use(key, mctx, exp_result, nfails); + + cleandir(tmp); + + dst_key_free(&key); +} + +static void +generate(int alg, isc_mem_t *mctx, int size, int *nfails) { + isc_result_t ret; + dst_key_t *key = NULL; + + ret = dst_key_generate(dns_rootname, alg, size, 0, 0, 0, + dns_rdataclass_in, mctx, &key); + if (ret != ISC_R_SUCCESS) { + t_info("dst_key_generate(%d) returned: %s\n", alg, + dst_result_totext(ret)); + ++*nfails; + return; + } + + if (alg != DST_ALG_DH) + use(key, mctx, ISC_R_SUCCESS, nfails); + dst_key_free(&key); +} + +#define DBUFSIZ 25 + +static const char *a1 = + "the dst module provides the capability to " + "generate, store and retrieve public and private keys, " + "sign and verify data using the RSA, DSA and MD5 algorithms, " + "and compute Diffie-Hellman shared secrets."; +static void +t1(void) { + isc_mem_t *mctx; + isc_entropy_t *ectx; + int nfails; + int nprobs; + int result; + isc_result_t isc_result; + dns_fixedname_t fname; + dns_name_t *name; + isc_buffer_t b; + + t_assert("dst", 1, T_REQUIRED, a1); + + nfails = 0; + nprobs = 0; + mctx = NULL; + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + t_result(T_UNRESOLVED); + return; + } + ectx = NULL; + isc_result = isc_entropy_create(mctx, &ectx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_entropy_create failed %s\n", + isc_result_totext(isc_result)); + t_result(T_UNRESOLVED); + return; + } + isc_result = isc_entropy_createfilesource(ectx, "randomfile"); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_entropy_create failed %s\n", + isc_result_totext(isc_result)); + t_result(T_UNRESOLVED); + return; + } + isc_result = dst_lib_init(mctx, ectx, ISC_ENTROPY_BLOCKING); + if (isc_result != ISC_R_SUCCESS) { + t_info("dst_lib_init failed %s\n", + isc_result_totext(isc_result)); + t_result(T_UNRESOLVED); + return; + } + + if (!dst_algorithm_supported(DST_ALG_RSAMD5)) { + dst_lib_destroy(); + t_info("library built without crypto support\n"); + t_result(T_UNTESTED); + return; + } + + t_info("testing use of stored keys [1]\n"); + + dns_fixedname_init(&fname); + name = dns_fixedname_name(&fname); + isc_buffer_init(&b, "test.", 5); + isc_buffer_add(&b, 5); + isc_result = dns_name_fromtext(name, &b, NULL, ISC_FALSE, NULL); + if (isc_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext failed %s\n", + isc_result_totext(isc_result)); + t_result(T_UNRESOLVED); + return; + } + io(name, 23616, DST_ALG_DSA, DST_TYPE_PRIVATE|DST_TYPE_PUBLIC, + mctx, ISC_R_SUCCESS, &nfails, &nprobs); + t_info("testing use of stored keys [2]\n"); + io(name, 54622, DST_ALG_RSAMD5, DST_TYPE_PRIVATE|DST_TYPE_PUBLIC, + mctx, ISC_R_SUCCESS, &nfails, &nprobs); + + t_info("testing use of stored keys [3]\n"); + io(name, 49667, DST_ALG_DSA, DST_TYPE_PRIVATE|DST_TYPE_PUBLIC, + mctx, DST_R_NULLKEY, &nfails, &nprobs); + t_info("testing use of stored keys [4]\n"); + io(name, 2, DST_ALG_RSAMD5, DST_TYPE_PRIVATE|DST_TYPE_PUBLIC, + mctx, DST_R_NULLKEY, &nfails, &nprobs); + + isc_buffer_init(&b, "dh.", 3); + isc_buffer_add(&b, 3); + isc_result = dns_name_fromtext(name, &b, NULL, ISC_FALSE, NULL); + if (isc_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext failed %s\n", + isc_result_totext(isc_result)); + t_result(T_UNRESOLVED); + return; + } + + dh(name, 18602, name, 48957, mctx, ISC_R_SUCCESS, &nfails, &nprobs); + + t_info("testing use of generated keys\n"); + generate(DST_ALG_RSAMD5, mctx, 512, &nfails); + generate(DST_ALG_DSA, mctx, 512, &nfails); + generate(DST_ALG_DH, mctx, 512, &nfails); + /* + * This one uses a constant. + */ + generate(DST_ALG_DH, mctx, 768, &nfails); + generate(DST_ALG_HMACMD5, mctx, 512, &nfails); + + dst_lib_destroy(); + + isc_entropy_detach(&ectx); + + isc_mem_destroy(&mctx); + + result = T_UNRESOLVED; + if ((nfails == 0) && (nprobs == 0)) + result = T_PASS; + else if (nfails) + result = T_FAIL; + t_result(result); + +} + +#define T_SIGMAX 512 + +#undef NEWSIG /* Define NEWSIG to generate the original signature file. */ + +#ifdef NEWSIG + +/* + * Write a sig in buf to file at path. + */ +static int +sig_tofile(char *path, isc_buffer_t *buf) { + int rval; + int fd; + int len; + int nprobs; + int cnt; + unsigned char c; + unsigned char val; + + cnt = 0; + nprobs = 0; + len = buf->used - buf->current; + + t_info("buf: current %d used %d len %d\n", + buf->current, buf->used, len); + + fd = open(path, O_CREAT|O_TRUNC|O_WRONLY, S_IRWXU|S_IRWXO|S_IRWXG); + if (fd < 0) { + t_info("open %s failed %d\n", path, errno); + return(1); + } + + while (len) { + c = (unsigned char) isc_buffer_getuint8(buf); + val = ((c >> 4 ) & 0x0f); + if ((0 <= val) && (val <= 9)) + val = '0' + val; + else + val = 'A' + val - 10; + rval = write(fd, &val, 1); + if (rval != 1) { + ++nprobs; + t_info("write failed %d %d\n", rval, errno); + break; + } + val = (c & 0x0f); + if ((0 <= val) && (val <= 9)) + val = '0' + val; + else + val = 'A' + val - 10; + rval = write(fd, &val, 1); + if (rval != 1) { + ++nprobs; + t_info("write failed %d %d\n", rval, errno); + break; + } + --len; + ++cnt; + if ((cnt % 16) == 0) { + val = '\n'; + rval = write(fd, &val, 1); + if (rval != 1) { + ++nprobs; + t_info("write failed %d %d\n", rval, errno); + break; + } + } + } + val = '\n'; + rval = write(fd, &val, 1); + if (rval != 1) { + ++nprobs; + t_info("write failed %d %d\n", rval, errno); + } + (void) close(fd); + return(nprobs); +} + +#endif /* NEWSIG */ + +/* + * Read sig in file at path to buf. + */ +static int +sig_fromfile(char *path, isc_buffer_t *iscbuf) { + int rval; + int len; + int fd; + unsigned char val; + struct stat sb; + char *p; + char *buf; + + rval = stat(path, &sb); + if (rval != 0) { + t_info("stat %s failed, errno == %d\n", path, errno); + return(1); + } + + buf = (char *) malloc((sb.st_size + 1) * sizeof(unsigned char)); + if (buf == NULL) { + t_info("malloc failed, errno == %d\n", errno); + return(1); + } + + fd = open(path, O_RDONLY); + if (fd < 0) { + t_info("open failed, errno == %d\n", errno); + (void) free(buf); + return(1); + } + + len = sb.st_size; + p = buf; + while (len) { + rval = read(fd, p, len); + if (rval > 0) { + len -= rval; + p += rval; + } + else { + t_info("read failed %d, errno == %d\n", rval, errno); + (void) free(buf); + (void) close(fd); + return(1); + } + } + close(fd); + + p = buf; + len = sb.st_size; + while(len) { + if (*p == '\n') { + ++p; + --len; + continue; + } + if (('0' <= *p) && (*p <= '9')) + val = *p - '0'; + else + val = *p - 'A' + 10; + ++p; + val <<= 4; + --len; + if (('0' <= *p) && (*p <= '9')) + val |= (*p - '0'); + else + val |= (*p - 'A' + 10); + ++p; + --len; + isc_buffer_putuint8(iscbuf, val); + } + (void) free(buf); + return(0); +} + +static void +t2_sigchk(char *datapath, char *sigpath, char *keyname, + int id, int alg, int type, + isc_mem_t *mctx, char *expected_result, + int *nfails, int *nprobs) +{ + int rval; + int len; + int fd; + int exp_res; + dst_key_t *key = NULL; + unsigned char sig[T_SIGMAX]; + unsigned char *p; + unsigned char *data; + struct stat sb; + isc_result_t isc_result; + isc_buffer_t databuf; + isc_buffer_t sigbuf; + isc_region_t datareg; + isc_region_t sigreg; + dns_fixedname_t fname; + dns_name_t *name; + isc_buffer_t b; + dst_context_t *ctx = NULL; + + /* + * Read data from file in a form usable by dst_verify. + */ + rval = stat(datapath, &sb); + if (rval != 0) { + t_info("t2_sigchk: stat (%s) failed %d\n", datapath, errno); + ++*nprobs; + return; + } + + data = (unsigned char *) malloc(sb.st_size * sizeof(char)); + if (data == NULL) { + t_info("t2_sigchk: malloc failed %d\n", errno); + ++*nprobs; + return; + } + + fd = open(datapath, O_RDONLY); + if (fd < 0) { + t_info("t2_sigchk: open failed %d\n", errno); + (void) free(data); + ++*nprobs; + return; + } + + p = data; + len = sb.st_size; + do { + rval = read(fd, p, len); + if (rval > 0) { + len -= rval; + p += rval; + } + } while (len); + (void) close(fd); + + /* + * Read key from file in a form usable by dst_verify. + */ + dns_fixedname_init(&fname); + name = dns_fixedname_name(&fname); + isc_buffer_init(&b, keyname, strlen(keyname)); + isc_buffer_add(&b, strlen(keyname)); + isc_result = dns_name_fromtext(name, &b, dns_rootname, ISC_FALSE, NULL); + if (isc_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext failed %s\n", + isc_result_totext(isc_result)); + (void) free(data); + ++*nprobs; + return; + } + isc_result = dst_key_fromfile(name, id, alg, type, NULL, mctx, &key); + if (isc_result != ISC_R_SUCCESS) { + t_info("dst_key_fromfile failed %s\n", + isc_result_totext(isc_result)); + (void) free(data); + ++*nprobs; + return; + } + + isc_buffer_init(&databuf, data, sb.st_size); + isc_buffer_add(&databuf, sb.st_size); + isc_buffer_usedregion(&databuf, &datareg); + +#ifdef NEWSIG + + /* + * If we're generating a signature for the first time, + * sign the data and save the signature to a file + */ + + memset(sig, 0, sizeof(sig)); + isc_buffer_init(&sigbuf, sig, sizeof(sig)); + + isc_result = dst_context_create(key, mctx, &ctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("dst_context_create(%d) failed %s\n", + dst_result_totext(isc_result)); + (void) free(data); + dst_key_free(&key); + ++*nprobs; + return; + } + isc_result = dst_context_adddata(ctx, &datareg); + if (isc_result != ISC_R_SUCCESS) { + t_info("dst_context_adddata(%d) failed %s\n", + dst_result_totext(isc_result)); + (void) free(data); + dst_key_free(&key); + dst_context_destroy(&ctx); + ++*nprobs; + return; + } + isc_result = dst_context_sign(ctx, &sigbuf); + if (isc_result != ISC_R_SUCCESS) { + t_info("dst_sign(%d) failed %s\n", + dst_result_totext(isc_result)); + (void) free(data); + dst_key_free(&key); + dst_context_destroy(&ctx); + ++*nprobs; + return; + } + dst_context_destroy(&ctx); + + rval = sig_tofile(sigpath, &sigbuf); + if (rval != 0) { + t_info("sig_tofile failed\n"); + ++*nprobs; + (void) free(data); + dst_key_free(&key); + return; + } + +#endif /* NEWSIG */ + + memset(sig, 0, sizeof(sig)); + isc_buffer_init(&sigbuf, sig, sizeof(sig)); + + /* + * Read precomputed signature from file in a form usable by dst_verify. + */ + rval = sig_fromfile(sigpath, &sigbuf); + if (rval != 0) { + t_info("sig_fromfile failed\n"); + (void) free(data); + dst_key_free(&key); + ++*nprobs; + return; + } + + /* + * Verify that the key signed the data. + */ + isc_buffer_remainingregion(&sigbuf, &sigreg); + + exp_res = 0; + if (strstr(expected_result, "!")) + exp_res = 1; + + isc_result = dst_context_create(key, mctx, &ctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("dst_context_create returned %s\n", + isc_result_totext(isc_result)); + ++*nfails; + } + isc_result = dst_context_adddata(ctx, &datareg); + if (isc_result != ISC_R_SUCCESS) { + t_info("dst_context_adddata returned %s\n", + isc_result_totext(isc_result)); + dst_context_destroy(&ctx); + ++*nfails; + } + isc_result = dst_context_verify(ctx, &sigreg); + if ( ((exp_res == 0) && (isc_result != ISC_R_SUCCESS)) || + ((exp_res != 0) && (isc_result == ISC_R_SUCCESS))) { + + t_info("dst_context_verify returned %s, expected %s\n", + isc_result_totext(isc_result), + expected_result); + dst_context_destroy(&ctx); + ++*nfails; + } + + (void) free(data); + dst_context_destroy(&ctx); + dst_key_free(&key); + return; +} + +/* + * The astute observer will note that t1() signs then verifies data + * during the test but that t2() verifies data that has been + * signed at some earlier time, possibly with an entire different + * version or implementation of the DSA and RSA algorithms + */ +static const char *a2 = + "the dst module provides the capability to " + "verify data signed with the RSA and DSA algorithms"; + +/* + * av == datafile, sigpath, keyname, keyid, alg, exp_result. + */ +static int +t2_vfy(char **av) { + char *datapath; + char *sigpath; + char *keyname; + char *key; + int keyid; + char *alg; + int algid; + char *exp_result; + int nfails; + int nprobs; + isc_mem_t *mctx; + isc_entropy_t *ectx; + isc_result_t isc_result; + int result; + + datapath = *av++; + sigpath = *av++; + keyname = *av++; + key = *av++; + keyid = atoi(key); + alg = *av++; + exp_result = *av++; + nfails = 0; + nprobs = 0; + + if (! strcasecmp(alg, "DST_ALG_DSA")) + algid = DST_ALG_DSA; + else if (! strcasecmp(alg, "DST_ALG_RSAMD5")) + algid = DST_ALG_RSAMD5; + else { + t_info("Unknown algorithm %s\n", alg); + return(T_UNRESOLVED); + } + + mctx = NULL; + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + return(T_UNRESOLVED); + } + ectx = NULL; + isc_result = isc_entropy_create(mctx, &ectx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_entropy_create failed %s\n", + isc_result_totext(isc_result)); + return(T_UNRESOLVED); + } + isc_result = isc_entropy_createfilesource(ectx, "randomfile"); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_entropy_create failed %s\n", + isc_result_totext(isc_result)); + return(T_UNRESOLVED); + } + isc_result = dst_lib_init(mctx, ectx, ISC_ENTROPY_BLOCKING); + if (isc_result != ISC_R_SUCCESS) { + t_info("dst_lib_init failed %s\n", + isc_result_totext(isc_result)); + return(T_UNRESOLVED); + } + + if (!dst_algorithm_supported(DST_ALG_RSAMD5)) { + dst_lib_destroy(); + t_info("library built without crypto support\n"); + return (T_UNTESTED); + } + + t_info("testing %s, %s, %s, %s, %s, %s\n", + datapath, sigpath, keyname, key, alg, exp_result); + t2_sigchk(datapath, sigpath, keyname, keyid, + algid, DST_TYPE_PRIVATE|DST_TYPE_PUBLIC, + mctx, exp_result, + &nfails, &nprobs); + + dst_lib_destroy(); + + isc_entropy_detach(&ectx); + + isc_mem_destroy(&mctx); + + result = T_UNRESOLVED; + if (nfails) + result = T_FAIL; + else if ((nfails == 0) && (nprobs == 0)) + result = T_PASS; + + return(result); +} + +static void +t2(void) { + int result; + t_assert("dst", 2, T_REQUIRED, a2); + result = t_eval("dst_2_data", t2_vfy, 6); + t_result(result); +} + +testspec_t T_testlist[] = { + { t1, "basic dst module verification" }, + { t2, "signature ineffability" }, + { NULL, NULL } +}; + diff --git a/bin/tests/entropy2_test.c b/bin/tests/entropy2_test.c new file mode 100644 index 0000000..3561a4c --- /dev/null +++ b/bin/tests/entropy2_test.c @@ -0,0 +1,175 @@ +/* + * Copyright (C) 2004, 2005, 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. + */ + +/* $Id: entropy2_test.c,v 1.16 2007/06/19 23:46:59 tbox Exp $ */ + +/*! \file */ + +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> + +#include <isc/entropy.h> +#include <isc/keyboard.h> +#include <isc/mem.h> +#include <isc/string.h> +#include <isc/time.h> +#include <isc/util.h> + +static void +hex_dump(const char *msg, void *data, unsigned int length) { + unsigned int len; + unsigned char *base; + isc_boolean_t first = ISC_TRUE; + + base = data; + + printf("DUMP of %d bytes: %s\n\t", length, msg); + for (len = 0; len < length; len++) { + if (len % 16 == 0 && !first) + printf("\n\t"); + printf("%02x ", base[len]); + first = ISC_FALSE; + } + printf("\n"); +} + +static void +CHECK(const char *msg, isc_result_t result) { + if (result != ISC_R_SUCCESS) { + printf("FAILURE: %s: %s\n", msg, isc_result_totext(result)); + exit(1); + } +} + +static isc_result_t +start(isc_entropysource_t *source, void *arg, isc_boolean_t blocking) { + isc_keyboard_t *kbd = (isc_keyboard_t *)arg; + + UNUSED(source); + + if (blocking) + printf("start called, blocking mode.\n"); + else + printf("start called, non-blocking mode.\n"); + + return (isc_keyboard_open(kbd)); +} + +static void +stop(isc_entropysource_t *source, void *arg) { + isc_keyboard_t *kbd = (isc_keyboard_t *)arg; + + UNUSED(source); + + printf("ENOUGH! Stop typing, please.\r\n"); + + (void)isc_keyboard_close(kbd, 3); + printf("stop called\n"); +} + +static isc_result_t +get(isc_entropysource_t *source, void *arg, isc_boolean_t blocking) { + isc_keyboard_t *kbd = (isc_keyboard_t *)arg; + isc_result_t result; + isc_time_t t; + isc_uint32_t sample; + isc_uint32_t extra; + unsigned char c; + + if (!blocking) + return (ISC_R_NOENTROPY); + + result = isc_keyboard_getchar(kbd, &c); + if (result != ISC_R_SUCCESS) + return (result); + + TIME_NOW(&t); + + sample = isc_time_nanoseconds(&t); + extra = c; + + result = isc_entropy_addcallbacksample(source, sample, extra); + if (result != ISC_R_SUCCESS) { + printf("\r\n"); + return (result); + } + + printf("."); + fflush(stdout); + + return (result); +} + +int +main(int argc, char **argv) { + isc_mem_t *mctx; + unsigned char buffer[512]; + isc_entropy_t *ent; + isc_entropysource_t *source; + unsigned int returned; + unsigned int flags; + isc_result_t result; + isc_keyboard_t kbd; + + UNUSED(argc); + UNUSED(argv); + + mctx = NULL; + CHECK("isc_mem_create()", + isc_mem_create(0, 0, &mctx)); + + ent = NULL; + CHECK("isc_entropy_create()", + isc_entropy_create(mctx, &ent)); + + isc_entropy_stats(ent, stderr); + + source = NULL; + result = isc_entropy_createcallbacksource(ent, start, get, stop, &kbd, + &source); + CHECK("isc_entropy_createcallbacksource()", result); + + fprintf(stderr, + "Reading 32 bytes of GOOD random data only, partial OK\n"); + + flags = 0; + flags |= ISC_ENTROPY_GOODONLY; + flags |= ISC_ENTROPY_PARTIAL; + flags |= ISC_ENTROPY_BLOCKING; + returned = 0; + result = isc_entropy_getdata(ent, buffer, 32, &returned, flags); + if (result == ISC_R_NOENTROPY) { + fprintf(stderr, "No entropy.\r\n"); + } + + isc_entropy_stopcallbacksources(ent); + + hex_dump("good data only:", buffer, returned); + + isc_entropy_stats(ent, stderr); + + isc_entropy_destroysource(&source); + isc_entropy_detach(&ent); + + isc_mem_stats(mctx, stderr); + isc_mem_destroy(&mctx); + + return (0); +} + diff --git a/bin/tests/entropy_test.c b/bin/tests/entropy_test.c new file mode 100644 index 0000000..94b1804 --- /dev/null +++ b/bin/tests/entropy_test.c @@ -0,0 +1,140 @@ +/* + * Copyright (C) 2004, 2005, 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. + */ + +/* $Id: entropy_test.c,v 1.23 2007/06/19 23:46:59 tbox Exp $ */ + +/*! \file */ + +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> + +#include <isc/entropy.h> +#include <isc/mem.h> +#include <isc/util.h> +#include <isc/string.h> + +static void +hex_dump(const char *msg, void *data, unsigned int length) { + unsigned int len; + unsigned char *base; + isc_boolean_t first = ISC_TRUE; + + base = data; + + printf("DUMP of %d bytes: %s\n\t", length, msg); + for (len = 0; len < length; len++) { + if (len % 16 == 0 && !first) + printf("\n\t"); + printf("%02x ", base[len]); + first = ISC_FALSE; + } + printf("\n"); +} + +static void +CHECK(const char *msg, isc_result_t result) { + if (result != ISC_R_SUCCESS) { + printf("FAILURE: %s: %s\n", msg, isc_result_totext(result)); + exit(1); + } +} + +int +main(int argc, char **argv) { + isc_mem_t *mctx; + unsigned char buffer[512]; + isc_entropy_t *ent; + unsigned int returned; + unsigned int flags; + isc_result_t result; + + UNUSED(argc); + UNUSED(argv); + + mctx = NULL; + CHECK("isc_mem_create()", + isc_mem_create(0, 0, &mctx)); + + ent = NULL; + CHECK("isc_entropy_create()", + isc_entropy_create(mctx, &ent)); + + isc_entropy_stats(ent, stderr); + +#if 1 + CHECK("isc_entropy_createfilesource() 1", + isc_entropy_createfilesource(ent, "/dev/random")); + CHECK("isc_entropy_createfilesource() 2", + isc_entropy_createfilesource(ent, "/dev/random")); +#else + CHECK("isc_entropy_createfilesource() 3", + isc_entropy_createfilesource(ent, "/tmp/foo")); +#endif + + fprintf(stderr, + "Reading 32 bytes of GOOD random data only, partial OK\n"); + + flags = 0; + flags |= ISC_ENTROPY_GOODONLY; + flags |= ISC_ENTROPY_PARTIAL; + result = isc_entropy_getdata(ent, buffer, 32, &returned, flags); + if (result == ISC_R_NOENTROPY) { + fprintf(stderr, "No entropy.\n"); + goto any; + } + hex_dump("good data only:", buffer, returned); + + any: + isc_entropy_stats(ent, stderr); + CHECK("isc_entropy_getdata() pseudorandom", + isc_entropy_getdata(ent, buffer, 128, NULL, 0)); + hex_dump("pseudorandom data", buffer, 128); + + isc_entropy_stats(ent, stderr); + flags = 0; + flags |= ISC_ENTROPY_GOODONLY; + flags |= ISC_ENTROPY_BLOCKING; + result = isc_entropy_getdata(ent, buffer, sizeof(buffer), &returned, + flags); + CHECK("good data only, blocking mode", result); + hex_dump("blocking mode data", buffer, sizeof(buffer)); + + { + isc_entropy_t *entcopy1 = NULL; + isc_entropy_t *entcopy2 = NULL; + isc_entropy_t *entcopy3 = NULL; + + isc_entropy_attach(ent, &entcopy1); + isc_entropy_attach(ent, &entcopy2); + isc_entropy_attach(ent, &entcopy3); + + isc_entropy_stats(ent, stderr); + + isc_entropy_detach(&entcopy1); + isc_entropy_detach(&entcopy2); + isc_entropy_detach(&entcopy3); + } + + isc_entropy_detach(&ent); + isc_mem_stats(mctx, stderr); + isc_mem_destroy(&mctx); + + return (0); +} + diff --git a/bin/tests/fsaccess_test.c b/bin/tests/fsaccess_test.c new file mode 100644 index 0000000..e6147b2 --- /dev/null +++ b/bin/tests/fsaccess_test.c @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2004, 2005, 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. + */ + +/* $Id: fsaccess_test.c,v 1.13 2007/06/19 23:46:59 tbox Exp $ */ + +/*! \file */ + +#include <config.h> + +#include <stdio.h> + +#include <sys/types.h> /* Non-portable. */ +#include <sys/stat.h> /* Non-portable. */ + +#include <isc/fsaccess.h> +#include <isc/result.h> + +#define PATH "/tmp/fsaccess" + +int +main(void) { + isc_fsaccess_t access; + isc_result_t result; + + remove(PATH); + fopen(PATH, "w"); + chmod(PATH, 0); + + access = 0; + + isc_fsaccess_add(ISC_FSACCESS_OWNER | ISC_FSACCESS_GROUP, + ISC_FSACCESS_READ | ISC_FSACCESS_WRITE, + &access); + + printf("fsaccess=%d\n", access); + + isc_fsaccess_add(ISC_FSACCESS_OTHER, ISC_FSACCESS_READ, &access); + + printf("fsaccess=%d\n", access); + + result = isc_fsaccess_set(PATH, access); + if (result != ISC_R_SUCCESS) + fprintf(stderr, "result = %s\n", isc_result_totext(result)); + + return (0); +} diff --git a/bin/tests/genrandom.c b/bin/tests/genrandom.c new file mode 100644 index 0000000..34f6ac0 --- /dev/null +++ b/bin/tests/genrandom.c @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2000-2003 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. + */ + +/* $Id: genrandom.c,v 1.15 2007/06/19 23:46:59 tbox Exp $ */ + +/*! \file */ +#include <config.h> + +#include <stdio.h> +#include <time.h> + +#include <isc/stdlib.h> + +int +main(int argc, char **argv) { + unsigned int bytes; + unsigned int k; + char *endp; + FILE *fp; + + if (argc != 3) { + printf("usage: genrandom k file\n"); + exit(1); + } + k = strtoul(argv[1], &endp, 10); + if (*endp != 0) { + printf("usage: genrandom k file\n"); + exit(1); + } + bytes = k << 10; + + fp = fopen(argv[2], "w"); + if (fp == NULL) { + printf("failed to open %s\n", argv[2]); + exit(1); + } + +#ifndef HAVE_ARC4RANDOM + srand(0x12345678); +#endif + while (bytes > 0) { +#ifndef HAVE_ARC4RANDOM + unsigned short int x = (rand() & 0xFFFF); +#else + unsigned short int x = (arc4random() & 0xFFFF); +#endif + unsigned char c = x & 0xFF; + if (putc(c, fp) == EOF) { + printf("error writing to file\n"); + exit(1); + } + c = x >> 8; + if (putc(c, fp) == EOF) { + printf("error writing to file\n"); + exit(1); + } + bytes -= 2; + } + fclose(fp); + + return (0); +} diff --git a/bin/tests/gxba_test.c b/bin/tests/gxba_test.c new file mode 100644 index 0000000..8c5558f --- /dev/null +++ b/bin/tests/gxba_test.c @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2004, 2005, 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. + */ + +/* $Id: gxba_test.c,v 1.13 2007/06/19 23:46:59 tbox Exp $ */ + +/*! \file */ +#include <config.h> + +#include <stdio.h> + +#include <isc/net.h> + +#include <lwres/netdb.h> + +static void +print_he(struct hostent *he, int error, const char *fun, const char *name) { + char **c; + int i; + + if (he != NULL) { + printf("%s(%s):\n", fun, name); + printf("\tname = %s\n", he->h_name); + printf("\taddrtype = %d\n", he->h_addrtype); + printf("\tlength = %d\n", he->h_length); + c = he->h_aliases; + i = 1; + while (*c != NULL) { + printf("\talias[%d] = %s\n", i, *c); + i++; + c++; + } + c = he->h_addr_list; + i = 1; + while (*c != NULL) { + char buf[128]; + inet_ntop(he->h_addrtype, *c, buf, sizeof(buf)); + printf("\taddress[%d] = %s\n", i, buf); + c++; + i++; + } + } else { + printf("%s(%s): error = %d (%s)\n", fun, name, error, + hstrerror(error)); + } +} + +int +main(int argc, char **argv) { + struct hostent *he; + int error; + struct in_addr in_addr; + struct in6_addr in6_addr; + void *addr; + int af; + size_t len; + + (void)argc; + + while (argv[1] != NULL) { + if (inet_pton(AF_INET, argv[1], &in_addr) == 1) { + af = AF_INET; + addr = &in_addr; + len = sizeof(in_addr); + } else if (inet_pton(AF_INET6, argv[1], &in6_addr) == 1) { + af = AF_INET6; + addr = &in6_addr; + len = sizeof(in6_addr); + } else { + printf("unable to convert \"%s\" to an address\n", + argv[1]); + argv++; + continue; + } + he = gethostbyaddr(addr, len, af); + print_he(he, h_errno, "gethostbyaddr", argv[1]); + + he = getipnodebyaddr(addr, len, af, &error); + print_he(he, error, "getipnodebyaddr", argv[1]); + if (he != NULL) + freehostent(he); + argv++; + } + return (0); +} diff --git a/bin/tests/gxbn_test.c b/bin/tests/gxbn_test.c new file mode 100644 index 0000000..28ca115 --- /dev/null +++ b/bin/tests/gxbn_test.c @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2004, 2005, 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. + */ + +/* $Id: gxbn_test.c,v 1.16 2007/06/19 23:46:59 tbox Exp $ */ + +/*! \file */ +#include <config.h> + +#include <stdio.h> + +#include <isc/net.h> + +#include <lwres/netdb.h> + +static void +print_he(struct hostent *he, int error, const char *fun, const char *name) { + char **c; + int i; + + if (he != NULL) { + printf("%s(%s):\n", fun, name); + printf("\tname = %s\n", he->h_name); + printf("\taddrtype = %d\n", he->h_addrtype); + printf("\tlength = %d\n", he->h_length); + c = he->h_aliases; + i = 1; + while (*c != NULL) { + printf("\talias[%d] = %s\n", i, *c); + i++; + c++; + } + c = he->h_addr_list; + i = 1; + while (*c != NULL) { + char buf[128]; + inet_ntop(he->h_addrtype, *c, buf, sizeof(buf)); + printf("\taddress[%d] = %s\n", i, buf); + c++; + i++; + } + } else { + printf("%s(%s): error = %d (%s)\n", fun, name, error, + hstrerror(error)); + } +} + +int +main(int argc, char **argv) { + struct hostent *he; + int error; + + (void)argc; + + while (argv[1] != NULL) { + he = gethostbyname(argv[1]); + print_he(he, h_errno, "gethostbyname", argv[1]); + + he = getipnodebyname(argv[1], AF_INET6, AI_DEFAULT|AI_ALL, + &error); + print_he(he, error, "getipnodebyname", argv[1]); + if (he != NULL) + freehostent(he); + + he = getipnodebyname(argv[1], AF_INET6, AI_DEFAULT, + &error); + print_he(he, error, "getipnodebyname", argv[1]); + if (he != NULL) + freehostent(he); + argv++; + } + return (0); +} diff --git a/bin/tests/hash_test.c b/bin/tests/hash_test.c new file mode 100644 index 0000000..73d397b --- /dev/null +++ b/bin/tests/hash_test.c @@ -0,0 +1,289 @@ +/* + * 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. + */ + +/* $Id: hash_test.c,v 1.19 2007/06/19 23:46:59 tbox Exp $ */ + +/*! \file */ +#include <config.h> + +#include <stdio.h> +#include <string.h> + +#include <isc/hmacmd5.h> +#include <isc/hmacsha.h> +#include <isc/md5.h> +#include <isc/sha1.h> +#include <isc/util.h> +#include <isc/string.h> + +static void +print_digest(const char *s, const char *hash, unsigned char *d, + unsigned int words) +{ + unsigned int i, j; + + printf("hash (%s) %s:\n\t", hash, s); + for (i = 0; i < words; i++) { + printf(" "); + for (j = 0; j < 4; j++) + printf("%02x", d[i * 4 + j]); + } + printf("\n"); +} + +int +main(int argc, char **argv) { + isc_sha1_t sha1; + isc_sha224_t sha224; + isc_md5_t md5; + isc_hmacmd5_t hmacmd5; + isc_hmacsha1_t hmacsha1; + isc_hmacsha224_t hmacsha224; + isc_hmacsha256_t hmacsha256; + isc_hmacsha384_t hmacsha384; + isc_hmacsha512_t hmacsha512; + unsigned char digest[ISC_SHA512_DIGESTLENGTH]; + unsigned char buffer[1024]; + const char *s; + unsigned char key[20]; + + UNUSED(argc); + UNUSED(argv); + + s = "abc"; + isc_sha1_init(&sha1); + memcpy(buffer, s, strlen(s)); + isc_sha1_update(&sha1, buffer, strlen(s)); + isc_sha1_final(&sha1, digest); + print_digest(s, "sha1", digest, ISC_SHA1_DIGESTLENGTH/4); + + s = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"; + isc_sha1_init(&sha1); + memcpy(buffer, s, strlen(s)); + isc_sha1_update(&sha1, buffer, strlen(s)); + isc_sha1_final(&sha1, digest); + print_digest(s, "sha1", digest, ISC_SHA1_DIGESTLENGTH/4); + + s = "abc"; + isc_sha224_init(&sha224); + memcpy(buffer, s, strlen(s)); + isc_sha224_update(&sha224, buffer, strlen(s)); + isc_sha224_final(digest, &sha224); + print_digest(s, "sha224", digest, ISC_SHA224_DIGESTLENGTH/4); + + s = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"; + isc_sha224_init(&sha224); + memcpy(buffer, s, strlen(s)); + isc_sha224_update(&sha224, buffer, strlen(s)); + isc_sha224_final(digest, &sha224); + print_digest(s, "sha224", digest, ISC_SHA224_DIGESTLENGTH/4); + + s = "abc"; + isc_md5_init(&md5); + memcpy(buffer, s, strlen(s)); + isc_md5_update(&md5, buffer, strlen(s)); + isc_md5_final(&md5, digest); + print_digest(s, "md5", digest, 4); + + /* + * The 3 HMAC-MD5 examples from RFC2104 + */ + s = "Hi There"; + memset(key, 0x0b, 16); + isc_hmacmd5_init(&hmacmd5, key, 16); + memcpy(buffer, s, strlen(s)); + isc_hmacmd5_update(&hmacmd5, buffer, strlen(s)); + isc_hmacmd5_sign(&hmacmd5, digest); + print_digest(s, "hmacmd5", digest, 4); + + s = "what do ya want for nothing?"; + strcpy((char *)key, "Jefe"); + isc_hmacmd5_init(&hmacmd5, key, 4); + memcpy(buffer, s, strlen(s)); + isc_hmacmd5_update(&hmacmd5, buffer, strlen(s)); + isc_hmacmd5_sign(&hmacmd5, digest); + print_digest(s, "hmacmd5", digest, 4); + + s = "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335"; + memset(key, 0xaa, 16); + isc_hmacmd5_init(&hmacmd5, key, 16); + memcpy(buffer, s, strlen(s)); + isc_hmacmd5_update(&hmacmd5, buffer, strlen(s)); + isc_hmacmd5_sign(&hmacmd5, digest); + print_digest(s, "hmacmd5", digest, 4); + + /* + * The 3 HMAC-SHA1 examples from RFC4634. + */ + s = "Hi There"; + memset(key, 0x0b, 20); + isc_hmacsha1_init(&hmacsha1, key, 20); + memcpy(buffer, s, strlen(s)); + isc_hmacsha1_update(&hmacsha1, buffer, strlen(s)); + isc_hmacsha1_sign(&hmacsha1, digest, ISC_SHA1_DIGESTLENGTH); + print_digest(s, "hmacsha1", digest, ISC_SHA1_DIGESTLENGTH/4); + + s = "what do ya want for nothing?"; + strcpy((char *)key, "Jefe"); + isc_hmacsha1_init(&hmacsha1, key, 4); + memcpy(buffer, s, strlen(s)); + isc_hmacsha1_update(&hmacsha1, buffer, strlen(s)); + isc_hmacsha1_sign(&hmacsha1, digest, ISC_SHA1_DIGESTLENGTH); + print_digest(s, "hmacsha1", digest, ISC_SHA1_DIGESTLENGTH/4); + + s = "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335"; + memset(key, 0xaa, 20); + isc_hmacsha1_init(&hmacsha1, key, 20); + memcpy(buffer, s, strlen(s)); + isc_hmacsha1_update(&hmacsha1, buffer, strlen(s)); + isc_hmacsha1_sign(&hmacsha1, digest, ISC_SHA1_DIGESTLENGTH); + print_digest(s, "hmacsha1", digest, ISC_SHA1_DIGESTLENGTH/4); + + /* + * The 3 HMAC-SHA224 examples from RFC4634. + */ + s = "Hi There"; + memset(key, 0x0b, 20); + isc_hmacsha224_init(&hmacsha224, key, 20); + memcpy(buffer, s, strlen(s)); + isc_hmacsha224_update(&hmacsha224, buffer, strlen(s)); + isc_hmacsha224_sign(&hmacsha224, digest, ISC_SHA224_DIGESTLENGTH); + print_digest(s, "hmacsha224", digest, ISC_SHA224_DIGESTLENGTH/4); + + s = "what do ya want for nothing?"; + strcpy((char *)key, "Jefe"); + isc_hmacsha224_init(&hmacsha224, key, 4); + memcpy(buffer, s, strlen(s)); + isc_hmacsha224_update(&hmacsha224, buffer, strlen(s)); + isc_hmacsha224_sign(&hmacsha224, digest, ISC_SHA224_DIGESTLENGTH); + print_digest(s, "hmacsha224", digest, ISC_SHA224_DIGESTLENGTH/4); + + s = "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335"; + memset(key, 0xaa, 20); + isc_hmacsha224_init(&hmacsha224, key, 20); + memcpy(buffer, s, strlen(s)); + isc_hmacsha224_update(&hmacsha224, buffer, strlen(s)); + isc_hmacsha224_sign(&hmacsha224, digest, ISC_SHA224_DIGESTLENGTH); + print_digest(s, "hmacsha224", digest, ISC_SHA224_DIGESTLENGTH/4); + + /* + * The 3 HMAC-SHA256 examples from RFC4634. + */ + s = "Hi There"; + memset(key, 0x0b, 20); + isc_hmacsha256_init(&hmacsha256, key, 20); + memcpy(buffer, s, strlen(s)); + isc_hmacsha256_update(&hmacsha256, buffer, strlen(s)); + isc_hmacsha256_sign(&hmacsha256, digest, ISC_SHA256_DIGESTLENGTH); + print_digest(s, "hmacsha256", digest, ISC_SHA256_DIGESTLENGTH/4); + + s = "what do ya want for nothing?"; + strcpy((char *)key, "Jefe"); + isc_hmacsha256_init(&hmacsha256, key, 4); + memcpy(buffer, s, strlen(s)); + isc_hmacsha256_update(&hmacsha256, buffer, strlen(s)); + isc_hmacsha256_sign(&hmacsha256, digest, ISC_SHA256_DIGESTLENGTH); + print_digest(s, "hmacsha256", digest, ISC_SHA256_DIGESTLENGTH/4); + + s = "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335"; + memset(key, 0xaa, 20); + isc_hmacsha256_init(&hmacsha256, key, 20); + memcpy(buffer, s, strlen(s)); + isc_hmacsha256_update(&hmacsha256, buffer, strlen(s)); + isc_hmacsha256_sign(&hmacsha256, digest, ISC_SHA256_DIGESTLENGTH); + print_digest(s, "hmacsha256", digest, ISC_SHA256_DIGESTLENGTH/4); + + /* + * The 3 HMAC-SHA384 examples from RFC4634. + */ + s = "Hi There"; + memset(key, 0x0b, 20); + isc_hmacsha384_init(&hmacsha384, key, 20); + memcpy(buffer, s, strlen(s)); + isc_hmacsha384_update(&hmacsha384, buffer, strlen(s)); + isc_hmacsha384_sign(&hmacsha384, digest, ISC_SHA384_DIGESTLENGTH); + print_digest(s, "hmacsha384", digest, ISC_SHA384_DIGESTLENGTH/4); + + s = "what do ya want for nothing?"; + strcpy((char *)key, "Jefe"); + isc_hmacsha384_init(&hmacsha384, key, 4); + memcpy(buffer, s, strlen(s)); + isc_hmacsha384_update(&hmacsha384, buffer, strlen(s)); + isc_hmacsha384_sign(&hmacsha384, digest, ISC_SHA384_DIGESTLENGTH); + print_digest(s, "hmacsha384", digest, ISC_SHA384_DIGESTLENGTH/4); + + s = "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335"; + memset(key, 0xaa, 20); + isc_hmacsha384_init(&hmacsha384, key, 20); + memcpy(buffer, s, strlen(s)); + isc_hmacsha384_update(&hmacsha384, buffer, strlen(s)); + isc_hmacsha384_sign(&hmacsha384, digest, ISC_SHA384_DIGESTLENGTH); + print_digest(s, "hmacsha384", digest, ISC_SHA384_DIGESTLENGTH/4); + + /* + * The 3 HMAC-SHA512 examples from RFC4634. + */ + s = "Hi There"; + memset(key, 0x0b, 20); + isc_hmacsha512_init(&hmacsha512, key, 20); + memcpy(buffer, s, strlen(s)); + isc_hmacsha512_update(&hmacsha512, buffer, strlen(s)); + isc_hmacsha512_sign(&hmacsha512, digest, ISC_SHA512_DIGESTLENGTH); + print_digest(s, "hmacsha512", digest, ISC_SHA512_DIGESTLENGTH/4); + + s = "what do ya want for nothing?"; + strcpy((char *)key, "Jefe"); + isc_hmacsha512_init(&hmacsha512, key, 4); + memcpy(buffer, s, strlen(s)); + isc_hmacsha512_update(&hmacsha512, buffer, strlen(s)); + isc_hmacsha512_sign(&hmacsha512, digest, ISC_SHA512_DIGESTLENGTH); + print_digest(s, "hmacsha512", digest, ISC_SHA512_DIGESTLENGTH/4); + + s = "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335" + "\335\335\335\335\335\335\335\335\335\335"; + memset(key, 0xaa, 20); + isc_hmacsha512_init(&hmacsha512, key, 20); + memcpy(buffer, s, strlen(s)); + isc_hmacsha512_update(&hmacsha512, buffer, strlen(s)); + isc_hmacsha512_sign(&hmacsha512, digest, ISC_SHA512_DIGESTLENGTH); + print_digest(s, "hmacsha512", digest, ISC_SHA512_DIGESTLENGTH/4); + + return (0); +} diff --git a/bin/tests/headerdep_test.sh.in b/bin/tests/headerdep_test.sh.in new file mode 100644 index 0000000..3f951de --- /dev/null +++ b/bin/tests/headerdep_test.sh.in @@ -0,0 +1,57 @@ +#!/bin/sh +# +# 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. + +# $Id: headerdep_test.sh.in,v 1.8 2007/06/19 23:46:59 tbox Exp $ + +# +# Check the installed bind9 headers to make sure that no header +# depends on another header having been included first. +# + +prefix=@prefix@ +tmp=/tmp/thdr$$.tmp + +status=0 + +echo "Checking for header interdependencies..." + +# Make a list of header files. +(cd $prefix/include; find . -name '*.h' -print | sed 's!^./!!') > $tmp + +# Check each header. +while read h +do + echo " - <$h>" + + # Build a test program. + cat <<EOF >test.c +#include <$h> +EOF + + # Compile the test program. + if + gcc @STD_CWARNINGS@ @STD_CINCLUDES@ -I$prefix/include -c test.c 2>&1 + then + : + else + status=1 + fi +done <$tmp + +rm -f test.c test.o $tmp + +exit $status diff --git a/bin/tests/inter_test.c b/bin/tests/inter_test.c new file mode 100644 index 0000000..141467c --- /dev/null +++ b/bin/tests/inter_test.c @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2000, 2001, 2003 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. + */ + +/* $Id: inter_test.c,v 1.16 2008/03/20 23:47:00 tbox Exp $ */ + +/*! \file */ +#include <config.h> + +#include <stdlib.h> + +#include <isc/interfaceiter.h> +#include <isc/mem.h> +#include <isc/util.h> + +int +main(int argc, char **argv) { + isc_mem_t *mctx = NULL; + isc_interfaceiter_t *iter = NULL; + isc_interface_t ifdata; + isc_result_t result; + const char * res; + char buf[128]; + + UNUSED(argc); + UNUSED(argv); + + RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS); + result = isc_interfaceiter_create(mctx, &iter); + if (result != ISC_R_SUCCESS) + goto cleanup; + result = isc_interfaceiter_first(iter); + while (result == ISC_R_SUCCESS) { + result = isc_interfaceiter_current(iter, &ifdata); + if (result != ISC_R_SUCCESS) { + fprintf(stdout, "isc_interfaceiter_current: %s", + isc_result_totext(result)); + continue; + } + fprintf(stdout, "%s %d %x\n", ifdata.name, ifdata.af, + ifdata.flags); + INSIST(ifdata.af == AF_INET || ifdata.af == AF_INET6); + res = inet_ntop(ifdata.af, &ifdata.address.type, buf, + sizeof(buf)); + if (ifdata.address.zone != 0) + fprintf(stdout, "address = %s (zone %u)\n", + res == NULL ? "BAD" : res, + ifdata.address.zone); + else + fprintf(stdout, "address = %s\n", + res == NULL ? "BAD" : res); + INSIST(ifdata.address.family == ifdata.af); + res = inet_ntop(ifdata.af, &ifdata.netmask.type, buf, + sizeof(buf)); + fprintf(stdout, "netmask = %s\n", res == NULL ? "BAD" : res); + INSIST(ifdata.netmask.family == ifdata.af); + if ((ifdata.flags & INTERFACE_F_POINTTOPOINT) != 0) { + res = inet_ntop(ifdata.af, &ifdata.dstaddress.type, + buf, sizeof(buf)); + fprintf(stdout, "dstaddress = %s\n", + res == NULL ? "BAD" : res); + + INSIST(ifdata.dstaddress.family == ifdata.af); + } + result = isc_interfaceiter_next(iter); + if (result != ISC_R_SUCCESS && result != ISC_R_NOMORE) { + fprintf(stdout, "isc_interfaceiter_next: %s", + isc_result_totext(result)); + continue; + } + } + isc_interfaceiter_destroy(&iter); + + fprintf(stdout, "\nPass 2\n\n"); + + result = isc_interfaceiter_create(mctx, &iter); + if (result != ISC_R_SUCCESS) + goto cleanup; + result = isc_interfaceiter_first(iter); + while (result == ISC_R_SUCCESS) { + result = isc_interfaceiter_current(iter, &ifdata); + if (result != ISC_R_SUCCESS) { + fprintf(stdout, "isc_interfaceiter_current: %s", + isc_result_totext(result)); + continue; + } + fprintf(stdout, "%s %d %x\n", ifdata.name, ifdata.af, + ifdata.flags); + INSIST(ifdata.af == AF_INET || ifdata.af == AF_INET6); + res = inet_ntop(ifdata.af, &ifdata.address.type, buf, + sizeof(buf)); + if (ifdata.address.zone != 0) + fprintf(stdout, "address = %s (zone %u)\n", + res == NULL ? "BAD" : res, + ifdata.address.zone); + else + fprintf(stdout, "address = %s\n", + res == NULL ? "BAD" : res); + INSIST(ifdata.address.family == ifdata.af); + res = inet_ntop(ifdata.af, &ifdata.netmask.type, buf, + sizeof(buf)); + fprintf(stdout, "netmask = %s\n", res == NULL ? "BAD" : res); + INSIST(ifdata.netmask.family == ifdata.af); + if ((ifdata.flags & INTERFACE_F_POINTTOPOINT) != 0) { + res = inet_ntop(ifdata.af, &ifdata.dstaddress.type, + buf, sizeof(buf)); + fprintf(stdout, "dstaddress = %s\n", + res == NULL ? "BAD" : res); + + INSIST(ifdata.dstaddress.family == ifdata.af); + } + result = isc_interfaceiter_next(iter); + if (result != ISC_R_SUCCESS && result != ISC_R_NOMORE) { + fprintf(stdout, "isc_interfaceiter_next: %s", + isc_result_totext(result)); + continue; + } + } + isc_interfaceiter_destroy(&iter); + cleanup: + isc_mem_destroy(&mctx); + + return (0); +} diff --git a/bin/tests/journalprint.c b/bin/tests/journalprint.c new file mode 100644 index 0000000..d8bd72b --- /dev/null +++ b/bin/tests/journalprint.c @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2004-2008 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. + */ + +/* $Id: journalprint.c,v 1.14 2008/09/25 04:02:38 tbox Exp $ */ + +/*! \file */ +#include <config.h> + +#include <isc/log.h> +#include <isc/mem.h> +#include <isc/util.h> + +#include <dns/journal.h> +#include <dns/log.h> +#include <dns/result.h> +#include <dns/types.h> + +#include <stdlib.h> + +/* + * Setup logging to use stderr. + */ +static isc_result_t +setup_logging(isc_mem_t *mctx, FILE *errout, isc_log_t **logp) { + isc_logdestination_t destination; + isc_logconfig_t *logconfig = NULL; + isc_log_t *log = NULL; + + RUNTIME_CHECK(isc_log_create(mctx, &log, &logconfig) == ISC_R_SUCCESS); + isc_log_setcontext(log); + dns_log_init(log); + dns_log_setcontext(log); + + destination.file.stream = errout; + destination.file.name = NULL; + destination.file.versions = ISC_LOG_ROLLNEVER; + destination.file.maximum_size = 0; + RUNTIME_CHECK(isc_log_createchannel(logconfig, "stderr", + ISC_LOG_TOFILEDESC, + ISC_LOG_DYNAMIC, + &destination, 0) == ISC_R_SUCCESS); + RUNTIME_CHECK(isc_log_usechannel(logconfig, "stderr", + NULL, NULL) == ISC_R_SUCCESS); + + *logp = log; + return (ISC_R_SUCCESS); +} + +int +main(int argc, char **argv) { + char *file; + isc_mem_t *mctx = NULL; + isc_result_t result; + isc_log_t *lctx = NULL; + + if (argc != 2) { + printf("usage: %s journal\n", argv[0]); + return(1); + } + + file = argv[1]; + + RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS); + RUNTIME_CHECK(setup_logging(mctx, stderr, &lctx) == ISC_R_SUCCESS); + + result = dns_journal_print(mctx, file, stdout); + if (result == DNS_R_NOJOURNAL) + fprintf(stderr, "%s\n", dns_result_totext(result)); + isc_log_destroy(&lctx); + isc_mem_detach(&mctx); + return(result != ISC_R_SUCCESS ? 1 : 0); +} diff --git a/bin/tests/keyboard_test.c b/bin/tests/keyboard_test.c new file mode 100644 index 0000000..f278a2d --- /dev/null +++ b/bin/tests/keyboard_test.c @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2004, 2005, 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. + */ + +/* $Id: keyboard_test.c,v 1.13 2007/06/19 23:46:59 tbox Exp $ */ + +/*! \file */ +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> + +#include <isc/keyboard.h> +#include <isc/util.h> + +static void +CHECK(const char *msg, isc_result_t result) { + if (result != ISC_R_SUCCESS) { + printf("FAILURE: %s: %s\n", msg, isc_result_totext(result)); + exit(1); + } +} + +int +main(int argc, char **argv) { + isc_keyboard_t kbd; + unsigned char c; + isc_result_t res; + unsigned int count; + + UNUSED(argc); + UNUSED(argv); + + printf("Type Q to exit.\n"); + + res = isc_keyboard_open(&kbd); + CHECK("isc_keyboard_open()", res); + + c = 'x'; + count = 0; + while (res == ISC_R_SUCCESS && c != 'Q') { + res = isc_keyboard_getchar(&kbd, &c); + printf("."); + fflush(stdout); + count++; + if (count % 64 == 0) + printf("\r\n"); + } + printf("\r\n"); + if (res != ISC_R_SUCCESS) { + printf("FAILURE: keyboard getchar failed: %s\r\n", + isc_result_totext(res)); + goto errout; + } + + errout: + res = isc_keyboard_close(&kbd, 3); + CHECK("isc_keyboard_close()", res); + + return (0); +} + diff --git a/bin/tests/lex_test.c b/bin/tests/lex_test.c new file mode 100644 index 0000000..8eba536 --- /dev/null +++ b/bin/tests/lex_test.c @@ -0,0 +1,160 @@ +/* + * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1998-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. + */ + +/* $Id: lex_test.c,v 1.23 2007/06/19 23:46:59 tbox Exp $ */ + +/*! \file */ +#include <config.h> + +#include <isc/commandline.h> +#include <isc/lex.h> +#include <isc/mem.h> +#include <isc/util.h> + +isc_mem_t *mctx; +isc_lex_t *lex; + +isc_lexspecials_t specials; + +static void +print_token(isc_token_t *tokenp, FILE *stream) { + switch (tokenp->type) { + case isc_tokentype_unknown: + fprintf(stream, "UNKNOWN"); + break; + case isc_tokentype_string: + fprintf(stream, "STRING %.*s", + (int)tokenp->value.as_region.length, + tokenp->value.as_region.base); + break; + case isc_tokentype_number: + fprintf(stream, "NUMBER %lu", tokenp->value.as_ulong); + break; + case isc_tokentype_qstring: + fprintf(stream, "QSTRING \"%.*s\"", + (int)tokenp->value.as_region.length, + tokenp->value.as_region.base); + break; + case isc_tokentype_eol: + fprintf(stream, "EOL"); + break; + case isc_tokentype_eof: + fprintf(stream, "EOF"); + break; + case isc_tokentype_initialws: + fprintf(stream, "INITIALWS"); + break; + case isc_tokentype_special: + fprintf(stream, "SPECIAL %c", tokenp->value.as_char); + break; + case isc_tokentype_nomore: + fprintf(stream, "NOMORE"); + break; + default: + FATAL_ERROR(__FILE__, __LINE__, "Unexpected type %d", + tokenp->type); + } +} + +int +main(int argc, char *argv[]) { + isc_token_t token; + isc_result_t result; + int quiet = 0; + int c; + int masterfile = 1; + int stats = 0; + unsigned int options = 0; + int done = 0; + + while ((c = isc_commandline_parse(argc, argv, "qmcs")) != -1) { + switch (c) { + case 'q': + quiet = 1; + break; + case 'm': + masterfile = 1; + break; + case 'c': + masterfile = 0; + break; + case 's': + stats = 1; + break; + } + } + + RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS); + RUNTIME_CHECK(isc_lex_create(mctx, 256, &lex) == ISC_R_SUCCESS); + + if (masterfile) { + /* Set up to lex DNS master file. */ + + specials['('] = 1; + specials[')'] = 1; + specials['"'] = 1; + isc_lex_setspecials(lex, specials); + options = ISC_LEXOPT_DNSMULTILINE | ISC_LEXOPT_ESCAPE | + ISC_LEXOPT_EOF | + ISC_LEXOPT_QSTRING | ISC_LEXOPT_NOMORE; + isc_lex_setcomments(lex, ISC_LEXCOMMENT_DNSMASTERFILE); + } else { + /* Set up to lex DNS config file. */ + + specials['{'] = 1; + specials['}'] = 1; + specials[';'] = 1; + specials['/'] = 1; + specials['"'] = 1; + specials['!'] = 1; + specials['*'] = 1; + isc_lex_setspecials(lex, specials); + options = ISC_LEXOPT_EOF | + ISC_LEXOPT_QSTRING | + ISC_LEXOPT_NUMBER | ISC_LEXOPT_NOMORE; + isc_lex_setcomments(lex, (ISC_LEXCOMMENT_C| + ISC_LEXCOMMENT_CPLUSPLUS| + ISC_LEXCOMMENT_SHELL)); + } + + RUNTIME_CHECK(isc_lex_openstream(lex, stdin) == ISC_R_SUCCESS); + + while ((result = isc_lex_gettoken(lex, options, &token)) == + ISC_R_SUCCESS && !done) { + if (!quiet) { + char *name = isc_lex_getsourcename(lex); + print_token(&token, stdout); + printf(" line = %lu file = %s\n", + isc_lex_getsourceline(lex), + (name == NULL) ? "<none>" : name); + } + if (token.type == isc_tokentype_eof) + isc_lex_close(lex); + if (token.type == isc_tokentype_nomore) + done = 1; + } + if (result != ISC_R_SUCCESS) + printf("Result: %s\n", isc_result_totext(result)); + + isc_lex_close(lex); + isc_lex_destroy(&lex); + if (!quiet && stats) + isc_mem_stats(mctx, stdout); + isc_mem_destroy(&mctx); + + return (0); +} diff --git a/bin/tests/lfsr_test.c b/bin/tests/lfsr_test.c new file mode 100644 index 0000000..4150b2d --- /dev/null +++ b/bin/tests/lfsr_test.c @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1999-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. + */ + +/* $Id: lfsr_test.c,v 1.16 2007/06/19 23:46:59 tbox Exp $ */ + +/*! \file */ +#include <config.h> + +#include <stdio.h> + +#include <isc/lfsr.h> +#include <isc/util.h> + +isc_uint32_t state[1024 * 64]; + +int +main(int argc, char **argv) { + isc_lfsr_t lfsr1, lfsr2; + int i; + isc_uint32_t temp; + + UNUSED(argc); + UNUSED(argv); + + /* + * Verify that returned values are reproducable. + */ + isc_lfsr_init(&lfsr1, 0, 32, 0x80000057U, 0, NULL, NULL); + for (i = 0; i < 32; i++) { + isc_lfsr_generate(&lfsr1, &state[i], 4); + printf("lfsr1: state[%2d] = %08x\n", i, state[i]); + } + isc_lfsr_init(&lfsr1, 0, 32, 0x80000057U, 0, NULL, NULL); + for (i = 0; i < 32; i++) { + isc_lfsr_generate(&lfsr1, &temp, 4); + if (state[i] != temp) + printf("lfsr1: state[%2d] = %08x, " + "but new state is %08x\n", + i, state[i], temp); + } + + /* + * Now do the same with skipping. + */ + isc_lfsr_init(&lfsr1, 0, 32, 0x80000057U, 0, NULL, NULL); + for (i = 0; i < 32; i++) { + isc_lfsr_generate(&lfsr1, &state[i], 4); + isc_lfsr_skip(&lfsr1, 32); + printf("lfsr1: state[%2d] = %08x\n", i, state[i]); + } + isc_lfsr_init(&lfsr1, 0, 32, 0x80000057U, 0, NULL, NULL); + for (i = 0; i < 32; i++) { + isc_lfsr_generate(&lfsr1, &temp, 4); + isc_lfsr_skip(&lfsr1, 32); + if (state[i] != temp) + printf("lfsr1: state[%2d] = %08x, " + "but new state is %08x\n", + i, state[i], temp); + } + + /* + * Try to find the period of the LFSR. + * + * x^16 + x^5 + x^3 + x^2 + 1 + */ + isc_lfsr_init(&lfsr2, 0, 16, 0x00008016U, 0, NULL, NULL); + for (i = 0; i < 32; i++) { + isc_lfsr_generate(&lfsr2, &state[i], 4); + printf("lfsr2: state[%2d] = %08x\n", i, state[i]); + } + isc_lfsr_init(&lfsr2, 0, 16, 0x00008016U, 0, NULL, NULL); + for (i = 0; i < 32; i++) { + isc_lfsr_generate(&lfsr2, &temp, 4); + if (state[i] != temp) + printf("lfsr2: state[%2d] = %08x, " + "but new state is %08x\n", + i, state[i], temp); + } + + return (0); +} diff --git a/bin/tests/log_test.c b/bin/tests/log_test.c new file mode 100644 index 0000000..09b5fec --- /dev/null +++ b/bin/tests/log_test.c @@ -0,0 +1,338 @@ +/* + * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1999-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. + */ + +/* $Id: log_test.c,v 1.26 2007/06/19 23:46:59 tbox Exp $ */ + +/* Principal Authors: DCL */ + +#include <config.h> + +#include <stdlib.h> +#include <unistd.h> + +#include <isc/commandline.h> +#include <isc/mem.h> +#include <isc/string.h> + +#include <dns/log.h> + +#define TEST_FILE "/tmp/test_log" +#define SYSLOG_FILE "/var/log/daemon.log" +#define FILE_VERSIONS 10 + +char usage[] = "Usage: %s [-m] [-s syslog_logfile] [-r file_versions]\n"; + +#define CHECK(expr) result = expr; \ + if (result != ISC_R_SUCCESS) { \ + fprintf(stderr, "%s: " #expr "%s: exiting\n", \ + progname, isc_result_totext(result)); \ + } + +int +main(int argc, char **argv) { + const char *progname, *syslog_file, *message; + int ch, i, file_versions, stderr_line; + isc_boolean_t show_final_mem = ISC_FALSE; + isc_log_t *lctx; + isc_logconfig_t *lcfg; + isc_mem_t *mctx; + isc_result_t result; + isc_logdestination_t destination; + const isc_logcategory_t *category; + const isc_logmodule_t *module; + + progname = strrchr(*argv, '/'); + if (progname != NULL) + progname++; + else + progname = *argv; + + syslog_file = SYSLOG_FILE; + file_versions = FILE_VERSIONS; + + while ((ch = isc_commandline_parse(argc, argv, "ms:r:")) != -1) { + switch (ch) { + case 'm': + show_final_mem = ISC_TRUE; + break; + case 's': + syslog_file = isc_commandline_argument; + break; + case 'r': + file_versions = atoi(isc_commandline_argument); + if (file_versions < 0 && + file_versions != ISC_LOG_ROLLNEVER && + file_versions != ISC_LOG_ROLLINFINITE) { + fprintf(stderr, "%s: file rotations must be " + "%d (ISC_LOG_ROLLNEVER),\n\t" + "%d (ISC_LOG_ROLLINFINITE) " + "or > 0\n", progname, + ISC_LOG_ROLLNEVER, + ISC_LOG_ROLLINFINITE); + exit(1); + } + break; + case '?': + fprintf(stderr, usage, progname); + exit(1); + } + } + + argc -= isc_commandline_index; + argv += isc_commandline_index; + + if (argc > 0) { + fprintf(stderr, usage, progname); + exit(1); + } + + fprintf(stderr, "EXPECT:\n%s%d%s%s%s", + "8 lines to stderr (first 4 numbered, #3 repeated)\n", + file_versions == 0 || file_versions == ISC_LOG_ROLLNEVER ? 1 : + file_versions > 0 ? file_versions + 1 : FILE_VERSIONS + 1, + " " TEST_FILE " files, and\n", + "2 lines to syslog\n", + "lines ending with exclamation marks are errors\n\n"); + + isc_log_opensyslog(progname, LOG_PID, LOG_DAEMON); + + mctx = NULL; + lctx = NULL; + lcfg = NULL; + + CHECK(isc_mem_create(0, 0, &mctx)); + CHECK(isc_log_create(mctx, &lctx, &lcfg)); + + CHECK(isc_log_settag(lcfg, progname)); + + isc_log_setcontext(lctx); + dns_log_init(lctx); + dns_log_setcontext(lctx); + + /* + * Test isc_log_categorybyname and isc_log_modulebyname. + */ + category = isc_log_categorybyname(lctx, "notify"); + if (category != NULL) + fprintf(stderr, "%s category found. (expected)\n", + category->name); + else + fprintf(stderr, "notify category not found!\n"); + + module = isc_log_modulebyname(lctx, "xyzzy"); + if (module != NULL) + fprintf(stderr, "%s module found!\n", module->name); + else + fprintf(stderr, "xyzzy module not found. (expected)\n"); + + /* + * Create a file channel to test file opening, size limiting and + * version rolling. + */ + + destination.file.name = TEST_FILE; + destination.file.maximum_size = 1; + destination.file.versions = file_versions; + + CHECK(isc_log_createchannel(lcfg, "file_test", ISC_LOG_TOFILE, + ISC_LOG_INFO, &destination, + ISC_LOG_PRINTTIME| + ISC_LOG_PRINTTAG| + ISC_LOG_PRINTLEVEL| + ISC_LOG_PRINTCATEGORY| + ISC_LOG_PRINTMODULE)); + + /* + * Create a dynamic debugging channel to a file descriptor. + */ + destination.file.stream = stderr; + + CHECK(isc_log_createchannel(lcfg, "debug_test", ISC_LOG_TOFILEDESC, + ISC_LOG_DYNAMIC, &destination, + ISC_LOG_PRINTTIME| + ISC_LOG_PRINTLEVEL| + ISC_LOG_DEBUGONLY)); + + /* + * Test the usability of the four predefined logging channels. + */ + CHECK(isc_log_usechannel(lcfg, "default_syslog", + DNS_LOGCATEGORY_DATABASE, + DNS_LOGMODULE_CACHE)); + CHECK(isc_log_usechannel(lcfg, "default_stderr", + DNS_LOGCATEGORY_DATABASE, + DNS_LOGMODULE_CACHE)); + CHECK(isc_log_usechannel(lcfg, "default_debug", + DNS_LOGCATEGORY_DATABASE, + DNS_LOGMODULE_CACHE)); + CHECK(isc_log_usechannel(lcfg, "null", + DNS_LOGCATEGORY_DATABASE, + NULL)); + + /* + * Use the custom channels. + */ + CHECK(isc_log_usechannel(lcfg, "file_test", + DNS_LOGCATEGORY_GENERAL, + DNS_LOGMODULE_DB)); + + CHECK(isc_log_usechannel(lcfg, "debug_test", + DNS_LOGCATEGORY_GENERAL, + DNS_LOGMODULE_RBTDB)); + + fprintf(stderr, "\n==> stderr begin\n"); + + /* + * Write to the internal default by testing both a category for which + * no channel has been specified and a category which was specified + * but not with the named module. + */ + stderr_line = 1; + + isc_log_write(lctx, DNS_LOGCATEGORY_SECURITY, DNS_LOGMODULE_RBT, + ISC_LOG_CRITICAL, "%s (%d)", + "Unspecified category and unspecified module to stderr", + stderr_line++); + isc_log_write(lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_RBT, + ISC_LOG_CRITICAL, "%s (%d)", + "Specified category and unspecified module to stderr", + stderr_line++); + + /* + * Write to default_syslog, default_stderr and default_debug. + */ + isc_log_write(lctx, DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_CACHE, + ISC_LOG_WARNING, "%s (%d twice)", + "Using the predefined channels to syslog+stderr", + stderr_line++); + + /* + * Write to predefined null channel. + */ + isc_log_write(lctx, DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_RBTDB, + ISC_LOG_INFO, "This is to null and should not appear!"); + + /* + * Reset the internal default to use syslog instead of stderr, + * and test it. + */ + CHECK(isc_log_usechannel(lcfg, "default_syslog", + ISC_LOGCATEGORY_DEFAULT, NULL)); + isc_log_write(lctx, DNS_LOGCATEGORY_SECURITY, DNS_LOGMODULE_RBT, + ISC_LOG_ERROR, "%s%s", + "This message to the redefined default category should ", + "be second in syslog"); + /* + * Write to the file channel. + */ + if (file_versions >= 0 || file_versions == ISC_LOG_ROLLINFINITE) { + + /* + * If file_versions is 0 or ISC_LOG_ROLLINFINITE, write + * the "should not appear" and "should be in file" messages + * to ensure they get rolled. + */ + if (file_versions <= 0) + file_versions = FILE_VERSIONS; + + else + isc_log_write(lctx, DNS_LOGCATEGORY_GENERAL, + DNS_LOGMODULE_DB, ISC_LOG_NOTICE, + "This should be rolled over " + "and not appear!"); + + for (i = file_versions - 1; i >= 0; i--) + isc_log_write(lctx, DNS_LOGCATEGORY_GENERAL, + DNS_LOGMODULE_DB, ISC_LOG_NOTICE, + "should be in file %d/%d", i, + file_versions - 1); + + isc_log_write(lctx, DNS_LOGCATEGORY_GENERAL, + DNS_LOGMODULE_DB, ISC_LOG_NOTICE, + "should be in base file"); + } else { + file_versions = FILE_VERSIONS; + for (i = 1; i <= file_versions; i++) + isc_log_write(lctx, DNS_LOGCATEGORY_GENERAL, + DNS_LOGMODULE_DB, ISC_LOG_NOTICE, + "This is message %d in the log file", i); + } + + + /* + * Write a debugging message to a category that has no + * debugging channels for the named module. + */ + isc_log_write(lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_DB, + ISC_LOG_DEBUG(1), + "This debug message should not appear!"); + + /* + * Write debugging messages to a dynamic debugging channel. + */ + isc_log_write(lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_RBTDB, + ISC_LOG_CRITICAL, "This critical message should " + "not appear because the debug level is 0!"); + + isc_log_setdebuglevel(lctx, 3); + + isc_log_write(lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_RBTDB, + ISC_LOG_DEBUG(1), "%s (%d)", + "Dynamic debugging to stderr", stderr_line++); + isc_log_write(lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_RBTDB, + ISC_LOG_DEBUG(5), + "This debug level is too high and should not appear!"); + + /* + * Test out the duplicate filtering using the debug_test channel. + */ + isc_log_setduplicateinterval(lcfg, 10); + message = "This message should appear only once on stderr"; + + isc_log_write1(lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_RBTDB, + ISC_LOG_CRITICAL, "%s", message); + isc_log_write1(lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_RBTDB, + ISC_LOG_CRITICAL, message); + + isc_log_setduplicateinterval(lcfg, 1); + message = "This message should appear twice on stderr"; + + isc_log_write1(lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_RBTDB, + ISC_LOG_CRITICAL, message); + sleep(2); + isc_log_write1(lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_RBTDB, + ISC_LOG_CRITICAL, message); + + /* + * Review where everything went. + * XXXDCL NT + */ + fputc('\n', stderr); + system("head " TEST_FILE "*; rm -f " TEST_FILE "*"); + + freopen(syslog_file, "r", stdin); + fprintf(stderr, "\n==> %s <==\n", syslog_file); + system("tail -2"); + fputc('\n', stderr); + + isc_log_destroy(&lctx); + + if (show_final_mem) + isc_mem_stats(mctx, stderr); + + return (0); +} diff --git a/bin/tests/lwres_test.c b/bin/tests/lwres_test.c new file mode 100644 index 0000000..9620258 --- /dev/null +++ b/bin/tests/lwres_test.c @@ -0,0 +1,304 @@ +/* + * Copyright (C) 2004, 2005, 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. + */ + +/* $Id: lwres_test.c,v 1.31 2007/06/19 23:46:59 tbox Exp $ */ + +#include <config.h> + +#include <assert.h> +#include <stdlib.h> +#include <string.h> + +#include <isc/mem.h> +#include <isc/netaddr.h> +#include <isc/util.h> + +#include <lwres/lwres.h> + +#define USE_ISC_MEM + +static inline void +CHECK(int val, const char *msg) { + if (val != 0) { + fprintf(stderr, "%s returned %d\n", msg, val); + exit(1); + } +} + +static void +hexdump(const char *msg, void *base, size_t len) { + unsigned char *p; + unsigned int cnt; + + p = base; + cnt = 0; + + printf("*** %s (%lu bytes @ %p)\n", msg, (unsigned long)len, base); + + while (cnt < len) { + if (cnt % 16 == 0) + printf("%p: ", p); + else if (cnt % 8 == 0) + printf(" |"); + printf(" %02x", *p++); + cnt++; + + if (cnt % 16 == 0) + printf("\n"); + } + + if (cnt % 16 != 0) + printf("\n"); +} + +static const char *TESTSTRING = "This is a test. This is only a test. !!!"; +static lwres_context_t *ctx; + +static void +test_noop(void) { + int ret; + lwres_lwpacket_t pkt, pkt2; + lwres_nooprequest_t nooprequest, *nooprequest2; + lwres_noopresponse_t noopresponse, *noopresponse2; + lwres_buffer_t b; + + pkt.pktflags = 0; + pkt.serial = 0x11223344; + pkt.recvlength = 0x55667788; + pkt.result = 0; + + nooprequest.datalength = strlen(TESTSTRING); + /* XXXDCL maybe "nooprequest.data" should be const. */ + DE_CONST(TESTSTRING, nooprequest.data); + ret = lwres_nooprequest_render(ctx, &nooprequest, &pkt, &b); + CHECK(ret, "lwres_nooprequest_render"); + + hexdump("rendered noop request", b.base, b.used); + + /* + * Now, parse it into a new structure. + */ + lwres_buffer_first(&b); + ret = lwres_lwpacket_parseheader(&b, &pkt2); + CHECK(ret, "lwres_lwpacket_parseheader"); + + hexdump("parsed pkt2", &pkt2, sizeof(pkt2)); + + nooprequest2 = NULL; + ret = lwres_nooprequest_parse(ctx, &b, &pkt2, &nooprequest2); + CHECK(ret, "lwres_nooprequest_parse"); + + assert(nooprequest.datalength == nooprequest2->datalength); + assert(memcmp(nooprequest.data, nooprequest2->data, + nooprequest.datalength) == 0); + + lwres_nooprequest_free(ctx, &nooprequest2); + + lwres_context_freemem(ctx, b.base, b.length); + b.base = NULL; + b.length = 0; + + pkt.pktflags = 0; + pkt.serial = 0x11223344; + pkt.recvlength = 0x55667788; + pkt.result = 0xdeadbeef; + + noopresponse.datalength = strlen(TESTSTRING); + /* XXXDCL maybe "noopresponse.data" should be const. */ + DE_CONST(TESTSTRING, noopresponse.data); + ret = lwres_noopresponse_render(ctx, &noopresponse, &pkt, &b); + CHECK(ret, "lwres_noopresponse_render"); + + hexdump("rendered noop response", b.base, b.used); + + /* + * Now, parse it into a new structure. + */ + lwres_buffer_first(&b); + ret = lwres_lwpacket_parseheader(&b, &pkt2); + CHECK(ret, "lwres_lwpacket_parseheader"); + + hexdump("parsed pkt2", &pkt2, sizeof(pkt2)); + + noopresponse2 = NULL; + ret = lwres_noopresponse_parse(ctx, &b, &pkt2, &noopresponse2); + CHECK(ret, "lwres_noopresponse_parse"); + + assert(noopresponse.datalength == noopresponse2->datalength); + assert(memcmp(noopresponse.data, noopresponse2->data, + noopresponse.datalength) == 0); + + lwres_noopresponse_free(ctx, &noopresponse2); + + lwres_context_freemem(ctx, b.base, b.length); + b.base = NULL; + b.length = 0; +} + +static void +test_gabn(const char *target) { + lwres_gabnresponse_t *res; + lwres_addr_t *addr; + int ret; + unsigned int i; + char outbuf[64]; + + res = NULL; + ret = lwres_getaddrsbyname(ctx, target, + LWRES_ADDRTYPE_V4 | LWRES_ADDRTYPE_V6, + &res); + printf("gabn %s ret == %d\n", target, ret); + if (ret != 0) { + printf("FAILURE!\n"); + if (res != NULL) + lwres_gabnresponse_free(ctx, &res); + return; + } + + printf("Returned real name: (%u, %s)\n", + res->realnamelen, res->realname); + printf("%u aliases:\n", res->naliases); + for (i = 0; i < res->naliases; i++) + printf("\t(%u, %s)\n", res->aliaslen[i], res->aliases[i]); + printf("%u addresses:\n", res->naddrs); + addr = LWRES_LIST_HEAD(res->addrs); + for (i = 0; i < res->naddrs; i++) { + INSIST(addr != NULL); + + if (addr->family == LWRES_ADDRTYPE_V4) + (void)inet_ntop(AF_INET, addr->address, + outbuf, sizeof(outbuf)); + else + (void)inet_ntop(AF_INET6, addr->address, + outbuf, sizeof(outbuf)); + printf("\tAddr len %u family %08x %s\n", + addr->length, addr->family, outbuf); + addr = LWRES_LIST_NEXT(addr, link); + } + + lwres_gabnresponse_free(ctx, &res); +} + +static void +test_gnba(const char *target, lwres_uint32_t af) { + lwres_gnbaresponse_t *res; + int ret; + unsigned int i; + unsigned char addrbuf[16]; + unsigned int len; + + if (af == LWRES_ADDRTYPE_V4) { + len = 4; + ret = inet_pton(AF_INET, target, addrbuf); + assert(ret == 1); + } else { + len = 16; + ret = inet_pton(AF_INET6, target, addrbuf); + assert(ret == 1); + } + + res = NULL; + ret = lwres_getnamebyaddr(ctx, af, len, addrbuf, &res); + printf("gnba %s ret == %d\n", target, ret); + assert(ret == 0); + assert(res != NULL); + + printf("Returned real name: (%u, %s)\n", + res->realnamelen, res->realname); + printf("%u aliases:\n", res->naliases); + for (i = 0; i < res->naliases; i++) + printf("\t(%u, %s)\n", res->aliaslen[i], res->aliases[i]); + + lwres_gnbaresponse_free(ctx, &res); +} + +#ifdef USE_ISC_MEM +/* + * Wrappers around our memory management stuff, for the lwres functions. + */ +static void * +mem_alloc(void *arg, size_t size) { + return (isc_mem_get(arg, size)); +} + +static void +mem_free(void *arg, void *mem, size_t size) { + isc_mem_put(arg, mem, size); +} +#endif + +int +main(int argc, char *argv[]) { + int ret; +#ifdef USE_ISC_MEM + isc_mem_t *mem; + isc_result_t result; +#endif + + (void)argc; + (void)argv; + +#ifdef USE_ISC_MEM + mem = NULL; + result = isc_mem_create(0, 0, &mem); + INSIST(result == ISC_R_SUCCESS); +#endif + + ctx = NULL; +#ifdef USE_ISC_MEM + ret = lwres_context_create(&ctx, mem, mem_alloc, mem_free, 0); +#else + ret = lwres_context_create(&ctx, NULL, NULL, NULL, 0); +#endif + + CHECK(ret, "lwres_context_create"); + + ret = lwres_conf_parse(ctx, "/etc/resolv.conf"); + CHECK(ret, "lwres_conf_parse"); + + lwres_conf_print(ctx, stdout); + + test_noop(); + + /* + * The following comments about tests all assume your search path is + * nominum.com isc.org flame.org + * and ndots is the default of 1. + */ + test_gabn("alias-05.test"); /* exact, then search. */ + test_gabn("f.root-servers.net."); + test_gabn("poofball.flame.org."); + test_gabn("foo.ip6.int."); + test_gabn("notthereatall.flame.org"); /* exact, then search (!found)*/ + test_gabn("shell"); /* search (found in nominum.com), then exact */ + test_gabn("kechara"); /* search (found in flame.org), then exact */ + test_gabn("lkasdjlaksjdlkasjdlkasjdlkasjd"); /* search, exact(!found)*/ + + test_gnba("198.133.199.1", LWRES_ADDRTYPE_V4); + test_gnba("204.152.184.79", LWRES_ADDRTYPE_V4); + test_gnba("3ffe:8050:201:1860:42::1", LWRES_ADDRTYPE_V6); + + lwres_conf_clear(ctx); + lwres_context_destroy(&ctx); + +#ifdef USE_ISC_MEM + isc_mem_stats(mem, stdout); + isc_mem_destroy(&mem); +#endif + + return (0); +} diff --git a/bin/tests/lwresconf_test.c b/bin/tests/lwresconf_test.c new file mode 100644 index 0000000..48e839f --- /dev/null +++ b/bin/tests/lwresconf_test.c @@ -0,0 +1,98 @@ +/* + * 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. + */ + +/* $Id: lwresconf_test.c,v 1.13 2007/06/19 23:46:59 tbox Exp $ */ + +#include <config.h> + +#include <stdlib.h> + +#include <isc/mem.h> +#include <isc/util.h> + +#include <lwres/lwres.h> + +#define USE_ISC_MEM + +static inline void +CHECK(int val, const char *msg) { + if (val != 0) { + fprintf(stderr, "%s returned %d\n", msg, val); + exit(1); + } +} + +#ifdef USE_ISC_MEM +/* + * Wrappers around our memory management stuff, for the lwres functions. + */ +static void * +mem_alloc(void *arg, size_t size) { + return (isc_mem_get(arg, size)); +} + +static void +mem_free(void *arg, void *mem, size_t size) { + isc_mem_put(arg, mem, size); +} +#endif + +int +main(int argc, char *argv[]) { + lwres_context_t *ctx; + const char *file = "/etc/resolv.conf"; + int ret; +#ifdef USE_ISC_MEM + isc_mem_t *mem; + isc_result_t result; +#endif + + if (argc > 1) { + file = argv[1]; + } + +#ifdef USE_ISC_MEM + mem = NULL; + result = isc_mem_create(0, 0, &mem); + INSIST(result == ISC_R_SUCCESS); +#endif + + ctx = NULL; +#ifdef USE_ISC_MEM + ret = lwres_context_create(&ctx, mem, mem_alloc, mem_free, 0); +#else + ret = lwres_context_create(&ctx, NULL, NULL, NULL, 0); +#endif + CHECK(ret, "lwres_context_create"); + + lwres_conf_init(ctx); + if (lwres_conf_parse(ctx, file) == 0) { + lwres_conf_print(ctx, stderr); + } else { + perror("lwres_conf_parse"); + } + + lwres_conf_clear(ctx); + lwres_context_destroy(&ctx); + +#ifdef USE_ISC_MEM + isc_mem_stats(mem, stdout); + isc_mem_destroy(&mem); +#endif + + return (0); +} diff --git a/bin/tests/master/Makefile.in b/bin/tests/master/Makefile.in new file mode 100644 index 0000000..03125da --- /dev/null +++ b/bin/tests/master/Makefile.in @@ -0,0 +1,58 @@ +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 1999-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. + +# $Id: Makefile.in,v 1.28 2007/06/19 23:47:00 tbox Exp $ + +srcdir = @srcdir@ +VPATH = @srcdir@ +top_srcdir = @top_srcdir@ + +@BIND9_MAKE_INCLUDES@ + +CINCLUDES = ${TEST_INCLUDES} ${DNS_INCLUDES} ${ISC_INCLUDES} + +CDEFINES = +CWARNINGS = + +# Note that we do not want to use libtool for libt_api +DNSLIBS = ../../../lib/dns/libdns.@A@ @DNS_CRYPTO_LIBS@ +ISCLIBS = ../../../lib/isc/libisc.@A@ + +DNSDEPLIBS = ../../../lib/dns/libdns.@A@ +ISCDEPLIBS = ../../../lib/isc/libisc.@A@ + +DEPLIBS = ${DNSDEPLIBS} ${ISCDEPLIBS} + +LIBS = ${DNSLIBS} ${ISCLIBS} @LIBS@ + +TLIB = ../../../lib/tests/libt_api.@A@ + +TARGETS = t_master@EXEEXT@ + +SRCS = t_master.c + +@BIND9_MAKE_RULES@ + +t_master@EXEEXT@: t_master.@O@ ${DEPLIBS} ${TLIB} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ t_master.@O@ ${TLIB} ${LIBS} + +test: t_master@EXEEXT@ + -@ ./t_master@EXEEXT@ -c @top_srcdir@/t_config -b @srcdir@ -a + +testhelp: + @ ./t_master@EXEEXT@ -h + +clean distclean:: + rm -f ${TARGETS} diff --git a/bin/tests/master/dns_master_load_10_data b/bin/tests/master/dns_master_load_10_data new file mode 100644 index 0000000..cfaa3fb --- /dev/null +++ b/bin/tests/master/dns_master_load_10_data @@ -0,0 +1,12 @@ +# +# test data for dns_master_load test 9 +# +# format is: +# masterfile origin class expected_result +# where +# masterfile name is the name of a file containing master data +# origin is the origin +# class is the zone's class +# expected_result is a text representation of a dns_result_t +# +master10.data test in ISC_R_SUCCESS diff --git a/bin/tests/master/dns_master_load_11_data b/bin/tests/master/dns_master_load_11_data new file mode 100644 index 0000000..7b667b2 --- /dev/null +++ b/bin/tests/master/dns_master_load_11_data @@ -0,0 +1,12 @@ +# +# test data for dns_master_load test 11 +# +# format is: +# masterfile origin class expected_result +# where +# masterfile name is the name of a file containing master data +# origin is the origin +# class is the zone's class +# expected_result is a text representation of a dns_result_t +# +master11.data test in ISC_R_SUCCESS diff --git a/bin/tests/master/dns_master_load_1_data b/bin/tests/master/dns_master_load_1_data new file mode 100644 index 0000000..fc92c74 --- /dev/null +++ b/bin/tests/master/dns_master_load_1_data @@ -0,0 +1,12 @@ +# +# test data for dns_master_load test 1 +# +# format is: +# masterfile origin class expected_result +# where +# masterfile name is the name of a file containing master data +# origin is the origin +# class is the zone's class +# expected_result is a text representation of a dns_result_t +# +master1.data test in ISC_R_SUCCESS diff --git a/bin/tests/master/dns_master_load_2_data b/bin/tests/master/dns_master_load_2_data new file mode 100644 index 0000000..a6e44b3 --- /dev/null +++ b/bin/tests/master/dns_master_load_2_data @@ -0,0 +1,12 @@ +# +# test data for dns_master_load test 2 +# +# format is: +# masterfile origin class expected_result +# where +# masterfile name is the name of a file containing master data +# origin is the origin +# class is the zone's class +# expected_result is a text representation of a dns_result_t +# +master2.data test in ISC_R_UNEXPECTEDEND diff --git a/bin/tests/master/dns_master_load_3_data b/bin/tests/master/dns_master_load_3_data new file mode 100644 index 0000000..9dbdfb2 --- /dev/null +++ b/bin/tests/master/dns_master_load_3_data @@ -0,0 +1,12 @@ +# +# test data for dns_master_load test 3 +# +# format is: +# masterfile origin class expected_result +# where +# masterfile name is the name of a file containing master data +# origin is the origin +# class is the zone's class +# expected_result is a text representation of a dns_result_t +# +master3.data test in DNS_R_NOOWNER diff --git a/bin/tests/master/dns_master_load_4_data b/bin/tests/master/dns_master_load_4_data new file mode 100644 index 0000000..66ad1ff --- /dev/null +++ b/bin/tests/master/dns_master_load_4_data @@ -0,0 +1,12 @@ +# +# test data for dns_master_load test 4 +# +# format is: +# masterfile origin class expected_result +# where +# masterfile name is the name of a file containing master data +# origin is the origin +# class is the zone's class +# expected_result is a text representation of a dns_result_t +# +master4.data test in ISC_R_SUCCESS diff --git a/bin/tests/master/dns_master_load_5_data b/bin/tests/master/dns_master_load_5_data new file mode 100644 index 0000000..56e33ba --- /dev/null +++ b/bin/tests/master/dns_master_load_5_data @@ -0,0 +1,12 @@ +# +# test data for dns_master_load test 5 +# +# format is: +# masterfile origin class expected_result +# where +# masterfile name is the name of a file containing master data +# origin is the origin +# class is the zone's class +# expected_result is a text representation of a dns_result_t +# +master5.data test in DNS_R_BADCLASS diff --git a/bin/tests/master/dns_master_load_6_data b/bin/tests/master/dns_master_load_6_data new file mode 100644 index 0000000..d14aa88 --- /dev/null +++ b/bin/tests/master/dns_master_load_6_data @@ -0,0 +1,12 @@ +# +# test data for dns_master_load test 6 +# +# format is: +# masterfile origin class expected_result +# where +# masterfile name is the name of a file containing master data +# origin is the origin +# class is the zone's class +# expected_result is a text representation of a dns_result_t +# +master6.data test in ISC_R_SUCCESS diff --git a/bin/tests/master/dns_master_load_7_data b/bin/tests/master/dns_master_load_7_data new file mode 100644 index 0000000..dbe7ef9 --- /dev/null +++ b/bin/tests/master/dns_master_load_7_data @@ -0,0 +1,12 @@ +# +# test data for dns_master_load test 7 +# +# format is: +# masterfile origin class expected_result +# where +# masterfile name is the name of a file containing master data +# origin is the origin +# class is the zone's class +# expected_result is a text representation of a dns_result_t +# +master7.data test in ISC_R_SUCCESS diff --git a/bin/tests/master/dns_master_load_8_data b/bin/tests/master/dns_master_load_8_data new file mode 100644 index 0000000..b109d43 --- /dev/null +++ b/bin/tests/master/dns_master_load_8_data @@ -0,0 +1,12 @@ +# +# test data for dns_master_load test 8 +# +# format is: +# masterfile origin class expected_result +# where +# masterfile name is the name of a file containing master data +# origin is the origin +# class is the zone's class +# expected_result is a text representation of a dns_result_t +# +master8.data test in DNS_R_SEENINCLUDE diff --git a/bin/tests/master/dns_master_load_9_data b/bin/tests/master/dns_master_load_9_data new file mode 100644 index 0000000..af36072 --- /dev/null +++ b/bin/tests/master/dns_master_load_9_data @@ -0,0 +1,12 @@ +# +# test data for dns_master_load test 9 +# +# format is: +# masterfile origin class expected_result +# where +# masterfile name is the name of a file containing master data +# origin is the origin +# class is the zone's class +# expected_result is a text representation of a dns_result_t +# +master9.data test in DNS_R_BADCLASS diff --git a/bin/tests/master/master1.data b/bin/tests/master/master1.data new file mode 100644 index 0000000..9b81474 --- /dev/null +++ b/bin/tests/master/master1.data @@ -0,0 +1,11 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +a in ns ns.vix.com. +a in ns ns2vix.com. +a in ns ns3vix.com. +b in a 1.2.3.4 diff --git a/bin/tests/master/master10.data b/bin/tests/master/master10.data new file mode 100644 index 0000000..9ee052f --- /dev/null +++ b/bin/tests/master/master10.data @@ -0,0 +1,7 @@ +; +; the following black line contains spaces + +; +@ 300 IN A 10.0.0.1 + ; +; diff --git a/bin/tests/master/master11.data b/bin/tests/master/master11.data new file mode 100644 index 0000000..0aaec25 --- /dev/null +++ b/bin/tests/master/master11.data @@ -0,0 +1,6 @@ +; +; The following serial number contains a leading 0 and a 9 so the +; we can catch cases where it is incorrectly treated as a octal +; number. +; +@ 300 IN SOA ns hostmaster 00090000 1200 3600 604800 300 diff --git a/bin/tests/master/master2.data b/bin/tests/master/master2.data new file mode 100644 index 0000000..b8ca38d --- /dev/null +++ b/bin/tests/master/master2.data @@ -0,0 +1,11 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +a in ns +a in ns ns2vix.com. +a in ns ns3vix.com. +b in a 1.2.3.4 diff --git a/bin/tests/master/master3.data b/bin/tests/master/master3.data new file mode 100644 index 0000000..7283af6 --- /dev/null +++ b/bin/tests/master/master3.data @@ -0,0 +1,11 @@ +$TTL 1000 + in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum + in ns ns.vix.com + in ns ns2vix.com. +a in ns ns3vix.com. +b in a 1.2.3.4 diff --git a/bin/tests/master/master4.data b/bin/tests/master/master4.data new file mode 100644 index 0000000..3a694ea --- /dev/null +++ b/bin/tests/master/master4.data @@ -0,0 +1,11 @@ + +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +a in ns ns.vix.com. +a in ns ns2vix.com. +a in ns ns3vix.com. +b in a 1.2.3.4 diff --git a/bin/tests/master/master5.data b/bin/tests/master/master5.data new file mode 100644 index 0000000..95234bd --- /dev/null +++ b/bin/tests/master/master5.data @@ -0,0 +1,11 @@ +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum +a any ns ns.vix.com. +a in ns ns2vix.com. +a in ns ns3vix.com. +b in a 1.2.3.4 diff --git a/bin/tests/master/master6.data b/bin/tests/master/master6.data new file mode 100644 index 0000000..a9a37bb --- /dev/null +++ b/bin/tests/master/master6.data @@ -0,0 +1,33 @@ + +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum + +secure1 3600 IN DNSKEY ( + FLAG2|FLAG4|FLAG5|NTYP3|FLAG8|FLAG9|FLAG10|FLAG11|SIG15 + 3 3 + ArT0a8FtOZWEONG2YQVl9+RA34op30JPz4NPEroCxm2yImT2 + 2OYggnPIzrgayyepgKU1PfTTypnJDTwrSrtISyEsj7tjM7/n + 03DP8VWSn0aLwpUuc7Sx9vtM1Wi+YeiA4Bv2Oz1VB9de4qql + sIq+KLn8J4wz95bGnJ0mHUB7oTDJ3Hl1zeaCMdX69Kr46yAY + AvGJJdGGDYxYgxzx2zNdzypkYSkxpdsNqUt38tabSfdvCn12 + pnmSWjlVJsjHhsaYnrPhouN5acOXMNbxNVbGU5LZ8Es6EYbV + /7YMt8VUkA8/8UCszBBT7XAJ3OFjiMO8mvxrZZFzvwJlPBQ1 + oFq/TNZlSe+N ) + +secure2 3600 in DNSKEY ( + flag2|flag4|flag5|ntyp3|flag8|flag9|flag10|flag11|sig15 + 3 3 + ArT0a8FtOZWEONG2YQVl9+RA34op30JPz4NPEroCxm2yImT2 + 2OYggnPIzrgayyepgKU1PfTTypnJDTwrSrtISyEsj7tjM7/n + 03DP8VWSn0aLwpUuc7Sx9vtM1Wi+YeiA4Bv2Oz1VB9de4qql + sIq+KLn8J4wz95bGnJ0mHUB7oTDJ3Hl1zeaCMdX69Kr46yAY + AvGJJdGGDYxYgxzx2zNdzypkYSkxpdsNqUt38tabSfdvCn12 + pnmSWjlVJsjHhsaYnrPhouN5acOXMNbxNVbGU5LZ8Es6EYbV + /7YMt8VUkA8/8UCszBBT7XAJ3OFjiMO8mvxrZZFzvwJlPBQ1 + oFq/TNZlSe+N ) + diff --git a/bin/tests/master/master7.data b/bin/tests/master/master7.data new file mode 100644 index 0000000..2638b5d --- /dev/null +++ b/bin/tests/master/master7.data @@ -0,0 +1,17 @@ + +$TTL 1000 +@ in soa localhost. postmaster.localhost. ( + 1993050801 ;serial + 3600 ;refresh + 1800 ;retry + 604800 ;expiration + 3600 ) ;minimum + +secure1 3600 IN DNSKEY ( + NOKEY|FLAG2|FLAG4|FLAG5|NTYP3|FLAG8|FLAG9|FLAG10|FLAG11|SIG15 + 3 3 ) + +secure2 3600 in DNSKEY ( + nokey|flag2|flag4|flag5|ntyp3|flag8|flag9|flag10|flag11|sig15 + 3 3 ) + diff --git a/bin/tests/master/master8.data b/bin/tests/master/master8.data new file mode 100644 index 0000000..58bded9 --- /dev/null +++ b/bin/tests/master/master8.data @@ -0,0 +1,4 @@ +; +; master7.data contains a good zone file +; +$include master7.data diff --git a/bin/tests/master/master9.data b/bin/tests/master/master9.data new file mode 100644 index 0000000..e7bcf7e --- /dev/null +++ b/bin/tests/master/master9.data @@ -0,0 +1,4 @@ +; +; master5.data is bad +; +$include master5.data diff --git a/bin/tests/master/t_master.c b/bin/tests/master/t_master.c new file mode 100644 index 0000000..4693114 --- /dev/null +++ b/bin/tests/master/t_master.c @@ -0,0 +1,336 @@ +/* + * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1998-2001, 2003 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. + */ + +/* $Id: t_master.c,v 1.36 2007/06/19 23:47:00 tbox Exp $ */ + +#include <config.h> + +#include <ctype.h> +#include <stdlib.h> + +#include <isc/buffer.h> +#include <isc/mem.h> +#include <isc/string.h> /* Required for HP/UX (and others?) */ +#include <isc/util.h> + +#include <dns/callbacks.h> +#include <dns/master.h> +#include <dns/name.h> +#include <dns/rdataclass.h> +#include <dns/rdataset.h> +#include <dns/result.h> + +#include <tests/t_api.h> + +#define BUFLEN 255 +#define BIGBUFLEN (64 * 1024) + +static isc_result_t +t1_add_callback(void *arg, dns_name_t *owner, dns_rdataset_t *dataset); + +isc_mem_t *T1_mctx; +char *Tokens[T_MAXTOKS + 1]; + +static isc_result_t +t1_add_callback(void *arg, dns_name_t *owner, dns_rdataset_t *dataset) { + char buf[BIGBUFLEN]; + isc_buffer_t target; + isc_result_t result; + + UNUSED(arg); + + isc_buffer_init(&target, buf, BIGBUFLEN); + result = dns_rdataset_totext(dataset, owner, ISC_FALSE, ISC_FALSE, + &target); + if (result != ISC_R_SUCCESS) + t_info("dns_rdataset_totext: %s\n", dns_result_totext(result)); + + return(result); +} + +static int +test_master(char *testfile, char *origin, char *class, isc_result_t exp_result) +{ + int result; + int len; + isc_result_t isc_result; + isc_result_t dns_result; + dns_name_t dns_origin; + isc_buffer_t source; + isc_buffer_t target; + unsigned char name_buf[BUFLEN]; + dns_rdatacallbacks_t callbacks; + dns_rdataclass_t rdataclass; + isc_textregion_t textregion; + + result = T_UNRESOLVED; + if (T1_mctx == NULL) + isc_result = isc_mem_create(0, 0, &T1_mctx); + else + isc_result = ISC_R_SUCCESS; + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %d\n", isc_result); + return(T_UNRESOLVED); + } + + 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); + dns_result = dns_name_fromtext(&dns_origin, &source, dns_rootname, + ISC_FALSE, &target); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext failed %s\n", + dns_result_totext(dns_result)); + return(T_UNRESOLVED); + } + + dns_rdatacallbacks_init_stdio(&callbacks); + callbacks.add = t1_add_callback; + + textregion.base = class; + textregion.length = strlen(class); + + dns_result = dns_rdataclass_fromtext(&rdataclass, &textregion); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rdataclass_fromtext failed %s\n", + dns_result_totext(dns_result)); + return(T_UNRESOLVED); + } + + dns_result = dns_master_loadfile( testfile, + &dns_origin, + &dns_origin, + rdataclass, + ISC_TRUE, + &callbacks, + T1_mctx); + + if (dns_result == exp_result) + result = T_PASS; + else { + t_info("dns_master_loadfile: got %s, expected %s\n", + dns_result_totext(dns_result), + dns_result_totext(exp_result)); + result = T_FAIL; + } + return(result); +} + +static int +test_master_x(const char *filename) { + FILE *fp; + char *p; + int line; + int cnt; + int result; + + result = T_UNRESOLVED; + + fp = fopen(filename, "r"); + if (fp != NULL) { + line = 0; + while ((p = t_fgetbs(fp)) != NULL) { + + ++line; + + /* + * Skip comment lines. + */ + if ((isspace(*p & 0xff)) || (*p == '#')) { + (void)free(p); + continue; + } + + /* + * Name of data file, origin, zclass, expected result. + */ + cnt = t_bustline(p, Tokens); + if (cnt == 4) { + result = test_master(Tokens[0], Tokens[1], + Tokens[2], + t_dns_result_fromtext(Tokens[3])); + } else { + t_info("bad format in %s at line %d\n", + filename, line); + } + + (void)free(p); + } + (void)fclose(fp); + } else { + t_info("Missing datafile %s\n", filename); + } + return(result); +} + +static const char *a1 = "dns_master_loadfile loads a valid master file and " + "returns ISC_R_SUCCESS"; +static void +t1(void) { + int result; + t_assert("dns_master_loadfile", 1, T_REQUIRED, a1); + result = test_master_x("dns_master_load_1_data"); + t_result(result); +} + +static const char *a2 = + "dns_master_loadfile returns ISC_R_UNEXPECTEDEND when the " + "masterfile input ends unexpectedly"; + +static void +t2(void) { + int result; + t_assert("dns_master_loadfile", 2, T_REQUIRED, a2); + result = test_master_x("dns_master_load_2_data"); + t_result(result); +} + +static const char *a3 = "dns_master_loadfile returns DNS_R_NOOWNER when the " + "an ownername is not specified"; + +static void +t3() { + int result; + t_assert("dns_master_loadfile", 3, T_REQUIRED, a3); + result = test_master_x("dns_master_load_3_data"); + t_result(result); +} + +static const char *a4 = "dns_master_loadfile accepts broken zone files " + "where the first record has an undefined TTL, " + "as long as it is a SOA"; + +static void +t4() { + int result; + t_assert("dns_master_loadfile", 4, T_REQUIRED, a4); + result = test_master_x("dns_master_load_4_data"); + t_result(result); +} + +static const char *a5 = "dns_master_loadfile returns DNS_R_BADCLASS when the " + "the record class did not match the zone class"; + +static void +t5() { + int result; + + t_assert("dns_master_loadfile", 5, T_REQUIRED, a5); + result = test_master_x("dns_master_load_5_data"); + + t_result(result); +} + +static const char *a6 = + "dns_master_loadfile understands DNSKEY RR specifications " + "containing key material"; + +static void +t6() { + int result; + + t_assert("dns_master_loadfile", 6, T_REQUIRED, a6); + result = test_master_x("dns_master_load_6_data"); + + t_result(result); +} + +static const char *a7 = + "dns_master_loadfile understands DNSKEY RR specifications " + "containing no key material"; + +static void +t7() { + int result; + + t_assert("dns_master_loadfile", 7, T_REQUIRED, a7); + result = test_master_x("dns_master_load_7_data"); + + t_result(result); +} + +static const char *a8 = + "dns_master_loadfile understands $INCLUDE"; + +static void +t8() { + int result; + + t_assert("dns_master_loadfile", 8, T_REQUIRED, a8); + result = test_master_x("dns_master_load_8_data"); + + t_result(result); +} + +static const char *a9 = + "dns_master_loadfile understands $INCLUDE with failure"; + +static void +t9() { + int result; + + t_assert("dns_master_loadfile", 9, T_REQUIRED, a9); + result = test_master_x("dns_master_load_9_data"); + + t_result(result); +} + +static const char *a10 = + "dns_master_loadfile non-empty blank lines"; + +static void +t10() { + int result; + + t_assert("dns_master_loadfile", 10, T_REQUIRED, a10); + result = test_master_x("dns_master_load_10_data"); + + t_result(result); +} + +static const char *a11 = + "dns_master_loadfile allow leading zeros in SOA"; + +static void +t11() { + int result; + + t_assert("dns_master_loadfile", 11, T_REQUIRED, a11); + result = test_master_x("dns_master_load_11_data"); + + t_result(result); +} + + +testspec_t T_testlist[] = { + { t1, "ISC_R_SUCCESS" }, + { t2, "ISC_R_UNEXPECTEDEND" }, + { t3, "DNS_NOOWNER" }, + { t4, "DNS_NOTTL" }, + { t5, "DNS_BADCLASS" }, + { t6, "DNSKEY RR 1" }, + { t7, "DNSKEY RR 2" }, + { t8, "$INCLUDE" }, + { t9, "$INCLUDE w/ DNS_BADCLASS" }, + { t10, "non empty blank lines" }, + { t11, "leading zeros in serial" }, + { NULL, NULL } +}; + diff --git a/bin/tests/master_test.c b/bin/tests/master_test.c new file mode 100644 index 0000000..f77c8f6 --- /dev/null +++ b/bin/tests/master_test.c @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1999-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. + */ + +/* $Id: master_test.c,v 1.30 2007/06/19 23:46:59 tbox Exp $ */ + +#include <config.h> + +#include <stdlib.h> +#include <string.h> + +#include <isc/buffer.h> +#include <isc/mem.h> +#include <isc/util.h> + +#include <dns/callbacks.h> +#include <dns/master.h> +#include <dns/name.h> +#include <dns/rdataset.h> +#include <dns/result.h> + +isc_mem_t *mctx; + +static isc_result_t +print_dataset(void *arg, dns_name_t *owner, dns_rdataset_t *dataset) { + char buf[64*1024]; + isc_buffer_t target; + isc_result_t result; + + UNUSED(arg); + + isc_buffer_init(&target, buf, 64*1024); + result = dns_rdataset_totext(dataset, owner, ISC_FALSE, ISC_FALSE, + &target); + if (result == ISC_R_SUCCESS) + fprintf(stdout, "%.*s\n", (int)target.used, + (char*)target.base); + else + fprintf(stdout, "dns_rdataset_totext: %s\n", + dns_result_totext(result)); + + return (ISC_R_SUCCESS); +} + +int +main(int argc, char *argv[]) { + isc_result_t result; + dns_name_t origin; + isc_buffer_t source; + isc_buffer_t target; + unsigned char name_buf[255]; + dns_rdatacallbacks_t callbacks; + + UNUSED(argc); + + RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS); + + if (argv[1]) { + isc_buffer_init(&source, argv[1], strlen(argv[1])); + isc_buffer_add(&source, strlen(argv[1])); + isc_buffer_setactive(&source, strlen(argv[1])); + isc_buffer_init(&target, name_buf, 255); + dns_name_init(&origin, NULL); + result = dns_name_fromtext(&origin, &source, dns_rootname, + ISC_FALSE, &target); + if (result != ISC_R_SUCCESS) { + fprintf(stdout, "dns_name_fromtext: %s\n", + dns_result_totext(result)); + exit(1); + } + + dns_rdatacallbacks_init_stdio(&callbacks); + callbacks.add = print_dataset; + + result = dns_master_loadfile(argv[1], &origin, &origin, + dns_rdataclass_in, 0, + &callbacks, mctx); + fprintf(stdout, "dns_master_loadfile: %s\n", + dns_result_totext(result)); + } + return (0); +} diff --git a/bin/tests/mem/Makefile.in b/bin/tests/mem/Makefile.in new file mode 100644 index 0000000..135a8e3 --- /dev/null +++ b/bin/tests/mem/Makefile.in @@ -0,0 +1,55 @@ +# Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 1998-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. + +# $Id: Makefile.in,v 1.34 2007/06/19 23:47:00 tbox Exp $ + +srcdir = @srcdir@ +VPATH = @srcdir@ +top_srcdir = @top_srcdir@ + +@BIND9_MAKE_INCLUDES@ + +CINCLUDES = ${TEST_INCLUDES} ${ISC_INCLUDES} + +CDEFINES = +CWARNINGS = + +ISCLIBS = ../../../lib/isc/libisc.@A@ +TAPIDEPLIBS = ../../../lib/tests/libt_api.@A@ + +ISCDEPLIBS = ../../../lib/isc/libisc.@A@ +TAPILIBS = ../../../lib/tests/libt_api.@A@ + +DEPLIBS = ${TAPIDEPLIBS} ${ISCDEPLIBS} + +LIBS = ${TAPILIBS} ${ISCLIBS} @LIBS@ + +TARGETS = t_mem@EXEEXT@ + +SRCS = t_mem.c + +@BIND9_MAKE_RULES@ + +t_mem@EXEEXT@: t_mem.@O@ ${DEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ t_mem.@O@ ${LIBS} + +test: t_mem@EXEEXT@ + -@./t_mem@EXEEXT@ -b @srcdir@ -q 450 -a + +testhelp: + @./t_mem@EXEEXT@ -h + +clean distclean:: + rm -f ${TARGETS} diff --git a/bin/tests/mem/t_mem.c b/bin/tests/mem/t_mem.c new file mode 100644 index 0000000..7313637 --- /dev/null +++ b/bin/tests/mem/t_mem.c @@ -0,0 +1,208 @@ +/* + * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1999-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. + */ + +/* $Id: t_mem.c,v 1.13 2007/06/19 23:47:00 tbox Exp $ */ + +#include <config.h> + +#include <isc/mem.h> + +#include <tests/t_api.h> + +/* + * Adapted from the original mempool_test.c program. + */ +isc_mem_t *mctx; + +#define MP1_FREEMAX 10 +#define MP1_FILLCNT 10 +#define MP1_MAXALLOC 30 + +#define MP2_FREEMAX 25 +#define MP2_FILLCNT 25 + +static int +memtest(void) { + int nfails; + void *items1[50]; + void *items2[50]; + void *tmp; + isc_mempool_t *mp1, *mp2; + isc_result_t isc_result; + unsigned int i, j; + int rval; + + + nfails = 0; + mctx = NULL; + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + ++nfails; + return(nfails); + } + + mp1 = NULL; + isc_result = isc_mempool_create(mctx, 24, &mp1); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mempool_create failed %s\n", + isc_result_totext(isc_result)); + ++nfails; + return(nfails); + } + + mp2 = NULL; + isc_result = isc_mempool_create(mctx, 31, &mp2); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mempool_create failed %s\n", + isc_result_totext(isc_result)); + ++nfails; + return(nfails); + } + + if (T_debug) + isc_mem_stats(mctx, stderr); + + t_info("setting freemax to %d\n", MP1_FREEMAX); + isc_mempool_setfreemax(mp1, MP1_FREEMAX); + t_info("setting fillcount to %d\n", MP1_FILLCNT); + isc_mempool_setfillcount(mp1, MP1_FILLCNT); + t_info("setting maxalloc to %d\n", MP1_MAXALLOC); + isc_mempool_setmaxalloc(mp1, MP1_MAXALLOC); + + /* + * Allocate MP1_MAXALLOC items from the pool. This is our max. + */ + for (i = 0; i < MP1_MAXALLOC; i++) { + items1[i] = isc_mempool_get(mp1); + if (items1[i] == NULL) { + t_info("isc_mempool_get unexpectedly failed\n"); + ++nfails; + } + } + + /* + * Try to allocate one more. This should fail. + */ + tmp = isc_mempool_get(mp1); + if (tmp != NULL) { + t_info("isc_mempool_get unexpectedly succeeded\n"); + ++nfails; + } + + /* + * Free the first 11 items. Verify that there are 10 free items on + * the free list (which is our max). + */ + + for (i = 0; i < 11; i++) { + isc_mempool_put(mp1, items1[i]); + items1[i] = NULL; + } + + rval = isc_mempool_getfreecount(mp1); + if (rval != 10) { + t_info("isc_mempool_getfreecount returned %d, expected %d\n", + rval, MP1_FREEMAX); + ++nfails; + } + + rval = isc_mempool_getallocated(mp1); + if (rval != 19) { + t_info("isc_mempool_getallocated returned %d, expected %d\n", + rval, MP1_MAXALLOC - 11); + ++nfails; + } + + if (T_debug) + isc_mem_stats(mctx, stderr); + + /* + * Now, beat up on mp2 for a while. Allocate 50 items, then free + * them, then allocate 50 more, etc. + */ + + t_info("setting freemax to %d\n", MP2_FREEMAX); + isc_mempool_setfreemax(mp2, 25); + t_info("setting fillcount to %d\n", MP2_FILLCNT); + isc_mempool_setfillcount(mp2, 25); + + t_info("exercising the memory pool\n"); + for (j = 0; j < 500000; j++) { + for (i = 0; i < 50; i++) { + items2[i] = isc_mempool_get(mp2); + if (items2[i] == NULL) { + t_info("items2[%d] is unexpectedly null\n", i); + ++nfails; + } + } + for (i = 0; i < 50; i++) { + isc_mempool_put(mp2, items2[i]); + items2[i] = NULL; + } + if (j % 50000 == 0) + t_info("...\n"); + } + + /* + * Free all the other items and blow away this pool. + */ + for (i = 11; i < MP1_MAXALLOC; i++) { + isc_mempool_put(mp1, items1[i]); + items1[i] = NULL; + } + + isc_mempool_destroy(&mp1); + + if (T_debug) + isc_mem_stats(mctx, stderr); + + isc_mempool_destroy(&mp2); + + if (T_debug) + isc_mem_stats(mctx, stderr); + + isc_mem_destroy(&mctx); + + return(0); +} + +static const char *a1 = + "the memory module supports the creation of memory contexts " + "and the management of memory pools."; +static void +t1(void) { + int rval; + int result; + + t_assert("mem", 1, T_REQUIRED, a1); + + rval = memtest(); + + if (rval == 0) + result = T_PASS; + else + result = T_FAIL; + t_result(result); +} + +testspec_t T_testlist[] = { + { t1, "basic memory subsystem" }, + { NULL, NULL } +}; + diff --git a/bin/tests/mempool_test.c b/bin/tests/mempool_test.c new file mode 100644 index 0000000..9423b3a --- /dev/null +++ b/bin/tests/mempool_test.c @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1999-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. + */ + +/* $Id: mempool_test.c,v 1.17 2007/06/19 23:46:59 tbox Exp $ */ + +#include <config.h> + +#include <isc/mem.h> +#include <isc/util.h> + +isc_mem_t *mctx; + +int +main(int argc, char *argv[]) { + void *items1[50]; + void *items2[50]; + void *tmp; + isc_mempool_t *mp1, *mp2; + unsigned int i, j; + isc_mutex_t lock; + + UNUSED(argc); + UNUSED(argv); + + isc_mem_debugging = ISC_MEM_DEBUGRECORD; + + RUNTIME_CHECK(isc_mutex_init(&lock) == ISC_R_SUCCESS); + + mctx = NULL; + RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS); + + mp1 = NULL; + RUNTIME_CHECK(isc_mempool_create(mctx, 24, &mp1) == ISC_R_SUCCESS); + + mp2 = NULL; + RUNTIME_CHECK(isc_mempool_create(mctx, 31, &mp2) == ISC_R_SUCCESS); + + isc_mempool_associatelock(mp1, &lock); + isc_mempool_associatelock(mp2, &lock); + + isc_mem_stats(mctx, stderr); + + isc_mempool_setfreemax(mp1, 10); + isc_mempool_setfillcount(mp1, 10); + isc_mempool_setmaxalloc(mp1, 30); + + /* + * Allocate 30 items from the pool. This is our max. + */ + for (i = 0; i < 30; i++) { + items1[i] = isc_mempool_get(mp1); + RUNTIME_CHECK(items1[i] != NULL); + } + + /* + * Try to allocate one more. This should fail. + */ + tmp = isc_mempool_get(mp1); + RUNTIME_CHECK(tmp == NULL); + + /* + * Free the first 11 items. Verify that there are 10 free items on + * the free list (which is our max). + */ + + for (i = 0; i < 11; i++) { + isc_mempool_put(mp1, items1[i]); + items1[i] = NULL; + } + + RUNTIME_CHECK(isc_mempool_getfreecount(mp1) == 10); + RUNTIME_CHECK(isc_mempool_getallocated(mp1) == 19); + + isc_mem_stats(mctx, stderr); + + /* + * Now, beat up on mp2 for a while. Allocate 50 items, then free + * them, then allocate 50 more, etc. + */ + isc_mempool_setfreemax(mp2, 25); + isc_mempool_setfillcount(mp2, 25); + for (j = 0; j < 5000; j++) { + for (i = 0; i < 50; i++) { + items2[i] = isc_mempool_get(mp2); + RUNTIME_CHECK(items2[i] != NULL); + } + for (i = 0; i < 50; i++) { + isc_mempool_put(mp2, items2[i]); + items2[i] = NULL; + } + } + + /* + * Free all the other items and blow away this pool. + */ + for (i = 11; i < 30; i++) { + isc_mempool_put(mp1, items1[i]); + items1[i] = NULL; + } + + isc_mempool_destroy(&mp1); + + isc_mem_stats(mctx, stderr); + + isc_mempool_destroy(&mp2); + + isc_mem_stats(mctx, stderr); + + isc_mem_destroy(&mctx); + + DESTROYLOCK(&lock); + + return (0); +} diff --git a/bin/tests/name_test.c b/bin/tests/name_test.c new file mode 100644 index 0000000..799115f --- /dev/null +++ b/bin/tests/name_test.c @@ -0,0 +1,352 @@ +/* + * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1998-2001, 2003 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. + */ + +/* $Id: name_test.c,v 1.41 2007/06/19 23:46:59 tbox Exp $ */ + +#include <config.h> + +#include <stdlib.h> + +#include <isc/commandline.h> +#include <isc/string.h> +#include <isc/util.h> + +#include <dns/fixedname.h> +#include <dns/result.h> + +static void +print_wirename(isc_region_t *name) { + unsigned char *ccurr, *cend; + + if (name->length == 0) { + printf("<empty wire name>\n"); + return; + } + ccurr = name->base; + cend = ccurr + name->length; + while (ccurr != cend) + printf("%02x ", *ccurr++); + printf("\n"); +} + +static void +print_name(dns_name_t *name) { + isc_result_t result; + isc_buffer_t source; + isc_region_t r; + char s[1000]; + + isc_buffer_init(&source, s, sizeof(s)); + if (dns_name_countlabels(name) > 0) + result = dns_name_totext(name, ISC_FALSE, &source); + else + result = ISC_R_SUCCESS; + if (result == ISC_R_SUCCESS) { + isc_buffer_usedregion(&source, &r); + if (r.length > 0) + printf("%.*s\n", (int)r.length, r.base); + else + printf("<empty text name>\n"); + } else + printf("error: %s\n", dns_result_totext(result)); +} + +int +main(int argc, char *argv[]) { + char s[1000]; + isc_result_t result; + dns_fixedname_t wname, wname2, oname, compname, downname; + isc_buffer_t source; + isc_region_t r; + dns_name_t *name, *origin, *comp, *down; + isc_boolean_t downcase = ISC_FALSE; + size_t len; + isc_boolean_t quiet = ISC_FALSE; + isc_boolean_t concatenate = ISC_FALSE; + isc_boolean_t got_name = ISC_FALSE; + isc_boolean_t check_absolute = ISC_FALSE; + isc_boolean_t check_wildcard = ISC_FALSE; + isc_boolean_t test_downcase = ISC_FALSE; + isc_boolean_t inplace = ISC_FALSE; + isc_boolean_t want_split = ISC_FALSE; + unsigned int labels, split_label = 0; + dns_fixedname_t fprefix, fsuffix; + dns_name_t *prefix, *suffix; + int ch; + + while ((ch = isc_commandline_parse(argc, argv, "acdiqs:w")) != -1) { + switch (ch) { + case 'a': + check_absolute = ISC_TRUE; + break; + case 'c': + concatenate = ISC_TRUE; + break; + case 'd': + test_downcase = ISC_TRUE; + break; + case 'i': + inplace = ISC_TRUE; + break; + case 'q': + quiet = ISC_TRUE; + break; + case 's': + want_split = ISC_TRUE; + split_label = atoi(isc_commandline_argument); + break; + case 'w': + check_wildcard = ISC_TRUE; + break; + } + } + + argc -= isc_commandline_index; + argv += isc_commandline_index; + + if (argc > 0) { + if (strcasecmp("none", argv[0]) == 0) + origin = NULL; + else { + len = strlen(argv[0]); + isc_buffer_init(&source, argv[0], len); + isc_buffer_add(&source, len); + dns_fixedname_init(&oname); + origin = &oname.name; + result = dns_name_fromtext(origin, &source, + dns_rootname, ISC_FALSE, + NULL); + if (result != 0) { + fprintf(stderr, + "dns_name_fromtext() failed: %d\n", + result); + exit(1); + } + } + } else if (concatenate) + origin = NULL; + else + origin = dns_rootname; + + if (argc >= 1) { + if (strcasecmp("none", argv[1]) == 0) + comp = NULL; + else { + len = strlen(argv[1]); + isc_buffer_init(&source, argv[1], len); + isc_buffer_add(&source, len); + dns_fixedname_init(&compname); + comp = &compname.name; + result = dns_name_fromtext(comp, &source, + origin, ISC_FALSE, NULL); + if (result != 0) { + fprintf(stderr, + "dns_name_fromtext() failed: %d\n", + result); + exit(1); + } + } + } else + comp = NULL; + + dns_fixedname_init(&wname); + name = dns_fixedname_name(&wname); + dns_fixedname_init(&wname2); + while (fgets(s, sizeof(s), stdin) != NULL) { + len = strlen(s); + if (len > 0U && s[len - 1] == '\n') { + s[len - 1] = '\0'; + len--; + } + isc_buffer_init(&source, s, len); + isc_buffer_add(&source, len); + + if (len > 0U) + result = dns_name_fromtext(name, &source, origin, + downcase, NULL); + else { + if (name == dns_fixedname_name(&wname)) + dns_fixedname_init(&wname); + else + dns_fixedname_init(&wname2); + result = ISC_R_SUCCESS; + } + + if (result != ISC_R_SUCCESS) { + printf("%s\n", dns_result_totext(result)); + if (name == dns_fixedname_name(&wname)) + dns_fixedname_init(&wname); + else + dns_fixedname_init(&wname2); + continue; + } + + if (check_absolute && dns_name_countlabels(name) > 0) { + if (dns_name_isabsolute(name)) + printf("absolute\n"); + else + printf("relative\n"); + } + if (check_wildcard && dns_name_countlabels(name) > 0) { + if (dns_name_iswildcard(name)) + printf("wildcard\n"); + else + printf("not wildcard\n"); + } + dns_name_toregion(name, &r); + if (!quiet) { + print_wirename(&r); + printf("%u labels, %u bytes.\n", + dns_name_countlabels(name), r.length); + } + + if (concatenate) { + if (got_name) { + printf("Concatenating.\n"); + result = dns_name_concatenate(&wname.name, + &wname2.name, + &wname2.name, + NULL); + name = &wname2.name; + if (result == ISC_R_SUCCESS) { + if (check_absolute && + dns_name_countlabels(name) > 0) { + if (dns_name_isabsolute(name)) + printf("absolute\n"); + else + printf("relative\n"); + } + if (check_wildcard && + dns_name_countlabels(name) > 0) { + if (dns_name_iswildcard(name)) + printf("wildcard\n"); + else + printf("not " + "wildcard\n"); + } + dns_name_toregion(name, &r); + if (!quiet) { + print_wirename(&r); + printf("%u labels, " + "%u bytes.\n", + dns_name_countlabels(name), + r.length); + } + } else + printf("%s\n", + dns_result_totext(result)); + got_name = ISC_FALSE; + } else + got_name = ISC_TRUE; + } + isc_buffer_init(&source, s, sizeof(s)); + if (dns_name_countlabels(name) > 0) + result = dns_name_totext(name, ISC_FALSE, &source); + else + result = ISC_R_SUCCESS; + if (result == ISC_R_SUCCESS) { + isc_buffer_usedregion(&source, &r); + if (r.length > 0) + printf("%.*s\n", (int)r.length, r.base); + else + printf("<empty text name>\n"); + if (!quiet) { + printf("%u bytes.\n", source.used); + } + } else + printf("%s\n", dns_result_totext(result)); + + if (test_downcase) { + if (inplace) { + down = name; + } else { + dns_fixedname_init(&downname); + down = dns_fixedname_name(&downname); + } + result = dns_name_downcase(name, down, NULL); + INSIST(result == ISC_R_SUCCESS); + if (!quiet) { + dns_name_toregion(down, &r); + print_wirename(&r); + printf("%u labels, %u bytes.\n", + dns_name_countlabels(down), + r.length); + } + isc_buffer_init(&source, s, sizeof(s)); + print_name(down); + } + + if (comp != NULL && dns_name_countlabels(name) > 0) { + int order; + unsigned int nlabels; + dns_namereln_t namereln; + + namereln = dns_name_fullcompare(name, comp, &order, + &nlabels); + if (!quiet) { + if (order < 0) + printf("<"); + else if (order > 0) + printf(">"); + else + printf("="); + switch (namereln) { + case dns_namereln_contains: + printf(", contains"); + break; + case dns_namereln_subdomain: + printf(", subdomain"); + break; + case dns_namereln_commonancestor: + printf(", common ancestor"); + break; + default: + break; + } + if (namereln != dns_namereln_none && + namereln != dns_namereln_equal) + printf(", nlabels = %u", nlabels); + printf("\n"); + } + printf("dns_name_equal() returns %s\n", + dns_name_equal(name, comp) ? "TRUE" : "FALSE"); + } + + labels = dns_name_countlabels(name); + if (want_split && split_label < labels) { + dns_fixedname_init(&fprefix); + prefix = dns_fixedname_name(&fprefix); + dns_fixedname_init(&fsuffix); + suffix = dns_fixedname_name(&fsuffix); + printf("splitting at label %u: ", split_label); + dns_name_split(name, split_label, prefix, suffix); + printf("\n prefix = "); + print_name(prefix); + printf(" suffix = "); + print_name(suffix); + } + + if (concatenate) { + if (got_name) + name = &wname2.name; + else + name = &wname.name; + } + } + + return (0); +} diff --git a/bin/tests/named.conf b/bin/tests/named.conf new file mode 100644 index 0000000..1f96981 --- /dev/null +++ b/bin/tests/named.conf @@ -0,0 +1,624 @@ +/* + * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1999-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. + */ + +/* $Id: named.conf,v 1.58 2007/06/19 23:46:59 tbox Exp $ */ + +/* + * This is a worthless, nonrunnable example of a named.conf file that has + * every conceivable syntax element in use. We use it to test the parser. + * It could also be used as a conceptual template for users of new features. + */ + +/* + * C-style comments are OK + */ + +// So are C++-style comments + +# So are shell-style comments + +// watch out for ";" -- it's important! + +options { + additional-from-auth true; + additional-from-cache false; + + version "my version string"; + random-device "/dev/random"; + directory "/tmp"; + + port 666; + + sig-validity-interval 33; + +# Obsolete + named-xfer "/usr/libexec/named-xfer"; // _PATH_XFER + + dump-file "named_dump.db"; // _PATH_DUMPFILE + pid-file "/var/run/named.pid"; // _PATH_PIDFILE + statistics-file "named.stats"; // _PATH_STATS + memstatistics-file "named.memstats"; // _PATH_MEMSTATS + + max-cache-ttl 999; + auth-nxdomain yes; // always set AA on NXDOMAIN. + // don't set this to 'no' unless + // you know what you're doing -- older + // servers won't like it. + +# Obsolete + deallocate-on-exit no; + + dialup yes; + +# Obsolete + fake-iquery no; + + fetch-glue yes; + has-old-clients yes; + host-statistics no; + +# Obsolete + multiple-cnames no; // if yes, then a name my have more + // than one CNAME RR. This use + // is non-standard and is not + // recommended, but it is available + // because previous releases supported + // it and it was used by large sites + // for load balancing. + + notify yes; // send NOTIFY messages. You can set + // notify on a zone-by-zone + // basis in the "zone" statement + // see (below) + recursion yes; + rfc2308-type1 no; + +# Obsolete + use-id-pool yes; + +# Obsolete + treat-cr-as-space yes; + + also-notify { 10.0.2.3; }; + + // The "forward" option is only meaningful if you've defined + // forwarders. "first" gives the normal BIND + // forwarding behavior, i.e. ask the forwarders first, and if that + // doesn't work then do the full lookup. You can also say + // "forward only;" which is what used to be specified with + // "slave" or "options forward-only". "only" will never attempt + // a full lookup; only the forwarders will be used. + forward first; + forwarders { + 1.2.3.4; + 5.6.7.8; + }; + + check-names master fail; + check-names slave warn; + check-names response ignore; + + allow-query { any; }; + allow-transfer { any; }; + allow-recursion { !any; }; + blackhole { 45/24; }; + + listen-on { + 10/24; + 10.0.0.3; + }; + + listen-on port 53 { any; }; + + listen-on { 5.6.7.8; }; + + listen-on port 1234 { + !1.2.3.4; + 1.2.3/24; + }; + + listen-on-v6 { + 1:1:1:1:1:1:1:1; + }; + + listen-on-v6 port 777 { + 2:2:2:2:2:2:2:2; + }; + + query-source-v6 address 8:7:6:5:4:3:2:1 port *; + query-source port * address 10.0.0.54 ; + + lame-ttl 444; + + max-transfer-time-in 300; + max-transfer-time-out 10; + max-transfer-idle-in 100; + max-transfer-idle-out 11; + + max-retry-time 1234; + min-retry-time 1111; + max-refresh-time 888; + min-refresh-time 777; + + max-ncache-ttl 333; + min-roots 15; + serial-queries 34; + + transfer-format one-answer; + + transfers-in 10; + transfers-per-ns 2; + transfers-out 0; + + transfer-source 10.0.0.5; + transfer-source-v6 4:3:2:1:5:6:7:8; + + request-ixfr yes; + provide-ixfr yes; + +# Now called 'provide-ixfr' +# maintain-ixfr-base no; // If yes, keep transaction log file for IXFR + + max-ixfr-log-size 20m; + coresize 100; + datasize 101; + files 230; + max-cache-size 1m; + stacksize 231; + cleaning-interval 1000; + heartbeat-interval 1001; + interface-interval 1002; + statistics-interval 1003; + + topology { + 10/8; + + !1.2.3/24; + + { 1.2/16; 3/8; }; + + + }; + + sortlist { 10/8; 11/8; }; + + tkey-domain "foo.com"; + tkey-dhkey "xyz" 666 ; + + rrset-order { + class IN type A name "foo" order random; + order cyclic; + }; +}; + +/* + * Control listeners, for "ndc". Every nameserver needs at least one. + */ +controls { + // 'inet' lines without a 'port' defaults to 'port 953' + // 'keys' must be used and the list must have at least one entry + inet * port 52 allow { any; } keys { "key2"; }; + unix "/var/run/ndc" perm 0600 owner 0 group 0; // ignored by named. + inet 10.0.0.1 allow { any; key foo; } keys { "key4";}; + inet 10.0.0.2 allow { none; } keys { "key-1"; "key-2"; }; + inet 10.0.0.2 allow { none; }; +}; + +zone "master.demo.zone" { + type master; // what used to be called "primary" + database "somedb -option1 -option2 arg1 arg2 arg3"; + file "master.demo.zone"; + check-names fail; + allow-update { none; }; + allow-update-forwarding { 10.0.0.5; !any; }; + allow-transfer { any; }; + allow-query { any; }; + sig-validity-interval 990; + notify explicit; + also-notify { 1.0.0.1; }; // don't notify any nameservers other + // than those on the NS list for this + // zone + forward first; + forwarders { 10.0.0.3; 1:2:3:4:5:6:7:8; }; +}; + +zone "slave.demo.zone" { + type slave; // what used to be called "secondary" + file "slave.demo.zone"; + ixfr-base "slave.demo.zone.ixfr"; // File name for IXFR transaction log file + masters { + 1.2.3.4 port 10 key "foo"; // where to zone transfer from + 5.6.7.8; + 6.7.8.9 key "zippo"; + }; + transfer-source 10.0.0.53; // fixes multihoming problems + check-names warn; + allow-update { none; }; + allow-transfer { any; }; + allow-update-forwarding { any; }; + allow-query { any; }; + max-transfer-time-in 120; // if not set, global option is used. + max-transfer-time-out 1; // if not set, global option is used. + max-transfer-idle-in 2; // if not set, global option is used. + max-transfer-idle-out 3; // if not set, global option is used. + also-notify { 1.0.0.2; }; + forward only; + forwarders { 10.45.45.45; 10.0.0.3; 1:2:3:4:5:6:7:8; }; +}; + +key "non-viewkey" { secret "YWFh" ; algorithm "zzz" ; }; + +view "test-view" in { + key "viewkey" { algorithm "xxx" ; secret "eXl5" ; }; + also-notify { 10.2.2.3; }; + trusted-keys { + foo.com. 4 3 2 "abdefghijklmnopqrstuvwxyz"; + }; + sig-validity-interval 45; + max-cache-size 100000; + allow-query { 10.0.0.30;}; + additional-from-cache false; + additional-from-auth no; + match-clients { 10.0.0.1 ; }; + check-names master warn; + check-names slave ignore; + check-names response fail; + auth-nxdomain false; + recursion true; + provide-ixfr false; + request-ixfr true; + fetch-glue true; + notify false; + rfc2308-type1 false; + transfer-source 10.0.0.55; + transfer-source-v6 4:3:8:1:5:6:7:8; + query-source port * address 10.0.0.54 ; + query-source-v6 address 6:6:6:6:6:6:6:6 port *; + max-transfer-time-out 45; + max-transfer-idle-out 55; + cleaning-interval 100; + min-roots 3; + lame-ttl 477; + max-ncache-ttl 333; + max-cache-ttl 777; + transfer-format many-answers; + max-retry-time 7; + min-retry-time 4; + max-refresh-time 999; + min-refresh-time 111; + + zone "view-zone.com" { + type master; + allow-update-forwarding { 10.0.0.34;}; + file "view-zone-master"; + }; + + server 5.6.7.8 { + keys "viewkey"; + }; + + server 10.9.8.7 { + keys "non-viewkey"; + }; + dialup yes; +}; + + +zone "stub.demo.zone" { + type stub; // stub zones are like slave zones, + // except that only the NS records + // are transferred. + dialup yes; + file "stub.demo.zone"; + masters { + 1.2.3.4 ; // where to zone transfer from + 5.6.7.8 port 999; + }; + check-names warn; + allow-update { none; }; + allow-transfer { any; }; + allow-query { any; }; + + max-retry-time 10; + min-retry-time 11; + max-refresh-time 12; + min-refresh-time 13; + + max-transfer-time-in 120; // if not set, global option is used. + pubkey 257 255 1 "a useless key"; + pubkey 257 255 1 "another useless key"; +}; + +zone "." { + type hint; // used to be specified w/ "cache" + file "cache.db"; +// pubkey 257 255 1 "AQP2fHpZ4VMpKo/jc9Fod821uyfY5p8j5h/Am0V/KpBTMZjdXmp9QJe6yFRoIIzkaNCgTIftASdpXGgCwFB2j2KXP/rick6gvEer5VcDEkLR5Q=="; +}; + +trusted-keys { + "." 257 255 1 "AQP2fHpZ4VMpKo/jc9Fod821uyfY5p8j5h/Am0V/KpBTMZjdXmp9QJe6yFRoIIzkaNCgTIftASdpXGgCwFB2j2KXP/rick6gvEer5VcDEkLR5Q=="; +}; + + +acl can_query { !1.2.3/24; any; }; // network 1.2.3.0 mask 255.255.255.0 + // is disallowed; rest are OK +acl can_axfr { 1.2.3.4; can_query; }; // host 1.2.3.4 and any host allowed + // by can_query are OK + +zone "disabled-zone.com" { + type master; + file "bar"; + + max-retry-time 100; + min-retry-time 110; + max-refresh-time 120; + min-refresh-time 130; +}; + +zone "non-default-acl.demo.zone" { + type master; + file "foo"; + allow-query { can_query; }; + allow-transfer { can_axfr; }; + allow-update { + 1.2.3.4; + 5.6.7.8; + }; + pubkey 666 665 664 "key of the beast"; + // Errors trapped by parser: + // identity or name not absolute + // 'wildcard' match type and no wildcard character in name + // + // issues: + // - certain rdatatype values (such as "key") are config file keywords and + // must be quoted or a syntax error will occur. + // + + update-policy { + grant root.domain. subdomain host.domain. A MX CNAME; + grant sub.root.domain. wildcard *.host.domain. A; + grant root.domain. name host.domain. a ns md mf cname soa mb mg + mr "null" wks ptr hinfo minfo mx txt rp afsdb x25 + isdn rt nsap sig "key" px gpos aaaa loc nxt srv naptr kx + cert a6 dname opt unspec tkey tsig ; + grant foo.bar.com. self foo.bar.com. a; + }; +}; + +key sample_key { // for TSIG; supported by parser + algorithm hmac-md5; // but not yet implemented in the + secret "eW91ciBzZWNyZXQgaGVyZQ=="; // rest of the server +}; + +key key2 { + algorithm hmac-md5; + secret "ZXJlaCB0ZXJjZXMgcm91eQ=="; +}; + +acl key_acl { key sample_key; }; // a request signed with sample_key + +server 1.2.3.4 { + request-ixfr no; + provide-ixfr no; + bogus no; // if yes, we won't query or listen + // to this server + transfer-format one-answer; // set transfer format for this + // server (see the description of + // 'transfer-format' above) + // if not specified, the global option + // will be used + transfers 0; // not implemented + keys { "sample_key" }; // for TSIG; supported by the parser + // but not yet implemented in the + // rest of the server +# Now called 'request-ixfr' +# support-ixfr yes; // for IXFR supported by server + // if yes, the listed server talks IXFR +}; + +logging { + /* + * All log output goes to one or more "channels"; you can make as + * many of them as you want. + */ + + channel syslog_errors { // this channel will send errors or + syslog user; // or worse to syslog (user facility) + severity error; + }; + + channel stderr_errors { + stderr; + }; + + /* + * Channels have a severity level. Messages at severity levels + * greater than or equal to the channel's level will be logged on + * the channel. In order of decreasing severity, the levels are: + * + * critical a fatal error + * error + * warning + * notice a normal, but significant event + * info an informational message + * debug 1 the least detailed debugging info + * ... + * debug 99 the most detailed debugging info + */ + + /* + * Here are the built-in channels: + * + * channel default_syslog { + * syslog daemon; + * severity info; + * }; + * + * channel default_debug { + * file "named.run"; // note: stderr is used instead + * // of "named.run" if the server + * // is started with the "-f" + * // option. + * severity dynamic; // this means log debugging + * // at whatever debugging level + * // the server is at, and don't + * // log anything if not + * // debugging. + * }; + * + * channel null { // this is the bit bucket; + * file "/dev/null"; // any logging to this channel + * // is discarded. + * }; + * + * channel default_stderr { // writes to stderr + * file "<stderr>"; // this is illustrative only; + * // there's currently no way + * // of saying "stderr" in the + * // configuration language. + * // i.e. don't try this at home. + * severity info; + * }; + * + * default_stderr only works before the server daemonizes (i.e. + * during initial startup) or when it is running in foreground + * mode (-f command line option). + */ + + /* + * There are many categories, so you can send the logs + * you want to see wherever you want, without seeing logs you + * don't want. Right now the categories are + * + * default the catch-all. many things still + * aren't classified into categories, and + * they all end up here. also, if you + * don't specify any channels for a + * category, the default category is used + * instead. + * config high-level configuration file + * processing + * parser low-level configuration file processing + * queries what used to be called "query logging" + * lame-servers messages like "Lame server on ..." + * statistics + * panic if the server has to shut itself + * down due to an internal problem, it + * logs the problem here (as well as + * in the problem's native category) + * update dynamic update + * ncache negative caching + * xfer-in zone transfers we're receiving + * xfer-out zone transfers we're sending + * db all database operations + * eventlib debugging info from the event system + * (see below) + * packet dumps of packets received and sent + * (see below) + * notify the NOTIFY protocol + * cname messages like "XX points to a CNAME" + * security approved/unapproved requests + * os operating system problems + * insist consistency check failures + * maintenance periodic maintenance + * load zone loading + * response-checks messages like + * "Malformed response ..." + * "wrong ans. name ..." + * "unrelated additional info ..." + * "invalid RR type ..." + * "bad referral ..." + */ + + category parser { + syslog_errors; // you can log to as many channels + default_syslog; // as you want + }; + + category lame-servers { null; }; // don't log these at all + + channel moderate_debug { + file "foo"; // foo + severity debug 3; // level 3 debugging to file + print-time yes; // timestamp log entries + print-category yes; // print category name + print-severity yes; // print severity level + /* + * Note that debugging must have been turned on either + * on the command line or with a signal to get debugging + * output (non-debugging output will still be written to + * this channel). + */ + }; + + channel another { + file "bar" versions 99 size 10M; + severity info; + }; + + channel third { + file "bar" size 100000 versions unlimited; + severity debug; // use default debug level + }; + + /* + * If you don't want to see "zone XXXX loaded" messages but do + * want to see any problems, you could do the following. + */ + channel no_info_messages { + syslog; + severity notice; + }; + + category load { no_info_messages; }; + + /* + * You can also define category "default"; it gets used when no + * "category" statement has been given for a category. + */ + category default { + default_syslog; + moderate_debug; + }; + + /* + * If you don't define category default yourself, the default + * default category will be used. It is + * + * category default { default_syslog; default_debug; }; + */ + + /* + * If you don't define category panic yourself, the default + * panic category will be used. It is + * + * category panic { default_syslog; default_stderr; }; + */ + + /* + * Two categories, 'packet' and 'eventlib', are special. Only one + * channel may be assigned to each of them, and it must be a + * file channel. If you don't define them yourself, they default to + * + * category eventlib { default_debug; }; + * + * category packet { default_debug; }; + */ +}; + +#include "filename"; // can't do within a statement + diff --git a/bin/tests/names/Makefile.in b/bin/tests/names/Makefile.in new file mode 100644 index 0000000..31b12fe --- /dev/null +++ b/bin/tests/names/Makefile.in @@ -0,0 +1,58 @@ +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 1999-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. + +# $Id: Makefile.in,v 1.28 2007/06/19 23:47:00 tbox Exp $ + +srcdir = @srcdir@ +VPATH = @srcdir@ +top_srcdir = @top_srcdir@ + +@BIND9_MAKE_INCLUDES@ + +CINCLUDES = ${TEST_INCLUDES} ${DNS_INCLUDES} ${ISC_INCLUDES} + +CDEFINES = +CWARNINGS = + +# Note that we do not want to use libtool for libt_api +DNSLIBS = ../../../lib/dns/libdns.@A@ @DNS_CRYPTO_LIBS@ +ISCLIBS = ../../../lib/isc/libisc.@A@ + +DNSDEPLIBS = ../../../lib/dns/libdns.@A@ +ISCDEPLIBS = ../../../lib/isc/libisc.@A@ + +DEPLIBS = ${DNSDEPLIBS} ${ISCDEPLIBS} + +LIBS = ${DNSLIBS} ${ISCLIBS} @LIBS@ + +TLIB = ../../../lib/tests/libt_api.@A@ + +TARGETS = t_names@EXEEXT@ + +SRCS = t_names.c + +@BIND9_MAKE_RULES@ + +t_names@EXEEXT@: t_names.@O@ ${DEPLIBS} ${TLIB} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ t_names.@O@ ${TLIB} ${LIBS} + +test: t_names@EXEEXT@ + -@./t_names@EXEEXT@ -c @top_srcdir@/t_config -b @srcdir@ -a + +testhelp: + @./t_names@EXEEXT@ -h + +clean distclean:: + rm -f ${TARGETS} diff --git a/bin/tests/names/dns_name_compare_data b/bin/tests/names/dns_name_compare_data new file mode 100644 index 0000000..0467fcf --- /dev/null +++ b/bin/tests/names/dns_name_compare_data @@ -0,0 +1,11 @@ +# +# test data for dns_name_compare +# format: +# <name1> <tab> <name2> <tab> <exp_order> +# where: exp_order may be one of: -1, 0, 1 +# +# and where: exp_nlabels and exp_nbits are not tested if < 0 +# +c.d a.b.c.d -1 +a.b.c.d c.d 1 +a.b.c a.b.c 0 diff --git a/bin/tests/names/dns_name_countlabels_data b/bin/tests/names/dns_name_countlabels_data new file mode 100644 index 0000000..f11c387 --- /dev/null +++ b/bin/tests/names/dns_name_countlabels_data @@ -0,0 +1,10 @@ +# +# test data for dns_name_countlabels +# format: +# <name> <tab> <nlabels> +# +c.d 2 +c.d. 3 +a.b.c.d 4 +a.b.c 3 +. 1 diff --git a/bin/tests/names/dns_name_fromregion_data b/bin/tests/names/dns_name_fromregion_data new file mode 100644 index 0000000..32b4220 --- /dev/null +++ b/bin/tests/names/dns_name_fromregion_data @@ -0,0 +1,12 @@ +# +# test data for dns_name_fromregion +# format: +# <test_name> +# where: exp_order may be one of: -1, 0, 1 +# +# and where: exp_nlabels and exp_nbits are not tested if < 0 +# +a.b.c.d. +a.b.c.d.[A].[aaa. +Ba\x\aa.b.c\[\[o\\.Z +Ba\x\aa.b.c\[\[o\\\..\.Z diff --git a/bin/tests/names/dns_name_fromtext_data b/bin/tests/names/dns_name_fromtext_data new file mode 100644 index 0000000..16554a5 --- /dev/null +++ b/bin/tests/names/dns_name_fromtext_data @@ -0,0 +1,9 @@ +# +# test data for dns_name_fromtext +# format: +# <name1> <tab> <name2> <tab> <origin> <tab> <downcase> +# +a.b a.b.c.d C.d 1 +a.b a.b.c.d C.d 1 +a.b a.b.C.d C.d 0 +a.b. a.b. C.d 0 diff --git a/bin/tests/names/dns_name_fromwire_1_data b/bin/tests/names/dns_name_fromwire_1_data new file mode 100644 index 0000000..b7ae69b --- /dev/null +++ b/bin/tests/names/dns_name_fromwire_1_data @@ -0,0 +1,30 @@ +# +# test data for dns_name_fromwire_1 +# format: +# <msgfile> <testname_offset> <downcase> +# <dc_method> <exp_name> <exp_result> +# +# where msgfile contains a DNS message in hex form +# +# and where testname_offset is the byte offset in this message of +# the start of a name +# +# and where downcase is 1 or 0 +# +# and where dc_method is one of +# DNS_COMPRESS_ALL +# DNS_COMPRESS_GLOBAL14 +# DNS_COMPRESS_NONE +# +# and where exp_name is the expected name after any decompression +# or case conversion +# +# and where exp_result may be one of +# ISC_R_NOSPACE +# DNS_R_BADLABELTYPE +# DNS_R_DISALLOWED +# DNS_R_BADPOINTER +# ISC_R_UNEXPECTEDEND +# DNS_R_TOOMANYHOPS +# +wire_test1.data 25 1 DNS_COMPRESS_ALL vix.com. ISC_R_SUCCESS diff --git a/bin/tests/names/dns_name_fromwire_2_data b/bin/tests/names/dns_name_fromwire_2_data new file mode 100644 index 0000000..90dfec4 --- /dev/null +++ b/bin/tests/names/dns_name_fromwire_2_data @@ -0,0 +1,30 @@ +# +# test data for dns_name_fromwire_2 +# format: +# <msgfile> <testname_offset> <downcase> +# <dc_method> <exp_name> <exp_result> +# +# where msgfile contains a DNS message in hex form +# +# and where testname_offset is the byte offset in this message of +# the start of a name +# +# and where downcase is 1 or 0 +# +# and where dc_method is one of +# DNS_COMPRESS_ALL +# DNS_COMPRESS_GLOBAL14 +# DNS_COMPRESS_NONE +# +# and where exp_name is the expected name after any decompression +# or case conversion +# +# and where exp_result may be one of +# ISC_R_NOSPACE +# DNS_R_BADLABELTYPE +# DNS_R_DISALLOWED +# DNS_R_BADPOINTER +# ISC_R_UNEXPECTEDEND +# DNS_R_TOOMANYHOPS +# +wire_test2.data 25 1 DNS_COMPRESS_ALL vix.com. ISC_R_NOSPACE diff --git a/bin/tests/names/dns_name_fromwire_3_data b/bin/tests/names/dns_name_fromwire_3_data new file mode 100644 index 0000000..f4253b4 --- /dev/null +++ b/bin/tests/names/dns_name_fromwire_3_data @@ -0,0 +1,31 @@ +# +# test data for dns_name_fromwire_3 +# format: +# <msgfile> <testname_offset> <downcase> +# <dc_method> <exp_name> <exp_result> +# +# where msgfile contains a DNS message in hex form +# +# and where testname_offset is the byte offset in this message of +# the start of a name +# +# and where downcase is 1 or 0 +# +# and where dc_method is one of +# DNS_COMPRESS_ALL +# DNS_COMPRESS_GLOBAL14 +# DNS_COMPRESS_NONE +# +# and where exp_name is the expected name after any decompression +# or case conversion +# +# and where exp_result may be one of +# ISC_R_NOSPACE +# DNS_R_BADLABELTYPE +# DNS_R_DISALLOWED +# DNS_R_BADPOINTER +# ISC_R_UNEXPECTEDEND +# DNS_R_TOOMANYHOPS +# +wire_test3_1.data 25 1 DNS_COMPRESS_ALL vix.com. DNS_R_BADLABELTYPE +wire_test3_2.data 25 1 DNS_COMPRESS_ALL vix.com. DNS_R_BADLABELTYPE diff --git a/bin/tests/names/dns_name_fromwire_4_data b/bin/tests/names/dns_name_fromwire_4_data new file mode 100644 index 0000000..b76b326 --- /dev/null +++ b/bin/tests/names/dns_name_fromwire_4_data @@ -0,0 +1,30 @@ +# +# test data for dns_name_fromwire_4 +# format: +# <msgfile> <testname_offset> <downcase> +# <dc_method> <exp_name> <exp_result> +# +# where msgfile contains a DNS message in hex form +# +# and where testname_offset is the byte offset in this message of +# the start of a name +# +# and where downcase is 1 or 0 +# +# and where dc_method is one of +# DNS_COMPRESS_ALL +# DNS_COMPRESS_GLOBAL14 +# DNS_COMPRESS_NONE +# +# and where exp_name is the expected name after any decompression +# or case conversion +# +# and where exp_result may be one of +# ISC_R_NOSPACE +# DNS_R_BADLABELTYPE +# DNS_R_DISALLOWED +# DNS_R_BADPOINTER +# ISC_R_UNEXPECTEDEND +# DNS_R_TOOMANYHOPS +# +wire_test4.data 550 1 DNS_COMPRESS_ALL vix.com. DNS_R_NAMETOOLONG diff --git a/bin/tests/names/dns_name_fromwire_5_data b/bin/tests/names/dns_name_fromwire_5_data new file mode 100644 index 0000000..1a4221b --- /dev/null +++ b/bin/tests/names/dns_name_fromwire_5_data @@ -0,0 +1,30 @@ +# +# test data for dns_name_fromwire_5 +# format: +# <msgfile> <testname_offset> <downcase> +# <dc_method> <exp_name> <exp_result> +# +# where msgfile contains a DNS message in hex form +# +# and where testname_offset is the byte offset in this message of +# the start of a name +# +# and where downcase is 1 or 0 +# +# and where dc_method is one of +# DNS_COMPRESS_ALL +# DNS_COMPRESS_GLOBAL14 +# DNS_COMPRESS_NONE +# +# and where exp_name is the expected name after any decompression +# or case conversion +# +# and where exp_result may be one of +# ISC_R_NOSPACE +# DNS_R_BADLABELTYPE +# DNS_R_DISALLOWED +# DNS_R_BADPOINTER +# ISC_R_UNEXPECTEDEND +# DNS_R_TOOMANYHOPS +# +wire_test5.data 25 1 DNS_COMPRESS_NONE vix.com. DNS_R_DISALLOWED diff --git a/bin/tests/names/dns_name_fromwire_6_data b/bin/tests/names/dns_name_fromwire_6_data new file mode 100644 index 0000000..e4460ce --- /dev/null +++ b/bin/tests/names/dns_name_fromwire_6_data @@ -0,0 +1,30 @@ +# +# test data for dns_name_fromwire_6 +# format: +# <msgfile> <testname_offset> <downcase> +# <dc_method> <exp_name> <exp_result> +# +# where msgfile contains a DNS message in hex form +# +# and where testname_offset is the byte offset in this message of +# the start of a name +# +# and where downcase is 1 or 0 +# +# and where dc_method is one of +# DNS_COMPRESS_ALL +# DNS_COMPRESS_GLOBAL14 +# DNS_COMPRESS_NONE +# +# and where exp_name is the expected name after any decompression +# or case conversion +# +# and where exp_result may be one of +# ISC_R_NOSPACE +# DNS_R_BADLABELTYPE +# DNS_R_DISALLOWED +# DNS_R_BADPOINTER +# ISC_R_UNEXPECTEDEND +# DNS_R_TOOMANYHOPS +# +wire_test6.data 25 1 DNS_COMPRESS_ALL vix.com. DNS_R_BADPOINTER diff --git a/bin/tests/names/dns_name_fromwire_7_data b/bin/tests/names/dns_name_fromwire_7_data new file mode 100644 index 0000000..5828bfc --- /dev/null +++ b/bin/tests/names/dns_name_fromwire_7_data @@ -0,0 +1,30 @@ +# +# test data for dns_name_fromwire_7 +# format: +# <msgfile> <testname_offset> <downcase> +# <dc_method> <exp_name> <exp_result> +# +# where msgfile contains a DNS message in hex form +# +# and where testname_offset is the byte offset in this message of +# the start of a name +# +# and where downcase is 1 or 0 +# +# and where dc_method is one of +# DNS_COMPRESS_ALL +# DNS_COMPRESS_GLOBAL14 +# DNS_COMPRESS_NONE +# +# and where exp_name is the expected name after any decompression +# or case conversion +# +# and where exp_result may be one of +# ISC_R_NOSPACE +# DNS_R_BADLABELTYPE +# DNS_R_DISALLOWED +# DNS_R_BADPOINTER +# ISC_R_UNEXPECTEDEND +# DNS_R_TOOMANYHOPS +# +wire_test7.data 25 1 DNS_COMPRESS_ALL vix.com. ISC_R_UNEXPECTEDEND diff --git a/bin/tests/names/dns_name_fromwire_8_data b/bin/tests/names/dns_name_fromwire_8_data new file mode 100644 index 0000000..9ddd3f3 --- /dev/null +++ b/bin/tests/names/dns_name_fromwire_8_data @@ -0,0 +1,30 @@ +# +# test data for dns_name_fromwire_9 +# format: +# <msgfile> <testname_offset> <downcase> +# <dc_method> <exp_name> <exp_result> +# +# where msgfile contains a DNS message in hex form +# +# and where testname_offset is the byte offset in this message of +# the start of a name +# +# and where downcase is 1 or 0 +# +# and where dc_method is one of +# DNS_COMPRESS_ALL +# DNS_COMPRESS_GLOBAL14 +# DNS_COMPRESS_NONE +# +# and where exp_name is the expected name after any decompression +# or case conversion +# +# and where exp_result may be one of +# ISC_R_NOSPACE +# DNS_R_BADLABELTYPE +# DNS_R_DISALLOWED +# DNS_R_BADPOINTER +# ISC_R_UNEXPECTEDEND +# DNS_R_TOOMANYHOPS +# +wire_test8.data 25 1 DNS_COMPRESS_ALL vix.com. ISC_R_NOSPACE diff --git a/bin/tests/names/dns_name_fullcompare_data b/bin/tests/names/dns_name_fullcompare_data new file mode 100644 index 0000000..f40e7e6 --- /dev/null +++ b/bin/tests/names/dns_name_fullcompare_data @@ -0,0 +1,10 @@ +# +# test data for dns_name_fullcompare +# format: +# <name1> <tab> <name2> <tab> <exp_reln> <tab> <exp_order> <tab> <exp_nlabels> <tab> <exp_nbits> +# where: exp_reln may be one of: +# none, equal, contains, subdomain, commonancestor +# and where: exp_nlabels and exp_nbits are not tested if < 0 +# +c.d a.b.c.d contains -1 2 0 +a.b.c.d c.d subdomain 1 2 0 diff --git a/bin/tests/names/dns_name_getlabel_data b/bin/tests/names/dns_name_getlabel_data new file mode 100644 index 0000000..d8dc880 --- /dev/null +++ b/bin/tests/names/dns_name_getlabel_data @@ -0,0 +1,10 @@ +# +# test data for dns_name_compare +# format: +# <name1> <tab> <label1_pos> <tab> <name2> <tab> <label2_pos> +# where: label1_pos and label2_pos identify the label position of +# the common label shared by name1 and name2 respectively +# +c.d 1 a.b.c.d 3 +a.b.c.d 3 c.d 1 +a.b.c. 3 a.b.c. 3 diff --git a/bin/tests/names/dns_name_getlabelsequence_data b/bin/tests/names/dns_name_getlabelsequence_data new file mode 100644 index 0000000..339604a --- /dev/null +++ b/bin/tests/names/dns_name_getlabelsequence_data @@ -0,0 +1,9 @@ +# +# test data for dns_name_getlabelsequence +# format: +# <name1> <tab> <label1_start> <tab> <name2> <tab> <label2_start> <tab> <extent> +# +# +c.d 1 a.b.c.d 3 1 +a.b.c.d.e 2 c.d 0 2 +a.b.c 0 a.b.c 0 3 diff --git a/bin/tests/names/dns_name_hash_data b/bin/tests/names/dns_name_hash_data new file mode 100644 index 0000000..093ba45 --- /dev/null +++ b/bin/tests/names/dns_name_hash_data @@ -0,0 +1,12 @@ +# +# test data for dns_name_hash +# format: +# <testname1> <tab> <testname2> <tab> <cshm> <tab> <cishm> +# where: +# cshm is 0 if a case sensitive hash of testname1 should match a +# case sensitive hash of testname2, otherwise cshm != 0 +# and: +# cishm is 0 if a case insensitive hash of testname1 should match a +# case insensitive hash of testname2, otherwise cishm != 0 +# +a.b.c.d a.b.c.d. 0 0 diff --git a/bin/tests/names/dns_name_isabsolute_data b/bin/tests/names/dns_name_isabsolute_data new file mode 100644 index 0000000..a17c9b8 --- /dev/null +++ b/bin/tests/names/dns_name_isabsolute_data @@ -0,0 +1,8 @@ +# +# test data for dns_name_isabsolute +# format is: +# <testname> <tab> <expected value> +# +x. 1 +a.b.c.d 0 +x.z. 1 diff --git a/bin/tests/names/dns_name_issubdomain_data b/bin/tests/names/dns_name_issubdomain_data new file mode 100644 index 0000000..102b072 --- /dev/null +++ b/bin/tests/names/dns_name_issubdomain_data @@ -0,0 +1,11 @@ +# +# test data for dns_name_issubdomain +# format: +# <name1> <tab> <name2> <tab> <issubdomain> +# where: issubdomain is 0 if false, else non-zero +# +# and where: exp_nlabels and exp_nbits are not tested if < 0 +# +c.d a.b.c.d 0 +a.b.c.d c.d 1 +a.b.c. a.b.c. 1 diff --git a/bin/tests/names/dns_name_rdatacompare_data b/bin/tests/names/dns_name_rdatacompare_data new file mode 100644 index 0000000..7f0c6a2 --- /dev/null +++ b/bin/tests/names/dns_name_rdatacompare_data @@ -0,0 +1,11 @@ +# +# test data for dns_name_rdatacompare +# format: +# <name1> <tab> <name2> <tab> <exp_order> +# where: exp_order may be one of: -1, 0, 1 +# +# and where: exp_nlabels and exp_nbits are not tested if < 0 +# +c.d. a.b.c.d. 1 +a.b.c.d. c.d. -1 +a.b.c. a.b.c. 0 diff --git a/bin/tests/names/dns_name_toregion_data b/bin/tests/names/dns_name_toregion_data new file mode 100644 index 0000000..00c10f4 --- /dev/null +++ b/bin/tests/names/dns_name_toregion_data @@ -0,0 +1,8 @@ +# +# test data for dns_name_toregion +# format: +# <test_name> +# +a.b.c.d. +a.b.c.d.[A].[aaa. +Ba\x\aa.b.c\[\[o\\.Z diff --git a/bin/tests/names/dns_name_totext_data b/bin/tests/names/dns_name_totext_data new file mode 100644 index 0000000..9db22aa --- /dev/null +++ b/bin/tests/names/dns_name_totext_data @@ -0,0 +1,9 @@ +# +# test data for dns_name_totext +# format: +# <name1> <tab> <omit_final_dot> +# +a.b.c.d 1 +a.\\[\[.c.d 1 +a.b.C.d 0 +a.b. 0 diff --git a/bin/tests/names/dns_name_towire_1_data b/bin/tests/names/dns_name_towire_1_data new file mode 100644 index 0000000..a45d80a --- /dev/null +++ b/bin/tests/names/dns_name_towire_1_data @@ -0,0 +1,17 @@ +# test data for dns_name_towire_1 +# format: +# <testname> <dc_method> <exp_data> +# <exp_data_len> <exp_result> +# +# where testname is the test name to be converted to wire format +# +# and where dc_method is one of +# DNS_COMPRESS_ALL +# DNS_COMPRESS_GLOBAL14 +# DNS_COMPRESS_NONE +# +# and where exp_data is the expected wire format data in hex format +# and where exp_data_len is the length of the expected data in decimal format +# and where exp_result is the expected return value of dns_name_towire +# +a.vix.com. DNS_COMPRESS_NONE 01610376697803636f6d00 11 ISC_R_SUCCESS diff --git a/bin/tests/names/dns_name_towire_2_data b/bin/tests/names/dns_name_towire_2_data new file mode 100644 index 0000000..35479be --- /dev/null +++ b/bin/tests/names/dns_name_towire_2_data @@ -0,0 +1,17 @@ +# test data for dns_name_towire_1 +# format: +# <testname> <dc_method> <exp_data> +# <exp_data_len> <exp_result> +# +# where testname is the test name to be converted to wire format +# +# and where dc_method is one of +# DNS_COMPRESS_ALL +# DNS_COMPRESS_GLOBAL14 +# DNS_COMPRESS_NONE +# +# and where exp_data is the expected wire format data in hex format +# and where exp_data_len is the length of the expected data in decimal format +# and where exp_result is the expected return value of dns_name_towire +# +a.vix.com DNS_COMPRESS_NONE 01610376697803636f6d 10 ISC_R_NOSPACE diff --git a/bin/tests/names/t_names.c b/bin/tests/names/t_names.c new file mode 100644 index 0000000..68ce53b --- /dev/null +++ b/bin/tests/names/t_names.c @@ -0,0 +1,2345 @@ +/* + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1998-2003 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. + */ + +/* $Id: t_names.c,v 1.46 2008/01/18 23:46:57 tbox Exp $ */ + +#include <config.h> + +#include <ctype.h> +#include <stdlib.h> + +#include <isc/buffer.h> +#include <isc/mem.h> +#include <isc/string.h> + +#include <dns/compress.h> +#include <dns/name.h> +#include <dns/result.h> + +#include <tests/t_api.h> + +#define MAXTOKS 16 +#define BUFLEN 256 +#define BIGBUFLEN 4096 + +static char *Tokens[MAXTOKS + 1]; + + +#ifdef NEED_PBUF + +/*% + * get a hex formatted dns message from a data + * file into an isc_buffer_t + * caller supplies data storage and the isc_buffer + * we read the file, convert, setup the buffer + * and return the data length + */ + +static char * +ctoh(unsigned char c) { + int val; + static char buf[3]; + + val = (c >> 4) & 0x0f; + if ((0 <= val) && (val <= 9)) + buf[0] = '0' + val; + else if ((10 <= val) && (val <= 16)) + buf[0] = 'a' + val - 10; + val = c & 0x0f; + if ((0 <= val) && (val <= 9)) + buf[1] = '0' + val; + else if ((10 <= val) && (val <= 16)) + buf[1] = 'a' + val - 10; + buf[2] = '\0'; + return (buf); +} + +static void +pbuf(isc_buffer_t *pbuf) { + size_t len; + unsigned char *p; + + len = 0; + p = pbuf->base; + while (len < pbuf->length) { + printf("%s", ctoh(*p)); + ++p; + ++len; + if ((len % 40) == 0) + printf("\n"); + } +} + +#endif /* NEED_PBUF */ + +/*% + * Compare data at buf with data in hex representation at exp_data, + * of length exp_data_len, for equality. + * Return 0 if equal, else non-zero. + */ + +static int +chkdata(unsigned char *buf, size_t buflen, char *exp_data, + size_t exp_data_len) +{ + int result; + unsigned char *p; + unsigned char *v; + char *q; + unsigned char *data; + size_t cnt; + + if (buflen == exp_data_len) { + data = (unsigned char *)malloc(exp_data_len * + sizeof(unsigned char)); + if (data == NULL) { + t_info("malloc failed unexpectedly\n"); + return (-1); + } + + /* + * First convert exp_data from hex format. + */ + p = data; + q = exp_data; + cnt = 0; + while (cnt < exp_data_len) { + + if (('0' <= *q) && (*q <= '9')) + *p = *q - '0'; + else if (('a' <= *q) && (*q <= 'z')) + *p = *q - 'a' + 10; + else if (('A' <= *q) && (*q <= 'Z')) + *p = *q - 'A' + 10; + ++q; + + *p <<= 4; + + if (('0' <= *q) && (*q <= '9')) + *p |= ((*q - '0') & 0x0f); + else if (('a' <= *q) && (*q <= 'z')) + *p |= ((*q - 'a' + 10) & 0x0f); + else if (('A' <= *q) && (*q <= 'Z')) + *p |= ((*q - 'A' + 10) & 0x0f); + ++p; + ++q; + ++cnt; + } + + /* + * Now compare data. + */ + p = buf; + v = data; + for (cnt = 0; cnt < exp_data_len; ++cnt) { + if (*p != *v) + break; + ++p; + ++v; + } + if (cnt == exp_data_len) + result = 0; + else { + t_info("bad data at position %lu, " + "got 0x%.2x, expected 0x%.2x\n", + (unsigned long)cnt, *p, *q); + result = cnt + 1; + } + (void)free(data); + } else { + t_info("data length error, expected %lu, got %lu\n", + (unsigned long)exp_data_len, (unsigned long)buflen); + result = exp_data_len - buflen; + } + return (result); +} + +/*% + * Get a hex formatted dns message from a data file into an isc_buffer_t. + * Caller supplies data storage and the isc_buffer. We read the file, convert, + * setup the buffer and return the data length. + */ +static int +getmsg(char *datafile_name, unsigned char *buf, int buflen, isc_buffer_t *pbuf) +{ + int c; + int len; + int cnt; + unsigned int val; + unsigned char *p; + FILE *fp; + + fp = fopen(datafile_name, "r"); + if (fp == NULL) { + t_info("No such file %s\n", datafile_name); + return (0); + } + + p = buf; + cnt = 0; + len = 0; + val = 0; + while ((c = getc(fp)) != EOF) { + if ( (c == ' ') || (c == '\t') || + (c == '\r') || (c == '\n')) + continue; + if (c == '#') { + while ((c = getc(fp)) != '\n') + ; + continue; + } + if (('0' <= c) && (c <= '9')) + val = c - '0'; + else if (('a' <= c) && (c <= 'z')) + val = c - 'a' + 10; + else if (('A' <= c) && (c <= 'Z')) + val = c - 'A'+ 10; + else { + (void)fclose(fp); + t_info("Bad format in datafile\n"); + return (0); + } + if ((len % 2) == 0) { + *p = (val << 4); + } else { + *p += val; + ++p; + ++cnt; + if (cnt >= buflen) { + /* + * Buffer too small. + */ + (void)fclose(fp); + t_info("Buffer overflow error\n"); + return (0); + } + } + ++len; + } + (void)fclose(fp); + + if (len % 2) { + t_info("Bad format in %s\n", datafile_name); + return (0); + } + + *p = '\0'; + isc_buffer_init(pbuf, buf, cnt); + isc_buffer_add(pbuf, cnt); + return (cnt); +} + +static int +bustline(char *line, char **toks) { + int cnt; + char *p; + + cnt = 0; + if (line && *line) { + while ((p = strtok(line, "\t")) && (cnt < MAXTOKS)) { + *toks++ = p; + line = NULL; + ++cnt; + } + } + return (cnt); +} + + +#ifdef NEED_HNAME_TO_TNAME + +/*% + * convert a name from hex representation to text form + * format of hex notation is: + * %xXXXXXXXX + */ + +static int +hname_to_tname(char *src, char *target, size_t len) { + int i; + int c; + unsigned int val; + size_t srclen; + char *p; + char *q; + + p = src; + srclen = strlen(p); + if ((srclen >= 2) && ((*p != '%') || (*(p+1) != 'x'))) { + /* + * No conversion needed. + */ + if (srclen >= len) + return (1); + memcpy(target, src, srclen + 1); + return (0); + } + + i = 0; + p += 2; + q = target; + while (*p) { + c = *p; + if (('0' < c) && (c <= '9')) + val = c - '0'; + else if (('a' <= c) && (c <= 'z')) + val = c + 10 - 'a'; + else if (('A' <= c) && (c <= 'Z')) + val = c + 10 - 'A'; + else { + return (1); + } + if (i % 2) { + *q |= val; + ++q; + } else + *q = (val << 4); + ++i; + ++p; + } + if (i % 2) { + return (1); + } else { + *q = '\0'; + return (0); + } +} + +#endif /* NEED_HNAME_TO_TNAME */ + +/*% + * initialize a dns_name_t from a text name, hiding all + * buffer and other object initialization from the caller + * + */ + +static isc_result_t +dname_from_tname(char *name, dns_name_t *dns_name) { + int len; + isc_buffer_t txtbuf; + isc_buffer_t *binbuf; + unsigned char *junk; + isc_result_t result; + + len = strlen(name); + isc_buffer_init(&txtbuf, name, len); + isc_buffer_add(&txtbuf, len); + junk = (unsigned char *)malloc(sizeof(unsigned char) * BUFLEN); + binbuf = (isc_buffer_t *)malloc(sizeof(isc_buffer_t)); + if ((junk != NULL) && (binbuf != NULL)) { + isc_buffer_init(binbuf, junk, BUFLEN); + dns_name_init(dns_name, NULL); + dns_name_setbuffer(dns_name, binbuf); + result = dns_name_fromtext(dns_name, &txtbuf, + NULL, ISC_FALSE, NULL); + } else { + result = ISC_R_NOSPACE; + if (junk != NULL) + (void)free(junk); + if (binbuf != NULL) + (void)free(binbuf); + } + return (result); +} + +static const char *a3 = "dns_name_init initializes 'name' to the empty name"; + +static void +t_dns_name_init(void) { + int rval; + int result; + dns_name_t name; + unsigned char offsets[1]; + + rval = 0; + t_assert("dns_name_init", 1, T_REQUIRED, a3); + + dns_name_init(&name, offsets); + /* magic is hidden in name.c ... + if (name.magic != NAME_MAGIC) { + t_info("name.magic is not set to NAME_MAGIC\n"); + ++rval; + } + */ + if (name.ndata != NULL) { + t_info("name.ndata is not NULL\n"); + ++rval; + } + if (name.length != 0) { + t_info("name.length is not 0\n"); + ++rval; + } + if (name.labels != 0) { + t_info("name.labels is not 0\n"); + ++rval; + } + if (name.attributes != 0) { + t_info("name.attributes is not 0\n"); + ++rval; + } + if (name.offsets != offsets) { + t_info("name.offsets is incorrect\n"); + ++rval; + } + if (name.buffer != NULL) { + t_info("name.buffer is not NULL\n"); + ++rval; + } + + if (rval == 0) + result = T_PASS; + else + result = T_FAIL; + t_result(result); +} + +static const char *a4 = "dns_name_invalidate invalidates 'name'"; + +static void +t_dns_name_invalidate(void) { + int rval; + int result; + dns_name_t name; + unsigned char offsets[1]; + + t_assert("dns_name_invalidate", 1, T_REQUIRED, a4); + + rval = 0; + dns_name_init(&name, offsets); + dns_name_invalidate(&name); + + /* magic is hidden in name.c ... + if (name.magic != 0) { + t_info("name.magic is not set to NAME_MAGIC\n"); + ++rval; + } + */ + if (name.ndata != NULL) { + t_info("name.ndata is not NULL\n"); + ++rval; + } + if (name.length != 0) { + t_info("name.length is not 0\n"); + ++rval; + } + if (name.labels != 0) { + t_info("name.labels is not 0\n"); + ++rval; + } + if (name.attributes != 0) { + t_info("name.attributes is not 0\n"); + ++rval; + } + if (name.offsets != NULL) { + t_info("name.offsets is not NULL\n"); + ++rval; + } + if (name.buffer != NULL) { + t_info("name.buffer is not NULL\n"); + ++rval; + } + + if (rval == 0) + result = T_PASS; + else + result = T_FAIL; + t_result(result); +} + +static const char *a5 = "dns_name_setbuffer dedicates a buffer for use " + "with 'name'"; + +static void +t_dns_name_setbuffer(void) { + int result; + unsigned char junk[BUFLEN]; + dns_name_t name; + isc_buffer_t buffer; + + t_assert("dns_name_setbuffer", 1, T_REQUIRED, a5); + + isc_buffer_init(&buffer, junk, BUFLEN); + dns_name_init(&name, NULL); + dns_name_setbuffer(&name, &buffer); + if (name.buffer == &buffer) + result = T_PASS; + else + result = T_FAIL; + + t_result(result); +} + +static const char *a6 = "dns_name_hasbuffer returns ISC_TRUE if 'name' has a " + "dedicated buffer, otherwise it returns ISC_FALSE"; + +static void +t_dns_name_hasbuffer(void) { + int result; + int rval; + unsigned char junk[BUFLEN]; + dns_name_t name; + isc_buffer_t buffer; + + t_assert("dns_name_hasbuffer", 1, T_REQUIRED, a6); + + rval = 0; + isc_buffer_init(&buffer, junk, BUFLEN); + dns_name_init(&name, NULL); + if (dns_name_hasbuffer(&name) != ISC_FALSE) + ++rval; + dns_name_setbuffer(&name, &buffer); + if (dns_name_hasbuffer(&name) != ISC_TRUE) + ++rval; + if (rval == 0) + result = T_PASS; + else + result = T_FAIL; + + t_result(result); +} + +static const char *a7 = "dns_name_isabsolute returns ISC_TRUE if 'name' ends " + "in the root label"; + +static int +test_dns_name_isabsolute(char *test_name, isc_boolean_t expected) { + dns_name_t name; + isc_buffer_t buf; + isc_buffer_t binbuf; + unsigned char junk[BUFLEN]; + int len; + int rval; + isc_boolean_t isabs_p; + isc_result_t result; + + rval = T_UNRESOLVED; + + t_info("testing name %s\n", test_name); + len = strlen(test_name); + isc_buffer_init(&buf, test_name, len); + isc_buffer_add(&buf, len); + isc_buffer_init(&binbuf, &junk[0], BUFLEN); + dns_name_init(&name, NULL); + dns_name_setbuffer(&name, &binbuf); + result = dns_name_fromtext(&name, &buf, NULL, ISC_FALSE, NULL); + if (result == ISC_R_SUCCESS) { + isabs_p = dns_name_isabsolute(&name); + if (isabs_p == expected) + rval = T_PASS; + else + rval = T_FAIL; + } else { + t_info("dns_name_fromtext %s failed, result = %s\n", + test_name, dns_result_totext(result)); + } + return (rval); +} + +static void +t_dns_name_isabsolute(void) { + int line; + int cnt; + int result; + char *p; + FILE *fp; + + t_assert("dns_name_isabsolute", 1, T_REQUIRED, a7); + + result = T_UNRESOLVED; + fp = fopen("dns_name_isabsolute_data", "r"); + if (fp != NULL) { + line = 0; + while ((p = t_fgetbs(fp)) != NULL) { + + ++line; + + /* + * Skip comment lines. + */ + if ((isspace((unsigned char)*p)) || (*p == '#')) { + (void)free(p); + continue; + } + + cnt = bustline(p, Tokens); + if (cnt == 2) { + /* + * label, bitpos, expected value. + */ + result = test_dns_name_isabsolute(Tokens[0], + atoi(Tokens[1]) + == 0 ? + ISC_FALSE : + ISC_TRUE); + } else { + t_info("bad datafile format at line %d\n", + line); + } + + (void)free(p); + t_result(result); + } + (void)fclose(fp); + } else { + t_info("Missing datafile dns_name_isabsolute_data\n"); + t_result(result); + } +} + +static const char *a8 = "dns_name_hash(name, case_sensitive) returns " + "a hash of 'name' which is case_sensitive if case_sensitive " + "is true"; + +/*% + * a9 merged with a8. + */ + +static int +test_dns_name_hash(char *test_name1, char *test_name2, + isc_boolean_t csh_match, isc_boolean_t cish_match) { + int rval; + int failures; + isc_boolean_t match; + unsigned int hash1; + unsigned int hash2; + dns_name_t dns_name1; + dns_name_t dns_name2; + isc_result_t result; + + rval = T_UNRESOLVED; + failures = 0; + + t_info("testing names %s and %s\n", test_name1, test_name2); + + result = dname_from_tname(test_name1, &dns_name1); + if (result == ISC_R_SUCCESS) { + result = dname_from_tname(test_name2, &dns_name2); + if (result == ISC_R_SUCCESS) { + hash1 = dns_name_hash(&dns_name1, ISC_TRUE); + hash2 = dns_name_hash(&dns_name2, ISC_TRUE); + match = ISC_FALSE; + if (hash1 == hash2) + match = ISC_TRUE; + if (match != csh_match) { + ++failures; + t_info("hash mismatch when ISC_TRUE\n"); + } + hash1 = dns_name_hash(&dns_name1, ISC_FALSE); + hash2 = dns_name_hash(&dns_name2, ISC_FALSE); + match = ISC_FALSE; + if (hash1 == hash2) + match = ISC_TRUE; + if (match != cish_match) { + ++failures; + t_info("hash mismatch when ISC_FALSE\n"); + } + if (failures == 0) + rval = T_PASS; + else + rval = T_FAIL; + } else { + t_info("dns_fromtext %s failed, result = %s\n", + test_name2, dns_result_totext(result)); + } + } else { + t_info("dns_fromtext %s failed, result = %s\n", + test_name1, dns_result_totext(result)); + } + return (rval); +} + +static void +t_dns_name_hash(void) { + int line; + int cnt; + int result; + char *p; + FILE *fp; + + t_assert("dns_name_hash", 1, T_REQUIRED, a8); + + result = T_UNRESOLVED; + fp = fopen("dns_name_hash_data", "r"); + if (fp != NULL) { + line = 0; + while ((p = t_fgetbs(fp)) != NULL) { + + ++line; + + /* + * Skip comment lines. + */ + if ((isspace((unsigned char)*p)) || (*p == '#')) { + (void)free(p); + continue; + } + + cnt = bustline(p, Tokens); + if (cnt == 4) { + /* + * name1, name2, exp match value if + * case_sensitive true, + * exp match value of case_sensitive false + */ + result = test_dns_name_hash( + Tokens[0], + Tokens[1], + atoi(Tokens[2]) == 0 ? + ISC_FALSE : ISC_TRUE, + atoi(Tokens[3]) == 0 ? + ISC_FALSE : ISC_TRUE); + } else { + t_info("bad datafile format at line %d\n", + line); + } + + (void)free(p); + t_result(result); + } + (void)fclose(fp); + } else { + t_info("Missing datafile dns_name_hash_data\n"); + t_result(result); + } +} + +static const char *a10 = + "dns_name_fullcompare(name1, name2, orderp, nlabelsp) " + "returns the DNSSEC ordering relationship between name1 and " + "name2, sets orderp to -1 if name1 < name2, to 0 if " + "name1 == name2, or to 1 if name1 > name2, sets nlabelsp " + "to the number of labels name1 and name2 have in common, " + "and sets nbitsp to the number of bits name1 and name2 " + "have in common"; + +/*% + * a11 thru a22 merged into a10. + */ +static const char * +dns_namereln_to_text(dns_namereln_t reln) { + const char *p; + + if (reln == dns_namereln_contains) + p = "contains"; + else if (reln == dns_namereln_subdomain) + p = "subdomain"; + else if (reln == dns_namereln_equal) + p = "equal"; + else if (reln == dns_namereln_none) + p = "none"; + else if (reln == dns_namereln_commonancestor) + p = "commonancestor"; + else + p = "unknown"; + + return (p); +} + +static int +test_dns_name_fullcompare(char *name1, char *name2, + dns_namereln_t exp_dns_reln, + int exp_order, int exp_nlabels) +{ + int result; + int nfails; + int order; + unsigned int nlabels; + dns_name_t dns_name1; + dns_name_t dns_name2; + isc_result_t dns_result; + dns_namereln_t dns_reln; + + nfails = 0; + result = T_UNRESOLVED; + + + t_info("testing names %s and %s for relation %s\n", name1, name2, + dns_namereln_to_text(exp_dns_reln)); + + dns_result = dname_from_tname(name1, &dns_name1); + if (dns_result == ISC_R_SUCCESS) { + dns_result = dname_from_tname(name2, &dns_name2); + if (dns_result == ISC_R_SUCCESS) { + dns_reln = dns_name_fullcompare(&dns_name1, &dns_name2, + &order, &nlabels); + + if (dns_reln != exp_dns_reln) { + ++nfails; + t_info("expected relationship of %s, got %s\n", + dns_namereln_to_text(exp_dns_reln), + dns_namereln_to_text(dns_reln)); + } + /* + * Normalize order. + */ + if (order < 0) + order = -1; + else if (order > 0) + order = 1; + if (order != exp_order) { + ++nfails; + t_info("expected ordering %d, got %d\n", + exp_order, order); + } + if ((exp_nlabels >= 0) && + (nlabels != (unsigned int)exp_nlabels)) { + ++nfails; + t_info("expecting %d labels, got %d\n", + exp_nlabels, nlabels); + } + if (nfails == 0) + result = T_PASS; + else + result = T_FAIL; + } else { + t_info("dname_from_tname failed, result == %s\n", + dns_result_totext(result)); + } + } else { + t_info("dname_from_tname failed, result == %s\n", + dns_result_totext(result)); + } + + return (result); +} + +static void +t_dns_name_fullcompare(void) { + int line; + int cnt; + int result; + char *p; + FILE *fp; + dns_namereln_t reln; + + t_assert("dns_name_fullcompare", 1, T_REQUIRED, a10); + + result = T_UNRESOLVED; + fp = fopen("dns_name_fullcompare_data", "r"); + if (fp != NULL) { + line = 0; + while ((p = t_fgetbs(fp)) != NULL) { + + ++line; + + /* + * Skip comment lines. + */ + if ((isspace((unsigned char)*p)) || (*p == '#')) { + (void)free(p); + continue; + } + + cnt = bustline(p, Tokens); + if (cnt == 6) { + /* + * name1, name2, exp_reln, exp_order, + * exp_nlabels + */ + if (!strcmp(Tokens[2], "none")) + reln = dns_namereln_none; + else if (!strcmp(Tokens[2], "contains")) + reln = dns_namereln_contains; + else if (!strcmp(Tokens[2], "subdomain")) + reln = dns_namereln_subdomain; + else if (!strcmp(Tokens[2], "equal")) + reln = dns_namereln_equal; + else if (!strcmp(Tokens[2], "commonancestor")) + reln = dns_namereln_commonancestor; + else { + t_info("bad format at line %d\n", + line); + continue; + } + result = test_dns_name_fullcompare( + Tokens[0], + Tokens[1], + reln, + atoi(Tokens[3]), + atoi(Tokens[4])); + } else { + t_info("bad format at line %d\n", line); + } + + (void)free(p); + t_result(result); + } + (void)fclose(fp); + } else { + t_info("Missing datafile dns_name_fullcompare_data\n"); + t_result(result); + } +} + +static const char *a23 = + "dns_name_compare(name1, name2) returns information about " + "the relative ordering under the DNSSEC ordering relationship " + "of name1 and name2"; + +/*% + * a24 thru a29 merged into a23. + */ + +static int +test_dns_name_compare(char *name1, char *name2, int exp_order) { + int result; + int order; + isc_result_t dns_result; + dns_name_t dns_name1; + dns_name_t dns_name2; + + result = T_UNRESOLVED; + + t_info("testing %s %s %s\n", name1, + exp_order == 0 ? "==": (exp_order == -1 ? "<" : ">"), + name2); + + dns_result = dname_from_tname(name1, &dns_name1); + if (dns_result == ISC_R_SUCCESS) { + dns_result = dname_from_tname(name2, &dns_name2); + if (dns_result == ISC_R_SUCCESS) { + order = dns_name_compare(&dns_name1, &dns_name2); + /* + * Normalize order. + */ + if (order < 0) + order = -1; + else if (order > 0) + order = 1; + if (order != exp_order) { + t_info("expected order of %d, got %d\n", + exp_order, order); + result = T_FAIL; + } else + result = T_PASS; + } else { + t_info("dname_from_tname failed, result == %s\n", + dns_result_totext(result)); + } + } else { + t_info("dname_from_tname failed, result == %s\n", + dns_result_totext(result)); + } + + return (result); +} + +static void +t_dns_name_compare(void) { + int line; + int cnt; + int result; + char *p; + FILE *fp; + + t_assert("dns_name_compare", 1, T_REQUIRED, a23); + + result = T_UNRESOLVED; + fp = fopen("dns_name_compare_data", "r"); + if (fp != NULL) { + line = 0; + while ((p = t_fgetbs(fp)) != NULL) { + + ++line; + + /* + * Skip comment lines. + */ + if ((isspace((unsigned char)*p)) || (*p == '#')) { + (void)free(p); + continue; + } + + cnt = bustline(p, Tokens); + if (cnt == 3) { + /* + * name1, name2, order. + */ + result = test_dns_name_compare( + Tokens[0], + Tokens[1], + atoi(Tokens[2])); + } else { + t_info("bad datafile format at line %d\n", + line); + } + + (void)free(p); + t_result(result); + } + (void)fclose(fp); + } else { + t_info("Missing datafile dns_name_compare_data\n"); + t_result(result); + } +} + +static const char *a30 = + "dns_name_rdatacompare(name1, name2) returns information " + "about the relative ordering of name1 and name2 as if they " + "are part of rdata in DNSSEC canonical form"; + +/*% + * a31, a32 merged into a30. + */ + +static int +test_dns_name_rdatacompare(char *name1, char *name2, int exp_order) { + int result; + int order; + isc_result_t dns_result; + dns_name_t dns_name1; + dns_name_t dns_name2; + + result = T_UNRESOLVED; + + t_info("testing %s %s %s\n", name1, + exp_order == 0 ? "==": (exp_order == -1 ? "<" : ">"), name2); + + dns_result = dname_from_tname(name1, &dns_name1); + if (dns_result == ISC_R_SUCCESS) { + dns_result = dname_from_tname(name2, &dns_name2); + if (dns_result == ISC_R_SUCCESS) { + order = dns_name_rdatacompare(&dns_name1, &dns_name2); + /* + * Normalize order. + */ + if (order < 0) + order = -1; + else if (order > 0) + order = 1; + if (order != exp_order) { + t_info("expected order of %d, got %d\n", + exp_order, order); + result = T_FAIL; + } else + result = T_PASS; + } else { + t_info("dname_from_tname failed, result == %s\n", + dns_result_totext(result)); + } + } else { + t_info("dname_from_tname failed, result == %s\n", + dns_result_totext(result)); + } + + return (result); +} + +static void +t_dns_name_rdatacompare(void) { + int line; + int cnt; + int result; + char *p; + FILE *fp; + + t_assert("dns_name_rdatacompare", 1, T_REQUIRED, a30); + + result = T_UNRESOLVED; + fp = fopen("dns_name_rdatacompare_data", "r"); + if (fp != NULL) { + line = 0; + while ((p = t_fgetbs(fp)) != NULL) { + + ++line; + + /* + * Skip comment lines. + */ + if ((isspace((unsigned char)*p)) || (*p == '#')) { + (void)free(p); + continue; + } + + cnt = bustline(p, Tokens); + if (cnt == 3) { + /* + * name1, name2, order. + */ + result = test_dns_name_rdatacompare( + Tokens[0], + Tokens[1], + atoi(Tokens[2])); + } else { + t_info("bad datafile format at line %d\n", + line); + } + + (void)free(p); + t_result(result); + } + (void)fclose(fp); + } else { + t_info("Missing datafile dns_name_rdatacompare_data\n"); + t_result(result); + } +} + + +static const char *a33 = + "when name1 is a subdomain of name2, " + "dns_name_issubdomain(name1, name2) returns true, " + "otherwise it returns false."; + +/*% + * a34 merged into a33. + */ + +static int +test_dns_name_issubdomain(char *name1, char *name2, isc_boolean_t exp_rval) { + int result; + isc_boolean_t rval; + isc_result_t dns_result; + dns_name_t dns_name1; + dns_name_t dns_name2; + + result = T_UNRESOLVED; + + t_info("testing %s %s a subdomain of %s\n", name1, + exp_rval == 0 ? "is not" : "is", name2); + + dns_result = dname_from_tname(name1, &dns_name1); + if (dns_result == ISC_R_SUCCESS) { + dns_result = dname_from_tname(name2, &dns_name2); + if (dns_result == ISC_R_SUCCESS) { + rval = dns_name_issubdomain(&dns_name1, &dns_name2); + + if (rval != exp_rval) { + t_info("expected return value of %s, got %s\n", + exp_rval == ISC_TRUE ? "true" : "false", + rval == ISC_TRUE ? "true" : "false"); + result = T_FAIL; + } else + result = T_PASS; + } else { + t_info("dname_from_tname failed, result == %s\n", + dns_result_totext(result)); + } + } else { + t_info("dname_from_tname failed, result == %s\n", + dns_result_totext(result)); + } + + return (result); +} + +static void +t_dns_name_issubdomain(void) { + int line; + int cnt; + int result; + char *p; + FILE *fp; + + t_assert("dns_name_issubdomain", 1, T_REQUIRED, a33); + + result = T_UNRESOLVED; + fp = fopen("dns_name_issubdomain_data", "r"); + if (fp != NULL) { + line = 0; + while ((p = t_fgetbs(fp)) != NULL) { + + ++line; + + /* + * Skip comment lines. + */ + if ((isspace((unsigned char)*p)) || (*p == '#')) { + (void)free(p); + continue; + } + + cnt = bustline(p, Tokens); + if (cnt == 3) { + /* + * name1, name2, issubdomain_p. + */ + result = test_dns_name_issubdomain( + Tokens[0], + Tokens[1], + atoi(Tokens[2]) == 0 ? + ISC_FALSE : ISC_TRUE); + } else { + t_info("bad datafile format at line %d\n", + line); + } + + (void)free(p); + t_result(result); + } + (void)fclose(fp); + } else { + t_info("Missing datafile dns_name_issubdomain_data\n"); + t_result(result); + } +} + +static const char *a35 = + "dns_name_countlabels(name) returns the number " + "of labels in name"; + +static int +test_dns_name_countlabels(char *test_name, unsigned int exp_nlabels) { + int result; + unsigned int nlabels; + isc_result_t dns_result; + dns_name_t dns_name; + + result = T_UNRESOLVED; + + t_info("testing %s\n", test_name); + + dns_result = dname_from_tname(test_name, &dns_name); + if (dns_result == ISC_R_SUCCESS) { + nlabels = dns_name_countlabels(&dns_name); + + if (nlabels != exp_nlabels) { + t_info("expected %d, got %d\n", exp_nlabels, nlabels); + result = T_FAIL; + } else + result = T_PASS; + } else { + t_info("dname_from_tname failed, result == %s\n", + dns_result_totext(dns_result)); + } + + return (result); +} + +static void +t_dns_name_countlabels(void) { + int line; + int cnt; + int result; + char *p; + FILE *fp; + + t_assert("dns_name_countlabels", 1, T_REQUIRED, a35); + + result = T_UNRESOLVED; + fp = fopen("dns_name_countlabels_data", "r"); + if (fp != NULL) { + line = 0; + while ((p = t_fgetbs(fp)) != NULL) { + + ++line; + + /* + * Skip comment lines. + */ + if ((isspace((unsigned char)*p)) || (*p == '#')) { + (void)free(p); + continue; + } + + cnt = bustline(p, Tokens); + if (cnt == 2) { + /* + * name, nlabels. + */ + result = test_dns_name_countlabels(Tokens[0], + atoi(Tokens[1])); + } else { + t_info("bad format at line %d\n", line); + } + + (void)free(p); + t_result(result); + } + (void)fclose(fp); + } else { + t_info("Missing datafile dns_name_countlabels_data\n"); + t_result(result); + } +} + +static const char *a36 = + "when n is less than the number of labels in name, " + "dns_name_getlabel(name, n, labelp) initializes labelp " + "to point to the nth label in name"; + +/*% + * The strategy here is two take two dns names with a shared label in + * different positions, get the two labels and compare them for equality. + * If they don't match, dns_name_getlabel failed. + */ + +static int +test_dns_name_getlabel(char *test_name1, int label1_pos, char *test_name2, + int label2_pos) +{ + int result; + int nfails; + unsigned int cnt; + unsigned char *p; + unsigned char *q; + dns_name_t dns_name1; + dns_name_t dns_name2; + dns_label_t dns_label1; + dns_label_t dns_label2; + isc_result_t dns_result; + + nfails = 0; + result = T_UNRESOLVED; + + t_info("testing with %s and %s\n", test_name1, test_name2); + + dns_result = dname_from_tname(test_name1, &dns_name1); + if (dns_result == ISC_R_SUCCESS) { + dns_result = dname_from_tname(test_name2, &dns_name2); + if (dns_result == ISC_R_SUCCESS) { + dns_name_getlabel(&dns_name1, label1_pos, &dns_label1); + dns_name_getlabel(&dns_name2, label2_pos, &dns_label2); + if (dns_label1.length != dns_label2.length) { + t_info("label lengths differ\n"); + ++nfails; + } + p = dns_label1.base; + q = dns_label2.base; + for (cnt = 0; cnt < dns_label1.length; ++cnt) { + if (*p++ != *q++) { + t_info("labels differ at position %d", + cnt); + ++nfails; + } + } + if (nfails == 0) + result = T_PASS; + else + result = T_FAIL; + } else { + t_info("dname_from_tname failed, result == %s", + dns_result_totext(result)); + } + } else { + t_info("dname_from_tname failed, result == %s", + dns_result_totext(result)); + } + return (result); +} + +static void +t_dns_name_getlabel(void) { + int line; + int cnt; + int result; + char *p; + FILE *fp; + + t_assert("dns_name_getlabel", 1, T_REQUIRED, a36); + + result = T_UNRESOLVED; + fp = fopen("dns_name_getlabel_data", "r"); + if (fp != NULL) { + line = 0; + while ((p = t_fgetbs(fp)) != NULL) { + + ++line; + + /* + * Skip comment lines. + */ + if ((isspace((unsigned char)*p)) || (*p == '#')) { + (void)free(p); + continue; + } + + cnt = bustline(p, Tokens); + if (cnt == 4) { + /* + * name1, name2, nlabels. + */ + result = test_dns_name_getlabel(Tokens[0], + atoi(Tokens[1]), + Tokens[2], + atoi(Tokens[3])); + } else { + t_info("bad format at line %d\n", line); + } + + (void)free(p); + t_result(result); + } + (void)fclose(fp); + } else { + t_info("Missing datafile dns_name_getlabel_data\n"); + t_result(result); + } +} + +static const char *a37 = + "when source contains at least first + n labels, " + "dns_name_getlabelsequence(source, first, n, target) " + "initializes target to point to the n label sequence of " + "labels in source starting with first"; + +/*% + * We adopt a similiar strategy to that used by the dns_name_getlabel test. + */ + +static int +test_dns_name_getlabelsequence(char *test_name1, int label1_start, + char *test_name2, int label2_start, int range) +{ + int result; + int nfails; + unsigned int cnt; + unsigned char *p; + unsigned char *q; + dns_name_t dns_name1; + dns_name_t dns_name2; + dns_name_t dns_targetname1; + dns_name_t dns_targetname2; + isc_result_t dns_result; + isc_buffer_t buffer1; + isc_buffer_t buffer2; + unsigned char junk1[BUFLEN]; + unsigned char junk2[BUFLEN]; + + nfails = 0; + result = T_UNRESOLVED; + dns_result = dname_from_tname(test_name1, &dns_name1); + if (dns_result == ISC_R_SUCCESS) { + dns_result = dname_from_tname(test_name2, &dns_name2); + if (dns_result == ISC_R_SUCCESS) { + t_info("testing %s %s\n", test_name1, test_name2); + dns_name_init(&dns_targetname1, NULL); + dns_name_init(&dns_targetname2, NULL); + dns_name_getlabelsequence(&dns_name1, label1_start, + range, &dns_targetname1); + dns_name_getlabelsequence(&dns_name2, label2_start, + range, &dns_targetname2); + + /* + * Now convert both targets to text for comparison. + */ + isc_buffer_init(&buffer1, junk1, BUFLEN); + isc_buffer_init(&buffer2, junk2, BUFLEN); + dns_name_totext(&dns_targetname1, ISC_TRUE, &buffer1); + dns_name_totext(&dns_targetname2, ISC_TRUE, &buffer2); + if (buffer1.used == buffer2.used) { + p = buffer1.base; + q = buffer2.base; + for (cnt = 0; cnt < buffer1.used; ++cnt) { + if (*p != *q) { + ++nfails; + t_info("names differ at %d\n", + cnt); + break; + } + ++p; ++q; + } + } else { + ++nfails; + t_info("lengths differ\n"); + } + if (nfails == 0) + result = T_PASS; + else + result = T_FAIL; + } else { + t_info("dname_from_tname failed, result == %s", + dns_result_totext(dns_result)); + } + } else { + t_info("dname_from_tname failed, result == %s", + dns_result_totext(dns_result)); + } + return (result); +} + +static void +t_dns_name_getlabelsequence(void) { + int line; + int cnt; + int result; + char *p; + FILE *fp; + + t_assert("dns_name_getlabelsequence", 1, T_REQUIRED, a37); + + result = T_UNRESOLVED; + fp = fopen("dns_name_getlabelsequence_data", "r"); + if (fp != NULL) { + line = 0; + while ((p = t_fgetbs(fp)) != NULL) { + + ++line; + + /* + * Skip comment lines. + */ + if ((isspace((unsigned char)*p)) || (*p == '#')) { + (void)free(p); + continue; + } + + cnt = bustline(p, Tokens); + if (cnt == 5) { + /* + * name1, name2, nlabels. + */ + result = test_dns_name_getlabelsequence( + Tokens[0], + atoi(Tokens[1]), + Tokens[2], + atoi(Tokens[3]), + atoi(Tokens[4])); + } else { + t_info("bad format at line %d\n", line); + } + + (void)free(p); + t_result(result); + } + (void)fclose(fp); + } else { + t_info("Missing datafile dns_name_getlabelsequence_data\n"); + t_result(result); + } +} + +static const char *a38 = + "dns_name_fromregion(name, region) converts a DNS name " + "from a region representation to a name representation"; + +static int +test_dns_name_fromregion(char *test_name) { + int result; + int order; + unsigned int nlabels; + isc_result_t dns_result; + dns_name_t dns_name1; + dns_name_t dns_name2; + dns_namereln_t dns_namereln; + isc_region_t region; + + result = T_UNRESOLVED; + + t_info("testing %s\n", test_name); + + dns_result = dname_from_tname(test_name, &dns_name1); + if (dns_result == ISC_R_SUCCESS) { + + dns_name_toregion(&dns_name1, ®ion); + + dns_name_init(&dns_name2, NULL); + dns_name_fromregion(&dns_name2, ®ion); + dns_namereln = dns_name_fullcompare(&dns_name1, &dns_name2, + &order, &nlabels); + if (dns_namereln == dns_namereln_equal) + result = T_PASS; + else + result = T_FAIL; + } else { + t_info("dname_from_tname failed, result == %s\n", + dns_result_totext(result)); + } + return (result); +} + +static void +t_dns_name_fromregion(void) { + int line; + int cnt; + int result; + char *p; + FILE *fp; + + t_assert("dns_name_fromregion", 1, T_REQUIRED, a38); + + result = T_UNRESOLVED; + fp = fopen("dns_name_fromregion_data", "r"); + if (fp != NULL) { + line = 0; + while ((p = t_fgetbs(fp)) != NULL) { + + ++line; + + /* + * Skip comment lines. + */ + if ((isspace((unsigned char)*p)) || (*p == '#')) { + (void)free(p); + continue; + } + + cnt = bustline(p, Tokens); + if (cnt == 1) { + /* + * test_name. + */ + result = test_dns_name_fromregion(Tokens[0]); + } else { + t_info("bad format at line %d\n", line); + } + + (void)free(p); + t_result(result); + } + (void)fclose(fp); + } else { + t_info("Missing datafile dns_name_fromregion_data\n"); + t_result(result); + } +} + +static const char *a39 = + "dns_name_toregion(name, region) converts a DNS name " + "from a region representation to a name representation"; + +static void +t_dns_name_toregion(void) { + int line; + int cnt; + int result; + char *p; + FILE *fp; + + t_assert("dns_name_toregion", 1, T_REQUIRED, a39); + + result = T_UNRESOLVED; + fp = fopen("dns_name_toregion_data", "r"); + if (fp != NULL) { + line = 0; + while ((p = t_fgetbs(fp)) != NULL) { + + ++line; + + /* + * Skip comment lines. + */ + if ((isspace((unsigned char)*p)) || (*p == '#')) { + (void)free(p); + continue; + } + + cnt = bustline(p, Tokens); + if (cnt == 1) { + /* + * test_name. + */ + result = test_dns_name_fromregion(Tokens[0]); + } else { + t_info("bad format at line %d\n", line); + } + + (void)free(p); + t_result(result); + } + (void)fclose(fp); + } else { + t_info("Missing datafile dns_name_toregion_data\n"); + t_result(result); + } +} + +static const char *a40 = + "dns_name_fromtext(name, source, origin, downcase, target) " + "converts the textual representation of a DNS name at source " + "into uncompressed wire form at target, appending origin to " + "the converted name if origin is non-NULL and converting " + "upper case to lower case during conversion " + "if downcase is true."; + +static int +test_dns_name_fromtext(char *test_name1, char *test_name2, char *test_origin, + isc_boolean_t downcase) +{ + int result; + int order; + unsigned int nlabels; + unsigned char junk1[BUFLEN]; + unsigned char junk2[BUFLEN]; + unsigned char junk3[BUFLEN]; + isc_buffer_t binbuf1; + isc_buffer_t binbuf2; + isc_buffer_t binbuf3; + isc_buffer_t txtbuf1; + isc_buffer_t txtbuf2; + isc_buffer_t txtbuf3; + dns_name_t dns_name1; + dns_name_t dns_name2; + dns_name_t dns_name3; + isc_result_t dns_result; + dns_namereln_t dns_namereln; + + result = T_UNRESOLVED; + + t_info("testing %s %s %s\n", test_name1, test_name2, test_origin); + + isc_buffer_init(&binbuf1, junk1, BUFLEN); + isc_buffer_init(&binbuf2, junk2, BUFLEN); + isc_buffer_init(&binbuf3, junk3, BUFLEN); + + isc_buffer_init(&txtbuf1, test_name1, strlen(test_name1)); + isc_buffer_add(&txtbuf1, strlen(test_name1)); + + isc_buffer_init(&txtbuf2, test_name2, strlen(test_name2)); + isc_buffer_add(&txtbuf2, strlen(test_name2)); + + isc_buffer_init(&txtbuf3, test_origin, strlen(test_origin)); + isc_buffer_add(&txtbuf3, strlen(test_origin)); + dns_name_init(&dns_name1, NULL); + dns_name_init(&dns_name2, NULL); + dns_name_init(&dns_name3, NULL); + dns_name_setbuffer(&dns_name1, &binbuf1); + dns_name_setbuffer(&dns_name2, &binbuf2); + dns_name_setbuffer(&dns_name3, &binbuf3); + + dns_result = dns_name_fromtext(&dns_name3, &txtbuf3, NULL, + ISC_FALSE, &binbuf3); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext(dns_name3) failed, result == %s\n", + dns_result_totext(dns_result)); + return (T_FAIL); + } + + dns_result = dns_name_fromtext(&dns_name1, &txtbuf1, &dns_name3, + downcase, &binbuf1); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext(dns_name1) failed, result == %s\n", + dns_result_totext(dns_result)); + return (T_FAIL); + } + + dns_result = dns_name_fromtext(&dns_name2, &txtbuf2, NULL, + ISC_FALSE, &binbuf2); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext(dns_name2) failed, result == %s\n", + dns_result_totext(dns_result)); + return (T_FAIL); + } + + dns_namereln = dns_name_fullcompare(&dns_name1, &dns_name2, &order, + &nlabels); + + if (dns_namereln == dns_namereln_equal) + result = T_PASS; + else { + t_info("dns_name_fullcompare returned %s\n", + dns_namereln_to_text(dns_namereln)); + result = T_FAIL; + } + + return (result); +} + +static void +t_dns_name_fromtext(void) { + int line; + int cnt; + int result; + char *p; + FILE *fp; + + t_assert("dns_name_fromtext", 1, T_REQUIRED, a40); + + result = T_UNRESOLVED; + fp = fopen("dns_name_fromtext_data", "r"); + if (fp != NULL) { + line = 0; + while ((p = t_fgetbs(fp)) != NULL) { + + ++line; + + /* + * Skip comment lines. + */ + if ((isspace((unsigned char)*p)) || (*p == '#')) { + (void)free(p); + continue; + } + + cnt = bustline(p, Tokens); + if (cnt == 4) { + /* + * test_name1, test_name2, test_origin, + * downcase. + */ + result = test_dns_name_fromtext(Tokens[0], + Tokens[1], + Tokens[2], + atoi(Tokens[3]) + == 0 ? + ISC_FALSE : + ISC_TRUE); + } else { + t_info("bad format at line %d\n", line); + } + + (void)free(p); + t_result(result); + } + (void)fclose(fp); + } else { + t_info("Missing datafile dns_name_fromtext\n"); + t_result(result); + } +} + +static const char *a41 = + "dns_name_totext(name, omit_final_dot, target) converts " + "the DNS name 'name' in wire format to textual format " + "at target, and adds a final '.' to the name if " + "omit_final_dot is false"; + +static int +test_dns_name_totext(char *test_name, isc_boolean_t omit_final) { + int result; + int len; + int order; + unsigned int nlabels; + unsigned char junk1[BUFLEN]; + unsigned char junk2[BUFLEN]; + unsigned char junk3[BUFLEN]; + isc_buffer_t buf1; + isc_buffer_t buf2; + isc_buffer_t buf3; + dns_name_t dns_name1; + dns_name_t dns_name2; + isc_result_t dns_result; + dns_namereln_t dns_namereln; + + result = T_UNRESOLVED; + + t_info("testing %s\n", test_name); + + len = strlen(test_name); + isc_buffer_init(&buf1, test_name, len); + isc_buffer_add(&buf1, len); + + dns_name_init(&dns_name1, NULL); + isc_buffer_init(&buf2, junk2, BUFLEN); + + /* + * Out of the data file to dns_name1. + */ + dns_result = dns_name_fromtext(&dns_name1, &buf1, NULL, ISC_FALSE, + &buf2); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext failed, result == %s\n", + dns_result_totext(dns_result)); + return (T_UNRESOLVED); + } + + /* + * From dns_name1 into a text buffer. + */ + isc_buffer_invalidate(&buf1); + isc_buffer_init(&buf1, junk1, BUFLEN); + dns_result = dns_name_totext(&dns_name1, omit_final, &buf1); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_totext failed, result == %s\n", + dns_result_totext(dns_result)); + return (T_FAIL); + } + + /* + * From the text buffer into dns_name2. + */ + dns_name_init(&dns_name2, NULL); + isc_buffer_init(&buf3, junk3, BUFLEN); + dns_result = dns_name_fromtext(&dns_name2, &buf1, NULL, ISC_FALSE, + &buf3); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext failed, result == %s\n", + dns_result_totext(dns_result)); + return (T_UNRESOLVED); + } + + dns_namereln = dns_name_fullcompare(&dns_name1, &dns_name2, + &order, &nlabels); + if (dns_namereln == dns_namereln_equal) + result = T_PASS; + else { + t_info("dns_name_fullcompare returned %s\n", + dns_namereln_to_text(dns_namereln)); + result = T_FAIL; + } + + return (result); +} + +static void +t_dns_name_totext(void) { + int line; + int cnt; + int result; + char *p; + FILE *fp; + + t_assert("dns_name_totext", 1, T_REQUIRED, a41); + + result = T_UNRESOLVED; + fp = fopen("dns_name_totext_data", "r"); + if (fp != NULL) { + line = 0; + while ((p = t_fgetbs(fp)) != NULL) { + + ++line; + + /* + * Skip comment lines. + */ + if ((isspace((unsigned char)*p)) || (*p == '#')) { + (void)free(p); + continue; + } + + cnt = bustline(p, Tokens); + if (cnt == 2) { + /* + * test_name, omit_final. + */ + result = test_dns_name_totext(Tokens[0], + atoi(Tokens[1]) == 0 ? + ISC_FALSE : + ISC_TRUE); + } else { + t_info("bad format at line %d\n", line); + } + + (void)free(p); + t_result(result); + } + (void)fclose(fp); + } else { + t_info("Missing datafile dns_name_totext\n"); + t_result(result); + } +} + +static const char *a42 = + "dns_name_fromwire(name, source, dctx, downcase, target) " + "converts the possibly compressed DNS name 'name' in wire " + "format to canonicalized form at target, performing upper to " + "lower case conversion if downcase is true, and returns " + "ISC_R_SUCCESS"; + +#if 0 + /* + * XXXRTH these tests appear to be broken, so I have + * disabled them. + */ +static const char *a43 = + "when a label length is invalid, dns_name_fromwire() " + "returns DNS_R_FORMERR"; + +static const char *a44 = + "when a label type is invalid, dns_name_fromwire() " + "returns DNS_R_BADLABELTYPE"; +#endif + +static const char *a45 = + "when a name length is invalid, dns_name_fromwire() " + "returns DNS_R_FORMERR"; + +static const char *a46 = + "when a compression type is invalid, dns_name_fromwire() " + "returns DNS_R_DISALLOWED"; + +static const char *a47 = + "when a bad compression pointer is encountered, " + "dns_name_fromwire() returns DNS_R_BADPOINTER"; + +static const char *a48 = + "when input ends unexpected, dns_name_fromwire() " + "returns ISC_R_UNEXPECTEDEND"; + +static const char *a49 = + "when there is not enough space in target, " + "dns_name_fromwire(name, source, dcts, downcase, target) " + "returns ISC_R_NOSPACE"; + +static int +test_dns_name_fromwire(char *datafile_name, int testname_offset, int downcase, + unsigned int dc_method, char *exp_name, + isc_result_t exp_result, size_t buflen) +{ + int result; + int order; + unsigned int nlabels; + int len; + unsigned char buf1[BIGBUFLEN]; + char buf2[BUFLEN]; + isc_buffer_t iscbuf1; + isc_buffer_t iscbuf2; + dns_name_t dns_name1; + dns_name_t dns_name2; + isc_result_t dns_result; + dns_namereln_t dns_namereln; + dns_decompress_t dctx; + + result = T_UNRESOLVED; + + t_info("testing using %s\n", datafile_name); + len = getmsg(datafile_name, buf1, BIGBUFLEN, &iscbuf1); + + isc_buffer_setactive(&iscbuf1, len); + iscbuf1.current = testname_offset; + + isc_buffer_init(&iscbuf2, buf2, buflen); + dns_name_init(&dns_name1, NULL); + dns_decompress_init(&dctx, -1, DNS_DECOMPRESS_STRICT); + dns_decompress_setmethods(&dctx, dc_method); + dns_result = dns_name_fromwire(&dns_name1, &iscbuf1, + &dctx, downcase ? ISC_TRUE : ISC_FALSE, + &iscbuf2); + + if ((dns_result == exp_result) && (exp_result == ISC_R_SUCCESS)) { + + dns_result = dname_from_tname(exp_name, &dns_name2); + if (dns_result == ISC_R_SUCCESS) { + dns_namereln = dns_name_fullcompare(&dns_name1, + &dns_name2, + &order, &nlabels); + if (dns_namereln != dns_namereln_equal) { + t_info("dns_name_fullcompare returned %s\n", + dns_namereln_to_text(dns_namereln)); + result = T_FAIL; + } else { + result = T_PASS; + } + } else { + t_info("dns_name_fromtext %s failed, result = %s\n", + exp_name, dns_result_totext(dns_result)); + result = T_UNRESOLVED; + } + } else if (dns_result == exp_result) { + result = T_PASS; + } else { + t_info("dns_name_fromwire returned %s\n", + dns_result_totext(dns_result)); + result = T_FAIL; + } + + return (result); +} + +static void +t_dns_name_fromwire_x(const char *testfile, size_t buflen) { + int line; + int cnt; + int result; + unsigned int dc_method; + isc_result_t exp_result; + char *p; + char *tok; + FILE *fp; + + result = T_UNRESOLVED; + fp = fopen(testfile, "r"); + if (fp != NULL) { + line = 0; + while ((p = t_fgetbs(fp)) != NULL) { + + ++line; + + /* + * Skip comment lines. + */ + if ((isspace((unsigned char)*p)) || (*p == '#')) { + (void)free(p); + continue; + } + + cnt = bustline(p, Tokens); + if (cnt == 6) { + /* + * datafile_name, testname_offset, + * downcase, dc_method, + * exp_name, exp_result. + */ + + tok = Tokens[5]; + exp_result = ISC_R_SUCCESS; + if (! strcmp(tok, "ISC_R_SUCCESS")) + exp_result = ISC_R_SUCCESS; + else if (! strcmp(tok, "ISC_R_NOSPACE")) + exp_result = ISC_R_NOSPACE; + else if (! strcmp(tok, "DNS_R_BADLABELTYPE")) + exp_result = DNS_R_BADLABELTYPE; + else if (! strcmp(tok, "DNS_R_FORMERR")) + exp_result = DNS_R_FORMERR; + else if (! strcmp(tok, "DNS_R_BADPOINTER")) + exp_result = DNS_R_BADPOINTER; + else if (! strcmp(tok, "ISC_R_UNEXPECTEDEND")) + exp_result = ISC_R_UNEXPECTEDEND; + else if (! strcmp(tok, "DNS_R_TOOMANYHOPS")) + exp_result = DNS_R_TOOMANYHOPS; + else if (! strcmp(tok, "DNS_R_DISALLOWED")) + exp_result = DNS_R_DISALLOWED; + else if (! strcmp(tok, "DNS_R_NAMETOOLONG")) + exp_result = DNS_R_NAMETOOLONG; + + tok = Tokens[3]; + dc_method = DNS_COMPRESS_NONE; + if (! strcmp(tok, "DNS_COMPRESS_GLOBAL14")) + dc_method = DNS_COMPRESS_GLOBAL14; + else if (! strcmp(tok, "DNS_COMPRESS_ALL")) + dc_method = DNS_COMPRESS_ALL; + + result = test_dns_name_fromwire(Tokens[0], + atoi(Tokens[1]), + atoi(Tokens[2]), + dc_method, + Tokens[4], + exp_result, + buflen); + } else { + t_info("bad format at line %d\n", line); + } + + (void)free(p); + t_result(result); + } + (void)fclose(fp); + } else { + t_info("Missing datafile %s\n", testfile); + t_result(result); + } +} + +static void +t_dns_name_fromwire(void) { + t_assert("dns_name_fromwire", 1, T_REQUIRED, a42); + t_dns_name_fromwire_x("dns_name_fromwire_1_data", BUFLEN); + +#if 0 + /* + * XXXRTH these tests appear to be broken, so I have + * disabled them. + */ + t_assert("dns_name_fromwire", 2, T_REQUIRED, a43); + t_dns_name_fromwire_x("dns_name_fromwire_2_data", BUFLEN); + + t_assert("dns_name_fromwire", 3, T_REQUIRED, a44); + t_dns_name_fromwire_x("dns_name_fromwire_3_data", BUFLEN); +#endif + + t_assert("dns_name_fromwire", 4, T_REQUIRED, a45); + t_dns_name_fromwire_x("dns_name_fromwire_4_data", BUFLEN); + + t_assert("dns_name_fromwire", 5, T_REQUIRED, a46); + t_dns_name_fromwire_x("dns_name_fromwire_5_data", BUFLEN); + + t_assert("dns_name_fromwire", 6, T_REQUIRED, a47); + t_dns_name_fromwire_x("dns_name_fromwire_6_data", BUFLEN); + + t_assert("dns_name_fromwire", 7, T_REQUIRED, a48); + t_dns_name_fromwire_x("dns_name_fromwire_7_data", BUFLEN); + + t_assert("dns_name_fromwire", 9, T_REQUIRED, a49); + t_dns_name_fromwire_x("dns_name_fromwire_8_data", 2); +} + + +static const char *a51 = + "dns_name_towire(name, cctx, target) converts the DNS name " + "'name' into wire format, compresses it as specified " + "by the compression context cctx, stores the result in " + "target and returns DNS_SUCCESS"; + +static const char *a52 = + "when not enough space exists in target, " + "dns_name_towire(name, cctx, target) returns ISC_R_NOSPACE"; + +static int +test_dns_name_towire(char *testname, unsigned int dc_method, char *exp_data, + int exp_data_len, isc_result_t exp_result, size_t buflen) +{ + int result; + int val; + int len; + unsigned char buf2[BUFLEN]; + unsigned char buf3[BUFLEN]; + isc_buffer_t iscbuf1; + isc_buffer_t iscbuf2; + isc_buffer_t iscbuf3; + dns_name_t dns_name; + isc_result_t dns_result; + isc_result_t isc_result; + dns_compress_t cctx; + isc_mem_t *mctx; + + t_info("testing using %s\n", testname); + + result = T_UNRESOLVED; + mctx = NULL; + + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed\n"); + return (result); + } + dns_compress_init(&cctx, -1, mctx); + dns_compress_setmethods(&cctx, dc_method); + dns_name_init(&dns_name, NULL); + len = strlen(testname); + isc_buffer_init(&iscbuf1, testname, len); + isc_buffer_add(&iscbuf1, len); + isc_buffer_init(&iscbuf2, buf2, BUFLEN); + dns_result = dns_name_fromtext(&dns_name, &iscbuf1, NULL, ISC_FALSE, + &iscbuf2); + if (dns_result == ISC_R_SUCCESS) { + isc_buffer_init(&iscbuf3, buf3, buflen); + dns_result = dns_name_towire(&dns_name, &cctx, &iscbuf3); + if (dns_result == exp_result) { + if (exp_result == ISC_R_SUCCESS) { + /* + * Compare results with expected data. + */ + val = chkdata(buf3, iscbuf3.used, exp_data, + exp_data_len); + if (val == 0) + result = T_PASS; + else + result = T_FAIL; + } else + result = T_PASS; + } else { + t_info("dns_name_towire unexpectedly returned %s\n", + dns_result_totext(dns_result)); + result = T_FAIL; + } + } else { + t_info("dns_name_fromtext %s failed, result = %s\n", + testname, dns_result_totext(dns_result)); + } + return (result); +} + +static void +t_dns_name_towire_x(const char *testfile, size_t buflen) { + int line; + int cnt; + int result; + unsigned int dc_method; + isc_result_t exp_result; + char *p; + FILE *fp; + + result = T_UNRESOLVED; + fp = fopen(testfile, "r"); + if (fp != NULL) { + line = 0; + while ((p = t_fgetbs(fp)) != NULL) { + + ++line; + + /* + * Skip comment lines. + */ + if ((isspace((unsigned char)*p)) || (*p == '#')) { + (void)free(p); + continue; + } + + cnt = bustline(p, Tokens); + if (cnt == 5) { + /* + * testname, dc_method, + * exp_data, exp_data_len, + * exp_result. + */ + + dc_method = t_dc_method_fromtext(Tokens[3]); + exp_result = t_dns_result_fromtext(Tokens[4]); + + result = test_dns_name_towire(Tokens[0], + dc_method, + Tokens[2], + atoi(Tokens[3]), + exp_result, + buflen); + } else { + t_info("bad format at line %d\n", line); + } + + (void)free(p); + t_result(result); + } + (void)fclose(fp); + } else { + t_info("Missing datafile %s\n", testfile); + t_result(result); + } +} + +static void +t_dns_name_towire_1(void) { + t_assert("dns_name_towire", 1, T_REQUIRED, a51); + t_dns_name_towire_x("dns_name_towire_1_data", BUFLEN); +} + +static void +t_dns_name_towire_2(void) { + t_assert("dns_name_towire", 2, T_REQUIRED, a52); + t_dns_name_towire_x("dns_name_towire_2_data", 2); +} + +static void +t_dns_name_towire(void) { + t_dns_name_towire_1(); + t_dns_name_towire_2(); +} + +#if 0 /* This is silly. A test should either exist, or not, but not + * one that just returns "UNTESTED." + */ +static const char *a53 = + "dns_name_concatenate(prefix, suffix, name, target) " + "concatenates prefix and suffix, stores the result " + "in target, canonicalizes any bitstring labels " + "and returns ISC_R_SUCCESS"; + +static void +t_dns_name_concatenate(void) { + t_assert("dns_name_concatenate", 1, T_REQUIRED, a53); + t_result(T_UNTESTED); +} +#endif + +testspec_t T_testlist[] = { + { t_dns_name_init, "dns_name_init" }, + { t_dns_name_invalidate, "dns_name_invalidate" }, + { t_dns_name_setbuffer, "dns_name_setbuffer" }, + { t_dns_name_hasbuffer, "dns_name_hasbuffer" }, + { t_dns_name_isabsolute, "dns_name_isabsolute" }, + { t_dns_name_hash, "dns_name_hash" }, + { t_dns_name_fullcompare, "dns_name_fullcompare" }, + { t_dns_name_compare, "dns_name_compare" }, + { t_dns_name_rdatacompare, "dns_name_rdatacompare" }, + { t_dns_name_issubdomain, "dns_name_issubdomain" }, + { t_dns_name_countlabels, "dns_name_countlabels" }, + { t_dns_name_getlabel, "dns_name_getlabel" }, + { t_dns_name_getlabelsequence, "dns_name_getlabelsequence" }, + { t_dns_name_fromregion, "dns_name_fromregion" }, + { t_dns_name_toregion, "dns_name_toregion" }, + { t_dns_name_fromwire, "dns_name_fromwire" }, + { t_dns_name_towire, "dns_name_towire" }, + { t_dns_name_fromtext, "dns_name_fromtext" }, + { t_dns_name_totext, "dns_name_totext" }, +#if 0 + { t_dns_name_concatenate, "dns_name_concatenate" }, +#endif + { NULL, NULL } + +}; + diff --git a/bin/tests/names/wire_test1.data b/bin/tests/names/wire_test1.data new file mode 100644 index 0000000..505134a --- /dev/null +++ b/bin/tests/names/wire_test1.data @@ -0,0 +1,13 @@ +# +# a global14 compression pointer +# +000a85800001000300000003 +0376697803636f6d0000020001c00c00 +02000100000e10000b05697372763102 +7061c00cc00c0002000100000e100009 +066e732d657874c00cc00c0002000100 +000e10000e036e733104676e61630363 +6f6d00c0250001000100000e100004cc +98b886c03c0001000100000e100004cc +98b840c051000100010002a14a0004c6 +97f8f6 diff --git a/bin/tests/names/wire_test2.data b/bin/tests/names/wire_test2.data new file mode 100644 index 0000000..ea03557 --- /dev/null +++ b/bin/tests/names/wire_test2.data @@ -0,0 +1,13 @@ +# +# a global14 compression pointer +# +000a85800001000300000003 +8376697803636f6d0000020001c00c00 +02000100000e10000b05697372763102 +7061c00cc00c0002000100000e100009 +066e732d657874c00cc00c0002000100 +000e10000e036e733104676e61630363 +6f6d00c0250001000100000e100004cc +98b886c03c0001000100000e100004cc +98b840c051000100010002a14a0004c6 +97f8f6 diff --git a/bin/tests/names/wire_test3_1.data b/bin/tests/names/wire_test3_1.data new file mode 100644 index 0000000..5f5ec59 --- /dev/null +++ b/bin/tests/names/wire_test3_1.data @@ -0,0 +1,11 @@ +# +# a bad compression pointer starting with the bits 1111 +# +000a85800001000300000003 +03766978 03636f6d 00 0002 0001 +f00c 0002 0001 0000 0e10 000b 056973727631 027061 c00c +c00c 0002 0001 0000 0e10 0009 066e732d657874 c00c +c00c 0002 0001 0000 0e10 000e 036e7331 04676e6163 03636f6d 00 +c025 0001 0001 0000 0e10 0004 cc98b886 +c03c 0001 0001 0000 0e10 0004 cc98b840 +c051 0001 0001 0002 a14a 0004 c697f8f6 diff --git a/bin/tests/names/wire_test3_2.data b/bin/tests/names/wire_test3_2.data new file mode 100644 index 0000000..fae2fe2 --- /dev/null +++ b/bin/tests/names/wire_test3_2.data @@ -0,0 +1,12 @@ +# +# a bad compression pointer due to forward reference of 0x30 to +# another compression pointer with a valid backreference +# +000a85800001000300000003 +03766978 03636f6d 00 0002 0001 +c030 0002 0001 0000 0e10 000b 056973727631 027061 c00c +c00c 0002 0001 0000 0e10 0009 066e732d657874 c00c +c00c 0002 0001 0000 0e10 000e 036e7331 04676e6163 03636f6d 00 +c025 0001 0001 0000 0e10 0004 cc98b886 +c03c 0001 0001 0000 0e10 0004 cc98b840 +c051 0001 0001 0002 a14a 0004 c697f8f6 diff --git a/bin/tests/names/wire_test4.data b/bin/tests/names/wire_test4.data new file mode 100644 index 0000000..dba6035 --- /dev/null +++ b/bin/tests/names/wire_test4.data @@ -0,0 +1,45 @@ +# +# invalid name length, pointer at offset 0x0226 points to +# long name at offset 0x25 +# +000a 8580 0001 0003 0000 0001 +03 766978 03 636f6d 00 0002 0001 +c00c 0002 0001 00000e10 +0101 +# long name starts here +03616263 0358595a 03616263 0358595a +03414243 0378797a 03414243 0378797a +03616263 0358595a 03616263 0358595a +03414243 0378797a 03414243 0378797a +03616263 0358595a 03616263 0358595a +03414243 0378797a 03414243 0378797a +03616263 0358595a 03616263 0358595a +03414243 0378797a 03414243 0378797a +03616263 0358595a 03616263 0358595a +03414243 0378797a 03414243 0378797a +03616263 0358595a 03616263 0358595a +03414243 0378797a 03414243 0378797a +03616263 0358595a 03616263 0358595a +03414243 0378797a 03414243 0378797a +03616263 0358595a 03616263 0358595a +03414243 0378797a 03414243 0378797a +03616263 0358595a 03616263 0358595a +03414243 0378797a 03414243 0378797a +03616263 0358595a 03616263 0358595a +03414243 0378797a 03414243 0378797a +03616263 0358595a 03616263 0358595a +03414243 0378797a 03414243 0378797a +03616263 0358595a 03616263 0358595a +03414243 0378797a 03414243 0378797a +03616263 0358595a 03616263 0358595a +03414243 0378797a 03414243 0378797a +03616263 0358595a 03616263 0358595a +03414243 0378797a 03414243 0378797a +03616263 0358595a 03616263 0358595a +03414243 0378797a 03414243 0378797a +03616263 0358595a 03616263 0358595a +03414243 0378797a 03414243 0378797a 00 +# compression pointer start here and refers back to long name +c023 0002 0001 00000e10 0009 066e732d657874 c00c +c00c 0002 0001 00000e10 000e 036e733104676e616303636f6d00 +c025 0001 0001 00000e10 0004 cc98b886 diff --git a/bin/tests/names/wire_test5.data b/bin/tests/names/wire_test5.data new file mode 100644 index 0000000..505134a --- /dev/null +++ b/bin/tests/names/wire_test5.data @@ -0,0 +1,13 @@ +# +# a global14 compression pointer +# +000a85800001000300000003 +0376697803636f6d0000020001c00c00 +02000100000e10000b05697372763102 +7061c00cc00c0002000100000e100009 +066e732d657874c00cc00c0002000100 +000e10000e036e733104676e61630363 +6f6d00c0250001000100000e100004cc +98b886c03c0001000100000e100004cc +98b840c051000100010002a14a0004c6 +97f8f6 diff --git a/bin/tests/names/wire_test6.data b/bin/tests/names/wire_test6.data new file mode 100644 index 0000000..1a05d26 --- /dev/null +++ b/bin/tests/names/wire_test6.data @@ -0,0 +1,13 @@ +# +# a bad pointer +# +000a85800001000300000003 +0376697803636f6d0000020001f00c00 +02000100000e10000b05697372763102 +7061c00cc00c0002000100000e100009 +066e732d657874c00cc00c0002000100 +000e10000e036e733104676e61630363 +6f6d00c0250001000100000e100004cc +98b886c03c0001000100000e100004cc +98b840c051000100010002a14a0004c6 +97f8f6 diff --git a/bin/tests/names/wire_test7.data b/bin/tests/names/wire_test7.data new file mode 100644 index 0000000..40fbbed --- /dev/null +++ b/bin/tests/names/wire_test7.data @@ -0,0 +1,5 @@ +# +# input ends unexpectedly +# +000a85800001000300000003 +0376697803636f6d0000020001c0 diff --git a/bin/tests/names/wire_test8.data b/bin/tests/names/wire_test8.data new file mode 100644 index 0000000..beabbf7 --- /dev/null +++ b/bin/tests/names/wire_test8.data @@ -0,0 +1,28 @@ +# +# too many hops DNS_POINTER_MAXHOPS is defined as 16 +# in lib/dns/include/dns/name.h +# +000a85800001000300000013 +03 766978 03 636f6d 00 0002 0001 +c00c 0002 0001 00000e10 000b 056973727631027061 c00c +c019 0002 0001 00000e10 0009 066e732d657874 c00c +c030 0002 0001 00000e10 000e 036e7331 04676e6163 03636f6d 00 +c045 0001 0001 00000e10 0004 cc98b886 +c05f 0001 0001 00000e10 0004 cc98b840 +c06f 0001 0001 0002a14a 0004 c697f8f6 +c07f 0001 0001 0002a14a 0004 c697f8f6 +c08f 0001 0001 0002a14a 0004 c697f8f6 +c09f 0001 0001 0002a14a 0004 c697f8f6 +c0af 0001 0001 0002a14a 0004 c697f8f6 +c0bf 0001 0001 0002a14a 0004 c697f8f6 +c0cf 0001 0001 0002a14a 0004 c697f8f6 +c0df 0001 0001 0002a14a 0004 c697f8f6 +c0ef 0001 0001 0002a14a 0004 c697f8f6 +c0ff 0001 0001 0002a14a 0004 c697f8f6 +c10f 0001 0001 0002a14a 0004 c697f8f6 +c11f 0001 0001 0002a14a 0004 c697f8f6 +c12f 0001 0001 0002a14a 0004 c697f8f6 +c13f 0001 0001 0002a14a 0004 c697f8f6 +c14f 0001 0001 0002a14a 0004 c697f8f6 +c15f 0001 0001 0002a14a 0004 c697f8f6 +c16f 0001 0001 0002a14a 0004 c697f8f6 diff --git a/bin/tests/ndc.conf b/bin/tests/ndc.conf new file mode 100644 index 0000000..bc2c0c6 --- /dev/null +++ b/bin/tests/ndc.conf @@ -0,0 +1,36 @@ +/* + * 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. + */ + +/* $Id: ndc.conf,v 1.11 2007/06/19 23:46:59 tbox Exp $ */ + +options { + default-server "velo.jab.fr" ; +# [ default-key key_name; ] +}; + +server "velo.jab.fr" { + key "akey"; + host "1.2.3.4"; +}; + +include "ndc.conf-include"; + +key "akey" { + algorithm "algo"; + secret "c2Vj"; +}; + diff --git a/bin/tests/ndc.conf-include b/bin/tests/ndc.conf-include new file mode 100644 index 0000000..58d1534 --- /dev/null +++ b/bin/tests/ndc.conf-include @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 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. + */ + +/* $Id: ndc.conf-include,v 1.6 2007/06/19 23:46:59 tbox Exp $ */ + +key "another-key" { + algorithm "al-gore-rhythm"; + secret "R29yZSBpbiAyMDA0IQo"; # "Gore in 2004!" +}; + + diff --git a/bin/tests/net/Makefile.in b/bin/tests/net/Makefile.in new file mode 100644 index 0000000..0c75c28 --- /dev/null +++ b/bin/tests/net/Makefile.in @@ -0,0 +1,53 @@ +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2000-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. + +# $Id: Makefile.in,v 1.16 2007/06/19 23:47:00 tbox Exp $ + +srcdir = @srcdir@ +VPATH = @srcdir@ +top_srcdir = @top_srcdir@ + +@BIND9_MAKE_INCLUDES@ + +CINCLUDES = ${TEST_INCLUDES} ${DNS_INCLUDES} ${ISC_INCLUDES} + +CDEFINES = +CWARNINGS = + +ISCLIBS = ../../../lib/isc/libisc.@A@ + +ISCDEPLIBS = ../../../lib/isc/libisc.@A@ + +DEPLIBS = ${ISCDEPLIBS} + +LIBS = ${ISCLIBS} @LIBS@ + +TARGETS = t_net@EXEEXT@ + +SRCS = driver.c netaddr_multicast.c sockaddr_multicast.c + +OBJS = driver.@O@ netaddr_multicast.@O@ sockaddr_multicast.@O@ + +@BIND9_MAKE_RULES@ + +t_net@EXEEXT@: ${OBJS} ${DEPLIBS} ${TLIB} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ ${OBJS} ${TLIB} ${LIBS} + +test: t_net@EXEEXT@ + -@./t_net@EXEEXT@ + +clean distclean:: + rm -f ${TARGETS} + rm -f ${OBJS} diff --git a/bin/tests/net/driver.c b/bin/tests/net/driver.c new file mode 100644 index 0000000..a8b3bf7 --- /dev/null +++ b/bin/tests/net/driver.c @@ -0,0 +1,107 @@ +/* + * 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. + */ + +/* $Id: driver.c,v 1.11 2007/06/19 23:47:00 tbox Exp $ */ + +#include <config.h> + +#include <stdlib.h> +#include <stdio.h> +#include <time.h> + +#include <isc/string.h> +#include <isc/util.h> + +#include "driver.h" + +#include "testsuite.h" + +#define NTESTS (sizeof(tests) / sizeof(test_t)) + +const char *gettime(void); +const char *test_result_totext(test_result_t); + +/* + * Not thread safe. + */ +const char * +gettime(void) { + static char now[512]; + time_t t; + + (void)time(&t); + + strftime(now, sizeof(now) - 1, + "%A %d %B %H:%M:%S %Y", + localtime(&t)); + + return (now); +} + +const char * +test_result_totext(test_result_t result) { + const char *s; + switch (result) { + case PASSED: + s = "PASS"; + break; + case FAILED: + s = "FAIL"; + break; + case UNTESTED: + s = "UNTESTED"; + break; + case UNKNOWN: + default: + s = "UNKNOWN"; + break; + } + + return (s); +} + +int +main(int argc, char **argv) { + test_t *test; + test_result_t result; + unsigned int n_failed; + unsigned int testno; + + UNUSED(argc); + UNUSED(argv); + + printf("S:%s:%s\n", SUITENAME, gettime()); + + n_failed = 0; + for (testno = 0; testno < NTESTS; testno++) { + test = &tests[testno]; + printf("T:%s:%u:A\n", test->tag, testno + 1); + printf("A:%s\n", test->description); + result = test->func(); + printf("R:%s\n", test_result_totext(result)); + if (result != PASSED) + n_failed++; + } + + printf("E:%s:%s\n", SUITENAME, gettime()); + + if (n_failed > 0) + exit(1); + + return (0); +} + diff --git a/bin/tests/net/driver.h b/bin/tests/net/driver.h new file mode 100644 index 0000000..1121efc --- /dev/null +++ b/bin/tests/net/driver.h @@ -0,0 +1,48 @@ +/* + * 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. + */ + +/* $Id: driver.h,v 1.8 2007/06/19 23:47:00 tbox Exp $ */ + +/* + * PASSED and FAILED mean the particular test passed or failed. + * + * UNKNOWN means that for one reason or another, the test process itself + * failed. For instance, missing files, error when parsing files or + * IP addresses, etc. That is, the test itself is broken, not what is + * being tested. + * + * UNTESTED means the test was unable to be run because a prerequisite test + * failed, the test is disabled, or the test needs a system component + * (for instance, Perl) and cannot run. + */ +typedef enum { + PASSED = 0, + FAILED = 1, + UNKNOWN = 2, + UNTESTED = 3 +} test_result_t; + +typedef test_result_t (*test_func_t)(void); + +typedef struct { + const char *tag; + const char *description; + test_func_t func; +} test_t; + +#define TESTDECL(name) test_result_t name(void) + diff --git a/bin/tests/net/netaddr_multicast.c b/bin/tests/net/netaddr_multicast.c new file mode 100644 index 0000000..79f260b --- /dev/null +++ b/bin/tests/net/netaddr_multicast.c @@ -0,0 +1,112 @@ +/* + * 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. + */ + +/* $Id: netaddr_multicast.c,v 1.12 2007/06/19 23:47:00 tbox Exp $ */ + +#include <config.h> + +#include <stdlib.h> +#include <stdio.h> + +#include <isc/net.h> +#include <isc/netaddr.h> +#include <isc/string.h> +#include <isc/types.h> +#include <isc/util.h> + +#include "driver.h" + +TESTDECL(netaddr_multicast); + +typedef struct { + int family; + const char *addr; + isc_boolean_t is_multicast; +} t_addr_t; + +static t_addr_t addrs[] = { + { AF_INET, "1.2.3.4", ISC_FALSE }, + { AF_INET, "4.3.2.1", ISC_FALSE }, + { AF_INET, "224.1.1.1", ISC_TRUE }, + { AF_INET, "1.1.1.244", ISC_FALSE }, + { AF_INET6, "::1", ISC_FALSE }, + { AF_INET6, "ff02::1", ISC_TRUE } +}; +#define NADDRS (sizeof(addrs) / sizeof(t_addr_t)) + +static isc_result_t to_netaddr(t_addr_t *, isc_netaddr_t *); + +static isc_result_t +to_netaddr(t_addr_t *addr, isc_netaddr_t *na) { + int r; + struct in_addr in; + struct in6_addr in6; + + switch (addr->family) { + case AF_INET: + r = inet_pton(AF_INET, addr->addr, (unsigned char *)&in); + if (r != 1) + return (ISC_R_FAILURE); + isc_netaddr_fromin(na, &in); + break; + case AF_INET6: + r = inet_pton(AF_INET6, addr->addr, (unsigned char *)&in6); + if (r != 1) + return (ISC_R_FAILURE); + isc_netaddr_fromin6(na, &in6); + break; + default: + return (ISC_R_UNEXPECTED); + } + + return (ISC_R_SUCCESS); +} + +test_result_t +netaddr_multicast(void) { + isc_netaddr_t na; + unsigned int n_fail; + t_addr_t *addr; + unsigned int i; + isc_result_t result; + isc_boolean_t tf; + + n_fail = 0; + for (i = 0; i < NADDRS; i++) { + addr = &addrs[i]; + result = to_netaddr(addr, &na); + if (result != ISC_R_SUCCESS) { + printf("I:to_netaddr() returned %s on item %u\n", + isc_result_totext(result), i); + return (UNKNOWN); + } + tf = isc_netaddr_ismulticast(&na); + if (tf == addr->is_multicast) { + printf("I:%s is%s multicast (PASSED)\n", + (addr->addr), (tf ? "" : " not")); + } else { + printf("I:%s is%s multicast (FAILED)\n", + (addr->addr), (tf ? "" : " not")); + n_fail++; + } + } + + if (n_fail > 0) + return (FAILED); + + return (PASSED); +} diff --git a/bin/tests/net/sockaddr_multicast.c b/bin/tests/net/sockaddr_multicast.c new file mode 100644 index 0000000..cfe04dc --- /dev/null +++ b/bin/tests/net/sockaddr_multicast.c @@ -0,0 +1,36 @@ +/* + * 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. + */ + +/* $Id: sockaddr_multicast.c,v 1.8 2007/06/19 23:47:00 tbox Exp $ */ + +#include <config.h> + +#include <stdlib.h> +#include <stdio.h> + +#include <isc/string.h> +#include <isc/util.h> + +#include "driver.h" + +TESTDECL(sockaddr_multicast); + +test_result_t +sockaddr_multicast(void) { + + return (PASSED); +} diff --git a/bin/tests/net/testsuite.h b/bin/tests/net/testsuite.h new file mode 100644 index 0000000..68a214c --- /dev/null +++ b/bin/tests/net/testsuite.h @@ -0,0 +1,33 @@ +/* + * 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. + */ + +/* $Id: testsuite.h,v 1.7 2007/06/19 23:47:00 tbox Exp $ */ + +#define SUITENAME "net" + +TESTDECL(netaddr_multicast); +TESTDECL(sockaddr_multicast); + +static test_t tests[] = { + { "isc_netaddr_ismulticast", + "Checking to see if multicast addresses are detected properly", + netaddr_multicast }, + { "isc_sockaddr_ismulticast", + "Checking to see if multicast addresses are detected properly", + sockaddr_multicast }, + +}; diff --git a/bin/tests/nsec3hash.c b/bin/tests/nsec3hash.c new file mode 100644 index 0000000..4a4a782 --- /dev/null +++ b/bin/tests/nsec3hash.c @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2006, 2008 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: nsec3hash.c,v 1.4 2008/09/26 01:31:19 marka Exp $ */ + +#include <config.h> + +#include <stdlib.h> +#include <stdarg.h> + +#include <isc/base32.h> +#include <isc/buffer.h> +#include <isc/hex.h> +#include <isc/iterated_hash.h> +#include <isc/print.h> +#include <isc/result.h> +#include <isc/string.h> +#include <isc/types.h> + +#include <dns/fixedname.h> +#include <dns/name.h> +#include <dns/types.h> + +const char *program = "nsec3hash"; + +static void +fatal(const char *format, ...) { + va_list args; + + fprintf(stderr, "%s: ", program); + va_start(args, format); + vfprintf(stderr, format, args); + va_end(args); + fprintf(stderr, "\n"); + exit(1); +} + +static void +check_result(isc_result_t result, const char *message) { + if (result != ISC_R_SUCCESS) + fatal("%s: %s", message, isc_result_totext(result)); +} + +static void +usage() { + fatal("salt hash iterations domain"); +} + +int +main(int argc, char **argv) { + dns_fixedname_t fixed; + dns_name_t *name; + isc_buffer_t buffer; + isc_region_t region; + isc_result_t result; + unsigned char hash[NSEC3_MAX_HASH_LENGTH]; + unsigned char salt[255]; + unsigned char text[1024]; + unsigned int hash_alg; + unsigned int length; + unsigned int iterations; + unsigned int salt_length; + + if (argc != 5) + usage(); + + if (strcmp(argv[1], "-") == 0) { + salt_length = 0; + salt[0] = 0; + } else { + isc_buffer_init(&buffer, salt, sizeof(salt)); + result = isc_hex_decodestring(argv[1], &buffer); + check_result(result, "isc_hex_decodestring(salt)"); + salt_length = isc_buffer_usedlength(&buffer); + if (salt_length > 255U) + fatal("salt too long"); + } + hash_alg = atoi(argv[2]); + if (hash_alg > 255U) + fatal("hash algorithm too large"); + iterations = atoi(argv[3]); + if (iterations > 0xffffU) + fatal("iterations to large"); + + dns_fixedname_init(&fixed); + name = dns_fixedname_name(&fixed); + isc_buffer_init(&buffer, argv[4], strlen(argv[4])); + isc_buffer_add(&buffer, strlen(argv[4])); + result = dns_name_fromtext(name, &buffer, dns_rootname, 0, NULL); + check_result(result, "dns_name_fromtext() failed"); + + dns_name_downcase(name, name, NULL); + length = isc_iterated_hash(hash, hash_alg, iterations, salt, + salt_length, name->ndata, name->length); + if (length == 0) + fatal("isc_iterated_hash failed"); + region.base = hash; + region.length = length; + isc_buffer_init(&buffer, text, sizeof(text)); + isc_base32hex_totext(®ion, 1, "", &buffer); + fprintf(stdout, "%.*s (salt=%s, hash=%u, iterations=%u)\n", + (int)isc_buffer_usedlength(&buffer), text, argv[1], hash_alg, iterations); + return(0); +} diff --git a/bin/tests/nsecify.c b/bin/tests/nsecify.c new file mode 100644 index 0000000..2e055c6 --- /dev/null +++ b/bin/tests/nsecify.c @@ -0,0 +1,216 @@ +/* + * Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1999-2001, 2003 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. + */ + +/* $Id: nsecify.c,v 1.8 2008/09/25 04:02:38 tbox Exp $ */ + +#include <config.h> + +#include <stdlib.h> + +#include <isc/mem.h> +#include <isc/print.h> +#include <isc/string.h> + +#include <dns/db.h> +#include <dns/dbiterator.h> +#include <dns/fixedname.h> +#include <dns/nsec.h> +#include <dns/rdataset.h> +#include <dns/rdatasetiter.h> +#include <dns/result.h> + +static isc_mem_t *mctx = NULL; + +static inline void +fatal(const char *message) { + fprintf(stderr, "%s\n", message); + exit(1); +} + +static inline void +check_result(isc_result_t result, const char *message) { + if (result != ISC_R_SUCCESS) { + fprintf(stderr, "%s: %s\n", message, + isc_result_totext(result)); + exit(1); + } +} + +static inline isc_boolean_t +active_node(dns_db_t *db, dns_dbversion_t *version, dns_dbnode_t *node) { + dns_rdatasetiter_t *rdsiter; + isc_boolean_t active = ISC_FALSE; + isc_result_t result; + dns_rdataset_t rdataset; + + dns_rdataset_init(&rdataset); + rdsiter = NULL; + result = dns_db_allrdatasets(db, node, version, 0, &rdsiter); + check_result(result, "dns_db_allrdatasets()"); + result = dns_rdatasetiter_first(rdsiter); + while (result == ISC_R_SUCCESS) { + dns_rdatasetiter_current(rdsiter, &rdataset); + if (rdataset.type != dns_rdatatype_nsec) + active = ISC_TRUE; + dns_rdataset_disassociate(&rdataset); + if (!active) + result = dns_rdatasetiter_next(rdsiter); + else + result = ISC_R_NOMORE; + } + if (result != ISC_R_NOMORE) + fatal("rdataset iteration failed"); + dns_rdatasetiter_destroy(&rdsiter); + + if (!active) { + /* + * Make sure there is no NSEC record for this node. + */ + result = dns_db_deleterdataset(db, node, version, + dns_rdatatype_nsec, 0); + if (result == DNS_R_UNCHANGED) + result = ISC_R_SUCCESS; + check_result(result, "dns_db_deleterdataset"); + } + + return (active); +} + +static inline isc_result_t +next_active(dns_db_t *db, dns_dbversion_t *version, dns_dbiterator_t *dbiter, + dns_name_t *name, dns_dbnode_t **nodep) +{ + isc_result_t result; + isc_boolean_t active; + + do { + active = ISC_FALSE; + result = dns_dbiterator_current(dbiter, nodep, name); + if (result == ISC_R_SUCCESS) { + active = active_node(db, version, *nodep); + if (!active) { + dns_db_detachnode(db, nodep); + result = dns_dbiterator_next(dbiter); + } + } + } while (result == ISC_R_SUCCESS && !active); + + return (result); +} + +static void +nsecify(char *filename) { + isc_result_t result; + dns_db_t *db; + dns_dbversion_t *wversion; + dns_dbnode_t *node, *nextnode; + char *origintext; + dns_fixedname_t fname, fnextname; + dns_name_t *name, *nextname, *target; + isc_buffer_t b; + size_t len; + dns_dbiterator_t *dbiter; + char newfilename[1024]; + + dns_fixedname_init(&fname); + name = dns_fixedname_name(&fname); + dns_fixedname_init(&fnextname); + nextname = dns_fixedname_name(&fnextname); + + origintext = strrchr(filename, '/'); + if (origintext == NULL) + origintext = filename; + else + origintext++; /* Skip '/'. */ + len = strlen(origintext); + isc_buffer_init(&b, origintext, len); + isc_buffer_add(&b, len); + result = dns_name_fromtext(name, &b, dns_rootname, ISC_FALSE, NULL); + check_result(result, "dns_name_fromtext()"); + + db = NULL; + result = dns_db_create(mctx, "rbt", name, dns_dbtype_zone, + dns_rdataclass_in, 0, NULL, &db); + check_result(result, "dns_db_create()"); + result = dns_db_load(db, filename); + if (result == DNS_R_SEENINCLUDE) + result = ISC_R_SUCCESS; + check_result(result, "dns_db_load()"); + wversion = NULL; + result = dns_db_newversion(db, &wversion); + check_result(result, "dns_db_newversion()"); + dbiter = NULL; + result = dns_db_createiterator(db, 0, &dbiter); + check_result(result, "dns_db_createiterator()"); + result = dns_dbiterator_first(dbiter); + node = NULL; + result = next_active(db, wversion, dbiter, name, &node); + while (result == ISC_R_SUCCESS) { + nextnode = NULL; + result = dns_dbiterator_next(dbiter); + if (result == ISC_R_SUCCESS) + result = next_active(db, wversion, dbiter, nextname, + &nextnode); + if (result == ISC_R_SUCCESS) + target = nextname; + else if (result == ISC_R_NOMORE) + target = dns_db_origin(db); + else { + target = NULL; /* Make compiler happy. */ + fatal("db iteration failed"); + } + dns_nsec_build(db, wversion, node, target, 3600); /* XXX BEW */ + dns_db_detachnode(db, &node); + node = nextnode; + } + if (result != ISC_R_NOMORE) + fatal("db iteration failed"); + dns_dbiterator_destroy(&dbiter); + /* + * XXXRTH For now, we don't increment the SOA serial. + */ + dns_db_closeversion(db, &wversion, ISC_TRUE); + len = strlen(filename); + if (len + 4 + 1 > sizeof(newfilename)) + fatal("filename too long"); + sprintf(newfilename, "%s.new", filename); + result = dns_db_dump(db, NULL, newfilename); + check_result(result, "dns_db_dump"); + dns_db_detach(&db); +} + +int +main(int argc, char *argv[]) { + int i; + isc_result_t result; + + dns_result_register(); + + result = isc_mem_create(0, 0, &mctx); + check_result(result, "isc_mem_create()"); + + argc--; + argv++; + + for (i = 0; i < argc; i++) + nsecify(argv[i]); + + /* isc_mem_stats(mctx, stdout); */ + isc_mem_destroy(&mctx); + + return (0); +} diff --git a/bin/tests/printmsg.c b/bin/tests/printmsg.c new file mode 100644 index 0000000..c500e85 --- /dev/null +++ b/bin/tests/printmsg.c @@ -0,0 +1,251 @@ +/* + * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1998-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. + */ + +/* $Id: printmsg.c,v 1.29 2007/06/19 23:46:59 tbox Exp $ */ + +#include <config.h> + +#include <isc/buffer.h> +#include <isc/util.h> + +#include <dns/name.h> +#include <dns/rdataset.h> + +#include "printmsg.h" + +static const char *opcodetext[] = { + "QUERY", + "IQUERY", + "STATUS", + "RESERVED3", + "NOTIFY", + "UPDATE", + "RESERVED6", + "RESERVED7", + "RESERVED8", + "RESERVED9", + "RESERVED10", + "RESERVED11", + "RESERVED12", + "RESERVED13", + "RESERVED14", + "RESERVED15" +}; + +static const char *rcodetext[] = { + "NOERROR", + "FORMERR", + "SERVFAIL", + "NXDOMAIN", + "NOTIMP", + "REFUSED", + "YXDOMAIN", + "YXRRSET", + "NXRRSET", + "NOTAUTH", + "NOTZONE", + "RESERVED11", + "RESERVED12", + "RESERVED13", + "RESERVED14", + "RESERVED15", + "BADVERS" +}; + +static isc_result_t +printsection(dns_message_t *msg, dns_section_t sectionid, + const char *section_name) +{ + dns_name_t *name, *print_name; + dns_rdataset_t *rdataset; + isc_buffer_t target; + isc_result_t result; + isc_region_t r; + dns_name_t empty_name; + char t[65536]; + isc_boolean_t first; + isc_boolean_t no_rdata; + + if (sectionid == DNS_SECTION_QUESTION) + no_rdata = ISC_TRUE; + else + no_rdata = ISC_FALSE; + + printf(";; %s SECTION:\n", section_name); + + dns_name_init(&empty_name, NULL); + + result = dns_message_firstname(msg, sectionid); + if (result == ISC_R_NOMORE) + return (ISC_R_SUCCESS); + else if (result != ISC_R_SUCCESS) + return (result); + + for (;;) { + name = NULL; + dns_message_currentname(msg, sectionid, &name); + + isc_buffer_init(&target, t, sizeof(t)); + first = ISC_TRUE; + print_name = name; + + for (rdataset = ISC_LIST_HEAD(name->list); + rdataset != NULL; + rdataset = ISC_LIST_NEXT(rdataset, link)) { + result = dns_rdataset_totext(rdataset, + print_name, + ISC_FALSE, + no_rdata, + &target); + if (result != ISC_R_SUCCESS) + return (result); +#ifdef USEINITALWS + if (first) { + print_name = &empty_name; + first = ISC_FALSE; + } +#endif + } + isc_buffer_usedregion(&target, &r); + printf("%.*s", (int)r.length, (char *)r.base); + + result = dns_message_nextname(msg, sectionid); + if (result == ISC_R_NOMORE) + break; + else if (result != ISC_R_SUCCESS) + return (result); + } + + return (ISC_R_SUCCESS); +} + +static isc_result_t +printrdata(dns_message_t *msg, dns_rdataset_t *rdataset, dns_name_t *owner, + const char *set_name) +{ + isc_buffer_t target; + isc_result_t result; + isc_region_t r; + char t[65536]; + + UNUSED(msg); + printf(";; %s SECTION:\n", set_name); + + isc_buffer_init(&target, t, sizeof(t)); + + result = dns_rdataset_totext(rdataset, owner, ISC_FALSE, ISC_FALSE, + &target); + if (result != ISC_R_SUCCESS) + return (result); + isc_buffer_usedregion(&target, &r); + printf("%.*s", (int)r.length, (char *)r.base); + + return (ISC_R_SUCCESS); +} + +isc_result_t +printmessage(dns_message_t *msg) { + isc_boolean_t did_flag = ISC_FALSE; + isc_result_t result; + dns_rdataset_t *opt, *tsig; + dns_name_t *tsigname; + + result = ISC_R_SUCCESS; + + printf(";; ->>HEADER<<- opcode: %s, status: %s, id: %u\n", + opcodetext[msg->opcode], rcodetext[msg->rcode], msg->id); + + printf(";; flags: "); + if ((msg->flags & DNS_MESSAGEFLAG_QR) != 0) { + printf("qr"); + did_flag = ISC_TRUE; + } + if ((msg->flags & DNS_MESSAGEFLAG_AA) != 0) { + printf("%saa", did_flag ? " " : ""); + did_flag = ISC_TRUE; + } + if ((msg->flags & DNS_MESSAGEFLAG_TC) != 0) { + printf("%stc", did_flag ? " " : ""); + did_flag = ISC_TRUE; + } + if ((msg->flags & DNS_MESSAGEFLAG_RD) != 0) { + printf("%srd", did_flag ? " " : ""); + did_flag = ISC_TRUE; + } + if ((msg->flags & DNS_MESSAGEFLAG_RA) != 0) { + printf("%sra", did_flag ? " " : ""); + did_flag = ISC_TRUE; + } + if ((msg->flags & DNS_MESSAGEFLAG_AD) != 0) { + printf("%sad", did_flag ? " " : ""); + did_flag = ISC_TRUE; + } + if ((msg->flags & DNS_MESSAGEFLAG_CD) != 0) { + printf("%scd", did_flag ? " " : ""); + did_flag = ISC_TRUE; + } + printf("; QUERY: %u, ANSWER: %u, AUTHORITY: %u, ADDITIONAL: %u\n", + msg->counts[DNS_SECTION_QUESTION], + msg->counts[DNS_SECTION_ANSWER], + msg->counts[DNS_SECTION_AUTHORITY], + msg->counts[DNS_SECTION_ADDITIONAL]); + opt = dns_message_getopt(msg); + if (opt != NULL) + printf(";; EDNS: version: %u, udp=%u\n", + (unsigned int)((opt->ttl & 0x00ff0000) >> 16), + (unsigned int)opt->rdclass); + + tsigname = NULL; + tsig = dns_message_gettsig(msg, &tsigname); + if (tsig != NULL) + printf(";; PSEUDOSECTIONS: TSIG\n"); + if (! ISC_LIST_EMPTY(msg->sections[DNS_SECTION_QUESTION])) { + printf("\n"); + result = printsection(msg, DNS_SECTION_QUESTION, "QUESTION"); + if (result != ISC_R_SUCCESS) + return (result); + } + if (! ISC_LIST_EMPTY(msg->sections[DNS_SECTION_ANSWER])) { + printf("\n"); + result = printsection(msg, DNS_SECTION_ANSWER, "ANSWER"); + if (result != ISC_R_SUCCESS) + return (result); + } + if (! ISC_LIST_EMPTY(msg->sections[DNS_SECTION_AUTHORITY])) { + printf("\n"); + result = printsection(msg, DNS_SECTION_AUTHORITY, "AUTHORITY"); + if (result != ISC_R_SUCCESS) + return (result); + } + if (! ISC_LIST_EMPTY(msg->sections[DNS_SECTION_ADDITIONAL])) { + printf("\n"); + result = printsection(msg, DNS_SECTION_ADDITIONAL, + "ADDITIONAL"); + if (result != ISC_R_SUCCESS) + return (result); + } + if (tsig != NULL) { + printf("\n"); + result = printrdata(msg, tsig, tsigname, + "PSEUDOSECTION TSIG"); + if (result != ISC_R_SUCCESS) + return (result); + } + printf("\n"); + + return (result); +} diff --git a/bin/tests/printmsg.h b/bin/tests/printmsg.h new file mode 100644 index 0000000..c918561 --- /dev/null +++ b/bin/tests/printmsg.h @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1998-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. + */ + +/* $Id: printmsg.h,v 1.12 2007/06/19 23:46:59 tbox Exp $ */ + +#ifndef TEST_PRINTMSG_H +#define TEST_PRINTMSG_H + +#include <dns/message.h> + +isc_result_t printmessage(dns_message_t *message); + +#endif /* TEST_PRINTMSG_H */ diff --git a/bin/tests/ratelimiter_test.c b/bin/tests/ratelimiter_test.c new file mode 100644 index 0000000..9fd4a13 --- /dev/null +++ b/bin/tests/ratelimiter_test.c @@ -0,0 +1,153 @@ +/* + * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1999-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. + */ + +/* $Id: ratelimiter_test.c,v 1.18 2007/06/19 23:46:59 tbox Exp $ */ + +#include <config.h> + +#include <isc/app.h> +#include <isc/mem.h> +#include <isc/task.h> +#include <isc/time.h> +#include <isc/timer.h> +#include <isc/ratelimiter.h> +#include <isc/util.h> + +isc_ratelimiter_t *rlim = NULL; +isc_taskmgr_t *taskmgr = NULL; +isc_timermgr_t *timermgr = NULL; +isc_task_t *g_task = NULL; +isc_mem_t *mctx = NULL; + +static void utick(isc_task_t *task, isc_event_t *event); +static void shutdown_rl(isc_task_t *task, isc_event_t *event); +static void shutdown_all(isc_task_t *task, isc_event_t *event); + +typedef struct { + int milliseconds; + void (*fun)(isc_task_t *, isc_event_t *); +} schedule_t; + +schedule_t schedule[] = { + { 100, utick }, + { 200, utick }, + { 300, utick }, + { 3000, utick }, + { 3100, utick }, + { 3200, utick }, + { 3300, shutdown_rl }, + { 5000, utick }, + { 6000, shutdown_all } +}; + +#define NEVENTS (int)(sizeof(schedule)/sizeof(schedule[0])) + +isc_timer_t *timers[NEVENTS]; + +static void +ltick(isc_task_t *task, isc_event_t *event) { + UNUSED(task); + printf("** ltick%s **\n", + (event->ev_attributes & ISC_EVENTATTR_CANCELED) != 0 ? + " (canceled)" : ""); + isc_event_free(&event); +} + +static void +utick(isc_task_t *task, isc_event_t *event) { + isc_result_t result; + UNUSED(task); + event->ev_action = ltick; + event->ev_sender = NULL; + result = isc_ratelimiter_enqueue(rlim, g_task, &event); + printf("enqueue: %s\n", + result == ISC_R_SUCCESS ? "ok" : "failed"); +} + +static void +shutdown_rl(isc_task_t *task, isc_event_t *event) { + UNUSED(task); + UNUSED(event); + printf("shutdown ratelimiter\n"); + isc_ratelimiter_shutdown(rlim); +} + +static void +shutdown_all(isc_task_t *task, isc_event_t *event) { + int i; + UNUSED(task); + UNUSED(event); + printf("shutdown all\n"); + for (i = 0; i < NEVENTS; i++) { + isc_timer_detach(&timers[i]); + } + + isc_app_shutdown(); +} + +int +main(int argc, char *argv[]) { + isc_interval_t linterval; + int i; + + UNUSED(argc); + UNUSED(argv); + + isc_app_start(); + isc_interval_set(&linterval, 1, 0); + + RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS); + RUNTIME_CHECK(isc_taskmgr_create(mctx, 3, 0, &taskmgr) == + ISC_R_SUCCESS); + RUNTIME_CHECK(isc_timermgr_create(mctx, &timermgr) == + ISC_R_SUCCESS); + RUNTIME_CHECK(isc_task_create(taskmgr, 0, &g_task) == + ISC_R_SUCCESS); + + RUNTIME_CHECK(isc_ratelimiter_create(mctx, timermgr, g_task, + &rlim) == ISC_R_SUCCESS); + + RUNTIME_CHECK(isc_ratelimiter_setinterval(rlim, &linterval) == + ISC_R_SUCCESS); + + for (i = 0; i < NEVENTS; i++) { + isc_interval_t uinterval; + int ms = schedule[i].milliseconds; + isc_interval_set(&uinterval, ms / 1000, + (ms % 1000) * 1000000); + timers[i] = NULL; + RUNTIME_CHECK(isc_timer_create(timermgr, + isc_timertype_once, NULL, + &uinterval, + g_task, schedule[i].fun, NULL, + &timers[i]) == ISC_R_SUCCESS); + } + + isc_app_run(); + + isc_task_destroy(&g_task); + + isc_ratelimiter_detach(&rlim); + + isc_timermgr_destroy(&timermgr); + isc_taskmgr_destroy(&taskmgr); + + isc_mem_stats(mctx, stdout); + + isc_app_finish(); + return (0); +} diff --git a/bin/tests/rbt/Makefile.in b/bin/tests/rbt/Makefile.in new file mode 100644 index 0000000..d551297 --- /dev/null +++ b/bin/tests/rbt/Makefile.in @@ -0,0 +1,58 @@ +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 1999-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. + +# $Id: Makefile.in,v 1.28 2007/06/19 23:47:00 tbox Exp $ + +srcdir = @srcdir@ +VPATH = @srcdir@ +top_srcdir = @top_srcdir@ + +@BIND9_MAKE_INCLUDES@ + +CINCLUDES = ${TEST_INCLUDES} ${DNS_INCLUDES} ${ISC_INCLUDES} + +CDEFINES = +CWARNINGS = + +# Note that we do not want to use libtool for libt_api +DNSLIBS = ../../../lib/dns/libdns.@A@ @DNS_CRYPTO_LIBS@ +ISCLIBS = ../../../lib/isc/libisc.@A@ + +DNSDEPLIBS = ../../../lib/dns/libdns.@A@ +ISCDEPLIBS = ../../../lib/isc/libisc.@A@ + +DEPLIBS = ${DNSDEPLIBS} ${ISCDEPLIBS} + +LIBS = ${DNSLIBS} ${ISCLIBS} @LIBS@ + +TLIB = ../../../lib/tests/libt_api.@A@ + +TARGETS = t_rbt@EXEEXT@ + +SRCS = t_rbt.c + +@BIND9_MAKE_RULES@ + +t_rbt@EXEEXT@: t_rbt.@O@ ${DEPLIBS} ${TLIB} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ t_rbt.@O@ ${TLIB} ${LIBS} + +test: t_rbt@EXEEXT@ + -@./t_rbt@EXEEXT@ -c @top_srcdir@/t_config -b @srcdir@ -a + +testhelp: + @./t_rbt@EXEEXT@ -h + +clean distclean:: + rm -f ${TARGETS} diff --git a/bin/tests/rbt/dns_rbt.data b/bin/tests/rbt/dns_rbt.data new file mode 100644 index 0000000..e58eb45 --- /dev/null +++ b/bin/tests/rbt/dns_rbt.data @@ -0,0 +1,14 @@ +a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w. +a.b.c.d.e.f.vix.com +a.d.e.f.vix.com +a.vix.com +b.b.c.d.e.f.vix.com +b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w. +b.vix.com +c.b.c.d.e.f.vix.com +c.vix.com +d.e.f.vix.com +g.h.vix.com +q.d.e.f.vix.com +x.a.vix.com +y.x.a.vix.com diff --git a/bin/tests/rbt/dns_rbt_addname_1_data b/bin/tests/rbt/dns_rbt_addname_1_data new file mode 100644 index 0000000..89dca40 --- /dev/null +++ b/bin/tests/rbt/dns_rbt_addname_1_data @@ -0,0 +1,6 @@ +# +# test data for dns_rbt_addname assertion 1 +# +# format is: <dbfile> <command> <testname> <exp_result> +# +dns_rbt.data add new.name ISC_R_SUCCESS diff --git a/bin/tests/rbt/dns_rbt_addname_2_data b/bin/tests/rbt/dns_rbt_addname_2_data new file mode 100644 index 0000000..762bd8b --- /dev/null +++ b/bin/tests/rbt/dns_rbt_addname_2_data @@ -0,0 +1,6 @@ +# +# test data for dns_rbt_addname assertion 2 +# +# format is: <dbfile> <command> <testname> <exp_result> +# +dns_rbt.data add a.vix.com ISC_R_EXISTS diff --git a/bin/tests/rbt/dns_rbt_bitstring.data b/bin/tests/rbt/dns_rbt_bitstring.data new file mode 100644 index 0000000..2b34cc6 --- /dev/null +++ b/bin/tests/rbt/dns_rbt_bitstring.data @@ -0,0 +1,10 @@ +a.vix.com +b.vix.com +c.vix.com +a.a.vix.com +a.a.a.vix.com +a.a.a.a.vix.com +a.a.a.a.a.vix.com +a.a.a.a.a.a.vix.com +a.a.a.a.a.a.a.vix.com +a.a.a.a.a.a.a.a.vix.com diff --git a/bin/tests/rbt/dns_rbt_create_1_data b/bin/tests/rbt/dns_rbt_create_1_data new file mode 100644 index 0000000..72f8dc4 --- /dev/null +++ b/bin/tests/rbt/dns_rbt_create_1_data @@ -0,0 +1,7 @@ +# +# test data for dns_rbt_create assertion 1 +# +# format is: <dbfile> <command> <testname> <exp_result> +# +dns_rbt.data create not.used ISC_R_SUCCESS +dns_rbt_bitstring.data create not.used ISC_R_SUCCESS diff --git a/bin/tests/rbt/dns_rbt_deletename_1_data b/bin/tests/rbt/dns_rbt_deletename_1_data new file mode 100644 index 0000000..2e00e50 --- /dev/null +++ b/bin/tests/rbt/dns_rbt_deletename_1_data @@ -0,0 +1,6 @@ +# +# test data for dns_rbt_delete assertion 1 +# +# format is: <dbfile> <command> <testname> <exp_result> +# +dns_rbt.data delete a.vix.com ISC_R_SUCCESS diff --git a/bin/tests/rbt/dns_rbt_deletename_2_data b/bin/tests/rbt/dns_rbt_deletename_2_data new file mode 100644 index 0000000..0b1fdb7 --- /dev/null +++ b/bin/tests/rbt/dns_rbt_deletename_2_data @@ -0,0 +1,6 @@ +# +# test data for dns_rbt_delete assertion 2 +# +# format is: <dbfile> <command> <testname> <exp_result> +# +dns_rbt.data delete new.name ISC_R_NOTFOUND diff --git a/bin/tests/rbt/dns_rbt_findname_1_data b/bin/tests/rbt/dns_rbt_findname_1_data new file mode 100644 index 0000000..2a3728d --- /dev/null +++ b/bin/tests/rbt/dns_rbt_findname_1_data @@ -0,0 +1,6 @@ +# +# test data for dns_rbt_findname assertion 1 +# +# format is: <dbfile> <command> <testname> <exp_result> +# +dns_rbt.data search a.vix.com ISC_R_SUCCESS diff --git a/bin/tests/rbt/dns_rbt_findname_2_data b/bin/tests/rbt/dns_rbt_findname_2_data new file mode 100644 index 0000000..eb3d467 --- /dev/null +++ b/bin/tests/rbt/dns_rbt_findname_2_data @@ -0,0 +1,6 @@ +# +# test data for dns_rbt_findname assertion 2 +# +# format is: <dbfile> <command> <testname> <exp_result> +# +dns_rbt.data search not.used.here ISC_R_NOTFOUND diff --git a/bin/tests/rbt/dns_rbt_findname_3_data b/bin/tests/rbt/dns_rbt_findname_3_data new file mode 100644 index 0000000..4ea2db3 --- /dev/null +++ b/bin/tests/rbt/dns_rbt_findname_3_data @@ -0,0 +1,6 @@ +# +# test data for dns_rbt_findname assertion 3 +# +# format is: <dbfile> <command> <testname> <exp_result> +# +dns_rbt.data search a.b.vix.com DNS_R_PARTIALMATCH diff --git a/bin/tests/rbt/dns_rbtnodechain_first_1.data b/bin/tests/rbt/dns_rbtnodechain_first_1.data new file mode 100644 index 0000000..85bd8c2 --- /dev/null +++ b/bin/tests/rbt/dns_rbtnodechain_first_1.data @@ -0,0 +1,13 @@ +b.com +a.vix.com +b.vix.com +c.vix.com +a.a.vix.com +b.a.vix.com +a.b.vix.com +b.b.vix.com +a.c.vix.com +b.c.vix.com +iengines.net +isc.org + diff --git a/bin/tests/rbt/dns_rbtnodechain_first_2.data b/bin/tests/rbt/dns_rbtnodechain_first_2.data new file mode 100644 index 0000000..268376b --- /dev/null +++ b/bin/tests/rbt/dns_rbtnodechain_first_2.data @@ -0,0 +1,9 @@ +a.a.vix.com +b.a.vix.com +a.b.vix.com +b.b.vix.com +a.c.vix.com +b.c.vix.com +iengines.net +isc.org + diff --git a/bin/tests/rbt/dns_rbtnodechain_first_data b/bin/tests/rbt/dns_rbtnodechain_first_data new file mode 100644 index 0000000..057a1d6 --- /dev/null +++ b/bin/tests/rbt/dns_rbtnodechain_first_data @@ -0,0 +1,7 @@ +# +# test data for dns_rbtnodechain_first +# +# format is: <dbfile> <firstname> <firstorigin> <nextname> <nextorigin> +# +dns_rbtnodechain_first_1.data @ . com . +dns_rbtnodechain_first_2.data @ . vix.com . diff --git a/bin/tests/rbt/dns_rbtnodechain_init.data b/bin/tests/rbt/dns_rbtnodechain_init.data new file mode 100644 index 0000000..1e0bfc9 --- /dev/null +++ b/bin/tests/rbt/dns_rbtnodechain_init.data @@ -0,0 +1,13 @@ +vix.com +a.vix.com +b.vix.com +c.vix.com +a.a.vix.com +b.a.vix.com +a.b.vix.com +b.b.vix.com +a.c.vix.com +b.c.vix.com +iengines.net +isc.org + diff --git a/bin/tests/rbt/dns_rbtnodechain_init_data b/bin/tests/rbt/dns_rbtnodechain_init_data new file mode 100644 index 0000000..f1a6aa4 --- /dev/null +++ b/bin/tests/rbt/dns_rbtnodechain_init_data @@ -0,0 +1,6 @@ +# +# test data for dns_rbtnodechain_init +# +# format is: <dbfile> <findnode> <next> <nextorigin> <prev> <prevorigin> <first> <firstorigin> <last> <lastorigin> +# +dns_rbtnodechain_init.data b.vix.com. a b.vix.com. b a.vix.com. @ . isc.org . diff --git a/bin/tests/rbt/dns_rbtnodechain_last_1.data b/bin/tests/rbt/dns_rbtnodechain_last_1.data new file mode 100644 index 0000000..1e0bfc9 --- /dev/null +++ b/bin/tests/rbt/dns_rbtnodechain_last_1.data @@ -0,0 +1,13 @@ +vix.com +a.vix.com +b.vix.com +c.vix.com +a.a.vix.com +b.a.vix.com +a.b.vix.com +b.b.vix.com +a.c.vix.com +b.c.vix.com +iengines.net +isc.org + diff --git a/bin/tests/rbt/dns_rbtnodechain_last_2.data b/bin/tests/rbt/dns_rbtnodechain_last_2.data new file mode 100644 index 0000000..4d0c76d --- /dev/null +++ b/bin/tests/rbt/dns_rbtnodechain_last_2.data @@ -0,0 +1,7 @@ +a.b.vix.com +b.b.vix.com +a.c.vix.com +b.c.vix.com +vayu.com +isc.org + diff --git a/bin/tests/rbt/dns_rbtnodechain_last_data b/bin/tests/rbt/dns_rbtnodechain_last_data new file mode 100644 index 0000000..bf06a21 --- /dev/null +++ b/bin/tests/rbt/dns_rbtnodechain_last_data @@ -0,0 +1,7 @@ +# +# test data for dns_rbtnodechain_last +# +# format is: <dbfile> <last> <lastorigin> <prev> <prevorigin> +# +dns_rbtnodechain_last_1.data isc.org . iengines.net . +dns_rbtnodechain_last_2.data isc.org . b c.vix.com. diff --git a/bin/tests/rbt/dns_rbtnodechain_next.data b/bin/tests/rbt/dns_rbtnodechain_next.data new file mode 100644 index 0000000..1e0bfc9 --- /dev/null +++ b/bin/tests/rbt/dns_rbtnodechain_next.data @@ -0,0 +1,13 @@ +vix.com +a.vix.com +b.vix.com +c.vix.com +a.a.vix.com +b.a.vix.com +a.b.vix.com +b.b.vix.com +a.c.vix.com +b.c.vix.com +iengines.net +isc.org + diff --git a/bin/tests/rbt/dns_rbtnodechain_next_data b/bin/tests/rbt/dns_rbtnodechain_next_data new file mode 100644 index 0000000..a69ab37 --- /dev/null +++ b/bin/tests/rbt/dns_rbtnodechain_next_data @@ -0,0 +1,6 @@ +# +# test data for dns_rbtnodechain_next +# +# format is: <dbfile> <startname> <expected_name> <expected_origin> +# +dns_rbtnodechain_next.data c.vix.com. a c.vix.com. diff --git a/bin/tests/rbt/dns_rbtnodechain_prev.data b/bin/tests/rbt/dns_rbtnodechain_prev.data new file mode 100644 index 0000000..1e0bfc9 --- /dev/null +++ b/bin/tests/rbt/dns_rbtnodechain_prev.data @@ -0,0 +1,13 @@ +vix.com +a.vix.com +b.vix.com +c.vix.com +a.a.vix.com +b.a.vix.com +a.b.vix.com +b.b.vix.com +a.c.vix.com +b.c.vix.com +iengines.net +isc.org + diff --git a/bin/tests/rbt/dns_rbtnodechain_prev_data b/bin/tests/rbt/dns_rbtnodechain_prev_data new file mode 100644 index 0000000..4c8450d --- /dev/null +++ b/bin/tests/rbt/dns_rbtnodechain_prev_data @@ -0,0 +1,6 @@ +# +# test data for dns_rbtnodechain_prev +# +# format is: <dbfile> <startname> <expected_name> <expected_origin> +# +dns_rbtnodechain_prev.data a.b.vix.com. b vix.com. diff --git a/bin/tests/rbt/t_rbt.c b/bin/tests/rbt/t_rbt.c new file mode 100644 index 0000000..171e633 --- /dev/null +++ b/bin/tests/rbt/t_rbt.c @@ -0,0 +1,1857 @@ +/* + * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1998-2001, 2003 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. + */ + +/* $Id: t_rbt.c,v 1.30 2007/06/19 23:47:00 tbox Exp $ */ + +#include <config.h> + +#include <ctype.h> +#include <stdlib.h> + +#include <isc/entropy.h> +#include <isc/mem.h> +#include <isc/util.h> +#include <isc/hash.h> +#include <isc/string.h> + +#include <dns/fixedname.h> +#include <dns/rbt.h> +#include <dns/result.h> + +#include <tests/t_api.h> + +#define BUFLEN 1024 +#define DNSNAMELEN 255 + +char *progname; +char *Tokens[T_MAXTOKS]; + +static int +t_dns_rbtnodechain_init(char *dbfile, char *findname, + char *firstname, char *firstorigin, + char *nextname, char *nextorigin, + char *prevname, char *prevorigin, + char *lastname, char *lastorigin); +static char * +fixedname_totext(dns_fixedname_t *name); + +static int +fixedname_cmp(dns_fixedname_t *dns_name, char *txtname); + +static char * +dnsname_totext(dns_name_t *name); + +static int +t_namechk(isc_result_t dns_result, dns_fixedname_t *dns_name, char *exp_name, + dns_fixedname_t *dns_origin, char *exp_origin, + isc_result_t exp_result); + +/* + * Parts adapted from the original rbt_test.c. + */ +static int +fixedname_cmp(dns_fixedname_t *dns_name, char *txtname) { + char *name; + + name = dnsname_totext(dns_fixedname_name(dns_name)); + if (strcmp(txtname, "NULL") == 0) { + if ((name == NULL) || (*name == '\0')) + return(0); + return(1); + } else { + return(strcmp(name, txtname)); + } +} + +static char * +dnsname_totext(dns_name_t *name) { + static char buf[BUFLEN]; + isc_buffer_t target; + + isc_buffer_init(&target, buf, BUFLEN); + dns_name_totext(name, ISC_FALSE, &target); + *((char *)(target.base) + target.used) = '\0'; + return(target.base); +} + +static char * +fixedname_totext(dns_fixedname_t *name) { + static char buf[BUFLEN]; + isc_buffer_t target; + + memset(buf, 0, BUFLEN); + isc_buffer_init(&target, buf, BUFLEN); + dns_name_totext(dns_fixedname_name(name), ISC_FALSE, &target); + *((char *)(target.base) + target.used) = '\0'; + return(target.base); +} + +#ifdef NEED_PRINT_DATA + +static isc_result_t +print_data(void *data) { + isc_result_t dns_result; + isc_buffer_t target; + char *buffer[DNSNAMELEN]; + + isc_buffer_init(&target, buffer, sizeof(buffer)); + + dns_result = dns_name_totext(data, ISC_FALSE, &target); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_totext failed %s\n", + dns_result_totext(dns_result)); + } + return(dns_result); +} + +#endif /* NEED_PRINT_DATA */ + +static int +create_name(char *s, isc_mem_t *mctx, dns_name_t **dns_name) { + int nfails; + int length; + isc_result_t result; + isc_buffer_t source; + isc_buffer_t target; + dns_name_t *name; + + nfails = 0; + + if (s && *s) { + + length = strlen(s); + + isc_buffer_init(&source, s, length); + isc_buffer_add(&source, length); + + /* + * The buffer for the actual name will immediately follow the + * name structure. + */ + name = isc_mem_get(mctx, sizeof(*name) + DNSNAMELEN); + if (name == NULL) { + t_info("isc_mem_get failed\n"); + ++nfails; + } else { + + dns_name_init(name, NULL); + isc_buffer_init(&target, name + 1, DNSNAMELEN); + + result = dns_name_fromtext(name, &source, dns_rootname, + ISC_FALSE, &target); + + if (result != ISC_R_SUCCESS) { + ++nfails; + t_info("dns_name_fromtext(%s) failed %s\n", + s, dns_result_totext(result)); + isc_mem_put(mctx, name, + sizeof(*name) + DNSNAMELEN); + } else + *dns_name = name; + } + } else { + ++nfails; + t_info("create_name: empty name\n"); + } + + return(nfails); +} + +static void +delete_name(void *data, void *arg) { + isc_mem_put((isc_mem_t *)arg, data, sizeof(dns_name_t) + DNSNAMELEN); +} + + +/* + * Adapted from the original rbt_test.c. + */ +static int +t1_add(char *name, dns_rbt_t *rbt, isc_mem_t *mctx, isc_result_t *dns_result) { + int nprobs; + dns_name_t *dns_name; + + nprobs = 0; + if (name && dns_result) { + if (create_name(name, mctx, &dns_name) == 0) { + if (T_debug) + t_info("dns_rbt_addname succeeded\n"); + *dns_result = dns_rbt_addname(rbt, dns_name, dns_name); + if (*dns_result != ISC_R_SUCCESS) { + delete_name(dns_name, mctx); + t_info("dns_rbt_addname failed %s\n", + dns_result_totext(*dns_result)); + ++nprobs; + } + } else { + ++nprobs; + } + } else { + ++nprobs; + } + return(nprobs); +} + +static int +t1_delete(char *name, dns_rbt_t *rbt, isc_mem_t *mctx, + isc_result_t *dns_result) +{ + int nprobs; + dns_name_t *dns_name; + + nprobs = 0; + if (name && dns_result) { + if (create_name(name, mctx, &dns_name) == 0) { + *dns_result = dns_rbt_deletename(rbt, dns_name, + ISC_FALSE); + delete_name(dns_name, mctx); + } else { + ++nprobs; + } + } else { + ++nprobs; + } + return(nprobs); +} + +static int +t1_search(char *name, dns_rbt_t *rbt, isc_mem_t *mctx, + isc_result_t *dns_result) +{ + int nprobs; + dns_name_t *dns_searchname; + dns_name_t *dns_foundname; + dns_fixedname_t dns_fixedname; + void *data; + + nprobs = 0; + if (name && dns_result) { + if (create_name(name, mctx, &dns_searchname) == 0) { + dns_fixedname_init(&dns_fixedname); + dns_foundname = dns_fixedname_name(&dns_fixedname); + data = NULL; + *dns_result = dns_rbt_findname(rbt, dns_searchname, 0, + dns_foundname, &data); + delete_name(dns_searchname, mctx); + } else { + ++nprobs; + } + } else { + ++nprobs; + } + return(nprobs); +} + +/* + * Initialize a database from filename. + */ +static int +rbt_init(char *filename, dns_rbt_t **rbt, isc_mem_t *mctx) { + int rval; + isc_result_t dns_result; + char *p; + FILE *fp; + + fp = fopen(filename, "r"); + if (fp == NULL) { + t_info("No such file %s\n", filename); + return(1); + } + + dns_result = dns_rbt_create(mctx, delete_name, mctx, rbt); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rbt_create failed %s\n", + dns_result_totext(dns_result)); + fclose(fp); + return(1); + } + + while ((p = t_fgetbs(fp)) != NULL) { + + /* + * Skip any comment lines. + */ + if ((*p == '#') || (*p == '\0') || (*p == ' ')) { + (void)free(p); + continue; + } + + if (T_debug) + t_info("adding name %s to the rbt\n", p); + + rval = t1_add(p, *rbt, mctx, &dns_result); + if ((rval != 0) || (dns_result != ISC_R_SUCCESS)) { + t_info("add of %s failed\n", p); + dns_rbt_destroy(rbt); + fclose(fp); + return(1); + } + (void) free(p); + } + fclose(fp); + return(0); +} + +static int +test_rbt_gen(char *filename, char *command, char *testname, + isc_result_t exp_result) +{ + int rval; + int result; + dns_rbt_t *rbt; + isc_result_t isc_result; + isc_result_t dns_result; + isc_mem_t *mctx; + isc_entropy_t *ectx; + dns_name_t *dns_name; + + result = T_UNRESOLVED; + + if (strcmp(command, "create") != 0) + t_info("testing using name %s\n", testname); + + mctx = NULL; + ectx = NULL; + + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create: %s: exiting\n", + dns_result_totext(isc_result)); + return(T_UNRESOLVED); + } + + isc_result = isc_entropy_create(mctx, &ectx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_entropy_create: %s: exiting\n", + dns_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_hash_create: %s: exiting\n", + dns_result_totext(isc_result)); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + rbt = NULL; + if (rbt_init(filename, &rbt, mctx) != 0) { + if (strcmp(command, "create") == 0) + result = T_FAIL; + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(result); + } + + /* + * Now try the database command. + */ + if (strcmp(command, "create") == 0) { + result = T_PASS; + } else if (strcmp(command, "add") == 0) { + if (create_name(testname, mctx, &dns_name) == 0) { + dns_result = dns_rbt_addname(rbt, dns_name, dns_name); + + if (dns_result != ISC_R_SUCCESS) + delete_name(dns_name, mctx); + + if (dns_result == exp_result) { + if (dns_result == ISC_R_SUCCESS) { + rval = t1_search(testname, rbt, mctx, + &dns_result); + if (rval == 0) { + if (dns_result == ISC_R_SUCCESS) { + result = T_PASS; + } else { + result = T_FAIL; + } + } else { + t_info("t1_search failed\n"); + result = T_UNRESOLVED; + } + } else { + result = T_PASS; + } + } else { + t_info("dns_rbt_addname returned %s, " + "expected %s\n", + dns_result_totext(dns_result), + dns_result_totext(exp_result)); + result = T_FAIL; + } + } else { + t_info("create_name failed %s\n", + dns_result_totext(dns_result)); + result = T_UNRESOLVED; + } + } else if ((strcmp(command, "delete") == 0) || + (strcmp(command, "nuke") == 0)) { + rval = t1_delete(testname, rbt, mctx, &dns_result); + if (rval == 0) { + if (dns_result == exp_result) { + rval = t1_search(testname, rbt, mctx, + &dns_result); + if (rval == 0) { + if (dns_result == ISC_R_SUCCESS) { + t_info("dns_rbt_deletename " + "didn't delete " + "the name"); + result = T_FAIL; + } else { + result = T_PASS; + } + } + } else { + t_info("delete returned %s, expected %s\n", + dns_result_totext(dns_result), + dns_result_totext(exp_result)); + result = T_FAIL; + } + } + } else if (strcmp(command, "search") == 0) { + rval = t1_search(testname, rbt, mctx, &dns_result); + if (rval == 0) { + if (dns_result == exp_result) { + result = T_PASS; + } else { + t_info("find returned %s, expected %s\n", + dns_result_totext(dns_result), + dns_result_totext(exp_result)); + result = T_FAIL; + } + } + } + + dns_rbt_destroy(&rbt); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(result); +} + +static int +test_dns_rbt_x(const char *filename) { + FILE *fp; + char *p; + int line; + int cnt; + int result; + int nfails; + int nprobs; + + nfails = 0; + nprobs = 0; + + fp = fopen(filename, "r"); + if (fp != NULL) { + line = 0; + while ((p = t_fgetbs(fp)) != NULL) { + + ++line; + + /* + * Skip comment lines. + */ + if ((isspace((unsigned char)*p)) || (*p == '#')) { + (void)free(p); + continue; + } + + /* + * Name of db file, command, testname, + * expected result. + */ + cnt = t_bustline(p, Tokens); + if (cnt == 4) { + result = test_rbt_gen(Tokens[0], Tokens[1], + Tokens[2], + t_dns_result_fromtext(Tokens[3])); + if (result != T_PASS) + ++nfails; + } else { + t_info("bad format in %s at line %d\n", + filename, line); + ++nprobs; + } + + (void)free(p); + } + (void)fclose(fp); + } else { + t_info("Missing datafile %s\n", filename); + ++nprobs; + } + + result = T_UNRESOLVED; + if ((nfails == 0) && (nprobs == 0)) + result = T_PASS; + else if (nfails) + result = T_FAIL; + + return(result); +} + + +static const char *a1 = "dns_rbt_create creates a rbt and returns " + "ISC_R_SUCCESS on success"; + +static void +t1() { + int result; + + t_assert("dns_rbt_create", 1, T_REQUIRED, a1); + result = test_dns_rbt_x("dns_rbt_create_1_data"); + t_result(result); +} + +static const char *a2 = "dns_rbt_addname adds a name to a database and " + "returns ISC_R_SUCCESS on success"; + +static void +t2() { + int result; + + t_assert("dns_rbt_addname", 2, T_REQUIRED, a2); + result = test_dns_rbt_x("dns_rbt_addname_1_data"); + t_result(result); +} + +static const char *a3 = "when name already exists, dns_rbt_addname() " + "returns ISC_R_EXISTS"; + +static void +t3() { + int result; + + t_assert("dns_rbt_addname", 3, T_REQUIRED, a3); + result = test_dns_rbt_x("dns_rbt_addname_2_data"); + t_result(result); +} + +static const char *a4 = "when name exists, dns_rbt_deletename() returns " + "ISC_R_SUCCESS"; + +static void +t4() { + int result; + + t_assert("dns_rbt_deletename", 4, T_REQUIRED, a4); + result = test_dns_rbt_x("dns_rbt_deletename_1_data"); + t_result(result); +} + +static const char *a5 = "when name does not exist, dns_rbt_deletename() " + "returns ISC_R_NOTFOUND"; +static void +t5() { + int result; + + t_assert("dns_rbt_deletename", 5, T_REQUIRED, a5); + result = test_dns_rbt_x("dns_rbt_deletename_2_data"); + t_result(result); +} + +static const char *a6 = "when name exists and exactly matches the " + "search name dns_rbt_findname() returns ISC_R_SUCCESS"; + +static void +t6() { + int result; + + t_assert("dns_rbt_findname", 6, T_REQUIRED, a6); + result = test_dns_rbt_x("dns_rbt_findname_1_data"); + t_result(result); +} + +static const char *a7 = "when a name does not exist, " + "dns_rbt_findname returns ISC_R_NOTFOUND"; + +static void +t7() { + int result; + + t_assert("dns_rbt_findname", 7, T_REQUIRED, a7); + result = test_dns_rbt_x("dns_rbt_findname_2_data"); + t_result(result); +} + +static const char *a8 = "when a superdomain is found with data matching name, " + "dns_rbt_findname returns DNS_R_PARTIALMATCH"; + +static void +t8() { + int result; + + t_assert("dns_rbt_findname", 8, T_REQUIRED, a8); + result = test_dns_rbt_x("dns_rbt_findname_3_data"); + t_result(result); +} + + +static const char *a9 = "a call to dns_rbtnodechain_init(chain, mctx) " + "initializes chain"; + +static int +t9_walkchain(dns_rbtnodechain_t *chain, dns_rbt_t *rbt) { + int cnt; + int order; + unsigned int nlabels; + int nprobs; + isc_result_t dns_result; + + dns_fixedname_t name; + dns_fixedname_t origin; + dns_fixedname_t fullname1; + dns_fixedname_t fullname2; + + cnt = 0; + nprobs = 0; + + do { + + if (cnt == 0) { + dns_fixedname_init(&name); + dns_fixedname_init(&origin); + dns_result = dns_rbtnodechain_first(chain, rbt, + dns_fixedname_name(&name), + dns_fixedname_name(&origin)); + if (dns_result != DNS_R_NEWORIGIN) { + t_info("dns_rbtnodechain_first returned %s, " + "expecting DNS_R_NEWORIGIN\n", + dns_result_totext(dns_result)); + ++nprobs; + break; + } + t_info("first name:\t<%s>\n", fixedname_totext(&name)); + t_info("first origin:\t<%s>\n", + fixedname_totext(&origin)); + } else { + dns_fixedname_init(&fullname1); + dns_result = dns_name_concatenate( + dns_fixedname_name(&name), + dns_name_isabsolute(dns_fixedname_name(&name)) ? + NULL : dns_fixedname_name(&origin), + dns_fixedname_name(&fullname1), NULL); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_concatenate failed %s\n", + dns_result_totext(dns_result)); + ++nprobs; + break; + } + + /* + * Expecting origin not to get touched if next + * doesn't return NEWORIGIN. + */ + dns_fixedname_init(&name); + dns_result = dns_rbtnodechain_next(chain, + dns_fixedname_name(&name), + dns_fixedname_name(&origin)); + if ((dns_result != ISC_R_SUCCESS) && + (dns_result != DNS_R_NEWORIGIN)) { + if (dns_result != ISC_R_NOMORE) { + t_info("dns_rbtnodechain_next " + "failed %s\n", + dns_result_totext(dns_result)); + ++nprobs; + } + break; + } + + t_info("next name:\t<%s>\n", fixedname_totext(&name)); + t_info("next origin:\t<%s>\n", + fixedname_totext(&origin)); + + dns_fixedname_init(&fullname2); + dns_result = dns_name_concatenate( + dns_fixedname_name(&name), + dns_name_isabsolute(dns_fixedname_name(&name)) ? + NULL : dns_fixedname_name(&origin), + dns_fixedname_name(&fullname2), NULL); + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_concatenate failed %s\n", + dns_result_totext(dns_result)); + ++nprobs; + break; + } + + t_info("comparing\t<%s>\n", + fixedname_totext(&fullname1)); + t_info("\twith\t<%s>\n", fixedname_totext(&fullname2)); + + (void)dns_name_fullcompare( + dns_fixedname_name(&fullname1), + dns_fixedname_name(&fullname2), + &order, &nlabels); + + if (order >= 0) { + t_info("unexpected order %s %s %s\n", + dnsname_totext(dns_fixedname_name(&fullname1)), + order == -1 ? "<" : (order == 0 ? "==" : ">"), + dnsname_totext(dns_fixedname_name(&fullname2))); + ++nprobs; + } + } + + ++cnt; + } while (1); + + return (nprobs); +} + +/* + * Test by exercising the first|last|next|prev funcs in useful ways. + */ + +static int +t_namechk(isc_result_t dns_result, dns_fixedname_t *dns_name, char *exp_name, + dns_fixedname_t *dns_origin, char *exp_origin, + isc_result_t exp_result) +{ + int nfails; + + nfails = 0; + + if (fixedname_cmp(dns_name, exp_name)) { + t_info("\texpected name of %s, got %s\n", + exp_name, fixedname_totext(dns_name)); + ++nfails; + } + if (exp_origin != NULL) { + t_info("checking for DNS_R_NEWORIGIN\n"); + if (dns_result == exp_result) { + if (fixedname_cmp(dns_origin, exp_origin)) { + t_info("\torigin %s, expected %s\n", + fixedname_totext(dns_origin), + exp_origin); + ++nfails; + } + } else { + t_info("\tgot %s\n", dns_result_totext(dns_result)); + ++nfails; + } + } + return(nfails); +} + +static int +t_dns_rbtnodechain_init(char *dbfile, char *findname, + char *nextname, char *nextorigin, + char *prevname, char *prevorigin, + char *firstname, char *firstorigin, + char *lastname, char *lastorigin) +{ + int result; + int len; + int nfails; + dns_rbt_t *rbt; + dns_rbtnode_t *node; + dns_rbtnodechain_t chain; + isc_mem_t *mctx; + isc_entropy_t *ectx; + isc_result_t isc_result; + isc_result_t dns_result; + dns_fixedname_t dns_findname; + dns_fixedname_t dns_foundname; + dns_fixedname_t dns_firstname; + dns_fixedname_t dns_lastname; + dns_fixedname_t dns_prevname; + dns_fixedname_t dns_nextname; + dns_fixedname_t dns_origin; + isc_buffer_t isc_buffer; + + result = T_UNRESOLVED; + + nfails = 0; + mctx = NULL; + ectx = NULL; + + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + return(result); + } + + isc_result = isc_entropy_create(mctx, &ectx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_entropy_create: %s: exiting\n", + dns_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_hash_create: %s: exiting\n", + dns_result_totext(isc_result)); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_rbtnodechain_init(&chain, mctx); + + rbt = NULL; + if (rbt_init(dbfile, &rbt, mctx)) { + t_info("rbt_init %s failed\n", dbfile); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(result); + } + + len = strlen(findname); + isc_buffer_init(&isc_buffer, findname, len); + isc_buffer_add(&isc_buffer, len); + + dns_fixedname_init(&dns_foundname); + dns_fixedname_init(&dns_findname); + dns_fixedname_init(&dns_firstname); + dns_fixedname_init(&dns_origin); + dns_fixedname_init(&dns_lastname); + dns_fixedname_init(&dns_prevname); + dns_fixedname_init(&dns_nextname); + + dns_result = dns_name_fromtext(dns_fixedname_name(&dns_findname), + &isc_buffer, NULL, ISC_FALSE, NULL); + + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext failed %s\n", + dns_result_totext(dns_result)); + return(result); + } + + /* + * Set the starting node. + */ + node = NULL; + dns_result = dns_rbt_findnode(rbt, dns_fixedname_name(&dns_findname), + dns_fixedname_name(&dns_foundname), + &node, &chain, DNS_RBTFIND_EMPTYDATA, + NULL, NULL); + + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rbt_findnode failed %s\n", + dns_result_totext(dns_result)); + return(result); + } + + /* + * Check next. + */ + t_info("checking for next name of %s and new origin of %s\n", + nextname, nextorigin); + dns_result = dns_rbtnodechain_next(&chain, + dns_fixedname_name(&dns_nextname), + dns_fixedname_name(&dns_origin)); + + if ((dns_result != ISC_R_SUCCESS) && + (dns_result != DNS_R_NEWORIGIN)) { + t_info("dns_rbtnodechain_next unexpectedly returned %s\n", + dns_result_totext(dns_result)); + } + + nfails += t_namechk(dns_result, &dns_nextname, nextname, &dns_origin, + nextorigin, DNS_R_NEWORIGIN); + + /* + * Set the starting node again. + */ + node = NULL; + dns_fixedname_init(&dns_foundname); + dns_result = dns_rbt_findnode(rbt, dns_fixedname_name(&dns_findname), + dns_fixedname_name(&dns_foundname), + &node, &chain, DNS_RBTFIND_EMPTYDATA, + NULL, NULL); + + if (dns_result != ISC_R_SUCCESS) { + t_info("\tdns_rbt_findnode failed %s\n", + dns_result_totext(dns_result)); + return(result); + } + + /* + * Check previous. + */ + t_info("checking for previous name of %s and new origin of %s\n", + prevname, prevorigin); + dns_fixedname_init(&dns_origin); + dns_result = dns_rbtnodechain_prev(&chain, + dns_fixedname_name(&dns_prevname), + dns_fixedname_name(&dns_origin)); + + if ((dns_result != ISC_R_SUCCESS) && + (dns_result != DNS_R_NEWORIGIN)) { + t_info("dns_rbtnodechain_prev unexpectedly returned %s\n", + dns_result_totext(dns_result)); + } + nfails += t_namechk(dns_result, &dns_prevname, prevname, &dns_origin, + prevorigin, DNS_R_NEWORIGIN); + + /* + * Check first. + */ + t_info("checking for first name of %s and new origin of %s\n", + firstname, firstorigin); + dns_result = dns_rbtnodechain_first(&chain, rbt, + dns_fixedname_name(&dns_firstname), + dns_fixedname_name(&dns_origin)); + + if (dns_result != DNS_R_NEWORIGIN) { + t_info("dns_rbtnodechain_first unexpectedly returned %s\n", + dns_result_totext(dns_result)); + } + nfails += t_namechk(dns_result, &dns_firstname, firstname, + &dns_origin, firstorigin, DNS_R_NEWORIGIN); + + /* + * Check last. + */ + t_info("checking for last name of %s\n", lastname); + dns_result = dns_rbtnodechain_last(&chain, rbt, + dns_fixedname_name(&dns_lastname), + dns_fixedname_name(&dns_origin)); + + if (dns_result != DNS_R_NEWORIGIN) { + t_info("dns_rbtnodechain_last unexpectedly returned %s\n", + dns_result_totext(dns_result)); + } + nfails += t_namechk(dns_result, &dns_lastname, lastname, &dns_origin, + lastorigin, DNS_R_NEWORIGIN); + + /* + * Check node ordering. + */ + t_info("checking node ordering\n"); + nfails += t9_walkchain(&chain, rbt); + + if (nfails) + result = T_FAIL; + else + result = T_PASS; + + dns_rbtnodechain_invalidate(&chain); + dns_rbt_destroy(&rbt); + + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + + return(result); +} + +static int +test_dns_rbtnodechain_init(const char *filename) { + FILE *fp; + char *p; + int line; + int cnt; + int result; + int nfails; + int nprobs; + + nfails = 0; + nprobs = 0; + + fp = fopen(filename, "r"); + if (fp != NULL) { + line = 0; + while ((p = t_fgetbs(fp)) != NULL) { + + ++line; + + /* + * Skip comment lines. + */ + if ((isspace((unsigned char)*p)) || (*p == '#')) { + (void)free(p); + continue; + } + + cnt = t_bustline(p, Tokens); + if (cnt == 10) { + result = t_dns_rbtnodechain_init( + Tokens[0], /* dbfile */ + Tokens[1], /* startname */ + Tokens[2], /* nextname */ + Tokens[3], /* nextorigin */ + Tokens[4], /* prevname */ + Tokens[5], /* prevorigin */ + Tokens[6], /* firstname */ + Tokens[7], /* firstorigin */ + Tokens[8], /* lastname */ + Tokens[9]); /* lastorigin */ + if (result != T_PASS) { + if (result == T_FAIL) + ++nfails; + else + ++nprobs; + } + } else { + t_info("bad format in %s at line %d\n", + filename, line); + ++nprobs; + } + + (void)free(p); + } + (void)fclose(fp); + } else { + t_info("Missing datafile %s\n", filename); + ++nprobs; + } + + result = T_UNRESOLVED; + + if ((nfails == 0) && (nprobs == 0)) + result = T_PASS; + else if (nfails) + result = T_FAIL; + + return(result); +} + +static void +t9() { + int result; + + t_assert("dns_rbtnodechain_init", 9, T_REQUIRED, a9); + result = test_dns_rbtnodechain_init("dns_rbtnodechain_init_data"); + t_result(result); +} + +static int +t_dns_rbtnodechain_first(char *dbfile, char *expected_firstname, + char *expected_firstorigin, + char *expected_nextname, + char *expected_nextorigin) +{ + int result; + int nfails; + dns_rbt_t *rbt; + dns_rbtnodechain_t chain; + isc_mem_t *mctx; + isc_entropy_t *ectx; + isc_result_t isc_result; + isc_result_t dns_result; + dns_fixedname_t dns_name; + dns_fixedname_t dns_origin; + isc_result_t expected_result; + + result = T_UNRESOLVED; + + nfails = 0; + mctx = NULL; + ectx = NULL; + + dns_fixedname_init(&dns_name); + dns_fixedname_init(&dns_origin); + + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + return(result); + } + + isc_result = isc_entropy_create(mctx, &ectx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_entropy_create: %s: exiting\n", + dns_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_hash_create: %s: exiting\n", + dns_result_totext(isc_result)); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_rbtnodechain_init(&chain, mctx); + + rbt = NULL; + if (rbt_init(dbfile, &rbt, mctx)) { + t_info("rbt_init %s failed\n", dbfile); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(result); + } + + t_info("testing for first name of %s, origin of %s\n", + expected_firstname, expected_firstorigin); + + dns_result = dns_rbtnodechain_first(&chain, rbt, + dns_fixedname_name(&dns_name), + dns_fixedname_name(&dns_origin)); + + if (dns_result != DNS_R_NEWORIGIN) + t_info("dns_rbtnodechain_first unexpectedly returned %s\n", + dns_result_totext(dns_result)); + + nfails = t_namechk(dns_result, &dns_name, expected_firstname, + &dns_origin, expected_firstorigin, DNS_R_NEWORIGIN); + + dns_fixedname_init(&dns_name); + dns_result = dns_rbtnodechain_next(&chain, + dns_fixedname_name(&dns_name), + dns_fixedname_name(&dns_origin)); + + t_info("testing for next name of %s, origin of %s\n", + expected_nextname, expected_nextorigin); + + if ((dns_result != ISC_R_SUCCESS) && (dns_result != DNS_R_NEWORIGIN)) + t_info("dns_rbtnodechain_next unexpectedly returned %s\n", + dns_result_totext(dns_result)); + + if (strcasecmp(expected_firstorigin, expected_nextorigin) == 0) + expected_result = ISC_R_SUCCESS; + else + expected_result = DNS_R_NEWORIGIN; + nfails += t_namechk(dns_result, &dns_name, expected_nextname, + &dns_origin, expected_nextorigin, expected_result); + + if (nfails) + result = T_FAIL; + else + result = T_PASS; + + dns_rbtnodechain_invalidate(&chain); + + dns_rbt_destroy(&rbt); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(result); +} + +static int +test_dns_rbtnodechain_first(const char *filename) { + FILE *fp; + char *p; + int line; + int cnt; + int result; + int nfails; + int nprobs; + + nfails = 0; + nprobs = 0; + + fp = fopen(filename, "r"); + if (fp != NULL) { + line = 0; + while ((p = t_fgetbs(fp)) != NULL) { + + ++line; + + /* + * Skip comment lines. + */ + if ((isspace((unsigned char)*p)) || (*p == '#')) { + (void)free(p); + continue; + } + + cnt = t_bustline(p, Tokens); + if (cnt == 5) { + result = t_dns_rbtnodechain_first( + Tokens[0], /* dbfile */ + Tokens[1], /* firstname */ + Tokens[2], /* firstorigin */ + Tokens[3], /* nextname */ + Tokens[4]); /* nextorigin */ + if (result != T_PASS) { + if (result == T_FAIL) + ++nfails; + else + ++nprobs; + } + } else { + t_info("bad format in %s at line %d\n", + filename, line); + ++nprobs; + } + + (void)free(p); + } + (void)fclose(fp); + } else { + t_info("Missing datafile %s\n", filename); + ++nprobs; + } + + result = T_UNRESOLVED; + + if ((nfails == 0) && (nprobs == 0)) + result = T_PASS; + else if (nfails) + result = T_FAIL; + + return(result); +} + +static const char *a10 = "a call to " + "dns_rbtnodechain_first(chain, rbt, name, origin) " + "sets name to point to the root of the tree, " + "origin to point to the origin, " + "and returns DNS_R_NEWORIGIN"; + +static void +t10() { + int result; + + t_assert("dns_rbtnodechain_first", 10, T_REQUIRED, a10); + result = test_dns_rbtnodechain_first("dns_rbtnodechain_first_data"); + t_result(result); +} + +static int +t_dns_rbtnodechain_last(char *dbfile, char *expected_lastname, + char *expected_lastorigin, + char *expected_prevname, + char *expected_prevorigin) +{ + + int result; + int nfails; + dns_rbt_t *rbt; + dns_rbtnodechain_t chain; + isc_mem_t *mctx; + isc_entropy_t *ectx; + isc_result_t isc_result; + isc_result_t dns_result; + dns_fixedname_t dns_name; + dns_fixedname_t dns_origin; + isc_result_t expected_result; + + result = T_UNRESOLVED; + + nfails = 0; + mctx = NULL; + ectx = NULL; + + dns_fixedname_init(&dns_name); + dns_fixedname_init(&dns_origin); + + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + return(result); + } + + isc_result = isc_entropy_create(mctx, &ectx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_entropy_create: %s: exiting\n", + dns_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_hash_create: %s: exiting\n", + dns_result_totext(isc_result)); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_rbtnodechain_init(&chain, mctx); + + rbt = NULL; + if (rbt_init(dbfile, &rbt, mctx)) { + t_info("rbt_init %s failed\n", dbfile); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(result); + } + + t_info("testing for last name of %s, origin of %s\n", + expected_lastname, expected_lastorigin); + + dns_result = dns_rbtnodechain_last(&chain, rbt, + dns_fixedname_name(&dns_name), + dns_fixedname_name(&dns_origin)); + + if (dns_result != DNS_R_NEWORIGIN) { + t_info("dns_rbtnodechain_last unexpectedly returned %s\n", + dns_result_totext(dns_result)); + } + nfails = t_namechk(dns_result, &dns_name, expected_lastname, + &dns_origin, expected_lastorigin, DNS_R_NEWORIGIN); + + t_info("testing for previous name of %s, origin of %s\n", + expected_prevname, expected_prevorigin); + + dns_fixedname_init(&dns_name); + dns_result = dns_rbtnodechain_prev(&chain, + dns_fixedname_name(&dns_name), + dns_fixedname_name(&dns_origin)); + + if ((dns_result != ISC_R_SUCCESS) && + (dns_result != DNS_R_NEWORIGIN)) { + t_info("dns_rbtnodechain_prev unexpectedly returned %s\n", + dns_result_totext(dns_result)); + } + if (strcasecmp(expected_lastorigin, expected_prevorigin) == 0) + expected_result = ISC_R_SUCCESS; + else + expected_result = DNS_R_NEWORIGIN; + nfails += t_namechk(dns_result, &dns_name, expected_prevname, + &dns_origin, expected_prevorigin, expected_result); + + if (nfails) + result = T_FAIL; + else + result = T_PASS; + + dns_rbtnodechain_invalidate(&chain); + dns_rbt_destroy(&rbt); + + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + + return(result); +} + +static int +test_dns_rbtnodechain_last(const char *filename) { + FILE *fp; + char *p; + int line; + int cnt; + int result; + int nfails; + int nprobs; + + nfails = 0; + nprobs = 0; + + fp = fopen(filename, "r"); + if (fp != NULL) { + line = 0; + while ((p = t_fgetbs(fp)) != NULL) { + + ++line; + + /* + * Skip comment lines. + */ + if ((isspace((unsigned char)*p)) || (*p == '#')) { + (void)free(p); + continue; + } + + cnt = t_bustline(p, Tokens); + if (cnt == 5) { + result = t_dns_rbtnodechain_last( + Tokens[0], /* dbfile */ + Tokens[1], /* lastname */ + Tokens[2], /* lastorigin */ + Tokens[3], /* prevname */ + Tokens[4]); /* prevorigin */ + if (result != T_PASS) { + if (result == T_FAIL) + ++nfails; + else + ++nprobs; + } + } else { + t_info("bad format in %s at line %d\n", + filename, line); + ++nprobs; + } + + (void)free(p); + } + (void)fclose(fp); + } else { + t_info("Missing datafile %s\n", filename); + ++nprobs; + } + + result = T_UNRESOLVED; + + if ((nfails == 0) && (nprobs == 0)) + result = T_PASS; + else if (nfails) + result = T_FAIL; + + return(result); +} + +static const char *a11 = "a call to " + "dns_rbtnodechain_last(chain, rbt, name, origin) " + "sets name to point to the last node of the megatree, " + "origin to the name of the level above it, " + "and returns DNS_R_NEWORIGIN"; + +static void +t11() { + int result; + + t_assert("dns_rbtnodechain_last", 11, T_REQUIRED, a11); + result = test_dns_rbtnodechain_last("dns_rbtnodechain_last_data"); + t_result(result); +} + +static int +t_dns_rbtnodechain_next(char *dbfile, char *findname, + char *nextname, char *nextorigin) +{ + + int result; + int len; + int nfails; + dns_rbt_t *rbt; + dns_rbtnode_t *node; + dns_rbtnodechain_t chain; + isc_mem_t *mctx; + isc_entropy_t *ectx; + isc_result_t isc_result; + isc_result_t dns_result; + dns_fixedname_t dns_findname; + dns_fixedname_t dns_foundname; + dns_fixedname_t dns_nextname; + dns_fixedname_t dns_origin; + isc_buffer_t isc_buffer; + + result = T_UNRESOLVED; + + nfails = 0; + mctx = NULL; + ectx = NULL; + + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + return(result); + } + + isc_result = isc_entropy_create(mctx, &ectx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_entropy_create: %s: exiting\n", + dns_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_hash_create: %s: exiting\n", + dns_result_totext(isc_result)); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_rbtnodechain_init(&chain, mctx); + + rbt = NULL; + if (rbt_init(dbfile, &rbt, mctx)) { + t_info("rbt_init %s failed\n", dbfile); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(result); + } + + len = strlen(findname); + isc_buffer_init(&isc_buffer, findname, len); + isc_buffer_add(&isc_buffer, len); + + dns_fixedname_init(&dns_foundname); + dns_fixedname_init(&dns_findname); + dns_fixedname_init(&dns_nextname); + dns_fixedname_init(&dns_origin); + + dns_result = dns_name_fromtext(dns_fixedname_name(&dns_findname), + &isc_buffer, NULL, ISC_FALSE, NULL); + + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext failed %s\n", + dns_result_totext(dns_result)); + return(result); + } + + /* + * Set the starting node. + */ + node = NULL; + dns_result = dns_rbt_findnode(rbt, dns_fixedname_name(&dns_findname), + dns_fixedname_name(&dns_foundname), + &node, &chain, DNS_RBTFIND_EMPTYDATA, + NULL, NULL); + + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rbt_findnode failed %s\n", + dns_result_totext(dns_result)); + return(result); + } + + /* + * Check next. + */ + t_info("checking for next name of %s and new origin of %s\n", + nextname, nextorigin); + dns_result = dns_rbtnodechain_next(&chain, + dns_fixedname_name(&dns_nextname), + dns_fixedname_name(&dns_origin)); + + if ((dns_result != ISC_R_SUCCESS) && (dns_result != DNS_R_NEWORIGIN)) { + t_info("dns_rbtnodechain_next unexpectedly returned %s\n", + dns_result_totext(dns_result)); + } + + nfails += t_namechk(dns_result, &dns_nextname, nextname, &dns_origin, + nextorigin, DNS_R_NEWORIGIN); + + if (nfails) + result = T_FAIL; + else + result = T_PASS; + + dns_rbtnodechain_invalidate(&chain); + dns_rbt_destroy(&rbt); + + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + + return(result); +} + +static int +test_dns_rbtnodechain_next(const char *filename) { + FILE *fp; + char *p; + int line; + int cnt; + int result; + int nfails; + int nprobs; + + nfails = 0; + nprobs = 0; + + fp = fopen(filename, "r"); + if (fp != NULL) { + line = 0; + while ((p = t_fgetbs(fp)) != NULL) { + + ++line; + + /* + * Skip comment lines. + */ + if ((isspace((unsigned char)*p)) || (*p == '#')) { + (void)free(p); + continue; + } + + cnt = t_bustline(p, Tokens); + if (cnt == 4) { + result = t_dns_rbtnodechain_next( + Tokens[0], /* dbfile */ + Tokens[1], /* findname */ + Tokens[2], /* nextname */ + Tokens[3]); /* nextorigin */ + if (result != T_PASS) { + if (result == T_FAIL) + ++nfails; + else + ++nprobs; + } + } else { + t_info("bad format in %s at line %d\n", + filename, line); + ++nprobs; + } + + (void)free(p); + } + (void)fclose(fp); + } else { + t_info("Missing datafile %s\n", filename); + ++nprobs; + } + + result = T_UNRESOLVED; + + if ((nfails == 0) && (nprobs == 0)) + result = T_PASS; + else if (nfails) + result = T_FAIL; + + return(result); +} + +static const char *a12 = "a call to " + "dns_rbtnodechain_next(chain, name, origin) " + "sets name to point to the next node of the tree " + "and returns ISC_R_SUCCESS or " + "DNS_R_NEWORIGIN on success"; + + +static void +t12() { + int result; + + t_assert("dns_rbtnodechain_next", 12, T_REQUIRED, a12); + result = test_dns_rbtnodechain_next("dns_rbtnodechain_next_data"); + t_result(result); +} + +static int +t_dns_rbtnodechain_prev(char *dbfile, char *findname, char *prevname, + char *prevorigin) +{ + int result; + int len; + int nfails; + dns_rbt_t *rbt; + dns_rbtnode_t *node; + dns_rbtnodechain_t chain; + isc_mem_t *mctx; + isc_entropy_t *ectx = NULL; + isc_result_t isc_result; + isc_result_t dns_result; + dns_fixedname_t dns_findname; + dns_fixedname_t dns_foundname; + dns_fixedname_t dns_prevname; + dns_fixedname_t dns_origin; + isc_buffer_t isc_buffer; + + result = T_UNRESOLVED; + + nfails = 0; + mctx = NULL; + ectx = NULL; + + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + return(result); + } + + isc_result = isc_entropy_create(mctx, &ectx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_entropy_create: %s: exiting\n", + dns_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_hash_create: %s: exiting\n", + dns_result_totext(isc_result)); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + dns_rbtnodechain_init(&chain, mctx); + + rbt = NULL; + if (rbt_init(dbfile, &rbt, mctx)) { + t_info("rbt_init %s failed\n", dbfile); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + return(result); + } + + len = strlen(findname); + isc_buffer_init(&isc_buffer, findname, len); + isc_buffer_add(&isc_buffer, len); + + dns_fixedname_init(&dns_foundname); + dns_fixedname_init(&dns_findname); + dns_fixedname_init(&dns_prevname); + dns_fixedname_init(&dns_origin); + + dns_result = dns_name_fromtext(dns_fixedname_name(&dns_findname), + &isc_buffer, NULL, ISC_FALSE, NULL); + + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_name_fromtext failed %s\n", + dns_result_totext(dns_result)); + return(result); + } + + /* + * Set the starting node. + */ + node = NULL; + dns_result = dns_rbt_findnode(rbt, dns_fixedname_name(&dns_findname), + dns_fixedname_name(&dns_foundname), + &node, &chain, DNS_RBTFIND_EMPTYDATA, + NULL, NULL); + + if (dns_result != ISC_R_SUCCESS) { + t_info("dns_rbt_findnode failed %s\n", + dns_result_totext(dns_result)); + return(result); + } + + /* + * Check next. + */ + t_info("checking for next name of %s and new origin of %s\n", + prevname, prevorigin); + dns_result = dns_rbtnodechain_prev(&chain, + dns_fixedname_name(&dns_prevname), + dns_fixedname_name(&dns_origin)); + + if ((dns_result != ISC_R_SUCCESS) && (dns_result != DNS_R_NEWORIGIN)) { + t_info("dns_rbtnodechain_prev unexpectedly returned %s\n", + dns_result_totext(dns_result)); + } + + nfails += t_namechk(dns_result, &dns_prevname, prevname, &dns_origin, + prevorigin, DNS_R_NEWORIGIN); + + if (nfails) + result = T_FAIL; + else + result = T_PASS; + + dns_rbtnodechain_invalidate(&chain); + dns_rbt_destroy(&rbt); + + isc_hash_destroy(); + isc_entropy_detach(&ectx); + isc_mem_destroy(&mctx); + + return(result); +} + +static int +test_dns_rbtnodechain_prev(const char *filename) { + FILE *fp; + char *p; + int line; + int cnt; + int result; + int nfails; + int nprobs; + + nfails = 0; + nprobs = 0; + + fp = fopen(filename, "r"); + if (fp != NULL) { + line = 0; + while ((p = t_fgetbs(fp)) != NULL) { + + ++line; + + /* + * Skip comment lines. + */ + if ((isspace((unsigned char)*p)) || (*p == '#')) { + (void)free(p); + continue; + } + + cnt = t_bustline(p, Tokens); + if (cnt == 4) { + result = t_dns_rbtnodechain_prev( + Tokens[0], /* dbfile */ + Tokens[1], /* findname */ + Tokens[2], /* prevname */ + Tokens[3]); /* prevorigin */ + if (result != T_PASS) { + if (result == T_FAIL) + ++nfails; + else + ++nprobs; + } + } else { + t_info("bad format in %s at line %d\n", + filename, line); + ++nprobs; + } + + (void)free(p); + } + (void)fclose(fp); + } else { + t_info("Missing datafile %s\n", filename); + ++nprobs; + } + + result = T_UNRESOLVED; + + if ((nfails == 0) && (nprobs == 0)) + result = T_PASS; + else if (nfails) + result = T_FAIL; + + return(result); +} + +static const char *a13 = "a call to " + "dns_rbtnodechain_prev(chain, name, origin) " + "sets name to point to the previous node of the tree " + "and returns ISC_R_SUCCESS or " + "DNS_R_NEWORIGIN on success"; + +static void +t13() { + int result; + + t_assert("dns_rbtnodechain_prev", 13, T_REQUIRED, a13); + result = test_dns_rbtnodechain_prev("dns_rbtnodechain_prev_data"); + t_result(result); +} + + + +testspec_t T_testlist[] = { + { t1, "dns_rbt_create" }, + { t2, "dns_rbt_addname 1" }, + { t3, "dns_rbt_addname 2" }, + { t4, "dns_rbt_deletename 1" }, + { t5, "dns_rbt_deletename 2" }, + { t6, "dns_rbt_findname 1" }, + { t7, "dns_rbt_findname 2" }, + { t8, "dns_rbt_findname 3" }, + { t9, "dns_rbtnodechain_init" }, + { t10, "dns_rbtnodechain_first" }, + { t11, "dns_rbtnodechain_last" }, + { t12, "dns_rbtnodechain_next" }, + { t13, "dns_rbtnodechain_prev" }, + { NULL, NULL } +}; + diff --git a/bin/tests/rbt_test.c b/bin/tests/rbt_test.c new file mode 100644 index 0000000..ac8db14 --- /dev/null +++ b/bin/tests/rbt_test.c @@ -0,0 +1,457 @@ +/* + * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1999-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. + */ + +/* $Id: rbt_test.c,v 1.48 2007/06/19 23:46:59 tbox Exp $ */ + +#include <config.h> + +#include <stdlib.h> + +#include <isc/commandline.h> +#include <isc/mem.h> +#include <isc/string.h> +#include <isc/util.h> + +#include <dns/rbt.h> +#include <dns/fixedname.h> +#include <dns/result.h> + +char *progname; +isc_mem_t *mctx; + +#define DNSNAMELEN 255 + +static dns_name_t * +create_name(char *s) { + int length; + isc_result_t result; + isc_buffer_t source, target; + static dns_name_t *name; + + if (s == NULL || *s == '\0') { + printf("missing name argument\n"); + return (NULL); + } + + length = strlen(s); + + isc_buffer_init(&source, s, length); + isc_buffer_add(&source, length); + + /* + * It isn't really necessary in this program to create individual + * memory spaces for each name structure and its associated character + * string. It is done here to provide a relatively easy way to test + * the callback from dns_rbt_deletename that is supposed to free the + * data associated with a node. + * + * The buffer for the actual name will immediately follow the + * name structure. + */ + name = isc_mem_get(mctx, sizeof(*name) + DNSNAMELEN); + if (name == NULL) { + printf("out of memory!\n"); + return (NULL); + } + + dns_name_init(name, NULL); + isc_buffer_init(&target, name + 1, DNSNAMELEN); + + result = dns_name_fromtext(name, &source, dns_rootname, + ISC_FALSE, &target); + + if (result != ISC_R_SUCCESS) { + printf("dns_name_fromtext(%s) failed: %s\n", + s, dns_result_totext(result)); + return (NULL); + } + + return (name); +} + +static void +delete_name(void *data, void *arg) { + dns_name_t *name; + + UNUSED(arg); + name = data; + isc_mem_put(mctx, data, sizeof(dns_name_t) + DNSNAMELEN); +} + +static void +print_name(dns_name_t *name) { + isc_buffer_t target; + char buffer[1024]; + + isc_buffer_init(&target, buffer, sizeof(buffer)); + + /* + * ISC_FALSE means absolute names have the final dot added. + */ + dns_name_totext(name, ISC_FALSE, &target); + + printf("%.*s", (int)target.used, (char *)target.base); +} + +static void +detail(dns_rbt_t *rbt, dns_name_t *name) { + dns_name_t *foundname, *origin, *fullname; + dns_fixedname_t fixedfoundname, fixedorigin, fixedfullname; + dns_rbtnode_t *node1, *node2; + dns_rbtnodechain_t chain; + isc_result_t result; + isc_boolean_t nodes_should_match = ISC_FALSE; + + dns_rbtnodechain_init(&chain, mctx); + + dns_fixedname_init(&fixedorigin); + dns_fixedname_init(&fixedfullname); + dns_fixedname_init(&fixedfoundname); + + origin = dns_fixedname_name(&fixedorigin); + fullname = dns_fixedname_name(&fixedfullname); + foundname = dns_fixedname_name(&fixedfoundname); + + node1 = node2 = NULL; + + printf("checking chain information for "); + print_name(name); + printf("\n"); + + result = dns_rbt_findnode(rbt, name, foundname, &node1, &chain, + DNS_RBTFIND_EMPTYDATA, NULL, NULL); + + switch (result) { + case ISC_R_SUCCESS: + printf(" found exact."); + nodes_should_match = ISC_TRUE; + break; + case DNS_R_PARTIALMATCH: + printf(" found parent."); + break; + case ISC_R_NOTFOUND: + printf(" name not found."); + break; + default: + printf(" unexpected result: %s\n", dns_result_totext(result)); + return; + } + + if (node1 != NULL && node1->data != NULL) { + printf(" data at node: "); + print_name(node1->data); + } else + printf(" no data at node."); + + if (result == ISC_R_SUCCESS || result == DNS_R_PARTIALMATCH) { + printf("\n name from dns_rbt_findnode: "); + print_name(foundname); + } + + result = dns_rbtnodechain_current(&chain, foundname, origin, &node2); + + if (result == ISC_R_SUCCESS) { + printf("\n name from dns_rbtnodechain_current: "); + + result = dns_name_concatenate(foundname, origin, + fullname, NULL); + if (result == ISC_R_SUCCESS) + print_name(fullname); + else + printf("%s\n", dns_result_totext(result)); + printf("\n (foundname = "); + print_name(foundname); + printf(", origin = "); + print_name(origin); + printf(")\n"); + if (nodes_should_match && node1 != node2) + printf(" nodes returned from each function " + "DO NOT match!\n"); + + } else + printf("\n result from dns_rbtnodechain_current: %s\n", + dns_result_totext(result)); + + printf(" level_matches = %d, level_count = %d\n", + chain.level_matches, chain.level_count); +} + +static void +iterate(dns_rbt_t *rbt, isc_boolean_t forward) { + dns_name_t foundname, *origin; + dns_rbtnodechain_t chain; + dns_fixedname_t fixedorigin; + isc_result_t result; + isc_result_t (*move)(dns_rbtnodechain_t *chain, dns_name_t *name, + dns_name_t *origin); + + dns_rbtnodechain_init(&chain, mctx); + + dns_name_init(&foundname, NULL); + dns_fixedname_init(&fixedorigin); + origin = dns_fixedname_name(&fixedorigin); + + if (forward) { + printf("iterating forward\n" ); + move = dns_rbtnodechain_next; + + result = dns_rbtnodechain_first(&chain, rbt, &foundname, + origin); + + } else { + printf("iterating backward\n" ); + move = dns_rbtnodechain_prev; + + result = dns_rbtnodechain_last(&chain, rbt, &foundname, + origin); + } + + if (result != ISC_R_SUCCESS && result != DNS_R_NEWORIGIN) + printf("start not found!\n"); + + else { + for (;;) { + if (result == DNS_R_NEWORIGIN) { + printf(" new origin: "); + print_name(origin); + printf("\n"); + } + + if (result == ISC_R_SUCCESS || + result == DNS_R_NEWORIGIN) { + print_name(&foundname); + printf("\n"); + + } else { + if (result != ISC_R_NOMORE) + printf("UNEXEPCTED ITERATION ERROR: %s", + dns_result_totext(result)); + break; + } + + result = move(&chain, &foundname, origin); + } + } +} + + +#define CMDCHECK(s) (strncasecmp(command, (s), length) == 0) +#define PRINTERR(r) if (r != ISC_R_SUCCESS) \ + printf("... %s\n", dns_result_totext(r)); + +int +main(int argc, char **argv) { + char *command, *arg, buffer[1024]; + const char *whitespace; + dns_name_t *name, *foundname; + dns_fixedname_t fixedname; + dns_rbt_t *rbt = NULL; + int length, ch; + isc_boolean_t show_final_mem = ISC_FALSE; + isc_result_t result; + void *data; + + progname = strrchr(*argv, '/'); + if (progname != NULL) + progname++; + else + progname = *argv; + + while ((ch = isc_commandline_parse(argc, argv, "m")) != -1) { + switch (ch) { + case 'm': + show_final_mem = ISC_TRUE; + break; + } + } + + argc -= isc_commandline_index; + argv += isc_commandline_index; + + if (argc > 1) { + printf("Usage: %s [-m]\n", progname); + exit(1); + } + + setbuf(stdout, NULL); + + /* + * So isc_mem_stats() can report any allocation leaks. + */ + isc_mem_debugging = ISC_MEM_DEBUGRECORD; + + result = isc_mem_create(0, 0, &mctx); + if (result != ISC_R_SUCCESS) { + printf("isc_mem_create: %s: exiting\n", + dns_result_totext(result)); + exit(1); + } + + result = dns_rbt_create(mctx, delete_name, NULL, &rbt); + if (result != ISC_R_SUCCESS) { + printf("dns_rbt_create: %s: exiting\n", + dns_result_totext(result)); + exit(1); + } + + whitespace = " \t"; + + while (fgets(buffer, sizeof(buffer), stdin) != NULL) { + length = strlen(buffer); + + if (buffer[length - 1] != '\n') { + printf("line to long (%lu max), ignored\n", + (unsigned long)sizeof(buffer) - 2); + continue; + } + + buffer[length - 1] = '\0'; + + command = buffer + strspn(buffer, whitespace); + + if (*command == '#') + continue; + + arg = strpbrk(command, whitespace); + if (arg != NULL) { + *arg++ = '\0'; + arg += strspn(arg, whitespace); + } + + length = strlen(command); + if (*command != '\0') { + if (CMDCHECK("add")) { + name = create_name(arg); + if (name != NULL) { + printf("adding name %s\n", arg); + result = dns_rbt_addname(rbt, + name, name); + PRINTERR(result); + } + + } else if (CMDCHECK("delete")) { + name = create_name(arg); + if (name != NULL) { + printf("deleting name %s\n", arg); + result = dns_rbt_deletename(rbt, name, + ISC_FALSE); + PRINTERR(result); + delete_name(name, NULL); + } + + } else if (CMDCHECK("nuke")) { + name = create_name(arg); + if (name != NULL) { + printf("nuking name %s " + "and its descendants\n", arg); + result = dns_rbt_deletename(rbt, name, + ISC_TRUE); + PRINTERR(result); + delete_name(name, NULL); + } + + } else if (CMDCHECK("search")) { + name = create_name(arg); + if (name != NULL) { + printf("searching for name %s ... ", + arg); + + dns_fixedname_init(&fixedname); + foundname = + dns_fixedname_name(&fixedname); + data = NULL; + + result = dns_rbt_findname(rbt, name, 0, + foundname, + &data); + switch (result) { + case ISC_R_SUCCESS: + printf("found exact: "); + print_name(data); + putchar('\n'); + break; + case DNS_R_PARTIALMATCH: + printf("found parent: "); + print_name(data); + printf("\n\t(foundname: "); + print_name(foundname); + printf(")\n"); + break; + case ISC_R_NOTFOUND: + printf("NOT FOUND!\n"); + break; + case ISC_R_NOMEMORY: + printf("OUT OF MEMORY!\n"); + break; + default: + printf("UNEXPECTED RESULT\n"); + } + + delete_name(name, NULL); + } + + } else if (CMDCHECK("check")) { + /* + * Or "chain". I know, I know. Lame name. + * I was having a hard time thinking of a + * name (especially one that did not have + * a conflicting first letter with another + * command) that would differentiate this + * from the search command. + * + * But it is just a test program, eh? + */ + name = create_name(arg); + if (name != NULL) { + detail(rbt, name); + + delete_name(name, NULL); + } + + } else if (CMDCHECK("forward")) { + iterate(rbt, ISC_TRUE); + + } else if (CMDCHECK("backward")) { + iterate(rbt, ISC_FALSE); + + } else if (CMDCHECK("print")) { + if (arg == NULL || *arg == '\0') + dns_rbt_printall(rbt); + else + printf("usage: print\n"); + + } else if (CMDCHECK("quit")) { + if (arg == NULL || *arg == '\0') + break; + else + printf("usage: quit\n"); + } else { + printf("a(dd) NAME, d(elete) NAME, " + "s(earch) NAME, p(rint), or q(uit)\n"); + + } + } + + } + + dns_rbt_destroy(&rbt); + + if (show_final_mem) + isc_mem_stats(mctx, stderr); + + return (0); +} diff --git a/bin/tests/rbt_test.out b/bin/tests/rbt_test.out new file mode 100644 index 0000000..95bf4f9 --- /dev/null +++ b/bin/tests/rbt_test.out @@ -0,0 +1,395 @@ +adding name a.vix.com +adding name b.vix.com +adding name c.vix.com +vix.com. (black) + ++ BEG down from vix.com. + b (black) + a (RED from b) + NULL + NULL + c (RED from b) + NULL + NULL + -- END down from vix.com. + NULL + NULL +adding name a.b.c.d.e.f.vix.com +adding name b.b.c.d.e.f.vix.com +adding name c.b.c.d.e.f.vix.com +vix.com. (black) + ++ BEG down from vix.com. + b (black) + a (black from b) + NULL + NULL + c (black from b) + NULL + b.c.d.e.f (RED from c) + ++ BEG down from b.c.d.e.f + b (black) + a (RED from b) + NULL + NULL + c (RED from b) + NULL + NULL + -- END down from b.c.d.e.f + NULL + NULL + -- END down from vix.com. + NULL + NULL +adding name a.d.e.f.vix.com +adding name q.d.e.f.vix.com +adding name d.e.f.vix.com +vix.com. (black) + ++ BEG down from vix.com. + b (black) + a (black from b) + NULL + NULL + c (black from b) + NULL + d.e.f (RED from c) + ++ BEG down from d.e.f + b.c (black) + ++ BEG down from b.c + b (black) + a (RED from b) + NULL + NULL + c (RED from b) + NULL + NULL + -- END down from b.c + a (RED from b.c) + NULL + NULL + q (RED from b.c) + NULL + NULL + -- END down from d.e.f + NULL + NULL + -- END down from vix.com. + NULL + NULL +adding name g.h.vix.com +vix.com. (black) + ++ BEG down from vix.com. + b (black) + a (black from b) + NULL + NULL + d.e.f (black from b) + ++ BEG down from d.e.f + b.c (black) + ++ BEG down from b.c + b (black) + a (RED from b) + NULL + NULL + c (RED from b) + NULL + NULL + -- END down from b.c + a (RED from b.c) + NULL + NULL + q (RED from b.c) + NULL + NULL + -- END down from d.e.f + c (RED from d.e.f) + NULL + NULL + g.h (RED from d.e.f) + NULL + NULL + -- END down from vix.com. + NULL + NULL +searching for name q.d.e.f.vix.com ... found exact: q.d.e.f.vix.com. +searching for name just-parent.a.vix.com ... found parent: a.vix.com. + (foundname: a.vix.com.) +searching for name no-real-parent.vix.com ... NOT FOUND! +searching for name does.not.exist.at.all ... NOT FOUND! +iterating forward + new origin: . +vix.com + new origin: vix.com. +a +b +c +d.e.f + new origin: d.e.f.vix.com. +a +b.c + new origin: b.c.d.e.f.vix.com. +a +b +c + new origin: d.e.f.vix.com. +q + new origin: vix.com. +g.h +iterating backward + new origin: vix.com. +g.h + new origin: d.e.f.vix.com. +q + new origin: b.c.d.e.f.vix.com. +c +b +a + new origin: d.e.f.vix.com. +b.c +a + new origin: vix.com. +d.e.f +c +b +a + new origin: . +vix.com +checking chain information for vix.com. + found exact. no data at node. + name from dns_rbt_findnode: vix.com. + name from dns_rbtnodechain_current: vix.com. + (foundname = vix.com, origin = .) + level_matches = 0, level_count = 0 +checking chain information for zzz.com. + name not found. no data at node. + name from dns_rbtnodechain_current: g.h.vix.com. + (foundname = g.h, origin = vix.com.) + level_matches = 0, level_count = 1 +checking chain information for 0.vix.com. + found parent. no data at node. + name from dns_rbt_findnode: vix.com. + name from dns_rbtnodechain_current: vix.com. + (foundname = vix.com, origin = .) + level_matches = 0, level_count = 0 +checking chain information for d.vix.com. + found parent. no data at node. + name from dns_rbt_findnode: vix.com. + name from dns_rbtnodechain_current: c.vix.com. + (foundname = c, origin = vix.com.) + level_matches = 0, level_count = 1 +checking chain information for f.vix.com. + found parent. no data at node. + name from dns_rbt_findnode: vix.com. + name from dns_rbtnodechain_current: c.vix.com. + (foundname = c, origin = vix.com.) + level_matches = 0, level_count = 1 +checking chain information for a.e.f.vix.com. + found parent. no data at node. + name from dns_rbt_findnode: vix.com. + name from dns_rbtnodechain_current: c.vix.com. + (foundname = c, origin = vix.com.) + level_matches = 0, level_count = 1 +checking chain information for z.e.f.vix.com. + found parent. no data at node. + name from dns_rbt_findnode: vix.com. + name from dns_rbtnodechain_current: q.d.e.f.vix.com. + (foundname = q, origin = d.e.f.vix.com.) + level_matches = 0, level_count = 2 +checking chain information for g.vix.com. + found parent. no data at node. + name from dns_rbt_findnode: vix.com. + name from dns_rbtnodechain_current: q.d.e.f.vix.com. + (foundname = q, origin = d.e.f.vix.com.) + level_matches = 0, level_count = 2 +checking chain information for i.vix.com. + found parent. no data at node. + name from dns_rbt_findnode: vix.com. + name from dns_rbtnodechain_current: g.h.vix.com. + (foundname = g.h, origin = vix.com.) + level_matches = 0, level_count = 1 +checking chain information for b.c.vix.com. + found parent. data at node: c.vix.com. + name from dns_rbt_findnode: c.vix.com. + name from dns_rbtnodechain_current: c.vix.com. + (foundname = c, origin = vix.com.) + level_matches = 1, level_count = 1 +nuking name d.e.f.vix.com and its descendants +vix.com. (black) + ++ BEG down from vix.com. + b (black) + a (black from b) + NULL + NULL + g.h (black from b) + c (RED from g.h) + NULL + NULL + NULL + -- END down from vix.com. + NULL + NULL +adding name x.a.vix.com +adding name y.x.a.vix.com +vix.com. (black) + ++ BEG down from vix.com. + b (black) + a (black from b) + ++ BEG down from a + x (black) + ++ BEG down from x + y (black) + NULL + NULL + -- END down from x + NULL + NULL + -- END down from a + NULL + NULL + g.h (black from b) + c (RED from g.h) + NULL + NULL + NULL + -- END down from vix.com. + NULL + NULL +deleting name a.vix.com +deleting name x.a.vix.com +vix.com. (black) + ++ BEG down from vix.com. + b (black) + a (black from b) + ++ BEG down from a + x (black) + ++ BEG down from x + y (black) + NULL + NULL + -- END down from x + NULL + NULL + -- END down from a + NULL + NULL + g.h (black from b) + c (RED from g.h) + NULL + NULL + NULL + -- END down from vix.com. + NULL + NULL +deleting name b.vix.com +deleting name c.vix.com +vix.com. (black) + ++ BEG down from vix.com. + g.h (black) + a (RED from g.h) + ++ BEG down from a + x (black) + ++ BEG down from x + y (black) + NULL + NULL + -- END down from x + NULL + NULL + -- END down from a + NULL + NULL + NULL + -- END down from vix.com. + NULL + NULL +deleting name y.x.a.vix.com +vix.com. (black) + ++ BEG down from vix.com. + g.h (black) + a (RED from g.h) + ++ BEG down from a + x (black) + NULL + NULL + -- END down from a + NULL + NULL + NULL + -- END down from vix.com. + NULL + NULL +deleting name g.h.vix.com. +adding name \[b100000].vix.com. +adding name \[b010000].vix.com. +adding name \[b001000].vix.com. +adding name \[b000100].vix.com. +adding name \[b000010].vix.com. +adding name \[b000001].vix.com. +vix.com. (black) + ++ BEG down from vix.com. + \[x80/6] (black) + \[x0/1] (RED from \[x80/6]) + ++ BEG down from \[x0/1] + \[x80/5] (black) + \[x0/1] (RED from \[x80/5]) + ++ BEG down from \[x0/1] + \[x8/4] (black) + \[x0/1] (RED from \[x8/4]) + ++ BEG down from \[x0/1] + \[x8/3] (black) + \[x0/1] (RED from \[x8/3]) + ++ BEG down from \[x0/1] + \[x8/2] (black) + \[x4/2] (RED from \[x8/2]) + NULL + NULL + NULL + -- END down from \[x0/1] + NULL + NULL + NULL + -- END down from \[x0/1] + NULL + NULL + NULL + -- END down from \[x0/1] + NULL + NULL + NULL + -- END down from \[x0/1] + NULL + NULL + a (RED from \[x80/6]) + ++ BEG down from a + x (black) + NULL + NULL + -- END down from a + NULL + NULL + -- END down from vix.com. + NULL + NULL +searching for name \[b000100].vix.com. ... found exact: \[x10/6].vix.com. +adding name vix.com. +nuking name vix.com. and its descendants +adding name a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w. +adding name b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w. +b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w. (black) + ++ BEG down from b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w. + a (black) + NULL + NULL + -- END down from b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w. + NULL + NULL +adding name . +nuking name . and its descendants +adding name \[xFFFF/16].\[xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF/256].com +adding name \[xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF/128].com +\[xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF/128].com. (black) + ++ BEG down from \[xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF/128].com. + \[xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF/144] (black) + NULL + NULL + -- END down from \[xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF/128].com. + NULL + NULL diff --git a/bin/tests/rbt_test.txt b/bin/tests/rbt_test.txt new file mode 100644 index 0000000..bf50b12 --- /dev/null +++ b/bin/tests/rbt_test.txt @@ -0,0 +1,93 @@ +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 1999-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. + +# $Id: rbt_test.txt,v 1.17 2007/06/19 23:46:59 tbox Exp $
+
+add a.vix.com
+add b.vix.com
+add c.vix.com
+print
+add a.b.c.d.e.f.vix.com
+add b.b.c.d.e.f.vix.com
+add c.b.c.d.e.f.vix.com
+print
+add a.d.e.f.vix.com
+add q.d.e.f.vix.com
+add d.e.f.vix.com
+print
+add g.h.vix.com
+print
+search q.d.e.f.vix.com
+search just-parent.a.vix.com
+search no-real-parent.vix.com
+search does.not.exist.at.all
+forward
+backward
+# existing name
+check vix.com.
+# greater than stop node, which has down pointer
+check zzz.com.
+# less than lowest in level (would be left link from stop node)
+check 0.vix.com
+# greater than stop node, no down pointer
+check d.vix.com
+# superdomain stored in existing node
+check f.vix.com
+# common ancestor stored in existing node; existing is successor
+check a.e.f.vix.com
+# common ancestor stored in existing node; existing is less but not predecessor
+check z.e.f.vix.com
+#
+check g.vix.com
+#
+check i.vix.com
+#
+check b.c.vix.com
+nuke d.e.f.vix.com
+print
+add x.a.vix.com
+add y.x.a.vix.com
+print
+delete a.vix.com
+delete x.a.vix.com
+print
+delete b.vix.com
+delete c.vix.com
+print
+delete y.x.a.vix.com
+print
+delete g.h.vix.com.
+add \[b100000].vix.com.
+add \[b010000].vix.com.
+add \[b001000].vix.com.
+add \[b000100].vix.com.
+add \[b000010].vix.com.
+add \[b000001].vix.com.
+p
+search \[b000100].vix.com.
+# zap the entire tree
+add vix.com.
+nuke vix.com.
+add a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.
+add b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.
+print
+add .
+# zap it again
+nuke .
+# test splitting of maximal bitstring
+add \[xFFFF/16].\[xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF/256].com
+add \[xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF/128].com
+print
+quit
diff --git a/bin/tests/rdata_test.c b/bin/tests/rdata_test.c new file mode 100644 index 0000000..7955737 --- /dev/null +++ b/bin/tests/rdata_test.c @@ -0,0 +1,1182 @@ +/* + * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1998-2003 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. + */ + +/* $Id: rdata_test.c,v 1.48 2007/06/19 23:46:59 tbox Exp $ */ + +#include <config.h> + +#include <stdlib.h> + +#include <isc/buffer.h> +#include <isc/commandline.h> +#include <isc/lex.h> +#include <isc/mem.h> +#include <isc/string.h> +#include <isc/util.h> + +#include <dns/rdata.h> +#include <dns/compress.h> +#include <dns/rdataclass.h> +#include <dns/rdatastruct.h> +#include <dns/rdatatype.h> +#include <dns/result.h> + +isc_mem_t *mctx; +isc_lex_t *lex; + +isc_lexspecials_t specials; + +static void +viastruct(dns_rdata_t *rdata, isc_mem_t *mctx, + dns_rdata_t *rdata2, isc_buffer_t *b) +{ + isc_result_t result; + void *sp = NULL; + isc_boolean_t need_free = ISC_FALSE; + dns_rdatatype_t rdt; + dns_rdataclass_t rdc; + + UNUSED(rdata2); /* XXXMPA remove when fromstruct is ready. */ + UNUSED(b); + + switch (rdata->type) { + case dns_rdatatype_a6: { + dns_rdata_in_a6_t in_a6; + result = dns_rdata_tostruct(rdata, sp = &in_a6, NULL); + break; + } + case dns_rdatatype_a: { + switch (rdata->rdclass) { + case dns_rdataclass_hs: { + dns_rdata_hs_a_t hs_a; + result = dns_rdata_tostruct(rdata, sp = &hs_a, NULL); + break; + } + case dns_rdataclass_in: { + dns_rdata_in_a_t in_a; + result = dns_rdata_tostruct(rdata, sp = &in_a, NULL); + break; + } + default: + result = ISC_R_NOTIMPLEMENTED; + break; + } + break; + } + case dns_rdatatype_aaaa: { + dns_rdata_in_aaaa_t in_aaaa; + result = dns_rdata_tostruct(rdata, sp = &in_aaaa, NULL); + break; + } + case dns_rdatatype_afsdb: { + dns_rdata_afsdb_t afsdb; + result = dns_rdata_tostruct(rdata, sp = &afsdb, NULL); + break; + } + case dns_rdatatype_any: { + result = ISC_R_NOTIMPLEMENTED; + break; + } + case dns_rdatatype_apl: { + switch (rdata->rdclass) { + case dns_rdataclass_in: { + dns_rdata_in_apl_t in_apl; + result = dns_rdata_tostruct(rdata, sp = &in_apl, NULL); + break; + } + default: + result = ISC_R_NOTIMPLEMENTED; + break; + } + break; + } + case dns_rdatatype_cert: { + dns_rdata_cert_t cert; + result = dns_rdata_tostruct(rdata, sp = &cert, NULL); + break; + } + case dns_rdatatype_cname: { + dns_rdata_cname_t cname; + result = dns_rdata_tostruct(rdata, sp = &cname, NULL); + break; + } + case dns_rdatatype_dname: { + dns_rdata_dname_t dname; + result = dns_rdata_tostruct(rdata, sp = &dname, NULL); + break; + } + case dns_rdatatype_gpos: { + dns_rdata_gpos_t gpos; + result = dns_rdata_tostruct(rdata, sp = &gpos, NULL); + break; + } + case dns_rdatatype_hinfo: { + dns_rdata_hinfo_t hinfo; + result = dns_rdata_tostruct(rdata, sp = &hinfo, NULL); + break; + } + case dns_rdatatype_isdn: { + dns_rdata_isdn_t isdn; + result = dns_rdata_tostruct(rdata, sp = &isdn, NULL); + break; + } + case dns_rdatatype_key: { + dns_rdata_key_t key; + result = dns_rdata_tostruct(rdata, sp = &key, NULL); + break; + } + case dns_rdatatype_kx: { + dns_rdata_in_kx_t in_kx; + result = dns_rdata_tostruct(rdata, sp = &in_kx, NULL); + break; + } + case dns_rdatatype_loc: { + dns_rdata_loc_t loc; + result = dns_rdata_tostruct(rdata, sp = &loc, NULL); + break; + } + case dns_rdatatype_mb: { + dns_rdata_mb_t mb; + result = dns_rdata_tostruct(rdata, sp = &mb, NULL); + break; + } + case dns_rdatatype_md: { + dns_rdata_md_t md; + result = dns_rdata_tostruct(rdata, sp = &md, NULL); + break; + } + case dns_rdatatype_mf: { + dns_rdata_mf_t mf; + result = dns_rdata_tostruct(rdata, sp = &mf, NULL); + break; + } + case dns_rdatatype_mg: { + dns_rdata_mg_t mg; + result = dns_rdata_tostruct(rdata, sp = &mg, NULL); + break; + } + case dns_rdatatype_minfo: { + dns_rdata_minfo_t minfo; + result = dns_rdata_tostruct(rdata, sp = &minfo, NULL); + break; + } + case dns_rdatatype_mr: { + dns_rdata_mr_t mr; + result = dns_rdata_tostruct(rdata, sp = &mr, NULL); + break; + } + case dns_rdatatype_mx: { + dns_rdata_mx_t mx; + result = dns_rdata_tostruct(rdata, sp = &mx, NULL); + break; + } + case dns_rdatatype_naptr: { + dns_rdata_in_naptr_t in_naptr; + result = dns_rdata_tostruct(rdata, sp = &in_naptr, NULL); + break; + } + case dns_rdatatype_ns: { + dns_rdata_ns_t ns; + result = dns_rdata_tostruct(rdata, sp = &ns, NULL); + break; + } + case dns_rdatatype_nsap: { + dns_rdata_in_nsap_t in_nsap; + result = dns_rdata_tostruct(rdata, sp = &in_nsap, NULL); + break; + } + case dns_rdatatype_nsap_ptr: { + dns_rdata_in_nsap_ptr_t in_nsap_ptr; + result = dns_rdata_tostruct(rdata, sp = &in_nsap_ptr, NULL); + break; + } + case dns_rdatatype_null: { + dns_rdata_null_t null; + result = dns_rdata_tostruct(rdata, sp = &null, NULL); + break; + } + case dns_rdatatype_nxt: { + dns_rdata_nxt_t nxt; + result = dns_rdata_tostruct(rdata, sp = &nxt, NULL); + break; + } + case dns_rdatatype_opt: { + dns_rdata_opt_t opt; + result = dns_rdata_tostruct(rdata, sp = &opt, NULL); + break; + } + case dns_rdatatype_ptr: { + dns_rdata_ptr_t ptr; + result = dns_rdata_tostruct(rdata, sp = &ptr, NULL); + break; + } + case dns_rdatatype_px: { + dns_rdata_in_px_t in_px; + result = dns_rdata_tostruct(rdata, sp = &in_px, NULL); + break; + } + case dns_rdatatype_rp: { + dns_rdata_rp_t rp; + result = dns_rdata_tostruct(rdata, sp = &rp, NULL); + break; + } + case dns_rdatatype_rt: { + dns_rdata_rt_t rt; + result = dns_rdata_tostruct(rdata, sp = &rt, NULL); + break; + } + case dns_rdatatype_sig: { + dns_rdata_sig_t sig; + result = dns_rdata_tostruct(rdata, sp = &sig, NULL); + break; + } + case dns_rdatatype_soa: { + dns_rdata_soa_t soa; + result = dns_rdata_tostruct(rdata, sp = &soa, NULL); + break; + } + case dns_rdatatype_srv: { + dns_rdata_in_srv_t in_srv; + result = dns_rdata_tostruct(rdata, sp = &in_srv, NULL); + break; + } + case dns_rdatatype_tkey: { + dns_rdata_tkey_t tkey; + result = dns_rdata_tostruct(rdata, sp = &tkey, NULL); + break; + } + case dns_rdatatype_tsig: { + dns_rdata_any_tsig_t tsig; + result = dns_rdata_tostruct(rdata, sp = &tsig, NULL); + break; + } + case dns_rdatatype_txt: { + dns_rdata_txt_t txt; + result = dns_rdata_tostruct(rdata, sp = &txt, NULL); + break; + } + case dns_rdatatype_spf: { + dns_rdata_spf_t spf; + result = dns_rdata_tostruct(rdata, sp = &spf, NULL); + break; + } + case dns_rdatatype_unspec: { + dns_rdata_unspec_t unspec; + result = dns_rdata_tostruct(rdata, sp = &unspec, NULL); + break; + } + case dns_rdatatype_wks: { + dns_rdata_in_wks_t in_wks; + result = dns_rdata_tostruct(rdata, sp = &in_wks, NULL); + break; + } + case dns_rdatatype_x25: { + dns_rdata_x25_t x25; + result = dns_rdata_tostruct(rdata, sp = &x25, NULL); + break; + } + case dns_rdatatype_nsec: { + dns_rdata_nsec_t nsec; + result = dns_rdata_tostruct(rdata, sp = &nsec, NULL); + break; + } + case dns_rdatatype_rrsig: { + dns_rdata_rrsig_t rrsig; + result = dns_rdata_tostruct(rdata, sp = &rrsig, NULL); + break; + } + case dns_rdatatype_dnskey: { + dns_rdata_dnskey_t dnskey; + result = dns_rdata_tostruct(rdata, sp = &dnskey, NULL); + break; + } + default: + result = ISC_R_NOTIMPLEMENTED; + break; + } + if (result != ISC_R_SUCCESS) + fprintf(stdout, "viastruct: tostruct %d %d return %s\n", + rdata->type, rdata->rdclass, + dns_result_totext(result)); + else + dns_rdata_freestruct(sp); + + switch (rdata->type) { + case dns_rdatatype_a6: { + dns_rdata_in_a6_t in_a6; + result = dns_rdata_tostruct(rdata, sp = &in_a6, mctx); + break; + } + case dns_rdatatype_a: { + switch (rdata->rdclass) { + case dns_rdataclass_hs: { + dns_rdata_hs_a_t hs_a; + result = dns_rdata_tostruct(rdata, sp = &hs_a, mctx); + break; + } + case dns_rdataclass_in: { + dns_rdata_in_a_t in_a; + result = dns_rdata_tostruct(rdata, sp = &in_a, mctx); + break; + } + default: + result = ISC_R_NOTIMPLEMENTED; + break; + } + break; + } + case dns_rdatatype_aaaa: { + dns_rdata_in_aaaa_t in_aaaa; + result = dns_rdata_tostruct(rdata, sp = &in_aaaa, mctx); + break; + } + case dns_rdatatype_afsdb: { + dns_rdata_afsdb_t afsdb; + result = dns_rdata_tostruct(rdata, sp = &afsdb, mctx); + break; + } + case dns_rdatatype_any: { + result = ISC_R_NOTIMPLEMENTED; + break; + } + case dns_rdatatype_apl: { + switch (rdata->rdclass) { + case dns_rdataclass_in: { + dns_rdata_in_apl_t in_apl; + result = dns_rdata_tostruct(rdata, sp = &in_apl, mctx); + break; + } + default: + result = ISC_R_NOTIMPLEMENTED; + break; + } + break; + } + case dns_rdatatype_cert: { + dns_rdata_cert_t cert; + result = dns_rdata_tostruct(rdata, sp = &cert, mctx); + break; + } + case dns_rdatatype_cname: { + dns_rdata_cname_t cname; + result = dns_rdata_tostruct(rdata, sp = &cname, mctx); + break; + } + case dns_rdatatype_dname: { + dns_rdata_dname_t dname; + result = dns_rdata_tostruct(rdata, sp = &dname, mctx); + break; + } + case dns_rdatatype_gpos: { + dns_rdata_gpos_t gpos; + result = dns_rdata_tostruct(rdata, sp = &gpos, mctx); + break; + } + case dns_rdatatype_hinfo: { + dns_rdata_hinfo_t hinfo; + result = dns_rdata_tostruct(rdata, sp = &hinfo, mctx); + break; + } + case dns_rdatatype_isdn: { + dns_rdata_isdn_t isdn; + result = dns_rdata_tostruct(rdata, sp = &isdn, mctx); + break; + } + case dns_rdatatype_key: { + dns_rdata_key_t key; + result = dns_rdata_tostruct(rdata, sp = &key, mctx); + break; + } + case dns_rdatatype_kx: { + dns_rdata_in_kx_t in_kx; + result = dns_rdata_tostruct(rdata, sp = &in_kx, mctx); + break; + } + case dns_rdatatype_loc: { + dns_rdata_loc_t loc; + result = dns_rdata_tostruct(rdata, sp = &loc, mctx); + break; + } + case dns_rdatatype_mb: { + dns_rdata_mb_t mb; + result = dns_rdata_tostruct(rdata, sp = &mb, mctx); + break; + } + case dns_rdatatype_md: { + dns_rdata_md_t md; + result = dns_rdata_tostruct(rdata, sp = &md, mctx); + break; + } + case dns_rdatatype_mf: { + dns_rdata_mf_t mf; + result = dns_rdata_tostruct(rdata, sp = &mf, mctx); + break; + } + case dns_rdatatype_mg: { + dns_rdata_mg_t mg; + result = dns_rdata_tostruct(rdata, sp = &mg, mctx); + break; + } + case dns_rdatatype_minfo: { + dns_rdata_minfo_t minfo; + result = dns_rdata_tostruct(rdata, sp = &minfo, mctx); + break; + } + case dns_rdatatype_mr: { + dns_rdata_mr_t mr; + result = dns_rdata_tostruct(rdata, sp = &mr, mctx); + break; + } + case dns_rdatatype_mx: { + dns_rdata_mx_t mx; + result = dns_rdata_tostruct(rdata, sp = &mx, mctx); + break; + } + case dns_rdatatype_naptr: { + dns_rdata_in_naptr_t in_naptr; + result = dns_rdata_tostruct(rdata, sp = &in_naptr, mctx); + break; + } + case dns_rdatatype_ns: { + dns_rdata_ns_t ns; + result = dns_rdata_tostruct(rdata, sp = &ns, mctx); + break; + } + case dns_rdatatype_nsap: { + dns_rdata_in_nsap_t in_nsap; + result = dns_rdata_tostruct(rdata, sp = &in_nsap, mctx); + break; + } + case dns_rdatatype_nsap_ptr: { + dns_rdata_in_nsap_ptr_t in_nsap_ptr; + result = dns_rdata_tostruct(rdata, sp = &in_nsap_ptr, mctx); + break; + } + case dns_rdatatype_null: { + dns_rdata_null_t null; + result = dns_rdata_tostruct(rdata, sp = &null, mctx); + break; + } + case dns_rdatatype_nxt: { + dns_rdata_nxt_t nxt; + result = dns_rdata_tostruct(rdata, sp = &nxt, mctx); + break; + } + case dns_rdatatype_opt: { + dns_rdata_opt_t opt; + result = dns_rdata_tostruct(rdata, sp = &opt, mctx); + break; + } + case dns_rdatatype_ptr: { + dns_rdata_ptr_t ptr; + result = dns_rdata_tostruct(rdata, sp = &ptr, mctx); + break; + } + case dns_rdatatype_px: { + dns_rdata_in_px_t in_px; + result = dns_rdata_tostruct(rdata, sp = &in_px, mctx); + break; + } + case dns_rdatatype_rp: { + dns_rdata_rp_t rp; + result = dns_rdata_tostruct(rdata, sp = &rp, mctx); + break; + } + case dns_rdatatype_rt: { + dns_rdata_rt_t rt; + result = dns_rdata_tostruct(rdata, sp = &rt, mctx); + break; + } + case dns_rdatatype_sig: { + dns_rdata_sig_t sig; + result = dns_rdata_tostruct(rdata, sp = &sig, mctx); + break; + } + case dns_rdatatype_soa: { + dns_rdata_soa_t soa; + result = dns_rdata_tostruct(rdata, sp = &soa, mctx); + break; + } + case dns_rdatatype_srv: { + dns_rdata_in_srv_t in_srv; + result = dns_rdata_tostruct(rdata, sp = &in_srv, mctx); + break; + } + case dns_rdatatype_tkey: { + dns_rdata_tkey_t tkey; + result = dns_rdata_tostruct(rdata, sp = &tkey, mctx); + break; + } + case dns_rdatatype_tsig: { + dns_rdata_any_tsig_t tsig; + result = dns_rdata_tostruct(rdata, sp = &tsig, mctx); + break; + } + case dns_rdatatype_txt: { + dns_rdata_txt_t txt; + result = dns_rdata_tostruct(rdata, sp = &txt, mctx); + break; + } + case dns_rdatatype_spf: { + dns_rdata_spf_t spf; + result = dns_rdata_tostruct(rdata, sp = &spf, mctx); + break; + } + case dns_rdatatype_unspec: { + dns_rdata_unspec_t unspec; + result = dns_rdata_tostruct(rdata, sp = &unspec, mctx); + break; + } + case dns_rdatatype_wks: { + dns_rdata_in_wks_t in_wks; + result = dns_rdata_tostruct(rdata, sp = &in_wks, mctx); + break; + } + case dns_rdatatype_x25: { + dns_rdata_x25_t x25; + result = dns_rdata_tostruct(rdata, sp = &x25, mctx); + break; + } + case dns_rdatatype_nsec: { + dns_rdata_nsec_t nsec; + result = dns_rdata_tostruct(rdata, sp = &nsec, mctx); + break; + } + case dns_rdatatype_rrsig: { + dns_rdata_rrsig_t rrsig; + result = dns_rdata_tostruct(rdata, sp = &rrsig, mctx); + break; + } + case dns_rdatatype_dnskey: { + dns_rdata_dnskey_t dnskey; + result = dns_rdata_tostruct(rdata, sp = &dnskey, mctx); + break; + } + default: + result = ISC_R_NOTIMPLEMENTED; + break; + } + if (result != ISC_R_SUCCESS) + fprintf(stdout, "viastruct: tostruct %d %d return %s\n", + rdata->type, rdata->rdclass, + dns_result_totext(result)); + else { + need_free = ISC_TRUE; + + rdc = rdata->rdclass; + rdt = rdata->type; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, sp, b); + if (result != ISC_R_SUCCESS) + fprintf(stdout, + "viastruct: fromstruct %d %d return %s\n", + rdata->type, rdata->rdclass, + dns_result_totext(result)); + else if (rdata->length != rdata2->length || + memcmp(rdata->data, rdata2->data, rdata->length) != 0) + { + isc_uint32_t i; + isc_uint32_t l; + + fprintf(stdout, "viastruct: memcmp failed\n"); + + fprintf(stdout, "%d %d\n", + rdata->length, rdata2->length); + l = rdata->length; + if (rdata2->length < l) + l = rdata2->length; + for (i = 0; i < l; i++) + fprintf(stdout, "%02x %02x\n", + rdata->data[i], rdata2->data[i]); + } + } +#if 0 + switch (rdata->type) { + case dns_rdatatype_a6: { + dns_rdata_in_a6_t in_a6; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &in_a6, b); + break; + } + case dns_rdatatype_a: { + switch (rdata->rdclass) { + case dns_rdataclass_hs: { + dns_rdata_hs_a_t hs_a; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, + &hs_a, b); + break; + } + case dns_rdataclass_in: { + dns_rdata_in_a_t in_a; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, + &in_a, b); + break; + } + default: + result = ISC_R_NOTIMPLEMENTED; + break; + } + break; + } + case dns_rdatatype_aaaa: { + dns_rdata_in_aaaa_t in_aaaa; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &in_aaaa, b); + break; + } + case dns_rdatatype_afsdb: { + dns_rdata_afsdb_t afsdb; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &afsdb, b); + break; + } + case dns_rdatatype_any: { + result = ISC_R_NOTIMPLEMENTED; + break; + } + case dns_rdatatype_apl: { + switch (rdata->rdclass) { + case dns_rdataclass_in: { + dns_rdata_in_apl_t in_apl; + result = dns_rdata_fromstruct(rdata, rdc, rdt, &in_apl, b); + break; + } + default: + result = ISC_R_NOTIMPLEMENTED; + break; + } + break; + } + case dns_rdatatype_cert: { + dns_rdata_cert_t cert; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &cert, b); + break; + } + case dns_rdatatype_cname: { + dns_rdata_cname_t cname; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &cname, b); + break; + } + case dns_rdatatype_dname: { + dns_rdata_dname_t dname; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &dname, b); + break; + } + case dns_rdatatype_gpos: { + dns_rdata_gpos_t gpos; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &gpos, b); + break; + } + case dns_rdatatype_hinfo: { + dns_rdata_hinfo_t hinfo; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &hinfo, b); + break; + } + case dns_rdatatype_isdn: { + dns_rdata_isdn_t isdn; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &isdn, b); + break; + } + case dns_rdatatype_key: { + dns_rdata_key_t key; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &key, b); + break; + } + case dns_rdatatype_kx: { + dns_rdata_in_kx_t in_kx; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &in_kx, b); + break; + } + case dns_rdatatype_loc: { + dns_rdata_loc_t loc; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &loc, b); + break; + } + case dns_rdatatype_mb: { + dns_rdata_mb_t mb; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &mb, b); + break; + } + case dns_rdatatype_md: { + dns_rdata_md_t md; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &md, b); + break; + } + case dns_rdatatype_mf: { + dns_rdata_mf_t mf; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &mf, b); + break; + } + case dns_rdatatype_mg: { + dns_rdata_mg_t mg; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &mg, b); + break; + } + case dns_rdatatype_minfo: { + dns_rdata_minfo_t minfo; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &minfo, b); + break; + } + case dns_rdatatype_mr: { + dns_rdata_mr_t mr; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &mr, b); + break; + } + case dns_rdatatype_mx: { + dns_rdata_mx_t mx; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &mx, b); + break; + } + case dns_rdatatype_naptr: { + dns_rdata_in_naptr_t in_naptr; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &in_naptr, b); + break; + } + case dns_rdatatype_ns: { + dns_rdata_ns_t ns; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &ns, b); + break; + } + case dns_rdatatype_nsap: { + dns_rdata_in_nsap_t in_nsap; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &in_nsap, b); + break; + } + case dns_rdatatype_nsap_ptr: { + dns_rdata_in_nsap_ptr_t in_nsap_ptr; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &in_nsap_ptr, + b); + break; + } + case dns_rdatatype_null: { + dns_rdata_null_t null; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &null, b); + break; + } + case dns_rdatatype_nxt: { + dns_rdata_nxt_t nxt; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &nxt, b); + break; + } + case dns_rdatatype_opt: { + dns_rdata_opt_t opt; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &opt, b); + break; + } + case dns_rdatatype_ptr: { + dns_rdata_ptr_t ptr; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &ptr, b); + break; + } + case dns_rdatatype_px: { + dns_rdata_in_px_t in_px; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &in_px, b); + break; + } + case dns_rdatatype_rp: { + dns_rdata_rp_t rp; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &rp, b); + break; + } + case dns_rdatatype_rt: { + dns_rdata_rt_t rt; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &rt, b); + break; + } + case dns_rdatatype_sig: { + dns_rdata_sig_t sig; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &sig, b); + break; + } + case dns_rdatatype_soa: { + dns_rdata_soa_t soa; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &soa, b); + break; + } + case dns_rdatatype_srv: { + dns_rdata_in_srv_t in_srv; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &in_srv, b); + break; + } + case dns_rdatatype_tkey: { + dns_rdata_tkey_t tkey; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &tkey, b); + break; + } + case dns_rdatatype_tsig: { + dns_rdata_any_tsig_t tsig; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &tsig, b); + break; + } + case dns_rdatatype_txt: { + dns_rdata_txt_t txt; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &txt, b); + break; + } + case dns_rdatatype_spf: { + dns_rdata_spf_t spf; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &spf, b); + break; + } + case dns_rdatatype_unspec: { + dns_rdata_unspec_t unspec; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &unspec, b); + break; + } + case dns_rdatatype_wks: { + dns_rdata_in_wks_t in_wks; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &in_wks, b); + break; + } + case dns_rdatatype_x25: { + dns_rdata_x25_t x25; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &x25, b); + break; + } + case dns_rdatatype_nsec: { + dns_rdata_nsec_t nsec; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &nsec, b); + break; + } + case dns_rdatatype_rrsig: { + dns_rdata_rrsig_t rrsig; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &rrsig, b); + break; + } + case dns_rdatatype_dnskey: { + dns_rdata_dnskey_t dnskey; + result = dns_rdata_fromstruct(rdata2, rdc, rdt, &dnskey, b); + break; + } + default: + result = ISC_R_NOTIMPLEMENTED; + break; + } +#endif + if (need_free) + dns_rdata_freestruct(sp); +} + +int +main(int argc, char *argv[]) { + isc_token_t token; + isc_result_t result; + int quiet = 0; + int c; + int stats = 0; + unsigned int options = 0; + dns_rdatatype_t type; + dns_rdataclass_t class; + dns_rdatatype_t lasttype = 0; + char outbuf[16*1024]; + char inbuf[16*1024]; + char wirebuf[16*1024]; + char viabuf[16*1024]; + isc_buffer_t dbuf; + isc_buffer_t tbuf; + isc_buffer_t wbuf; + dns_rdata_t rdata = DNS_RDATA_INIT; + dns_rdata_t last = DNS_RDATA_INIT; + int need_eol = 0; + int wire = 0; + dns_compress_t cctx; + dns_decompress_t dctx; + int trunc = 0; + int add = 0; + int len; + int zero = 0; + int debug = 0; + isc_region_t region; + int first = 1; + int raw = 0; + int tostruct = 0; + + while ((c = isc_commandline_parse(argc, argv, "dqswtarzS")) != -1) { + switch (c) { + case 'd': + debug = 1; + quiet = 0; + break; + case 'q': + quiet = 1; + debug = 0; + break; + case 's': + stats = 1; + break; + case 'w': + wire = 1; + break; + case 't': + trunc = 1; + break; + case 'a': + add = 1; + break; + case 'z': + zero = 1; + break; + case 'r': + raw++; + break; + case 'S': + tostruct++; + break; + } + } + + memset(&dctx, 0, sizeof(dctx)); + dctx.allowed = DNS_COMPRESS_ALL; + + RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS); + RUNTIME_CHECK(isc_lex_create(mctx, 256, &lex) == ISC_R_SUCCESS); + + /* + * Set up to lex DNS master file. + */ + + specials['('] = 1; + specials[')'] = 1; + specials['"'] = 1; + isc_lex_setspecials(lex, specials); + options = ISC_LEXOPT_EOL; + isc_lex_setcomments(lex, ISC_LEXCOMMENT_DNSMASTERFILE); + + RUNTIME_CHECK(isc_lex_openstream(lex, stdin) == ISC_R_SUCCESS); + + dns_rdata_init(&last); + while ((result = isc_lex_gettoken(lex, options | ISC_LEXOPT_NUMBER, + &token)) == ISC_R_SUCCESS) { + if (debug) fprintf(stdout, "token.type = %d\n", token.type); + if (need_eol) { + if (token.type == isc_tokentype_eol) + need_eol = 0; + continue; + } + if (token.type == isc_tokentype_eof) + break; + + /* + * Get type. + */ + if (token.type == isc_tokentype_number) { + type = token.value.as_ulong; + isc_buffer_init(&tbuf, outbuf, sizeof(outbuf)); + result = dns_rdatatype_totext(type, &tbuf); + fprintf(stdout, "type = %.*s(%d)\n", + (int)tbuf.used, (char*)tbuf.base, type); + } else if (token.type == isc_tokentype_string) { + result = dns_rdatatype_fromtext(&type, + &token.value.as_textregion); + if (result != ISC_R_SUCCESS) { + fprintf(stdout, + "dns_rdatatype_fromtext " + "returned %s(%d)\n", + dns_result_totext(result), result); + fflush(stdout); + need_eol = 1; + continue; + } + fprintf(stdout, "type = %.*s(%d)\n", + (int)token.value.as_textregion.length, + token.value.as_textregion.base, type); + } else + continue; + + result = isc_lex_gettoken(lex, options | ISC_LEXOPT_NUMBER, + &token); + if (result != ISC_R_SUCCESS) + break; + if (token.type == isc_tokentype_eol) + continue; + if (token.type == isc_tokentype_eof) + break; + if (token.type == isc_tokentype_number) { + class = token.value.as_ulong; + isc_buffer_init(&tbuf, outbuf, sizeof(outbuf)); + result = dns_rdatatype_totext(class, &tbuf); + fprintf(stdout, "class = %.*s(%d)\n", + (int)tbuf.used, (char*)tbuf.base, class); + } else if (token.type == isc_tokentype_string) { + result = dns_rdataclass_fromtext(&class, + &token.value.as_textregion); + if (result != ISC_R_SUCCESS) { + fprintf(stdout, "dns_rdataclass_fromtext " + "returned %s(%d)\n", + dns_result_totext(result), result); + fflush(stdout); + need_eol = 1; + continue; + } + fprintf(stdout, "class = %.*s(%d)\n", + (int)token.value.as_textregion.length, + token.value.as_textregion.base, class); + } else + continue; + + fflush(stdout); + dns_rdata_init(&rdata); + isc_buffer_init(&dbuf, inbuf, sizeof(inbuf)); + result = dns_rdata_fromtext(&rdata, class, type, lex, + NULL, 0, mctx, &dbuf, + NULL); + if (result != ISC_R_SUCCESS) { + fprintf(stdout, + "dns_rdata_fromtext returned %s(%d)\n", + dns_result_totext(result), result); + fflush(stdout); + continue; + } + if (raw) { + unsigned int i; + for (i = 0; i < rdata.length; /* */ ) { + fprintf(stdout, "%02x", rdata.data[i]); + if ((++i % 20) == 0) + fputs("\n", stdout); + else + if (i == rdata.length) + fputs("\n", stdout); + else + fputs(" ", stdout); + } + } + + /* + * Convert to wire and back? + */ + if (wire) { + result = dns_compress_init(&cctx, -1, mctx); + if (result != ISC_R_SUCCESS) { + fprintf(stdout, + "dns_compress_init returned %s(%d)\n", + dns_result_totext(result), result); + continue; + } + isc_buffer_init(&wbuf, wirebuf, sizeof(wirebuf)); + result = dns_rdata_towire(&rdata, &cctx, &wbuf); + dns_compress_invalidate(&cctx); + if (result != ISC_R_SUCCESS) { + fprintf(stdout, + "dns_rdata_towire returned %s(%d)\n", + dns_result_totext(result), result); + continue; + } + len = wbuf.used - wbuf.current; + if (raw > 2) { + unsigned int i; + fputs("\n", stdout); + for (i = 0; i < (unsigned int)len; /* */ ) { + fprintf(stdout, "%02x", + ((unsigned char*)wbuf.base)[i + wbuf.current]); + if ((++i % 20) == 0) + fputs("\n", stdout); + else + if (i == wbuf.used) + fputs("\n", stdout); + else + fputs(" ", stdout); + } + } + if (zero) + len = 0; + if (trunc) + len = (len * 3) / 4; + if (add) { + isc_buffer_add(&wbuf, len / 4 + 1); + len += len / 4 + 1; + } + + isc_buffer_setactive(&wbuf, len); + dns_rdata_init(&rdata); + isc_buffer_init(&dbuf, inbuf, sizeof(inbuf)); + dns_decompress_init(&dctx, -1, DNS_DECOMPRESS_ANY); + result = dns_rdata_fromwire(&rdata, class, type, &wbuf, + &dctx, 0, &dbuf); + dns_decompress_invalidate(&dctx); + if (result != ISC_R_SUCCESS) { + fprintf(stdout, + "dns_rdata_fromwire returned %s(%d)\n", + dns_result_totext(result), result); + fflush(stdout); + continue; + } + } + if (raw > 1) { + unsigned int i; + fputs("\n", stdout); + for (i = 0; i < rdata.length; /* */ ) { + fprintf(stdout, "%02x", rdata.data[i]); + if ((++i % 20) == 0) + fputs("\n", stdout); + else + if (i == rdata.length) + fputs("\n", stdout); + else + fputs(" ", stdout); + } + } + if (tostruct) { + isc_mem_t *mctx2 = NULL; + dns_rdata_t rdata2 = DNS_RDATA_INIT; + isc_buffer_t vbuf; + + RUNTIME_CHECK(isc_mem_create(0, 0, &mctx2) + == ISC_R_SUCCESS); + + isc_buffer_init(&vbuf, viabuf, sizeof(viabuf)); + dns_rdata_init(&rdata2); + viastruct(&rdata, mctx2, &rdata2, &vbuf); + if (!quiet && stats) + isc_mem_stats(mctx2, stdout); + isc_mem_destroy(&mctx2); + } + + isc_buffer_init(&tbuf, outbuf, sizeof(outbuf)); + result = dns_rdata_totext(&rdata, NULL, &tbuf); + if (result != ISC_R_SUCCESS) + fprintf(stdout, "dns_rdata_totext returned %s(%d)\n", + dns_result_totext(result), result); + else + fprintf(stdout, "\"%.*s\"\n", + (int)tbuf.used, (char*)tbuf.base); + fflush(stdout); + if (lasttype == type) { + fprintf(stdout, "dns_rdata_compare = %d\n", + dns_rdata_compare(&rdata, &last)); + + } + if (!first) { + free(last.data); + } + dns_rdata_init(&last); + region.base = malloc(region.length = rdata.length); + if (region.base) { + memcpy(region.base, rdata.data, rdata.length); + dns_rdata_fromregion(&last, class, type, ®ion); + lasttype = type; + first = 0; + } else + first = 1; + + } + if (result != ISC_R_EOF) + printf("Result: %s\n", isc_result_totext(result)); + + isc_lex_close(lex); + isc_lex_destroy(&lex); + if (!quiet && stats) + isc_mem_stats(mctx, stdout); + isc_mem_destroy(&mctx); + + return (0); +} diff --git a/bin/tests/resolv.conf.sample b/bin/tests/resolv.conf.sample new file mode 100644 index 0000000..e9e349d --- /dev/null +++ b/bin/tests/resolv.conf.sample @@ -0,0 +1,38 @@ +# 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. + +# $Id: resolv.conf.sample,v 1.11 2007/06/19 23:46:59 tbox Exp $ + +domain jab.fr +nameserver 194.150.1.2 ; ignore that + +; ignore this comment + +nameserver 194.150.1.1 # ignore this comment too + +a-bad-entry-that-will be ignored + +option debug ; foo +option ndots:10 + +sortlist 10.0.0.0/255.244.33.0 11.0.0.0 + +search aaa bbb ccc ddd ; blank stuff +# search eee fff ggg hhh + +# +# Bar +### bar bar bar +# diff --git a/bin/tests/rwlock_test.c b/bin/tests/rwlock_test.c new file mode 100644 index 0000000..9aa05b5 --- /dev/null +++ b/bin/tests/rwlock_test.c @@ -0,0 +1,142 @@ +/* + * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1998-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. + */ + +/* $Id: rwlock_test.c,v 1.26 2007/06/19 23:46:59 tbox Exp $ */ + +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +#include <isc/print.h> +#include <isc/thread.h> +#include <isc/rwlock.h> +#include <isc/string.h> +#include <isc/util.h> + +#ifdef ISC_PLATFORM_USETHREADS + +isc_rwlock_t lock; + +static void * +run1(void *arg) { + char *message = arg; + + RUNTIME_CHECK(isc_rwlock_lock(&lock, isc_rwlocktype_read) == + ISC_R_SUCCESS); + printf("%s got READ lock\n", message); + sleep(1); + printf("%s giving up READ lock\n", message); + RUNTIME_CHECK(isc_rwlock_unlock(&lock, isc_rwlocktype_read) == + ISC_R_SUCCESS); + RUNTIME_CHECK(isc_rwlock_lock(&lock, isc_rwlocktype_read) == + ISC_R_SUCCESS); + printf("%s got READ lock\n", message); + sleep(1); + printf("%s giving up READ lock\n", message); + RUNTIME_CHECK(isc_rwlock_unlock(&lock, isc_rwlocktype_read) == + ISC_R_SUCCESS); + RUNTIME_CHECK(isc_rwlock_lock(&lock, isc_rwlocktype_write) == + ISC_R_SUCCESS); + printf("%s got WRITE lock\n", message); + sleep(1); + printf("%s giving up WRITE lock\n", message); + RUNTIME_CHECK(isc_rwlock_unlock(&lock, isc_rwlocktype_write) == + ISC_R_SUCCESS); + return (NULL); +} + +static void * +run2(void *arg) { + char *message = arg; + + RUNTIME_CHECK(isc_rwlock_lock(&lock, isc_rwlocktype_write) == + ISC_R_SUCCESS); + printf("%s got WRITE lock\n", message); + sleep(1); + printf("%s giving up WRITE lock\n", message); + RUNTIME_CHECK(isc_rwlock_unlock(&lock, isc_rwlocktype_write) == + ISC_R_SUCCESS); + RUNTIME_CHECK(isc_rwlock_lock(&lock, isc_rwlocktype_write) == + ISC_R_SUCCESS); + printf("%s got WRITE lock\n", message); + sleep(1); + printf("%s giving up WRITE lock\n", message); + RUNTIME_CHECK(isc_rwlock_unlock(&lock, isc_rwlocktype_write) == + ISC_R_SUCCESS); + RUNTIME_CHECK(isc_rwlock_lock(&lock, isc_rwlocktype_read) == + ISC_R_SUCCESS); + printf("%s got READ lock\n", message); + sleep(1); + printf("%s giving up READ lock\n", message); + RUNTIME_CHECK(isc_rwlock_unlock(&lock, isc_rwlocktype_read) == + ISC_R_SUCCESS); + return (NULL); +} + +int +main(int argc, char *argv[]) { + unsigned int nworkers; + unsigned int i; + isc_thread_t workers[100]; + char name[100]; + void *dupname; + + if (argc > 1) + nworkers = atoi(argv[1]); + else + nworkers = 2; + if (nworkers > 100) + nworkers = 100; + printf("%d workers\n", nworkers); + + RUNTIME_CHECK(isc_rwlock_init(&lock, 5, 10) == ISC_R_SUCCESS); + + for (i = 0; i < nworkers; i++) { + sprintf(name, "%02u", i); + dupname = strdup(name); + RUNTIME_CHECK(dupname != NULL); + if (i != 0 && i % 3 == 0) + RUNTIME_CHECK(isc_thread_create(run1, dupname, + &workers[i]) == + ISC_R_SUCCESS); + else + RUNTIME_CHECK(isc_thread_create(run2, dupname, + &workers[i]) == + ISC_R_SUCCESS); + } + + for (i = 0; i < nworkers; i++) + (void)isc_thread_join(workers[i], NULL); + + isc_rwlock_destroy(&lock); + + return (0); +} + +#else + +int +main(int argc, char *argv[]) { + UNUSED(argc); + UNUSED(argv); + fprintf(stderr, "This test requires threads.\n"); + return(1); +} + +#endif diff --git a/bin/tests/serial_test.c b/bin/tests/serial_test.c new file mode 100644 index 0000000..3cc8ade --- /dev/null +++ b/bin/tests/serial_test.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1999-2001, 2003 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. + */ + +/* $Id: serial_test.c,v 1.15 2007/06/19 23:46:59 tbox Exp $ */ + +#include <config.h> + +#include <stdio.h> + +#include <isc/serial.h> +#include <isc/stdlib.h> + +int +main() { + isc_uint32_t a, b; + char buf[1024]; + char *s, *e; + + while (fgets(buf, sizeof(buf), stdin) != NULL) { + buf[sizeof(buf) - 1] = '\0'; + s = buf; + a = strtoul(s, &e, 0); + if (s == e) + continue; + s = e; + b = strtoul(s, &e, 0); + if (s == e) + continue; + fprintf(stdout, "%u %u gt:%d lt:%d ge:%d le:%d eq:%d ne:%d\n", + a, b, + isc_serial_gt(a,b), isc_serial_lt(a,b), + isc_serial_ge(a,b), isc_serial_le(a,b), + isc_serial_eq(a,b), isc_serial_ne(a,b)); + } + return (0); +} diff --git a/bin/tests/shutdown_test.c b/bin/tests/shutdown_test.c new file mode 100644 index 0000000..4b53cd0 --- /dev/null +++ b/bin/tests/shutdown_test.c @@ -0,0 +1,232 @@ +/* + * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1998-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. + */ + +/* $Id: shutdown_test.c,v 1.23 2007/06/19 23:46:59 tbox Exp $ */ + +#include <config.h> + +#include <stdlib.h> +#include <string.h> + +#include <isc/app.h> +#include <isc/mem.h> +#include <isc/print.h> +#include <isc/task.h> +#include <isc/time.h> +#include <isc/timer.h> +#include <isc/util.h> + +typedef struct { + isc_mem_t * mctx; + isc_task_t * task; + isc_timer_t * timer; + unsigned int ticks; + char name[16]; + isc_boolean_t exiting; + isc_task_t * peer; +} t_info; + +#define MAX_TASKS 3 +#define T2_SHUTDOWNOK (ISC_EVENTCLASS(1024) + 0) +#define T2_SHUTDOWNDONE (ISC_EVENTCLASS(1024) + 1) +#define FOO_EVENT (ISC_EVENTCLASS(1024) + 2) + +static t_info tasks[MAX_TASKS]; +static unsigned int task_count; +static isc_taskmgr_t * task_manager; +static isc_timermgr_t * timer_manager; + +static void +t1_shutdown(isc_task_t *task, isc_event_t *event) { + t_info *info = event->ev_arg; + + printf("task %s (%p) t1_shutdown\n", info->name, task); + isc_task_detach(&info->task); + isc_event_free(&event); +} + +static void +t2_shutdown(isc_task_t *task, isc_event_t *event) { + t_info *info = event->ev_arg; + + printf("task %s (%p) t2_shutdown\n", info->name, task); + info->exiting = ISC_TRUE; + isc_event_free(&event); +} + +static void +shutdown_action(isc_task_t *task, isc_event_t *event) { + t_info *info = event->ev_arg; + isc_event_t *nevent; + + INSIST(event->ev_type == ISC_TASKEVENT_SHUTDOWN); + + printf("task %s (%p) shutdown\n", info->name, task); + if (strcmp(info->name, "0") == 0) { + isc_timer_detach(&info->timer); + nevent = isc_event_allocate(info->mctx, info, T2_SHUTDOWNOK, + t2_shutdown, &tasks[1], + sizeof(*event)); + RUNTIME_CHECK(nevent != NULL); + info->exiting = ISC_TRUE; + isc_task_sendanddetach(&info->peer, &nevent); + } + isc_event_free(&event); +} + +static void +foo_event(isc_task_t *task, isc_event_t *event) { + printf("task(%p) foo\n", task); + isc_event_free(&event); +} + +static void +tick(isc_task_t *task, isc_event_t *event) { + t_info *info = event->ev_arg; + isc_event_t *nevent; + + INSIST(event->ev_type == ISC_TIMEREVENT_TICK); + + printf("task %s (%p) tick\n", info->name, task); + + info->ticks++; + if (strcmp(info->name, "1") == 0) { + if (info->ticks == 10) { + RUNTIME_CHECK(isc_app_shutdown() == ISC_R_SUCCESS); + } else if (info->ticks >= 15 && info->exiting) { + isc_timer_detach(&info->timer); + isc_task_detach(&info->task); + nevent = isc_event_allocate(info->mctx, info, + T2_SHUTDOWNDONE, + t1_shutdown, &tasks[0], + sizeof(*event)); + RUNTIME_CHECK(nevent != NULL); + isc_task_send(info->peer, &nevent); + isc_task_detach(&info->peer); + } + } else if (strcmp(info->name, "foo") == 0) { + isc_timer_detach(&info->timer); + nevent = isc_event_allocate(info->mctx, info, + FOO_EVENT, + foo_event, task, + sizeof(*event)); + RUNTIME_CHECK(nevent != NULL); + isc_task_sendanddetach(&task, &nevent); + } + + isc_event_free(&event); +} + +static t_info * +new_task(isc_mem_t *mctx, const char *name) { + t_info *ti; + isc_time_t expires; + isc_interval_t interval; + + RUNTIME_CHECK(task_count < MAX_TASKS); + ti = &tasks[task_count]; + ti->mctx = mctx; + ti->task = NULL; + ti->timer = NULL; + ti->ticks = 0; + if (name != NULL) { + INSIST(strlen(name) < sizeof(ti->name)); + strcpy(ti->name, name); + } else + sprintf(ti->name, "%d", task_count); + RUNTIME_CHECK(isc_task_create(task_manager, 0, &ti->task) == + ISC_R_SUCCESS); + RUNTIME_CHECK(isc_task_onshutdown(ti->task, shutdown_action, ti) == + ISC_R_SUCCESS); + + isc_time_settoepoch(&expires); + isc_interval_set(&interval, 1, 0); + RUNTIME_CHECK(isc_timer_create(timer_manager, isc_timertype_ticker, + &expires, &interval, ti->task, + tick, ti, &ti->timer) == + ISC_R_SUCCESS); + + task_count++; + + return (ti); +} + +int +main(int argc, char *argv[]) { + unsigned int workers; + t_info *t1, *t2, *t3; + isc_task_t *task; + isc_mem_t *mctx, *mctx2; + + RUNTIME_CHECK(isc_app_start() == ISC_R_SUCCESS); + + if (argc > 1) + workers = atoi(argv[1]); + else + workers = 2; + printf("%d workers\n", workers); + + mctx = NULL; + RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS); + mctx2 = NULL; + RUNTIME_CHECK(isc_mem_create(0, 0, &mctx2) == ISC_R_SUCCESS); + RUNTIME_CHECK(isc_taskmgr_create(mctx, workers, 0, &task_manager) == + ISC_R_SUCCESS); + RUNTIME_CHECK(isc_timermgr_create(mctx, &timer_manager) == + ISC_R_SUCCESS); + + t1 = new_task(mctx, NULL); + t2 = new_task(mctx2, NULL); + isc_task_attach(t2->task, &t1->peer); + isc_task_attach(t1->task, &t2->peer); + + /* + * Test run-triggered shutdown. + */ + t3 = new_task(mctx2, "foo"); + + /* + * Test implicit shutdown. + */ + task = NULL; + RUNTIME_CHECK(isc_task_create(task_manager, 0, &task) == + ISC_R_SUCCESS); + isc_task_detach(&task); + + /* + * Test anti-zombie code. + */ + RUNTIME_CHECK(isc_task_create(task_manager, 0, &task) == + ISC_R_SUCCESS); + isc_task_detach(&task); + + RUNTIME_CHECK(isc_app_run() == ISC_R_SUCCESS); + + isc_taskmgr_destroy(&task_manager); + isc_timermgr_destroy(&timer_manager); + + printf("Statistics for mctx:\n"); + isc_mem_stats(mctx, stdout); + isc_mem_destroy(&mctx); + printf("Statistics for mctx2:\n"); + isc_mem_stats(mctx2, stdout); + isc_mem_destroy(&mctx2); + + isc_app_finish(); + + return (0); +} diff --git a/bin/tests/sig0_test.c b/bin/tests/sig0_test.c new file mode 100644 index 0000000..f36bbee --- /dev/null +++ b/bin/tests/sig0_test.c @@ -0,0 +1,305 @@ +/* + * Copyright (C) 2004, 2005, 2007, 2008 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. + */ + +/* $Id: sig0_test.c,v 1.17 2008/07/22 23:47:04 tbox Exp $ */ + +#include <config.h> + +#include <stddef.h> +#include <stdlib.h> +#include <string.h> + +#include <isc/app.h> +#include <isc/boolean.h> +#include <isc/assertions.h> +#include <isc/commandline.h> +#include <isc/entropy.h> +#include <isc/error.h> +#include <isc/log.h> +#include <isc/mem.h> +#include <isc/mutex.h> +#include <isc/net.h> +#include <isc/task.h> +#include <isc/timer.h> +#include <isc/socket.h> +#include <isc/util.h> + +#include <dns/dnssec.h> +#include <dns/events.h> +#include <dns/fixedname.h> +#include <dns/keyvalues.h> +#include <dns/masterdump.h> +#include <dns/message.h> +#include <dns/name.h> +#include <dns/rdataset.h> +#include <dns/resolver.h> +#include <dns/result.h> +#include <dns/types.h> + +#include <dst/result.h> +#include <dst/dst.h> + +#define CHECK(str, x) { \ + if ((x) != ISC_R_SUCCESS) { \ + printf("%s: %s\n", (str), isc_result_totext(x)); \ + exit(-1); \ + } \ +} + +isc_mutex_t lock; +dst_key_t *key; +isc_mem_t *mctx; +unsigned char qdata[1024], rdata[1024]; +isc_buffer_t qbuffer, rbuffer; +isc_taskmgr_t *taskmgr; +isc_entropy_t *ent = NULL; +isc_task_t *task1; +isc_log_t *lctx = NULL; +isc_logconfig_t *logconfig = NULL; +isc_socket_t *s; +isc_sockaddr_t address; +char output[10 * 1024]; +isc_buffer_t outbuf; +static const dns_master_style_t *style = &dns_master_style_debug; + +static void +senddone(isc_task_t *task, isc_event_t *event) { + isc_socketevent_t *sevent = (isc_socketevent_t *)event; + + REQUIRE(sevent != NULL); + REQUIRE(sevent->ev_type == ISC_SOCKEVENT_SENDDONE); + REQUIRE(task == task1); + + printf("senddone\n"); + + isc_event_free(&event); +} + +static void +recvdone(isc_task_t *task, isc_event_t *event) { + isc_socketevent_t *sevent = (isc_socketevent_t *)event; + isc_buffer_t source; + isc_result_t result; + dns_message_t *response; + + REQUIRE(sevent != NULL); + REQUIRE(sevent->ev_type == ISC_SOCKEVENT_RECVDONE); + REQUIRE(task == task1); + + printf("recvdone\n"); + if (sevent->result != ISC_R_SUCCESS) { + printf("failed\n"); + exit(-1); + } + + isc_buffer_init(&source, sevent->region.base, sevent->region.length); + isc_buffer_add(&source, sevent->n); + + response = NULL; + result = dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &response); + CHECK("dns_message_create", result); + result = dns_message_parse(response, &source, 0); + CHECK("dns_message_parse", result); + + isc_buffer_init(&outbuf, output, sizeof(output)); + result = dns_message_totext(response, style, 0, &outbuf); + CHECK("dns_message_totext", result); + printf("%.*s\n", (int)isc_buffer_usedlength(&outbuf), + (char *)isc_buffer_base(&outbuf)); + + dns_message_destroy(&response); + isc_event_free(&event); + + isc_app_shutdown(); +} + +static void +buildquery(void) { + isc_result_t result; + dns_rdataset_t *question = NULL; + dns_name_t *qname = NULL; + isc_region_t r, inr; + dns_message_t *query; + char nametext[] = "host.example"; + isc_buffer_t namesrc, namedst; + unsigned char namedata[256]; + isc_sockaddr_t sa; + dns_compress_t cctx; + + query = NULL; + result = dns_message_create(mctx, DNS_MESSAGE_INTENTRENDER, &query); + CHECK("dns_message_create", result); + result = dns_message_setsig0key(query, key); + CHECK("dns_message_setsig0key", result); + + result = dns_message_gettemprdataset(query, &question); + CHECK("dns_message_gettemprdataset", result); + dns_rdataset_init(question); + dns_rdataset_makequestion(question, dns_rdataclass_in, + dns_rdatatype_a); + result = dns_message_gettempname(query, &qname); + CHECK("dns_message_gettempname", result); + isc_buffer_init(&namesrc, nametext, strlen(nametext)); + isc_buffer_add(&namesrc, strlen(nametext)); + isc_buffer_init(&namedst, namedata, sizeof(namedata)); + dns_name_init(qname, NULL); + result = dns_name_fromtext(qname, &namesrc, dns_rootname, ISC_FALSE, + &namedst); + CHECK("dns_name_fromtext", result); + ISC_LIST_APPEND(qname->list, question, link); + dns_message_addname(query, qname, DNS_SECTION_QUESTION); + + isc_buffer_init(&qbuffer, qdata, sizeof(qdata)); + + result = dns_compress_init(&cctx, -1, mctx); + CHECK("dns_compress_init", result); + result = dns_message_renderbegin(query, &cctx, &qbuffer); + CHECK("dns_message_renderbegin", result); + result = dns_message_rendersection(query, DNS_SECTION_QUESTION, 0); + CHECK("dns_message_rendersection(question)", result); + result = dns_message_rendersection(query, DNS_SECTION_ANSWER, 0); + CHECK("dns_message_rendersection(answer)", result); + result = dns_message_rendersection(query, DNS_SECTION_AUTHORITY, 0); + CHECK("dns_message_rendersection(auth)", result); + result = dns_message_rendersection(query, DNS_SECTION_ADDITIONAL, 0); + CHECK("dns_message_rendersection(add)", result); + result = dns_message_renderend(query); + CHECK("dns_message_renderend", result); + dns_compress_invalidate(&cctx); + + isc_buffer_init(&outbuf, output, sizeof(output)); + result = dns_message_totext(query, style, 0, &outbuf); + CHECK("dns_message_totext", result); + printf("%.*s\n", (int)isc_buffer_usedlength(&outbuf), + (char *)isc_buffer_base(&outbuf)); + + isc_buffer_usedregion(&qbuffer, &r); + isc_sockaddr_any(&sa); + result = isc_socket_bind(s, &sa, 0); + CHECK("isc_socket_bind", result); + result = isc_socket_sendto(s, &r, task1, senddone, NULL, &address, + NULL); + CHECK("isc_socket_sendto", result); + + inr.base = rdata; + inr.length = sizeof(rdata); + result = isc_socket_recv(s, &inr, 1, task1, recvdone, NULL); + CHECK("isc_socket_recv", result); + dns_message_destroy(&query); +} + +int +main(int argc, char *argv[]) { + isc_boolean_t verbose = ISC_FALSE; + isc_socketmgr_t *socketmgr; + isc_timermgr_t *timermgr; + struct in_addr inaddr; + dns_fixedname_t fname; + dns_name_t *name; + isc_buffer_t b; + int ch; + isc_result_t result; + in_port_t port = 53; + + RUNTIME_CHECK(isc_app_start() == ISC_R_SUCCESS); + + RUNTIME_CHECK(isc_mutex_init(&lock) == ISC_R_SUCCESS); + + mctx = NULL; + RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS); + + while ((ch = isc_commandline_parse(argc, argv, "vp:")) != -1) { + switch (ch) { + case 'v': + verbose = ISC_TRUE; + break; + case 'p': + port = (unsigned int)atoi(isc_commandline_argument); + break; + } + } + + RUNTIME_CHECK(isc_entropy_create(mctx, &ent) == ISC_R_SUCCESS); + RUNTIME_CHECK(dst_lib_init(mctx, ent, 0) == ISC_R_SUCCESS); + + dns_result_register(); + dst_result_register(); + + taskmgr = NULL; + RUNTIME_CHECK(isc_taskmgr_create(mctx, 2, 0, &taskmgr) == + ISC_R_SUCCESS); + task1 = NULL; + RUNTIME_CHECK(isc_task_create(taskmgr, 0, &task1) == ISC_R_SUCCESS); + + timermgr = NULL; + RUNTIME_CHECK(isc_timermgr_create(mctx, &timermgr) == ISC_R_SUCCESS); + socketmgr = NULL; + RUNTIME_CHECK(isc_socketmgr_create(mctx, &socketmgr) == ISC_R_SUCCESS); + + RUNTIME_CHECK(isc_log_create(mctx, &lctx, &logconfig) == ISC_R_SUCCESS); + + s = NULL; + RUNTIME_CHECK(isc_socket_create(socketmgr, PF_INET, + isc_sockettype_udp, &s) == + ISC_R_SUCCESS); + + inaddr.s_addr = htonl(INADDR_LOOPBACK); + isc_sockaddr_fromin(&address, &inaddr, port); + + dns_fixedname_init(&fname); + name = dns_fixedname_name(&fname); + isc_buffer_init(&b, "child.example.", strlen("child.example.")); + isc_buffer_add(&b, strlen("child.example.")); + result = dns_name_fromtext(name, &b, dns_rootname, ISC_FALSE, NULL); + CHECK("dns_name_fromtext", result); + + key = NULL; + result = dst_key_fromfile(name, 4017, DNS_KEYALG_DSA, + DST_TYPE_PUBLIC | DST_TYPE_PRIVATE, + NULL, mctx, &key); + CHECK("dst_key_fromfile", result); + + buildquery(); + + (void)isc_app_run(); + + isc_task_shutdown(task1); + isc_task_detach(&task1); + isc_taskmgr_destroy(&taskmgr); + + isc_socket_detach(&s); + isc_socketmgr_destroy(&socketmgr); + isc_timermgr_destroy(&timermgr); + + dst_key_free(&key); + + dst_lib_destroy(); + + isc_entropy_detach(&ent); + + isc_log_destroy(&lctx); + + if (verbose) + isc_mem_stats(mctx, stdout); + isc_mem_destroy(&mctx); + + DESTROYLOCK(&lock); + + isc_app_finish(); + + return (0); +} diff --git a/bin/tests/sock_test.c b/bin/tests/sock_test.c new file mode 100644 index 0000000..c9612f7 --- /dev/null +++ b/bin/tests/sock_test.c @@ -0,0 +1,382 @@ +/* + * Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1998-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. + */ + +/* $Id: sock_test.c,v 1.55 2008/07/23 23:27:54 marka Exp $ */ + +#include <config.h> + +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include <isc/mem.h> +#include <isc/print.h> +#include <isc/task.h> +#include <isc/socket.h> +#include <isc/timer.h> +#include <isc/util.h> + +isc_mem_t *mctx; +isc_taskmgr_t *manager; + +static void +my_shutdown(isc_task_t *task, isc_event_t *event) { + char *name = event->ev_arg; + + printf("shutdown %s (%p)\n", name, task); + fflush(stdout); + isc_event_free(&event); +} + +static void +my_send(isc_task_t *task, isc_event_t *event) { + isc_socket_t *sock; + isc_socketevent_t *dev; + + sock = event->ev_sender; + dev = (isc_socketevent_t *)event; + + printf("my_send: %s task %p\n\t(sock %p, base %p, length %d, n %d, " + "result %d)\n", + (char *)(event->ev_arg), task, sock, + dev->region.base, dev->region.length, + dev->n, dev->result); + + if (dev->result != ISC_R_SUCCESS) { + isc_socket_detach(&sock); + isc_task_shutdown(task); + } + + isc_mem_put(mctx, dev->region.base, dev->region.length); + + isc_event_free(&event); +} + +static void +my_recv(isc_task_t *task, isc_event_t *event) { + isc_socket_t *sock; + isc_socketevent_t *dev; + isc_region_t region; + char buf[1024]; + char host[256]; + + sock = event->ev_sender; + dev = (isc_socketevent_t *)event; + + printf("Socket %s (sock %p, base %p, length %d, n %d, result %d)\n", + (char *)(event->ev_arg), sock, + dev->region.base, dev->region.length, + dev->n, dev->result); + if (dev->address.type.sa.sa_family == AF_INET6) { + inet_ntop(AF_INET6, &dev->address.type.sin6.sin6_addr, + host, sizeof(host)); + printf("\tFrom: %s port %d\n", host, + ntohs(dev->address.type.sin6.sin6_port)); + } else { + inet_ntop(AF_INET, &dev->address.type.sin.sin_addr, + host, sizeof(host)); + printf("\tFrom: %s port %d\n", host, + ntohs(dev->address.type.sin.sin_port)); + } + + if (dev->result != ISC_R_SUCCESS) { + isc_socket_detach(&sock); + + isc_mem_put(mctx, dev->region.base, + dev->region.length); + isc_event_free(&event); + + isc_task_shutdown(task); + return; + } + + /* + * Echo the data back. + */ + if (strcmp(event->ev_arg, "so2") != 0) { + region = dev->region; + sprintf(buf, "\r\nReceived: %.*s\r\n\r\n", + (int)dev->n, (char *)region.base); + region.base = isc_mem_get(mctx, strlen(buf) + 1); + region.length = strlen(buf) + 1; + strcpy((char *)region.base, buf); /* strcpy is safe */ + isc_socket_send(sock, ®ion, task, my_send, event->ev_arg); + } else { + region = dev->region; + printf("\r\nReceived: %.*s\r\n\r\n", + (int)dev->n, (char *)region.base); + } + + isc_socket_recv(sock, &dev->region, 1, task, my_recv, event->ev_arg); + + isc_event_free(&event); +} + +static void +my_http_get(isc_task_t *task, isc_event_t *event) { + isc_socket_t *sock; + isc_socketevent_t *dev; + + sock = event->ev_sender; + dev = (isc_socketevent_t *)event; + + printf("my_http_get: %s task %p\n\t(sock %p, base %p, length %d, " + "n %d, result %d)\n", + (char *)(event->ev_arg), task, sock, + dev->region.base, dev->region.length, + dev->n, dev->result); + + if (dev->result != ISC_R_SUCCESS) { + isc_socket_detach(&sock); + isc_task_shutdown(task); + isc_event_free(&event); + return; + } + + isc_socket_recv(sock, &dev->region, 1, task, my_recv, event->ev_arg); + + isc_event_free(&event); +} + +static void +my_connect(isc_task_t *task, isc_event_t *event) { + isc_socket_t *sock; + isc_socket_connev_t *dev; + isc_region_t region; + char buf[1024]; + + sock = event->ev_sender; + dev = (isc_socket_connev_t *)event; + + printf("%s: Connection result: %d\n", (char *)(event->ev_arg), + dev->result); + + if (dev->result != ISC_R_SUCCESS) { + isc_socket_detach(&sock); + isc_event_free(&event); + isc_task_shutdown(task); + return; + } + + /* + * Send a GET string, and set up to receive (and just display) + * the result. + */ + strcpy(buf, "GET / HTTP/1.1\r\nHost: www.flame.org\r\n" + "Connection: Close\r\n\r\n"); + region.base = isc_mem_get(mctx, strlen(buf) + 1); + region.length = strlen(buf) + 1; + strcpy((char *)region.base, buf); /* This strcpy is safe. */ + + isc_socket_send(sock, ®ion, task, my_http_get, event->ev_arg); + + isc_event_free(&event); +} + +static void +my_listen(isc_task_t *task, isc_event_t *event) { + char *name = event->ev_arg; + isc_socket_newconnev_t *dev; + isc_region_t region; + isc_socket_t *oldsock; + isc_task_t *newtask; + + dev = (isc_socket_newconnev_t *)event; + + printf("newcon %s (task %p, oldsock %p, newsock %p, result %d)\n", + name, task, event->ev_sender, dev->newsocket, dev->result); + fflush(stdout); + + if (dev->result == ISC_R_SUCCESS) { + /* + * Queue another listen on this socket. + */ + isc_socket_accept(event->ev_sender, task, my_listen, + event->ev_arg); + + region.base = isc_mem_get(mctx, 20); + region.length = 20; + + /* + * Create a new task for this socket, and queue up a + * recv on it. + */ + newtask = NULL; + RUNTIME_CHECK(isc_task_create(manager, 0, &newtask) + == ISC_R_SUCCESS); + isc_socket_recv(dev->newsocket, ®ion, 1, + newtask, my_recv, event->ev_arg); + isc_task_detach(&newtask); + } else { + printf("detaching from socket %p\n", event->ev_sender); + oldsock = event->ev_sender; + + isc_socket_detach(&oldsock); + + isc_event_free(&event); + isc_task_shutdown(task); + return; + } + + isc_event_free(&event); +} + +static void +timeout(isc_task_t *task, isc_event_t *event) { + isc_socket_t *sock = event->ev_arg; + + printf("Timeout, canceling IO on socket %p (task %p)\n", sock, task); + + isc_socket_cancel(sock, NULL, ISC_SOCKCANCEL_ALL); + isc_timer_detach((isc_timer_t **)&event->ev_sender); + isc_event_free(&event); +} + +int +main(int argc, char *argv[]) { + isc_task_t *t1, *t2; + isc_timermgr_t *timgr; + isc_time_t expires; + isc_interval_t interval; + isc_timer_t *ti1; + unsigned int workers; + isc_socketmgr_t *socketmgr; + isc_socket_t *so1, *so2; + isc_sockaddr_t sockaddr; + struct in_addr ina; + struct in6_addr in6a; + isc_result_t result; + int pf; + + if (argc > 1) + workers = atoi(argv[1]); + else + workers = 2; + printf("%d workers\n", workers); + + if (isc_net_probeipv6() == ISC_R_SUCCESS) + pf = PF_INET6; + else + pf = PF_INET; + + /* + * EVERYTHING needs a memory context. + */ + mctx = NULL; + RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS); + + /* + * The task manager is independent (other than memory context) + */ + manager = NULL; + RUNTIME_CHECK(isc_taskmgr_create(mctx, workers, 0, &manager) == + ISC_R_SUCCESS); + + /* + * Timer manager depends only on the memory context as well. + */ + timgr = NULL; + RUNTIME_CHECK(isc_timermgr_create(mctx, &timgr) == ISC_R_SUCCESS); + + t1 = NULL; + RUNTIME_CHECK(isc_task_create(manager, 0, &t1) == ISC_R_SUCCESS); + t2 = NULL; + RUNTIME_CHECK(isc_task_create(manager, 0, &t2) == ISC_R_SUCCESS); + RUNTIME_CHECK(isc_task_onshutdown(t1, my_shutdown, "1") == + ISC_R_SUCCESS); + RUNTIME_CHECK(isc_task_onshutdown(t2, my_shutdown, "2") == + ISC_R_SUCCESS); + + printf("task 1 = %p\n", t1); + printf("task 2 = %p\n", t2); + + socketmgr = NULL; + RUNTIME_CHECK(isc_socketmgr_create(mctx, &socketmgr) == ISC_R_SUCCESS); + + /* + * Open up a listener socket. + */ + so1 = NULL; + + if (pf == PF_INET6) { + in6a = in6addr_any; + isc_sockaddr_fromin6(&sockaddr, &in6a, 5544); + } else { + ina.s_addr = INADDR_ANY; + isc_sockaddr_fromin(&sockaddr, &ina, 5544); + } + RUNTIME_CHECK(isc_socket_create(socketmgr, pf, isc_sockettype_tcp, + &so1) == ISC_R_SUCCESS); + result = isc_socket_bind(so1, &sockaddr, ISC_SOCKET_REUSEADDRESS); + RUNTIME_CHECK(result == ISC_R_SUCCESS); + RUNTIME_CHECK(isc_socket_listen(so1, 0) == ISC_R_SUCCESS); + + /* + * Queue up the first accept event. + */ + RUNTIME_CHECK(isc_socket_accept(so1, t1, my_listen, "so1") + == ISC_R_SUCCESS); + isc_time_settoepoch(&expires); + isc_interval_set(&interval, 10, 0); + ti1 = NULL; + RUNTIME_CHECK(isc_timer_create(timgr, isc_timertype_once, &expires, + &interval, t1, timeout, so1, &ti1) == + ISC_R_SUCCESS); + + /* + * Open up a socket that will connect to www.flame.org, port 80. + * Why not. :) + */ + so2 = NULL; + ina.s_addr = inet_addr("204.152.184.97"); + if (0 && pf == PF_INET6) + isc_sockaddr_v6fromin(&sockaddr, &ina, 80); + else + isc_sockaddr_fromin(&sockaddr, &ina, 80); + RUNTIME_CHECK(isc_socket_create(socketmgr, isc_sockaddr_pf(&sockaddr), + isc_sockettype_tcp, + &so2) == ISC_R_SUCCESS); + + RUNTIME_CHECK(isc_socket_connect(so2, &sockaddr, t2, + my_connect, "so2") == ISC_R_SUCCESS); + + /* + * Detaching these is safe, since the socket will attach to the + * task for any outstanding requests. + */ + isc_task_detach(&t1); + isc_task_detach(&t2); + + /* + * Wait a short while. + */ + sleep(10); + + fprintf(stderr, "Destroying socket manager\n"); + isc_socketmgr_destroy(&socketmgr); + + fprintf(stderr, "Destroying timer manager\n"); + isc_timermgr_destroy(&timgr); + + fprintf(stderr, "Destroying task manager\n"); + isc_taskmgr_destroy(&manager); + + isc_mem_stats(mctx, stdout); + isc_mem_destroy(&mctx); + + return (0); +} diff --git a/bin/tests/sockaddr/Makefile.in b/bin/tests/sockaddr/Makefile.in new file mode 100644 index 0000000..f0dbbfb --- /dev/null +++ b/bin/tests/sockaddr/Makefile.in @@ -0,0 +1,55 @@ +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 1999-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. + +# $Id: Makefile.in,v 1.21 2007/06/19 23:47:00 tbox Exp $ + +srcdir = @srcdir@ +VPATH = @srcdir@ +top_srcdir = @top_srcdir@ + +@BIND9_MAKE_INCLUDES@ + +CINCLUDES = ${TEST_INCLUDES} ${ISC_INCLUDES} + +CDEFINES = +CWARNINGS = + +ISCLIBS = ../../../lib/isc/libisc.@A@ +TAPIDEPLIBS = ../../../lib/tests/libt_api.@A@ + +ISCDEPLIBS = ../../../lib/isc/libisc.@A@ +TAPILIBS = ../../../lib/tests/libt_api.@A@ + +DEPLIBS = ${TAPIDEPLIBS} ${ISCDEPLIBS} + +LIBS = ${TAPILIBS} ${ISCLIBS} @LIBS@ + +TARGETS = t_sockaddr@EXEEXT@ + +SRCS = t_sockaddr.c + +@BIND9_MAKE_RULES@ + +t_sockaddr@EXEEXT@: t_sockaddr.@O@ ${DEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ t_sockaddr.@O@ ${LIBS} + +test: t_sockaddr@EXEEXT@ + -@./t_sockaddr@EXEEXT@ -b @srcdir@ -a + +testhelp: + @./t_sockaddr@EXEEXT@ -h + +clean distclean:: + rm -f ${TARGETS} diff --git a/bin/tests/sockaddr/t_sockaddr.c b/bin/tests/sockaddr/t_sockaddr.c new file mode 100644 index 0000000..46003f1 --- /dev/null +++ b/bin/tests/sockaddr/t_sockaddr.c @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1999-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. + */ + +/* $Id: t_sockaddr.c,v 1.14 2007/06/19 23:47:00 tbox Exp $ */ + +#include <config.h> + +#include <isc/netaddr.h> +#include <isc/result.h> +#include <isc/sockaddr.h> + +#include <tests/t_api.h> + +static int +test_isc_sockaddr_eqaddrprefix(void) { + struct in_addr ina_a; + struct in_addr ina_b; + struct in_addr ina_c; + isc_sockaddr_t isa_a; + isc_sockaddr_t isa_b; + isc_sockaddr_t isa_c; + + if (inet_pton(AF_INET, "194.100.32.87", &ina_a) < 0) + return T_FAIL; + if (inet_pton(AF_INET, "194.100.32.80", &ina_b) < 0) + return T_FAIL; + if (inet_pton(AF_INET, "194.101.32.87", &ina_c) < 0) + return T_FAIL; + isc_sockaddr_fromin(&isa_a, &ina_a, 0); + isc_sockaddr_fromin(&isa_b, &ina_b, 42); + isc_sockaddr_fromin(&isa_c, &ina_c, 0); + + if (isc_sockaddr_eqaddrprefix(&isa_a, &isa_b, 0) != ISC_TRUE) + return T_FAIL; + if (isc_sockaddr_eqaddrprefix(&isa_a, &isa_b, 29) != ISC_TRUE) + return T_FAIL; + if (isc_sockaddr_eqaddrprefix(&isa_a, &isa_b, 30) != ISC_FALSE) + return T_FAIL; + if (isc_sockaddr_eqaddrprefix(&isa_a, &isa_b, 32) != ISC_FALSE) + return T_FAIL; + if (isc_sockaddr_eqaddrprefix(&isa_a, &isa_c, 8) != ISC_TRUE) + return T_FAIL; + if (isc_sockaddr_eqaddrprefix(&isa_a, &isa_c, 16) != ISC_FALSE) + return T_FAIL; + + return T_PASS; +} + +static void +t1(void) { + int result; + t_assert("isc_sockaddr_eqaddrprefix", 1, T_REQUIRED, + "isc_sockaddr_eqaddrprefix() returns ISC_TRUE when " + "prefixes of a and b are equal, and ISC_FALSE when " + "they are not equal"); + result = test_isc_sockaddr_eqaddrprefix(); + t_result(result); +} + +static int +test_isc_netaddr_masktoprefixlen(void) { + struct in_addr na_a; + struct in_addr na_b; + struct in_addr na_c; + struct in_addr na_d; + isc_netaddr_t ina_a; + isc_netaddr_t ina_b; + isc_netaddr_t ina_c; + isc_netaddr_t ina_d; + unsigned int plen; + + if (inet_pton(AF_INET, "0.0.0.0", &na_a) < 0) + return T_FAIL; + if (inet_pton(AF_INET, "255.255.255.254", &na_b) < 0) + return T_FAIL; + if (inet_pton(AF_INET, "255.255.255.255", &na_c) < 0) + return T_FAIL; + if (inet_pton(AF_INET, "255.255.255.0", &na_d) < 0) + return T_FAIL; + isc_netaddr_fromin(&ina_a, &na_a); + isc_netaddr_fromin(&ina_b, &na_b); + isc_netaddr_fromin(&ina_c, &na_c); + isc_netaddr_fromin(&ina_d, &na_d); + + if (isc_netaddr_masktoprefixlen(&ina_a, &plen) != ISC_R_SUCCESS) + return T_FAIL; + if (plen != 0) + return T_FAIL; + + if (isc_netaddr_masktoprefixlen(&ina_b, &plen) != ISC_R_SUCCESS) + return T_FAIL; + if (plen != 31) + return T_FAIL; + + if (isc_netaddr_masktoprefixlen(&ina_c, &plen) != ISC_R_SUCCESS) + return T_FAIL; + if (plen != 32) + return T_FAIL; + + if (isc_netaddr_masktoprefixlen(&ina_d, &plen) != ISC_R_SUCCESS) + return T_FAIL; + if (plen != 24) + return T_FAIL; + + return T_PASS; +} + +static void +t2(void) { + int result; + t_assert("isc_netaddr_masktoprefixlen", 1, T_REQUIRED, + "isc_netaddr_masktoprefixlen() calculates " + "correct prefix lengths "); + result = test_isc_netaddr_masktoprefixlen(); + t_result(result); +} + +testspec_t T_testlist[] = { + { t1, "isc_sockaddr_eqaddrprefix" }, + { t2, "isc_netaddr_masktoprefixlen" }, + { NULL, NULL } +}; + diff --git a/bin/tests/sym_test.c b/bin/tests/sym_test.c new file mode 100644 index 0000000..0daa498 --- /dev/null +++ b/bin/tests/sym_test.c @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1998-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. + */ + +/* $Id: sym_test.c,v 1.28 2007/06/19 23:46:59 tbox Exp $ */ + +#include <config.h> + +#include <string.h> + +#include <isc/commandline.h> +#include <isc/mem.h> +#include <isc/symtab.h> +#include <isc/util.h> + +isc_mem_t *mctx; +isc_symtab_t *st; + +static void +undefine_action(char *key, unsigned int type, isc_symvalue_t value, void *arg) +{ + UNUSED(arg); + + INSIST(type == 1); + isc_mem_free(mctx, key); + isc_mem_free(mctx, value.as_pointer); +} + +int +main(int argc, char *argv[]) { + char s[1000], *cp, *key; + size_t len; + isc_result_t result; + isc_symvalue_t value; + int trace = 0; + int c; + isc_symexists_t exists_policy = isc_symexists_reject; + isc_boolean_t case_sensitive = ISC_FALSE; + + while ((c = isc_commandline_parse(argc, argv, "tarc")) != -1) { + switch (c) { + case 't': + trace = 1; + break; + case 'a': + exists_policy = isc_symexists_add; + break; + case 'r': + exists_policy = isc_symexists_replace; + break; + case 'c': + case_sensitive = ISC_TRUE; + break; + } + } + + RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS); + RUNTIME_CHECK(isc_symtab_create(mctx, 691, undefine_action, NULL, + case_sensitive, &st) == ISC_R_SUCCESS); + + while (fgets(s, sizeof(s), stdin) != NULL) { + len = strlen(s); + if (len > 0U && s[len - 1] == '\n') { + s[len - 1] = '\0'; + len--; + } + + cp = s; + + if (cp[0] == '!') { + cp++; + result = isc_symtab_undefine(st, cp, 1); + if (trace || result != ISC_R_SUCCESS) + printf("undefine('%s'): %s\n", cp, + isc_result_totext(result)); + } else { + key = cp; + while (*cp != '\0' && *cp != ' ' && *cp != '\t') + cp++; + if (*cp == '\0') { + result = isc_symtab_lookup(st, key, 0, &value); + if (trace || result != ISC_R_SUCCESS) { + printf("lookup('%s'): %s", key, + isc_result_totext(result)); + if (result == ISC_R_SUCCESS) { + cp = value.as_pointer; + printf(", value == '%s'", cp); + } + printf("\n"); + } + } else { + *cp++ = '\0'; + key = isc_mem_strdup(mctx, key); + value.as_pointer = isc_mem_strdup(mctx, cp); + result = isc_symtab_define(st, key, 1, value, + exists_policy); + if (trace || result != ISC_R_SUCCESS) { + printf("define('%s', '%s'): %s\n", + key, cp, + isc_result_totext(result)); + if (result != ISC_R_SUCCESS) + undefine_action(key, 1, + value, NULL); + } + } + } + } + + isc_symtab_destroy(&st); + isc_mem_stats(mctx, stdout); + isc_mem_destroy(&mctx); + + return (0); +} diff --git a/bin/tests/system/Makefile.in b/bin/tests/system/Makefile.in new file mode 100644 index 0000000..ef8fc58 --- /dev/null +++ b/bin/tests/system/Makefile.in @@ -0,0 +1,45 @@ +# Copyright (C) 2004, 2007, 2008 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. + +# $Id: Makefile.in,v 1.31 2008/09/25 04:02:38 tbox Exp $ + +srcdir = @srcdir@ +VPATH = @srcdir@ +top_srcdir = @top_srcdir@ + +@BIND9_MAKE_INCLUDES@ + +SUBDIRS = lwresd tkey +TARGETS = + +@BIND9_MAKE_RULES@ + +# Running the scripts below is bypassed when a separate +# build directory is used. + +check: test + +test: subdirs + if test -f ./runall.sh; then sh ./runall.sh; fi + +testclean clean distclean:: + if test -f ./cleanall.sh; then sh ./cleanall.sh; fi + +distclean:: + rm -f conf.sh + +installdirs: + +install:: diff --git a/bin/tests/system/README b/bin/tests/system/README new file mode 100644 index 0000000..be79650 --- /dev/null +++ b/bin/tests/system/README @@ -0,0 +1,54 @@ +Copyright (C) 2004 Internet Systems Consortium, Inc. ("ISC") +Copyright (C) 2000, 2001 Internet Software Consortium. +See COPYRIGHT in the source root or http://isc.org/copyright.html for terms. + +This is a simple test environment for running bind9 system tests +involving multiple name servers. + +There are multiple test suites, each in a separate subdirectory and +involving a different DNS setup. They are: + + dnssec/ DNSSEC tests + forward/ Forwarding tests + glue/ Glue handling tests + limits/ Tests of handling of large data (close to server limits) + lwresd/ Tests of the lightweight resolver library and daemon + notify/ More NOTIFY tests + nsupdate/ Dynamic update and IXFR tests + resolver/ Regression tests for resolver bugs that have been fixed + (not a complete resolver test suite) + stub/ Tests of stub zone functionality + unknown/ Unknown type and class tests + upforwd/ Update forwarding tests + views/ Tests of the "views" statement + xfer/ Zone transfer tests + xferquota/ Zone transfer quota tests + +Typically each test suite sets up 2-5 name servers and then performs +one or more tests against them. Within the test suite subdirectory, +each name server has a separate subdirectory containing its +configuration data. By convention, these subdirectories are named +"ns1", "ns2", etc. + +The tests are completely self-contained and do not require access to +the real DNS. Generally, one of the test servers (ns1) 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. ns1 runs on +10.53.0.1, ns2 on 10.53.0.2, etc. Before running any tests, you must +set up these addresses by running "ifconfig.sh up" as root. + +The servers use port 5300 instead of the usual port 53, so they can be +run without root privileges once the interfaces have been set up. + +The tests can be run individually like this: + + sh run.sh xfer + sh run.sh notify + etc. + +To run all the tests, just type "make test". + + +$Id: README,v 1.12 2004/03/05 04:59:12 marka Exp $ diff --git a/bin/tests/system/acl/clean.sh b/bin/tests/system/acl/clean.sh new file mode 100644 index 0000000..80ce516 --- /dev/null +++ b/bin/tests/system/acl/clean.sh @@ -0,0 +1,25 @@ +#!/bin/sh +# +# Copyright (C) 2008 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: clean.sh,v 1.3 2008/01/10 23:47:01 tbox Exp $ + +# +# Clean up after zone transfer tests. +# + +rm -f dig.out +rm -f ns2/example.db ns2/tsigzone.db ns2/example.db.jnl ns2/named.conf +rm -f */named.memstats diff --git a/bin/tests/system/acl/ns2/named1.conf b/bin/tests/system/acl/ns2/named1.conf new file mode 100644 index 0000000..b70d1dd --- /dev/null +++ b/bin/tests/system/acl/ns2/named1.conf @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2008 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: named1.conf,v 1.2 2008/01/10 01:10:01 marka Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.2; + notify-source 10.53.0.2; + transfer-source 10.53.0.2; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.2; }; + listen-on-v6 { none; }; + recursion no; + notify yes; + ixfr-from-differences yes; + check-integrity no; +}; + +include "../../common/controls.conf"; + +key one { + algorithm hmac-md5; + secret "1234abcd8765"; +}; + +key two { + algorithm hmac-md5; + secret "1234abcd8765"; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +zone "example" { + type master; + file "example.db"; +}; + +zone "tsigzone" { + type master; + file "tsigzone.db"; + allow-transfer { !key one; any; }; +}; diff --git a/bin/tests/system/acl/ns2/named2.conf b/bin/tests/system/acl/ns2/named2.conf new file mode 100644 index 0000000..bcd7e0d --- /dev/null +++ b/bin/tests/system/acl/ns2/named2.conf @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2008 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: named2.conf,v 1.3 2008/01/21 20:38:54 each Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.2; + notify-source 10.53.0.2; + transfer-source 10.53.0.2; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.2; }; + listen-on-v6 { none; }; + recursion no; + notify yes; + ixfr-from-differences yes; + check-integrity no; +}; + +include "../../common/controls.conf"; + +key one { + algorithm hmac-md5; + secret "1234abcd8765"; +}; + +key two { + algorithm hmac-md5; + secret "1234abcd8765"; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +zone "example" { + type master; + file "example.db"; +}; + +zone "tsigzone" { + type master; + file "tsigzone.db"; + /* + * 0a00::/8 and 10/8 are the same bits, but different address + * families. This should *not* match IPv4 queries from 10.*. + */ + allow-transfer { 0a00::/8; !10/8; key one; }; +}; diff --git a/bin/tests/system/acl/ns2/named3.conf b/bin/tests/system/acl/ns2/named3.conf new file mode 100644 index 0000000..ea2cbcb --- /dev/null +++ b/bin/tests/system/acl/ns2/named3.conf @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2008 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: named3.conf,v 1.2 2008/01/10 01:10:01 marka Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.2; + notify-source 10.53.0.2; + transfer-source 10.53.0.2; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.2; }; + listen-on-v6 { none; }; + recursion no; + notify yes; + ixfr-from-differences yes; + check-integrity no; +}; + +include "../../common/controls.conf"; + +key one { + algorithm hmac-md5; + secret "1234abcd8765"; +}; + +key two { + algorithm hmac-md5; + secret "1234abcd8765"; +}; + +key three { + algorithm hmac-md5; + secret "1234abcd8765"; +}; + +acl reject { + !key one; !key two; any; +}; + +acl accept { + 10.53.0.1; 10.53.0.2; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +zone "example" { + type master; + file "example.db"; +}; + +zone "tsigzone" { + type master; + file "tsigzone.db"; + allow-transfer { !reject; accept; }; +}; diff --git a/bin/tests/system/acl/ns2/named4.conf b/bin/tests/system/acl/ns2/named4.conf new file mode 100644 index 0000000..99edf7e --- /dev/null +++ b/bin/tests/system/acl/ns2/named4.conf @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2008 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: named4.conf,v 1.2 2008/01/10 01:10:01 marka Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.2; + notify-source 10.53.0.2; + transfer-source 10.53.0.2; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.2; }; + listen-on-v6 { none; }; + recursion no; + notify yes; + ixfr-from-differences yes; + check-integrity no; +}; + +include "../../common/controls.conf"; + +key one { + algorithm hmac-md5; + secret "1234abcd8765"; +}; + +key two { + algorithm hmac-md5; + secret "1234abcd8765"; +}; + +acl rejectkeys { + !key one; !key two; any; +}; + +acl rejectaddrs { + !10.53.0.1; !10.53.0.2; any; +}; + +acl check1 { !key one; 10.53.0.1; }; + +acl check2 { !key two; 10.53.0.2; }; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +zone "example" { + type master; + file "example.db"; +}; + +zone "tsigzone" { + type master; + file "tsigzone.db"; + allow-transfer { !rejectkeys; !rejectaddrs; !check1; !check2; any; }; +}; diff --git a/bin/tests/system/acl/setup.sh b/bin/tests/system/acl/setup.sh new file mode 100644 index 0000000..9cc07f1 --- /dev/null +++ b/bin/tests/system/acl/setup.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# +# Copyright (C) 2008 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: setup.sh,v 1.3 2008/01/10 23:47:01 tbox Exp $ + +sh ../genzone.sh 2 3 >ns2/example.db +sh ../genzone.sh 2 3 >ns2/tsigzone.db +cp -f ns2/named1.conf ns2/named.conf diff --git a/bin/tests/system/acl/tests.sh b/bin/tests/system/acl/tests.sh new file mode 100644 index 0000000..8d2d564 --- /dev/null +++ b/bin/tests/system/acl/tests.sh @@ -0,0 +1,144 @@ +#!/bin/sh +# +# Copyright (C) 2008 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: tests.sh,v 1.4 2008/07/19 00:02:14 each Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +DIGOPTS="+tcp +noadd +nosea +nostat +noquest +nocomm +nocmd" + +status=0 +t=0 + +echo "I:testing basic ACL processing" +# key "one" should fail +t=`expr $t + 1` +$DIG $DIGOPTS tsigzone. \ + @10.53.0.2 -b 10.53.0.1 axfr -y one:1234abcd8765 -p 5300 > dig.out +grep "^;" dig.out > /dev/null 2>&1 || { echo "I:test $t failed" ; status=1; } + +# any other key should be fine +t=`expr $t + 1` +$DIG $DIGOPTS tsigzone. \ + @10.53.0.2 -b 10.53.0.1 axfr -y two:1234abcd8765 -p 5300 > dig.out +grep "^;" dig.out > /dev/null 2>&1 && { echo "I:test $t failed" ; status=1; } + +cp -f ns2/named2.conf ns2/named.conf +$RNDC -c ../common/rndc.conf -s 10.53.0.2 -p 9953 reload 2>&1 | sed 's/^/I:ns2 /' +sleep 5 + +# prefix 10/8 should fail +t=`expr $t + 1` +$DIG $DIGOPTS tsigzone. \ + @10.53.0.2 -b 10.53.0.1 axfr -y one:1234abcd8765 -p 5300 > dig.out +grep "^;" dig.out > /dev/null 2>&1 || { echo "I:test $t failed" ; status=1; } + +# any other address should work, as long as it sends key "one" +t=`expr $t + 1` +$DIG $DIGOPTS tsigzone. \ + @10.53.0.2 -b 127.0.0.1 axfr -y two:1234abcd8765 -p 5300 > dig.out +grep "^;" dig.out > /dev/null 2>&1 || { echo "I:test $t failed" ; status=1; } + +t=`expr $t + 1` +$DIG $DIGOPTS tsigzone. \ + @10.53.0.2 -b 127.0.0.1 axfr -y one:1234abcd8765 -p 5300 > dig.out +grep "^;" dig.out > /dev/null 2>&1 && { echo "I:test $t failed" ; status=1; } + +echo "I:testing nested ACL processing" +# all combinations of 10.53.0.{1|2} with key {one|two}, should succeed +cp -f ns2/named3.conf ns2/named.conf +$RNDC -c ../common/rndc.conf -s 10.53.0.2 -p 9953 reload 2>&1 | sed 's/^/I:ns2 /' +sleep 5 + +# should succeed +t=`expr $t + 1` +$DIG $DIGOPTS tsigzone. \ + @10.53.0.2 -b 10.53.0.2 axfr -y two:1234abcd8765 -p 5300 > dig.out +grep "^;" dig.out > /dev/null 2>&1 && { echo "I:test $t failed" ; status=1; } + +# should succeed +t=`expr $t + 1` +$DIG $DIGOPTS tsigzone. \ + @10.53.0.2 -b 10.53.0.2 axfr -y one:1234abcd8765 -p 5300 > dig.out +grep "^;" dig.out > /dev/null 2>&1 && { echo "I:test $t failed" ; status=1; } + +# should succeed +t=`expr $t + 1` +$DIG $DIGOPTS tsigzone. \ + @10.53.0.2 -b 10.53.0.1 axfr -y two:1234abcd8765 -p 5300 > dig.out +grep "^;" dig.out > /dev/null 2>&1 && { echo "I:test $t failed" ; status=1; } + +# should succeed +t=`expr $t + 1` +$DIG $DIGOPTS tsigzone. \ + @10.53.0.2 -b 10.53.0.1 axfr -y two:1234abcd8765 -p 5300 > dig.out +grep "^;" dig.out > /dev/null 2>&1 && { echo "I:test $t failed" ; status=1; } + +# but only one or the other should fail +t=`expr $t + 1` +$DIG $DIGOPTS tsigzone. \ + @10.53.0.2 -b 127.0.0.1 axfr -y one:1234abcd8765 -p 5300 > dig.out +grep "^;" dig.out > /dev/null 2>&1 || { echo "I:test $t failed" ; status=1; } + +t=`expr $t + 1` +$DIG $DIGOPTS tsigzone. \ + @10.53.0.2 -b 10.53.0.2 axfr -p 5300 > dig.out +grep "^;" dig.out > /dev/null 2>&1 || { echo "I:test $tt failed" ; status=1; } + +# and other values? right out +t=`expr $t + 1` +$DIG $DIGOPTS tsigzone. \ + @10.53.0.2 -b 127.0.0.1 axfr -y three:1234abcd8765 -p 5300 > dig.out +grep "^;" dig.out > /dev/null 2>&1 || { echo "I:test $t failed" ; status=1; } + +# now we only allow 10.53.0.1 *and* key one, or 10.53.0.2 *and* key two +cp -f ns2/named4.conf ns2/named.conf +$RNDC -c ../common/rndc.conf -s 10.53.0.2 -p 9953 reload 2>&1 | sed 's/^/I:ns2 /' +sleep 5 + +# should succeed +t=`expr $t + 1` +$DIG $DIGOPTS tsigzone. \ + @10.53.0.2 -b 10.53.0.2 axfr -y two:1234abcd8765 -p 5300 > dig.out +grep "^;" dig.out > /dev/null 2>&1 && { echo "I:test $t failed" ; status=1; } + +# should succeed +t=`expr $t + 1` +$DIG $DIGOPTS tsigzone. \ + @10.53.0.2 -b 10.53.0.1 axfr -y one:1234abcd8765 -p 5300 > dig.out +grep "^;" dig.out > /dev/null 2>&1 && { echo "I:test $t failed" ; status=1; } + +# should fail +t=`expr $t + 1` +$DIG $DIGOPTS tsigzone. \ + @10.53.0.2 -b 10.53.0.2 axfr -y one:1234abcd8765 -p 5300 > dig.out +grep "^;" dig.out > /dev/null 2>&1 || { echo "I:test $t failed" ; status=1; } + +# should fail +t=`expr $t + 1` +$DIG $DIGOPTS tsigzone. \ + @10.53.0.2 -b 10.53.0.1 axfr -y two:1234abcd8765 -p 5300 > dig.out +grep "^;" dig.out > /dev/null 2>&1 || { echo "I:test $t failed" ; status=1; } + +# should fail +t=`expr $t + 1` +$DIG $DIGOPTS tsigzone. \ + @10.53.0.2 -b 10.53.0.3 axfr -y one:1234abcd8765 -p 5300 > dig.out +grep "^;" dig.out > /dev/null 2>&1 || { echo "I:test $t failed" ; status=1; } + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/cacheclean/clean.sh b/bin/tests/system/cacheclean/clean.sh new file mode 100644 index 0000000..10388ba --- /dev/null +++ b/bin/tests/system/cacheclean/clean.sh @@ -0,0 +1,25 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 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. + +# $Id: clean.sh,v 1.6 2007/09/26 03:22:43 marka Exp $ + +# +# Clean up after cache cleaner tests. +# + +rm -f dig.out.ns2 +rm -f */named.memstats diff --git a/bin/tests/system/cacheclean/dig.batch b/bin/tests/system/cacheclean/dig.batch new file mode 100644 index 0000000..d185204 --- /dev/null +++ b/bin/tests/system/cacheclean/dig.batch @@ -0,0 +1,924 @@ +YA.AKAMAI.com. IN A +UPR1.UPR.CLU.EDU. IN A +integra.s-integra.co.JP. IN A +avalon.iks-jena.de. IN A +NS1.GLOBALDNS.com. IN A +NS.RDU.BELLSOUTH.net. IN A +ns.space.net. IN A +SUN.MHS-RELAY.AC.UK. IN A +AYAX.UNIANDES.EDU.CO. IN A +DNS.NIC.CD. IN A +NS.DNS.PT. IN A +NS1.INTERNETSHARE.com. IN A +MASTER.DNS.BE. IN A +CATAMOUNT.middlebury.EDU. IN A +FM03.FM. IN A +NAAMAK.NCST.ERNET.IN. IN A +gateway2.BFG.com. IN A +NS3.NS.ESAT.net. IN A +DNS1.INTUIT.com. IN A +DEN-NS2.FWIDCSERVICES.net. IN A +SOL.UNDPBI.TELEPAC.net. IN A +NS2.tridog.com. IN A +DNS2.KW. IN A +NS2.MAIL.com. IN A +NS.FIRSTCOM.CL. IN A +DNS4.QUICKEN.com. IN A +bofh.cid.net. IN A +NS1.KRNIC.net. IN A +NS2.SR.net. IN A +NS1.TELSTRA.net. IN A +ns.cafax.SE. IN A +NS1.DNS.NET.NZ. IN A +NS.CONCOURSE.com. IN A +35.32/27.110.16.12.IN-ADDR.ARPA. IN PTR +CCC.champcable.com. IN A +NS.RIPE.net. IN A +NS.NIC.NU. IN A +KIM.CAMNET.CM. IN A +DOGON.SOTELMA.net. IN A +DNS02.FLAME.org. IN A +NS.MIA.BELLSOUTH.net. IN A +mail.ok.RU. IN A +NS.NIC.MX. IN A +NS2.BERKELEY.EDU. IN A +SHIKHAR.MOS.COM.NP. IN A +noc.rrz.Uni-Koeln.de. IN A +NS.KORNET.net. IN A +keith.gazpacho.org. IN A +NS2.appliedtheory.com. IN A +NS.CERNET.net. IN A +smtp.ELISTX.com. IN A +NS-AIT.THNIC.net. IN A +from.PL. IN A +mailhub.icann.org. IN A +SEC1.DNS.UK.PSI.net. IN A +isrv3-i.isc.org. IN A +PHLOEM.UOREGON.EDU. IN A +CTINA.AR. IN A +DNS2.IAM.NET.MA. IN A +10.126.39.137.IN-ADDR.ARPA. IN PTR +DNS.PRINCETON.EDU. IN A +NS.BELLSOUTH.net. IN A +NS1.SNS-FELB.DEBIS.com. IN A +localhost. IN A +hm6.vt.highmeadow.com. IN A +SYRUP.hill.com. IN A +NS99.WAIKATO.AC.NZ. IN A +NS4.CW.net. IN A +NS2.SLOWMOE.com. IN A +ns2.hypa.net. IN A +ns.sxtyptt.NET.CN. IN A +NS2.MERCHANTWARE.com. IN A +uunymdgds1.DOUBLECLICK.net. IN A +e34.co.us.IBM.com. IN A +kista.dns.swip.net. IN A +ZEBRA.UEM.MZ. IN A +NET2.GENDYN.com. IN A +NS0.UTK.EDU. IN A +NS.RELCOM.EU.net. IN A +DNS0.AXION.BT.CO.UK. IN A +mail.vhv.com. IN A +DNS4.UK.MSFT.net. IN A +NS2.ADNS.net. IN A +NS1.SEATTLE.US.NETDNS.com. IN A +NS2.UNIVIE.AC.at. IN A +NS15B.BOCA15-VERIO.com. IN A +www.BAYAREA.com. IN CNAME +ns4.onemain.com. IN A +NS2.EDIGITALS.com. IN A +MICHAEL.VATICAN.VA. IN A +AUSTIN.GH.com. IN A +sld-ns2.CNNIC.NET.CN. IN A +NS2.CDC.GOV. IN A +NS.WATSON.IBM.com. IN A +NS.NIC.SH. IN A +NS2.BAHNHOF.net. IN A +NS-AUTH2.cmates.com. IN A +ISDMNL.WR.USGS.GOV. IN A +NS2.COBEX.net. IN A +MERLE.CIRA.CA. IN A +NS.UVG.EDU.GT. IN A +NS1.CWVA.DOUBLECLICK.net. IN A +eliot.diebold.com. IN A +NS.ALMADEN.IBM.com. IN A +NS2.INTERNETSQUARE.com. IN A +mail.QUEST-NET.com. IN A +Z1.NS.LHR1.GLOBIX.net. IN A +DNS1.AVANTEL.NET.MX. IN A +vh80040.vh8.INFI.net. IN A +NS.LEB.net. IN A +NS.DCC.UCHILE.CL. IN A +CLOUSO.RISQ.QC.CA. IN A +muenster.westfalen.de. IN A +us.a1.YIMG.com. IN CNAME +NS.DEMOS.SU. IN A +south.NAVPOINT.com. IN A +netconsult.netconx.de. IN A +DNS2.btinternet.com. IN A +NS2.CINE.net. IN A +castor.cmc.ec.gc.CA. IN A +EX2-DNS0.AVENUEA.com. IN A +firewall3.glaxowellcome.com. IN A +MACU.MA.MT.NP.ELS-GMS.att.net. IN A +NS.PA. IN A +TGSERV.TELE.GL. IN A +KYNSE02.MESSAGESECURE.com. IN A +GORGON.XTRA.CO.NZ. IN A +DNS.NIC.IT. IN A +pop.VERMONTEL.net. IN CNAME +NS2.REGISTRY.HM. IN A +NAMESERVER1.CONCENTRIC.net. IN A +47.131.127.204.IN-ADDR.ARPA. IN PTR +mailhost.tfm.com. IN A +NS1.MRC.GM. IN A +NS.WIDE.AD.JP. IN A +NS.BTA.NET.CN. IN A +NS2.ISPC.org. IN A +BOW.RAIN.FR. IN A +srs.srs.state.vt.us. IN A +NS4.WEB2010.com. IN A +NS.TELECOM.NET.ET. IN A +NS1.DNS.NET.KH. IN A +GATEN.JARING.MY. IN A +shell.nominum.com. IN A +CHEOPS.ANU.EDU.AU. IN A +VANGOGH.CS.BERKELEY.EDU. IN A +NS2.NOC.NULLUS.net. IN A +NIC.LTH.SE. IN A +ns.farm.net. IN A +NS.USEC.SUN.com. IN A +NS2.YOUR-DOMAIN.com. IN A +DNS-EAST.PREP.net. IN A +ns.hcr.net. IN A +NS-RCH.nortelnetworks.com. IN A +crl.DEC.com. IN A +NS.PIXAR.ES. IN A +MEX1-M-213.UNINET.NET.MX. IN A +NS.ITU.CH. IN A +matrix.uwm.EDU.PL. IN A +gateway1.gmcr.com. IN A +NS2.DNS.BR. IN A +foxharp.boston.MA.us. IN MX +Quest-7.symquest.com. IN A +NS2.VERIO.net. IN A +NAME.IAD.GBLX.net. IN A +NS2.EMIRATES.NET.AE. IN A +supai.oit.UMASS.EDU. IN A +QUERN.EPILOGUE.com. IN A +NS3.TOPICA.com. IN A +NS1.JERKY.net. IN A +JTB.BRUNET.BN. IN A +AUTH100.NS.UU.net. IN A +BOW.INTNET.DJ. IN A +OSI2.GUA.net. IN A +AZMODAN.ULA.VE. IN A +THUMPER.RPSLMC.EDU. IN A +ICHU.RCP.NET.PE. IN A +NS.NIC.AC. IN A +DNS.NETFLIGHT.com. IN A +ns2.UTORONTO.CA. IN A +mail.giffordmed.org. IN A +RATA.VUW.AC.NZ. IN A +NS-2.ADMONITOR.net. IN A +NCC.MOC.KW. IN A +NS.EUNET.ES. IN A +NS3.best.com. IN A +zip.MAIL-LIST.com. IN MX +JATZ.AARNET.EDU.AU. IN A +DNS2.MAN.LODZ.PL. IN A +NS.VERITAS.com. IN A +218.241.103.199.IN-ADDR.ARPA. IN PTR +BOW.SNPT.KM. IN A +Z1.NS.SJC1.GLOBIX.net. IN A +DNS.NIC.TT. IN A +MAKISIG.IPHIL.net. IN A +NS.DK.net. IN A +NS.NI. IN A +CIUP1.NCC.UP.PT. IN A +ns2.verisign-grs.com. IN A +NS1.UMASS.EDU. IN A +NS.NEWACCOUNT.net. IN A +UDNS2.ULTRADNS.net. IN A +NS2.LATNET.LV. IN A +info-server.surrey.AC.UK. IN A +NS2.SQUONK.net. IN A +NS2.DSO.net. IN A +www.energyenhancement.org. IN A +DNS1.BD. IN A +nl.COMPUWARE.com. IN MX +NS.DHIRAAGU.MV. IN A +TRANTOR.UMD.EDU. IN A +NS.ALCANET.NO. IN A +Z6.MSFT.AKADNS.com. IN A +NS4.ync.net. IN A +CMTU.MT.NS.ELS-GMS.att.net. IN A +vh40099.vh4.INFI.net. IN A +ns2.secondary.nl. IN A +abyssinian.sleepycat.com. IN A +APHEX.MENTOR.BE. IN A +webmail.fiberia.com. IN A +localhost.moonmothers.com. IN A +NS2.DNS.LU. IN A +NS.VISUALCOM.ES. IN A +TONIC.TO. IN A +NS1.CRSNIC.net. IN A +trurl.ispid.com.PL. IN A +datingagentur.de. IN A +NS2.NSIREGISTRY.net. IN A +ICE.VIA-NET-WORKS.IE. IN A +sgi1.map.com. IN A +NS0.HS0.U-NET.net. IN A +candle.pha.pa.us. IN A +NS1.PACIFIC.NET.SG. IN A +NS.CENIAI.NET.CU. IN A +NS2.UUCP.NE.JP. IN A +za.akamaitech.net. IN A +NS.UCR.AC.CR. IN A +DNS-02.NS.cs.com. IN A +dns2.primary.net. IN A +PAPPSRV.PAPP.UNDP.org. IN A +NS1.REGME.com. IN A +DNS.CS.KULEUVEN.AC.BE. IN A +NS1.VERMONTLAW.net. IN A +mail.garmontusa.com. IN A +NS2.SAIPAN.com. IN A +NS.ARICATRA.com. IN A +ns2.reedmedia.net. IN A +NS.NETLAB.SK. IN A +RELAY.GW.tislabs.com. IN A +b.ns.tmcs.net. IN A +NS1.IBL.BM. IN A +ok.RU. IN A +NS.RICC.ALMA-ATA.SU. IN A +KITKA.MARNET.MK. IN A +dasher.dartmouth.EDU. IN A +NS0.PLANET-THREE.com. IN A +KNOCK.SER.BBNPLANET.net. IN A +tornado.webtech.elk.PL. IN A +AUTH2.NS.IDT.net. IN A +host3.VTLEGALAID.org. IN A +NS.EUNET.SK. IN A +TULKU.NIC.AR. IN A +RELAY.CDNNET.CA. IN A +DNS2.TPSA.PL. IN A +enterprise.wirbel.com. IN A +ECNET.EC. IN A +ENGINE1.UNA.net. IN A +WYCU.WY.BR.NP.ELS-GMS.att.net. IN A +ARWENA.NASK.WAW.PL. IN A +PAC2.NIPR.MIL. IN A +DAISY.EE.UND.AC.ZA. IN A +odin.ietf.org. IN A +dns.kaben-net.de. IN A +NS2.ALTAVISTA.com. IN A +CASTOR.TELEGLOBE.net. IN A +CIR.RED.SV. IN A +PIJIN.COM.SB. IN A +NS4.CTCCOM.net. IN A +NS1.SOL.NO. IN A +DNS2.TK.MSFT.net. IN A +NS.BSDI.com. IN A +NS.SVIANED.nl. IN A +NS.NOVELL.com. IN A +NS.LUCKY.net. IN A +SJC-NS2.SJC.LYCOS.com. IN A +NS1.OP.net. IN A +worldnet.att.net. IN A +APIES.FRD.AC.ZA. IN A +mail.skiinsurance.com. IN A +NS.BELNET.BE. IN A +KOMO.INET.GA. IN A +EARTH.THEPLANET.net. IN A +VASCO.USMA.AC.PA. IN A +GODFEVER.DCCSERVER.com. IN A +BOS-NS2.BOS.LYCOS.com. IN A +NS2.GOTO.com. IN A +NS1.overstock.com. IN A +NS1-PUBLIC.ZMA.COMPAQ.com. IN A +ns.ilovedomain.com. IN A +ns1.anycast.net. IN A +PASCAL.UPRR.PR. IN A +NS3-AUTH.SPRINTLINK.net. IN A +NS1-Y.DNS.PIPEX.net. IN A +prue.eim.surrey.AC.UK. IN A +TROLL-GW.GATECH.EDU. IN A +NS.SIERRATEL.SL. IN A +ns2.PSHIFT.com. IN A +NS.ERS.IBM.com. IN A +ASLAN.OPEN-RSC.org. IN A +NS2.DOMAIN-REGISTRY.nl. IN A +uranus.lan-ks.de. IN A +mail.unlisys.net. IN A +NS.AUSTRIA.EU.net. IN A +AUTH01.CONNECT.IE. IN A +SUN.SCSI.GOV.BY. IN A +NS1.SIGMAHOSTING.com. IN A +NS.CAST.EDU.JM. IN A +DS.NIC.NET.SG. IN A +PRADES.CESCA.ES. IN A +ns.sta.NET.CN. IN A +NSE00.excite.com. IN A +NS3.ABOVE.net. IN A +CASBAH.ELDJAZAIR.NET.DZ. IN A +ASKIA.SOTELMA.ML. IN A +NS.IDT.net. IN A +FXCLPR02.IS.CHRYSLER.com. IN A +SVC00.APNIC.net. IN A +NS5.DCX.YAHOO.com. IN A +ns1.ray.net. IN A +NS.NIC.MC. IN A +ns.runway.CN.net. IN A +benoni.uit.NO. IN A +SCRATCHY.MINDSPRING.net. IN A +ns1.pcode.com. IN A +ns1.aha.RU. IN A +ns2.uwaterloo.CA. IN A +ns2.NIC.AD.JP. IN A +a.ns.foxharp.boston.MA.us. IN A +NS.NIC.IO. IN A +A-GTLD-SERVERS.dot-god.com. IN A +SMTP.slac.stanford.EDU. IN A +52.87.198.209.IN-ADDR.ARPA. IN PTR +BARNEY.ADVSYS.CO.UK. IN A +NS1.TELEPAC.PT. IN A +NICOSIA.CCS.UCY.AC.CY. IN A +NS.PUNCHDOWN.org. IN A +SYNAESTHESIA.COGNOSCENTI.org. IN A +NS2.PLANET-THREE.net. IN A +DNS.CIT.CORNELL.EDU. IN A +MODOR.VERISIGN.net. IN A +SUNSTROKE.IS.RPSLMC.EDU. IN A +NS2.SEG.net. IN A +NEMUNAS.SC-UNI.KTU.LT. IN A +MULGA.CS.MU.OZ.AU. IN A +NS1.NPLUS.GF. IN A +ns2.centralinfo.net. IN A +K.GTLD-SERVERS.net. IN A +ns1.codelocal.com. IN A +NS2.IPNS.com. IN A +NS0.DE.NIC.NU. IN A +NS.USSR.EU.net. IN A +NS.INTERNET.SK. IN A +CORREOS.SEKER.ES. IN A +mx1.buf.ADELPHIA.net. IN A +aun.UNINETT.NO. IN A +NS0.NETANET.com. IN A +www.MANY-PATHS-ENERGY-ENHANCEMENT.com. IN A +NS2.STARFIRE.DOUGLAS.MA.us. IN A +NS3.IKP.PL. IN A +pns.dtag.de. IN A +NZ.NS.NIC.NU. IN A +DAVER.bungi.com. IN A +gutenberg.bucksnet.com. IN A +DNS2.IT.net. IN A +NS2.SNS-UT.DEBIS.com. IN A +ISI.EDU. IN A +amethyst.xaos.org. IN A +PAPPILLOMA.WWEBSVS.com. IN A +NS2.bock.com. IN A +NS2.OAR.net. IN A +MINION.NETPOLICY.com. IN A +Mail.catic1.com. IN A +NS4.DNS.space.net. IN A +b.gtld-servers.ORSC. IN A +bend.madriver.com. IN A +NS4.IS-FUN.net. IN A +NS2.JPS.net. IN A +NS1.IP-PLUS.net. IN A +rush.cc1.RPSLMC.EDU. IN A +NS2.GBMTECH.net. IN A +DNS.MSEN.com. IN A +DNSSEC2.SINGNET.COM.SG. IN A +NS2.HOME.net. IN A +ACCESS.MBNET.MB.CA. IN A +DNS0.SPIN.AD.JP. IN A +Filer.PHOTOTRUST.com. IN A +jpl.NASA.GOV. IN A +NS2.TECHNOLOGIA.net. IN A +bparker.CONNACTIVITY.com. IN A +NS1.uvm.EDU. IN A +NS.SENET.net. IN A +DNS2.UTCC.UTORONTO.CA. IN A +localhost.costorf.com. IN A +DNS2.AD. IN A +HYDRA.HELSINKI.FI. IN A +NAME.PHX.GBLX.net. IN A +NS2.FOOL.com. IN A +NS01-SERVER.CURINFO.AN. IN A +NS.CR. IN A +mail.pshift.net. IN A +NS.IRD.FR. IN A +NS.UZ. IN A +DNS.INTELCOM.SM. IN A +DNS2.UNIV-NKC.MR. IN A +HNS3.hns.com. IN A +bay.cs.UTORONTO.CA. IN A +NS0.BT.net. IN A +BAYONET.SJMERCURY.com. IN A +PAN.BIJT.net. IN A +NAVI.SUBTEND.net. IN A +NS.CIX.CX. IN A +waldorf.Informatik.Uni-Dortmund.de. IN A +NS2.ivillage.com. IN A +DNS.NIC.XLINK.net. IN A +NS1.MERCHANTWARE.CON. IN A +NS.TO.GD-ES.com. IN A +NS-A.RNC.RO. IN A +REGGAE.NCREN.net. IN A +SSS-NL.DENIC.de. IN A +NS1.TDC.TO. IN A +NS.NIC.HU. IN A +JOANNA.WILLIAM.org. IN A +NS0.IIJ.AD.JP. IN A +maus.spack.org. IN A +B.NS.VERIO.net. IN A +SECDNS.EUNET.BE. IN A +NS3.EUROPE.YAHOO.com. IN A +A.ROOT-SERVERS.net. IN A +sherickpm.com. IN MX +NS2.MEDIASERVICES.net. IN A +YARDBIRD.CNS.vt.EDU. IN A +SUNIC.SUNET.SE. IN A +NS.MT. IN A +CNDVG001.usa.net. IN A +NS1.CX.ESCROW.IOCOMM.NET.CX. IN A +DNS-02.NS.AOL.com. IN A +ns2.tesserae.com. IN A +SV10.BATELCO.COM.BH. IN A +dec.anr.state.vt.us. IN MX +3.133.188.192.IN-ADDR.ARPA. IN PTR +NS1.LONDON.UK.NETDNS.com. IN A +NS.NIC.MG. IN A +DNS1.VN. IN A +DENS20.DEN.nps.GOV. IN A +z.ip6.INT. IN A +NS3.TRIVALLEY.com. IN A +isis.imag.FR. IN A +NS.SOVAM.com. IN A +NS-SOA.DARENET.DK. IN A +NS4.NIC.TV. IN A +DNSSRV1X.mitre.org. IN A +GATEKEEPER.NYTIMES.com. IN A +D.I-DNS.net. IN A +NS.KOLO.net. IN A +NS4.FIRSTWORLD.net. IN A +DECST.CERIST.DZ. IN A +NS4.DNS.WS. IN A +NS0.GDGSC.com. IN A +UCTHPX.UCT.AC.ZA. IN A +NS2.HOTWIRED.com. IN A +ns02.ca.us.ibm.net. IN A +NS2.SPEAKEASY.net. IN A +TELCOM.ZPTC.CO.ZW. IN A +NS.DK-HOSTMASTER.DK. IN A +NS.NIC.LK. IN A +NS2.zama.net. IN A +CZ.EUNET.CZ. IN A +NS.AC.ID. IN A +NS1.CUBE.de. IN A +NS1.QUASAR.net. IN A +NS1.OFFSHORE.AI. IN A +NS5.NRSITE.com. IN A +NS.AIC.net. IN A +OWL.NCC.nps.GOV. IN A +MAXIM.gbch.net. IN A +BOW.INTNET.TD. IN A +ns1.cacheware.com. IN A +NS2.SPEEDHOST.com. IN A +NS1.COMMIT.GM. IN A +NAME.ROC.GBLX.net. IN A +90.198.245.204.IN-ADDR.ARPA. IN PTR +BOLOGNA.NETTUNO.IT. IN A +NIC.IBD.com. IN A +NS.WESTOL.com. IN A +time.SOVER.net. IN CNAME +UNIX1.CS.UMASS.EDU. IN A +AARDVARK.WR.UMIST.AC.UK. IN A +NS1.NIC.YU. IN A +mail.velco.com. IN A +DNSAUTH2.SYS.GTEI.net. IN A +NS.TELE.FI. IN A +state.vt.us. IN MX +NS.NYC.juno.com. IN A +NS1.g-world.com. IN A +AUTH2.AMERICA.net. IN A +KIRA.ECS.UMASS.EDU. IN A +CONACYT.GOB.SV. IN A +DNS.SRCE.HR. IN A +NS00.ns0.com. IN A +NS2.CL.BELLSOUTH.net. IN A +jenner.med.HARVARD.EDU. IN A +p2.cavebear.com. IN A +NS1.NIC.JE. IN A +ORCU.OR.BR.NP.ELS-GMS.att.net. IN A +NS.XBILL.org. IN A +WRAITH.CS.UOW.EDU.AU. IN A +12.159.145.204.IN-ADDR.ARPA. IN PTR +ns1.pr.SUN.com. IN A +NS.SPIN.OMNES.net. IN A +smtp.188.net. IN A +TERMINAL.2GLOBE.net. IN A +NS2.HARVARD.EDU. IN A +NAMESERVER.CNR.IT. IN A +EARTH.SY. IN A +DNS2.REACCIUN.VE. IN A +NS.TMX.COM.NI. IN A +freefour.acs.rpi.EDU. IN A +242.84.198.209.IN-ADDR.ARPA. IN PTR +CORREU.STA.AD. IN A +NS.DRUKNET.NET.BT. IN A +NS4.US.PRSERV.net. IN A +KAASASSUK.GH.GL. IN A +ECUA.NET.EC. IN A +NS.CONCYT.GOB.GT. IN A +NS2.NAP.net. IN A +DNS2.CN.net. IN A +MX.NSI.NASA.GOV. IN A +NS.TDS.net. IN A +tdns-me1.NETSCAPE.com. IN A +NS2.METU.EDU.TR. IN A +NS2.SETARNET.AW. IN A +87.184.152.204.IN-ADDR.ARPA. IN PTR +DNS.OMNIWAY.SM. IN A +NS0.U-NET.net. IN A +elektro.CMHNET.org. IN A +ns2.HIGGS.net. IN A +NS2.SKYNETWEB.com. IN A +MAGIC.MN. IN A +NS1.YAHOO.com. IN A +mx1.cdp.ADELPHIA.net. IN A +SANTO.VANUATU.COM.VU. IN A +www.mmuuf.org. IN MX +ns1.timeheart.net. IN A +NS2.TOGETHER.net. IN A +NS.AMNIC.net. IN A +NS.EENET.EE. IN A +www.ONLINEPHOTOCONTEST.com. IN A +VIC20.BLIPP.com. IN A +DNS.FROGHOUSE.org. IN A +NS2.ELI.net. IN A +NS.CAIS.com. IN A +BAABEN.AFRIQ.net. IN A +NS2.NJ.EXODUS.net. IN A +DOMREG.NIC.CH. IN A +NS.EU.net. IN A +NS1.DIEBOLD.net. IN A +NS3.CP.net. IN A +DNS.FUW.EDU.PL. IN A +www.retro.com. IN A +NS2.UNI2.net. IN A +ns1.alcatrazmedia.com. IN A +dns6.CP.MSFT.net. IN A +NS1.SEYCHELLES.net. IN A +NS2.INTERNIC.net. IN A +front.macrosoft.WAW.PL. IN A +NISC.JVNC.net. IN A +AUTH03.NS.DE.UU.net. IN A +BURDELL.CC.GATECH.EDU. IN A +NS4.AH.net. IN A +ns1.sgh-net.de. IN A +Leland2.stanford.EDU. IN A +CBRU.BR.NS.ELS-GMS.att.net. IN A +DENEB.DOMAINNT.net. IN A +ns1.ivm.net. IN A +NS0.CWCI.net. IN A +35.110.16.12.IN-ADDR.ARPA. IN CNAME +f.trns. IN A +ODISEJ.TELEKOM.YU. IN A +FRCU.EUN.EG. IN A +NS.HHS.net. IN A +FOO.GRNET.GR. IN A +mail.WonderWorks.com. IN A +NS1.IAFRICA.com. IN A +NS.KACST.EDU.SA. IN A +srs.state.vt.us. IN A +OM4.OMANTEL.NET.OM. IN A +Yeshua.Christ.com. IN A +NS1.SIMORGH.com. IN A +OLKETA.SOLOMON.COM.SB. IN A +BANBA.DOMAINREGISTRY.IE. IN A +NOC.IOS.com. IN A +ns.schnism.net. IN A +e4.ny.us.IBM.com. IN A +DNS2.SEANET.com. IN A +doubt.dd.org. IN A +AMBER.ELEKTRON.PL. IN A +gw.rge.com. IN A +NS2.ZTNET.com. IN A +NS3.INFI.net. IN A +ZA.AKADNS.net. IN A +ESTIA.CSI.FORTH.GR. IN A +vtagr04.agr.state.vt.us. IN A +NS1-PUBLIC.ZTX.COMPAQ.com. IN A +ADMII.ARL.MIL. IN A +NS.NIXU.FI. IN A +DNS2.PIONEERNET.net. IN A +NS.NIC.CL. IN A +NS2.UTZ. IN A +NS4.LUXNOC.com. IN A +NS2.PBI.net. IN A +annwfn.erfurt.thur.de. IN A +NS1.MW.mediaone.net. IN A +NS1.ISU.NET.SA. IN A +pop.SHOREHAM.net. IN CNAME +DNS2.GUERNSEY.net. IN A +NS1.BEACHSHORE.net. IN A +HKUXB.HKU.HK. IN A +NS.DOLEH.com. IN A +NS.hactrn.net. IN A +MALAKULA.BONDY.IRD.FR. IN A +NS1.mediaone.net. IN A +NS2.GPG.com. IN A +noc.BelWue.de. IN A +NS2.GIP.net. IN A +RS.ISLES.net. IN A +BOW.INTNET.GQ. IN A +A.OPEN.BY. IN A +us.i1.YIMG.com. IN CNAME +athome.wetlogic.net. IN CNAME +NS1.NIST.GOV. IN A +mail.jerusalem-mail.com. IN A +ISDSUN.cr.USGS.GOV. IN A +NS.BOSTON.juno.com. IN A +NS2.CADABRA.com. IN A +nps.GOV. IN MX +RELAY.HUJI.AC.IL. IN A +styx.tahina.priv.at. IN A +ISGATE.IS. IN A +ns0.lux.dot-eu.org. IN A +BILBO.NASK.ORG.PL. IN A +MAIL.TARSUS.com. IN A +SUN.REDIRIS.ES. IN A +NS2.NEASE.net. IN A +OHCU.OH.MT.NP.ELS-GMS.att.net. IN A +NS2.NF. IN A +MIRAF-SERVER3.HONDUTEL.HN. IN A +ns3.worldnet.att.net. IN A +NS2.NETNAMES.net. IN A +ITGBOX.IAT.CNR.IT. IN A +NS2.ADELPHIA.net. IN A +NS2.RIPN.net. IN A +NS1.cinenet.net. IN A +jengate.thur.de. IN A +NOC.ULCC.JA.net. IN A +NS.NOC.UZ. IN A +NS0.JA.net. IN A +NS2.INR.net. IN A +netsage.org. IN A +TERI.USP.AC.FJ. IN A +NS2.NETSOL.com. IN A +NS2.ABAC.com. IN A +NS2.NIC.FR. IN A +KANIN.ARNES.SI. IN A +NS.EDU.GU. IN A +DNS.INRIA.FR. IN A +HEDNS1.GOOGLE.com. IN A +asylum.sf.ca.us. IN A +ACT2.ACT2000.net. IN A +ICM1.ICP.net. IN A +202.192.103.198.209.IN-ADDR.ARPA. IN PTR +ECSEL.jhuapl.EDU. IN A +NS2.DCNY.DOUBLECLICK.net. IN A +keith.netsage.org. IN A +MANTA.OUTREMER.com. IN A +NS2.globalnetisp.net. IN A +NS2.CCSRS.net. IN A +NS1.NL.CONCENTRIC.com. IN A +NS2.VI.net. IN A +NS2.NEO.net. IN A +cgi.MERCURYCENTER.com. IN CNAME +ORSTOM.RIO.net. IN A +NS2.CONRADPROMOTIONS.com. IN A +YARRINA.CONNECT.COM.AU. IN A +dns03.OPS.usa.net. IN A +APPSRV.HAITIWORLD.com. IN A +NS.RELCOM.KZ. IN A +NS1.MAGIC-MOMENTS.com. IN A +NS.ALCATEL.com. IN A +ns2.terra.net. IN A +NS3.hotmail.com. IN A +vtc.VSC.EDU. IN MX +www.vmba.org. IN MX +NAHOURI.ONATEL.BF. IN A +SERVER2.INFN.IT. IN A +NS2.AI-R.com. IN A +NS1.FREE.net. IN A +vcmr-54.server.rpi.EDU. IN A +haig.CS.UCL.AC.UK. IN A +mail.nova-data.com. IN A +MOEVAX.EDU.TW. IN A +NS2.LTWCC.org. IN A +NS.BA. IN A +noc.HRZ.uni-bielefeld.de. IN A +VANILLA.WRO.nps.GOV. IN A +NS2.SZTAKI.HU. IN A +SECIU.EDU.UY. IN A +COL2.CARIBSURF.com. IN A +NS2.QATAR.NET.QA. IN A +NS2.E-SYNC.net. IN A +ns1.eu.SUN.com. IN A +NS1.UUSJ.DOUBLECLICK.net. IN A +NS2.CUHK.EDU.HK. IN A +NS1.MEITCA.com. IN A +NS2.DSL.net. IN A +techfac.techfak.uni-bielefeld.de. IN A +listserv.performancediver.com. IN A +foolusmf.D4P.net. IN CNAME +pedic-med.vrx.net. IN A +GRUMPY.NET.NA. IN A +BK.tifosi.com. IN A +ns3.PAIR.com. IN A +ns2.ar.com. IN A +MASSIRA.ONPT.NET.MA. IN A +NS.KBFI.EE. IN A +ns3.Algebra.com. IN A +faerber.muc.de. IN MX +9.206.203.192.IN-ADDR.ARPA. IN PTR +PUKU.UNZA.ZM. IN A +ATLNET.ATLONLINE.com. IN A +Z1.NS.NYC1.GLOBIX.net. IN A +www.hometownbands.com. IN A +SIMON.CS.CORNELL.EDU. IN A +EKEKO.RCPIP.net. IN A +emerald.itnet.com.PL. IN A +DNS1.ICS.FORTH.GR. IN A +NS.ATL.BELLSOUTH.net. IN A +ntp.ctr.COLUMBIA.EDU. IN CNAME +NS2.GLOBECOMM.net. IN A +UUNS1DNS1.FLONETWORK.com. IN A +GRIN.GNOSH.net. IN A +NS.DIGSYS.BG. IN A +uunet.UU.net. IN MX +ns1.vermontel.com. IN A +NS2.GREENMOUNTAINACCESS.net. IN A +38.241.5.198.IN-ADDR.ARPA. IN PTR +NS1.NIC.UK. IN A +DNS.FCCN.PT. IN A +NS2.NIC.TJ. IN A +NS4.NEWACCOUNT.com. IN A +NS2.IHUG.NET.NZ. IN A +NS.SIGNALZ.com. IN A +DNS.NIC.AD. IN A +3.2.39.137.IN-ADDR.ARPA. IN PTR +UUCP-GW-2.PA.DEC.com. IN A +NS.LANDLORDS.com. IN A +NS2.EXODUS.net. IN A +NS2.SCRUZ.net. IN A +NS.PIPEX-SZ.net. IN A +saturn.SUN.com. IN A +e24.nc.us.IBM.com. IN A +NMS.CYFRONET.KRAKOW.PL. IN A +NS.TWNIC.net. IN A +ns2.alcatel.NO. IN A +INPAKSODNS.AKSO.nps.GOV. IN A +mail.reptiles.org. IN A +59.187.152.204.IN-ADDR.ARPA. IN PTR +ns1.mobydark.com. IN A +NS.KG. IN A +NS.SPB.SU. IN A +PENDRAGON.CS.PURDUE.EDU. IN A +NS1.IGC.APC.org. IN A +USDNS.NIC.us. IN A +NS2.WEBTRENDS.com. IN A +URANUS.DAIMI.AAU.DK. IN A +ANTANA.IRD.MG. IN A +NS.JERSEY.juno.com. IN A +NS2.INTERNET-TOOLS.com. IN A +ns-tk012.ocn.AD.JP. IN A +bvt-ext.gdarm.com. IN A +NS1.ID. IN A +NS2.MAHNET.net. IN A +NS.ALCANET.COM.AU. IN A +UTAMA.BOLNET.BO. IN A +NS.CNC.AC.CN. IN A +NS.KREN.NE.KR. IN A +NS1.REDHAT.com. IN A +db.rc.VIX.com. IN A +198.103.198.209.IN-ADDR.ARPA. IN CNAME +alf.pbks.PL. IN A +FLAG.EP.net. IN A +DNS2.IUNET.IT. IN A +NS2.QUANTIFIED.net. IN A +INTERNET-SERVER.ZURICH.IBM.com. IN A +seaipsvcs.idx.com. IN A +lebanon.valley.net. IN A +SERVER.NORDU.net. IN A +NS.NIC.DO. IN A +isc-01.iscvt.org. IN A +NAC.NO. IN A +SAVA.UTIC.NET.BA. IN A +NS1.TOKYO.JP.NETDNS.com. IN A +NETSERV2.ITS.rpi.EDU. IN A +IFI.UIO.NO. IN A +www.TOAPLAN.com. IN A +ns2.the-frontier.org. IN A +NS.UNAM.MX. IN A +ARISTO.TAU.AC.IL. IN A +DNS.CS.WISC.EDU. IN A +NS1.NIC.IR. IN A +NS1.RETINA.AR. IN A +mailer.connriver.net. IN A +NS.ATI.TN. IN A +NS2.CLEAR.NET.NZ. IN A +NS4.EARTHLINK.net. IN A +mejac.palo-alto.ca.us. IN A +New-York4.NY.ALTER.net. IN A +falcon.tallship.net. IN A +ZEUS.CC.UCY.AC.CY. IN A +NS2.SECURE.net. IN A +NS0.FLIRBLE.org. IN A +dns.zenon.net. IN A +SERVIDOR.MICROASTUR.ES. IN A +DOWNSTAGE.MCS.VUW.AC.NZ. IN A +ns2.GNAC.com. IN A +PRIFI.EUNET.FI. IN A +ns2.k12.vt.us. IN A +ns2.nic.mnet. IN A +NS0.PIPEX.net. IN A +NS1.SANFRANCISCO.US.NETDNS.com. IN A +AMRA.NIC.GOV.JO. IN A +kw.com.CN. IN MX +SHNS.163.net. IN A +NS.ER.USGS.GOV. IN A +FAITH.MYNET.net. IN A +mail.smuggs.com. IN A +MIMOS.MY. IN A +NS.GU. IN A +mx00.schlund.de. IN A +CADDSYS.IPTEK.net. IN A +NS0.TELIA.NIC.NU. IN A +NS2.GRANITECANYON.com. IN A +GATEKEEPER.corning.com. IN A +NS2.2DAY.com. IN A +1.0.0.127.IN-ADDR.ARPA. IN PTR +RAIN.PSG.com. IN A +STRAWB.MIT.EDU. IN A +NS2.DIGISERVE.com. IN A +UMACSN2.UMAC.MO. IN A +NS.JM. IN A +12.153.66.206.IN-ADDR.ARPA. IN PTR +EAST.ISI.EDU. IN A +NS2.UUNET.CA. IN A +SUNNY.STAT-USA.GOV. IN A +BOW.INTNET.CF. IN A +NS4.TELE.DK. IN A +NS2.sodak.net. IN A +NS1.NEWYORK.US.NETDNS.com. IN A +NS2.PSI.net. IN A +NS.KREONET.RE.KR. IN A +GIANT.MINDLINK.net. IN A +NS0.SECTOR001.org. IN A +DNS.SEABONE.net. IN A +NS2.MANA.PF. IN A +NRWEB.CENPAC.NET.NR. IN A +www.TRAVELPHOTOCONTESTS.com. IN A +NS1.REGEX.com. IN A +BIGBIRD.ITD.nps.GOV. IN A +CUNIXD.CC.COLUMBIA.EDU. IN A +NS1.CLASSIFIEDMONSTER.com. IN A +SERVER1.SANS.org. IN A +BRONZE.COIL.com. IN A +SCSNMS.SWITCH.CH. IN A +SCE.CNC.UNA.PY. IN A +RELAY.LA.TIS.com. IN A +NS.AUSTIN.IBM.com. IN A +SERVICE.robert-morris.EDU. IN A +MERCURY.ML.org. IN A +proxy.pccf.net. IN A +DUB-NAME-SVC-1.compuserve.com. IN A +NS.CNRI.reston.va.us. IN A +NS.UCAD.SN. IN A +ns01.ny.us.ibm.net. IN A +NS4-AUTH.ALASKA.net. IN A +BOW.INTNET.NE. IN A +NS-JP.SINET.AD.JP. IN A +ns.musin.de. IN A +ip1.romkey.SEG.net. IN A +DNS2.ITD.UMICH.EDU. IN A +mail.rpi.EDU. IN A +INECO.NIC.ES. IN A +DNS2.FIREHOUSE.net. IN A +BOW.INTNET.BJ. IN A +sundown.vtc.VSC.EDU. IN A +NIC.AIX.GR. IN A +NIC.AD.JP. IN A +NS.DC.IGC.org. IN A +LHR.NS.GDNS.net. IN A +NS2.WEBMAGIC.net. IN A +MUNNARI.OZ.AU. IN A +HIPPO.RU.AC.ZA. IN A +PEBBLES.IOM.com. IN A +penpal.dmz.RPSLMC.EDU. IN A +netnews.HINET.net. IN A +INS2.TOSA.TWTELECOM.net. IN A +proxy6.cisco.com. IN A +NS2.HOST4U.net. IN A +POIPARAU.OYSTER.NET.CK. IN A +NS-EXT.VIX.com. IN A +NS2.NURSAT.net. IN A +mail2.kw.com.CN. IN A +NS-02B.ANS.net. IN A +DNS.RCCN.net. IN A +B.ROOT-SERVERS.ORSC. IN A +FIREHOUSE.net. IN A diff --git a/bin/tests/system/cacheclean/knowngood.dig.out b/bin/tests/system/cacheclean/knowngood.dig.out new file mode 100644 index 0000000..a0f087e --- /dev/null +++ b/bin/tests/system/cacheclean/knowngood.dig.out @@ -0,0 +1,953 @@ +YA.AKAMAI.com. 604800 IN A 204.178.118.68 +UPR1.UPR.CLU.EDU. 604800 IN A 136.145.1.4 +integra.s-integra.co.JP. 604800 IN A 210.162.202.34 +avalon.iks-jena.de. 604800 IN A 194.221.90.34 +NS1.GLOBALDNS.com. 604800 IN A 206.253.214.11 +NS.RDU.BELLSOUTH.net. 604800 IN A 205.152.32.20 +ns.space.net. 604800 IN A 195.30.0.1 +SUN.MHS-RELAY.AC.UK. 604800 IN A 128.86.8.25 +AYAX.UNIANDES.EDU.CO. 604800 IN A 157.253.50.30 +DNS.NIC.CD. 604800 IN A 194.38.74.11 +NS.DNS.PT. 604800 IN A 193.136.0.1 +NS1.INTERNETSHARE.com. 604800 IN A 63.207.108.53 +MASTER.DNS.BE. 604800 IN A 194.7.171.243 +CATAMOUNT.middlebury.EDU. 604800 IN A 140.233.2.204 +FM03.FM. 604800 IN A 206.49.89.4 +NAAMAK.NCST.ERNET.IN. 604800 IN A 202.41.110.66 +gateway2.BFG.com. 604800 IN A 166.102.214.66 +NS3.NS.ESAT.net. 604800 IN A 192.111.39.100 +DNS1.INTUIT.com. 604800 IN A 208.157.255.4 +DEN-NS2.FWIDCSERVICES.net. 604800 IN A 216.7.160.32 +SOL.UNDPBI.TELEPAC.net. 604800 IN A 194.65.87.2 +NS2.tridog.com. 604800 IN A 206.168.112.51 +DNS2.KW. 604800 IN A 161.252.48.150 +NS2.MAIL.com. 604800 IN A 165.251.1.3 +NS.FIRSTCOM.CL. 604800 IN A 200.27.2.2 +DNS4.QUICKEN.com. 604800 IN A 198.3.99.252 +bofh.cid.net. 604800 IN A 212.172.21.254 +NS1.KRNIC.net. 604800 IN A 202.30.50.51 +NS2.SR.net. 604800 IN A 200.1.156.11 +NS1.TELSTRA.net. 604800 IN A 139.130.4.5 +ns.cafax.SE. 604800 IN A 192.71.228.17 +NS1.DNS.NET.NZ. 604800 IN A 202.46.161.3 +NS.CONCOURSE.com. 604800 IN A 199.218.113.2 +35.32/27.110.16.12.IN-ADDR.ARPA. 604800 IN PTR mail.nova-data.com. +CCC.champcable.com. 604800 IN A 207.41.53.11 +NS.RIPE.net. 604800 IN A 193.0.0.193 +NS.NIC.NU. 604800 IN A 128.11.47.50 +KIM.CAMNET.CM. 604800 IN A 195.24.192.35 +DOGON.SOTELMA.net. 604800 IN A 208.144.230.1 +DNS02.FLAME.org. 604800 IN A 204.152.184.97 +NS.MIA.BELLSOUTH.net. 604800 IN A 205.152.16.20 +mail.ok.RU. 604800 IN A 195.2.83.162 +NS.NIC.MX. 604800 IN A 200.23.1.1 +NS2.BERKELEY.EDU. 604800 IN A 128.32.136.12 +NS2.BERKELEY.EDU. 604800 IN A 128.32.206.12 +SHIKHAR.MOS.COM.NP. 604800 IN A 202.52.255.5 +noc.rrz.Uni-Koeln.de. 604800 IN A 134.95.100.209 +NS.KORNET.net. 604800 IN A 168.126.63.1 +keith.gazpacho.org. 604800 IN A 209.67.235.37 +NS2.appliedtheory.com. 604800 IN A 168.75.17.11 +NS.CERNET.net. 604800 IN A 202.112.0.44 +smtp.ELISTX.com. 604800 IN A 209.116.252.130 +NS-AIT.THNIC.net. 604800 IN A 192.41.170.219 +from.PL. 604800 IN A 212.160.132.114 +mailhub.icann.org. 604800 IN A 192.0.34.33 +SEC1.DNS.UK.PSI.net. 604800 IN A 154.32.105.34 +isrv3-i.isc.org. 604800 IN A 204.152.184.87 +PHLOEM.UOREGON.EDU. 604800 IN A 128.223.32.35 +CTINA.AR. 604800 IN A 200.16.97.17 +DNS2.IAM.NET.MA. 604800 IN A 212.217.0.12 +10.126.39.137.IN-ADDR.ARPA. 604800 IN PTR Fddi0-0.New-York4.NY.ALTER.NET. +DNS.PRINCETON.EDU. 604800 IN A 128.112.129.15 +NS.BELLSOUTH.net. 604800 IN A 205.152.0.5 +NS1.SNS-FELB.DEBIS.com. 604800 IN A 53.122.1.10 +localhost. 604800 IN A 127.0.0.1 +hm6.vt.highmeadow.com. 604800 IN A 207.136.209.6 +SYRUP.hill.com. 604800 IN A 208.162.106.3 +NS99.WAIKATO.AC.NZ. 604800 IN A 130.217.76.27 +NS4.CW.net. 604800 IN A 204.70.49.234 +NS2.SLOWMOE.com. 604800 IN A 137.118.8.50 +ns2.hypa.net. 604800 IN A 63.160.181.11 +ns.sxtyptt.NET.CN. 604800 IN A 202.99.192.68 +NS2.MERCHANTWARE.com. 604800 IN A 209.170.142.35 +uunymdgds1.DOUBLECLICK.net. 604800 IN A 206.65.183.21 +e34.co.us.IBM.com. 604800 IN A 32.97.110.132 +kista.dns.swip.net. 604800 IN A 192.71.220.9 +ZEBRA.UEM.MZ. 604800 IN A 196.3.96.67 +NET2.GENDYN.com. 604800 IN A 204.60.171.9 +NS0.UTK.EDU. 604800 IN A 160.36.0.66 +NS.RELCOM.EU.net. 604800 IN A 193.124.23.3 +DNS0.AXION.BT.CO.UK. 604800 IN A 132.146.5.1 +mail.vhv.com. 604800 IN A 208.5.161.11 +DNS4.UK.MSFT.net. 604800 IN A 213.199.144.152 +NS2.ADNS.net. 604800 IN A 199.5.157.3 +NS1.SEATTLE.US.NETDNS.com. 604800 IN A 206.253.214.13 +NS2.UNIVIE.AC.at. 604800 IN A 193.171.255.66 +NS15B.BOCA15-VERIO.com. 604800 IN A 208.55.91.51 +www.BAYAREA.com. 604800 IN CNAME vh80040.vh8.infi.net. +ns4.onemain.com. 604800 IN A 63.208.210.11 +NS2.EDIGITALS.com. 604800 IN A 211.39.139.36 +MICHAEL.VATICAN.VA. 604800 IN A 212.77.0.2 +AUSTIN.GH.com. 604800 IN A 196.3.64.1 +sld-ns2.CNNIC.NET.CN. 604800 IN A 202.97.16.197 +NS2.CDC.GOV. 604800 IN A 198.246.96.92 +NS.WATSON.IBM.com. 604800 IN A 198.81.209.2 +NS.NIC.SH. 604800 IN A 194.205.62.60 +NS2.BAHNHOF.net. 604800 IN A 212.85.64.4 +NS-AUTH2.cmates.com. 604800 IN A 208.23.213.3 +ISDMNL.WR.USGS.GOV. 604800 IN A 130.118.4.2 +NS2.COBEX.net. 604800 IN A 207.102.129.72 +MERLE.CIRA.CA. 604800 IN A 64.26.149.98 +NS.UVG.EDU.GT. 604800 IN A 168.234.68.2 +NS1.CWVA.DOUBLECLICK.net. 604800 IN A 205.138.3.20 +eliot.diebold.com. 604800 IN A 204.151.249.21 +NS.ALMADEN.IBM.com. 604800 IN A 198.4.83.35 +NS2.INTERNETSQUARE.com. 604800 IN A 205.227.232.9 +mail.QUEST-NET.com. 604800 IN A 207.140.30.11 +Z1.NS.LHR1.GLOBIX.net. 604800 IN A 212.111.32.38 +DNS1.AVANTEL.NET.MX. 604800 IN A 200.33.213.66 +vh80040.vh8.INFI.net. 604800 IN A 209.97.59.245 +NS.LEB.net. 604800 IN A 206.127.55.2 +NS.DCC.UCHILE.CL. 604800 IN A 146.83.5.204 +CLOUSO.RISQ.QC.CA. 604800 IN A 192.26.210.1 +muenster.westfalen.de. 604800 IN A 193.174.5.2 +us.a1.YIMG.com. 604800 IN CNAME a32.g.a.YIMG.com. +NS.DEMOS.SU. 604800 IN A 194.87.0.8 +NS.DEMOS.SU. 604800 IN A 194.87.0.9 +south.NAVPOINT.com. 604800 IN A 207.106.42.12 +netconsult.netconx.de. 604800 IN A 193.141.75.1 +DNS2.btinternet.com. 604800 IN A 194.73.73.94 +NS2.CINE.net. 604800 IN A 207.168.250.12 +castor.cmc.ec.gc.CA. 604800 IN A 142.135.4.14 +EX2-DNS0.AVENUEA.com. 604800 IN A 216.34.88.20 +firewall3.glaxowellcome.com. 604800 IN A 192.58.204.207 +MACU.MA.MT.NP.ELS-GMS.att.net. 604800 IN A 199.191.145.136 +NS.PA. 604800 IN A 168.77.8.2 +TGSERV.TELE.GL. 604800 IN A 194.177.224.7 +KYNSE02.MESSAGESECURE.com. 604800 IN A 216.142.252.201 +GORGON.XTRA.CO.NZ. 604800 IN A 202.27.158.34 +DNS.NIC.IT. 604800 IN A 193.205.245.5 +pop.VERMONTEL.net. 604800 IN CNAME loomis.VERMONTEL.net. +NS2.REGISTRY.HM. 604800 IN A 209.54.168.55 +NAMESERVER1.CONCENTRIC.net. 604800 IN A 207.155.183.73 +47.131.127.204.IN-ADDR.ARPA. 604800 IN PTR mtiwmhc22.worldnet.att.net. +mailhost.tfm.com. 604800 IN A 192.231.224.11 +NS1.MRC.GM. 604800 IN A 212.60.69.1 +NS.WIDE.AD.JP. 604800 IN A 203.178.136.63 +NS.BTA.NET.CN. 604800 IN A 202.96.0.133 +NS2.ISPC.org. 604800 IN A 209.124.64.11 +BOW.RAIN.FR. 604800 IN A 194.51.3.49 +srs.srs.state.vt.us. 604800 IN A 159.105.101.150 +NS4.WEB2010.com. 604800 IN A 216.157.55.6 +NS.TELECOM.NET.ET. 604800 IN A 196.27.22.43 +NS1.DNS.NET.KH. 604800 IN A 203.127.100.21 +GATEN.JARING.MY. 604800 IN A 161.142.227.17 +shell.nominum.com. 604800 IN A 204.152.187.59 +CHEOPS.ANU.EDU.AU. 604800 IN A 150.203.224.24 +VANGOGH.CS.BERKELEY.EDU. 604800 IN A 128.32.33.5 +NS2.NOC.NULLUS.net. 604800 IN A 63.119.253.254 +NIC.LTH.SE. 604800 IN A 130.235.20.3 +ns.farm.net. 604800 IN A 216.112.179.160 +NS.USEC.SUN.com. 604800 IN A 192.9.48.3 +NS2.YOUR-DOMAIN.com. 604800 IN A 216.167.31.177 +DNS-EAST.PREP.net. 604800 IN A 129.250.252.10 +ns.hcr.net. 604800 IN A 208.240.246.4 +NS-RCH.nortelnetworks.com. 604800 IN A 192.135.215.2 +crl.DEC.com. 604800 IN A 192.58.206.2 +NS.PIXAR.ES. 604800 IN A 194.143.196.3 +MEX1-M-213.UNINET.NET.MX. 604800 IN A 200.33.146.213 +NS.ITU.CH. 604800 IN A 156.106.192.121 +matrix.uwm.EDU.PL. 604800 IN A 213.184.3.136 +gateway1.gmcr.com. 604800 IN A 12.34.108.130 +NS2.DNS.BR. 604800 IN A 200.19.119.99 +foxharp.boston.MA.us. 604800 IN MX 10 bparker.connactivity.com. +Quest-7.symquest.com. 604800 IN A 64.69.102.131 +NS2.VERIO.net. 604800 IN A 129.250.31.190 +NAME.IAD.GBLX.net. 604800 IN A 204.152.166.155 +NS2.EMIRATES.NET.AE. 604800 IN A 194.170.1.7 +supai.oit.UMASS.EDU. 604800 IN A 128.119.175.6 +QUERN.EPILOGUE.com. 604800 IN A 128.224.1.136 +NS3.TOPICA.com. 604800 IN A 206.111.131.72 +NS1.JERKY.net. 604800 IN A 204.57.55.100 +JTB.BRUNET.BN. 604800 IN A 202.160.8.2 +AUTH100.NS.UU.net. 604800 IN A 198.6.1.202 +BOW.INTNET.DJ. 604800 IN A 193.251.143.253 +OSI2.GUA.net. 604800 IN A 205.161.188.3 +AZMODAN.ULA.VE. 604800 IN A 150.185.130.16 +THUMPER.RPSLMC.EDU. 604800 IN A 144.74.22.8 +ICHU.RCP.NET.PE. 604800 IN A 161.132.5.14 +NS.NIC.AC. 604800 IN A 194.205.62.120 +DNS.NETFLIGHT.com. 604800 IN A 207.88.32.2 +ns2.UTORONTO.CA. 604800 IN A 128.100.102.202 +mail.giffordmed.org. 604800 IN A 130.189.100.51 +RATA.VUW.AC.NZ. 604800 IN A 130.195.2.11 +NS-2.ADMONITOR.net. 604800 IN A 216.35.185.40 +NCC.MOC.KW. 604800 IN A 196.1.69.98 +NS.EUNET.ES. 604800 IN A 193.127.1.11 +NS3.best.com. 604800 IN A 209.24.149.42 +zip.MAIL-LIST.com. 604800 IN MX 5 zip.MAIL-LIST.com. +zip.MAIL-LIST.com. 604800 IN MX 20 sluice.MAIL-LIST.com. +zip.MAIL-LIST.com. 604800 IN MX 20 pipeline.MAIL-LIST.com. +zip.MAIL-LIST.com. 604800 IN MX 20 transport.MAIL-LIST.com. +zip.MAIL-LIST.com. 604800 IN MX 50 brisk.MAIL-LIST.com. +zip.MAIL-LIST.com. 604800 IN MX 50 swifty.MAIL-LIST.com. +zip.MAIL-LIST.com. 604800 IN MX 50 velocity.MAIL-LIST.com. +JATZ.AARNET.EDU.AU. 604800 IN A 139.130.204.4 +DNS2.MAN.LODZ.PL. 604800 IN A 212.51.192.5 +NS.VERITAS.com. 604800 IN A 204.177.156.38 +218.241.103.199.IN-ADDR.ARPA. 604800 IN PTR abyssinian.sleepycat.com. +BOW.SNPT.KM. 604800 IN A 195.101.19.253 +Z1.NS.SJC1.GLOBIX.net. 604800 IN A 209.10.34.55 +DNS.NIC.TT. 604800 IN A 24.3.198.194 +MAKISIG.IPHIL.net. 604800 IN A 203.176.28.135 +NS.DK.net. 604800 IN A 193.88.44.42 +NS.NI. 604800 IN A 200.30.36.8 +NS.NI. 604800 IN A 165.98.1.2 +CIUP1.NCC.UP.PT. 604800 IN A 193.136.51.52 +ns2.verisign-grs.com. 604800 IN A 198.41.3.108 +NS1.UMASS.EDU. 604800 IN A 128.119.166.14 +NS.NEWACCOUNT.net. 604800 IN A 216.121.96.26 +UDNS2.ULTRADNS.net. 604800 IN A 204.74.101.1 +NS2.LATNET.LV. 604800 IN A 159.148.108.1 +info-server.surrey.AC.UK. 604800 IN A 131.227.102.6 +NS2.SQUONK.net. 604800 IN A 63.84.12.135 +NS2.DSO.net. 604800 IN A 206.16.77.11 +www.energyenhancement.org. 604800 IN A 216.121.175.228 +DNS1.BD. 604800 IN A 209.58.24.5 +nl.COMPUWARE.com. 604800 IN MX 150 uucp.nl.net. +nl.COMPUWARE.com. 604800 IN MX 50 bitbucket.extern.uniface.nl. +nl.COMPUWARE.com. 604800 IN MX 100 smtp.nl.net. +NS.DHIRAAGU.MV. 604800 IN A 202.1.192.196 +TRANTOR.UMD.EDU. 604800 IN A 128.8.10.14 +NS.ALCANET.NO. 604800 IN A 193.213.238.10 +Z6.MSFT.AKADNS.com. 604800 IN A 207.229.152.20 +NS4.ync.net. 604800 IN A 206.185.20.9 +CMTU.MT.NS.ELS-GMS.att.net. 604800 IN A 12.127.16.69 +vh40099.vh4.INFI.net. 604800 IN A 209.97.59.121 +ns2.secondary.nl. 604800 IN A 194.229.138.6 +abyssinian.sleepycat.com. 604800 IN A 199.103.241.218 +APHEX.MENTOR.BE. 604800 IN A 193.121.64.5 +webmail.fiberia.com. 604800 IN A 216.55.147.2 +localhost.moonmothers.com. 604800 IN A 127.0.0.1 +NS2.DNS.LU. 604800 IN A 158.64.229.3 +NS.VISUALCOM.ES. 604800 IN A 194.143.202.202 +TONIC.TO. 604800 IN A 206.184.59.10 +NS1.CRSNIC.net. 604800 IN A 198.41.3.39 +trurl.ispid.com.PL. 604800 IN A 195.150.99.3 +datingagentur.de. 604800 IN A 212.227.216.57 +NS2.NSIREGISTRY.net. 604800 IN A 198.41.3.108 +ICE.VIA-NET-WORKS.IE. 604800 IN A 212.17.32.2 +sgi1.map.com. 604800 IN A 204.71.19.20 +NS0.HS0.U-NET.net. 604800 IN A 194.119.128.70 +candle.pha.pa.us. 604800 IN A 162.33.245.46 +NS1.PACIFIC.NET.SG. 604800 IN A 192.169.33.3 +NS.CENIAI.NET.CU. 604800 IN A 169.158.128.136 +NS2.UUCP.NE.JP. 604800 IN A 210.141.111.69 +za.akamaitech.net. 604800 IN A 204.178.107.226 +NS.UCR.AC.CR. 604800 IN A 163.178.88.2 +DNS-02.NS.cs.com. 604800 IN A 205.188.157.235 +dns2.primary.net. 604800 IN A 205.242.187.235 +PAPPSRV.PAPP.UNDP.org. 604800 IN A 192.115.229.1 +NS1.REGME.com. 604800 IN A 207.153.57.14 +DNS.CS.KULEUVEN.AC.BE. 604800 IN A 134.58.40.4 +NS1.VERMONTLAW.net. 604800 IN A 63.89.26.15 +mail.garmontusa.com. 604800 IN A 64.30.8.178 +NS2.SAIPAN.com. 604800 IN A 202.128.28.2 +NS.ARICATRA.com. 604800 IN A 206.64.112.114 +ns2.reedmedia.net. 604800 IN A 209.241.86.6 +NS.NETLAB.SK. 604800 IN A 195.168.1.4 +RELAY.GW.tislabs.com. 604800 IN A 192.94.214.100 +b.ns.tmcs.net. 604800 IN A 209.104.33.252 +NS1.IBL.BM. 604800 IN A 199.172.192.1 +ok.RU. 604800 IN A 195.2.83.162 +NS.RICC.ALMA-ATA.SU. 604800 IN A 194.87.112.4 +KITKA.MARNET.MK. 604800 IN A 194.149.131.2 +dasher.dartmouth.EDU. 604800 IN A 129.170.208.6 +NS0.PLANET-THREE.com. 604800 IN A 212.49.219.164 +KNOCK.SER.BBNPLANET.net. 604800 IN A 192.239.16.129 +tornado.webtech.elk.PL. 604800 IN A 212.244.162.100 +AUTH2.NS.IDT.net. 604800 IN A 169.132.133.1 +host3.VTLEGALAID.org. 604800 IN A 207.136.208.115 +NS.EUNET.SK. 604800 IN A 192.108.130.33 +TULKU.NIC.AR. 604800 IN A 200.16.97.77 +RELAY.CDNNET.CA. 604800 IN A 192.73.5.1 +DNS2.TPSA.PL. 604800 IN A 194.204.152.34 +enterprise.wirbel.com. 604800 IN A 194.231.54.2 +ECNET.EC. 604800 IN A 157.100.45.2 +ENGINE1.UNA.net. 604800 IN A 208.136.52.74 +WYCU.WY.BR.NP.ELS-GMS.att.net. 604800 IN A 199.191.128.43 +ARWENA.NASK.WAW.PL. 604800 IN A 193.59.201.28 +PAC2.NIPR.MIL. 604800 IN A 199.252.155.234 +DAISY.EE.UND.AC.ZA. 604800 IN A 146.230.192.18 +odin.ietf.org. 604800 IN A 132.151.1.176 +dns.kaben-net.de. 604800 IN A 195.179.28.17 +NS2.ALTAVISTA.com. 604800 IN A 209.73.164.7 +CASTOR.TELEGLOBE.net. 604800 IN A 199.202.55.2 +CIR.RED.SV. 604800 IN A 168.243.254.1 +PIJIN.COM.SB. 604800 IN A 202.139.42.10 +NS4.CTCCOM.net. 604800 IN A 64.69.100.35 +NS1.SOL.NO. 604800 IN A 195.225.2.10 +DNS2.TK.MSFT.net. 604800 IN A 207.46.232.38 +NS.BSDI.com. 604800 IN A 207.174.116.8 +NS.SVIANED.nl. 604800 IN A 143.177.1.3 +NS.NOVELL.com. 604800 IN A 137.65.1.1 +NS.LUCKY.net. 604800 IN A 193.193.193.100 +SJC-NS2.SJC.LYCOS.com. 604800 IN A 206.79.171.40 +NS1.OP.net. 604800 IN A 209.152.193.4 +worldnet.att.net. 604800 IN A 199.70.151.234 +APIES.FRD.AC.ZA. 604800 IN A 137.214.80.1 +mail.skiinsurance.com. 604800 IN A 207.136.205.152 +NS.BELNET.BE. 604800 IN A 193.190.198.2 +NS.BELNET.BE. 604800 IN A 193.190.198.10 +KOMO.INET.GA. 604800 IN A 208.148.44.1 +EARTH.THEPLANET.net. 604800 IN A 195.92.195.222 +VASCO.USMA.AC.PA. 604800 IN A 208.141.92.2 +GODFEVER.DCCSERVER.com. 604800 IN A 208.137.22.6 +BOS-NS2.BOS.LYCOS.com. 604800 IN A 209.67.228.40 +NS2.GOTO.com. 604800 IN A 204.71.128.137 +NS1.overstock.com. 604800 IN A 207.225.194.13 +NS1-PUBLIC.ZMA.COMPAQ.com. 604800 IN A 161.114.64.24 +ns.ilovedomain.com. 604800 IN A 211.175.164.170 +ns1.anycast.net. 604800 IN A 216.196.51.4 +PASCAL.UPRR.PR. 604800 IN A 134.202.1.120 +NS3-AUTH.SPRINTLINK.net. 604800 IN A 144.228.255.10 +NS1-Y.DNS.PIPEX.net. 604800 IN A 158.43.193.89 +prue.eim.surrey.AC.UK. 604800 IN A 131.227.76.5 +TROLL-GW.GATECH.EDU. 604800 IN A 130.207.244.251 +NS.SIERRATEL.SL. 604800 IN A 194.133.124.5 +ns2.PSHIFT.com. 604800 IN A 208.153.85.21 +NS.ERS.IBM.com. 604800 IN A 204.146.173.35 +ASLAN.OPEN-RSC.org. 604800 IN A 199.5.157.128 +NS2.DOMAIN-REGISTRY.nl. 604800 IN A 193.176.144.130 +uranus.lan-ks.de. 604800 IN A 194.45.71.1 +mail.unlisys.net. 604800 IN A 195.21.255.252 +NS.AUSTRIA.EU.net. 604800 IN A 192.92.138.35 +AUTH01.CONNECT.IE. 604800 IN A 194.106.128.50 +SUN.SCSI.GOV.BY. 604800 IN A 195.50.5.103 +NS1.SIGMAHOSTING.com. 604800 IN A 209.241.86.6 +NS.CAST.EDU.JM. 604800 IN A 200.9.115.2 +DS.NIC.NET.SG. 604800 IN A 202.42.194.205 +PRADES.CESCA.ES. 604800 IN A 192.94.163.152 +ns.sta.NET.CN. 604800 IN A 202.96.199.133 +NSE00.excite.com. 604800 IN A 198.3.102.250 +NS3.ABOVE.net. 604800 IN A 207.126.105.146 +CASBAH.ELDJAZAIR.NET.DZ. 604800 IN A 193.194.81.45 +ASKIA.SOTELMA.ML. 604800 IN A 208.144.230.3 +NS.IDT.net. 604800 IN A 198.4.75.100 +FXCLPR02.IS.CHRYSLER.com. 604800 IN A 204.189.94.37 +SVC00.APNIC.net. 604800 IN A 202.12.28.131 +NS5.DCX.YAHOO.com. 604800 IN A 216.32.74.10 +ns1.ray.net. 604800 IN A 195.238.228.131 +NS.NIC.MC. 604800 IN A 195.78.6.131 +ns.runway.CN.net. 604800 IN A 211.101.132.8 +benoni.uit.NO. 604800 IN A 129.242.4.254 +SCRATCHY.MINDSPRING.net. 604800 IN A 207.69.200.211 +ns1.pcode.com. 604800 IN A 216.15.192.135 +ns1.aha.RU. 604800 IN A 195.2.80.142 +ns2.uwaterloo.CA. 604800 IN A 129.97.128.100 +ns2.NIC.AD.JP. 604800 IN A 202.12.30.133 +a.ns.foxharp.boston.MA.us. 604800 IN A 24.147.209.205 +NS.NIC.IO. 604800 IN A 194.205.62.100 +A-GTLD-SERVERS.dot-god.com. 604800 IN A 205.189.73.123 +SMTP.slac.stanford.EDU. 604800 IN A 134.79.18.80 +52.87.198.209.IN-ADDR.ARPA. 604800 IN PTR mqueue0.sover.net. +BARNEY.ADVSYS.CO.UK. 604800 IN A 194.72.124.2 +NS1.TELEPAC.PT. 604800 IN A 194.65.3.20 +NICOSIA.CCS.UCY.AC.CY. 604800 IN A 194.42.6.97 +NS.PUNCHDOWN.org. 604800 IN A 140.174.131.100 +SYNAESTHESIA.COGNOSCENTI.org. 604800 IN A 207.208.112.4 +NS2.PLANET-THREE.net. 604800 IN A 212.49.219.190 +DNS.CIT.CORNELL.EDU. 604800 IN A 192.35.82.50 +MODOR.VERISIGN.net. 604800 IN A 205.139.94.55 +SUNSTROKE.IS.RPSLMC.EDU. 604800 IN A 144.74.21.8 +NS2.SEG.net. 604800 IN A 206.34.181.16 +NEMUNAS.SC-UNI.KTU.LT. 604800 IN A 193.219.32.13 +MULGA.CS.MU.OZ.AU. 604800 IN A 128.250.1.22 +MULGA.CS.MU.OZ.AU. 604800 IN A 128.250.37.150 +NS1.NPLUS.GF. 604800 IN A 195.6.144.3 +ns2.centralinfo.net. 604800 IN A 63.102.204.130 +K.GTLD-SERVERS.net. 604800 IN A 213.177.194.5 +ns1.codelocal.com. 604800 IN A 216.15.192.130 +NS2.IPNS.com. 604800 IN A 63.230.183.1 +NS0.DE.NIC.NU. 604800 IN A 216.200.116.40 +NS.USSR.EU.net. 604800 IN A 193.124.22.65 +NS.INTERNET.SK. 604800 IN A 192.108.130.91 +CORREOS.SEKER.ES. 604800 IN A 194.179.87.1 +mx1.buf.ADELPHIA.net. 604800 IN A 24.48.36.10 +aun.UNINETT.NO. 604800 IN A 129.241.1.99 +NS0.NETANET.com. 604800 IN A 195.172.127.72 +NS0.NETANET.com. 604800 IN A 194.6.96.218 +www.MANY-PATHS-ENERGY-ENHANCEMENT.com. 604800 IN A 66.33.4.50 +NS2.STARFIRE.DOUGLAS.MA.us. 604800 IN A 216.129.136.9 +NS3.IKP.PL. 604800 IN A 157.25.5.30 +pns.dtag.de. 604800 IN A 194.25.0.125 +NZ.NS.NIC.NU. 604800 IN A 203.97.132.66 +DAVER.bungi.com. 604800 IN A 207.126.97.2 +DAVER.bungi.com. 604800 IN A 206.14.228.2 +gutenberg.bucksnet.com. 604800 IN A 207.113.15.5 +DNS2.IT.net. 604800 IN A 151.1.2.1 +NS2.SNS-UT.DEBIS.com. 604800 IN A 53.122.2.10 +ISI.EDU. 604800 IN A 128.9.176.32 +amethyst.xaos.org. 604800 IN A 204.145.159.12 +PAPPILLOMA.WWEBSVS.com. 604800 IN A 209.233.37.10 +NS2.bock.com. 604800 IN A 64.30.29.4 +NS2.OAR.net. 604800 IN A 192.88.195.10 +MINION.NETPOLICY.com. 604800 IN A 207.87.121.66 +Mail.catic1.com. 604800 IN A 207.190.204.103 +NS4.DNS.space.net. 604800 IN A 195.222.210.93 +b.gtld-servers.ORSC. 604800 IN A 216.13.126.116 +bend.madriver.com. 604800 IN A 207.136.232.15 +NS4.IS-FUN.net. 604800 IN A 212.162.54.34 +NS2.JPS.net. 604800 IN A 216.224.156.252 +NS1.IP-PLUS.net. 604800 IN A 164.128.36.34 +rush.cc1.RPSLMC.EDU. 604800 IN A 144.74.150.23 +NS2.GBMTECH.net. 604800 IN A 208.243.164.3 +DNS.MSEN.com. 604800 IN A 148.59.19.11 +DNSSEC2.SINGNET.COM.SG. 604800 IN A 195.13.10.226 +NS2.HOME.net. 604800 IN A 24.2.0.27 +ACCESS.MBNET.MB.CA. 604800 IN A 130.179.16.143 +DNS0.SPIN.AD.JP. 604800 IN A 165.76.0.98 +Filer.PHOTOTRUST.com. 604800 IN A 64.85.86.172 +jpl.NASA.GOV. 604800 IN A 137.78.160.180 +NS2.TECHNOLOGIA.net. 604800 IN A 207.253.59.4 +bparker.CONNACTIVITY.com. 604800 IN A 206.34.200.200 +NS1.uvm.EDU. 604800 IN A 132.198.201.10 +NS.SENET.net. 604800 IN A 206.155.163.195 +DNS2.UTCC.UTORONTO.CA. 604800 IN A 128.100.102.201 +localhost.costorf.com. 604800 IN A 127.0.0.1 +DNS2.AD. 604800 IN A 194.158.64.8 +HYDRA.HELSINKI.FI. 604800 IN A 128.214.4.29 +NAME.PHX.GBLX.net. 604800 IN A 206.165.6.10 +NS2.FOOL.com. 604800 IN A 208.51.76.222 +NS01-SERVER.CURINFO.AN. 604800 IN A 200.44.117.129 +NS.CR. 604800 IN A 163.178.8.2 +mail.pshift.net. 604800 IN A 208.153.85.30 +NS.IRD.FR. 604800 IN A 195.83.14.1 +NS.UZ. 604800 IN A 213.68.88.11 +DNS.INTELCOM.SM. 604800 IN A 194.183.64.11 +DNS2.UNIV-NKC.MR. 604800 IN A 193.251.145.154 +HNS3.hns.com. 604800 IN A 208.236.67.3 +bay.cs.UTORONTO.CA. 604800 IN A 128.100.1.1 +NS0.BT.net. 604800 IN A 194.72.6.51 +BAYONET.SJMERCURY.com. 604800 IN A 207.1.134.34 +PAN.BIJT.net. 604800 IN A 213.196.2.97 +NAVI.SUBTEND.net. 604800 IN A 208.186.117.224 +NS.CIX.CX. 604800 IN A 195.222.235.216 +waldorf.Informatik.Uni-Dortmund.de. 604800 IN A 129.217.4.42 +NS2.ivillage.com. 604800 IN A 209.185.162.16 +DNS.NIC.XLINK.net. 604800 IN A 193.141.40.42 +NS1.MERCHANTWARE.CON. 604800 IN A 209.170.142.34 +NS.TO.GD-ES.com. 604800 IN A 199.107.240.66 +NS-A.RNC.RO. 604800 IN A 192.162.16.31 +REGGAE.NCREN.net. 604800 IN A 128.109.131.3 +SSS-NL.DENIC.de. 604800 IN A 193.0.0.237 +NS1.TDC.TO. 604800 IN A 206.86.247.250 +NS.NIC.HU. 604800 IN A 193.6.27.62 +JOANNA.WILLIAM.org. 604800 IN A 195.153.6.2 +NS0.IIJ.AD.JP. 604800 IN A 202.232.2.34 +maus.spack.org. 604800 IN A 204.245.198.90 +B.NS.VERIO.net. 604800 IN A 129.250.35.32 +SECDNS.EUNET.BE. 604800 IN A 193.74.208.139 +NS3.EUROPE.YAHOO.com. 604800 IN A 217.12.4.71 +A.ROOT-SERVERS.net. 604800 IN A 198.41.0.4 +sherickpm.com. 604800 IN MX 10 inbound.sherickpm.com.criticalpath.net. +NS2.MEDIASERVICES.net. 604800 IN A 64.65.16.237 +YARDBIRD.CNS.vt.EDU. 604800 IN A 198.82.247.34 +SUNIC.SUNET.SE. 604800 IN A 192.36.125.2 +NS.MT. 604800 IN A 193.188.47.252 +CNDVG001.usa.net. 604800 IN A 165.212.12.1 +NS1.CX.ESCROW.IOCOMM.NET.CX. 604800 IN A 203.132.96.2 +DNS-02.NS.AOL.com. 604800 IN A 205.188.157.232 +ns2.tesserae.com. 604800 IN A 209.157.194.3 +SV10.BATELCO.COM.BH. 604800 IN A 193.188.124.227 +dec.anr.state.vt.us. 604800 IN MX 0 dec.anr.state.vt.us. +dec.anr.state.vt.us. 604800 IN MX 10 mx1.state.vt.us. +dec.anr.state.vt.us. 604800 IN MX 10 mx2.state.vt.us. +3.133.188.192.IN-ADDR.ARPA. 604800 IN PTR elektro.com. +NS1.LONDON.UK.NETDNS.com. 604800 IN A 212.62.6.38 +NS.NIC.MG. 604800 IN A 194.214.107.253 +DNS1.VN. 604800 IN A 203.162.3.235 +DENS20.DEN.nps.GOV. 604800 IN A 165.83.24.20 +z.ip6.INT. 604800 IN A 198.32.2.66 +NS3.TRIVALLEY.com. 604800 IN A 206.25.132.30 +isis.imag.FR. 604800 IN A 129.88.32.24 +NS.SOVAM.com. 604800 IN A 194.67.2.97 +NS-SOA.DARENET.DK. 604800 IN A 130.226.1.4 +NS4.NIC.TV. 604800 IN A 207.151.24.23 +DNSSRV1X.mitre.org. 604800 IN A 199.94.97.51 +GATEKEEPER.NYTIMES.com. 604800 IN A 199.181.175.201 +D.I-DNS.net. 604800 IN A 211.169.245.170 +NS.KOLO.net. 604800 IN A 209.66.103.20 +NS4.FIRSTWORLD.net. 604800 IN A 216.7.160.162 +DECST.CERIST.DZ. 604800 IN A 193.194.64.11 +NS4.DNS.WS. 604800 IN A 216.52.234.102 +NS0.GDGSC.com. 604800 IN A 192.160.62.66 +UCTHPX.UCT.AC.ZA. 604800 IN A 137.158.128.1 +NS2.HOTWIRED.com. 604800 IN A 209.185.151.6 +ns02.ca.us.ibm.net. 604800 IN A 165.87.201.243 +NS2.SPEAKEASY.net. 604800 IN A 216.231.41.22 +TELCOM.ZPTC.CO.ZW. 604800 IN A 194.133.122.47 +NS.DK-HOSTMASTER.DK. 604800 IN A 193.163.102.2 +NS.NIC.LK. 604800 IN A 192.248.1.65 +NS2.zama.net. 604800 IN A 203.142.130.5 +CZ.EUNET.CZ. 604800 IN A 193.85.3.130 +NS.AC.ID. 604800 IN A 202.159.124.34 +NS1.CUBE.de. 604800 IN A 212.162.54.243 +NS1.QUASAR.net. 604800 IN A 199.166.31.3 +NS1.OFFSHORE.AI. 604800 IN A 209.88.68.34 +NS5.NRSITE.com. 604800 IN A 208.178.169.4 +NS.AIC.net. 604800 IN A 195.250.64.65 +OWL.NCC.nps.GOV. 604800 IN A 165.83.34.60 +MAXIM.gbch.net. 604800 IN A 203.9.155.249 +BOW.INTNET.TD. 604800 IN A 193.251.147.253 +ns1.cacheware.com. 604800 IN A 64.221.210.242 +NS2.SPEEDHOST.com. 604800 IN A 216.42.31.169 +NS1.COMMIT.GM. 604800 IN A 63.77.152.177 +NAME.ROC.GBLX.net. 604800 IN A 209.130.187.10 +90.198.245.204.IN-ADDR.ARPA. 604800 IN PTR maus.spack.org. +BOLOGNA.NETTUNO.IT. 604800 IN A 193.43.2.5 +NIC.IBD.com. 604800 IN A 209.249.61.18 +NS.WESTOL.com. 604800 IN A 63.93.137.4 +time.SOVER.net. 604800 IN CNAME garnet.SOVER.net. +UNIX1.CS.UMASS.EDU. 604800 IN A 128.119.40.12 +AARDVARK.WR.UMIST.AC.UK. 604800 IN A 130.88.146.3 +AARDVARK.WR.UMIST.AC.UK. 604800 IN A 128.16.5.31 +NS1.NIC.YU. 604800 IN A 147.91.8.6 +mail.velco.com. 604800 IN A 198.136.217.106 +DNSAUTH2.SYS.GTEI.net. 604800 IN A 4.2.49.3 +NS.TELE.FI. 604800 IN A 193.210.19.19 +state.vt.us. 604800 IN MX 10 mx1.state.vt.us. +state.vt.us. 604800 IN MX 10 mx2.state.vt.us. +NS.NYC.juno.com. 604800 IN A 205.231.108.1 +NS1.g-world.com. 604800 IN A 216.26.39.10 +AUTH2.AMERICA.net. 604800 IN A 209.17.197.18 +KIRA.ECS.UMASS.EDU. 604800 IN A 128.119.91.10 +CONACYT.GOB.SV. 604800 IN A 168.243.64.2 +DNS.SRCE.HR. 604800 IN A 161.53.3.7 +NS00.ns0.com. 604800 IN A 216.92.60.60 +NS2.CL.BELLSOUTH.net. 604800 IN A 205.152.16.8 +jenner.med.HARVARD.EDU. 604800 IN A 134.174.141.2 +p2.cavebear.com. 604800 IN A 199.184.128.35 +NS1.NIC.JE. 604800 IN A 216.110.45.224 +ORCU.OR.BR.NP.ELS-GMS.att.net. 604800 IN A 199.191.129.139 +NS.XBILL.org. 604800 IN A 204.152.186.163 +WRAITH.CS.UOW.EDU.AU. 604800 IN A 130.130.64.1 +12.159.145.204.IN-ADDR.ARPA. 604800 IN PTR amethyst.xaos.org. +ns1.pr.SUN.com. 604800 IN A 192.18.16.2 +NS.SPIN.OMNES.net. 604800 IN A 192.23.90.196 +smtp.188.net. 604800 IN A 202.96.125.104 +TERMINAL.2GLOBE.net. 604800 IN A 195.178.183.230 +NS2.HARVARD.EDU. 604800 IN A 128.103.1.1 +NAMESERVER.CNR.IT. 604800 IN A 194.119.192.34 +EARTH.SY. 604800 IN A 195.22.198.6 +DNS2.REACCIUN.VE. 604800 IN A 150.188.4.212 +NS.TMX.COM.NI. 604800 IN A 205.218.253.2 +freefour.acs.rpi.EDU. 604800 IN A 128.113.24.91 +242.84.198.209.IN-ADDR.ARPA. 604800 IN PTR dlawren-gw.burl.sover.net. +CORREU.STA.AD. 604800 IN A 194.158.67.1 +NS.DRUKNET.NET.BT. 604800 IN A 202.144.128.200 +NS4.US.PRSERV.net. 604800 IN A 165.87.201.244 +KAASASSUK.GH.GL. 604800 IN A 194.177.232.3 +ECUA.NET.EC. 604800 IN A 157.100.1.2 +NS.CONCYT.GOB.GT. 604800 IN A 168.234.106.2 +NS2.NAP.net. 604800 IN A 206.54.224.1 +DNS2.CN.net. 604800 IN A 202.97.18.61 +MX.NSI.NASA.GOV. 604800 IN A 128.102.18.31 +NS.TDS.net. 604800 IN A 204.246.1.20 +tdns-me1.NETSCAPE.com. 604800 IN A 205.188.247.67 +NS2.METU.EDU.TR. 604800 IN A 144.122.199.93 +NS2.SETARNET.AW. 604800 IN A 206.48.100.11 +87.184.152.204.IN-ADDR.ARPA. 604800 IN PTR isrv3-i.isc.org. +DNS.OMNIWAY.SM. 604800 IN A 194.183.64.10 +NS0.U-NET.net. 604800 IN A 194.119.128.65 +elektro.CMHNET.org. 604800 IN A 192.188.133.3 +ns2.HIGGS.net. 604800 IN A 204.80.125.145 +NS2.SKYNETWEB.com. 604800 IN A 208.231.1.35 +MAGIC.MN. 604800 IN A 202.131.0.10 +NS1.YAHOO.com. 604800 IN A 204.71.200.33 +mx1.cdp.ADELPHIA.net. 604800 IN A 24.48.58.221 +SANTO.VANUATU.COM.VU. 604800 IN A 202.139.40.7 +www.mmuuf.org. 604800 IN MX 10 gro.dd.org. +ns1.timeheart.net. 604800 IN A 63.197.231.203 +NS2.TOGETHER.net. 604800 IN A 204.97.120.31 +NS.AMNIC.net. 604800 IN A 195.250.64.90 +NS.EENET.EE. 604800 IN A 193.40.56.245 +www.ONLINEPHOTOCONTEST.com. 604800 IN A 64.85.86.152 +VIC20.BLIPP.com. 604800 IN A 195.163.165.35 +DNS.FROGHOUSE.org. 604800 IN A 207.121.69.243 +NS2.ELI.net. 604800 IN A 207.173.86.2 +NS.CAIS.com. 604800 IN A 205.177.10.10 +BAABEN.AFRIQ.net. 604800 IN A 165.231.1.3 +NS2.NJ.EXODUS.net. 604800 IN A 209.1.10.234 +DOMREG.NIC.CH. 604800 IN A 130.59.1.80 +NS.EU.net. 604800 IN A 192.16.202.11 +NS1.DIEBOLD.net. 604800 IN A 65.196.80.10 +NS3.CP.net. 604800 IN A 209.228.14.4 +DNS.FUW.EDU.PL. 604800 IN A 193.0.80.11 +www.retro.com. 604800 IN A 205.179.181.195 +NS2.UNI2.net. 604800 IN A 195.82.195.99 +ns1.alcatrazmedia.com. 604800 IN A 167.160.132.2 +dns6.CP.MSFT.net. 604800 IN A 207.46.138.20 +NS1.SEYCHELLES.net. 604800 IN A 202.84.235.33 +NS2.INTERNIC.net. 604800 IN A 198.41.0.11 +front.macrosoft.WAW.PL. 604800 IN A 194.196.86.66 +NISC.JVNC.net. 604800 IN A 128.121.50.7 +AUTH03.NS.DE.UU.net. 604800 IN A 192.76.144.16 +BURDELL.CC.GATECH.EDU. 604800 IN A 130.207.3.207 +NS4.AH.net. 604800 IN A 203.21.205.20 +ns1.sgh-net.de. 604800 IN A 212.86.129.142 +Leland2.stanford.EDU. 604800 IN A 171.64.14.58 +CBRU.BR.NS.ELS-GMS.att.net. 604800 IN A 199.191.128.105 +DENEB.DOMAINNT.net. 604800 IN A 207.211.220.90 +ns1.ivm.net. 604800 IN A 62.204.1.1 +NS0.CWCI.net. 604800 IN A 194.6.79.162 +35.110.16.12.IN-ADDR.ARPA. 604800 IN CNAME 35.32/27.110.16.12.IN-ADDR.ARPA. +f.trns. 604800 IN A 209.133.38.16 +ODISEJ.TELEKOM.YU. 604800 IN A 195.178.32.2 +FRCU.EUN.EG. 604800 IN A 193.227.1.1 +NS.HHS.net. 604800 IN A 63.93.136.29 +FOO.GRNET.GR. 604800 IN A 194.177.210.211 +mail.WonderWorks.com. 604800 IN A 192.203.206.67 +NS1.IAFRICA.com. 604800 IN A 196.7.0.139 +NS.KACST.EDU.SA. 604800 IN A 212.26.44.3 +srs.state.vt.us. 604800 IN A 159.105.101.150 +OM4.OMANTEL.NET.OM. 604800 IN A 206.49.101.5 +Yeshua.Christ.com. 604800 IN A 207.54.4.5 +NS1.SIMORGH.com. 604800 IN A 209.1.163.10 +OLKETA.SOLOMON.COM.SB. 604800 IN A 202.139.42.4 +BANBA.DOMAINREGISTRY.IE. 604800 IN A 193.1.142.2 +NOC.IOS.com. 604800 IN A 198.4.75.69 +ns.schnism.net. 604800 IN A 195.88.150.3 +e4.ny.us.IBM.com. 604800 IN A 32.97.182.104 +DNS2.SEANET.com. 604800 IN A 199.181.164.2 +doubt.dd.org. 604800 IN A 209.198.103.193 +AMBER.ELEKTRON.PL. 604800 IN A 195.117.6.10 +gw.rge.com. 604800 IN A 157.225.178.11 +NS2.ZTNET.com. 604800 IN A 63.211.17.252 +NS3.INFI.net. 604800 IN A 205.219.239.5 +ZA.AKADNS.net. 604800 IN A 209.185.188.39 +ESTIA.CSI.FORTH.GR. 604800 IN A 139.91.191.3 +vtagr04.agr.state.vt.us. 604800 IN A 159.105.50.4 +NS1-PUBLIC.ZTX.COMPAQ.com. 604800 IN A 161.114.1.204 +ADMII.ARL.MIL. 604800 IN A 128.63.31.4 +ADMII.ARL.MIL. 604800 IN A 128.63.5.4 +NS.NIXU.FI. 604800 IN A 193.209.237.29 +DNS2.PIONEERNET.net. 604800 IN A 208.240.196.10 +NS.NIC.CL. 604800 IN A 146.83.4.11 +NS2.UTZ. 604800 IN A 160.124.112.10 +NS4.LUXNOC.com. 604800 IN A 195.206.104.201 +NS2.PBI.net. 604800 IN A 206.13.29.11 +annwfn.erfurt.thur.de. 604800 IN A 194.122.210.3 +NS1.MW.mediaone.net. 604800 IN A 24.131.1.8 +NS1.ISU.NET.SA. 604800 IN A 212.26.18.3 +pop.SHOREHAM.net. 604800 IN CNAME SHOREHAM.net. +DNS2.GUERNSEY.net. 604800 IN A 195.226.128.3 +NS1.BEACHSHORE.net. 604800 IN A 199.166.31.250 +HKUXB.HKU.HK. 604800 IN A 147.8.16.15 +NS.DOLEH.com. 604800 IN A 204.255.25.63 +NS.hactrn.net. 604800 IN A 216.254.68.12 +MALAKULA.BONDY.IRD.FR. 604800 IN A 193.50.53.1 +NS1.mediaone.net. 604800 IN A 24.128.1.80 +NS2.GPG.com. 604800 IN A 209.1.163.50 +noc.BelWue.de. 604800 IN A 129.143.2.1 +NS2.GIP.net. 604800 IN A 204.59.1.222 +RS.ISLES.net. 604800 IN A 212.100.224.90 +BOW.INTNET.GQ. 604800 IN A 195.101.152.253 +A.OPEN.BY. 604800 IN A 194.226.121.36 +us.i1.YIMG.com. 604800 IN CNAME a1.g.a.YIMG.com. +athome.wetlogic.net. 604800 IN CNAME c1059495-a.snvl1.sfba.home.com. +NS1.NIST.GOV. 604800 IN A 129.6.13.2 +mail.jerusalem-mail.com. 604800 IN A 216.251.232.93 +ISDSUN.cr.USGS.GOV. 604800 IN A 136.177.16.3 +NS.BOSTON.juno.com. 604800 IN A 64.136.25.53 +NS2.CADABRA.com. 604800 IN A 209.157.194.109 +nps.GOV. 604800 IN MX 10 ccmail2.itd.nps.GOV. +nps.GOV. 604800 IN MX 5 ccmail.itd.nps.GOV. +RELAY.HUJI.AC.IL. 604800 IN A 128.139.6.1 +styx.tahina.priv.at. 604800 IN A 194.152.163.253 +ISGATE.IS. 604800 IN A 193.4.58.51 +ns0.lux.dot-eu.org. 604800 IN A 195.206.105.102 +BILBO.NASK.ORG.PL. 604800 IN A 195.187.245.51 +BILBO.NASK.ORG.PL. 604800 IN A 148.81.16.51 +MAIL.TARSUS.com. 604800 IN A 208.130.9.252 +SUN.REDIRIS.ES. 604800 IN A 130.206.1.2 +NS2.NEASE.net. 604800 IN A 202.103.134.4 +OHCU.OH.MT.NP.ELS-GMS.att.net. 604800 IN A 199.191.144.75 +NS2.NF. 604800 IN A 203.12.249.101 +MIRAF-SERVER3.HONDUTEL.HN. 604800 IN A 206.48.104.142 +ns3.worldnet.att.net. 604800 IN A 204.127.160.1 +NS2.NETNAMES.net. 604800 IN A 212.53.77.28 +ITGBOX.IAT.CNR.IT. 604800 IN A 146.48.65.46 +NS2.ADELPHIA.net. 604800 IN A 24.48.62.35 +NS2.RIPN.net. 604800 IN A 195.209.0.6 +NS1.cinenet.net. 604800 IN A 198.147.76.65 +jengate.thur.de. 604800 IN A 193.174.15.34 +NOC.ULCC.JA.net. 604800 IN A 193.63.94.25 +NS.NOC.UZ. 604800 IN A 194.67.52.42 +NS0.JA.net. 604800 IN A 128.86.1.20 +NS0.JA.net. 604800 IN A 193.63.94.20 +NS2.INR.net. 604800 IN A 198.77.208.3 +netsage.org. 604800 IN A 209.67.235.38 +TERI.USP.AC.FJ. 604800 IN A 144.120.8.1 +NS2.NETSOL.com. 604800 IN A 198.17.208.71 +NS2.ABAC.com. 604800 IN A 216.55.144.4 +NS2.NIC.FR. 604800 IN A 192.93.0.4 +KANIN.ARNES.SI. 604800 IN A 193.2.1.66 +NS.EDU.GU. 604800 IN A 168.123.2.50 +DNS.INRIA.FR. 604800 IN A 193.51.208.13 +HEDNS1.GOOGLE.com. 604800 IN A 64.209.200.10 +asylum.sf.ca.us. 604800 IN A 192.48.232.17 +ACT2.ACT2000.net. 604800 IN A 207.42.132.227 +ICM1.ICP.net. 604800 IN A 192.94.207.66 +202.192.103.198.209.IN-ADDR.ARPA. 604800 IN PTR fraud.dd.org. +ECSEL.jhuapl.EDU. 604800 IN A 128.244.65.29 +NS2.DCNY.DOUBLECLICK.net. 604800 IN A 204.253.104.10 +keith.netsage.org. 604800 IN A 209.67.235.37 +MANTA.OUTREMER.com. 604800 IN A 213.16.1.106 +NS2.globalnetisp.net. 604800 IN A 207.136.213.2 +NS2.CCSRS.net. 604800 IN A 206.253.214.73 +NS1.NL.CONCENTRIC.com. 604800 IN A 195.18.114.5 +NS2.VI.net. 604800 IN A 212.78.64.10 +NS2.NEO.net. 604800 IN A 206.109.7.65 +cgi.MERCURYCENTER.com. 604800 IN CNAME vh80167.vh8.infi.net. +ORSTOM.RIO.net. 604800 IN A 192.33.151.1 +NS2.CONRADPROMOTIONS.com. 604800 IN A 208.24.118.203 +YARRINA.CONNECT.COM.AU. 604800 IN A 192.189.54.17 +dns03.OPS.usa.net. 604800 IN A 204.68.24.136 +APPSRV.HAITIWORLD.com. 604800 IN A 206.152.15.34 +NS.RELCOM.KZ. 604800 IN A 212.110.240.65 +NS1.MAGIC-MOMENTS.com. 604800 IN A 195.224.53.80 +NS.ALCATEL.com. 604800 IN A 192.160.6.91 +ns2.terra.net. 604800 IN A 199.103.128.2 +NS3.hotmail.com. 604800 IN A 209.185.130.68 +vtc.VSC.EDU. 604800 IN MX 0 eve.vtc.VSC.EDU. +www.vmba.org. 604800 IN MX 10 gro.dd.org. +NAHOURI.ONATEL.BF. 604800 IN A 206.82.130.195 +SERVER2.INFN.IT. 604800 IN A 131.154.1.3 +NS2.AI-R.com. 604800 IN A 66.33.4.51 +NS1.FREE.net. 604800 IN A 147.45.15.34 +vcmr-54.server.rpi.EDU. 604800 IN A 128.113.113.44 +haig.CS.UCL.AC.UK. 604800 IN A 128.16.6.8 +mail.nova-data.com. 604800 IN A 12.16.110.35 +MOEVAX.EDU.TW. 604800 IN A 140.111.1.2 +NS2.LTWCC.org. 604800 IN A 12.33.66.62 +NS.BA. 604800 IN A 195.130.35.5 +noc.HRZ.uni-bielefeld.de. 604800 IN A 129.70.5.16 +VANILLA.WRO.nps.GOV. 604800 IN A 165.83.71.3 +NS2.SZTAKI.HU. 604800 IN A 193.225.86.1 +SECIU.EDU.UY. 604800 IN A 164.73.128.5 +COL2.CARIBSURF.com. 604800 IN A 205.214.192.202 +NS2.QATAR.NET.QA. 604800 IN A 212.77.192.13 +NS2.E-SYNC.net. 604800 IN A 192.206.57.128 +ns1.eu.SUN.com. 604800 IN A 192.18.240.8 +NS1.UUSJ.DOUBLECLICK.net. 604800 IN A 204.176.177.10 +NS2.CUHK.EDU.HK. 604800 IN A 137.189.6.21 +NS1.MEITCA.com. 604800 IN A 137.203.5.1 +NS2.DSL.net. 604800 IN A 209.87.79.232 +techfac.techfak.uni-bielefeld.de. 604800 IN A 129.70.132.100 +listserv.performancediver.com. 604800 IN A 216.34.185.155 +foolusmf.D4P.net. 604800 IN CNAME a100.g.akamai.net. +pedic-med.vrx.net. 604800 IN A 199.166.24.2 +GRUMPY.NET.NA. 604800 IN A 196.20.23.1 +BK.tifosi.com. 604800 IN A 208.58.189.13 +ns3.PAIR.com. 604800 IN A 209.68.1.15 +ns2.ar.com. 604800 IN A 64.124.80.42 +MASSIRA.ONPT.NET.MA. 604800 IN A 206.103.26.1 +NS.KBFI.EE. 604800 IN A 192.121.251.13 +ns3.Algebra.com. 604800 IN A 216.254.54.22 +faerber.muc.de. 604800 IN MX 10 slarti.muc.de. +9.206.203.192.IN-ADDR.ARPA. 604800 IN PTR ice.WonderWorks.COM. +PUKU.UNZA.ZM. 604800 IN A 196.7.240.1 +ATLNET.ATLONLINE.com. 604800 IN A 207.153.72.193 +Z1.NS.NYC1.GLOBIX.net. 604800 IN A 209.10.66.55 +www.hometownbands.com. 604800 IN A 209.67.235.38 +SIMON.CS.CORNELL.EDU. 604800 IN A 128.84.154.10 +EKEKO.RCPIP.net. 604800 IN A 209.45.127.2 +emerald.itnet.com.PL. 604800 IN A 195.116.64.3 +DNS1.ICS.FORTH.GR. 604800 IN A 139.91.151.70 +NS.ATL.BELLSOUTH.net. 604800 IN A 205.152.0.20 +ntp.ctr.COLUMBIA.EDU. 604800 IN CNAME sirius.ctr.COLUMBIA.EDU. +NS2.GLOBECOMM.net. 604800 IN A 165.251.1.3 +UUNS1DNS1.FLONETWORK.com. 604800 IN A 209.167.79.5 +GRIN.GNOSH.net. 604800 IN A 216.15.87.207 +NS.DIGSYS.BG. 604800 IN A 192.92.129.1 +uunet.UU.net. 604800 IN MX 10 Mail.UU.net. +ns1.vermontel.com. 604800 IN A 204.164.106.2 +NS2.GREENMOUNTAINACCESS.net. 604800 IN A 208.144.252.31 +38.241.5.198.IN-ADDR.ARPA. 604800 IN PTR cmr0.ash.ops.us.uu.net. +NS1.NIC.UK. 604800 IN A 195.66.240.130 +DNS.FCCN.PT. 604800 IN A 193.136.192.10 +NS2.NIC.TJ. 604800 IN A 209.77.224.1 +NS4.NEWACCOUNT.com. 604800 IN A 209.78.16.6 +NS2.IHUG.NET.NZ. 604800 IN A 203.29.160.2 +NS.SIGNALZ.com. 604800 IN A 209.67.230.71 +DNS.NIC.AD. 604800 IN A 194.158.67.251 +3.2.39.137.IN-ADDR.ARPA. 604800 IN PTR New-York4.NY.ALTER.NET. +UUCP-GW-2.PA.DEC.com. 604800 IN A 16.1.0.19 +NS.LANDLORDS.com. 604800 IN A 63.64.164.68 +NS2.EXODUS.net. 604800 IN A 207.82.198.150 +NS2.SCRUZ.net. 604800 IN A 165.227.2.10 +NS.PIPEX-SZ.net. 604800 IN A 196.15.232.19 +saturn.SUN.com. 604800 IN A 192.9.25.2 +e24.nc.us.IBM.com. 604800 IN A 32.97.136.230 +NMS.CYFRONET.KRAKOW.PL. 604800 IN A 149.156.1.3 +NS.TWNIC.net. 604800 IN A 192.83.166.11 +ns2.alcatel.NO. 604800 IN A 193.213.238.2 +INPAKSODNS.AKSO.nps.GOV. 604800 IN A 165.83.49.9 +mail.reptiles.org. 604800 IN A 198.96.117.157 +59.187.152.204.IN-ADDR.ARPA. 604800 IN PTR shell.nominum.com. +ns1.mobydark.com. 604800 IN A 216.13.76.21 +NS.KG. 604800 IN A 195.38.160.36 +NS.SPB.SU. 604800 IN A 193.124.83.69 +PENDRAGON.CS.PURDUE.EDU. 604800 IN A 128.10.2.5 +NS1.IGC.APC.org. 604800 IN A 192.82.108.38 +USDNS.NIC.us. 604800 IN A 198.41.3.87 +NS2.WEBTRENDS.com. 604800 IN A 63.88.212.11 +URANUS.DAIMI.AAU.DK. 604800 IN A 130.225.16.40 +ANTANA.IRD.MG. 604800 IN A 194.214.107.1 +NS.JERSEY.juno.com. 604800 IN A 64.136.17.178 +NS2.INTERNET-TOOLS.com. 604800 IN A 206.109.113.140 +ns-tk012.ocn.AD.JP. 604800 IN A 203.139.160.74 +bvt-ext.gdarm.com. 604800 IN A 166.19.32.42 +NS1.ID. 604800 IN A 202.155.30.227 +NS2.MAHNET.net. 604800 IN A 207.219.173.132 +NS.ALCANET.COM.AU. 604800 IN A 203.62.196.10 +UTAMA.BOLNET.BO. 604800 IN A 166.114.1.40 +NS.CNC.AC.CN. 604800 IN A 159.226.1.1 +NS.KREN.NE.KR. 604800 IN A 147.47.1.1 +NS1.REDHAT.com. 604800 IN A 216.148.218.250 +db.rc.VIX.com. 604800 IN A 204.152.187.21 +198.103.198.209.IN-ADDR.ARPA. 604800 IN CNAME 198.192.103.198.209.IN-ADDR.ARPA. +alf.pbks.PL. 604800 IN A 195.205.33.200 +FLAG.EP.net. 604800 IN A 198.32.4.13 +DNS2.IUNET.IT. 604800 IN A 192.106.1.31 +NS2.QUANTIFIED.net. 604800 IN A 63.212.171.3 +INTERNET-SERVER.ZURICH.IBM.com. 604800 IN A 195.212.119.252 +seaipsvcs.idx.com. 604800 IN A 172.22.64.42 +lebanon.valley.net. 604800 IN A 198.115.160.16 +SERVER.NORDU.net. 604800 IN A 193.10.252.19 +NS.NIC.DO. 604800 IN A 207.176.16.50 +isc-01.iscvt.org. 604800 IN A 207.136.209.131 +NAC.NO. 604800 IN A 129.240.2.40 +SAVA.UTIC.NET.BA. 604800 IN A 195.130.35.3 +NS1.TOKYO.JP.NETDNS.com. 604800 IN A 64.56.164.118 +NETSERV2.ITS.rpi.EDU. 604800 IN A 128.113.1.3 +IFI.UIO.NO. 604800 IN A 129.240.64.2 +www.TOAPLAN.com. 604800 IN A 216.42.31.169 +ns2.the-frontier.org. 604800 IN A 216.86.199.115 +NS.UNAM.MX. 604800 IN A 132.248.253.1 +ARISTO.TAU.AC.IL. 604800 IN A 132.66.32.10 +DNS.CS.WISC.EDU. 604800 IN A 128.105.2.10 +NS1.NIC.IR. 604800 IN A 194.225.70.83 +NS1.RETINA.AR. 604800 IN A 200.10.202.3 +mailer.connriver.net. 604800 IN A 63.93.137.13 +NS.ATI.TN. 604800 IN A 193.95.66.10 +NS2.CLEAR.NET.NZ. 604800 IN A 203.97.37.14 +NS4.EARTHLINK.net. 604800 IN A 209.179.179.19 +mejac.palo-alto.ca.us. 604800 IN A 192.147.236.1 +New-York4.NY.ALTER.net. 604800 IN A 137.39.2.3 +New-York4.NY.ALTER.net. 604800 IN A 137.39.126.10 +falcon.tallship.net. 604800 IN A 208.179.112.2 +ZEUS.CC.UCY.AC.CY. 604800 IN A 194.42.1.1 +NS2.SECURE.net. 604800 IN A 161.58.9.10 +NS0.FLIRBLE.org. 604800 IN A 195.40.6.20 +dns.zenon.net. 604800 IN A 195.2.83.107 +SERVIDOR.MICROASTUR.ES. 604800 IN A 195.76.178.5 +DOWNSTAGE.MCS.VUW.AC.NZ. 604800 IN A 130.195.6.10 +ns2.GNAC.com. 604800 IN A 209.182.195.77 +PRIFI.EUNET.FI. 604800 IN A 193.66.1.146 +ns2.k12.vt.us. 604800 IN A 170.222.64.130 +ns2.nic.mnet. 604800 IN A 208.109.83.110 +NS0.PIPEX.net. 604800 IN A 158.43.128.8 +NS1.SANFRANCISCO.US.NETDNS.com. 604800 IN A 207.82.50.166 +AMRA.NIC.GOV.JO. 604800 IN A 193.188.66.103 +kw.com.CN. 604800 IN MX 15 mail2.kw.com.CN. +SHNS.163.net. 604800 IN A 61.129.65.108 +NS.ER.USGS.GOV. 604800 IN A 130.11.48.2 +FAITH.MYNET.net. 604800 IN A 207.13.11.2 +mail.smuggs.com. 604800 IN A 209.67.230.71 +MIMOS.MY. 604800 IN A 192.228.128.18 +NS.GU. 604800 IN A 168.123.4.10 +mx00.schlund.de. 604800 IN A 195.20.224.67 +mx00.schlund.de. 604800 IN A 195.20.224.68 +mx00.schlund.de. 604800 IN A 195.20.224.130 +mx00.schlund.de. 604800 IN A 195.20.224.152 +mx00.schlund.de. 604800 IN A 195.20.224.198 +CADDSYS.IPTEK.net. 604800 IN A 202.46.1.2 +NS0.TELIA.NIC.NU. 604800 IN A 212.181.91.4 +NS2.GRANITECANYON.com. 604800 IN A 204.1.217.148 +GATEKEEPER.corning.com. 604800 IN A 149.42.1.2 +NS2.2DAY.com. 604800 IN A 202.89.128.74 +1.0.0.127.IN-ADDR.ARPA. 604800 IN PTR localhost. +RAIN.PSG.com. 604800 IN A 147.28.0.34 +STRAWB.MIT.EDU. 604800 IN A 18.71.0.151 +NS2.DIGISERVE.com. 604800 IN A 204.91.84.216 +UMACSN2.UMAC.MO. 604800 IN A 161.64.3.2 +NS.JM. 604800 IN A 196.2.1.6 +12.153.66.206.IN-ADDR.ARPA. 604800 IN PTR d.dd.org. +EAST.ISI.EDU. 604800 IN A 38.245.76.2 +NS2.UUNET.CA. 604800 IN A 142.77.1.5 +SUNNY.STAT-USA.GOV. 604800 IN A 192.239.70.8 +BOW.INTNET.CF. 604800 IN A 194.206.73.253 +NS4.TELE.DK. 604800 IN A 194.239.134.84 +NS2.sodak.net. 604800 IN A 63.65.239.225 +NS1.NEWYORK.US.NETDNS.com. 604800 IN A 216.32.212.86 +NS2.PSI.net. 604800 IN A 38.8.50.2 +NS.KREONET.RE.KR. 604800 IN A 134.75.30.1 +GIANT.MINDLINK.net. 604800 IN A 204.174.18.2 +NS0.SECTOR001.org. 604800 IN A 24.4.49.117 +DNS.SEABONE.net. 604800 IN A 195.22.205.163 +NS2.MANA.PF. 604800 IN A 202.3.225.20 +NRWEB.CENPAC.NET.NR. 604800 IN A 203.98.224.66 +www.TRAVELPHOTOCONTESTS.com. 604800 IN A 64.85.86.156 +NS1.REGEX.com. 604800 IN A 202.152.12.227 +BIGBIRD.ITD.nps.GOV. 604800 IN A 165.83.208.5 +CUNIXD.CC.COLUMBIA.EDU. 604800 IN A 128.59.35.142 +NS1.CLASSIFIEDMONSTER.com. 604800 IN A 216.254.54.22 +SERVER1.SANS.org. 604800 IN A 167.216.133.33 +BRONZE.COIL.com. 604800 IN A 198.4.94.1 +SCSNMS.SWITCH.CH. 604800 IN A 130.59.1.30 +SCSNMS.SWITCH.CH. 604800 IN A 130.59.10.30 +SCE.CNC.UNA.PY. 604800 IN A 200.10.228.133 +RELAY.LA.TIS.com. 604800 IN A 198.51.22.11 +NS.AUSTIN.IBM.com. 604800 IN A 192.35.232.34 +SERVICE.robert-morris.EDU. 604800 IN A 205.146.48.22 +MERCURY.ML.org. 604800 IN A 209.68.0.85 +proxy.pccf.net. 604800 IN A 205.189.73.123 +DUB-NAME-SVC-1.compuserve.com. 604800 IN A 149.174.213.5 +NS.CNRI.reston.va.us. 604800 IN A 132.151.1.1 +NS.UCAD.SN. 604800 IN A 196.1.95.1 +ns01.ny.us.ibm.net. 604800 IN A 165.87.194.244 +NS4-AUTH.ALASKA.net. 604800 IN A 209.112.130.4 +BOW.INTNET.NE. 604800 IN A 194.51.164.253 +NS-JP.SINET.AD.JP. 604800 IN A 150.100.2.3 +ns.musin.de. 604800 IN A 194.113.40.45 +ip1.romkey.SEG.net. 604800 IN A 207.121.69.234 +DNS2.ITD.UMICH.EDU. 604800 IN A 141.211.125.15 +mail.rpi.EDU. 604800 IN A 128.113.100.7 +INECO.NIC.ES. 604800 IN A 194.69.254.2 +DNS2.FIREHOUSE.net. 604800 IN A 63.160.175.18 +BOW.INTNET.BJ. 604800 IN A 194.51.163.253 +sundown.vtc.VSC.EDU. 604800 IN A 155.42.12.12 +NIC.AIX.GR. 604800 IN A 195.130.89.210 +NIC.AD.JP. 604800 IN A 202.12.30.33 +NS.DC.IGC.org. 604800 IN A 199.75.208.10 +LHR.NS.GDNS.net. 604800 IN A 212.250.25.101 +NS2.WEBMAGIC.net. 604800 IN A 64.168.49.66 +MUNNARI.OZ.AU. 604800 IN A 128.250.1.21 +HIPPO.RU.AC.ZA. 604800 IN A 146.231.128.1 +PEBBLES.IOM.com. 604800 IN A 194.72.124.1 +penpal.dmz.RPSLMC.EDU. 604800 IN A 144.74.60.151 +netnews.HINET.net. 604800 IN A 168.95.195.16 +INS2.TOSA.TWTELECOM.net. 604800 IN A 204.95.160.4 +proxy6.cisco.com. 604800 IN A 203.41.198.245 +NS2.HOST4U.net. 604800 IN A 209.150.129.3 +POIPARAU.OYSTER.NET.CK. 604800 IN A 202.65.32.127 +NS-EXT.VIX.com. 604800 IN A 204.152.184.64 +NS2.NURSAT.net. 604800 IN A 212.13.167.1 +mail2.kw.com.CN. 604800 IN A 159.226.25.8 +NS-02B.ANS.net. 604800 IN A 207.24.245.178 +DNS.RCCN.net. 604800 IN A 193.136.7.17 +B.ROOT-SERVERS.ORSC. 604800 IN A 216.13.126.116 +FIREHOUSE.net. 604800 IN A 63.160.175.19 diff --git a/bin/tests/system/cacheclean/ns1/example.db b/bin/tests/system/cacheclean/ns1/example.db new file mode 100644 index 0000000..54db5a1 --- /dev/null +++ b/bin/tests/system/cacheclean/ns1/example.db @@ -0,0 +1,2950 @@ +; Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +; Copyright (C) 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. + +; $Id: example.db,v 1.5 2007/06/19 23:47:00 tbox Exp $ + +$TTL 999999 +$ORIGIN . +. IN SOA hostmaster.nominum.com. a.root-servers.nil. ( + 2000042100 + 600 + 600 + 1200 + 600 + ) +. NS a.root-servers.nil. +a.root-servers.nil IN A 10.53.0.1 +localhost IN A 127.0.0.1 +$ORIGIN NIC.AC. +NS IN A 194.205.62.120 +$ORIGIN AD. +DNS2 IN A 194.158.64.8 +DINIS IN A 194.158.64.7 +$ORIGIN NIC.AD. +DNS IN A 194.158.67.251 +$ORIGIN STA.AD. +CORREU IN A 194.158.67.1 +$ORIGIN EMIRATES.NET.AE. +NS2 IN A 194.170.1.7 +NS1 IN A 194.170.1.6 +$ORIGIN BA. +NS IN A 195.130.35.5 +$ORIGIN UTIC.NET.BA. +SAVA IN A 195.130.35.3 +$ORIGIN OFFSHORE.AI. +NS1 IN A 209.88.68.34 +$ORIGIN BD. +DNS1 IN A 209.58.24.5 +DNS IN A 209.58.24.3 +$ORIGIN MENTOR.BE. +APHEX IN A 193.121.64.5 +$ORIGIN EUNET.BE. +SECDNS IN A 193.74.208.139 +$ORIGIN BELNET.BE. +NS IN A 193.190.198.10 + IN A 193.190.198.2 +$ORIGIN DNS.BE. +MASTER IN A 194.7.171.243 +$ORIGIN CS.KULEUVEN.AC.BE. +DNS IN A 134.58.40.4 +$ORIGIN CURINFO.AN. +NS01-SERVER IN A 200.44.117.129 +KADUSHI IN A 200.44.117.130 +$ORIGIN ONATEL.BF. +NAHOURI IN A 206.82.130.195 +$ORIGIN DIGSYS.BG. +NS IN A 192.92.129.1 +$ORIGIN BATELCO.COM.BH. +SV10 IN A 193.188.124.227 +NS2 IN A 193.188.97.212 +NS IN A 193.188.97.197 +$ORIGIN UTORONTO.CA. +ns2 IN A 128.100.102.202 +ns1 IN A 128.100.100.129 +chime IN A 128.100.102.201 +$ORIGIN cs.UTORONTO.CA. +bay IN A 128.100.1.1 +$ORIGIN UTCC.UTORONTO.CA. +DNS2 IN A 128.100.102.201 +$ORIGIN UUNET.CA. +NS2 IN A 142.77.1.5 +NS IN A 142.77.1.1 +$ORIGIN CIRA.CA. +MERLE IN A 64.26.149.98 +$ORIGIN cmc.ec.gc.CA. +castor IN A 142.135.4.14 +$ORIGIN RISQ.QC.CA. +CLOUSO IN A 192.26.210.1 +$ORIGIN MBNET.MB.CA. +ACCESS IN A 130.179.16.143 +$ORIGIN CDNNET.CA. +RELAY IN A 192.73.5.1 +$ORIGIN uwaterloo.CA. +ns2 IN A 129.97.128.100 +math IN A 129.97.140.144 + IN A 129.97.216.42 + IN MX 0 math.uwaterloo.ca. +ns1 IN A 129.97.128.10 +$ORIGIN AR. +CTINA IN A 200.16.97.17 +ATHEA IN A 200.16.98.2 +$ORIGIN NIC.AR. +TULKU IN A 200.16.97.77 +$ORIGIN RETINA.AR. +NS1 IN A 200.10.202.3 +$ORIGIN INTNET.BJ. +BOW IN A 194.51.163.253 +$ORIGIN NIC.CD. +DNS IN A 194.38.74.11 +$ORIGIN tahina.priv.at. +styx IN A 194.152.163.253 +$ORIGIN UNIVIE.AC.at. +NS2 IN A 193.171.255.66 +NS7 IN A 194.246.96.192 +NS1 IN A 193.171.255.2 +$ORIGIN OZ.AU. +MUNNARI IN A 128.250.1.21 +$ORIGIN CS.MU.OZ.AU. +MULGA IN A 128.250.1.22 + IN A 128.250.37.150 +$ORIGIN AARNET.EDU.AU. +JATZ IN A 139.130.204.4 +$ORIGIN ANU.EDU.AU. +CHEOPS IN A 150.203.224.24 +$ORIGIN CS.UOW.EDU.AU. +WRAITH IN A 130.130.64.1 +$ORIGIN ALCANET.COM.AU. +NS IN A 203.62.196.10 +$ORIGIN CONNECT.COM.AU. +YARRINA IN A 192.189.54.17 +$ORIGIN IBL.BM. +NS1 IN A 199.172.192.1 +$ORIGIN BRUNET.BN. +JTB IN A 202.160.8.2 +$ORIGIN INTNET.CF. +BOW IN A 194.206.73.253 +$ORIGIN SETARNET.AW. +NS2 IN A 206.48.100.11 +NS1 IN A 206.48.100.5 +$ORIGIN BOLNET.BO. +UTAMA IN A 166.114.1.40 +$ORIGIN SWITCH.CH. +SCSNMS IN A 130.59.1.30 + IN A 130.59.10.30 +MERAPI IN A 130.59.211.10 +$ORIGIN ITU.CH. +NS IN A 156.106.192.121 +$ORIGIN NIC.CH. +DOMREG IN A 130.59.1.80 +$ORIGIN ip6.INT. +z IN A 198.32.2.66 + IN AAAA 3ffe:0:1::c60:242 +$ORIGIN DNS.BR. +NS2 IN A 200.19.119.99 +NS1 IN A 200.255.253.234 +NS IN A 143.108.23.2 +$ORIGIN OYSTER.NET.CK. +POIPARAU IN A 202.65.32.127 +PARAU IN A 202.65.32.128 +$ORIGIN DRUKNET.NET.BT. +NS IN A 202.144.128.200 +$ORIGIN DCC.UCHILE.CL. +NS IN A 146.83.5.204 +$ORIGIN NIC.CL. +NS IN A 146.83.4.11 +$ORIGIN FIRSTCOM.CL. +NS IN A 200.27.2.2 +$ORIGIN EDU. +ISI IN A 128.9.176.32 +UMASS IN MX 20 vcmr-54.server.rpi.edu. + IN MX 1 mail.rpi.edu. +dartmouth IN A 129.170.16.6 + IN MX 10 donner.dartmouth.edu. + IN MX 10 prancer.dartmouth.edu. + IN MX 10 vixen.dartmouth.edu. + IN MX 10 blitzen.dartmouth.edu. + IN MX 0 mailhub.dartmouth.edu. + IN MX 10 dasher.dartmouth.edu. +rush IN MX 30 penpal.dmz.rpslmc.edu. + IN MX 10 detox.cc1.rpslmc.edu. + IN MX 20 rush.cc1.rpslmc.edu. +NYU IN A 128.122.253.92 +GATECH IN A 130.207.244.244 +ARIZONA IN A 128.196.128.233 +stanford IN A 171.64.14.120 + IN MX 20 Leland.stanford.edu. + IN MX 20 Leland2.stanford.edu. + IN MX 20 Leland3.stanford.edu. +$ORIGIN jhuapl.EDU. +ECSEL IN A 128.244.65.29 +APLDNS2 IN A 128.244.194.100 +ABACUS IN A 128.244.197.32 +$ORIGIN MIT.EDU. +STRAWB IN A 18.71.0.151 +W20NS IN A 18.70.0.160 +BITSY IN A 18.72.0.3 +$ORIGIN ITD.UMICH.EDU. +DNS2 IN A 141.211.125.15 +$ORIGIN ISI.EDU. +EAST IN A 38.245.76.2 +VENERA IN A 128.9.176.32 +NS IN A 128.9.128.127 +$ORIGIN CS.PURDUE.EDU. +PENDRAGON IN A 128.10.2.5 +$ORIGIN CS.WISC.EDU. +DNS IN A 128.105.2.10 +$ORIGIN UMD.EDU. +TRANTOR IN A 128.8.10.14 +$ORIGIN RPSLMC.EDU. +THUMPER IN A 144.74.22.8 +$ORIGIN dmz.RPSLMC.EDU. +penpal IN A 144.74.60.151 +$ORIGIN cc1.RPSLMC.EDU. +rush IN A 144.74.150.23 +detox IN A 144.74.150.44 +$ORIGIN IS.RPSLMC.EDU. +SUNSTROKE IN A 144.74.21.8 +$ORIGIN VSC.EDU. +vtc IN MX 0 eve.vtc.vsc.edu. +MAZE IN A 155.42.1.89 +ENIGMA IN A 155.42.1.7 +$ORIGIN vtc.VSC.EDU. +sundown IN A 155.42.12.12 +eve IN A 155.42.12.102 +$ORIGIN UMASS.EDU. +NS1 IN A 128.119.166.14 +NIC IN A 128.119.175.14 +$ORIGIN oit.UMASS.EDU. +supai IN A 128.119.175.6 +ponzi IN A 128.119.166.18 +$ORIGIN ECS.UMASS.EDU. +KIRA IN A 128.119.91.10 +$ORIGIN CS.UMASS.EDU. +UNIX1 IN A 128.119.40.12 +$ORIGIN UPR.CLU.EDU. +UPR1 IN A 136.145.1.4 +$ORIGIN PRINCETON.EDU. +DNS IN A 128.112.129.15 +$ORIGIN rpi.EDU. +mail IN A 128.113.100.7 +$ORIGIN server.rpi.EDU. +vcmr-54 IN A 128.113.113.44 +$ORIGIN acs.rpi.EDU. +freefour IN A 128.113.24.91 +$ORIGIN ITS.rpi.EDU. +NETSERV2 IN A 128.113.1.3 +NETSERV1 IN A 128.113.1.5 +$ORIGIN uvm.EDU. +NS1 IN A 132.198.201.10 +NS2 IN A 132.198.202.10 +$ORIGIN dartmouth.EDU. +dasher IN A 129.170.208.6 +mailhub IN A 129.170.16.6 +donner IN A 129.170.208.3 +prancer IN A 129.170.208.2 +vixen IN A 129.170.208.15 +NS1 IN A 129.170.17.4 +blitzen IN A 129.170.208.4 +NS2 IN A 129.170.16.4 +$ORIGIN middlebury.EDU. +CATAMOUNT IN A 140.233.2.204 +LION IN A 140.233.1.4 +$ORIGIN CIT.CORNELL.EDU. +DNS IN A 192.35.82.50 +$ORIGIN CS.CORNELL.EDU. +SIMON IN A 128.84.154.10 +$ORIGIN BERKELEY.EDU. +NS2 IN A 128.32.136.12 + IN A 128.32.206.12 +NS1 IN A 128.32.136.9 + IN A 128.32.206.9 +$ORIGIN CS.BERKELEY.EDU. +VANGOGH IN A 128.32.33.5 +$ORIGIN ctr.COLUMBIA.EDU. +ntp IN CNAME sirius.ctr.columbia.edu. +sirius IN A 128.59.64.60 +$ORIGIN CC.COLUMBIA.EDU. +CUNIXD IN A 128.59.35.142 +$ORIGIN UOREGON.EDU. +PHLOEM IN A 128.223.32.35 +$ORIGIN GATECH.EDU. +TROLL-GW IN A 130.207.244.251 +$ORIGIN CC.GATECH.EDU. +BURDELL IN A 130.207.3.207 +$ORIGIN UTK.EDU. +NS0 IN A 160.36.0.66 +NS1 IN A 160.36.128.66 +$ORIGIN robert-morris.EDU. +SERVICE IN A 205.146.48.22 +COLONIAL-SERVER IN A 205.146.48.25 +$ORIGIN CNS.vt.EDU. +YARDBIRD IN A 198.82.247.34 +MILO IN A 198.82.247.98 +$ORIGIN stanford.EDU. +Leland2 IN A 171.64.14.58 +AVALLONE IN A 171.64.2.210 +ATALANTE IN A 171.64.2.220 +ARGUS IN A 171.64.2.230 +$ORIGIN slac.stanford.EDU. +SMTP IN A 134.79.18.80 +NS2 IN A 134.79.16.10 +NS1 IN A 134.79.16.9 +$ORIGIN HARVARD.EDU. +NS2 IN A 128.103.1.1 +ns IN A 128.103.201.100 +NS1 IN A 128.103.200.101 +$ORIGIN med.HARVARD.EDU. +jenner IN A 134.174.141.2 +knight IN A 134.174.141.46 +eno IN A 134.174.141.50 +heckle IN A 134.174.146.152 +$ORIGIN de. +datingagentur IN A 212.227.216.57 + IN MX 10 mx01.schlund.de. + IN MX 10 mx00.schlund.de. +$ORIGIN schlund.de. +mx00 IN A 195.20.224.130 + IN A 195.20.224.198 + IN A 195.20.224.67 + IN A 195.20.224.68 + IN A 195.20.224.152 +ns4 IN A 195.20.225.36 +mx01 IN A 195.20.224.131 + IN A 195.20.224.236 + IN A 195.20.224.237 + IN A 195.20.224.238 +ns3 IN A 195.20.224.95 +$ORIGIN Informatik.Uni-Dortmund.de. +waldorf IN A 129.217.4.42 +$ORIGIN muc.de. +faerber IN MX 10 slarti.muc.de. + IN A 193.149.49.70 +ns2 IN A 193.149.48.2 +slarti IN A 193.149.48.10 +ns1 IN A 193.149.48.11 +$ORIGIN westfalen.de. +muenster IN A 193.174.5.2 +$ORIGIN lan-ks.de. +uranus IN A 194.45.71.1 +$ORIGIN kaben-net.de. +dns IN A 195.179.28.17 +$ORIGIN thur.de. +jengate IN A 193.174.15.34 +$ORIGIN erfurt.thur.de. +annwfn IN A 194.122.210.3 +$ORIGIN sgh-net.de. +ns1 IN A 212.86.129.142 +$ORIGIN DENIC.de. +SSS-NL IN A 193.0.0.237 +SSS-AT IN A 193.171.255.34 +DNS IN A 194.246.96.79 +$ORIGIN iks-jena.de. +avalon IN A 194.221.90.34 +$ORIGIN musin.de. +ns IN A 194.113.40.45 +$ORIGIN rrz.Uni-Koeln.de. +noc IN A 134.95.100.209 +$ORIGIN BelWue.de. +noc IN A 129.143.2.1 +$ORIGIN HRZ.uni-bielefeld.de. +noc IN A 129.70.5.16 +$ORIGIN techfak.uni-bielefeld.de. +techfac IN A 129.70.132.100 +$ORIGIN CUBE.de. +NS1 IN A 212.162.54.243 +$ORIGIN dtag.de. +pns IN A 194.25.0.125 +$ORIGIN netconx.de. +netconsult IN A 193.141.75.1 +$ORIGIN CAMNET.CM. +KIM IN A 195.24.192.35 +LOM IN A 195.24.192.34 +SANAGA IN A 195.24.192.17 +$ORIGIN sxtyptt.NET.CN. +ns IN A 202.99.192.68 +$ORIGIN sta.NET.CN. +ns IN A 202.96.199.133 +$ORIGIN BTA.NET.CN. +NS IN A 202.96.0.133 +$ORIGIN CNNIC.NET.CN. +sld-ns2 IN A 202.97.16.197 +DNS2 IN A 202.97.16.196 +sld-ns1 IN A 159.226.1.3 +$ORIGIN com.CN. +kw IN MX 15 mail2.kw.com.cn. +$ORIGIN kw.com.CN. +mail2 IN A 159.226.25.8 +ns IN A 159.226.25.8 +$ORIGIN CNC.AC.CN. +NS IN A 159.226.1.1 +$ORIGIN UNIANDES.EDU.CO. +AYAX IN A 157.253.50.30 +CDCNET IN A 157.253.1.13 +$ORIGIN SCSI.GOV.BY. +SUN IN A 195.50.5.103 +NS2 IN A 194.67.193.130 +$ORIGIN OPEN.BY. +A IN A 194.226.121.36 +$ORIGIN CR. +NS IN A 163.178.8.2 +$ORIGIN UCR.AC.CR. +NS IN A 163.178.88.2 +$ORIGIN INTNET.DJ. +BOW IN A 193.251.143.253 +$ORIGIN DARENET.DK. +NS-SOA IN A 130.226.1.4 +$ORIGIN TELE.DK. +NS4 IN A 194.239.134.84 +$ORIGIN DAIMI.AAU.DK. +URANUS IN A 130.225.16.40 +$ORIGIN DK-HOSTMASTER.DK. +NS IN A 193.163.102.2 +$ORIGIN EC. +ECNET IN A 157.100.45.2 +$ORIGIN NET.EC. +ECUA IN A 157.100.1.2 +$ORIGIN CENIAI.NET.CU. +NS IN A 169.158.128.136 +$ORIGIN EENET.EE. +NS IN A 193.40.56.245 +$ORIGIN KBFI.EE. +NS IN A 192.121.251.13 +$ORIGIN NIC.DO. +NS IN A 207.176.16.50 +$ORIGIN EUN.EG. +FRCU IN A 193.227.1.1 +$ORIGIN CIX.CX. +NS IN A 195.222.235.216 +$ORIGIN CX.ESCROW.IOCOMM.NET.CX. +NS1 IN A 203.132.96.2 +$ORIGIN CCS.UCY.AC.CY. +NICOSIA IN A 194.42.6.97 +$ORIGIN CC.UCY.AC.CY. +ZEUS IN A 194.42.1.1 +$ORIGIN EUNET.CZ. +CZ IN A 193.85.3.130 +$ORIGIN EUNET.FI. +PRIFI IN A 193.66.1.146 +$ORIGIN NIXU.FI. +NS IN A 193.209.237.29 +$ORIGIN TELE.FI. +NS IN A 193.210.19.19 +$ORIGIN HELSINKI.FI. +HYDRA IN A 128.214.4.29 +$ORIGIN INET.GA. +KOMO IN A 208.148.44.1 +$ORIGIN CERIST.DZ. +DECST IN A 193.194.64.11 +$ORIGIN ELDJAZAIR.NET.DZ. +CASBAH IN A 193.194.81.45 +$ORIGIN USP.AC.FJ. +TERI IN A 144.120.8.1 +$ORIGIN EUNET.ES. +NS IN A 193.127.1.11 +$ORIGIN NIC.ES. +INECO IN A 194.69.254.2 +NS1 IN A 194.69.254.1 +$ORIGIN VISUALCOM.ES. +NS IN A 194.143.202.202 +$ORIGIN MICROASTUR.ES. +SERVIDOR IN A 195.76.178.5 +$ORIGIN CESCA.ES. +PRADES IN A 192.94.163.152 +$ORIGIN PIXAR.ES. +NS IN A 194.143.196.3 +$ORIGIN REDIRIS.ES. +SUN IN A 130.206.1.2 +$ORIGIN SEKER.ES. +CORREOS IN A 194.179.87.1 +$ORIGIN TELECOM.NET.ET. +NS IN A 196.27.22.43 +$ORIGIN FM. +FM03 IN A 206.49.89.4 +FM01 IN A 206.49.89.2 +$ORIGIN NPLUS.GF. +NS1 IN A 195.6.144.3 +$ORIGIN trns. +f IN A 209.133.38.16 +d IN A 207.112.147.14 +e IN A 145.89.234.7 +c IN A 212.172.21.254 +a IN A 64.6.65.10 +$ORIGIN IRD.FR. +NS IN A 195.83.14.1 +$ORIGIN BONDY.IRD.FR. +MALAKULA IN A 193.50.53.1 +$ORIGIN RAIN.FR. +BOW IN A 194.51.3.49 +$ORIGIN imag.FR. +isis IN A 129.88.32.24 +imag IN A 129.88.30.1 +$ORIGIN INRIA.FR. +DNS IN A 193.51.208.13 +$ORIGIN NIC.FR. +NS2 IN A 192.93.0.4 +NS1 IN A 192.93.0.1 +NS3 IN A 192.134.0.49 +$ORIGIN GH.GL. +KAASASSUK IN A 194.177.232.3 +$ORIGIN TELE.GL. +TGSERV IN A 194.177.224.7 +$ORIGIN COMMIT.GM. +NS1 IN A 63.77.152.177 +$ORIGIN MRC.GM. +NS1 IN A 212.60.69.1 +$ORIGIN INTNET.GQ. +BOW IN A 195.101.152.253 +$ORIGIN AIX.GR. +NIC IN A 195.130.89.210 +$ORIGIN GRNET.GR. +FOO IN A 194.177.210.211 +NIC IN A 194.177.210.210 +$ORIGIN CSI.FORTH.GR. +ESTIA IN A 139.91.191.3 +$ORIGIN ICS.FORTH.GR. +DNS1 IN A 139.91.151.70 +GRDNS IN A 139.91.1.1 +$ORIGIN HKU.HK. +HKUXB IN A 147.8.16.15 +$ORIGIN CUHK.EDU.HK. +NS2 IN A 137.189.6.21 +NS1 IN A 137.189.6.1 +$ORIGIN CONCYT.GOB.GT. +NS IN A 168.234.106.2 +$ORIGIN UVG.EDU.GT. +NS IN A 168.234.68.2 +$ORIGIN ID. +NS1 IN A 202.155.30.227 +$ORIGIN AC.ID. +NS IN A 202.159.124.34 +$ORIGIN GU. +NS IN A 168.123.4.10 +$ORIGIN EDU.GU. +NS IN A 168.123.2.50 +$ORIGIN REGISTRY.HM. +NS2 IN A 209.54.168.55 +NS3 IN A 202.169.102.24 +NS1 IN A 204.144.183.78 +$ORIGIN CONNECT.IE. +AUTH01 IN A 194.106.128.50 +$ORIGIN DOMAINREGISTRY.IE. +BANBA IN A 193.1.142.2 +$ORIGIN VIA-NET-WORKS.IE. +ICE IN A 212.17.32.2 +$ORIGIN HONDUTEL.HN. +MIRAF-SERVER3 IN A 206.48.104.142 +$ORIGIN SRCE.HR. +DNS IN A 161.53.3.7 +$ORIGIN HUJI.AC.IL. +RELAY IN A 128.139.6.1 +$ORIGIN TAU.AC.IL. +ARISTO IN A 132.66.32.10 +$ORIGIN NIC.JE. +NS1 IN A 216.110.45.224 +$ORIGIN SZTAKI.HU. +NS2 IN A 193.225.86.1 +$ORIGIN NIC.HU. +NS IN A 193.6.27.62 +$ORIGIN NCST.ERNET.IN. +NAAMAK IN A 202.41.110.66 +SS585 IN A 202.141.150.18 +$ORIGIN NIC.IO. +NS IN A 194.205.62.100 +$ORIGIN NIC.IR. +NS1 IN A 194.225.70.83 +$ORIGIN IS. +ISGATE IN A 193.4.58.51 +$ORIGIN IUNET.IT. +DNS2 IN A 192.106.1.31 +NS IN A 192.106.1.1 +$ORIGIN INFN.IT. +SERVER2 IN A 131.154.1.3 +$ORIGIN CNR.IT. +NAMESERVER IN A 194.119.192.34 +$ORIGIN IAT.CNR.IT. +ITGBOX IN A 146.48.65.46 +$ORIGIN NETTUNO.IT. +BOLOGNA IN A 193.43.2.5 +$ORIGIN NIC.IT. +DNS IN A 193.205.245.5 +$ORIGIN JM. +NS IN A 196.2.1.6 +$ORIGIN CAST.EDU.JM. +NS IN A 200.9.115.2 +$ORIGIN NIC.GOV.JO. +AMRA IN A 193.188.66.103 +PETRA IN A 193.188.66.2 +$ORIGIN KG. +NS IN A 195.38.160.36 +$ORIGIN AD.JP. +NIC IN A 202.12.30.33 +$ORIGIN ocn.AD.JP. +ns-tk012 IN A 203.139.160.74 +$ORIGIN IIJ.AD.JP. +NS0 IN A 202.232.2.34 +$ORIGIN SINET.AD.JP. +NS-JP IN A 150.100.2.3 +$ORIGIN SPIN.AD.JP. +DNS0 IN A 165.76.0.98 +$ORIGIN NIC.AD.JP. +ns2 IN A 202.12.30.133 +TRF IN A 192.41.192.2 +NS-JP IN A 61.120.151.100 +NS0 IN A 202.12.30.131 +ns1 IN A 202.12.30.33 +$ORIGIN WIDE.AD.JP. +NS IN A 203.178.136.63 +$ORIGIN co.JP. + IN MX 10 integra.s-integra.co.jp. +$ORIGIN s-integra.co.JP. +integra IN A 210.162.202.34 +$ORIGIN UUCP.NE.JP. +NS2 IN A 210.141.111.69 +$ORIGIN DNS.NET.KH. +NS1 IN A 203.127.100.21 +$ORIGIN org. +netsage IN A 209.67.235.38 +ietf IN A 132.151.1.19 + IN MX 10 odin.ietf.org. +vmba IN MX 10 gro.dd.org. +bnfinfo IN MX 10 mail.sover.net. + IN MX 20 mqueue.sover.net. +dd IN MX 10 gro.dd.org. + IN MX 50 mqueue.sover.net. + IN MX 100 mail.uu.net. +vtvast IN A 207.217.96.38 + IN A 207.217.96.39 + IN A 207.217.96.40 + IN A 207.217.96.41 + IN A 207.217.96.42 + IN A 207.217.96.43 + IN A 207.217.96.44 + IN A 207.217.96.45 + IN A 207.217.96.28 + IN A 207.217.96.29 + IN A 207.217.96.30 + IN A 207.217.96.31 + IN A 207.217.96.32 + IN A 207.217.96.33 + IN A 207.217.96.34 + IN A 207.217.96.35 + IN A 207.217.96.36 + IN A 207.217.96.37 + IN MX 10 vipmailgate.earthlink.net. +gazpacho IN A 209.67.235.38 +bikeclub IN MX 20 pop.shoreham.net. + IN MX 50 smtp.america.net. +giffordmed IN A 130.189.100.57 + IN MX 20 quest-net.com. + IN MX 10 mail.giffordmed.org. +isc IN A 204.152.184.101 +icann IN MX 100 mail.icann.org. + IN MX 95 mailhub.icann.org. +xaos IN A 24.93.15.22 + IN TXT "XAOS Associates Online Services" + IN MX 0 mail.xaos.org. + IN MX 5 gw.xaos.org. + IN LOC 43 02 20.000 N 77 43 12.000 W 170.00m 1.00m 30.00m 10.00m +mmuuf IN MX 10 gro.dd.org. +reptiles IN A 198.96.117.142 + IN MX 10 mail2.reptiles.org. + IN MX 20 mail.vex.net. + IN MX 5 mail.reptiles.org. +iscvt IN A 207.136.209.132 + IN MX 10 isc-01.iscvt.org. + IN MX 20 mqueue.sover.net. +mailinglists IN A 63.160.175.18 +lawlinevt IN MX 20 mqueue.sover.net. + IN MX 10 host3.vtlegalaid.org. +mail-abuse IN A 204.152.184.74 +$ORIGIN SECTOR001.org. +NS0 IN A 24.4.49.117 +NS1 IN A 24.4.49.246 +$ORIGIN ML.org. +MERCURY IN A 209.68.0.85 +$ORIGIN XBILL.org. +NS IN A 204.152.186.163 +$ORIGIN spack.org. +maus IN A 204.245.198.90 +$ORIGIN netsage.org. +keith IN A 209.67.235.37 +www IN CNAME netsage.org. +sure IN A 209.67.235.38 +$ORIGIN ietf.org. +odin IN A 132.151.1.176 +www2 IN A 4.17.168.6 +www IN CNAME www2.ietf.org. +$ORIGIN lux.dot-eu.org. +ns0 IN A 195.206.105.102 +$ORIGIN the-frontier.org. +ns2 IN A 216.86.199.115 +ns1 IN A 216.86.199.114 +$ORIGIN vmba.org. +www IN MX 10 gro.dd.org. + IN A 209.198.103.206 +$ORIGIN WILLIAM.org. +JOANNA IN A 195.153.6.2 +$ORIGIN FROGHOUSE.org. +DNS IN A 207.121.69.243 +$ORIGIN VTLEGALAID.org. +host3 IN A 207.136.208.115 +$ORIGIN dd.org. +doubt IN A 209.198.103.193 +news IN CNAME gro.dd.org. +gro IN A 209.198.103.200 +d IN A 209.198.103.199 +workgroup IN A 209.198.103.201 +dhcp1 IN A 209.198.103.194 +go IN A 209.198.103.198 +mail IN CNAME gro.dd.org. +localhost IN A 127.0.0.1 +dhcp2 IN A 209.198.103.195 +www IN CNAME gro.dd.org. +dhcp3 IN A 209.198.103.196 +dhcp4 IN A 209.198.103.197 +moderators IN CNAME moderators.isc.org. +ns IN CNAME gro.dd.org. +$ORIGIN gazpacho.org. +keith IN A 209.67.235.37 +sure IN A 209.67.235.38 +$ORIGIN FLAME.org. +DNS02 IN A 204.152.184.97 +www IN A 204.152.184.97 +DNS01 IN A 204.152.184.80 +$ORIGIN giffordmed.org. +mail IN A 130.189.100.51 +$ORIGIN isc.org. +isrv3-i IN A 204.152.184.87 +$ORIGIN energyenhancement.org. +www IN A 216.121.175.228 +$ORIGIN icann.org. +mailhub IN A 192.0.34.33 +mail IN A 198.32.1.99 +$ORIGIN PAPP.UNDP.org. +PAPPSRV IN A 192.115.229.1 +$ORIGIN xaos.org. +amethyst IN A 204.145.159.12 + IN MX 0 mail.xaos.org. + IN MX 5 gw.xaos.org. +sure IN A 209.67.235.38 +taiyoo IN A 204.145.159.13 + IN MX 0 mail.xaos.org. + IN MX 5 gw.xaos.org. +gw IN A 24.93.15.22 +reimei IN A 204.145.159.17 + IN MX 0 mail.xaos.org. + IN MX 5 gw.xaos.org. +gwi IN A 204.145.159.2 + IN HINFO "Firewall" "Gateway" + IN MX 0 mail.xaos.org. + IN MX 5 gw.xaos.org. +keith IN A 209.67.235.37 +axis IN A 204.145.159.20 +mail IN CNAME furii.xaos.org. +all IN A 24.95.203.33 + IN MX 0 mail.xaos.org. + IN MX 5 gw.xaos.org. +www IN CNAME gw.xaos.org. +kadou IN A 204.145.159.14 + IN MX 0 mail.xaos.org. + IN MX 5 gw.xaos.org. +furii IN A 204.145.159.11 + IN MX 0 mail.xaos.org. + IN MX 5 gw.xaos.org. +ftp IN CNAME gw.xaos.org. +gwe IN CNAME gw.xaos.org. +$ORIGIN PUNCHDOWN.org. +NS IN A 140.174.131.100 +$ORIGIN mmuuf.org. +www IN MX 10 gro.dd.org. + IN A 209.198.103.205 +$ORIGIN OPEN-RSC.org. +ASLAN IN A 199.5.157.128 +UNICORN IN A 207.126.103.16 +$ORIGIN COGNOSCENTI.org. +SYNAESTHESIA IN A 207.208.112.4 +ANAESTHESIA IN A 207.208.112.3 +$ORIGIN DC.IGC.org. +NS IN A 199.75.208.10 +$ORIGIN mitre.org. +DNSSRV1X IN A 199.94.97.51 +mbunix IN A 199.94.97.52 +DNSSRV3X IN A 198.76.173.100 +smtpproxy1 IN A 129.83.20.90 +linus IN A 129.83.10.1 + IN MX 1 linus.mitre.org. + IN MX 5 smtpproxy1.mitre.org. + IN MX 10 smtpproxy2.mitre.org. +smtpproxy2 IN A 128.29.154.90 +mwunix IN A 198.76.173.52 +$ORIGIN reptiles.org. +mail IN A 198.96.117.157 +NS2 IN A 192.75.253.138 +NS IN A 198.96.117.136 +$ORIGIN ISPC.org. +NS2 IN A 209.124.64.11 +NS3 IN A 207.230.32.23 +NS1 IN A 207.106.7.7 +$ORIGIN IGC.APC.org. +NS1 IN A 192.82.108.38 +$ORIGIN iscvt.org. +isc-01 IN A 207.136.209.131 +$ORIGIN FLIRBLE.org. +NS0 IN A 195.40.6.20 +$ORIGIN SANS.org. +SERVER1 IN A 167.216.133.33 +$ORIGIN LTWCC.org. +NS2 IN A 12.33.66.62 +NS1 IN A 12.33.66.61 +$ORIGIN CMHNET.org. +elektro IN A 192.188.133.3 +$ORIGIN SNPT.KM. +BOW IN A 195.101.19.253 +$ORIGIN ONPT.NET.MA. +MASSIRA IN A 206.103.26.1 +$ORIGIN IAM.NET.MA. +DNS2 IN A 212.217.0.12 +DNS3 IN A 212.217.1.1 +DNS1 IN A 212.217.0.1 +$ORIGIN KREONET.RE.KR. +NS IN A 134.75.30.1 +$ORIGIN KREN.NE.KR. +NS IN A 147.47.1.1 +$ORIGIN NIC.LK. +NS IN A 192.248.1.65 +$ORIGIN NIC.MC. +NS IN A 195.78.6.131 +$ORIGIN 110.16.12.IN-ADDR.ARPA. +35 IN CNAME 35.32/27.110.16.12.in-addr.arpa. +$ORIGIN 32/27.110.16.12.IN-ADDR.ARPA. +35 IN PTR mail.nova-data.com. +$ORIGIN 0.0.127.IN-ADDR.ARPA. +1 IN PTR localhost. +$ORIGIN 184.152.204.IN-ADDR.ARPA. +87 IN PTR isrv3-i.isc.org. +$ORIGIN 187.152.204.IN-ADDR.ARPA. +59 IN PTR shell.nominum.com. +$ORIGIN 131.127.204.IN-ADDR.ARPA. +47 IN PTR mtiwmhc22.worldnet.att.net. +$ORIGIN 198.245.204.IN-ADDR.ARPA. +90 IN PTR maus.spack.org. +$ORIGIN 159.145.204.IN-ADDR.ARPA. +12 IN PTR amethyst.xaos.org. +13 IN PTR taiyoo.xaos.org. +14 IN PTR kadou.xaos.org. +17 IN PTR reimei.xaos.org. +20 IN PTR axis.xaos.org. +2 IN PTR gwi.xaos.org. +11 IN PTR furii.xaos.org. +$ORIGIN 241.5.198.IN-ADDR.ARPA. +38 IN PTR cmr0.ash.ops.us.uu.net. +39 IN PTR cmr1.ash.ops.us.uu.net. +$ORIGIN 241.103.199.IN-ADDR.ARPA. +218 IN PTR abyssinian.sleepycat.com. +$ORIGIN 153.66.206.IN-ADDR.ARPA. +12 IN PTR d.dd.org. +102 IN PTR gro.dd.org. +128 IN PTR www.vmba.org. +1 IN PTR workgroup.dd.org. +2 IN PTR doubt.dd.org. +136 IN PTR www.mmuuf.org. +4 IN PTR nila.dd.org. +10 IN PTR go.dd.org. +$ORIGIN 84.198.209.IN-ADDR.ARPA. +242 IN PTR dlawren-gw.burl.sover.net. +$ORIGIN 87.198.209.IN-ADDR.ARPA. +52 IN PTR mqueue0.sover.net. +$ORIGIN 103.198.209.IN-ADDR.ARPA. +198 IN CNAME 198.192.103.198.209.in-addr.arpa. +205 IN CNAME 205.192.103.198.209.in-addr.arpa. +199 IN CNAME 199.192.103.198.209.in-addr.arpa. +206 IN CNAME 206.192.103.198.209.in-addr.arpa. +193 IN CNAME 193.192.103.198.209.in-addr.arpa. +200 IN CNAME 200.192.103.198.209.in-addr.arpa. +201 IN CNAME 201.192.103.198.209.in-addr.arpa. +$ORIGIN 192.103.198.209.IN-ADDR.ARPA. +202 IN PTR fraud.dd.org. +195 IN PTR dhcp2.dd.org. +203 IN PTR fraud.dd.org. +196 IN PTR dhcp3.dd.org. +204 IN PTR ppp.dd.org. +197 IN PTR dhcp4.dd.org. +205 IN PTR www.mmuuf.org. +198 IN PTR go.dd.org. +206 IN PTR www.vmba.org. +199 IN PTR d.dd.org. +207 IN PTR broadcast.dd.org. +200 IN PTR gro.dd.org. +193 IN PTR doubt.dd.org. +201 IN PTR workgroup.dd.org. +194 IN PTR dhcp1.dd.org. +$ORIGIN 133.188.192.IN-ADDR.ARPA. +3 IN PTR elektro.com. +$ORIGIN 206.203.192.IN-ADDR.ARPA. +9 IN PTR ice.WonderWorks.COM. +$ORIGIN 2.39.137.IN-ADDR.ARPA. +3 IN PTR New-York4.NY.ALTER.NET. +$ORIGIN 126.39.137.IN-ADDR.ARPA. +10 IN PTR Fddi0-0.New-York4.NY.ALTER.NET. +$ORIGIN IRD.MG. +ANTANA IN A 194.214.107.1 +$ORIGIN NIC.MG. +NS IN A 194.214.107.253 +$ORIGIN KW. +DNS2 IN A 161.252.48.150 +DNS1 IN A 161.252.48.140 +$ORIGIN MOC.KW. +NCC IN A 196.1.69.98 +$ORIGIN NET.NA. +GRUMPY IN A 196.20.23.1 +$ORIGIN RELCOM.KZ. +NS IN A 212.110.240.65 +$ORIGIN MARNET.MK. +KITKA IN A 194.149.131.2 +$ORIGIN SC-UNI.KTU.LT. +NEMUNAS IN A 193.219.32.13 +$ORIGIN SOTELMA.ML. +ASKIA IN A 208.144.230.3 +$ORIGIN DNS.LU. +NS2 IN A 158.64.229.3 +NS5 IN A 194.246.96.193 +NS1 IN A 158.64.229.2 +$ORIGIN INTNET.NE. +BOW IN A 194.51.164.253 +$ORIGIN MN. +MAGIC IN A 202.131.0.10 +$ORIGIN NF. +NS2 IN A 203.12.249.101 +NS1 IN A 203.12.249.100 +$ORIGIN LATNET.LV. +NS2 IN A 159.148.108.1 +NS IN A 159.148.60.2 +$ORIGIN UMAC.MO. +UMACSN2 IN A 161.64.3.2 +NS2 IN A 161.64.7.2 +UMACSN1 IN A 161.64.3.1 +NS1 IN A 161.64.7.1 +$ORIGIN NI. +NS IN A 165.98.1.2 + IN A 200.30.36.8 +$ORIGIN TMX.COM.NI. +NS IN A 205.218.253.2 +$ORIGIN UNIV-NKC.MR. +DNS2 IN A 193.251.145.154 +DNS1 IN A 193.251.145.155 +$ORIGIN SVIANED.nl. +NS IN A 143.177.1.3 +$ORIGIN secondary.nl. +ns2 IN A 194.229.138.6 +$ORIGIN DOMAIN-REGISTRY.nl. +NS2 IN A 193.176.144.130 +NS IN A 193.176.144.2 +$ORIGIN MT. +NS IN A 193.188.47.252 +$ORIGIN DHIRAAGU.MV. +NS IN A 202.1.192.196 +$ORIGIN NO. +NAC IN A 129.240.2.40 +ALCANET IN MX 15 tyholt.uninett.no. + IN MX 20 nac.no. + IN A 158.39.5.5 +$ORIGIN UIO.NO. +IFI IN A 129.240.64.2 +$ORIGIN SOL.NO. +NS1 IN A 195.225.2.10 +$ORIGIN uit.NO. +benoni IN A 129.242.4.254 +$ORIGIN ALCANET.NO. +NS IN A 193.213.238.10 +$ORIGIN UNINETT.NO. +aun IN A 129.241.1.99 +tyholt IN A 158.38.60.10 +NN IN A 158.38.0.181 +$ORIGIN alcatel.NO. +ns2 IN A 193.213.238.2 +$ORIGIN UNINET.NET.MX. +MEX1-M-213 IN A 200.33.146.213 +$ORIGIN AVANTEL.NET.MX. +DNS1 IN A 200.33.213.66 +$ORIGIN UNAM.MX. +NS IN A 132.248.253.1 +$ORIGIN NIC.MX. +NS IN A 200.23.1.1 +$ORIGIN MOS.COM.NP. +SHIKHAR IN A 202.52.255.5 +$ORIGIN MY. +MIMOS IN A 192.228.128.18 +JARING IN A 192.228.128.20 +$ORIGIN JARING.MY. +GATEN IN A 161.142.227.17 +GATE1 IN A 161.142.2.17 +$ORIGIN PA. +NS IN A 168.77.8.2 +$ORIGIN USMA.AC.PA. +VASCO IN A 208.141.92.2 +$ORIGIN UEM.MZ. +ZEBRA IN A 196.3.96.67 +OCEANO IN A 196.3.96.69 +DZOWO IN A 196.3.96.66 +$ORIGIN CENPAC.NET.NR. +NRWEB IN A 203.98.224.66 +$ORIGIN NIC.NU. +NS IN A 128.11.47.50 +$ORIGIN DE.NIC.NU. +NS0 IN A 216.200.116.40 +$ORIGIN TELIA.NIC.NU. +NS0 IN A 212.181.91.4 +$ORIGIN NS.NIC.NU. +NZ IN A 203.97.132.66 +$ORIGIN OMANTEL.NET.OM. +OM4 IN A 206.49.101.5 +OM10 IN A 206.49.101.6 +$ORIGIN RCP.NET.PE. +ICHU IN A 161.132.5.14 +$ORIGIN MANA.PF. +NS2 IN A 202.3.225.20 +NS1 IN A 202.3.225.10 +$ORIGIN QATAR.NET.QA. +NS2 IN A 212.77.192.13 +NS3 IN A 212.77.192.15 +NS1 IN A 212.77.192.10 +$ORIGIN CLEAR.NET.NZ. +NS2 IN A 203.97.37.14 +NS1 IN A 203.97.33.14 +$ORIGIN DNS.NET.NZ. +NS1 IN A 202.46.161.3 +$ORIGIN IHUG.NET.NZ. +NS2 IN A 203.29.160.2 +$ORIGIN XTRA.CO.NZ. +GORGON IN A 202.27.158.34 +$ORIGIN WAIKATO.AC.NZ. +NS99 IN A 130.217.76.27 +$ORIGIN VUW.AC.NZ. +RATA IN A 130.195.2.11 +$ORIGIN MCS.VUW.AC.NZ. +DOWNSTAGE IN A 130.195.6.10 +CIRCA IN A 130.195.5.12 +$ORIGIN PL. +from IN A 212.160.132.114 +$ORIGIN NASK.ORG.PL. +BILBO IN A 148.81.16.51 + IN A 195.187.245.51 +$ORIGIN pbks.PL. +alf IN A 195.205.33.200 +$ORIGIN CYFRONET.KRAKOW.PL. +NMS IN A 149.156.1.3 +$ORIGIN MAN.LODZ.PL. +DNS2 IN A 212.51.192.5 +$ORIGIN ispid.com.PL. +trurl IN A 195.150.99.3 +$ORIGIN itnet.com.PL. +emerald IN A 195.116.64.3 +$ORIGIN ELEKTRON.PL. +AMBER IN A 195.117.6.10 +$ORIGIN macrosoft.WAW.PL. +front IN A 194.196.86.66 +$ORIGIN NASK.WAW.PL. +ARWENA IN A 193.59.201.28 +$ORIGIN webtech.elk.PL. +tornado IN A 212.244.162.100 +$ORIGIN IKP.PL. +NS3 IN A 157.25.5.30 +$ORIGIN TPSA.PL. +DNS2 IN A 194.204.152.34 +$ORIGIN uwm.EDU.PL. +matrix IN A 213.184.3.136 +$ORIGIN FUW.EDU.PL. +DNS IN A 193.0.80.11 +$ORIGIN UPRR.PR. +PASCAL IN A 134.202.1.120 +DESCARTES IN A 134.202.1.125 +$ORIGIN NCC.UP.PT. +CIUP1 IN A 193.136.51.52 +$ORIGIN FCCN.PT. +DNS IN A 193.136.192.10 +$ORIGIN DNS.PT. +NS IN A 193.136.0.1 +$ORIGIN TELEPAC.PT. +NS1 IN A 194.65.3.20 +VIVALDI IN A 194.65.3.21 +$ORIGIN CNC.UNA.PY. +SCE IN A 200.10.228.133 +NS IN A 200.10.228.132 +$ORIGIN ISU.NET.SA. +NS1 IN A 212.26.18.3 +$ORIGIN KACST.EDU.SA. +NS IN A 212.26.44.3 +$ORIGIN COM.SB. +PIJIN IN A 202.139.42.10 +$ORIGIN SOLOMON.COM.SB. +OLKETA IN A 202.139.42.4 +$ORIGIN cafax.SE. +ns IN A 192.71.228.17 +$ORIGIN LTH.SE. +NIC IN A 130.235.20.3 +$ORIGIN SUNET.SE. +SUNIC IN A 192.36.125.2 +$ORIGIN PACIFIC.NET.SG. +NS1 IN A 192.169.33.3 +$ORIGIN NIC.NET.SG. +DS IN A 202.42.194.205 +$ORIGIN SINGNET.COM.SG. +DNSSEC2 IN A 195.13.10.226 +DNSSEC3 IN A 165.21.100.11 +DNSSEC1 IN A 165.21.83.11 +$ORIGIN RNC.RO. +NS-A IN A 192.162.16.31 +NS IN A 192.162.16.21 +$ORIGIN NIC.SH. +NS IN A 194.205.62.60 +$ORIGIN ARNES.SI. +KANIN IN A 193.2.1.66 +SREBRNJAK IN A 193.2.1.91 +$ORIGIN INTERNET.SK. +NS IN A 192.108.130.91 +$ORIGIN EUNET.SK. +NS IN A 192.108.130.33 +$ORIGIN NETLAB.SK. +NS IN A 195.168.1.4 +$ORIGIN SIERRATEL.SL. +NS IN A 194.133.124.5 +$ORIGIN INTNET.TD. +BOW IN A 193.251.147.253 +$ORIGIN RU. +ok IN A 195.2.83.162 + IN MX 50 mail.ok.ru. + IN MX 100 relay1.aha.ru. + IN MX 300 relay3.aha.ru. +$ORIGIN aha.RU. +ns1 IN A 195.2.80.142 +$ORIGIN ok.RU. +mail IN A 195.2.83.162 +ns IN A 195.2.64.36 +$ORIGIN INTELCOM.SM. +DNS IN A 194.183.64.11 +$ORIGIN OMNIWAY.SM. +DNS IN A 194.183.64.10 +$ORIGIN UCAD.SN. +NS IN A 196.1.95.1 +$ORIGIN NIC.TJ. +NS2 IN A 209.77.224.1 +NS1 IN A 209.77.250.1 +$ORIGIN SPB.SU. +NS IN A 193.124.83.69 +$ORIGIN RICC.ALMA-ATA.SU. +NS IN A 194.87.112.4 +$ORIGIN DEMOS.SU. +NS IN A 194.87.0.8 + IN A 194.87.0.9 +$ORIGIN RED.SV. +CIR IN A 168.243.254.1 +$ORIGIN GOB.SV. +CONACYT IN A 168.243.64.2 +ANTEL IN A 168.243.65.1 +$ORIGIN ATI.TN. +NS IN A 193.95.66.10 +$ORIGIN TO. +TONIC IN A 206.184.59.10 +COLO IN A 206.86.247.253 +$ORIGIN TDC.TO. +NS1 IN A 206.86.247.250 +$ORIGIN SY. +EARTH IN A 195.22.198.6 +$ORIGIN VATICAN.VA. +MICHAEL IN A 212.77.0.2 +$ORIGIN METU.EDU.TR. +NS2 IN A 144.122.199.93 +NS1 IN A 144.122.199.90 +$ORIGIN NIC.UK. +NS1 IN A 195.66.240.130 +$ORIGIN AXION.BT.CO.UK. +DNS0 IN A 132.146.5.1 +$ORIGIN ADVSYS.CO.UK. +BARNEY IN A 194.72.124.2 +$ORIGIN WR.UMIST.AC.UK. +AARDVARK IN A 130.88.146.3 +$ORIGIN UCL.AC.UK. + IN A 128.16.5.31 + IN MX 10 bells.cs.ucl.ac.uk. + IN MX 11 haig.cs.ucl.ac.uk. +$ORIGIN CS.UCL.AC.UK. +haig IN A 128.16.6.8 +bells IN A 128.16.5.31 +NS1 IN A 128.16.5.32 +$ORIGIN surrey.AC.UK. +info-server IN A 131.227.102.6 +eim IN MX 6 phoebe.eim.surrey.ac.uk. + IN MX 6 prue.eim.surrey.ac.uk. +$ORIGIN eim.surrey.AC.UK. +prue IN A 131.227.76.5 +phoebe IN A 131.227.74.4 +$ORIGIN MHS-RELAY.AC.UK. +SUN IN A 128.86.8.25 +$ORIGIN NIC.TT. +DNS IN A 24.3.198.194 +$ORIGIN REACCIUN.VE. +DNS2 IN A 150.188.4.212 +DNS IN A 150.188.4.210 +$ORIGIN ULA.VE. +AZMODAN IN A 150.185.130.16 +$ORIGIN UTZ. +NS2 IN A 160.124.112.10 +NS3 IN A 160.124.147.1 +NS1 IN A 160.124.48.4 +$ORIGIN NIC.TV. +NS4 IN A 207.151.24.23 +NS2 IN A 208.184.1.167 +NS6 IN A 64.56.165.153 +NS7 IN A 64.69.172.153 +NS1 IN A 209.143.242.138 +$ORIGIN EDU.TW. +MOEVAX IN A 140.111.1.2 +$ORIGIN vt.us. +state IN MX 10 mx1.state.vt.us. + IN MX 10 mx2.state.vt.us. +$ORIGIN k12.vt.us. +ns2 IN A 170.222.64.130 +morristown IN MX 0 mail.k12.vt.us. +ns1 IN A 170.222.64.130 +jericho IN MX 0 mail.k12.vt.us. +founders IN MX 0 mail.k12.vt.us. +$ORIGIN state.vt.us. +srs IN A 159.105.101.150 + IN MX 0 srs.srs.state.vt.us. + IN MX 10 mx1.state.vt.us. + IN MX 10 mx2.state.vt.us. +defgen IN MX 0 mail.state.vt.us. + IN MX 10 mx1.state.vt.us. + IN MX 10 mx2.state.vt.us. + IN MX 5 vtagr02.agr.state.vt.us. + IN MX 15 mx1.state.vt.us. + IN MX 20 mx2.state.vt.us. +mail IN A 170.222.64.134 +ns1 IN A 159.105.23.130 +ns2 IN A 170.222.64.130 +$ORIGIN srs.state.vt.us. +srs IN A 159.105.101.150 +$ORIGIN agr.state.vt.us. +vtagr04 IN A 159.105.50.4 +vtagr02 IN A 159.105.50.2 +$ORIGIN anr.state.vt.us. +dec IN MX 10 mx1.state.vt.us. + IN MX 10 mx2.state.vt.us. + IN MX 0 dec.anr.state.vt.us. + IN A 159.105.46.4 +$ORIGIN pha.pa.us. +candle IN A 162.33.245.46 +$ORIGIN CNRI.reston.va.us. +NS IN A 132.151.1.1 +$ORIGIN boston.MA.us. +foxharp IN MX 10 bparker.connactivity.com. +$ORIGIN ns.foxharp.boston.MA.us. +a IN A 24.147.209.205 +$ORIGIN STARFIRE.DOUGLAS.MA.us. +NS2 IN A 216.129.136.9 +DNS IN A 206.225.44.40 +NS1 IN A 216.129.136.9 +$ORIGIN NIC.us. +USDNS IN A 198.41.3.87 +$ORIGIN sf.ca.us. +asylum IN A 192.48.232.17 +$ORIGIN palo-alto.ca.us. +mejac IN A 192.147.236.1 +$ORIGIN VN. +DNS1 IN A 203.162.3.235 +$ORIGIN EDU.UY. +SECIU IN A 164.73.128.5 +$ORIGIN UZ. +NS IN A 213.68.88.11 +$ORIGIN NOC.UZ. +NS IN A 194.67.52.42 +$ORIGIN VANUATU.COM.VU. +SANTO IN A 202.139.40.7 +FUTUNA IN A 202.139.40.3 +EFATE IN A 202.139.40.5 +$ORIGIN nic.mnet. +ns2 IN A 208.109.83.110 +ns1 IN A 216.61.39.172 +$ORIGIN DNS.WS. +NS4 IN A 216.52.234.102 +NS2 IN A 216.35.187.250 +NS1 IN A 202.4.48.217 +NS5 IN A 216.35.188.8 +NS3 IN A 216.52.234.99 +$ORIGIN UCT.AC.ZA. +UCTHPX IN A 137.158.128.1 +$ORIGIN FRD.AC.ZA. +APIES IN A 137.214.80.1 +$ORIGIN EE.UND.AC.ZA. +DAISY IN A 146.230.192.18 +$ORIGIN RU.AC.ZA. +HIPPO IN A 146.231.128.1 +$ORIGIN UNZA.ZM. +PUKU IN A 196.7.240.1 +$ORIGIN NIC.YU. +NS1 IN A 147.91.8.6 +$ORIGIN TELEKOM.YU. +ODISEJ IN A 195.178.32.2 +$ORIGIN gtld-servers.ORSC. +b IN A 216.13.126.116 +$ORIGIN ROOT-SERVERS.ORSC. +B IN A 216.13.126.116 +C IN A 65.196.80.102 +A IN A 199.166.24.1 +$ORIGIN ZPTC.CO.ZW. +TELCOM IN A 194.133.122.47 +$ORIGIN NIPR.MIL. +PAC2 IN A 199.252.155.234 +EUR2 IN A 199.252.143.234 +CON2 IN A 199.252.173.234 +PAC1 IN A 199.252.180.234 +EUR1 IN A 199.252.154.234 +CON1 IN A 199.252.175.234 +$ORIGIN ARL.MIL. +ADMII IN A 128.63.31.4 + IN A 128.63.5.4 +$ORIGIN GOV. +nps IN MX 5 ccmail.itd.nps.gov. + IN MX 10 ccmail2.itd.nps.gov. +$ORIGIN STAT-USA.GOV. +SUNNY IN A 192.239.70.8 +$ORIGIN NASA.GOV. +jpl IN A 137.78.160.180 +NASANS4 IN A 198.116.144.33 +NASANS3 IN A 198.116.144.49 +NASANS1 IN A 192.77.84.32 +$ORIGIN NSI.NASA.GOV. +MX IN A 128.102.18.31 +$ORIGIN CDC.GOV. +NS2 IN A 198.246.96.92 +NS1 IN A 198.246.96.61 +$ORIGIN NIST.GOV. +NS1 IN A 129.6.13.2 +$ORIGIN cr.USGS.GOV. +ISDSUN IN A 136.177.16.3 +ns IN A 136.177.16.3 +rgfsparc IN A 136.177.164.192 +$ORIGIN ER.USGS.GOV. +NS IN A 130.11.48.2 +$ORIGIN WR.USGS.GOV. +ISDMNL IN A 130.118.4.2 +$ORIGIN DEN.nps.GOV. +DENS20 IN A 165.83.24.20 +$ORIGIN ITD.nps.GOV. +BIGBIRD IN A 165.83.208.5 +$ORIGIN AKSO.nps.GOV. +INPAKSODNS IN A 165.83.49.9 +$ORIGIN WRO.nps.GOV. +VANILLA IN A 165.83.71.3 +$ORIGIN NCC.nps.GOV. +OWL IN A 165.83.34.60 +$ORIGIN net. +FIREHOUSE IN A 63.160.175.19 +gbch IN MX 0 maxim.gbch.net. +VERMONTEL IN A 63.167.45.2 + IN MX 0 pop.vermontel.net. +reedmedia IN A 63.145.197.178 +goldstats IN A 66.33.12.17 +zama IN A 203.142.132.46 +helicon IN A 63.93.137.2 +wetlogic IN MX 10 athome.wetlogic.net. +188 IN A 202.96.125.100 + IN A 202.96.125.101 + IN MX 10 mx2.188.net. + IN MX 20 smtp.188.net. + IN MX 10 mx1.188.net. +valley IN MX 0 lebanon.valley.net. +primary IN A 216.87.34.253 +SOVER IN A 209.198.87.53 + IN A 209.198.87.34 + IN MX 10 mail.sover.net. + IN MX 20 mqueue.sover.net. +UU IN MX 10 external-mail-router.UU.NET. +connriver IN A 63.93.137.13 + IN MX 10 ns.hcr.net. + IN MX 1 mailer.connriver.net. +SHOREHAM IN A 199.170.121.2 +$ORIGIN cinenet.net. +NS1 IN A 198.147.76.65 +$ORIGIN TOGETHER.net. +NS2 IN A 204.97.120.31 +NS1 IN A 204.97.120.30 +$ORIGIN IPHIL.net. +MAKISIG IN A 203.176.28.135 +$ORIGIN PLANET-THREE.net. +NS2 IN A 212.49.219.190 +$ORIGIN FIREHOUSE.net. +DNS2 IN A 63.160.175.18 +DNS1 IN A 63.160.175.19 +$ORIGIN space.net. +ns IN A 195.30.0.1 +$ORIGIN DNS.space.net. +NS4 IN A 195.222.210.93 +NS3 IN A 193.149.44.49 +$ORIGIN ALASKA.net. +NS4-AUTH IN A 209.112.130.4 +NS1-AUTH IN A 209.112.160.4 +$ORIGIN FWIDCSERVICES.net. +DEN-NS2 IN A 216.7.160.32 +IRV-NS1 IN A 216.23.160.51 +DEN-NS1 IN A 216.7.160.31 +NS1 IN A 64.78.224.58 +$ORIGIN BIJT.net. +PAN IN A 213.196.2.97 +$ORIGIN SEABONE.net. +DNS IN A 195.22.205.163 +$ORIGIN SPIN.OMNES.net. +NS IN A 192.23.90.196 +$ORIGIN VERIO.net. +NS2 IN A 129.250.31.190 +NS0 IN A 129.250.15.61 +NS1 IN A 204.91.99.140 +$ORIGIN NS.VERIO.net. +B IN A 129.250.35.32 +T IN A 192.67.14.16 +$ORIGIN GNOSH.net. +GRIN IN A 216.15.87.207 +$ORIGIN NEASE.net. +NS2 IN A 202.103.134.4 +$ORIGIN CRSNIC.net. +NS1 IN A 198.41.3.39 +$ORIGIN VERISIGN.net. +MODOR IN A 205.139.94.55 +CITADEL IN A 205.139.94.15 +PAGOSA IN A 205.139.94.16 +KAOS IN A 208.202.137.126 +$ORIGIN terra.net. +ns2 IN A 199.103.128.2 +ns1 IN A 199.103.128.1 +$ORIGIN ADMONITOR.net. +NS-2 IN A 216.35.185.40 +ads IN A 216.35.185.145 +SC-NS1 IN A 64.70.20.85 +$ORIGIN NORDU.net. +SERVER IN A 193.10.252.19 +$ORIGIN TELEGLOBE.net. +CASTOR IN A 199.202.55.2 +$ORIGIN sodak.net. +NS2 IN A 63.65.239.225 +RINGNECK IN A 63.65.238.65 +$ORIGIN gbch.net. +MAXIM IN A 203.9.155.249 +$ORIGIN VERMONTEL.net. +pop IN CNAME loomis.vermontel.net. +NS2 IN A 204.164.106.8 +loomis IN A 204.164.106.19 +NS1 IN A 204.164.106.2 +$ORIGIN farm.net. +ns IN A 216.112.179.160 +$ORIGIN NAP.net. +NS2 IN A 206.54.224.1 +$ORIGIN AH.net. +NS4 IN A 203.21.205.20 +NS2 IN A 203.21.205.1 +$ORIGIN NS.GDNS.net. +LHR IN A 212.250.25.101 +DCA IN A 209.207.221.1 +$ORIGIN CONCENTRIC.net. +NAMESERVER1 IN A 207.155.183.73 +NAMESERVER3 IN A 206.173.119.72 +NAMESERVER IN A 207.155.183.72 +NIC2 IN A 207.88.60.5 +NAMESERVER2 IN A 207.155.184.72 +$ORIGIN att.net. +worldnet IN A 199.70.151.234 +$ORIGIN worldnet.att.net. +ns3 IN A 204.127.160.1 +ns4 IN A 204.127.160.2 +mtiwmhc22 IN A 204.127.131.47 +ns1 IN A 204.127.129.1 +ns IN A 204.127.160.2 + IN A 12.102.240.1 + IN A 12.102.240.2 + IN A 12.102.244.1 + IN A 12.102.244.2 + IN A 204.127.129.1 + IN A 204.127.129.2 + IN A 204.127.160.1 +ns2 IN A 204.127.129.2 +$ORIGIN OR.BR.NP.ELS-GMS.att.net. +ORCU IN A 199.191.129.139 +$ORIGIN WY.BR.NP.ELS-GMS.att.net. +WYCU IN A 199.191.128.43 +$ORIGIN OH.MT.NP.ELS-GMS.att.net. +OHCU IN A 199.191.144.75 +$ORIGIN MA.MT.NP.ELS-GMS.att.net. +MACU IN A 199.191.145.136 +$ORIGIN MT.NS.ELS-GMS.att.net. +CMTU IN A 12.127.16.69 +DMTU IN A 12.127.16.70 +$ORIGIN BR.NS.ELS-GMS.att.net. +CBRU IN A 199.191.128.105 +DBRU IN A 199.191.128.106 +$ORIGIN LEB.net. +NS IN A 206.127.55.2 +$ORIGIN SEG.net. +NS2 IN A 206.34.181.16 +NS1 IN A 206.34.181.15 +$ORIGIN romkey.SEG.net. +ip1 IN A 207.121.69.234 +$ORIGIN ync.net. +NS4 IN A 206.185.20.9 +NS2 IN A 216.34.185.21 +NS5 IN A 206.185.20.10 +NS3 IN A 206.185.20.8 +ns1 IN A 216.34.185.20 +$ORIGIN GLOBECOMM.net. +NS2 IN A 165.251.1.3 +NS1 IN A 165.251.1.2 +$ORIGIN PREP.net. +DNS-EAST IN A 129.250.252.10 +$ORIGIN EARTHLINK.net. +NS4 IN A 209.179.179.19 +DNS2 IN A 207.217.77.12 +DNS3 IN A 207.217.120.13 +DNS4 IN A 209.179.179.18 +NS1 IN A 207.217.126.41 +NS2 IN A 207.217.77.42 +$ORIGIN SPRINTLINK.net. +NS3-AUTH IN A 144.228.255.10 +NS2-AUTH IN A 144.228.254.10 +NS1-AUTH IN A 206.228.179.10 +$ORIGIN OP.net. +NS1 IN A 209.152.193.4 +$ORIGIN CERNET.net. +NS IN A 202.112.0.44 +$ORIGIN zenon.net. +dns IN A 195.2.83.107 +$ORIGIN INFI.net. +NS3 IN A 205.219.239.5 +NS4 IN A 216.33.106.19 +NS001 IN A 208.131.160.201 +NS1 IN A 198.22.1.107 +NS2 IN A 198.22.1.108 +$ORIGIN vh8.INFI.net. +vh80040 IN A 209.97.59.245 +vh80167 IN A 209.97.57.116 +$ORIGIN vh4.INFI.net. +vh40099 IN A 209.97.59.121 +$ORIGIN SCRUZ.net. +NS2 IN A 165.227.2.10 +NS IN A 165.227.1.1 +$ORIGIN HINET.net. +netnews IN A 168.95.195.16 + IN MX 0 netnews.hinet.net. +HNTP1 IN A 168.95.192.1 +HNTP3 IN A 168.95.192.2 +DNS IN A 168.95.1.1 +$ORIGIN reedmedia.net. +ns2 IN A 209.241.86.6 +NS1 IN A 63.145.197.178 +$ORIGIN schnism.net. +ns IN A 195.88.150.3 +$ORIGIN unlisys.net. +mail IN A 195.21.255.252 +$ORIGIN AIC.net. +NS IN A 195.250.64.65 +$ORIGIN PIPEX-SZ.net. +NS IN A 196.15.232.19 +$ORIGIN DOMAINNT.net. +DENEB IN A 207.211.220.90 +RIGEL IN A 212.0.205.5 +VEGA IN A 209.26.120.5 +POLARIS IN A 209.26.120.2 +ANTARES IN A 209.26.120.3 +$ORIGIN GUERNSEY.net. +DNS2 IN A 195.226.128.3 +$ORIGIN usa.net. +CNDVG001 IN A 165.212.12.1 +$ORIGIN OPS.usa.net. +dns03 IN A 204.68.24.136 +DNS01 IN A 204.68.24.137 +$ORIGIN INR.net. +NS2 IN A 198.77.208.3 +NS1 IN A 198.77.208.2 +$ORIGIN CP.MSFT.net. +dns6 IN A 207.46.138.20 +DNS4 IN A 207.46.138.11 +dns7 IN A 207.46.138.21 +dns IN A 207.46.138.10 +DNS5 IN A 207.46.138.12 +$ORIGIN UK.MSFT.net. +DNS4 IN A 213.199.144.152 +DNS3 IN A 213.199.144.151 +$ORIGIN TK.MSFT.net. +DNS2 IN A 207.46.232.38 +DNS1 IN A 207.46.232.37 +$ORIGIN HHS.net. +NS IN A 63.93.136.29 +$ORIGIN NEWACCOUNT.net. +NS IN A 216.121.96.26 +$ORIGIN PBI.net. +NS2 IN A 206.13.29.11 +NS1 IN A 206.13.28.11 +$ORIGIN timeheart.net. +ns1 IN A 63.197.231.203 +$ORIGIN TOSA.TWTELECOM.net. +INS2 IN A 204.95.160.4 +INS1 IN A 204.95.160.2 +$ORIGIN zama.net. +NS2 IN A 203.142.130.5 +NS1 IN A 203.142.130.4 +$ORIGIN MINDLINK.net. +GIANT IN A 204.174.18.2 +DEEP IN A 204.174.16.4 +$ORIGIN SER.BBNPLANET.net. +KNOCK IN A 192.239.16.129 +$ORIGIN MEDIASERVICES.net. +NS2 IN A 64.65.16.237 +NS IN A 64.65.15.147 +$ORIGIN KOLO.net. +NS IN A 209.66.103.20 +$ORIGIN SEYCHELLES.net. +NS1 IN A 202.84.235.33 +$ORIGIN BT.net. +NS0 IN A 194.72.6.51 +$ORIGIN JERKY.net. +NS1 IN A 204.57.55.100 +$ORIGIN CN.net. +DNS2 IN A 202.97.18.61 +NS1 IN A 202.97.7.17 +NS IN A 202.97.16.195 +$ORIGIN runway.CN.net. +ns IN A 211.101.132.8 +$ORIGIN APNIC.net. +SVC00 IN A 202.12.28.131 +TECKLA IN A 202.12.28.129 +NS IN A 203.37.255.97 +$ORIGIN BELLSOUTH.net. +NS IN A 205.152.0.5 +$ORIGIN ATL.BELLSOUTH.net. +NS IN A 205.152.0.20 +$ORIGIN CL.BELLSOUTH.net. +NS2 IN A 205.152.16.8 +NS3 IN A 205.152.32.8 +$ORIGIN MIA.BELLSOUTH.net. +NS IN A 205.152.16.20 +$ORIGIN RDU.BELLSOUTH.net. +NS IN A 205.152.32.20 +$ORIGIN 163.net. +SHNS IN A 61.129.65.108 +BJNS IN A 202.108.255.202 +NS IN A 202.108.255.201 +$ORIGIN ca.us.ibm.net. +ns02 IN A 165.87.201.243 +ns01 IN A 165.87.201.244 +$ORIGIN ny.us.ibm.net. +ns01 IN A 165.87.194.244 +$ORIGIN CP.net. +NS3 IN A 209.228.14.4 +NS1 IN A 209.228.15.4 +$ORIGIN tallship.net. +falcon IN A 208.179.112.2 +condor IN A 12.28.140.20 +nomad IN A 204.107.129.2 +satan IN A 204.107.129.3 +rectum IN A 204.107.129.10 +$ORIGIN ns.tmcs.net. +b IN A 209.104.33.252 +c IN A 209.104.39.252 +a IN A 209.104.63.252 +$ORIGIN pshift.net. +mail IN A 208.153.85.30 +$ORIGIN CTCCOM.net. +NS4 IN A 64.69.100.35 +NS3 IN A 64.69.100.67 +$ORIGIN cid.net. +bofh IN A 212.172.21.254 +$ORIGIN PIPEX.net. +NS0 IN A 158.43.128.8 +NS1 IN A 158.43.192.7 +$ORIGIN DNS.PIPEX.net. +NS1-Y IN A 158.43.193.89 +NS0-Y IN A 158.43.129.89 +$ORIGIN SOTELMA.net. +DOGON IN A 208.144.230.1 +CIWARA IN A 208.144.230.2 +$ORIGIN DK.net. +NS IN A 193.88.44.42 +$ORIGIN HIGGS.net. +ns2 IN A 204.80.125.145 +ns3 IN A 204.80.101.94 +ns IN A 204.80.101.90 +ns1 IN A 204.80.125.130 +PINE IN A 204.80.125.130 +$ORIGIN E-SYNC.net. +NS2 IN A 192.206.57.128 +NS1 IN A 192.206.57.127 +$ORIGIN ABOVE.net. +NS3 IN A 207.126.105.146 +NS IN A 207.126.96.162 +$ORIGIN COBEX.net. +NS2 IN A 207.102.129.72 +NS1 IN A 207.102.129.71 +$ORIGIN NEO.net. +NS2 IN A 206.109.7.65 +NS IN A 206.109.1.1 +$ORIGIN AFRIQ.net. +BAABEN IN A 165.231.1.3 +NEENE IN A 165.231.1.2 +$ORIGIN CW.net. +NS4 IN A 204.70.49.234 +NS2 IN A 204.70.57.242 +NS3 IN A 204.70.25.234 +NS IN A 204.70.128.1 +$ORIGIN hactrn.net. +NS IN A 216.254.68.12 +$ORIGIN QUASAR.net. +NS1 IN A 199.166.31.3 +$ORIGIN VERMONTLAW.net. +NS1 IN A 63.89.26.15 +NS IN A 63.89.26.16 +$ORIGIN ICP.net. +ICM1 IN A 192.94.207.66 +$ORIGIN wetlogic.net. +athome IN CNAME c1059495-a.snvl1.sfba.home.com. +$ORIGIN NY.ALTER.net. +New-York4 IN A 137.39.126.10 + IN A 137.39.2.3 +$ORIGIN pccf.net. +proxy IN A 205.189.73.123 +$ORIGIN IS-FUN.net. +NS4 IN A 212.162.54.34 +$ORIGIN GUA.net. +OSI2 IN A 205.161.188.3 +$ORIGIN 2GLOBE.net. +TERMINAL IN A 195.178.183.230 +NS IN A 195.178.183.200 +$ORIGIN SYS.GTEI.net. +DNSAUTH2 IN A 4.2.49.3 +DNSAUTH3 IN A 4.2.49.4 +DNSAUTH1 IN A 4.2.49.2 +$ORIGIN SPEAKEASY.net. +NS2 IN A 216.231.41.22 +NS1 IN A 216.254.0.9 +$ORIGIN PSI.net. +NS2 IN A 38.8.50.2 +$ORIGIN DNS.UK.PSI.net. +SEC1 IN A 154.32.105.34 +$ORIGIN ray.net. +ns1 IN A 195.238.228.131 +$ORIGIN anycast.net. +ns1 IN A 216.196.51.4 +$ORIGIN EP.net. +FLAG IN A 198.32.4.13 +$ORIGIN SR.net. +NS2 IN A 200.1.156.11 +NS1 IN A 200.1.157.10 +$ORIGIN IPTEK.net. +CADDSYS IN A 202.46.1.2 +$ORIGIN NIC.XLINK.net. +DNS IN A 193.141.40.42 +$ORIGIN NURSAT.net. +NS2 IN A 212.13.167.1 +NS IN A 194.226.128.1 +$ORIGIN 188.net. +smtp IN A 202.96.125.104 +mx2 IN A 202.96.125.101 +ns2 IN A 202.103.134.4 +mx1 IN A 202.96.125.100 +NS IN A 202.96.125.106 +$ORIGIN KORNET.net. +NS IN A 168.126.63.1 +$ORIGIN CCSRS.net. +NS2 IN A 206.253.214.73 +NS1 IN A 209.237.73.73 +$ORIGIN EU.net. +NS IN A 192.16.202.11 +$ORIGIN USSR.EU.net. +NS IN A 193.124.22.65 +$ORIGIN RELCOM.EU.net. +NS IN A 193.124.23.3 +$ORIGIN AUSTRIA.EU.net. +NS IN A 192.92.138.35 +NS3 IN A 193.154.160.110 +$ORIGIN hypa.net. +ns2 IN A 63.160.181.11 +ns1 IN A 63.160.181.10 + IN A 209.166.167.208 +$ORIGIN IDT.net. +NS IN A 198.4.75.100 +$ORIGIN NS.IDT.net. +AUTH2 IN A 169.132.133.1 +$ORIGIN ROOT-SERVERS.net. +A IN A 198.41.0.4 +B IN A 128.9.0.107 +C IN A 192.33.4.12 +D IN A 128.8.10.90 +E IN A 192.203.230.10 +F IN A 192.5.5.241 +G IN A 192.112.36.4 +H IN A 128.63.2.53 +I IN A 192.36.148.17 +$ORIGIN I-DNS.net. +D IN A 211.169.245.170 +B IN A 208.184.25.199 +F IN A 216.200.119.128 +E IN A 202.160.253.152 +C IN A 210.189.254.50 +A IN A 208.184.174.7 +$ORIGIN US.PRSERV.net. +NS4 IN A 165.87.201.244 +NS1 IN A 165.87.194.244 +NS3 IN A 165.87.201.243 +$ORIGIN U-NET.net. +NS0 IN A 194.119.128.65 +NS1 IN A 194.119.128.66 +$ORIGIN HS0.U-NET.net. +NS0 IN A 194.119.128.70 +NS1 IN A 194.119.128.71 +$ORIGIN ULTRADNS.net. +UDNS2 IN A 204.74.101.1 +UDNS1 IN A 204.69.234.1 +$ORIGIN WEBMAGIC.net. +NS2 IN A 64.168.49.66 +NS1 IN A 209.119.182.2 +$ORIGIN HOST4U.net. +NS2 IN A 209.150.129.3 +NS IN A 209.150.128.30 +$ORIGIN RCCN.net. +DNS IN A 193.136.7.17 +$ORIGIN valley.net. +lebanon IN A 198.115.160.16 +NS2 IN A 198.115.160.16 +DNS IN A 198.115.160.10 +$ORIGIN primary.net. +dns2 IN A 205.242.187.235 +NS2 IN A 205.242.176.103 +dns1 IN A 205.242.187.234 +NS1 IN A 205.242.92.2 +$ORIGIN SQUONK.net. +NS2 IN A 63.84.12.135 +NS1 IN A 63.84.12.133 +$ORIGIN IP-PLUS.net. +NS1 IN A 164.128.36.34 +$ORIGIN TECHNOLOGIA.net. +NS2 IN A 207.253.59.4 +NS1 IN A 207.253.214.199 +NS3 IN A 195.115.180.67 +$ORIGIN VI.net. +NS2 IN A 212.78.64.10 +NS1 IN A 194.88.77.1 +$ORIGIN ISLES.net. +RS IN A 212.100.224.90 +$ORIGIN SOVER.net. +time IN CNAME garnet.sover.net. +mqueue IN A 209.198.87.52 +etrn IN A 209.198.87.58 +garnet IN A 209.198.87.53 +MAPLE IN A 209.198.87.41 +CLOVER IN A 209.198.87.40 +mail IN A 209.198.87.53 + IN A 209.198.87.34 +mqueue0 IN A 209.198.87.52 +$ORIGIN ACT2000.net. +ACT2 IN A 207.42.132.227 +ACT1 IN A 207.42.132.226 +$ORIGIN AKADNS.net. +ZA IN A 209.185.188.39 +ZB IN A 216.32.65.105 +ZC IN A 204.178.107.227 +ZD IN A 204.178.110.67 +ZE IN A 216.200.14.118 +ZF IN A 208.5.85.132 +ZG IN A 206.132.160.36 +ZH IN A 63.208.48.42 +$ORIGIN NS.ESAT.net. +NS3 IN A 192.111.39.100 +$ORIGIN THEPLANET.net. +EARTH IN A 195.92.195.222 +PLUTO IN A 194.207.6.30 +VENUS IN A 194.152.65.222 +$ORIGIN UU.net. +uunet IN MX 10 Mail.uu.net. +external-mail-router IN A 198.5.241.39 + IN A 198.5.241.38 + IN A 198.5.241.40 +NS IN A 137.39.1.3 +$ORIGIN NS.DE.UU.net. +AUTH03 IN A 192.76.144.16 +$ORIGIN NS.UU.net. +AUTH100 IN A 198.6.1.202 +AUTH00 IN A 198.6.1.65 +AUTH02 IN A 198.6.1.82 +AUTH03 IN A 198.6.1.83 +AUTH60 IN A 198.6.1.181 +AUTH61 IN A 198.6.1.182 +AUTH110 IN A 198.6.1.114 +AUTH50 IN A 198.6.1.161 +AUTH51 IN A 198.6.1.162 +$ORIGIN PIONEERNET.net. +DNS2 IN A 208.240.196.10 +DNS1 IN A 208.240.196.9 +$ORIGIN HOME.net. +NS2 IN A 24.2.0.27 +NS1 IN A 24.0.0.27 +$ORIGIN QUANTIFIED.net. +NS2 IN A 63.212.171.3 +NS1 IN A 63.212.171.2 +$ORIGIN SECURE.net. +NS2 IN A 161.58.9.10 +NS1 IN A 192.41.1.10 +$ORIGIN DSL.net. +NS2 IN A 209.87.79.232 +NS1 IN A 209.87.64.70 +$ORIGIN JA.net. +NS0 IN A 128.86.1.20 + IN A 193.63.94.20 +$ORIGIN ULCC.JA.net. +NOC IN A 193.63.94.25 +$ORIGIN CINE.net. +NS2 IN A 207.168.250.12 +$ORIGIN ANS.net. +NS-02B IN A 207.24.245.178 +NS-01B IN A 199.221.47.8 +NS-02A IN A 207.24.245.179 +NS-01A IN A 199.221.47.7 +$ORIGIN OAR.net. +NS2 IN A 192.88.195.10 +NS1 IN A 192.88.193.144 +$ORIGIN MAHNET.net. +NS2 IN A 207.219.173.132 +NS1 IN A 24.69.168.121 +$ORIGIN NCREN.net. +REGGAE IN A 128.109.131.3 +NCNOC IN A 192.101.21.1 +$ORIGIN AMERICA.net. +AUTH2 IN A 209.17.197.18 +AUTH1 IN A 209.17.197.2 +$ORIGIN EXODUS.net. +NS2 IN A 207.82.198.150 +NS IN A 206.79.230.10 +NS3 IN A 206.79.240.13 +$ORIGIN NJ.EXODUS.net. +NS2 IN A 209.1.10.234 +NS IN A 206.79.7.50 +$ORIGIN DOUBLECLICK.net. +uunymdgds1 IN A 206.65.183.21 +dcnymdgds1 IN A 204.253.104.202 +exnjmdgds1 IN A 209.67.38.22 +dcnyadgds1 IN A 204.253.104.11 +bbvamdgds1 IN A 128.11.60.75 +exnjadgds1 IN A 209.67.38.48 +annyadgds1 IN A 208.184.29.250 +annyadgds2 IN A 208.184.29.252 +cwvamdgds1 IN A 205.138.3.240 +uucamdgds1 IN A 204.178.112.124 +cwvaadgds1 IN A 205.138.3.242 +spnjadgds1 IN A 208.32.211.70 +cwvaadgds2 IN A 205.138.3.243 +ctukadgds1 IN A 213.86.246.20 +tlseadgds1 IN A 194.237.107.6 +uusjmdgds1 IN A 204.176.177.20 +uuvamdgds1 IN A 204.178.112.168 +$ORIGIN DCNY.DOUBLECLICK.net. +NS2 IN A 204.253.104.10 +NS1 IN A 208.211.225.10 +$ORIGIN UUSJ.DOUBLECLICK.net. +NS1 IN A 204.176.177.10 +$ORIGIN CWVA.DOUBLECLICK.net. +NS1 IN A 205.138.3.20 +$ORIGIN DSO.net. +NS2 IN A 206.16.77.11 +NS1 IN A 206.16.77.10 +$ORIGIN GIP.net. +NS2 IN A 204.59.1.222 +NS1 IN A 204.59.144.222 +NS3 IN A 204.59.64.222 +$ORIGIN AMNIC.net. +NS IN A 195.250.64.90 +$ORIGIN TELSTRA.net. +NS1 IN A 139.130.4.5 +$ORIGIN ELI.net. +NS2 IN A 207.173.86.2 +NS IN A 209.63.0.2 +$ORIGIN TWNIC.net. +NS IN A 192.83.166.11 +$ORIGIN BAHNHOF.net. +NS2 IN A 212.85.64.4 +NS1 IN A 195.178.160.2 +$ORIGIN ivm.net. +ns1 IN A 62.204.1.1 +$ORIGIN BEACHSHORE.net. +NS1 IN A 199.166.31.250 +$ORIGIN TDS.net. +NS IN A 204.246.1.20 +$ORIGIN FIRSTWORLD.net. +NS4 IN A 216.7.160.162 +NS2 IN A 216.127.92.78 +NS1 IN A 216.7.160.75 +NS3 IN A 216.7.160.161 +$ORIGIN centralinfo.net. +ns2 IN A 63.102.204.130 +ns1 IN A 63.102.200.2 +$ORIGIN NOC.NULLUS.net. +NS2 IN A 63.119.253.254 +NS3 IN A 63.168.101.254 +NS1 IN A 209.136.161.254 +$ORIGIN FREE.net. +NS1 IN A 147.45.15.34 +$ORIGIN mediaone.net. +NS1 IN A 24.128.1.80 +NS2 IN A 24.128.1.81 +$ORIGIN MW.mediaone.net. +NS1 IN A 24.131.1.8 +$ORIGIN JVNC.net. +NISC IN A 128.121.50.7 +$ORIGIN NS.NYC1.GLOBIX.net. +Z1 IN A 209.10.66.55 +$ORIGIN NS.LHR1.GLOBIX.net. +Z1 IN A 212.111.32.38 +$ORIGIN NS.SJC1.GLOBIX.net. +Z1 IN A 209.10.34.55 +$ORIGIN akamaitech.net. +za IN A 204.178.107.226 +n6g IN A 216.52.121.175 +ZB IN A 128.11.47.240 +n2g IN A 216.52.56.47 +ZC IN A 216.32.65.14 +ZD IN A 38.144.120.147 +n5g IN A 216.52.56.33 +ZE IN A 216.200.14.134 +n1g IN A 216.52.56.36 +ZF IN A 204.178.110.73 +n8g IN A 216.52.56.33 +ZG IN A 209.185.188.14 +n4g IN A 216.52.56.33 +ZH IN A 213.161.66.165 +n0g IN A 216.52.56.33 +n7g IN A 216.52.196.5 +n3g IN A 216.52.56.48 +$ORIGIN THNIC.net. +NS-AIT IN A 192.41.170.219 +NS IN A 202.28.0.1 +$ORIGIN connriver.net. +mailer IN A 63.93.137.13 +ns2 IN A 208.240.246.5 +netserver IN A 204.249.74.100 +$ORIGIN IT.net. +DNS2 IN A 151.1.2.1 +DNS IN A 151.1.1.1 +$ORIGIN D4P.net. +foolusmf IN CNAME a100.g.akamai.net. +$ORIGIN LUCKY.net. +NS IN A 193.193.193.100 +$ORIGIN SENET.net. +NS IN A 206.155.163.195 +$ORIGIN RIPE.net. +NS IN A 193.0.0.193 +$ORIGIN ADELPHIA.net. +NS2 IN A 24.48.62.35 +NS3 IN A 208.239.78.134 +NS1 IN A 24.48.43.3 +$ORIGIN cdp.ADELPHIA.net. +mx1 IN A 24.48.58.221 +$ORIGIN buf.ADELPHIA.net. +mx1 IN A 24.48.36.10 +$ORIGIN INTERNIC.net. +NS2 IN A 198.41.0.11 +$ORIGIN UNDPBI.TELEPAC.net. +SOL IN A 194.65.87.2 +$ORIGIN KRNIC.net. +NS1 IN A 202.30.50.51 +NS IN A 202.30.50.50 +$ORIGIN UNI2.net. +NS2 IN A 195.82.195.99 +NS IN A 129.142.7.99 +$ORIGIN GTLD-SERVERS.net. +K IN A 213.177.194.5 +A IN A 198.41.3.38 +B IN A 203.181.106.5 +M IN A 202.153.114.101 +C IN A 205.188.185.18 +D IN A 208.206.240.5 +E IN A 207.200.81.69 +F IN A 198.17.208.67 +G IN A 198.41.3.101 +I IN A 192.36.144.133 +J IN A 210.132.100.101 +$ORIGIN dns.swip.net. +kista IN A 192.71.220.9 +$ORIGIN RCPIP.net. +EKEKO IN A 209.45.127.2 +$ORIGIN UNA.net. +ENGINE1 IN A 208.136.52.74 +$ORIGIN hcr.net. +ns IN A 208.240.246.4 +$ORIGIN NSIREGISTRY.net. +NS2 IN A 198.41.3.108 +$ORIGIN SUBTEND.net. +NAVI IN A 208.186.117.224 +NS1 IN A 208.186.117.71 +$ORIGIN IAD.GBLX.net. +NAME IN A 204.152.166.155 +$ORIGIN PHX.GBLX.net. +NAME IN A 206.165.6.10 +$ORIGIN ROC.GBLX.net. +NAME IN A 209.130.187.10 +$ORIGIN SHOREHAM.net. +pop IN CNAME shoreham.net. +$ORIGIN GREENMOUNTAINACCESS.net. +NS2 IN A 208.144.252.31 +NS1 IN A 208.144.252.30 +$ORIGIN MINDSPRING.net. +SCRATCHY IN A 207.69.200.211 +ITCHY IN A 207.69.200.210 +$ORIGIN RIPN.net. +NS2 IN A 195.209.0.6 +NS IN A 194.85.119.1 +$ORIGIN CWCI.net. +NS0 IN A 194.6.79.162 +$ORIGIN GBMTECH.net. +NS2 IN A 208.243.164.3 +NS1 IN A 208.243.164.2 +$ORIGIN vrx.net. +pedic-med IN A 199.166.24.2 +ns2 IN A 65.196.80.102 +ns3 IN A 199.166.24.3 +ns1 IN A 199.166.24.1 + IN A 216.13.76.2 +$ORIGIN globalnetisp.net. +NS2 IN A 207.136.213.2 +NS1 IN A 207.136.213.1 +$ORIGIN MYNET.net. +FAITH IN A 207.13.11.2 +$ORIGIN ADNS.net. +NS2 IN A 199.5.157.3 +KOVU IN A 199.5.157.52 +NS1 IN A 199.5.157.2 +$ORIGIN DIEBOLD.net. +NS1 IN A 65.196.80.10 +$ORIGIN JPS.net. +NS2 IN A 216.224.156.252 +NS1 IN A 216.119.0.192 +$ORIGIN NETNAMES.net. +NS2 IN A 212.53.77.28 +NS1 IN A 212.53.64.60 +$ORIGIN RIO.net. +ORSTOM IN A 192.33.151.1 +$ORIGIN com. +sherickpm IN MX 10 inbound.sherickpm.com.criticalpath.net. +ultradevices IN A 209.249.61.20 +verisign IN A 205.139.94.60 +vermontel IN A 204.164.106.2 + IN MX 0 pop.vermontel.net. +TOPICA IN A 206.132.75.196 +unknown IN A 168.143.148.168 +vietmercury IN A 207.1.134.34 +moonmothers IN A 24.218.253.157 + IN MX 10 costorf.ne.mediaone.net. +vhv IN MX 0 mail.vhv.com. +BURSTNET IN MX 15 mail.ar.com. + IN MX 5 ibd.ar.com. +velco IN A 207.217.96.41 + IN A 207.217.96.42 + IN A 207.217.96.43 + IN A 207.217.96.44 + IN A 207.217.96.45 + IN A 207.217.96.28 + IN A 207.217.96.29 + IN A 207.217.96.30 + IN A 207.217.96.31 + IN A 207.217.96.32 + IN A 207.217.96.33 + IN A 207.217.96.34 + IN A 207.217.96.35 + IN A 207.217.96.36 + IN A 207.217.96.37 + IN A 207.217.96.38 + IN A 207.217.96.39 + IN A 207.217.96.40 + IN MX 10 mail.velco.com. +ffic IN A 64.84.58.128 + IN MX 5 mail.mailconnect.com. +overstock IN A 64.78.130.251 +madriver IN MX 10 bend.madriver.com. +catic1 IN MX 10 Mail.catic1.com. + IN MX 20 smtp-Relay.CTCCom.net. +goldstats IN A 66.33.12.17 +nominum IN A 204.152.184.170 +hill IN A 208.162.106.6 + IN MX 20 mail.hill.com. +garmontusa IN MX 20 mail.garmontusa.com. +bt IN A 62.7.244.127 +xraylitho IN MX 10 mail.sover.net. + IN MX 20 mqueue.sover.net. +glaxowellcome IN MX 10 firewall1.glaxowellcome.com. + IN MX 10 firewall3.glaxowellcome.com. +nova-data IN A 64.70.144.14 + IN MX 10 mail.nova-data.com. +AVENUEA IN MX 100 mail2.louisdreyfus.co.uk. + IN MX 10 ldfwsvr2.l-dreyfus.com. + IN MX 50 ldfwsvr02-hme1.l-dreyfus.com. + IN MX 75 mail.louisdreyfus.co.uk. +best IN MX 10 mail1.best.com. + IN MX 10 mail2.best.com. + IN MX 20 mail3.best.com. + IN MX 20 mail4.best.com. +biketrack IN MX 20 mqueue.sover.net. + IN MX 10 mail.sover.net. +ilovedomain IN A 211.175.164.170 +symquest IN A 64.69.102.131 + IN MX 10 Quest-7.symquest.com. +QUEST-NET IN A 207.140.30.11 + IN MX 5 mail.quest-net.com. +cacheware IN A 209.128.82.20 +Algebra IN A 208.233.99.160 +gmcr IN A 12.34.108.130 + IN MX 10 gateway1.gmcr.com. +YAHOO IN A 216.115.108.243 + IN A 216.115.108.245 +ogud IN MX 90 smtp.elistx.com. + IN MX 10 mail.dc.ogud.com. +costorf IN A 24.218.253.157 + IN MX 10 costorf.ne.mediaone.net. +highmeadow IN A 207.136.209.6 + IN MX 10 hm6.vt.highmeadow.com. + IN MX 20 mqueue.sover.net. +broadsoft IN A 208.39.36.48 +cmates IN MX 10 popmail.u-net.com. +mt-mansfield IN A 208.153.85.16 + IN MX 10 mail.pshift.net. + IN MX 30 pomail.pshift.com. +skiinsurance IN MX 10 mail.skiinsurance.com. + IN MX 20 etrn.sover.net. +map IN A 206.98.40.150 +idx IN MX 30 isdev.idx.com. + IN MX 50 drawbridge.idx.com. + IN MX 10 idx.idx.com. + IN MX 20 bvtsweeper.idx.com. +msgbox IN A 216.71.82.42 +sleepycat IN A 192.41.61.122 +cisco IN A 198.133.219.25 + IN MX 10 proxy2.cisco.com. + IN MX 10 proxy3.cisco.com. + IN MX 20 proxy6.cisco.com. + IN MX 20 proxy9.cisco.com. + IN MX 10 proxy1.cisco.com. +TOAPLAN IN A 216.42.31.169 +hometownbands IN A 209.67.235.38 +smuggs IN MX 10 mail.smuggs.com. +clothncanvas IN A 208.153.85.16 + IN MX 10 mail.pshift.net. + IN MX 30 mail.pshift.com. +quantified IN A 63.212.171.4 +arabia IN A 216.251.232.40 +bostic IN A 199.103.241.218 +verisign-grs IN A 198.41.3.55 +gdarm IN MX 10 bvt-ext.gdarm.com. +retro IN A 205.179.181.194 + IN MX 10 gw.retro.com. + IN MX 20 www.retro.com. + IN MX 50 mail.scruznet.com. +vssg IN A 216.157.26.252 +jerusalem-mail IN A 216.251.232.93 + IN MX 10 mail.jerusalem-mail.com. +tfm IN MX 50 mtbaker.tfm.com. + IN MX 20 mailhost.tfm.com. +fratfunz IN A 216.226.16.150 +elektro IN A 192.188.133.3 +WonderWorks IN A 192.203.206.65 + IN MX 50 mail.wonderworks.com. +fiberia IN MX 10 webmail.fiberia.com. +tifosi IN MX 10 gutenberg.bucksnet.com. +ivillage IN A 209.185.162.150 +pwshift IN A 208.153.85.36 +goputney IN MX 10 mail.sover.net. + IN MX 20 mqueue.sover.net. +$ORIGIN IPNS.com. +NS2 IN A 63.230.183.1 +NS IN A 208.187.190.2 +$ORIGIN appliedtheory.com. +NS2 IN A 168.75.17.11 +NS1 IN A 204.168.28.9 +ns3 IN A 207.127.101.8 +$ORIGIN COMPUWARE.com. +nl IN MX 150 uucp.nl.net. + IN MX 50 bitbucket.extern.uniface.nl. + IN MX 100 smtp.nl.net. +$ORIGIN YOUR-DOMAIN.com. +NS2 IN A 216.167.31.177 +NS1 IN A 216.167.31.176 +$ORIGIN nortelnetworks.com. +NS-RCH IN A 192.135.215.2 +NS-OTT IN A 192.58.194.71 +ns-har IN A 192.100.101.3 +$ORIGIN SJMERCURY.com. +BAYONET IN A 207.1.134.34 +$ORIGIN excite.com. +NSE00 IN A 198.3.102.250 +NS00 IN A 198.3.98.250 +NSE01 IN A 198.3.102.251 +NS01 IN A 198.3.98.251 +$ORIGIN PLANET-THREE.com. +NS0 IN A 212.49.219.164 +$ORIGIN TOKYO.JP.NETDNS.com. +NS1 IN A 64.56.164.118 +$ORIGIN LONDON.UK.NETDNS.com. +NS1 IN A 212.62.6.38 +$ORIGIN SANFRANCISCO.US.NETDNS.com. +NS1 IN A 207.82.50.166 +$ORIGIN NEWYORK.US.NETDNS.com. +NS1 IN A 216.32.212.86 +$ORIGIN SEATTLE.US.NETDNS.com. +NS1 IN A 206.253.214.13 +$ORIGIN ARICATRA.com. +NS IN A 206.64.112.114 +$ORIGIN REGME.com. +NS1 IN A 207.153.57.14 +$ORIGIN ELISTX.com. +smtp IN A 209.116.252.130 +NS IN A 209.116.252.130 +$ORIGIN SIGMAHOSTING.com. +NS1 IN A 209.241.86.6 +$ORIGIN champcable.com. +CCC IN A 207.41.53.11 +$ORIGIN IAFRICA.com. +NS1 IN A 196.7.0.139 +NS3 IN A 196.7.0.137 +$ORIGIN dot-god.com. +A-GTLD-SERVERS IN A 205.189.73.123 +B-GTLD-SERVERS IN A 205.189.71.10 +$ORIGIN CONRADPROMOTIONS.com. +NS2 IN A 208.24.118.203 +NS1 IN A 208.158.96.118 +$ORIGIN onemain.com. +ns4 IN A 63.208.210.11 +NS2 IN A 166.90.148.68 +NS1 IN A 166.90.148.67 +ns3 IN A 63.208.210.10 +$ORIGIN SIMORGH.com. +NS1 IN A 209.1.163.10 +$ORIGIN Christ.com. +Yeshua IN A 207.54.4.5 +Abba IN A 63.229.15.59 +$ORIGIN TRAVELPHOTOCONTESTS.com. +www IN A 64.85.86.156 +$ORIGIN WEB2010.com. +NS4 IN A 216.157.55.6 +NS2 IN A 216.157.79.246 +NS3 IN A 216.157.47.6 +NS IN A 209.235.31.149 +$ORIGIN 2DAY.com. +NS2 IN A 202.89.128.74 +NS1 IN A 202.37.240.13 +NS3 IN A 209.240.128.25 +$ORIGIN NETSCAPE.com. +tdns-me1 IN A 205.188.247.67 +tdns-me2 IN A 205.188.247.68 +tdns2 IN A 207.200.77.53 +tdns3 IN A 207.200.73.72 +NS IN A 198.95.251.10 +NS2 IN A 207.200.73.80 +$ORIGIN WWEBSVS.com. +PAPPILLOMA IN A 209.233.37.10 +$ORIGIN vermontel.com. +ns1 IN A 204.164.106.2 +$ORIGIN LA.TIS.com. +RELAY IN A 198.51.22.11 +$ORIGIN MSEN.com. +DNS IN A 148.59.19.11 +$ORIGIN bungi.com. +DAVER IN A 206.14.228.2 + IN A 207.126.97.2 +max IN A 206.14.228.7 + IN A 207.126.97.7 +$ORIGIN SPEEDHOST.com. +NS2 IN A 216.42.31.169 +NS3 IN A 216.42.31.130 +$ORIGIN GPG.com. +NS2 IN A 209.1.163.50 +NS1 IN A 209.1.163.30 +$ORIGIN NL.CONCENTRIC.com. +NS1 IN A 195.18.114.5 +$ORIGIN SJC.LYCOS.com. +SJC-NS2 IN A 206.79.171.40 +SJC-NS1 IN A 206.79.171.39 +$ORIGIN BOS.LYCOS.com. +BOS-NS2 IN A 209.67.228.40 +BOS-NS1 IN A 209.67.228.39 +$ORIGIN TOPICA.com. +NS3 IN A 206.111.131.72 +ns-ext IN A 206.132.75.195 +inmta011 IN A 206.132.75.197 +inmta009 IN A 206.132.75.226 +dns IN A 206.111.131.72 +outmta004 IN A 206.132.75.201 +inmta001 IN A 206.132.75.197 + IN A 206.111.131.79 +inmta003 IN A 206.132.75.213 +outmta010 IN A 206.132.75.222 +inmta005 IN A 206.132.75.217 +NS1 IN A 206.132.75.195 +NS2 IN A 208.184.76.200 +$ORIGIN DOLEH.com. +NS IN A 204.255.25.63 +$ORIGIN BSDI.com. +NS IN A 207.174.116.8 +$ORIGIN NYTIMES.com. +GATEKEEPER IN A 199.181.175.201 +$ORIGIN GDGSC.com. +NS0 IN A 192.160.62.66 +NS2 IN A 204.162.124.66 +$ORIGIN EDIGITALS.com. +NS2 IN A 211.39.139.36 +NS3 IN A 211.175.164.170 +NS1 IN A 211.39.139.35 +$ORIGIN INTERNETSQUARE.com. +NS2 IN A 205.227.232.9 +NS1 IN A 216.226.16.146 +$ORIGIN MAIL.com. +NS2 IN A 165.251.1.3 +GTLD IN A 165.251.1.239 +NS1 IN A 165.251.1.2 +$ORIGIN moonmothers.com. +localhost IN A 127.0.0.1 +www IN CNAME moonmothers.com. +$ORIGIN vhv.com. +mail IN A 208.5.161.11 +$ORIGIN BOCA15-VERIO.com. +NS15B IN A 208.55.91.51 +NS15A IN A 208.55.91.50 +$ORIGIN ar.com. +ns2 IN A 64.124.80.42 +ibd IN A 63.194.205.75 +mail IN A 63.194.205.74 +NS1 IN A 63.194.205.74 +$ORIGIN BLIPP.com. +VIC20 IN A 195.163.165.35 +$ORIGIN CONCOURSE.com. +NS IN A 199.218.113.2 +$ORIGIN velco.com. +mail IN A 198.136.217.106 +$ORIGIN FLONETWORK.com. +UUNS1DNS1 IN A 209.167.79.5 +UUNS1DNS2 IN A 209.167.79.6 +$ORIGIN overstock.com. +NS1 IN A 207.225.194.13 +$ORIGIN NEWACCOUNT.com. +NS4 IN A 209.78.16.6 +NS2 IN A 209.78.16.5 +NS3 IN A 216.121.32.205 +NS IN A 216.121.32.10 +$ORIGIN tridog.com. +NS2 IN A 206.168.112.51 +TRIDOG1 IN A 206.168.112.71 +$ORIGIN madriver.com. +bend IN A 207.136.232.15 +FUSION IN A 207.136.232.11 +PRIMUS IN A 207.136.232.12 +$ORIGIN catic1.com. +Mail IN A 207.190.204.103 +$ORIGIN IBD.com. +NIC IN A 209.249.61.18 +$ORIGIN IOM.com. +PEBBLES IN A 194.72.124.1 +$ORIGIN nominum.com. +shell IN A 204.152.187.59 +GNS2 IN A 198.133.199.2 +gns1 IN A 198.133.199.1 +$ORIGIN ATLONLINE.com. +ATLNET IN A 207.153.72.193 +ATLWEB1 IN A 207.153.72.194 +$ORIGIN hill.com. +SYRUP IN A 208.162.106.3 +$ORIGIN garmontusa.com. +mail IN A 64.30.8.178 +$ORIGIN VIX.com. +NS-EXT IN A 204.152.184.64 +ns-int IN A 204.152.184.65 +$ORIGIN rc.VIX.com. +db IN A 204.152.187.21 +$ORIGIN SOVAM.com. +NS IN A 194.67.2.97 +$ORIGIN IOS.com. +NOC IN A 198.4.75.69 +$ORIGIN BOSTON.juno.com. +NS IN A 64.136.25.53 +$ORIGIN JERSEY.juno.com. +NS IN A 64.136.17.178 +$ORIGIN NYC.juno.com. +NS IN A 205.231.108.1 +$ORIGIN MEITCA.com. +NS1 IN A 137.203.5.1 +$ORIGIN glaxowellcome.com. +firewall3 IN A 192.58.204.207 +firewall1 IN A 192.58.204.204 +NS IN A 192.58.204.113 +$ORIGIN EPILOGUE.com. +QUERN IN A 128.224.1.136 +$ORIGIN CLASSIFIEDMONSTER.com. +NS1 IN A 216.254.54.22 +$ORIGIN nova-data.com. +mail IN A 12.16.110.35 +$ORIGIN corning.com. +GATEKEEPER IN A 149.42.1.2 +$ORIGIN a1.YIMG.com. +us IN CNAME a32.g.a.yimg.com. +$ORIGIN i1.YIMG.com. +us IN CNAME a1.g.a.yimg.com. +$ORIGIN nc.us.IBM.com. +e24 IN A 32.97.136.230 +e22 IN A 32.97.136.228 +e23 IN A 32.97.136.229 +e21 IN A 32.97.136.227 +$ORIGIN co.us.IBM.com. +e34 IN A 32.97.110.132 +e32 IN A 32.97.110.130 +e33 IN A 32.97.110.131 +e31 IN A 32.97.110.129 +$ORIGIN ny.us.IBM.com. +e4 IN A 32.97.182.104 +e2 IN A 32.97.182.102 +e3 IN A 32.97.182.103 +e1 IN A 32.97.182.101 +$ORIGIN AUSTIN.IBM.com. +NS IN A 192.35.232.34 +$ORIGIN ZURICH.IBM.com. +INTERNET-SERVER IN A 195.212.119.252 +$ORIGIN ALMADEN.IBM.com. +NS IN A 198.4.83.35 +$ORIGIN ERS.IBM.com. +NS IN A 204.146.173.35 +$ORIGIN WATSON.IBM.com. +NS IN A 198.81.209.2 +$ORIGIN DCCSERVER.com. +GODFEVER IN A 208.137.22.6 +$ORIGIN SUN.com. +saturn IN A 192.9.25.2 +venus IN A 192.9.25.5 +east IN MX 40 mars.sun.com. + IN MX 40 mondzo.sun.com. + IN MX 5 venus.sun.com. + IN MX 5 lukla.sun.com. + IN MX 5 saturn.sun.com. + IN MX 5 patan.sun.com. + IN MX 15 mercury.sun.com. +mondzo IN A 192.18.100.1 +lukla IN A 192.18.98.31 +NS-BRM IN A 192.18.99.5 +ns-os IN A 192.9.9.6 +patan IN A 192.18.98.43 +mars IN A 192.9.22.1 +mercury IN A 192.9.25.1 +NS IN A 192.9.9.3 +$ORIGIN pr.SUN.com. +ns1 IN A 192.18.16.2 +$ORIGIN eu.SUN.com. +ns1 IN A 192.18.240.8 +$ORIGIN USEC.SUN.com. +NS IN A 192.9.48.3 +$ORIGIN PSHIFT.com. +ns2 IN A 208.153.85.21 +NS1 IN A 208.153.85.20 +$ORIGIN mobydark.com. +ns1 IN A 216.13.76.21 +$ORIGIN compuserve.com. +DUB-NAME-SVC-1 IN A 149.174.213.5 +ARL-NAME-SVC-1 IN A 149.174.211.5 +$ORIGIN NS.cs.com. +DNS-02 IN A 205.188.157.235 +DNS-01 IN A 152.163.159.235 +$ORIGIN pcode.com. +ns1 IN A 216.15.192.135 +$ORIGIN AVENUEA.com. +EX2-DNS0 IN A 216.34.88.20 +SEA2DNS IN A 63.251.8.150 +$ORIGIN PHOTOTRUST.com. +Filer IN A 64.85.86.172 +NS02 IN A 64.85.86.142 +www IN A 64.85.86.151 +NS01 IN A 64.85.86.141 +$ORIGIN GOOGLE.com. +HEDNS1 IN A 64.209.200.10 +helbdns IN A 64.209.200.252 +valbdns IN A 216.239.37.252 +exlbdns IN A 64.208.34.252 +sulbdns IN A 64.208.32.252 +NS IN A 209.185.108.134 +sjlbdns IN A 216.239.35.252 +NS2 IN A 209.185.108.135 +$ORIGIN ns0.com. +NS00 IN A 216.92.60.60 +ns0 IN A 209.197.64.1 +$ORIGIN best.com. +NS3 IN A 209.24.149.42 +mail2 IN A 206.184.139.12 + IN A 206.184.139.13 + IN A 206.184.139.16 + IN A 206.184.139.18 +mail3 IN A 206.184.139.12 + IN A 206.184.139.13 + IN A 206.184.139.16 + IN A 206.184.139.18 +mail4 IN A 206.184.139.12 + IN A 206.184.139.13 + IN A 206.184.139.16 + IN A 206.184.139.18 +NS1 IN A 209.24.149.41 +mail1 IN A 206.184.139.12 + IN A 206.184.139.13 + IN A 206.184.139.16 + IN A 206.184.139.18 +NS2 IN A 209.157.102.11 +$ORIGIN WESTOL.com. +NS IN A 63.93.137.4 +$ORIGIN ilovedomain.com. +ns IN A 211.175.164.170 +$ORIGIN symquest.com. +Quest-7 IN A 64.69.102.131 +$ORIGIN QUEST-NET.com. +mail IN A 207.140.30.11 +NS2 IN A 207.140.30.13 +NS1 IN A 207.140.30.11 +$ORIGIN cavebear.com. +p2 IN A 199.184.128.35 +npax IN A 192.203.17.71 +$ORIGIN cacheware.com. +ns1 IN A 64.221.210.242 +$ORIGIN Algebra.com. +ns3 IN A 216.254.54.22 +ns1 IN A 160.79.196.177 +NS5 IN A 208.233.99.161 +$ORIGIN gmcr.com. +gateway1 IN A 12.34.108.130 +$ORIGIN YAHOO.com. +NS1 IN A 204.71.200.33 +$ORIGIN EUROPE.YAHOO.com. +NS3 IN A 217.12.4.71 +$ORIGIN DCX.YAHOO.com. +NS5 IN A 216.32.74.10 +$ORIGIN GRANITECANYON.com. +NS2 IN A 204.1.217.148 +NS1 IN A 205.166.226.38 +$ORIGIN costorf.com. +localhost IN A 127.0.0.1 +www IN CNAME costorf.com. +$ORIGIN PSG.com. +RAIN IN A 147.28.0.34 +RIP IN A 147.28.0.39 +$ORIGIN vt.highmeadow.com. +hm6 IN A 207.136.209.6 +$ORIGIN btinternet.com. +DNS2 IN A 194.73.73.94 +DNS1 IN A 194.73.73.95 +$ORIGIN INTERNET-TOOLS.com. +NS2 IN A 206.109.113.140 +NS IN A 208.239.1.2 +NS3 IN A 38.153.179.2 +$ORIGIN CADABRA.com. +NS2 IN A 209.157.194.109 +NS IN A 209.143.240.148 +$ORIGIN SLOWMOE.com. +NS2 IN A 137.118.8.50 +NS1 IN A 137.118.8.49 +$ORIGIN ZTNET.com. +NS2 IN A 63.211.17.252 +NS1 IN A 63.211.17.251 +$ORIGIN HOTWIRED.com. +NS2 IN A 209.185.151.6 +NS4 IN A 209.185.151.4 +NS1 IN A 216.32.228.8 +NS3 IN A 216.32.228.9 +$ORIGIN g-world.com. +NS1 IN A 216.26.39.10 +$ORIGIN alcatrazmedia.com. +ns1 IN A 167.160.132.2 +$ORIGIN MESSAGESECURE.com. +KYNSE02 IN A 216.142.252.201 +KYNSE01 IN A 216.142.252.199 +$ORIGIN HAITIWORLD.com. +APPSRV IN A 206.152.15.34 +NS IN A 206.152.15.33 +$ORIGIN NETSOL.com. +NS2 IN A 198.17.208.71 +RS0 IN A 216.168.224.206 +NS3 IN A 216.168.224.201 +NS1 IN A 216.168.224.200 +$ORIGIN cmates.com. +NS-AUTH2 IN A 208.23.213.3 +ns-auth1 IN A 208.23.213.2 +$ORIGIN skiinsurance.com. +mail IN A 207.136.205.152 +$ORIGIN GH.com. +AUSTIN IN A 196.3.64.1 +$ORIGIN DIGISERVE.com. +NS2 IN A 204.91.84.216 +NS1 IN A 151.196.69.5 +$ORIGIN map.com. +sgi1 IN A 204.71.19.20 +WORMHOLE IN A 204.71.19.10 +$ORIGIN SNS-UT.DEBIS.com. +NS2 IN A 53.122.2.10 +$ORIGIN SNS-FELB.DEBIS.com. +NS1 IN A 53.122.1.10 +$ORIGIN idx.com. +seaipsvcs IN A 172.22.64.42 +BOSDOC IN A 198.114.171.109 +drawbridge IN A 204.165.241.2 +IDXNMS IN A 204.165.242.7 +idx IN A 198.114.171.160 +isdev IN A 198.181.234.9 +bvtipsvcs IN A 198.114.172.50 +bosdns IN A 198.114.171.109 +bvtsweeper IN A 198.181.234.69 +$ORIGIN VERITAS.com. +NS IN A 204.177.156.38 +$ORIGIN BFG.com. +gateway2 IN A 166.102.214.66 +aisvt IN MX 0 gateway2.bfg.com. +GATEWAY IN A 131.187.253.2 +$ORIGIN sleepycat.com. +abyssinian IN A 199.103.241.218 +$ORIGIN cisco.com. +proxy6 IN A 203.41.198.245 +proxy9 IN A 192.135.250.71 +proxy1 IN A 192.31.7.88 +proxy2 IN A 192.31.7.89 +proxy3 IN A 192.31.7.90 +ns1 IN A 128.107.241.185 +NS2 IN A 192.135.250.69 +$ORIGIN TOAPLAN.com. +www IN A 216.42.31.169 +$ORIGIN INTUIT.com. +DNS1 IN A 208.157.255.4 +$ORIGIN REGEX.com. +NS1 IN A 202.152.12.227 +$ORIGIN DEC.com. +crl IN A 192.58.206.2 +ns IN A 204.123.2.42 +$ORIGIN PA.DEC.com. +UUCP-GW-2 IN A 16.1.0.19 +UUCP-GW-1 IN A 16.1.0.18 + IN A 204.123.2.18 +$ORIGIN LANDLORDS.com. +NS IN A 63.64.164.68 +$ORIGIN hometownbands.com. +www IN A 209.67.235.38 +$ORIGIN MSFT.AKADNS.com. +Z6 IN A 207.229.152.20 +Z2 IN A 32.96.80.17 +Z4 IN A 208.148.96.220 +Z7 IN A 213.161.66.158 +Z3 IN A 63.215.198.67 +Z1 IN A 216.32.118.104 +$ORIGIN smuggs.com. +mail IN A 209.67.230.71 +$ORIGIN OUTREMER.com. +MANTA IN A 213.16.1.106 +$ORIGIN hns.com. +HNS3 IN A 208.236.67.3 +$ORIGIN TRIVALLEY.com. +NS3 IN A 206.25.132.30 +$ORIGIN AI-R.com. +NS2 IN A 66.33.4.51 +NS1 IN A 66.33.0.143 +$ORIGIN ALCATEL.com. +NS IN A 192.160.6.91 +PRIMARY IN A 192.160.6.90 +$ORIGIN GENDYN.com. +NET2 IN A 204.60.171.9 +NET1 IN A 204.60.171.8 +$ORIGIN ONLINEPHOTOCONTEST.com. +www IN A 64.85.86.152 +$ORIGIN performancediver.com. +listserv IN A 216.34.185.155 +$ORIGIN rge.com. +gw IN A 157.225.178.11 +$ORIGIN NS.AOL.com. +DNS-02 IN A 205.188.157.232 +DNS-01 IN A 152.163.159.232 +$ORIGIN MANY-PATHS-ENERGY-ENHANCEMENT.com. +www IN A 66.33.4.50 +$ORIGIN IS.CHRYSLER.com. +FXCLPR02 IN A 204.189.94.37 +FXIOD01 IN A 204.189.94.70 +$ORIGIN TO.GD-ES.com. +NS IN A 199.107.240.66 +$ORIGIN GNAC.com. +ns2 IN A 209.182.195.77 +NS1 IN A 209.182.195.77 +$ORIGIN AKAMAI.com. +YA IN A 204.178.118.68 +ACCESS IN A 4.17.143.9 +YB IN A 204.212.232.16 +YC IN A 209.246.46.48 +YD IN A 209.189.112.39 +YE IN A 192.215.168.18 +YF IN A 216.32.118.14 +YG IN A 204.178.110.35 +YH IN A 128.11.61.225 +$ORIGIN QUICKEN.com. +DNS4 IN A 198.3.99.252 +DNS2 IN A 206.154.105.67 +news IN MX 10 mail1.emailpub.com. + IN MX 10 mail2.emailpub.com. + IN MX 10 mail3.emailpub.com. + IN MX 10 mail4.emailpub.com. + IN MX 10 mail5.emailpub.com. + IN MX 10 mail6.emailpub.com. + IN A 207.211.106.100 +DNS3 IN A 198.3.96.252 +DNS1 IN A 206.154.105.66 +$ORIGIN LUXNOC.com. +NS4 IN A 195.206.104.201 +NS2 IN A 195.206.105.102 +NS0 IN A 195.206.105.1 +NS5 IN A 195.206.104.211 +NS3 IN A 195.206.104.1 +NS1 IN A 195.206.105.101 +$ORIGIN MAGIC-MOMENTS.com. +NS1 IN A 195.224.53.80 +$ORIGIN ABAC.com. +NS2 IN A 216.55.144.4 +NS1 IN A 216.55.128.4 +$ORIGIN GOTO.com. +NS2 IN A 204.71.128.137 +NS1 IN A 206.132.152.241 +$ORIGIN WEBTRENDS.com. +NS2 IN A 63.88.212.11 +NS1 IN A 63.88.212.10 +$ORIGIN hotmail.com. +NS3 IN A 209.185.130.68 +NS1 IN A 216.200.206.140 +$ORIGIN MERCHANTWARE.com. +NS2 IN A 209.170.142.35 +$ORIGIN MERCURYCENTER.com. +cgi IN CNAME vh80167.vh8.infi.net. +$ORIGIN CARIBSURF.com. +COL2 IN A 205.214.192.202 +COL1 IN A 205.214.192.201 +$ORIGIN MAIL-LIST.com. +zip IN MX 20 sluice.mail-list.com. + IN MX 20 pipeline.mail-list.com. + IN MX 20 transport.mail-list.com. + IN MX 50 swifty.mail-list.com. + IN MX 50 velocity.mail-list.com. + IN MX 50 brisk.mail-list.com. + IN MX 5 zip.mail-list.com. +$ORIGIN NAVPOINT.com. +south IN A 207.106.42.12 +north IN A 207.106.42.10 +NS2 IN A 207.106.42.12 +NS IN A 207.106.42.10 +$ORIGIN verisign-grs.com. +ns2 IN A 198.41.3.108 +ns1 IN A 198.41.3.39 +$ORIGIN gdarm.com. +bvt-ext IN A 166.19.32.42 +$ORIGIN REDHAT.com. +NS1 IN A 216.148.218.250 +$ORIGIN SKYNETWEB.com. +NS2 IN A 208.231.1.35 +NS1 IN A 208.231.1.34 +$ORIGIN COIL.com. +BRONZE IN A 198.4.94.1 +$ORIGIN ZTX.COMPAQ.com. +NS1-PUBLIC IN A 161.114.1.204 +$ORIGIN ZMA.COMPAQ.com. +NS1-PUBLIC IN A 161.114.64.24 +$ORIGIN FOOL.com. +NS2 IN A 208.51.76.222 +NS1 IN A 208.241.66.222 +$ORIGIN retro.com. +www IN A 205.179.181.195 +gw IN A 205.179.181.194 +$ORIGIN NRSITE.com. +NS5 IN A 208.178.169.4 +NS7 IN A 206.41.20.3 +NS3 IN A 199.172.144.20 +$ORIGIN jerusalem-mail.com. +mail IN A 216.251.232.93 +$ORIGIN PAIR.com. +ns3 IN A 209.68.1.15 +NS1 IN A 209.68.1.11 +$ORIGIN GLOBALDNS.com. +NS1 IN A 206.253.214.11 +$ORIGIN tfm.com. +mailhost IN A 192.231.224.11 +mtbaker IN A 192.231.224.2 +NS2 IN A 208.236.160.42 +NS1 IN A 209.83.142.82 +NS IN A 192.231.224.1 +$ORIGIN bock.com. +NS2 IN A 64.30.29.4 +NS1 IN A 64.30.29.3 +$ORIGIN TARSUS.com. +MAIL IN A 208.130.9.252 +BEAR IN A 208.130.9.248 +$ORIGIN NETANET.com. +NS0 IN A 194.6.96.218 + IN A 195.172.127.72 +NS1 IN A 194.6.96.218 +$ORIGIN SEANET.com. +DNS2 IN A 199.181.164.2 +DNS3 IN A 199.181.164.3 +DNS1 IN A 199.181.164.1 +$ORIGIN INTERNETSHARE.com. +NS1 IN A 63.207.108.53 +$ORIGIN ALTAVISTA.com. +NS2 IN A 209.73.164.7 +NS3 IN A 209.73.176.204 +NS1 IN A 209.73.164.76 +$ORIGIN NOVELL.com. +NS IN A 137.65.1.1 +$ORIGIN SAIPAN.com. +NS2 IN A 202.128.28.2 +NS IN A 202.128.27.2 +$ORIGIN diebold.com. +eliot IN A 204.151.249.21 +ness IN A 208.228.181.21 +$ORIGIN WonderWorks.com. +mail IN A 192.203.206.67 +ice IN A 192.203.206.9 +$ORIGIN SIGNALZ.com. +NS IN A 209.67.230.71 +$ORIGIN GW.tislabs.com. +RELAY IN A 192.94.214.100 +$ORIGIN CAIS.com. +NS IN A 205.177.10.10 +$ORIGIN tesserae.com. +ns2 IN A 209.157.194.3 +NS IN A 209.157.194.2 +$ORIGIN NETPOLICY.com. +MINION IN A 207.87.121.66 +$ORIGIN wirbel.com. +enterprise IN A 194.231.54.2 +$ORIGIN fiberia.com. +webmail IN A 216.55.147.2 +$ORIGIN BAYAREA.com. +www IN CNAME vh80040.vh8.infi.net. +$ORIGIN CONNACTIVITY.com. +bparker IN A 206.34.200.200 +NS2 IN A 206.34.200.3 +CONNACTIVITY IN A 206.34.200.2 +$ORIGIN tifosi.com. +BK IN A 208.58.189.13 +daytona IN A 192.104.156.3 +$ORIGIN bucksnet.com. +gutenberg IN A 207.113.15.5 +$ORIGIN ivillage.com. +NS2 IN A 209.185.162.16 +NS1 IN A 209.185.162.15 +$ORIGIN codelocal.com. +ns1 IN A 216.15.192.130 +$ORIGIN NETFLIGHT.com. +DNS IN A 207.88.32.2 +$ORIGIN MERCHANTWARE.CON. +NS1 IN A 209.170.142.34 diff --git a/bin/tests/system/cacheclean/ns1/named.conf b/bin/tests/system/cacheclean/ns1/named.conf new file mode 100644 index 0000000..9f34148 --- /dev/null +++ b/bin/tests/system/cacheclean/ns1/named.conf @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 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. + */ + +/* $Id: named.conf,v 1.9 2007/06/19 23:47:01 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify yes; + check-integrity no; +}; + +zone "." { + type master; + file "example.db"; +}; diff --git a/bin/tests/system/cacheclean/ns2/named.conf b/bin/tests/system/cacheclean/ns2/named.conf new file mode 100644 index 0000000..c0d9f44 --- /dev/null +++ b/bin/tests/system/cacheclean/ns2/named.conf @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 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. + */ + +/* $Id: named.conf,v 1.8 2007/06/19 23:47:01 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.2; + notify-source 10.53.0.2; + transfer-source 10.53.0.2; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.2; }; + listen-on-v6 { none; }; + notify yes; + max-cache-size 10000; + disable-empty-zone 127.IN-ADDR.ARPA; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; diff --git a/bin/tests/system/cacheclean/tests.sh b/bin/tests/system/cacheclean/tests.sh new file mode 100644 index 0000000..7e1ba79 --- /dev/null +++ b/bin/tests/system/cacheclean/tests.sh @@ -0,0 +1,32 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 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. + +# $Id: tests.sh,v 1.5 2007/06/19 23:47:00 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +status=0 + +$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat \ + -f dig.batch -p 5300 @10.53.0.2 > dig.out.ns2 || status=1 +grep ";" dig.out.ns2 + +$PERL ../digcomp.pl dig.out.ns2 knowngood.dig.out || status=1 + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/checkconf/bad.conf b/bin/tests/system/checkconf/bad.conf new file mode 100644 index 0000000..79d8832 --- /dev/null +++ b/bin/tests/system/checkconf/bad.conf @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005, 2007 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: bad.conf,v 1.4 2007/06/19 23:47:01 tbox Exp $ */ + +options { + avoid-v4-udp-ports { 100; } + avoid-v6-udp-ports { 100; }; + blackhole { 10.0.0.0/8; }; + coresize 1G; + datasize 100M; + deallocate-on-exit yes; + directory "."; + dump-file "named_dumpdb"; + fake-iquery yes; + files 1000; + has-old-clients no; + heartbeat-interval 30; + host-statistics yes; + host-statistics-max 100; + hostname none; + interface-interval 30; + listen-on port 90 { any; }; + listen-on port 100 { 127.0.0.1; }; + listen-on-v6 port 53 { none; }; + match-mapped-addresses yes; + memstatistics-file "named.memstats"; + multiple-cnames no; + named-xfer "this is no longer needed"; + pid-file none; + port 5300; + querylog yes; + recursing-file "named.recursing"; + random-device "/dev/random"; + recursive-clients 3000; + serial-queries 10; + serial-query-rate 100; + server-id none; +}; diff --git a/bin/tests/system/checkconf/good.conf b/bin/tests/system/checkconf/good.conf new file mode 100644 index 0000000..c810b47 --- /dev/null +++ b/bin/tests/system/checkconf/good.conf @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2005, 2007 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: good.conf,v 1.4 2007/06/19 23:47:01 tbox Exp $ */ + +/* + * This is just a random selection of configuration options. + */ + +options { + avoid-v4-udp-ports { 100; }; + avoid-v6-udp-ports { 100; }; + blackhole { 10.0.0.0/8; }; + coresize 1G; + datasize 100M; + deallocate-on-exit yes; + directory "."; + dump-file "named_dumpdb"; + fake-iquery yes; + files 1000; + has-old-clients no; + heartbeat-interval 30; + host-statistics yes; + host-statistics-max 100; + hostname none; + interface-interval 30; + listen-on port 90 { any; }; + listen-on port 100 { 127.0.0.1; }; + listen-on-v6 port 53 { none; }; + match-mapped-addresses yes; + memstatistics-file "named.memstats"; + multiple-cnames no; + named-xfer "this is no longer needed"; + pid-file none; + port 5300; + querylog yes; + recursing-file "named.recursing"; + random-device "/dev/random"; + recursive-clients 3000; + serial-queries 10; + serial-query-rate 100; + server-id none; +}; diff --git a/bin/tests/system/checkconf/tests.sh b/bin/tests/system/checkconf/tests.sh new file mode 100644 index 0000000..8444664 --- /dev/null +++ b/bin/tests/system/checkconf/tests.sh @@ -0,0 +1,37 @@ +# Copyright (C) 2005, 2007 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: tests.sh,v 1.3 2007/06/19 23:47:01 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +status=0 + +echo "I: checking that named-checkconf handles a known good config" + +ret=0 +$CHECKCONF good.conf > /dev/null 2>&1 || ret=1 +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I: checking that named-checkconf handles a known bad config" + +ret=1 +$CHECKCONF bad.conf > /dev/null 2>&1 || ret=0 +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/checknames/clean.sh b/bin/tests/system/checknames/clean.sh new file mode 100644 index 0000000..f0c46de --- /dev/null +++ b/bin/tests/system/checknames/clean.sh @@ -0,0 +1,24 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 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: clean.sh,v 1.6 2007/09/26 03:22:43 marka Exp $ + +rm -f dig.out.ns?.test* +rm -f nsupdate.out.test* +rm -f ns1/*.example.db +rm -f ns1/*.update.db +rm -f ns1/*.update.db.jnl +rm -f */named.memstats diff --git a/bin/tests/system/checknames/ns1/fail.example.db.in b/bin/tests/system/checknames/ns1/fail.example.db.in new file mode 100644 index 0000000..09a8557 --- /dev/null +++ b/bin/tests/system/checknames/ns1/fail.example.db.in @@ -0,0 +1,22 @@ +; Copyright (C) 2004, 2007 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: fail.example.db.in,v 1.5 2007/06/19 23:47:01 tbox Exp $ + +$TTL 300 +@ SOA ns1.fail.example. hostmaster.fail.example. ( + 1 3600 1200 604800 3600 ) + NS ns1.fail.example. +ns1.fail.example. A 10.53.0.1 +xx_xx.fail.example. A 127.0.0.1 diff --git a/bin/tests/system/checknames/ns1/fail.update.db.in b/bin/tests/system/checknames/ns1/fail.update.db.in new file mode 100644 index 0000000..515f23e --- /dev/null +++ b/bin/tests/system/checknames/ns1/fail.update.db.in @@ -0,0 +1,21 @@ +; Copyright (C) 2004, 2007 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: fail.update.db.in,v 1.5 2007/06/19 23:47:01 tbox Exp $ + +$TTL 300 +@ SOA ns1.fail.update. hostmaster.fail.update. ( + 1 3600 1200 604800 3600 ) + NS ns1.fail.update. +ns1.fail.update. A 10.53.0.1 diff --git a/bin/tests/system/checknames/ns1/ignore.example.db.in b/bin/tests/system/checknames/ns1/ignore.example.db.in new file mode 100644 index 0000000..5def921 --- /dev/null +++ b/bin/tests/system/checknames/ns1/ignore.example.db.in @@ -0,0 +1,23 @@ +; Copyright (C) 2004, 2007 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: ignore.example.db.in,v 1.5 2007/06/19 23:47:01 tbox Exp $ + +$TTL 300 +@ SOA ns1.ignore.example. hostmaster.ignore.example. ( + 1 3600 1200 604800 3600 ) + NS ns1.ignore.example. +ns1.ignore.example. A 10.53.0.1 +yy_yy.ignore.example. A 10.53.0.1 +mx.ignore.example. MX 10 zz_zz.ignore.example. diff --git a/bin/tests/system/checknames/ns1/ignore.update.db.in b/bin/tests/system/checknames/ns1/ignore.update.db.in new file mode 100644 index 0000000..18826bd --- /dev/null +++ b/bin/tests/system/checknames/ns1/ignore.update.db.in @@ -0,0 +1,21 @@ +; Copyright (C) 2004, 2007 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: ignore.update.db.in,v 1.5 2007/06/19 23:47:01 tbox Exp $ + +$TTL 300 +@ SOA ns1.ignore.update. hostmaster.ignore.update. ( + 1 3600 1200 604800 3600 ) + NS ns1.ignore.update. +ns1.ignore.update. A 10.53.0.1 diff --git a/bin/tests/system/checknames/ns1/named.conf b/bin/tests/system/checknames/ns1/named.conf new file mode 100644 index 0000000..51bf908 --- /dev/null +++ b/bin/tests/system/checknames/ns1/named.conf @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2004, 2005, 2007 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: named.conf,v 1.9 2007/06/19 23:47:01 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify yes; + check-integrity no; +}; + +zone "." { + type master; + file "root.db"; +}; + +zone "ignore.example" { + type master; + file "ignore.example.db"; + check-names ignore; +}; + +zone "warn.example" { + type master; + file "warn.example.db"; + check-names warn; +}; + +zone "fail.example" { + type master; + file "fail.example.db"; + check-names fail; +}; + +zone "ignore.update" { + type master; + file "ignore.update.db"; + allow-update { any; }; + check-names ignore; +}; + +zone "warn.update" { + type master; + file "warn.update.db"; + allow-update { any; }; + check-names warn; +}; + +zone "fail.update" { + type master; + file "fail.update.db"; + allow-update { any; }; + check-names fail; +}; diff --git a/bin/tests/system/checknames/ns1/root.db b/bin/tests/system/checknames/ns1/root.db new file mode 100644 index 0000000..0df0677 --- /dev/null +++ b/bin/tests/system/checknames/ns1/root.db @@ -0,0 +1,35 @@ +; Copyright (C) 2004, 2007 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: root.db,v 1.5 2007/06/19 23:47:01 tbox Exp $ + +$TTL 300 +@ SOA ns1. hostmaster.warn.example. ( + 1 3600 1200 604800 3600 ) + NS ns1. +ns1. A 10.53.0.1 +; +ignore.example. NS ns1.ignore.example. +ns1.ignore.example. A 10.53.0.1 +warn.example. NS ns1.warn.example. +ns1.warn.example. A 10.53.0.1 +fail.example. NS ns1.fail.example. +ns1.fail.example. A 10.53.0.1 +; +ignore.update. NS ns1.ignore.update. +ns1.ignore.update. A 10.53.0.1 +warn.update. NS ns1.warn.update. +ns1.warn.update. A 10.53.0.1 +fail.update. NS ns1.fail.update. +ns1.fail.update. A 10.53.0.1 diff --git a/bin/tests/system/checknames/ns1/warn.example.db.in b/bin/tests/system/checknames/ns1/warn.example.db.in new file mode 100644 index 0000000..cad0524 --- /dev/null +++ b/bin/tests/system/checknames/ns1/warn.example.db.in @@ -0,0 +1,22 @@ +; Copyright (C) 2004, 2007 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: warn.example.db.in,v 1.5 2007/06/19 23:47:01 tbox Exp $ + +$TTL 300 +@ SOA ns1.warn.example. hostmaster.warn.example. ( + 1 3600 1200 604800 3600 ) + NS ns1.warn.example. +ns1.warn.example. A 10.53.0.1 +xx_xx.warn.example. A 10.53.0.1 diff --git a/bin/tests/system/checknames/ns1/warn.update.db.in b/bin/tests/system/checknames/ns1/warn.update.db.in new file mode 100644 index 0000000..9618d42 --- /dev/null +++ b/bin/tests/system/checknames/ns1/warn.update.db.in @@ -0,0 +1,21 @@ +; Copyright (C) 2004, 2007 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: warn.update.db.in,v 1.5 2007/06/19 23:47:01 tbox Exp $ + +$TTL 300 +@ SOA ns1.warn.update. hostmaster.warn.update. ( + 1 3600 1200 604800 3600 ) + NS ns1.warn.update. +ns1.warn.update. A 10.53.0.1 diff --git a/bin/tests/system/checknames/ns2/named.conf b/bin/tests/system/checknames/ns2/named.conf new file mode 100644 index 0000000..fd22e7d --- /dev/null +++ b/bin/tests/system/checknames/ns2/named.conf @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2004, 2007 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: named.conf,v 1.7 2007/06/18 23:47:27 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.2; + notify-source 10.53.0.2; + transfer-source 10.53.0.2; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.2; }; + listen-on-v6 { none; }; + recursion yes; + acache-enable yes; + check-names response warn; + notify yes; +}; + +zone "." { + type hint; + file "root.hints"; +}; diff --git a/bin/tests/system/checknames/ns2/root.hints b/bin/tests/system/checknames/ns2/root.hints new file mode 100644 index 0000000..712002b --- /dev/null +++ b/bin/tests/system/checknames/ns2/root.hints @@ -0,0 +1,19 @@ +; Copyright (C) 2004, 2007 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: root.hints,v 1.5 2007/06/19 23:47:01 tbox Exp $ + +$TTL 300 +. NS ns1. +ns1. A 10.53.0.1 diff --git a/bin/tests/system/checknames/ns3/named.conf b/bin/tests/system/checknames/ns3/named.conf new file mode 100644 index 0000000..2702b5c --- /dev/null +++ b/bin/tests/system/checknames/ns3/named.conf @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2004, 2007 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: named.conf,v 1.7 2007/06/18 23:47:27 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.3; + notify-source 10.53.0.3; + transfer-source 10.53.0.3; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.3; }; + listen-on-v6 { none; }; + recursion yes; + acache-enable yes; + check-names response fail; + notify yes; +}; + +zone "." { + type hint; + file "root.hints"; +}; diff --git a/bin/tests/system/checknames/ns3/root.hints b/bin/tests/system/checknames/ns3/root.hints new file mode 100644 index 0000000..712002b --- /dev/null +++ b/bin/tests/system/checknames/ns3/root.hints @@ -0,0 +1,19 @@ +; Copyright (C) 2004, 2007 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: root.hints,v 1.5 2007/06/19 23:47:01 tbox Exp $ + +$TTL 300 +. NS ns1. +ns1. A 10.53.0.1 diff --git a/bin/tests/system/checknames/setup.sh b/bin/tests/system/checknames/setup.sh new file mode 100644 index 0000000..0027ed3 --- /dev/null +++ b/bin/tests/system/checknames/setup.sh @@ -0,0 +1,23 @@ +# Copyright (C) 2004, 2007 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: setup.sh,v 1.5 2007/06/19 23:47:01 tbox Exp $ + +cp ns1/ignore.example.db.in ns1/ignore.example.db +cp ns1/warn.example.db.in ns1/warn.example.db +cp ns1/fail.example.db.in ns1/fail.example.db + +cp ns1/ignore.update.db.in ns1/ignore.update.db +cp ns1/warn.update.db.in ns1/warn.update.db +cp ns1/fail.update.db.in ns1/fail.update.db diff --git a/bin/tests/system/checknames/tests.sh b/bin/tests/system/checknames/tests.sh new file mode 100644 index 0000000..dffacd2 --- /dev/null +++ b/bin/tests/system/checknames/tests.sh @@ -0,0 +1,134 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 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: tests.sh,v 1.5 2007/06/19 23:47:01 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +status=0 +n=1 + +DIGOPTS="+tcp +noadd +nosea +nostat +nocmd -p 5300" + +# Entry should exist. +echo "I: check for failure from on zone load for 'check-names fail;' ($n)" +ret=0 +$DIG $DIGOPTS fail.example. @10.53.0.1 a > dig.out.ns1.test$n || ret=1 +grep SERVFAIL dig.out.ns1.test$n > /dev/null || ret=1 +grep 'xx_xx.fail.example: bad owner name (check-names)' ns1/named.run > /dev/null || ret=1 +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` +n=`expr $n + 1` + +# Entry should exist. +echo "I: check for warnings from on zone load for 'check-names warn;' ($n)" +ret=0 +grep 'xx_xx.warn.example: bad owner name (check-names)' ns1/named.run > /dev/null || ret=1 +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` +n=`expr $n + 1` + +# Entry should not exist. +echo "I: check for warnings from on zone load for 'check-names ignore;' ($n)" +ret=1 +grep 'yy_yy.ignore.example: bad owner name (check-names)' ns1/named.run || ret=0 +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` +n=`expr $n + 1` + +# Entry should exist +echo "I: check that 'check-names response warn;' works ($n)" +ret=0 +$DIG $DIGOPTS yy_yy.ignore.example. @10.53.0.1 a > dig.out.ns1.test$n || ret=1 +$DIG $DIGOPTS yy_yy.ignore.example. @10.53.0.2 a > dig.out.ns2.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns1.test$n dig.out.ns2.test$n || ret=1 +grep "check-names warning yy_yy.ignore.example/A/IN" ns2/named.run > /dev/null || ret=1 +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` +n=`expr $n + 1` + +# Entry should exist +echo "I: check that 'check-names response (owner) fails;' works ($n)" +ret=0 +$DIG $DIGOPTS yy_yy.ignore.example. @10.53.0.1 a > dig.out.ns1.test$n || ret=1 +$DIG $DIGOPTS yy_yy.ignore.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +grep NOERROR dig.out.ns1.test$n > /dev/null || ret=1 +grep REFUSED dig.out.ns3.test$n > /dev/null || ret=1 +grep "check-names failure yy_yy.ignore.example/A/IN" ns3/named.run > /dev/null || ret=1 +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` +n=`expr $n + 1` + +# Entry should exist +echo "I: check that 'check-names response (rdata) fails;' works ($n)" +ret=0 +$DIG $DIGOPTS mx.ignore.example. @10.53.0.1 MX > dig.out.ns1.test$n || ret=1 +$DIG $DIGOPTS mx.ignore.example. @10.53.0.3 MX > dig.out.ns3.test$n || ret=1 +grep NOERROR dig.out.ns1.test$n > /dev/null || ret=1 +grep SERVFAIL dig.out.ns3.test$n > /dev/null || ret=1 +grep "check-names failure mx.ignore.example/MX/IN" ns3/named.run > /dev/null || ret=1 +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` +n=`expr $n + 1` + +echo "I: check that updates to 'check-names fail;' are rejected ($n)" +ret=0 +not=1 +$NSUPDATE -d <<END> nsupdate.out.test$n 2>&1 || not=0 +server 10.53.0.1 5300 +update add xxx_xxx.fail.update. 600 A 10.10.10.1 +send +END +if [ $not != 0 ]; then ret=1; fi +$DIG $DIGOPTS xxx_xxx.fail.update @10.53.0.1 A > dig.out.ns1.test$n || ret=1 +grep "xxx_xxx.fail.update/A: bad owner name (check-names)" ns1/named.run > /dev/null || ret=1 +grep NXDOMAIN dig.out.ns1.test$n > /dev/null || ret=1 +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` +n=`expr $n + 1` + +echo "I: check that updates to 'check-names warn;' succeed and are logged ($n)" +ret=0 +$NSUPDATE -d <<END> nsupdate.out.test$n 2>&1|| ret=1 +server 10.53.0.1 5300 +update add xxx_xxx.warn.update. 600 A 10.10.10.1 +send +END +$DIG $DIGOPTS xxx_xxx.warn.update @10.53.0.1 A > dig.out.ns1.test$n || ret=1 +grep "xxx_xxx.warn.update/A: bad owner name (check-names)" ns1/named.run > /dev/null || ret=1 +grep NOERROR dig.out.ns1.test$n > /dev/null || ret=1 +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` +n=`expr $n + 1` + +echo "I: check that updates to 'check-names ignore;' succeed and are not logged ($n)" +ret=0 +not=1 +$NSUPDATE -d <<END> nsupdate.out.test$n 2>&1 || ret=1 +server 10.53.0.1 5300 +update add xxx_xxx.ignore.update. 600 A 10.10.10.1 +send +END +grep "xxx_xxx.ignore.update/A.*(check-names)" ns1/named.run > /dev/null || not=0 +if [ $not != 0 ]; then ret=1; fi +$DIG $DIGOPTS xxx_xxx.ignore.update @10.53.0.1 A > dig.out.ns1.test$n || ret=1 +grep NOERROR dig.out.ns1.test$n > /dev/null || ret=1 +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` +n=`expr $n + 1` + +exit $status diff --git a/bin/tests/system/cleanall.sh b/bin/tests/system/cleanall.sh new file mode 100644 index 0000000..9b6aa6f --- /dev/null +++ b/bin/tests/system/cleanall.sh @@ -0,0 +1,38 @@ +#!/bin/sh +# +# 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. + +# $Id: cleanall.sh,v 1.11 2007/06/19 23:47:00 tbox Exp $ + +# +# Clean up after system tests. +# + +SYSTEMTESTTOP=. +. $SYSTEMTESTTOP/conf.sh + + +find . -type f \( \ + -name 'K*' -o -name '*~' -o -name '*.core' -o -name '*.log' \ + -o -name '*.pid' -o -name '*.keyset' -o -name named.run \ + -o -name lwresd.run -o -name ans.run \) -print | xargs rm -f + +status=0 + +for d in $SUBDIRS +do + test ! -f $d/clean.sh || ( cd $d && sh clean.sh ) +done diff --git a/bin/tests/system/common/controls.conf b/bin/tests/system/common/controls.conf new file mode 100644 index 0000000..b5d619e --- /dev/null +++ b/bin/tests/system/common/controls.conf @@ -0,0 +1,28 @@ +/* + * 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. + */ + +/* $Id: controls.conf,v 1.6 2007/06/19 23:47:01 tbox Exp $ */ + +key rndc_key { + secret "1234abcd8765"; + algorithm hmac-md5; +}; + +controls { + inet 10.53.0.2 port 9953 allow { any; } keys { rndc_key; }; +}; + diff --git a/bin/tests/system/common/rndc.conf b/bin/tests/system/common/rndc.conf new file mode 100644 index 0000000..3704ae7 --- /dev/null +++ b/bin/tests/system/common/rndc.conf @@ -0,0 +1,27 @@ +/* + * 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. + */ + +/* $Id: rndc.conf,v 1.5 2007/06/19 23:47:01 tbox Exp $ */ + +options { + default-key "rndc_key"; +}; + +key rndc_key { + algorithm hmac-md5; + secret "1234abcd8765"; +}; diff --git a/bin/tests/system/common/root.hint b/bin/tests/system/common/root.hint new file mode 100644 index 0000000..84a8c6b --- /dev/null +++ b/bin/tests/system/common/root.hint @@ -0,0 +1,20 @@ +; 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. + +; $Id: root.hint,v 1.5 2007/06/19 23:47:01 tbox Exp $ + +$TTL 999999 +. IN NS a.root-servers.nil. +a.root-servers.nil. IN A 10.53.0.1 diff --git a/bin/tests/system/conf.sh.in b/bin/tests/system/conf.sh.in new file mode 100644 index 0000000..23b31f1 --- /dev/null +++ b/bin/tests/system/conf.sh.in @@ -0,0 +1,54 @@ +#!/bin/sh +# +# Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2000-2003 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. + +# $Id: conf.sh.in,v 1.39 2008/01/10 23:47:01 tbox Exp $ + +# +# Common configuration data for system tests, to be sourced into +# other shell scripts. +# + +# Find the top of the BIND9 tree. +TOP=${SYSTEMTESTTOP:=.}/../../.. + +# Make it absolute so that it continues to work after we cd. +TOP=`cd $TOP && pwd` + +NAMED=$TOP/bin/named/named +# We must use "named -l" instead of "lwresd" because argv[0] is lost +# if the program is libtoolized. +LWRESD="$TOP/bin/named/named -l" +DIG=$TOP/bin/dig/dig +RNDC=$TOP/bin/rndc/rndc +NSUPDATE=$TOP/bin/nsupdate/nsupdate +KEYGEN=$TOP/bin/dnssec/dnssec-keygen +SIGNER=$TOP/bin/dnssec/dnssec-signzone +CHECKZONE=$TOP/bin/check/named-checkzone +CHECKCONF=$TOP/bin/check/named-checkconf + +# The "stress" test is not run by default since it creates enough +# load on the machine to make it unusable to other users. +# v6synth +SUBDIRS="acl cacheclean checkconf checknames dnssec forward glue ixfr limits + lwresd masterfile masterformat notify nsupdate resolver rrsetorder + sortlist stub tkey unknown upforwd views xfer xferquota zonechecks" + +# PERL will be an empty string if no perl interpreter was found. +PERL=@PERL@ + +export NAMED LWRESD DIG NSUPDATE KEYGEN SIGNER KEYSIGNER KEYSETTOOL PERL \ + SUBDIRS RNDC CHECKZONE diff --git a/bin/tests/system/dialup/ns1/example.db b/bin/tests/system/dialup/ns1/example.db new file mode 100644 index 0000000..262ed5e --- /dev/null +++ b/bin/tests/system/dialup/ns1/example.db @@ -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. + +; $Id: example.db,v 1.6 2007/06/19 23:47:01 tbox Exp $ + +@ 3600 SOA hostmaster.ns1 ns1 ( + 1 3600 1200 3600000 1200 ) + NS ns1.example. + NS ns2.example. + NS ns3.example. +ns1 A 10.53.0.1 +ns2 A 10.53.0.2 +ns3 A 10.53.0.3 diff --git a/bin/tests/system/dialup/ns1/named.conf b/bin/tests/system/dialup/ns1/named.conf new file mode 100644 index 0000000..7d75fc4 --- /dev/null +++ b/bin/tests/system/dialup/ns1/named.conf @@ -0,0 +1,45 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.8 2007/06/19 23:47:01 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + heartbeat-interval 2; + recursion no; +}; + +zone "." { + type master; + file "root.db"; +}; + +zone "example." { + type master; + notify explicit; + also-notify { 10.53.0.2; }; + dialup yes; + file "example.db"; +}; diff --git a/bin/tests/system/dialup/ns1/root.db b/bin/tests/system/dialup/ns1/root.db new file mode 100644 index 0000000..eadca60 --- /dev/null +++ b/bin/tests/system/dialup/ns1/root.db @@ -0,0 +1,26 @@ +; 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. + +; $Id: root.db,v 1.6 2007/06/19 23:47:01 tbox Exp $ + +@ 3600 SOA hostmaster.ns1.example ns1.example ( + 1 3600 1200 3600000 1200 ) + NS ns1.example +example NS ns1.example + NS ns2.example + NS ns3.example +ns1.example A 10.53.0.1 +ns2.example A 10.53.0.2 +ns3.example A 10.53.0.3 diff --git a/bin/tests/system/dialup/ns2/hint.db b/bin/tests/system/dialup/ns2/hint.db new file mode 100644 index 0000000..2efbcfa --- /dev/null +++ b/bin/tests/system/dialup/ns2/hint.db @@ -0,0 +1,19 @@ +; 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. + +; $Id: hint.db,v 1.6 2007/06/19 23:47:01 tbox Exp $ + +. 1200 NS ns1.example +ns1.example A 10.53.0.1 diff --git a/bin/tests/system/dialup/ns2/named.conf b/bin/tests/system/dialup/ns2/named.conf new file mode 100644 index 0000000..c0b1549 --- /dev/null +++ b/bin/tests/system/dialup/ns2/named.conf @@ -0,0 +1,45 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.8 2007/06/19 23:47:02 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.2; + notify-source 10.53.0.2; + transfer-source 10.53.0.2; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.2; }; + listen-on-v6 { none; }; + heartbeat-interval 2; + recursion no; +}; + +zone "." { + type hint; + file "hint.db"; +}; + +zone "example." { + type slave; + dialup passive; + notify no; + file "example.bk"; + masters { 10.53.0.1; }; +}; diff --git a/bin/tests/system/dialup/ns3/hint.db b/bin/tests/system/dialup/ns3/hint.db new file mode 100644 index 0000000..19592f3 --- /dev/null +++ b/bin/tests/system/dialup/ns3/hint.db @@ -0,0 +1,19 @@ +; 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. + +; $Id: hint.db,v 1.6 2007/06/19 23:47:02 tbox Exp $ + +. 1200 NS ns1.example +ns1.example A 10.53.0.1 diff --git a/bin/tests/system/dialup/ns3/named.conf b/bin/tests/system/dialup/ns3/named.conf new file mode 100644 index 0000000..387a716 --- /dev/null +++ b/bin/tests/system/dialup/ns3/named.conf @@ -0,0 +1,45 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.8 2007/06/19 23:47:02 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.3; + notify-source 10.53.0.3; + transfer-source 10.53.0.3; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.3; }; + listen-on-v6 { none; }; + heartbeat-interval 2; + recursion no; +}; + +zone "." { + type hint; + file "hint.db"; +}; + +zone "example." { + type slave; + dialup refresh; + notify no; + file "example.bk"; + masters { 10.53.0.2; }; +}; diff --git a/bin/tests/system/dialup/setup.sh b/bin/tests/system/dialup/setup.sh new file mode 100644 index 0000000..11ce031 --- /dev/null +++ b/bin/tests/system/dialup/setup.sh @@ -0,0 +1,19 @@ +# 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. + +# $Id: setup.sh,v 1.6 2007/06/19 23:47:01 tbox Exp $ + +rm -f ns2/example.bk +rm -f ns3/example.bk diff --git a/bin/tests/system/dialup/tests.sh b/bin/tests/system/dialup/tests.sh new file mode 100644 index 0000000..e48369f --- /dev/null +++ b/bin/tests/system/dialup/tests.sh @@ -0,0 +1,71 @@ +#!/bin/sh +# +# 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. + +# $Id: tests.sh,v 1.6 2007/06/19 23:47:01 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +status=0 + +rm -f dig.out.* + +DIGOPTS="+norec +tcp +noadd +nosea +nostat +noquest +nocmd -p 5300" + +# Check the example. domain + +$DIG $DIGOPTS example. @10.53.0.1 soa > dig.out.ns1.test || ret=1 +echo "I:checking that first zone transfer worked" +ret=0 +try=0 +while test $try -lt 120 +do + $DIG $DIGOPTS example. @10.53.0.2 soa > dig.out.ns2.test || ret=1 + if grep SERVFAIL dig.out.ns2.test > /dev/null + then + try=`expr $try + 1` + sleep 1 + else + $PERL ../digcomp.pl dig.out.ns1.test dig.out.ns2.test || ret=1 + break; + fi +done +echo "I:try $try" +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking that second zone transfer worked" +ret=0 +try=0 +while test $try -lt 120 +do + $DIG $DIGOPTS example. @10.53.0.3 soa > dig.out.ns3.test || ret=1 + if grep SERVFAIL dig.out.ns3.test > /dev/null + then + try=`expr $try + 1` + sleep 1 + else + $PERL ../digcomp.pl dig.out.ns1.test dig.out.ns3.test || ret=1 + break; + fi +done +echo "I:try $try" +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/digcomp.pl b/bin/tests/system/digcomp.pl new file mode 100644 index 0000000..87e64cb --- /dev/null +++ b/bin/tests/system/digcomp.pl @@ -0,0 +1,111 @@ +#!/usr/bin/perl +# +# 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. + +# $Id: digcomp.pl,v 1.14 2007/06/19 23:47:00 tbox Exp $ + +# Compare two files, each with the output from dig, for differences. +# Ignore "unimportant" differences, like ordering of NS lines, TTL's, +# etc... + +$file1 = $ARGV[0]; +$file2 = $ARGV[1]; + +$count = 0; +$firstname = ""; +$status = 0; +$rcode1 = "none"; +$rcode2 = "none"; + +open(FILE1, $file1) || die("open: $file1: $!\n"); +while (<FILE1>) { + chomp; + if (/^;.+status:\s+(\S+).+$/) { + $rcode1 = $1; + } + next if (/^;/); + if (/^(\S+)\s+\S+\s+(\S+)\s+(\S+)\s+(.+)$/) { + $name = $1; + $class = $2; + $type = $3; + $value = $4; + if ($type eq "SOA") { + $firstname = $name if ($firstname eq ""); + if ($name eq $firstname) { + $name = "$name$count"; + $count++; + } + } + if ($entry{"$name ; $class.$type ; $value"} ne "") { + $line = $entry{"$name ; $class.$type ; $value"}; + print("Duplicate entry in $file1:\n> $_\n< $line\n"); + } else { + $entry{"$name ; $class.$type ; $value"} = $_; + } + } +} +close(FILE1); + +$printed = 0; + +open(FILE2, $file2) || die("open: $file2: $!\n"); +while (<FILE2>) { + chomp; + if (/^;.+status:\s+(\S+).+$/) { + $rcode2 = $1; + } + next if (/^;/); + if (/^(\S+)\s+\S+\s+(\S+)\s+(\S+)\s+(.+)$/) { + $name = $1; + $class = $2; + $type = $3; + $value = $4; + if (($name eq $firstname) && ($type eq "SOA")) { + $count--; + $name = "$name$count"; + } + if ($entry{"$name ; $class.$type ; $value"} ne "") { + $entry{"$name ; $class.$type ; $value"} = ""; + } else { + print("Only in $file2 (missing from $file1):\n") + if ($printed == 0); + print("> $_\n"); + $printed++; + $status = 1; + } + } +} +close(FILE2); + +$printed = 0; + +foreach $key (keys(%entry)) { + if ($entry{$key} ne "") { + print("Only in $file1 (missing from $file2):\n") + if ($printed == 0); + print("< $entry{$key}\n"); + $status = 1; + $printed++; + } +} + +if ($rcode1 ne $rcode2) { + print("< status: $rcode1\n"); + print("> status: $rcode2\n"); + $status = 1; +} + +exit($status); diff --git a/bin/tests/system/dlv/clean.sh b/bin/tests/system/dlv/clean.sh new file mode 100644 index 0000000..872b14f --- /dev/null +++ b/bin/tests/system/dlv/clean.sh @@ -0,0 +1,28 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 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: clean.sh,v 1.5 2007/09/26 03:22:43 marka Exp $ + +rm -f random.data +rm -f ns*/named.run +rm -f ns3/K* +rm -f ns3/*.db +rm -f ns3/*.signed +rm -f ns3/dlvset-* +rm -f ns3/dsset-* +rm -f ns3/keyset-* +rm -f ns3/trusted.conf ns5/trusted.conf +rm -f */named.memstats diff --git a/bin/tests/system/dlv/ns1/named.conf b/bin/tests/system/dlv/ns1/named.conf new file mode 100644 index 0000000..bfb64ed --- /dev/null +++ b/bin/tests/system/dlv/ns1/named.conf @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2004, 2007 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: named.conf,v 1.4 2007/06/19 23:47:02 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify yes; + dnssec-enable no; +}; + +zone "." { type master; file "root.db"; }; +zone "rootservers.utld" { type master; file "rootservers.utld.db"; }; diff --git a/bin/tests/system/dlv/ns1/root.db b/bin/tests/system/dlv/ns1/root.db new file mode 100644 index 0000000..ed7aee3 --- /dev/null +++ b/bin/tests/system/dlv/ns1/root.db @@ -0,0 +1,24 @@ +; Copyright (C) 2004, 2007 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: root.db,v 1.4 2007/06/19 23:47:02 tbox Exp $ + +$TTL 120 +@ SOA ns.rootservers.utld hostmaster.ns.rootservers.utld ( + 1 3600 1200 604800 60 ) +@ NS ns.rootservers.utld +ns A 10.53.0.1 +; +utld NS ns.utld +ns.utld A 10.53.0.2 diff --git a/bin/tests/system/dlv/ns1/rootservers.utld.db b/bin/tests/system/dlv/ns1/rootservers.utld.db new file mode 100644 index 0000000..26abb42 --- /dev/null +++ b/bin/tests/system/dlv/ns1/rootservers.utld.db @@ -0,0 +1,20 @@ +; Copyright (C) 2004, 2007 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: rootservers.utld.db,v 1.4 2007/06/19 23:47:02 tbox Exp $ + +$TTL 120 +@ SOA ns hostmaster.ns 1 3600 1200 604800 60 +@ NS ns +ns A 10.53.0.1 diff --git a/bin/tests/system/dlv/ns2/hints b/bin/tests/system/dlv/ns2/hints new file mode 100644 index 0000000..a2e549a --- /dev/null +++ b/bin/tests/system/dlv/ns2/hints @@ -0,0 +1,18 @@ +; Copyright (C) 2004, 2007 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: hints,v 1.4 2007/06/19 23:47:02 tbox Exp $ + +. 0 NS ns.rootservers.utld. +ns.rootservers.utld. 0 A 10.53.0.1 diff --git a/bin/tests/system/dlv/ns2/named.conf b/bin/tests/system/dlv/ns2/named.conf new file mode 100644 index 0000000..195a46f --- /dev/null +++ b/bin/tests/system/dlv/ns2/named.conf @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2004, 2007 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: named.conf,v 1.4 2007/06/19 23:47:02 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.2; + notify-source 10.53.0.2; + transfer-source 10.53.0.2; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.2; }; + listen-on-v6 { none; }; + recursion no; + notify yes; + dnssec-enable no; +}; + +zone "." { type hint; file "hints"; }; +zone "utld" { type master; file "utld.db"; }; diff --git a/bin/tests/system/dlv/ns2/utld.db b/bin/tests/system/dlv/ns2/utld.db new file mode 100644 index 0000000..ac9c3d0 --- /dev/null +++ b/bin/tests/system/dlv/ns2/utld.db @@ -0,0 +1,56 @@ +; Copyright (C) 2004, 2007 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: utld.db,v 1.4 2007/06/19 23:47:02 tbox Exp $ + +$TTL 120 +@ SOA ns hostmaster.ns 1 3600 1200 604800 60 +@ NS ns +ns A 10.53.0.2 +; +rootservers NS ns.rootservers +ns.rootservers A 10.53.0.1 +; +dlv NS ns.dlv +ns.dlv A 10.53.0.3 +; +child1 NS ns.child1 +ns.child1 A 10.53.0.3 +; +child2 NS ns.child2 +ns.child2 A 10.53.0.4 +; +child3 NS ns.child3 +ns.child3 A 10.53.0.3 +; +child4 NS ns.child4 +ns.child4 A 10.53.0.3 +; +child5 NS ns.child5 +ns.child5 A 10.53.0.3 +; +child6 NS ns.child6 +ns.child6 A 10.53.0.4 +; +child7 NS ns.child7 +ns.child7 A 10.53.0.3 +; +child8 NS ns.child8 +ns.child8 A 10.53.0.3 +; +child9 NS ns.child9 +ns.child9 A 10.53.0.3 +; +child10 NS ns.child10 +ns.child10 A 10.53.0.3 diff --git a/bin/tests/system/dlv/ns3/child.db.in b/bin/tests/system/dlv/ns3/child.db.in new file mode 100644 index 0000000..9411c68 --- /dev/null +++ b/bin/tests/system/dlv/ns3/child.db.in @@ -0,0 +1,22 @@ +; Copyright (C) 2004, 2007 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: child.db.in,v 1.4 2007/06/19 23:47:02 tbox Exp $ + +$TTL 120 +@ SOA ns hostmaster.ns 1 3600 1200 604800 60 +@ NS ns +ns A 10.53.0.3 +foo TXT foo +bar TXT bar diff --git a/bin/tests/system/dlv/ns3/dlv.db.in b/bin/tests/system/dlv/ns3/dlv.db.in new file mode 100644 index 0000000..3f0ef6b --- /dev/null +++ b/bin/tests/system/dlv/ns3/dlv.db.in @@ -0,0 +1,20 @@ +; Copyright (C) 2004, 2007 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: dlv.db.in,v 1.4 2007/06/19 23:47:02 tbox Exp $ + +$TTL 120 +@ SOA ns hostmaster.ns 1 3600 1200 604800 60 +@ NS ns +ns A 10.53.0.3 diff --git a/bin/tests/system/dlv/ns3/hints b/bin/tests/system/dlv/ns3/hints new file mode 100644 index 0000000..a2e549a --- /dev/null +++ b/bin/tests/system/dlv/ns3/hints @@ -0,0 +1,18 @@ +; Copyright (C) 2004, 2007 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: hints,v 1.4 2007/06/19 23:47:02 tbox Exp $ + +. 0 NS ns.rootservers.utld. +ns.rootservers.utld. 0 A 10.53.0.1 diff --git a/bin/tests/system/dlv/ns3/named.conf b/bin/tests/system/dlv/ns3/named.conf new file mode 100644 index 0000000..a03fb05 --- /dev/null +++ b/bin/tests/system/dlv/ns3/named.conf @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2004, 2007 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: named.conf,v 1.4 2007/06/19 23:47:02 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.3; + notify-source 10.53.0.3; + transfer-source 10.53.0.3; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.3; }; + listen-on-v6 { none; }; + recursion no; + notify yes; + dnssec-enable yes; +}; + +zone "." { type hint; file "hints"; }; +zone "dlv.utld" { type master; file "dlv.signed"; }; +zone "child1.utld" { type master; file "child1.signed"; }; // dlv +zone "child3.utld" { type master; file "child3.signed"; }; // dlv +zone "child4.utld" { type master; file "child4.signed"; }; // dlv +zone "child5.utld" { type master; file "child5.signed"; }; // dlv +zone "child7.utld" { type master; file "child7.signed"; }; // no dlv +zone "child8.utld" { type master; file "child8.signed"; }; // no dlv +zone "child9.utld" { type master; file "child9.signed"; }; // dlv +zone "child10.utld" { type master; file "child.db.in"; }; // dlv unsigned diff --git a/bin/tests/system/dlv/ns3/sign.sh b/bin/tests/system/dlv/ns3/sign.sh new file mode 100755 index 0000000..e3382cf --- /dev/null +++ b/bin/tests/system/dlv/ns3/sign.sh @@ -0,0 +1,174 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 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: sign.sh,v 1.4 2007/06/19 23:47:02 tbox Exp $ + +SYSTEMTESTTOP=../.. +. $SYSTEMTESTTOP/conf.sh + +RANDFILE=../random.data +dlvsets= + +zone=child1.utld. +infile=child.db.in +zonefile=child1.utld.db +outfile=child1.signed +dlvzone=dlv.utld. +dlvsets="$dlvsets dlvset-$zone" + +keyname1=`$KEYGEN -r $RANDFILE -a DSA -b 768 -n zone $zone` +keyname2=`$KEYGEN -f KSK -r $RANDFILE -a DSA -b 768 -n zone $zone` + +cat $infile $keyname1.key $keyname2.key >$zonefile + +$SIGNER -g -r $RANDFILE -l $dlvzone -o $zone -f $outfile $zonefile > /dev/null +echo "I: signed $zone" + + +zone=child3.utld. +infile=child.db.in +zonefile=child3.utld.db +outfile=child3.signed +dlvzone=dlv.utld. +dlvsets="$dlvsets dlvset-$zone" + +keyname1=`$KEYGEN -r $RANDFILE -a DSA -b 768 -n zone $zone` +keyname2=`$KEYGEN -f KSK -r $RANDFILE -a DSA -b 768 -n zone $zone` + +cat $infile $keyname1.key $keyname2.key >$zonefile + +$SIGNER -g -r $RANDFILE -l $dlvzone -o $zone -f $outfile $zonefile > /dev/null +echo "I: signed $zone" + + +zone=child4.utld. +infile=child.db.in +zonefile=child4.utld.db +outfile=child4.signed +dlvzone=dlv.utld. +dlvsets="$dlvsets dlvset-$zone" + +keyname1=`$KEYGEN -r $RANDFILE -a DSA -b 768 -n zone $zone` +keyname2=`$KEYGEN -f KSK -r $RANDFILE -a DSA -b 768 -n zone $zone` + +cat $infile $keyname1.key $keyname2.key >$zonefile + +$SIGNER -g -r $RANDFILE -l $dlvzone -o $zone -f $outfile $zonefile > /dev/null +echo "I: signed $zone" + + +zone=child5.utld. +infile=child.db.in +zonefile=child5.utld.db +outfile=child5.signed +dlvzone=dlv.utld. +dlvsets="$dlvsets dlvset-$zone" + +keyname1=`$KEYGEN -r $RANDFILE -a DSA -b 768 -n zone $zone` +keyname2=`$KEYGEN -f KSK -r $RANDFILE -a DSA -b 768 -n zone $zone` + +cat $infile $keyname1.key $keyname2.key >$zonefile + +$SIGNER -g -r $RANDFILE -o $zone -f $outfile $zonefile > /dev/null +echo "I: signed $zone" + + +zone=child7.utld. +infile=child.db.in +zonefile=child7.utld.db +outfile=child7.signed +dlvzone=dlv.utld. + +keyname1=`$KEYGEN -r $RANDFILE -a DSA -b 768 -n zone $zone` +keyname2=`$KEYGEN -f KSK -r $RANDFILE -a DSA -b 768 -n zone $zone` + +cat $infile $keyname1.key $keyname2.key >$zonefile + +$SIGNER -g -r $RANDFILE -o $zone -f $outfile $zonefile > /dev/null +echo "I: signed $zone" + + +zone=child8.utld. +infile=child.db.in +zonefile=child8.utld.db +outfile=child8.signed +dlvzone=dlv.utld. + +keyname1=`$KEYGEN -r $RANDFILE -a DSA -b 768 -n zone $zone` +keyname2=`$KEYGEN -f KSK -r $RANDFILE -a DSA -b 768 -n zone $zone` + +cat $infile $keyname1.key $keyname2.key >$zonefile + +$SIGNER -g -r $RANDFILE -l $dlvzone -o $zone -f $outfile $zonefile > /dev/null +echo "I: signed $zone" + + +zone=child9.utld. +infile=child.db.in +zonefile=child9.utld.db +outfile=child9.signed +dlvzone=dlv.utld. +dlvsets="$dlvsets dlvset-$zone" + +keyname1=`$KEYGEN -r $RANDFILE -a DSA -b 768 -n zone $zone` +keyname2=`$KEYGEN -f KSK -r $RANDFILE -a DSA -b 768 -n zone $zone` + +cat $infile $keyname1.key $keyname2.key >$zonefile + +$SIGNER -g -r $RANDFILE -l $dlvzone -o $zone -f $outfile $zonefile > /dev/null +echo "I: signed $zone" + +zone=child10.utld. +infile=child.db.in +zonefile=child10.utld.db +outfile=child10.signed +dlvzone=dlv.utld. +dlvsets="$dlvsets dlvset-$zone" + +keyname1=`$KEYGEN -r $RANDFILE -a DSA -b 768 -n zone $zone` +keyname2=`$KEYGEN -f KSK -r $RANDFILE -a DSA -b 768 -n zone $zone` + +cat $infile $keyname1.key $keyname2.key >$zonefile + +$SIGNER -g -r $RANDFILE -l $dlvzone -o $zone -f $outfile $zonefile > /dev/null +echo "I: signed $zone" + + +zone=dlv.utld. +infile=dlv.db.in +zonefile=dlv.utld.db +outfile=dlv.signed +dlvzone=dlv.utld. + +keyname1=`$KEYGEN -r $RANDFILE -a DSA -b 768 -n zone $zone` +keyname2=`$KEYGEN -f KSK -r $RANDFILE -a DSA -b 768 -n zone $zone` + +cat $infile $dlvsets $keyname1.key $keyname2.key >$zonefile + +$SIGNER -g -r $RANDFILE -o $zone -f $outfile $zonefile > /dev/null +echo "I: signed $zone" + + +cat $keyname2.key | $PERL -n -e ' +local ($dn, $class, $type, $flags, $proto, $alg, @rest) = split; +local $key = join("", @rest); +print <<EOF +trusted-keys { + "$dn" $flags $proto $alg "$key"; +}; +EOF +' > trusted.conf +cp trusted.conf ../ns5 diff --git a/bin/tests/system/dlv/ns4/child.db b/bin/tests/system/dlv/ns4/child.db new file mode 100644 index 0000000..b4306f3 --- /dev/null +++ b/bin/tests/system/dlv/ns4/child.db @@ -0,0 +1,41 @@ +; Copyright (C) 2004, 2007 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: child.db,v 1.4 2007/06/19 23:47:02 tbox Exp $ + +$TTL 120 +@ SOA ns hostmaster.ns 1 3600 1200 604800 60 +@ NS ns +ns A 10.53.0.3 +; +rootservers NS ns.rootservers +ns.rootservers A 10.53.0.1 +; +child1 NS ns.child1 +ns.child1 A 10.53.0.3 +; +child2 NS ns.child2 +ns.child2 A 10.53.0.4 +; +child3 NS ns.child3 +ns.child3 A 10.53.0.3 +; +child4 NS ns.child4 +ns.child4 A 10.53.0.3 +; +child5 NS ns.child5 +ns.child5 A 10.53.0.3 +; +child6 NS ns.child5 +ns.child6 A 10.53.0.4 diff --git a/bin/tests/system/dlv/ns4/hints b/bin/tests/system/dlv/ns4/hints new file mode 100644 index 0000000..a2e549a --- /dev/null +++ b/bin/tests/system/dlv/ns4/hints @@ -0,0 +1,18 @@ +; Copyright (C) 2004, 2007 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: hints,v 1.4 2007/06/19 23:47:02 tbox Exp $ + +. 0 NS ns.rootservers.utld. +ns.rootservers.utld. 0 A 10.53.0.1 diff --git a/bin/tests/system/dlv/ns4/named.conf b/bin/tests/system/dlv/ns4/named.conf new file mode 100644 index 0000000..4fa32c2 --- /dev/null +++ b/bin/tests/system/dlv/ns4/named.conf @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2004, 2007 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: named.conf,v 1.4 2007/06/19 23:47:02 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.4; + notify-source 10.53.0.4; + transfer-source 10.53.0.4; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.4; }; + listen-on-v6 { none; }; + recursion no; + notify yes; + dnssec-enable no; +}; + +zone "." { type hint; file "hints"; }; +zone "child2.utld" { type master; file "child.db"; }; +zone "child6.utld" { type master; file "child.db"; }; diff --git a/bin/tests/system/dlv/ns5/hints b/bin/tests/system/dlv/ns5/hints new file mode 100644 index 0000000..a2e549a --- /dev/null +++ b/bin/tests/system/dlv/ns5/hints @@ -0,0 +1,18 @@ +; Copyright (C) 2004, 2007 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: hints,v 1.4 2007/06/19 23:47:02 tbox Exp $ + +. 0 NS ns.rootservers.utld. +ns.rootservers.utld. 0 A 10.53.0.1 diff --git a/bin/tests/system/dlv/ns5/named.conf b/bin/tests/system/dlv/ns5/named.conf new file mode 100644 index 0000000..b35c4a7 --- /dev/null +++ b/bin/tests/system/dlv/ns5/named.conf @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2004, 2006, 2007 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: named.conf,v 1.8 2007/06/18 23:47:28 tbox Exp $ */ + +/* + * Choose a keyname that is unlikely to clash with any real key names. + * This allows it to be added to the system's rndc.conf with minimal + * likelyhood of collision. + * + * e.g. + * key "cc64b3d1db63fc88d7cb5d2f9f57d258" { + * algorithm hmac-md5; + * secret "34f88008d07deabbe65bd01f1d233d47"; + * }; + * + * server "10.53.0.5" { + * key cc64b3d1db63fc88d7cb5d2f9f57d258; + * port 5353; + * }; + * + * rndc -s 10.53.0.5 <command> + */ + +key "cc64b3d1db63fc88d7cb5d2f9f57d258" { + algorithm hmac-md5; + secret "34f88008d07deabbe65bd01f1d233d47"; +}; + +controls { + inet 10.53.0.5 port 5353 allow { any; } + keys { cc64b3d1db63fc88d7cb5d2f9f57d258; }; +}; + +include "trusted.conf"; + +options { + query-source address 10.53.0.5; + notify-source 10.53.0.5; + transfer-source 10.53.0.5; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.5; }; + listen-on-v6 { none; }; + recursion yes; + acache-enable yes; + notify yes; + dnssec-enable yes; + dnssec-validation yes; + dnssec-lookaside "." trust-anchor "dlv.utld"; +}; + +zone "." { type hint; file "hints"; }; diff --git a/bin/tests/system/dlv/ns5/rndc.conf b/bin/tests/system/dlv/ns5/rndc.conf new file mode 100644 index 0000000..958ee98 --- /dev/null +++ b/bin/tests/system/dlv/ns5/rndc.conf @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2004, 2007 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.conf,v 1.5 2007/06/19 23:47:02 tbox Exp $ */ + +key "cc64b3d1db63fc88d7cb5d2f9f57d258" { + algorithm hmac-md5; + secret "34f88008d07deabbe65bd01f1d233d47"; +}; + +options { + default-server 10.53.0.5; + default-port 5353; +}; diff --git a/bin/tests/system/dlv/setup.sh b/bin/tests/system/dlv/setup.sh new file mode 100644 index 0000000..5f2e5b8 --- /dev/null +++ b/bin/tests/system/dlv/setup.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 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: setup.sh,v 1.4 2007/06/19 23:47:02 tbox Exp $ + +../../genrandom 400 random.data + +(cd ns3 && sh -e sign.sh) diff --git a/bin/tests/system/dlv/tests.sh b/bin/tests/system/dlv/tests.sh new file mode 100644 index 0000000..8b595a7 --- /dev/null +++ b/bin/tests/system/dlv/tests.sh @@ -0,0 +1,19 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 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: tests.sh,v 1.4 2007/06/19 23:47:02 tbox Exp $ + +exit 0 diff --git a/bin/tests/system/dnssec/README b/bin/tests/system/dnssec/README new file mode 100644 index 0000000..63ea49a --- /dev/null +++ b/bin/tests/system/dnssec/README @@ -0,0 +1,17 @@ +Copyright (C) 2004 Internet Systems Consortium, Inc. ("ISC") +Copyright (C) 2000-2002 Internet Software Consortium. +See COPYRIGHT in the source root or http://isc.org/copyright.html for terms. + +$Id: README,v 1.8 2004/03/05 05:00:08 marka Exp $ + +The test setup for the DNSSEC tests has a secure root. + +ns1 is the root server. + +ns2 and ns3 are authoritative servers for the various test domains. + +ns4 is a caching-only server, configured with the correct trusted key +for the root. + +ns5 is a caching-only server, configured with the an incorrect trusted +key for the root. It is used for testing failure cases. diff --git a/bin/tests/system/dnssec/clean.sh b/bin/tests/system/dnssec/clean.sh new file mode 100644 index 0000000..3f207d5 --- /dev/null +++ b/bin/tests/system/dnssec/clean.sh @@ -0,0 +1,38 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2000-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. + +# $Id: clean.sh,v 1.23 2008/09/25 04:02:38 tbox Exp $ + +rm -f */K* */keyset-* */dsset-* */dlvset-* */signedkey-* */*.signed */trusted.conf */tmp* */*.jnl */*.bk +rm -f ns1/root.db ns2/example.db ns3/secure.example.db +rm -f ns3/unsecure.example.db ns3/bogus.example.db ns3/keyless.example.db +rm -f ns3/dynamic.example.db ns3/dynamic.example.db.signed.jnl +rm -f ns2/private.secure.example.db +rm -f */example.bk +rm -f dig.out.* +rm -f random.data +rm -f ns2/dlv.db +rm -f ns3/multiple.example.db ns3/nsec3-unknown.example.db ns3/nsec3.example.db +rm -f ns3/optout-unknown.example.db ns3/optout.example.db +rm -f ns7/multiple.example.bk ns7/nsec3.example.bk ns7/optout.example.bk +rm -f */named.memstats +rm -f ns3/nsec3.nsec3.example.db +rm -f ns3/nsec3.optout.example.db +rm -f ns3/optout.nsec3.example.db +rm -f ns3/optout.optout.example.db +rm -f ns3/secure.nsec3.example.db +rm -f ns3/secure.optout.example.db diff --git a/bin/tests/system/dnssec/dnssec_update_test.pl b/bin/tests/system/dnssec/dnssec_update_test.pl new file mode 100644 index 0000000..3a87242 --- /dev/null +++ b/bin/tests/system/dnssec/dnssec_update_test.pl @@ -0,0 +1,105 @@ +#!/usr/bin/perl +# +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 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. + +# +# DNSSEC Dynamic update test suite. +# +# Usage: +# +# perl update_test.pl [-s server] [-p port] zone +# +# The server defaults to 127.0.0.1. +# The port defaults to 53. +# +# Installation notes: +# +# This program uses the Net::DNS::Resolver module. +# You can install it by saying +# +# perl -MCPAN -e "install Net::DNS" +# +# $Id: dnssec_update_test.pl,v 1.5 2007/06/19 23:47:02 tbox Exp $ +# + +use Getopt::Std; +use Net::DNS; +use Net::DNS::Update; +use Net::DNS::Resolver; + +$opt_s = "127.0.0.1"; +$opt_p = 53; + +getopt('s:p:'); + +$res = new Net::DNS::Resolver; +$res->nameservers($opt_s); +$res->port($opt_p); +$res->defnames(0); # Do not append default domain. + +@ARGV == 1 or die + "usage: perl update_test.pl [-s server] [-p port] zone\n"; + +$zone = shift @ARGV; + +my $failures = 0; + +sub assert { + my ($cond, $explanation) = @_; + if (!$cond) { + print "I:Test Failed: $explanation ***\n"; + $failures++ + } +} + +sub test { + my ($expected, @records) = @_; + + my $update = new Net::DNS::Update("$zone"); + + foreach $rec (@records) { + $update->push(@$rec); + } + + $reply = $res->send($update); + + # Did it work? + if (defined $reply) { + my $rcode = $reply->header->rcode; + assert($rcode eq $expected, "expected $expected, got $rcode"); + } else { + print "I:Update failed: ", $res->errorstring, "\n"; + } +} + +sub section { + my ($msg) = @_; + print "I:$msg\n"; +} + +section("Add a name"); +test("NOERROR", ["update", rr_add("a.$zone 300 A 73.80.65.49")]); + +section("Delete the name"); +test("NOERROR", ["update", rr_del("a.$zone")]); + +if ($failures) { + print "I:$failures tests failed.\n"; +} else { + print "I:All tests successful.\n"; +} + +exit $failures; diff --git a/bin/tests/system/dnssec/ns1/named.conf b/bin/tests/system/dnssec/ns1/named.conf new file mode 100644 index 0000000..e6b6b02 --- /dev/null +++ b/bin/tests/system/dnssec/ns1/named.conf @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2004, 2006, 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. + */ + +/* $Id: named.conf,v 1.24 2007/06/19 23:47:02 tbox Exp $ */ + +// NS1 + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify yes; + dnssec-enable yes; + dnssec-validation yes; +}; + +zone "." { + type master; + file "root.db.signed"; +}; + +include "trusted.conf"; diff --git a/bin/tests/system/dnssec/ns1/root.db.in b/bin/tests/system/dnssec/ns1/root.db.in new file mode 100644 index 0000000..24c5913 --- /dev/null +++ b/bin/tests/system/dnssec/ns1/root.db.in @@ -0,0 +1,32 @@ +; 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. + +; $Id: root.db.in,v 1.10 2007/06/19 23:47:02 tbox Exp $ + +$TTL 300 +. IN SOA gson.nominum.com. a.root.servers.nil. ( + 2000042100 ; serial + 600 ; refresh + 600 ; retry + 1200 ; expire + 600 ; minimum + ) +. NS a.root-servers.nil. +a.root-servers.nil. A 10.53.0.1 + +example. NS ns2.example. +ns2.example. A 10.53.0.2 +dlv. NS ns2.dlv. +ns2.dlv. A 10.53.0.2 diff --git a/bin/tests/system/dnssec/ns1/sign.sh b/bin/tests/system/dnssec/ns1/sign.sh new file mode 100644 index 0000000..9bc0ddd --- /dev/null +++ b/bin/tests/system/dnssec/ns1/sign.sh @@ -0,0 +1,56 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2006-2008 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2000-2003 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. + +# $Id: sign.sh,v 1.25 2008/09/25 04:02:38 tbox Exp $ + +SYSTEMTESTTOP=../.. +. $SYSTEMTESTTOP/conf.sh + +RANDFILE=../random.data + +zone=. +infile=root.db.in +zonefile=root.db + +(cd ../ns2 && sh sign.sh ) + +cp ../ns2/keyset-example. . +cp ../ns2/keyset-dlv. . + +keyname=`$KEYGEN -r $RANDFILE -a RSAMD5 -b 768 -n zone $zone` + +cat $infile $keyname.key > $zonefile + +echo $SIGNER -g -r $RANDFILE -o $zone $zonefile +$SIGNER -g -r $RANDFILE -o $zone $zonefile > /dev/null + +# Configure the resolving server with a trusted key. + +cat $keyname.key | $PERL -n -e ' +local ($dn, $class, $type, $flags, $proto, $alg, @rest) = split; +local $key = join("", @rest); +print <<EOF +trusted-keys { + "$dn" $flags $proto $alg "$key"; +}; +EOF +' > trusted.conf +cp trusted.conf ../ns2/trusted.conf +cp trusted.conf ../ns3/trusted.conf +cp trusted.conf ../ns4/trusted.conf +cp trusted.conf ../ns6/trusted.conf +cp trusted.conf ../ns7/trusted.conf diff --git a/bin/tests/system/dnssec/ns2/child.nsec3.example.db b/bin/tests/system/dnssec/ns2/child.nsec3.example.db new file mode 100644 index 0000000..c432b06 --- /dev/null +++ b/bin/tests/system/dnssec/ns2/child.nsec3.example.db @@ -0,0 +1,25 @@ +; Copyright (C) 2006, 2008 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: child.nsec3.example.db,v 1.3 2008/09/25 04:02:38 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2006081400 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) +@ IN NS ns2.example. diff --git a/bin/tests/system/dnssec/ns2/child.optout.example.db b/bin/tests/system/dnssec/ns2/child.optout.example.db new file mode 100644 index 0000000..feb73a4 --- /dev/null +++ b/bin/tests/system/dnssec/ns2/child.optout.example.db @@ -0,0 +1,25 @@ +; Copyright (C) 2006, 2008 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: child.optout.example.db,v 1.3 2008/09/25 04:02:38 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2006081400 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) +@ IN NS ns2.example. diff --git a/bin/tests/system/dnssec/ns2/dlv.db.in b/bin/tests/system/dnssec/ns2/dlv.db.in new file mode 100644 index 0000000..fa09f21 --- /dev/null +++ b/bin/tests/system/dnssec/ns2/dlv.db.in @@ -0,0 +1,26 @@ +; Copyright (C) 2004, 2007 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: dlv.db.in,v 1.5 2007/06/19 23:47:02 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns2 +ns2 A 10.53.0.2 diff --git a/bin/tests/system/dnssec/ns2/dst.example.db.in b/bin/tests/system/dnssec/ns2/dst.example.db.in new file mode 100644 index 0000000..5819636 --- /dev/null +++ b/bin/tests/system/dnssec/ns2/dst.example.db.in @@ -0,0 +1,26 @@ +; Copyright (C) 2004, 2007 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: dst.example.db.in,v 1.4 2007/06/19 23:47:02 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns2.example. +a A 10.0.0.1 diff --git a/bin/tests/system/dnssec/ns2/example.db.in b/bin/tests/system/dnssec/ns2/example.db.in new file mode 100644 index 0000000..c2b5e98 --- /dev/null +++ b/bin/tests/system/dnssec/ns2/example.db.in @@ -0,0 +1,97 @@ +; Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") +; Copyright (C) 2000-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. + +; $Id: example.db.in,v 1.19 2008/09/25 04:02:38 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns2 + NS ns3 +ns2 A 10.53.0.2 +ns3 A 10.53.0.3 + +a A 10.0.0.1 +b A 10.0.0.2 +d A 10.0.0.4 + +; Used for testing ANY queries +foo TXT "testing" +foo A 10.0.1.0 + +; Used for testing CNAME queries +cname1 CNAME cname1-target +cname1-target TXT "testing cname" + +cname2 CNAME cname2-target +cname2-target TXT "testing cname" + +; Used for testing DNAME queries +dname1 DNAME dname1-target +foo.dname1-target TXT "testing dname" + +dname2 DNAME dname2-target +foo.dname2-target TXT "testing dname" + +; A secure subdomain +secure NS ns.secure +ns.secure A 10.53.0.3 + +; An insecure subdomain +insecure NS ns.insecure +ns.insecure A 10.53.0.3 + +; A secure subdomain we're going to inject bogus data into +bogus NS ns.bogus +ns.bogus A 10.53.0.3 + +; A dynamic secure subdomain +dynamic NS dynamic +dynamic A 10.53.0.3 + +; A insecure subdomain +mustbesecure NS ns.mustbesecure +ns.mustbesecure A 10.53.0.3 + +; A rfc2535 signed zone w/ CNAME +rfc2535 NS ns.rfc2535 +ns.rfc2535 A 10.53.0.3 + +z A 10.0.0.26 + +keyless NS ns.keyless +ns.keyless A 10.53.0.3 + +nsec3 NS ns.nsec3 +ns.nsec3 A 10.53.0.3 + +optout NS ns.optout +ns.optout A 10.53.0.3 + +nsec3-unknown NS ns.nsec3-unknown +ns.nsec3-unknown A 10.53.0.3 + +optout-unknown NS ns.optout-unknown +ns.optout-unknown A 10.53.0.3 + +multiple NS ns.multiple +ns.multiple A 10.53.0.3 + +*.wild A 10.0.0.27 diff --git a/bin/tests/system/dnssec/ns2/insecure.secure.example.db b/bin/tests/system/dnssec/ns2/insecure.secure.example.db new file mode 100644 index 0000000..f16a2cf --- /dev/null +++ b/bin/tests/system/dnssec/ns2/insecure.secure.example.db @@ -0,0 +1,32 @@ +; 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. + +; $Id: insecure.secure.example.db,v 1.9 2007/06/19 23:47:02 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.3 + +a A 10.0.0.1 +b A 10.0.0.2 +d A 10.0.0.4 +z A 10.0.0.26 diff --git a/bin/tests/system/dnssec/ns2/named.conf b/bin/tests/system/dnssec/ns2/named.conf new file mode 100644 index 0000000..3160413 --- /dev/null +++ b/bin/tests/system/dnssec/ns2/named.conf @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2004, 2006-2008 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2000-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. + */ + +/* $Id: named.conf,v 1.30 2008/09/25 04:02:38 tbox Exp $ */ + +// NS2 + +controls { /* empty */ }; + +options { + query-source address 10.53.0.2; + notify-source 10.53.0.2; + transfer-source 10.53.0.2; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.2; }; + listen-on-v6 { none; }; + recursion no; + notify yes; + dnssec-enable yes; + dnssec-validation yes; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +zone "dlv" { + type master; + file "dlv.db.signed"; +}; + +zone "example" { + type master; + file "example.db.signed"; + allow-update { any; }; +}; + +zone "private.secure.example" { + type master; + file "private.secure.example.db.signed"; + allow-update { any; }; +}; + +zone "insecure.secure.example" { + type master; + file "insecure.secure.example.db"; + allow-update { any; }; +}; + +zone "rfc2335.example" { + type master; + file "rfc2335.example.db"; +}; + +zone "child.nsec3.example" { + type master; + file "child.nsec3.example.db"; + allow-update { none; }; +}; + +zone "child.optout.example" { + type master; + file "child.optout.example.db"; + allow-update { none; }; +}; + +include "trusted.conf"; diff --git a/bin/tests/system/dnssec/ns2/private.secure.example.db.in b/bin/tests/system/dnssec/ns2/private.secure.example.db.in new file mode 100644 index 0000000..2bf2787 --- /dev/null +++ b/bin/tests/system/dnssec/ns2/private.secure.example.db.in @@ -0,0 +1,34 @@ +; 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. + +; $Id: private.secure.example.db.in,v 1.10 2007/06/19 23:47:02 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.2 + +a A 10.0.0.1 +b A 10.0.0.2 +d A 10.0.0.4 +z A 10.0.0.26 +private2secure-nxdomain CNAME r.example. +*.wild CNAME s.example. diff --git a/bin/tests/system/dnssec/ns2/rfc2335.example.db b/bin/tests/system/dnssec/ns2/rfc2335.example.db new file mode 100644 index 0000000..b8b477e --- /dev/null +++ b/bin/tests/system/dnssec/ns2/rfc2335.example.db @@ -0,0 +1,103 @@ +; File written on Fri Apr 30 12:19:15 2004 +; dnssec_signzone version 9.2.4rc3 +rfc2335.example. 300 IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + 300 SIG SOA 1 2 300 20040530021915 ( + 20040430021915 47799 rfc2335.example. + nGPJKIzF7X/hMJbZURRz59UeEi/6HRxCn9Er + GqSnpw0Ea9Yx5Axu6sLKnF7jXlkZ6NHMCIpJ + +Lv+FDHXTs/dQg== ) + 300 NS ns.rfc2335.example. + 300 SIG NS 1 2 300 20040530021915 ( + 20040430021915 47799 rfc2335.example. + Q234AL9dJYMvxdWG33lpww6AJ3GplKp+ace7 + MUaj0oqDdkx4DtJF2XaP2xcqq7kTOObdQ8ES + vVxNThqOx7LFzg== ) + 300 KEY 256 3 1 ( + AQPZhzXIabI8y5ihWUw7F0WxN2MabnYWkOcV + Fn11NgaGSdjBSYPRMMwMCasD5N2KYPRUP83W + y8mj+ofcoW1FurcZ + ) ; key id = 47799 + 300 NXT a.rfc2335.example. NS SOA SIG KEY NXT + 300 SIG NXT 1 2 300 20040530021915 ( + 20040430021915 47799 rfc2335.example. + Y587mqNy6pBEfbsU6+weM2XRSqLwLwRT9Sl7 + oNuOK9kV3TR4R2M54m2S0MgJCXbRAwU+fF8Q + UbZkSTVe2N8Nyg== ) +a.rfc2335.example. 300 IN A 10.0.0.1 + 300 SIG A 1 3 300 20040530021915 ( + 20040430021915 47799 rfc2335.example. + FnfWrcw5ire8ut25504zti5l///BdDMUAkJZ + UCLFiTW4lBGMcq1pqz64zltDZXCgJ3xUeQ2i + nRt19/ZxO6Z1KA== ) + 300 NXT b.rfc2335.example. A SIG NXT + 300 SIG NXT 1 3 300 20040530021915 ( + 20040430021915 47799 rfc2335.example. + R6SpC3ndMVg4u/eZaaUsXSuMHV/hZXeaM/Op + bJLAe3KxMiOHfb6XgLy7wflAiC1xt6A9bWpy + kTc5T5gfic33kA== ) +b.rfc2335.example. 300 IN A 10.0.0.2 + 300 SIG A 1 3 300 20040530021915 ( + 20040430021915 47799 rfc2335.example. + zjRsYXMGyhDI6ipDtu8YXC9XPN+3hGamzzxL + 8uPE/LPo+x19MNdbzEgWzlajAf1/mkSGr2jN + BDMVBA5NMKpwAA== ) + 300 NXT d.rfc2335.example. A SIG NXT + 300 SIG NXT 1 3 300 20040530021915 ( + 20040430021915 47799 rfc2335.example. + aV87iZCYsC5Tqop827Zzb18TNqopGt0QynkR + gIF/lIHqZasNFRfaS1/nTnXdDKD8JS5IqxKb + oTJr5zswDAtCEw== ) +d.rfc2335.example. 300 IN A 10.0.0.4 + 300 SIG A 1 3 300 20040530021915 ( + 20040430021915 47799 rfc2335.example. + NsKyvhUYZxTbOTBX4YwxTxevI5iGBpULKwmt + +D4l00ME4XRygOVmiqVDTT9dF1EgjDxOdfMT + hSjtCh5M1b2f6g== ) + 300 NXT ns.rfc2335.example. A SIG NXT + 300 SIG NXT 1 3 300 20040530021915 ( + 20040430021915 47799 rfc2335.example. + OGqlvSDZIZdHYigh4UAFzXfPze7vcQfgj7sN + +cAeoh4BL1gpa00DqANCxowNCYluDk3ZCDwt + UHZEJa8ZjNvv4g== ) +ns.rfc2335.example. 300 IN A 10.53.0.3 + 300 SIG A 1 3 300 20040530021915 ( + 20040430021915 47799 rfc2335.example. + T6ZGeUWflLTku8jO23x/TeAPeUl8t0I18FCh + qHUZaHomLQasQ2jlZQn6cLpFd2uFJkBNxZ0G + I39aG7G1bObXdA== ) + 300 NXT x.rfc2335.example. A SIG NXT + 300 SIG NXT 1 3 300 20040530021915 ( + 20040430021915 47799 rfc2335.example. + l46mrf3/Ii5iRm3AiDjYeMg4ZXBgitHxXA2y + e/NhKpkxRRpCs7UQ94wT/RiSCjjK49E5FBe6 + 5bRxtWq0GI7zlg== ) +x.rfc2335.example. 300 IN CNAME a.rfc2335.example. + 300 SIG CNAME 1 3 300 20040530021915 ( + 20040430021915 47799 rfc2335.example. + L3IOluq+kboBd2gR2Mu54uJKCUzfmyHRiWKl + kfx+vuFr0I8mEHQRmJtouxNDrBzmzGp5vybK + SdabLWw0n6uQEA== ) + 300 NXT z.rfc2335.example. CNAME SIG NXT + 300 SIG NXT 1 3 300 20040530021915 ( + 20040430021915 47799 rfc2335.example. + CBKoJSkZzdpwiON7JS4yPFY5VVeBjfT19x/O + vx+5UK1JZUNKhTXWWgW1er+JlLzNf4Ot40+l + z9HUTyaeS0eWyw== ) +z.rfc2335.example. 300 IN A 10.0.0.26 + 300 SIG A 1 3 300 20040530021915 ( + 20040430021915 47799 rfc2335.example. + ccqjVHnehvVwlNNd4+7n/GzGlRjj+ul0gCT3 + X3950LTccxHsOFyjNNm8v/Ho/aurSYdqXEjY + jwmjC6elwkzB7A== ) + 300 NXT rfc2335.example. A SIG NXT + 300 SIG NXT 1 3 300 20040530021915 ( + 20040430021915 47799 rfc2335.example. + W42WoFyd9erysv8HjKo+CpHIH1x6+pAKwCDO + /hHnkEpQI3brewxl7cWOPYeA92Ns80Ody/ui + m2E28A5gnmWqPw== ) diff --git a/bin/tests/system/dnssec/ns2/sign.sh b/bin/tests/system/dnssec/ns2/sign.sh new file mode 100644 index 0000000..4389678 --- /dev/null +++ b/bin/tests/system/dnssec/ns2/sign.sh @@ -0,0 +1,68 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2006-2008 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2000-2003 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. + +# $Id: sign.sh,v 1.30 2008/09/25 04:02:38 tbox Exp $ + +SYSTEMTESTTOP=../.. +. $SYSTEMTESTTOP/conf.sh + +RANDFILE=../random.data + +zone=example. +infile=example.db.in +zonefile=example.db + +# Have the child generate a zone key and pass it to us. + +( cd ../ns3 && sh sign.sh ) + +for subdomain in secure bogus dynamic keyless nsec3 optout nsec3-unknown optout-unknown multiple +do + cp ../ns3/keyset-$subdomain.example. . +done + +keyname1=`$KEYGEN -r $RANDFILE -a DSA -b 768 -n zone $zone` +keyname2=`$KEYGEN -r $RANDFILE -a DSA -b 768 -n zone $zone` + +cat $infile $keyname1.key $keyname2.key >$zonefile + +$SIGNER -g -r $RANDFILE -o $zone -k $keyname1 $zonefile $keyname2 > /dev/null + +# Sign the privately secure file + +privzone=private.secure.example. +privinfile=private.secure.example.db.in +privzonefile=private.secure.example.db + +privkeyname=`$KEYGEN -r $RANDFILE -a RSAMD5 -b 768 -n zone $privzone` + +cat $privinfile $privkeyname.key >$privzonefile + +$SIGNER -g -r $RANDFILE -o $privzone -l dlv $privzonefile > /dev/null + +# Sign the DLV secure zone. + + +dlvzone=dlv. +dlvinfile=dlv.db.in +dlvzonefile=dlv.db + +dlvkeyname=`$KEYGEN -r $RANDFILE -a RSAMD5 -b 768 -n zone $dlvzone` + +cat $dlvinfile $dlvkeyname.key dlvset-$privzone > $dlvzonefile + +$SIGNER -g -r $RANDFILE -o $dlvzone $dlvzonefile > /dev/null diff --git a/bin/tests/system/dnssec/ns3/bogus.example.db.in b/bin/tests/system/dnssec/ns3/bogus.example.db.in new file mode 100644 index 0000000..e83d07b --- /dev/null +++ b/bin/tests/system/dnssec/ns3/bogus.example.db.in @@ -0,0 +1,32 @@ +; 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. + +; $Id: bogus.example.db.in,v 1.9 2007/06/19 23:47:02 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.3 + +a A 10.0.0.1 +b A 10.0.0.2 +d A 10.0.0.4 +z A 10.0.0.26 diff --git a/bin/tests/system/dnssec/ns3/dynamic.example.db.in b/bin/tests/system/dnssec/ns3/dynamic.example.db.in new file mode 100644 index 0000000..0b5b0b0 --- /dev/null +++ b/bin/tests/system/dnssec/ns3/dynamic.example.db.in @@ -0,0 +1,31 @@ +; Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +; Copyright (C) 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. + +; $Id: dynamic.example.db.in,v 1.5 2007/06/19 23:47:02 tbox Exp $ + +; This has the NS and glue at the apex because testing RT #2399 +; requires we have only one name in the zone at a certain point +; during the test. + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) +@ NS @ +@ A 10.53.0.3 diff --git a/bin/tests/system/dnssec/ns3/insecure.example.db b/bin/tests/system/dnssec/ns3/insecure.example.db new file mode 100644 index 0000000..036adc5 --- /dev/null +++ b/bin/tests/system/dnssec/ns3/insecure.example.db @@ -0,0 +1,32 @@ +; 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. + +; $Id: insecure.example.db,v 1.9 2007/06/19 23:47:02 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.3 + +a A 10.0.0.1 +b A 10.0.0.2 +d A 10.0.0.4 +z A 10.0.0.26 diff --git a/bin/tests/system/dnssec/ns3/insecure.nsec3.example.db b/bin/tests/system/dnssec/ns3/insecure.nsec3.example.db new file mode 100644 index 0000000..4518c2d --- /dev/null +++ b/bin/tests/system/dnssec/ns3/insecure.nsec3.example.db @@ -0,0 +1,31 @@ +; Copyright (C) 2008 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: insecure.nsec3.example.db,v 1.2 2008/09/24 02:46:21 marka Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.3 + +a A 10.0.0.1 +b A 10.0.0.2 +d A 10.0.0.4 +z A 10.0.0.26 diff --git a/bin/tests/system/dnssec/ns3/insecure.optout.example.db b/bin/tests/system/dnssec/ns3/insecure.optout.example.db new file mode 100644 index 0000000..0a3a45d --- /dev/null +++ b/bin/tests/system/dnssec/ns3/insecure.optout.example.db @@ -0,0 +1,31 @@ +; Copyright (C) 2008 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: insecure.optout.example.db,v 1.2 2008/09/24 02:46:21 marka Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.3 + +a A 10.0.0.1 +b A 10.0.0.2 +d A 10.0.0.4 +z A 10.0.0.26 diff --git a/bin/tests/system/dnssec/ns3/keyless.example.db.in b/bin/tests/system/dnssec/ns3/keyless.example.db.in new file mode 100644 index 0000000..e2d1ffa --- /dev/null +++ b/bin/tests/system/dnssec/ns3/keyless.example.db.in @@ -0,0 +1,29 @@ +; Copyright (C) 2004, 2007 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. + +; $Id: keyless.example.db.in,v 1.5 2007/06/19 23:47:02 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.3 + +a.b A 10.0.0.1 diff --git a/bin/tests/system/dnssec/ns3/multiple.example.db.in b/bin/tests/system/dnssec/ns3/multiple.example.db.in new file mode 100644 index 0000000..c805a3e --- /dev/null +++ b/bin/tests/system/dnssec/ns3/multiple.example.db.in @@ -0,0 +1,34 @@ +; Copyright (C) 2006, 2008 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: multiple.example.db.in,v 1.3 2008/09/25 04:02:38 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.3 + +a A 10.0.0.1 +b A 10.0.0.2 +d A 10.0.0.4 +z A 10.0.0.26 +a.a.a.a A 10.0.0.3 +*.e A 10.0.0.6 +child NS ns2.example. diff --git a/bin/tests/system/dnssec/ns3/named.conf b/bin/tests/system/dnssec/ns3/named.conf new file mode 100644 index 0000000..38f4ad0 --- /dev/null +++ b/bin/tests/system/dnssec/ns3/named.conf @@ -0,0 +1,159 @@ +/* + * Copyright (C) 2004, 2006-2008 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2000-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. + */ + +/* $Id: named.conf,v 1.33 2008/09/25 04:02:38 tbox Exp $ */ + +// NS3 + +controls { /* empty */ }; + +options { + query-source address 10.53.0.3; + notify-source 10.53.0.3; + transfer-source 10.53.0.3; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.3; }; + listen-on-v6 { none; }; + recursion no; + notify yes; + dnssec-enable yes; + dnssec-validation yes; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +zone "example" { + type slave; + masters { 10.53.0.2; }; + file "example.bk"; +}; + +zone "secure.example" { + type master; + file "secure.example.db.signed"; + allow-update { any; }; +}; + +zone "bogus.example" { + type master; + file "bogus.example.db.signed"; + allow-update { any; }; +}; + +zone "dynamic.example" { + type master; + file "dynamic.example.db.signed"; + allow-update { any; }; +}; + +zone "insecure.example" { + type master; + file "insecure.example.db"; + allow-update { any; }; +}; + +zone "insecure.nsec3.example" { + type master; + file "insecure.nsec3.example.db"; + allow-update { any; }; +}; + +zone "insecure.optout.example" { + type master; + file "insecure.optout.example.db"; + allow-update { any; }; +}; + +zone "keyless.example" { + type master; + file "keyless.example.db.signed"; +}; + +zone "nsec3.example" { + type master; + file "nsec3.example.db.signed"; +}; + +zone "optout.nsec3.example" { + type master; + file "optout.nsec3.example.db.signed"; +}; + +zone "nsec3.nsec3.example" { + type master; + file "nsec3.nsec3.example.db.signed"; +}; + +zone "secure.nsec3.example" { + type master; + file "secure.nsec3.example.db.signed"; +}; + +zone "optout.example" { + type master; + file "optout.example.db.signed"; +}; + +zone "secure.optout.example" { + type master; + file "secure.optout.example.db.signed"; +}; + +zone "nsec3.optout.example" { + type master; + file "nsec3.optout.example.db.signed"; +}; + +zone "optout.optout.example" { + type master; + file "optout.optout.example.db.signed"; +}; + +zone "nsec3-unknown.example" { + type master; + nsec3-test-zone yes; + file "nsec3-unknown.example.db.signed"; +}; + +zone "optout-unknown.example" { + type master; + nsec3-test-zone yes; + file "optout-unknown.example.db.signed"; +}; + +zone "multiple.example" { + type master; + file "multiple.example.db.signed"; + allow-update { any; }; +}; + +zone "mustbesecure.example" { + type master; + file "mustbesecure.example.db"; +}; + +zone "rfc2335.example" { + type slave; + masters { 10.53.0.2; }; + file "rfc2335.example.bk"; +}; + +include "trusted.conf"; diff --git a/bin/tests/system/dnssec/ns3/nsec3-unknown.example.db.in b/bin/tests/system/dnssec/ns3/nsec3-unknown.example.db.in new file mode 100644 index 0000000..ffdd3e3 --- /dev/null +++ b/bin/tests/system/dnssec/ns3/nsec3-unknown.example.db.in @@ -0,0 +1,34 @@ +; Copyright (C) 2006, 2008 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: nsec3-unknown.example.db.in,v 1.3 2008/09/25 04:02:38 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.3 + +a A 10.0.0.1 +b A 10.0.0.2 +d A 10.0.0.4 +z A 10.0.0.26 +a.a.a.a A 10.0.0.3 +*.e A 10.0.0.6 +child NS ns2.example. diff --git a/bin/tests/system/dnssec/ns3/nsec3.example.db.in b/bin/tests/system/dnssec/ns3/nsec3.example.db.in new file mode 100644 index 0000000..97ac59c --- /dev/null +++ b/bin/tests/system/dnssec/ns3/nsec3.example.db.in @@ -0,0 +1,43 @@ +; Copyright (C) 2006, 2008 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: nsec3.example.db.in,v 1.3 2008/09/25 04:02:38 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.3 + +a A 10.0.0.1 +b A 10.0.0.2 +d A 10.0.0.4 +z A 10.0.0.26 +a.a.a.a A 10.0.0.3 +*.wild A 10.0.0.6 +child NS ns2.example. +insecure NS ns.insecure +ns.insecure A 10.53.0.3 +secure NS ns.secure +ns.secure A 10.53.0.3 +nsec3 NS ns.nsec3 +ns.nsec3 A 10.53.0.3 +optout NS ns.optout +ns.optout A 10.53.0.3 +02HC3EM7BDD011A0GMS3HKKJT2IF5VP8 A 10.0.0.17 diff --git a/bin/tests/system/dnssec/ns3/nsec3.nsec3.example.db.in b/bin/tests/system/dnssec/ns3/nsec3.nsec3.example.db.in new file mode 100644 index 0000000..ca5b6e8 --- /dev/null +++ b/bin/tests/system/dnssec/ns3/nsec3.nsec3.example.db.in @@ -0,0 +1,40 @@ +; Copyright (C) 2008 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: nsec3.nsec3.example.db.in,v 1.3 2008/09/25 04:02:38 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.3 + +a A 10.0.0.1 +b A 10.0.0.2 +d A 10.0.0.4 +z A 10.0.0.26 +a.a.a.a.a.a.a.a.a.a.e A 10.0.0.27 +x CNAME a + +private NS ns.private +ns.private A 10.53.0.2 + +insecure NS ns.insecure +ns.insecure A 10.53.0.2 + diff --git a/bin/tests/system/dnssec/ns3/nsec3.optout.example.db.in b/bin/tests/system/dnssec/ns3/nsec3.optout.example.db.in new file mode 100644 index 0000000..fd766e7 --- /dev/null +++ b/bin/tests/system/dnssec/ns3/nsec3.optout.example.db.in @@ -0,0 +1,40 @@ +; Copyright (C) 2008 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: nsec3.optout.example.db.in,v 1.3 2008/09/25 04:02:38 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.3 + +a A 10.0.0.1 +b A 10.0.0.2 +d A 10.0.0.4 +z A 10.0.0.26 +a.a.a.a.a.a.a.a.a.a.e A 10.0.0.27 +x CNAME a + +private NS ns.private +ns.private A 10.53.0.2 + +insecure NS ns.insecure +ns.insecure A 10.53.0.2 + diff --git a/bin/tests/system/dnssec/ns3/optout-unknown.example.db.in b/bin/tests/system/dnssec/ns3/optout-unknown.example.db.in new file mode 100644 index 0000000..b001555 --- /dev/null +++ b/bin/tests/system/dnssec/ns3/optout-unknown.example.db.in @@ -0,0 +1,34 @@ +; Copyright (C) 2006, 2008 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: optout-unknown.example.db.in,v 1.3 2008/09/25 04:02:38 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.3 + +a A 10.0.0.1 +b A 10.0.0.2 +d A 10.0.0.4 +z A 10.0.0.26 +a.a.a.a A 10.0.0.3 +*.e A 10.0.0.6 +child NS ns2.example. diff --git a/bin/tests/system/dnssec/ns3/optout.example.db.in b/bin/tests/system/dnssec/ns3/optout.example.db.in new file mode 100644 index 0000000..e41d15b --- /dev/null +++ b/bin/tests/system/dnssec/ns3/optout.example.db.in @@ -0,0 +1,45 @@ +; Copyright (C) 2006, 2008 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: optout.example.db.in,v 1.3 2008/09/25 04:02:38 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.3 + +a A 10.0.0.1 +b A 10.0.0.2 +d A 10.0.0.4 +z A 10.0.0.26 +a.a.a.a A 10.0.0.3 +*.wild A 10.0.0.6 +insecure NS ns.insecure +ns.insecure A 10.53.0.3 +secure NS ns.secure +ns.secure A 10.53.0.3 +nsec3 NS ns.nsec3 +ns.nsec3 A 10.53.0.3 +optout NS ns.optout +ns.optout A 10.53.0.3 +child NS ns2.example. +insecure.empty NS ns.insecure.empty +ns.insecure.empty A 10.53.0.3 +foo.*.empty-wild NS ns diff --git a/bin/tests/system/dnssec/ns3/optout.nsec3.example.db.in b/bin/tests/system/dnssec/ns3/optout.nsec3.example.db.in new file mode 100644 index 0000000..150c386 --- /dev/null +++ b/bin/tests/system/dnssec/ns3/optout.nsec3.example.db.in @@ -0,0 +1,40 @@ +; Copyright (C) 2008 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: optout.nsec3.example.db.in,v 1.3 2008/09/25 04:02:38 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.3 + +a A 10.0.0.1 +b A 10.0.0.2 +d A 10.0.0.4 +z A 10.0.0.26 +a.a.a.a.a.a.a.a.a.a.e A 10.0.0.27 +x CNAME a + +private NS ns.private +ns.private A 10.53.0.2 + +insecure NS ns.insecure +ns.insecure A 10.53.0.2 + diff --git a/bin/tests/system/dnssec/ns3/optout.optout.example.db.in b/bin/tests/system/dnssec/ns3/optout.optout.example.db.in new file mode 100644 index 0000000..91b5b89 --- /dev/null +++ b/bin/tests/system/dnssec/ns3/optout.optout.example.db.in @@ -0,0 +1,40 @@ +; Copyright (C) 2008 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: optout.optout.example.db.in,v 1.3 2008/09/25 04:02:38 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.3 + +a A 10.0.0.1 +b A 10.0.0.2 +d A 10.0.0.4 +z A 10.0.0.26 +a.a.a.a.a.a.a.a.a.a.e A 10.0.0.27 +x CNAME a + +private NS ns.private +ns.private A 10.53.0.2 + +insecure NS ns.insecure +ns.insecure A 10.53.0.2 + diff --git a/bin/tests/system/dnssec/ns3/secure.example.db.in b/bin/tests/system/dnssec/ns3/secure.example.db.in new file mode 100644 index 0000000..9cd4d6f --- /dev/null +++ b/bin/tests/system/dnssec/ns3/secure.example.db.in @@ -0,0 +1,41 @@ +; Copyright (C) 2004, 2007, 2008 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. + +; $Id: secure.example.db.in,v 1.13 2008/09/25 04:02:38 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.3 + +a A 10.0.0.1 +b A 10.0.0.2 +d A 10.0.0.4 +z A 10.0.0.26 +a.a.a.a.a.a.a.a.a.a.e A 10.0.0.27 +x CNAME a + +private NS ns.private +ns.private A 10.53.0.2 + +insecure NS ns.insecure +ns.insecure A 10.53.0.2 + diff --git a/bin/tests/system/dnssec/ns3/secure.nsec3.example.db.in b/bin/tests/system/dnssec/ns3/secure.nsec3.example.db.in new file mode 100644 index 0000000..92e720b --- /dev/null +++ b/bin/tests/system/dnssec/ns3/secure.nsec3.example.db.in @@ -0,0 +1,40 @@ +; Copyright (C) 2008 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: secure.nsec3.example.db.in,v 1.3 2008/09/25 04:02:38 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.3 + +a A 10.0.0.1 +b A 10.0.0.2 +d A 10.0.0.4 +z A 10.0.0.26 +a.a.a.a.a.a.a.a.a.a.e A 10.0.0.27 +x CNAME a + +private NS ns.private +ns.private A 10.53.0.2 + +insecure NS ns.insecure +ns.insecure A 10.53.0.2 + diff --git a/bin/tests/system/dnssec/ns3/secure.optout.example.db.in b/bin/tests/system/dnssec/ns3/secure.optout.example.db.in new file mode 100644 index 0000000..d1ac6af --- /dev/null +++ b/bin/tests/system/dnssec/ns3/secure.optout.example.db.in @@ -0,0 +1,40 @@ +; Copyright (C) 2008 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: secure.optout.example.db.in,v 1.3 2008/09/25 04:02:38 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.3 + +a A 10.0.0.1 +b A 10.0.0.2 +d A 10.0.0.4 +z A 10.0.0.26 +a.a.a.a.a.a.a.a.a.a.e A 10.0.0.27 +x CNAME a + +private NS ns.private +ns.private A 10.53.0.2 + +insecure NS ns.insecure +ns.insecure A 10.53.0.2 + diff --git a/bin/tests/system/dnssec/ns3/sign.sh b/bin/tests/system/dnssec/ns3/sign.sh new file mode 100644 index 0000000..eb362aa --- /dev/null +++ b/bin/tests/system/dnssec/ns3/sign.sh @@ -0,0 +1,224 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2006-2008 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2000-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. + +# $Id: sign.sh,v 1.25 2008/09/25 04:02:38 tbox Exp $ + +SYSTEMTESTTOP=../.. +. $SYSTEMTESTTOP/conf.sh + +RANDFILE=../random.data + +zone=secure.example. +infile=secure.example.db.in +zonefile=secure.example.db + +keyname=`$KEYGEN -r $RANDFILE -a RSASHA1 -b 768 -n zone $zone` + +cat $infile $keyname.key >$zonefile + +$SIGNER -r $RANDFILE -o $zone $zonefile > /dev/null + +zone=bogus.example. +infile=bogus.example.db.in +zonefile=bogus.example.db + +keyname=`$KEYGEN -r $RANDFILE -a RSAMD5 -b 768 -n zone $zone` + +cat $infile $keyname.key >$zonefile + +$SIGNER -r $RANDFILE -o $zone $zonefile > /dev/null + +zone=dynamic.example. +infile=dynamic.example.db.in +zonefile=dynamic.example.db + +keyname1=`$KEYGEN -r $RANDFILE -a RSAMD5 -b 768 -n zone $zone` +keyname2=`$KEYGEN -r $RANDFILE -a RSAMD5 -b 1024 -n zone -f KSK $zone` + +cat $infile $keyname1.key $keyname2.key >$zonefile + +$SIGNER -r $RANDFILE -o $zone $zonefile > /dev/null + +zone=keyless.example. +infile=keyless.example.db.in +zonefile=keyless.example.db + +keyname=`$KEYGEN -r $RANDFILE -a RSAMD5 -b 768 -n zone $zone` + +cat $infile $keyname.key >$zonefile + +$SIGNER -r $RANDFILE -o $zone $zonefile > /dev/null + +# Change the signer field of the a.b.keyless.example SIG A +# to point to a provably nonexistent KEY record. +mv $zonefile.signed $zonefile.tmp +<$zonefile.tmp perl -p -e 's/ keyless.example/ b.keyless.example/ + if /^a.b.keyless.example/../NXT/;' >$zonefile.signed +rm -f $zonefile.tmp + +# +# NSEC3/NSEC test zone +# +zone=secure.nsec3.example. +infile=secure.nsec3.example.db.in +zonefile=secure.nsec3.example.db + +keyname=`$KEYGEN -r $RANDFILE -a RSAMD5 -b 768 -n zone $zone` + +cat $infile $keyname.key >$zonefile + +$SIGNER -r $RANDFILE -o $zone $zonefile > /dev/null + +# +# NSEC3/NSEC3 test zone +# +zone=nsec3.nsec3.example. +infile=nsec3.nsec3.example.db.in +zonefile=nsec3.nsec3.example.db + +keyname=`$KEYGEN -r $RANDFILE -a NSEC3RSASHA1 -b 768 -n zone $zone` + +cat $infile $keyname.key >$zonefile + +$SIGNER -3 - -r $RANDFILE -o $zone $zonefile > /dev/null + +# +# OPTOUT/NSEC3 test zone +# +zone=optout.nsec3.example. +infile=optout.nsec3.example.db.in +zonefile=optout.nsec3.example.db + +keyname=`$KEYGEN -r $RANDFILE -a NSEC3RSASHA1 -b 768 -n zone $zone` + +cat $infile $keyname.key >$zonefile + +$SIGNER -3 - -A -r $RANDFILE -o $zone $zonefile > /dev/null + +# +# A nsec3 zone (non-optout). +# +zone=nsec3.example. +infile=nsec3.example.db.in +zonefile=nsec3.example.db + +keyname=`$KEYGEN -r $RANDFILE -a NSEC3RSASHA1 -b 768 -n zone $zone` + +cat $infile $keyname.key >$zonefile + +$SIGNER -g -3 - -r $RANDFILE -o $zone $zonefile > /dev/null + +# +# OPTOUT/NSEC test zone +# +zone=secure.optout.example. +infile=secure.optout.example.db.in +zonefile=secure.optout.example.db + +keyname=`$KEYGEN -r $RANDFILE -a RSAMD5 -b 768 -n zone $zone` + +cat $infile $keyname.key >$zonefile + +$SIGNER -r $RANDFILE -o $zone $zonefile > /dev/null + +# +# OPTOUT/NSEC3 test zone +# +zone=nsec3.optout.example. +infile=nsec3.optout.example.db.in +zonefile=nsec3.optout.example.db + +keyname=`$KEYGEN -r $RANDFILE -a NSEC3RSASHA1 -b 768 -n zone $zone` + +cat $infile $keyname.key >$zonefile + +$SIGNER -3 - -r $RANDFILE -o $zone $zonefile > /dev/null + +# +# OPTOUT/OPTOUT test zone +# +zone=optout.optout.example. +infile=optout.optout.example.db.in +zonefile=optout.optout.example.db + +keyname=`$KEYGEN -r $RANDFILE -a NSEC3RSASHA1 -b 768 -n zone $zone` + +cat $infile $keyname.key >$zonefile + +$SIGNER -3 - -A -r $RANDFILE -o $zone $zonefile > /dev/null + +# +# A optout nsec3 zone. +# +zone=optout.example. +infile=optout.example.db.in +zonefile=optout.example.db + +keyname=`$KEYGEN -r $RANDFILE -a NSEC3RSASHA1 -b 768 -n zone $zone` + +cat $infile $keyname.key >$zonefile + +$SIGNER -g -3 - -A -r $RANDFILE -o $zone $zonefile > /dev/null + +# +# A nsec3 zone (non-optout) with unknown hash algorithm. +# +zone=nsec3-unknown.example. +infile=nsec3-unknown.example.db.in +zonefile=nsec3-unknown.example.db + +keyname=`$KEYGEN -r $RANDFILE -a NSEC3RSASHA1 -b 768 -n zone $zone` + +cat $infile $keyname.key >$zonefile + +$SIGNER -3 - -U -r $RANDFILE -o $zone $zonefile > /dev/null + +# +# A optout nsec3 zone. +# +zone=optout-unknown.example. +infile=optout-unknown.example.db.in +zonefile=optout-unknown.example.db + +keyname=`$KEYGEN -r $RANDFILE -a NSEC3RSASHA1 -b 768 -n zone $zone` + +cat $infile $keyname.key >$zonefile + +$SIGNER -3 - -U -A -r $RANDFILE -o $zone $zonefile > /dev/null + +# +# A multiple parameter nsec3 zone. +# +zone=multiple.example. +infile=multiple.example.db.in +zonefile=multiple.example.db + +keyname=`$KEYGEN -r $RANDFILE -a NSEC3RSASHA1 -b 768 -n zone $zone` + +cat $infile $keyname.key >$zonefile + +$SIGNER -r $RANDFILE -o $zone $zonefile > /dev/null +mv $zonefile.signed $zonefile +$SIGNER -3 - -r $RANDFILE -o $zone $zonefile > /dev/null +mv $zonefile.signed $zonefile +$SIGNER -3 AAAA -r $RANDFILE -o $zone $zonefile > /dev/null +mv $zonefile.signed $zonefile +$SIGNER -3 BBBB -r $RANDFILE -o $zone $zonefile > /dev/null +mv $zonefile.signed $zonefile +$SIGNER -3 CCCC -r $RANDFILE -o $zone $zonefile > /dev/null +mv $zonefile.signed $zonefile +$SIGNER -3 DDDD -r $RANDFILE -o $zone $zonefile > /dev/null diff --git a/bin/tests/system/dnssec/ns4/named.conf b/bin/tests/system/dnssec/ns4/named.conf new file mode 100644 index 0000000..63da89c --- /dev/null +++ b/bin/tests/system/dnssec/ns4/named.conf @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2004, 2006, 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. + */ + +/* $Id: named.conf,v 1.28 2007/06/18 23:47:28 tbox Exp $ */ + +// NS4 + +controls { /* empty */ }; + +options { + query-source address 10.53.0.4; + notify-source 10.53.0.4; + transfer-source 10.53.0.4; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.4; }; + listen-on-v6 { none; }; + recursion yes; + acache-enable yes; + dnssec-enable yes; + dnssec-validation yes; + dnssec-must-be-secure mustbesecure.example yes; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +include "trusted.conf"; diff --git a/bin/tests/system/dnssec/ns5/named.conf b/bin/tests/system/dnssec/ns5/named.conf new file mode 100644 index 0000000..64892ca --- /dev/null +++ b/bin/tests/system/dnssec/ns5/named.conf @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2004, 2006, 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. + */ + +/* $Id: named.conf,v 1.25 2007/06/18 23:47:28 tbox Exp $ */ + +// NS5 + +controls { /* empty */ }; + +options { + query-source address 10.53.0.5; + notify-source 10.53.0.5; + transfer-source 10.53.0.5; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.5; }; + listen-on-v6 { none; }; + recursion yes; + acache-enable yes; + dnssec-enable yes; + dnssec-validation yes; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +include "trusted.conf"; diff --git a/bin/tests/system/dnssec/ns5/trusted.conf.bad b/bin/tests/system/dnssec/ns5/trusted.conf.bad new file mode 100644 index 0000000..b806e40 --- /dev/null +++ b/bin/tests/system/dnssec/ns5/trusted.conf.bad @@ -0,0 +1,22 @@ +/* + * 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. + */ + +/* $Id: trusted.conf.bad,v 1.9 2007/06/19 23:47:02 tbox Exp $ */ + +trusted-keys { + "." 256 3 1 "AQO6Cl+slAf+iuieDim9L3kujFHQD7s/IOj03ClMOpKYcTXtK4mRpuULVfvWxDi9Ew/gj0xLnnX7z9OJHIxLI+DSrAHd8Dm0XfBEAtVtJSn70GaPZgnLMw1rk5ap2DsEoWk="; +}; diff --git a/bin/tests/system/dnssec/ns6/named.conf b/bin/tests/system/dnssec/ns6/named.conf new file mode 100644 index 0000000..eb35680 --- /dev/null +++ b/bin/tests/system/dnssec/ns6/named.conf @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2004, 2006, 2007 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: named.conf,v 1.12 2007/06/18 23:47:28 tbox Exp $ */ + +// NS6 + +controls { /* empty */ }; + +options { + query-source address 10.53.0.6; + notify-source 10.53.0.6; + transfer-source 10.53.0.6; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.6; }; + listen-on-v6 { none; }; + recursion yes; + acache-enable yes; + notify yes; + disable-algorithms . { DSA; }; + dnssec-enable yes; + dnssec-validation yes; + dnssec-lookaside . trust-anchor dlv; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +include "trusted.conf"; diff --git a/bin/tests/system/dnssec/ns7/named.conf b/bin/tests/system/dnssec/ns7/named.conf new file mode 100644 index 0000000..0b5ce89 --- /dev/null +++ b/bin/tests/system/dnssec/ns7/named.conf @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2006, 2008 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: named.conf,v 1.3 2008/09/25 04:02:38 tbox Exp $ */ + +// NS3 + +controls { /* empty */ }; + +options { + query-source address 10.53.0.7; + notify-source 10.53.0.7; + transfer-source 10.53.0.7; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.7; }; + listen-on-v6 { none; }; + recursion no; + notify yes; + dnssec-enable yes; + dnssec-validation yes; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +zone "nsec3.example" { + type slave; + masters { 10.53.0.3; }; + file "nsec3.example.bk"; +}; + +zone "optout.example" { + type slave; + masters { 10.53.0.3; }; + file "optout.example.bk"; +}; + +zone "nsec3-unknown.example" { + type slave; + masters { 10.53.0.3; }; + file "nsec3-unknown.example.bk"; +}; + +zone "optout-unknown.example" { + type slave; + masters { 10.53.0.3; }; + file "optout-unknown.example.bk"; +}; + +zone "multiple.example" { + type slave; + masters { 10.53.0.3; }; + file "multiple.example.bk"; +}; + +include "trusted.conf"; diff --git a/bin/tests/system/dnssec/prereq.sh b/bin/tests/system/dnssec/prereq.sh new file mode 100644 index 0000000..8d724f9 --- /dev/null +++ b/bin/tests/system/dnssec/prereq.sh @@ -0,0 +1,28 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2006, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2000-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. + +# $Id: prereq.sh,v 1.10 2007/06/19 23:47:02 tbox Exp $ + +../../genrandom 400 random.data + +if $KEYGEN -a RSAMD5 -b 512 -n zone -r random.data foo > /dev/null 2>&1 +then + rm -f Kfoo* +else + echo "I:This test requires that --with-openssl was used." >&2 + exit 1 +fi diff --git a/bin/tests/system/dnssec/setup.sh b/bin/tests/system/dnssec/setup.sh new file mode 100644 index 0000000..43a6c76 --- /dev/null +++ b/bin/tests/system/dnssec/setup.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# +# 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. + +# $Id: setup.sh,v 1.14 2007/06/19 23:47:02 tbox Exp $ + +../../genrandom 400 random.data + +cd ns1 && sh sign.sh + +echo "a.bogus.example. A 10.0.0.22" >>../ns3/bogus.example.db.signed + +cd ../ns5 && cp -f trusted.conf.bad trusted.conf diff --git a/bin/tests/system/dnssec/tests.sh b/bin/tests/system/dnssec/tests.sh new file mode 100644 index 0000000..57faa63 --- /dev/null +++ b/bin/tests/system/dnssec/tests.sh @@ -0,0 +1,834 @@ +#!/bin/sh +# +# Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2000-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. + +# $Id: tests.sh,v 1.53 2008/09/25 04:02:38 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +status=0 +n=0 + +rm -f dig.out.* + +DIGOPTS="+tcp +noadd +nosea +nostat +nocmd +dnssec -p 5300" + +# Check the example. domain + +echo "I:checking that zone transfer worked ($n)" +ret=0 +$DIG $DIGOPTS a.example. @10.53.0.2 a > dig.out.ns2.test$n || ret=1 +$DIG $DIGOPTS a.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns3.test$n || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking positive validation NSEC ($n)" +ret=0 +$DIG $DIGOPTS +noauth a.example. @10.53.0.2 a > dig.out.ns2.test$n || ret=1 +$DIG $DIGOPTS +noauth a.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking positive validation NSEC3 ($n)" +ret=0 +$DIG $DIGOPTS +noauth a.nsec3.example. \ + @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS +noauth a.nsec3.example. \ + @10.53.0.4 a > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking positive validation OPTOUT ($n)" +ret=0 +$DIG $DIGOPTS +noauth a.optout.example. \ + @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS +noauth a.optout.example. \ + @10.53.0.4 a > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking positive wildcard validation NSEC ($n)" +ret=0 +$DIG $DIGOPTS a.wild.example. @10.53.0.2 a > dig.out.ns2.test$n || ret=1 +$DIG $DIGOPTS a.wild.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking positive wildcard validation NSEC3 ($n)" +ret=0 +$DIG $DIGOPTS a.wild.nsec3.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS a.wild.nsec3.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking positive wildcard validation OPTOUT ($n)" +ret=0 +$DIG $DIGOPTS a.wild.optout.example. \ + @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS a.wild.optout.example. \ + @10.53.0.4 a > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking negative validation NXDOMAIN NSEC ($n)" +ret=0 +$DIG $DIGOPTS +noauth q.example. @10.53.0.2 a > dig.out.ns2.test$n || ret=1 +$DIG $DIGOPTS +noauth q.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +grep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking negative validation NXDOMAIN NSEC3 ($n)" +ret=0 +$DIG $DIGOPTS +noauth q.nsec3.example. \ + @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS +noauth q.nsec3.example. \ + @10.53.0.4 a > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +grep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking negative validation NXDOMAIN OPTOUT ($n)" +ret=0 +$DIG $DIGOPTS +noauth q.optout.example. \ + @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS +noauth q.optout.example. \ + @10.53.0.4 a > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1 +# Note - this is looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking negative validation NODATA NSEC ($n)" +ret=0 +$DIG $DIGOPTS +noauth a.example. @10.53.0.2 txt > dig.out.ns2.test$n || ret=1 +$DIG $DIGOPTS +noauth a.example. @10.53.0.4 txt > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +grep "ANSWER: 0" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking negative validation NODATA NSEC3 ($n)" +ret=0 +$DIG $DIGOPTS +noauth a.nsec3.example. \ + @10.53.0.3 txt > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS +noauth a.nsec3.example. \ + @10.53.0.4 txt > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +grep "ANSWER: 0" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking negative validation NODATA OPTOUT ($n)" +ret=0 +$DIG $DIGOPTS +noauth a.optout.example. \ + @10.53.0.3 txt > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS +noauth a.optout.example. \ + @10.53.0.4 txt > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +grep "ANSWER: 0" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking negative wildcard validation NSEC ($n)" +ret=0 +$DIG $DIGOPTS b.wild.example. @10.53.0.2 txt > dig.out.ns2.test$n || ret=1 +$DIG $DIGOPTS b.wild.example. @10.53.0.4 txt > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking negative wildcard validation NSEC3 ($n)" +ret=0 +$DIG $DIGOPTS b.wild.nsec3.example. @10.53.0.3 txt > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS b.wild.nsec3.example. @10.53.0.4 txt > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking negative wildcard validation OPTOUT ($n)" +ret=0 +$DIG $DIGOPTS b.wild.optout.example. \ + @10.53.0.3 txt > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS b.wild.optout.example. \ + @10.53.0.4 txt > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +# Note - this is looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +# Check the insecure.example domain + +echo "I:checking 1-server insecurity proof NSEC ($n)" +ret=0 +$DIG $DIGOPTS +noauth a.insecure.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS +noauth a.insecure.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +# Note - this is looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking 1-server insecurity proof NSEC3 ($n)" +ret=0 +$DIG $DIGOPTS +noauth a.insecure.nsec3.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS +noauth a.insecure.nsec3.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +# Note - this is looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking 1-server insecurity proof OPTOUT ($n)" +ret=0 +$DIG $DIGOPTS +noauth a.insecure.optout.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS +noauth a.insecure.optout.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +# Note - this is looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking 1-server negative insecurity proof NSEC ($n)" +ret=0 +$DIG $DIGOPTS q.insecure.example. a @10.53.0.3 \ + > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS q.insecure.example. a @10.53.0.4 \ + > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1 +# Note - this is looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking 1-server negative insecurity proof NSEC3 ($n)" +ret=0 +$DIG $DIGOPTS q.insecure.nsec3.example. a @10.53.0.3 \ + > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS q.insecure.nsec3.example. a @10.53.0.4 \ + > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1 +# Note - this is looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking 1-server negative insecurity proof OPTOUT ($n)" +ret=0 +$DIG $DIGOPTS q.insecure.optout.example. a @10.53.0.3 \ + > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS q.insecure.optout.example. a @10.53.0.4 \ + > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1 +# Note - this is looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking 1-server negative insecurity proof with SOA hack NSEC ($n)" +ret=0 +$DIG $DIGOPTS r.insecure.example. soa @10.53.0.3 \ + > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS r.insecure.example. soa @10.53.0.4 \ + > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1 +grep "0 IN SOA" dig.out.ns4.test$n > /dev/null || ret=1 +# Note - this is looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking 1-server negative insecurity proof with SOA hack NSEC3 ($n)" +ret=0 +$DIG $DIGOPTS r.insecure.nsec3.example. soa @10.53.0.3 \ + > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS r.insecure.nsec3.example. soa @10.53.0.4 \ + > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1 +grep "0 IN SOA" dig.out.ns4.test$n > /dev/null || ret=1 +# Note - this is looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking 1-server negative insecurity proof with SOA hack OPTOUT ($n)" +ret=0 +$DIG $DIGOPTS r.insecure.optout.example. soa @10.53.0.3 \ + > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS r.insecure.optout.example. soa @10.53.0.4 \ + > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1 +grep "0 IN SOA" dig.out.ns4.test$n > /dev/null || ret=1 +# Note - this is looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +# Check the secure.example domain + +echo "I:checking multi-stage positive validation NSEC/NSEC ($n)" +ret=0 +$DIG $DIGOPTS +noauth a.secure.example. \ + @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS +noauth a.secure.example. \ + @10.53.0.4 a > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking multi-stage positive validation NSEC/NSEC3 ($n)" +ret=0 +$DIG $DIGOPTS +noauth a.nsec3.example. \ + @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS +noauth a.nsec3.example. \ + @10.53.0.4 a > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking multi-stage positive validation NSEC/OPTOUT ($n)" +ret=0 +$DIG $DIGOPTS +noauth a.optout.example. \ + @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS +noauth a.optout.example. \ + @10.53.0.4 a > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking multi-stage positive validation NSEC3/NSEC ($n)" +ret=0 +$DIG $DIGOPTS +noauth a.secure.nsec3.example. \ + @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS +noauth a.secure.nsec3.example. \ + @10.53.0.4 a > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking multi-stage positive validation NSEC3/NSEC3 ($n)" +ret=0 +$DIG $DIGOPTS +noauth a.nsec3.nsec3.example. \ + @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS +noauth a.nsec3.nsec3.example. \ + @10.53.0.4 a > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking multi-stage positive validation NSEC3/OPTOUT ($n)" +ret=0 +$DIG $DIGOPTS +noauth a.optout.nsec3.example. \ + @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS +noauth a.optout.nsec3.example. \ + @10.53.0.4 a > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking multi-stage positive validation OPTOUT/NSEC ($n)" +ret=0 +$DIG $DIGOPTS +noauth a.secure.optout.example. \ + @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS +noauth a.secure.optout.example. \ + @10.53.0.4 a > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking multi-stage positive validation OPTOUT/NSEC3 ($n)" +ret=0 +$DIG $DIGOPTS +noauth a.nsec3.optout.example. \ + @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS +noauth a.nsec3.optout.example. \ + @10.53.0.4 a > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking multi-stage positive validation OPTOUT/OPTOUT ($n)" +ret=0 +$DIG $DIGOPTS +noauth a.optout.optout.example. \ + @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS +noauth a.optout.optout.example. \ + @10.53.0.4 a > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking empty NODATA OPTOUT ($n)" +ret=0 +$DIG $DIGOPTS +noauth empty.optout.example. \ + @10.53.0.3 a > dig.out.ns3.test$n || ret=1 +$DIG $DIGOPTS +noauth empty.optout.example. \ + @10.53.0.4 a > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 +grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +#grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +# Check the bogus domain + +echo "I:checking failed validation ($n)" +ret=0 +$DIG $DIGOPTS a.bogus.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1 +grep "SERVFAIL" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +# Try validating with a bad trusted key. +# This should fail. + +echo "I:checking that validation fails with a misconfigured trusted key ($n)" +ret=0 +$DIG $DIGOPTS example. soa @10.53.0.5 > dig.out.ns5.test$n || ret=1 +grep "SERVFAIL" dig.out.ns5.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking that negative validation fails with a misconfigured trusted key ($n)" +ret=0 +$DIG $DIGOPTS example. ptr @10.53.0.5 > dig.out.ns5.test$n || ret=1 +grep "SERVFAIL" dig.out.ns5.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking that insecurity proofs fail with a misconfigured trusted key ($n)" +ret=0 +$DIG $DIGOPTS a.insecure.example. a @10.53.0.5 > dig.out.ns5.test$n || ret=1 +grep "SERVFAIL" dig.out.ns5.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking that validation fails when key record is missing ($n)" +ret=0 +$DIG $DIGOPTS a.b.keyless.example. a @10.53.0.4 > dig.out.ns4.test$n || ret=1 +grep "SERVFAIL" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +# Check the insecure.secure.example domain (insecurity proof) + +echo "I:checking 2-server insecurity proof ($n)" +ret=0 +$DIG $DIGOPTS +noauth a.insecure.secure.example. @10.53.0.2 a \ + > dig.out.ns2.test$n || ret=1 +$DIG $DIGOPTS +noauth a.insecure.secure.example. @10.53.0.4 a \ + > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 +grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +# Note - this is looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +# Check a negative response in insecure.secure.example + +echo "I:checking 2-server insecurity proof with a negative answer ($n)" +ret=0 +$DIG $DIGOPTS q.insecure.secure.example. @10.53.0.2 a > dig.out.ns2.test$n \ + || ret=1 +$DIG $DIGOPTS q.insecure.secure.example. @10.53.0.4 a > dig.out.ns4.test$n \ + || ret=1 +$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 +grep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1 +# Note - this is looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking 2-server insecurity proof with a negative answer and SOA hack ($n)" +ret=0 +$DIG $DIGOPTS r.insecure.secure.example. @10.53.0.2 soa > dig.out.ns2.test$n \ + || ret=1 +$DIG $DIGOPTS r.insecure.secure.example. @10.53.0.4 soa > dig.out.ns4.test$n \ + || ret=1 +$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 +grep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1 +# Note - this is looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +# Check that the query for a security root is successful and has ad set + +echo "I:checking security root query ($n)" +ret=0 +$DIG $DIGOPTS . @10.53.0.4 key > dig.out.ns4.test$n || ret=1 +grep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +# Check that the setting the cd bit works + +echo "I:checking cd bit on a positive answer ($n)" +ret=0 +$DIG $DIGOPTS +noauth example. soa @10.53.0.4 \ + > dig.out.ns4.test$n || ret=1 +$DIG $DIGOPTS +noauth +cdflag example. soa @10.53.0.5 \ + > dig.out.ns5.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns4.test$n dig.out.ns5.test$n || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +# Note - this is looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns5.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking cd bit on a negative answer ($n)" +ret=0 +$DIG $DIGOPTS q.example. soa @10.53.0.4 > dig.out.ns4.test$n || ret=1 +$DIG $DIGOPTS +cdflag q.example. soa @10.53.0.5 > dig.out.ns5.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns4.test$n dig.out.ns5.test$n || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +# Note - this is looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns5.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking cd bit on a query that should fail ($n)" +ret=0 +$DIG $DIGOPTS a.bogus.example. soa @10.53.0.4 \ + > dig.out.ns4.test$n || ret=1 +$DIG $DIGOPTS +cdflag a.bogus.example. soa @10.53.0.5 \ + > dig.out.ns5.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns4.test$n dig.out.ns5.test$n || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 +# Note - this is looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns5.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking cd bit on an insecurity proof ($n)" +ret=0 +$DIG $DIGOPTS +noauth a.insecure.example. soa @10.53.0.4 \ + > dig.out.ns4.test$n || ret=1 +$DIG $DIGOPTS +noauth +cdflag a.insecure.example. soa @10.53.0.5 \ + > dig.out.ns5.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns4.test$n dig.out.ns5.test$n || ret=1 +grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +# Note - these are looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns5.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking cd bit on a negative insecurity proof ($n)" +ret=0 +$DIG $DIGOPTS q.insecure.example. a @10.53.0.4 \ + > dig.out.ns4.test$n || ret=1 +$DIG $DIGOPTS +cdflag q.insecure.example. a @10.53.0.5 \ + > dig.out.ns5.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns4.test$n dig.out.ns5.test$n || ret=1 +grep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1 +# Note - these are looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns5.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking that validation of an ANY query works ($n)" +ret=0 +$DIG $DIGOPTS +noauth foo.example. any @10.53.0.2 > dig.out.ns2.test$n || ret=1 +$DIG $DIGOPTS +noauth foo.example. any @10.53.0.4 > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 +grep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +# 2 records in the zone, 1 NXT, 3 SIGs +grep "ANSWER: 6" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking that validation of a query returning a CNAME works ($n)" +ret=0 +$DIG $DIGOPTS +noauth cname1.example. txt @10.53.0.2 \ + > dig.out.ns2.test$n || ret=1 +$DIG $DIGOPTS +noauth cname1.example. txt @10.53.0.4 \ + > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 +grep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +# the CNAME & its sig, the TXT and its SIG +grep "ANSWER: 4" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking that validation of a query returning a DNAME works ($n)" +ret=0 +$DIG $DIGOPTS +noauth foo.dname1.example. txt @10.53.0.2 \ + > dig.out.ns2.test$n || ret=1 +$DIG $DIGOPTS +noauth foo.dname1.example. txt @10.53.0.4 \ + > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 +grep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +# The DNAME & its sig, the TXT and its SIG, and the synthesized CNAME. +# It would be nice to test that the CNAME is being synthesized by the +# recursive server and not cached, but I don't know how. +grep "ANSWER: 5" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking that validation of an ANY query returning a CNAME works ($n)" +ret=0 +$DIG $DIGOPTS +noauth cname2.example. any @10.53.0.2 \ + > dig.out.ns2.test$n || ret=1 +$DIG $DIGOPTS +noauth cname2.example. any @10.53.0.4 \ + > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 +grep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +# The CNAME, NXT, and their SIGs +grep "ANSWER: 4" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking that validation of an ANY query returning a DNAME works ($n)" +ret=0 +$DIG $DIGOPTS +noauth foo.dname2.example. any @10.53.0.2 \ + > dig.out.ns2.test$n || ret=1 +$DIG $DIGOPTS +noauth foo.dname2.example. any @10.53.0.4 \ + > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 +grep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking that positive validation in a privately secure zone works ($n)" +ret=0 +$DIG $DIGOPTS +noauth a.private.secure.example. a @10.53.0.2 \ + > dig.out.ns2.test$n || ret=1 +$DIG $DIGOPTS +noauth a.private.secure.example. a @10.53.0.4 \ + > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 +grep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 +# Note - this is looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking that negative validation in a privately secure zone works ($n)" +ret=0 +$DIG $DIGOPTS +noauth q.private.secure.example. a @10.53.0.2 \ + > dig.out.ns2.test$n || ret=1 +$DIG $DIGOPTS +noauth q.private.secure.example. a @10.53.0.4 \ + > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 +grep "NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1 +# Note - this is looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking that lookups succeed after disabling a algorithm works ($n)" +ret=0 +$DIG $DIGOPTS +noauth example. SOA @10.53.0.2 \ + > dig.out.ns2.test$n || ret=1 +$DIG $DIGOPTS +noauth example. SOA @10.53.0.6 \ + > dig.out.ns6.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns6.test$n || ret=1 +# Note - this is looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns6.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking privately secure to nxdomain works ($n)" +ret=0 +$DIG $DIGOPTS +noauth private2secure-nxdomain.private.secure.example. SOA @10.53.0.2 \ + > dig.out.ns2.test$n || ret=1 +$DIG $DIGOPTS +noauth private2secure-nxdomain.private.secure.example. SOA @10.53.0.4 \ + > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 +# Note - this is looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking privately secure wildcard to nxdomain works ($n)" +ret=0 +$DIG $DIGOPTS +noauth a.wild.private.secure.example. SOA @10.53.0.2 \ + > dig.out.ns2.test$n || ret=1 +$DIG $DIGOPTS +noauth a.wild.private.secure.example. SOA @10.53.0.4 \ + > dig.out.ns4.test$n || ret=1 +$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 +# Note - this is looking for failure, hence the && +grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +# +# private.secure.example is served by the same server as its +# grand parent and there is not a secure delegation from secure.example +# to private.secure.example. In addition secure.example is using a +# algorithm which the validation does not support. +# +echo "I:checking dnssec-lookaside-validation works ($n)" +ret=0 +$DIG $DIGOPTS private.secure.example. SOA @10.53.0.6 \ + > dig.out.ns6.test$n || ret=1 +grep "flags:.*ad.*QUERY" dig.out.ns6.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking that we can load a rfc2535 signed zone ($n)" +ret=0 +$DIG $DIGOPTS rfc2535.example. SOA @10.53.0.2 \ + > dig.out.ns2.test$n || ret=1 +grep "status: NOERROR" dig.out.ns2.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking that we can transfer a rfc2535 signed zone ($n)" +ret=0 +$DIG $DIGOPTS rfc2535.example. SOA @10.53.0.3 \ + > dig.out.ns3.test$n || ret=1 +grep "status: NOERROR" dig.out.ns3.test$n > /dev/null || ret=1 +n=`expr $n + 1` +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +# Run a minimal update test if possible. This is really just +# a regression test for RT #2399; more tests should be added. + +if $PERL -e 'use Net::DNS;' 2>/dev/null +then + echo "I:running DNSSEC update test" + $PERL dnssec_update_test.pl -s 10.53.0.3 -p 5300 dynamic.example. || status=1 +else + echo "I:The DNSSEC update test requires the Net::DNS library." >&2 +fi + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/forward/clean.sh b/bin/tests/system/forward/clean.sh new file mode 100644 index 0000000..b227745 --- /dev/null +++ b/bin/tests/system/forward/clean.sh @@ -0,0 +1,22 @@ +# 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. + +# $Id: clean.sh,v 1.6 2007/09/26 03:22:43 marka Exp $ + +# +# Clean up after forward tests. +# +rm -f dig.out.* +rm -f */named.memstats diff --git a/bin/tests/system/forward/ns1/example.db b/bin/tests/system/forward/ns1/example.db new file mode 100644 index 0000000..ebbc2ae --- /dev/null +++ b/bin/tests/system/forward/ns1/example.db @@ -0,0 +1,12 @@ +$TTL 300 ; 5 minutes +@ IN SOA ns root ( + 2000082401 ; serial + 1800 ; refresh (30 minutes) + 1800 ; retry (30 minutes) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.1 + +txt TXT "recursed" diff --git a/bin/tests/system/forward/ns1/named.conf b/bin/tests/system/forward/ns1/named.conf new file mode 100644 index 0000000..8c3fcfa --- /dev/null +++ b/bin/tests/system/forward/ns1/named.conf @@ -0,0 +1,61 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.11 2007/06/19 23:47:03 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; +}; + +zone "." { + type master; + file "root.db"; +}; + +zone "example1." { + type master; + file "example.db"; +}; + +zone "example2." { + type master; + file "example.db"; +}; + +zone "example3." { + type master; + file "example.db"; +}; + +zone "example4." { + type master; + file "example.db"; +}; + +zone "example5." { + type master; + file "example.db"; +}; diff --git a/bin/tests/system/forward/ns1/root.db b/bin/tests/system/forward/ns1/root.db new file mode 100644 index 0000000..e84e8fb --- /dev/null +++ b/bin/tests/system/forward/ns1/root.db @@ -0,0 +1,36 @@ +; 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. + +; $Id: root.db,v 1.4 2007/06/19 23:47:03 tbox Exp $ + +$TTL 300 +. IN SOA gson.nominum.com. a.root.servers.nil. ( + 2000042100 ; serial + 600 ; refresh + 600 ; retry + 1200 ; expire + 600 ; minimum + ) +. NS a.root-servers.nil. +a.root-servers.nil. A 10.53.0.1 + +example1 NS ns.example1 +ns.example1 A 10.53.0.1 + +example2 NS ns.example2 +ns.example2 A 10.53.0.1 + +example3 NS ns.example3 +ns.example3 A 10.53.0.1 diff --git a/bin/tests/system/forward/ns2/example.db b/bin/tests/system/forward/ns2/example.db new file mode 100644 index 0000000..3a5f46c --- /dev/null +++ b/bin/tests/system/forward/ns2/example.db @@ -0,0 +1,12 @@ +$TTL 300 ; 5 minutes +@ IN SOA ns root ( + 2000082401 ; serial + 1800 ; refresh (30 minutes) + 1800 ; retry (30 minutes) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.1 + +txt TXT "forwarded" diff --git a/bin/tests/system/forward/ns2/named.conf b/bin/tests/system/forward/ns2/named.conf new file mode 100644 index 0000000..d310bf2 --- /dev/null +++ b/bin/tests/system/forward/ns2/named.conf @@ -0,0 +1,56 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.11 2007/06/19 23:47:03 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.2; + notify-source 10.53.0.2; + transfer-source 10.53.0.2; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.2; }; + listen-on-v6 { none; }; + recursion no; +}; + +zone "." { + type hint; + file "root.db"; +}; + +zone "example1." { + type master; + file "example.db"; +}; + +zone "example2." { + type master; + file "example.db"; +}; + +zone "example3." { + type master; + file "example.db"; +}; + +zone "example4." { + type master; + file "example.db"; +}; diff --git a/bin/tests/system/forward/ns2/root.db b/bin/tests/system/forward/ns2/root.db new file mode 100644 index 0000000..e84e8fb --- /dev/null +++ b/bin/tests/system/forward/ns2/root.db @@ -0,0 +1,36 @@ +; 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. + +; $Id: root.db,v 1.4 2007/06/19 23:47:03 tbox Exp $ + +$TTL 300 +. IN SOA gson.nominum.com. a.root.servers.nil. ( + 2000042100 ; serial + 600 ; refresh + 600 ; retry + 1200 ; expire + 600 ; minimum + ) +. NS a.root-servers.nil. +a.root-servers.nil. A 10.53.0.1 + +example1 NS ns.example1 +ns.example1 A 10.53.0.1 + +example2 NS ns.example2 +ns.example2 A 10.53.0.1 + +example3 NS ns.example3 +ns.example3 A 10.53.0.1 diff --git a/bin/tests/system/forward/ns3/named.conf b/bin/tests/system/forward/ns3/named.conf new file mode 100644 index 0000000..459c349 --- /dev/null +++ b/bin/tests/system/forward/ns3/named.conf @@ -0,0 +1,56 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.11 2007/06/19 23:47:03 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.3; + notify-source 10.53.0.3; + transfer-source 10.53.0.3; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.3; }; + listen-on-v6 { none; }; + forwarders { 10.53.0.2; }; + forward first; +}; + +zone "." { + type hint; + file "root.db"; +}; + +zone "example1." { + type forward; + forward first; + forwarders { 10.53.0.2; }; +}; + +zone "example2." { + type forward; + forward first; + forwarders { }; +}; + +zone "example3." { + type forward; + forward only; + forwarders { }; +}; + diff --git a/bin/tests/system/forward/ns3/root.db b/bin/tests/system/forward/ns3/root.db new file mode 100644 index 0000000..e84e8fb --- /dev/null +++ b/bin/tests/system/forward/ns3/root.db @@ -0,0 +1,36 @@ +; 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. + +; $Id: root.db,v 1.4 2007/06/19 23:47:03 tbox Exp $ + +$TTL 300 +. IN SOA gson.nominum.com. a.root.servers.nil. ( + 2000042100 ; serial + 600 ; refresh + 600 ; retry + 1200 ; expire + 600 ; minimum + ) +. NS a.root-servers.nil. +a.root-servers.nil. A 10.53.0.1 + +example1 NS ns.example1 +ns.example1 A 10.53.0.1 + +example2 NS ns.example2 +ns.example2 A 10.53.0.1 + +example3 NS ns.example3 +ns.example3 A 10.53.0.1 diff --git a/bin/tests/system/forward/ns4/named.conf b/bin/tests/system/forward/ns4/named.conf new file mode 100644 index 0000000..f817b8a --- /dev/null +++ b/bin/tests/system/forward/ns4/named.conf @@ -0,0 +1,52 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.11 2007/06/19 23:47:03 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.4; + notify-source 10.53.0.4; + transfer-source 10.53.0.4; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.4; }; + listen-on-v6 { none; }; +}; + +zone "." { + type hint; + file "root.db"; +}; + +zone "example1." { + type forward; + forward first; + forwarders { 10.53.0.2; }; +}; + +zone "example3." { + type forward; + forwarders { 10.53.0.2; }; +}; + +zone "example5." { + type forward; + forward only; + forwarders { 10.53.0.2; }; +}; diff --git a/bin/tests/system/forward/ns4/root.db b/bin/tests/system/forward/ns4/root.db new file mode 100644 index 0000000..e84e8fb --- /dev/null +++ b/bin/tests/system/forward/ns4/root.db @@ -0,0 +1,36 @@ +; 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. + +; $Id: root.db,v 1.4 2007/06/19 23:47:03 tbox Exp $ + +$TTL 300 +. IN SOA gson.nominum.com. a.root.servers.nil. ( + 2000042100 ; serial + 600 ; refresh + 600 ; retry + 1200 ; expire + 600 ; minimum + ) +. NS a.root-servers.nil. +a.root-servers.nil. A 10.53.0.1 + +example1 NS ns.example1 +ns.example1 A 10.53.0.1 + +example2 NS ns.example2 +ns.example2 A 10.53.0.1 + +example3 NS ns.example3 +ns.example3 A 10.53.0.1 diff --git a/bin/tests/system/forward/tests.sh b/bin/tests/system/forward/tests.sh new file mode 100644 index 0000000..c3c0bf3 --- /dev/null +++ b/bin/tests/system/forward/tests.sh @@ -0,0 +1,92 @@ +# 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. + +# $Id: tests.sh,v 1.7 2007/06/19 23:47:03 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +root=10.53.0.1 +hidden=10.53.0.2 +f1=10.53.0.3 +f2=10.53.0.4 + +status=0 + +echo "I:checking that a forward zone overrides global forwarders" +ret=0 +$DIG txt.example1. txt @$hidden -p 5300 > dig.out.hidden || ret=1 +$DIG txt.example1. txt @$f1 -p 5300 > dig.out.f1 || ret=1 +$PERL ../digcomp.pl dig.out.hidden dig.out.f1 || ret=1 +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking that a forward first zone no forwarders recurses" +ret=0 +$DIG txt.example2. txt @$root -p 5300 > dig.out.root || ret=1 +$DIG txt.example2. txt @$f1 -p 5300 > dig.out.f1 || ret=1 +$PERL ../digcomp.pl dig.out.root dig.out.f1 || ret=1 +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking that a forward only zone no forwarders fails" +ret=0 +$DIG txt.example2. txt @$root -p 5300 > dig.out.root || ret=1 +$DIG txt.example2. txt @$f1 -p 5300 > dig.out.f1 || ret=1 +$PERL ../digcomp.pl dig.out.root dig.out.f1 || ret=1 +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking that global forwarders work" +ret=0 +$DIG txt.example4. txt @$hidden -p 5300 > dig.out.hidden || ret=1 +$DIG txt.example4. txt @$f1 -p 5300 > dig.out.f1 || ret=1 +$PERL ../digcomp.pl dig.out.hidden dig.out.f1 || ret=1 +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking that a forward zone works" +ret=0 +$DIG txt.example1. txt @$hidden -p 5300 > dig.out.hidden || ret=1 +$DIG txt.example1. txt @$f2 -p 5300 > dig.out.f2 || ret=1 +$PERL ../digcomp.pl dig.out.hidden dig.out.f2 || ret=1 +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking that forwarding doesn't spontaneously happen" +ret=0 +$DIG txt.example2. txt @$root -p 5300 > dig.out.root || ret=1 +$DIG txt.example2. txt @$f2 -p 5300 > dig.out.f2 || ret=1 +$PERL ../digcomp.pl dig.out.root dig.out.f2 || ret=1 +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking that a forward zone with no specified policy works" +ret=0 +$DIG txt.example3. txt @$hidden -p 5300 > dig.out.hidden || ret=1 +$DIG txt.example3. txt @$f2 -p 5300 > dig.out.f2 || ret=1 +$PERL ../digcomp.pl dig.out.hidden dig.out.f2 || ret=1 +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:checking that a forward only doesn't recurse" +ret=0 +$DIG txt.example5. txt @$f2 -p 5300 > dig.out.f2 || ret=1 +grep "SERVFAIL" dig.out.f2 > /dev/null || ret=1 +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/genzone.sh b/bin/tests/system/genzone.sh new file mode 100644 index 0000000..bea95e8 --- /dev/null +++ b/bin/tests/system/genzone.sh @@ -0,0 +1,267 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2001-2003 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. + +# $Id: genzone.sh,v 1.8 2007/06/19 23:47:00 tbox Exp $ + +# +# Set up a test zone +# +# Usage: genzone.sh master-server-number slave-server-number... +# +# e.g., "genzone.sh 2 3 4" means ns2 is the master and ns3, ns4 +# are slaves. +# + +master="$1" + +cat <<EOF +\$TTL 3600 + +@ 86400 IN SOA ns${master} hostmaster ( + 1397051952 ; "SER0" + 5 + 5 + 1814400 + 3600 ) +EOF + +for n +do + cat <<EOF +@ NS ns${n} +ns${n} A 10.53.0.${n} +EOF +done + +cat <<\EOF + +; type 1 +a01 A 0.0.0.0 +a02 A 255.255.255.255 + +; type 2 +; see NS records at top of file + +; type 3 +; md01 MD madname +; MD . + +; type 4 +; mf01 MF madname +; mf01 MF . + +; type 5 +cname01 CNAME cname-target. +cname02 CNAME cname-target +cname03 CNAME . + +; type 6 +; see SOA record at top of file + +; type 7 +mb01 MG madname +mb02 MG . + +; type 8 +mg01 MG mgmname +mg02 MG . + +; type 9 +mr01 MR mrname +mr02 MR . + +; type 10 +; NULL RRs are not allowed in master files per RFC1035. +;null01 NULL + +; type 11 +wks01 WKS 10.0.0.1 tcp telnet ftp 0 1 2 +wks02 WKS 10.0.0.1 udp domain 0 1 2 +wks03 WKS 10.0.0.2 tcp 65535 + +; type 12 +ptr01 PTR @ + +; type 13 +hinfo01 HINFO "Generic PC clone" "NetBSD-1.4" +hinfo02 HINFO PC NetBSD + +; type 14 +minfo01 MINFO rmailbx emailbx +minfo02 MINFO . . + +; type 15 +mx01 MX 10 mail +mx02 MX 10 . + +; type 16 +txt01 TXT "foo" +txt02 TXT "foo" "bar" +txt03 TXT foo +txt04 TXT foo bar +txt05 TXT "foo bar" +txt06 TXT "foo\032bar" +txt07 TXT foo\032bar +txt08 TXT "foo\010bar" +txt09 TXT foo\010bar +txt10 TXT foo\ bar +txt11 TXT "\"foo\"" +txt12 TXT \"foo\" + +; type 17 +rp01 RP mbox-dname txt-dname +rp02 RP . . + +; type 18 +afsdb01 AFSDB 0 hostname +afsdb02 AFSDB 65535 . + +; type 19 +x2501 X25 123456789 +;x2502 X25 "123456789" + +; type 20 +isdn01 ISDN "isdn-address" +isdn02 ISDN "isdn-address" "subaddress" +isdn03 ISDN isdn-address +isdn04 ISDN isdn-address subaddress + +; type 21 +rt01 RT 0 intermediate-host +rt02 RT 65535 . + +; type 22 +nsap01 NSAP ( + 0x47.0005.80.005a00.0000.0001.e133.ffffff000161.00 ) +nsap02 NSAP ( + 0x47.0005.80.005a00.0000.0001.e133.ffffff000161.00. ) +;nsap03 NSAP 0x + +; type 23 +nsap-ptr01 NSAP-PTR foo. +nsap-ptr01 NSAP-PTR . + +; type 24 +;sig01 SIG NXT 1 3 ( 3600 20000102030405 +; 19961211100908 2143 foo.nil. +; MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45I +; kskceFGgiWCn/GxHhai6VAuHAoNUz4YoU1t +; VfSCSqQYn6//11U6Nld80jEeC8aTrO+KKmCaY= ) + +; type 25 +;key01 KEY 512 ( 255 1 AQMFD5raczCJHViKtLYhWGz8hMY +; 9UGRuniJDBzC7w0aRyzWZriO6i2odGWWQVucZqKV +; sENW91IOW4vqudngPZsY3GvQ/xVA8/7pyFj6b7Esg +; a60zyGW6LFe9r8n6paHrlG5ojqf0BaqHT+8= ) + +; type 26 +px01 PX 65535 foo. bar. +px02 PX 65535 . . + +; type 27 +gpos01 GPOS -22.6882 116.8652 250.0 +gpos02 GPOS "" "" "" + +; type 29 +loc01 LOC 60 9 N 24 39 E 10 20 2000 20 +loc02 LOC 60 09 00.000 N 24 39 00.000 E 10.00m 20.00m ( + 2000.00m 20.00m ) + +; type 30 +;nxt01 NXT a.secure.nil. ( NS SOA MX RRSIG KEY LOC NXT ) +;nxt02 NXT . NXT NSAP-PTR +;nxt03 NXT . 1 +;nxt04 NXT . 127 + +; type 33 +srv01 SRV 0 0 0 . +srv02 SRV 65535 65535 65535 old-slow-box + +; type 35 +naptr01 NAPTR 0 0 "" "" "" . +naptr02 NAPTR 65535 65535 blurgh blorf blegh foo. +naptr02 NAPTR 65535 65535 "blurgh" "blorf" "blegh" foo. + +; type 36 +kx01 KX 10 kdc +kx02 KX 10 . + +; type 37 +cert01 CERT 65534 65535 254 ( + MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45I + kskceFGgiWCn/GxHhai6VAuHAoNUz4YoU1t + VfSCSqQYn6//11U6Nld80jEeC8aTrO+KKmCaY= ) +; type 38 +a601 A6 0 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff +a601 A6 64 ::ffff:ffff:ffff:ffff foo. +a601 A6 127 ::1 foo. +a601 A6 128 . + +; type 39 +dname01 DNAME dname-target. +dname02 DNAME dname-target +dname03 DNAME . + +; type 41 +; OPT is a meta-type and should never occur in master files. + +; type 46 +rrsig01 RRSIG NSEC 1 3 ( 3600 20000102030405 + 19961211100908 2143 foo.nil. + MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45I + kskceFGgiWCn/GxHhai6VAuHAoNUz4YoU1t + VfSCSqQYn6//11U6Nld80jEeC8aTrO+KKmCaY= ) + +; type 47 +nsec01 NSEC a.secure.nil. ( NS SOA MX RRSIG DNSKEY LOC NSEC ) +nsec02 NSEC . NSEC NSAP-PTR +nsec03 NSEC . TYPE1 +nsec04 NSEC . TYPE127 + +; type 48 +dnskey01 DNSKEY 512 ( 255 1 AQMFD5raczCJHViKtLYhWGz8hMY + 9UGRuniJDBzC7w0aRyzWZriO6i2odGWWQVucZqKV + sENW91IOW4vqudngPZsY3GvQ/xVA8/7pyFj6b7Esg + a60zyGW6LFe9r8n6paHrlG5ojqf0BaqHT+8= ) + +; type 249 +; TKEY is a meta-type and should never occur in master files. +; The text representation is not specified in the draft. +; This example was written based on the bind9 RR parsing code. +;tkey01 TKEY 928321914 928321915 ( +; 255 ; algorithm +; 65535 ; mode +; 0 ; error +; 3 ; key size +; aaaa ; key data +; 3 ; other size +; bbbb ; other data +; ) +;; A TKEY with empty "other data" +;tkey02 TKEY 928321914 928321915 ( +; 255 ; algorithm +; 65535 ; mode +; 0 ; error +; 3 ; key size +; aaaa ; key data +; 0 ; other size +; ; other data +; ) + +; type 255 +; TSIG is a meta-type and should never occur in master files. +EOF diff --git a/bin/tests/system/glue/clean.sh b/bin/tests/system/glue/clean.sh new file mode 100644 index 0000000..a3bc740 --- /dev/null +++ b/bin/tests/system/glue/clean.sh @@ -0,0 +1,25 @@ +#!/bin/sh +# +# 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. + +# $Id: clean.sh,v 1.9 2007/09/26 03:22:43 marka Exp $ + +# +# Clean up after glue tests. +# + +rm -f dig.out ns1/cache +rm -f */named.memstats diff --git a/bin/tests/system/glue/fi.good b/bin/tests/system/glue/fi.good new file mode 100644 index 0000000..a08bc7a --- /dev/null +++ b/bin/tests/system/glue/fi.good @@ -0,0 +1,27 @@ + +; <<>> DiG 9.0 <<>> +norec @10.53.0.1 -p 5300 foo.bar.fi. A +;; global options: printcmd +;; Got answer: +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58772 +;; flags: qr ad; QUERY: 1, ANSWER: 0, AUTHORITY: 6, ADDITIONAL: 7 + +;; QUESTION SECTION: +;foo.bar.fi. IN A + +;; AUTHORITY SECTION: +fi. 172800 IN NS NS.EU.NET. +fi. 172800 IN NS NS.TELE.fi. +fi. 172800 IN NS PRIFI.EUNET.fi. +fi. 172800 IN NS NS.UU.NET. +fi. 172800 IN NS T.NS.VERIO.NET. +fi. 172800 IN NS HYDRA.HELSINKI.fi. + +;; ADDITIONAL SECTION: +NS.TELE.fi. 172800 IN A 193.210.19.19 +NS.TELE.fi. 172800 IN A 193.210.18.18 +PRIFI.EUNET.fi. 172800 IN A 193.66.1.146 +NS.UU.NET. 172800 IN A 137.39.1.3 +T.NS.VERIO.NET. 172800 IN A 192.67.14.16 +HYDRA.HELSINKI.fi. 172800 IN A 128.214.4.29 +NS.EU.NET. 172800 IN A 192.16.202.11 + diff --git a/bin/tests/system/glue/noglue.good b/bin/tests/system/glue/noglue.good new file mode 100644 index 0000000..22eca7b --- /dev/null +++ b/bin/tests/system/glue/noglue.good @@ -0,0 +1,14 @@ + +; <<>> DiG 9.0 <<>> @10.53.0.1 -p 5300 example.net a +;; global options: printcmd +;; Got answer: +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29409 +;; flags: qr rd ad; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 0 + +;; QUESTION SECTION: +;example.net. IN A + +;; AUTHORITY SECTION: +example.net. 300 IN NS ns2.example. +example.net. 300 IN NS ns1.example. + diff --git a/bin/tests/system/glue/ns1/cache.in b/bin/tests/system/glue/ns1/cache.in new file mode 100644 index 0000000..4ccd206 --- /dev/null +++ b/bin/tests/system/glue/ns1/cache.in @@ -0,0 +1,23 @@ +; 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. + +; $Id: cache.in,v 1.4 2007/06/19 23:47:03 tbox Exp $ + +; Preloaded cache data for glue test + +$TTL 86400 +ns.zz. 3600 IN A 10.0.0.1 +ns.zz. IN AAAA 10::1 +ns.zz. IN A6 0 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff diff --git a/bin/tests/system/glue/ns1/mil.db b/bin/tests/system/glue/ns1/mil.db new file mode 100644 index 0000000..6e90da8 --- /dev/null +++ b/bin/tests/system/glue/ns1/mil.db @@ -0,0 +1,31 @@ +; 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. + +; $Id: mil.db,v 1.8 2007/06/19 23:47:03 tbox Exp $ + +$ORIGIN mil. +$TTL 300 +@ IN SOA gson.nominum.com. a.root.servers.nil. ( + 2000042100 ; serial + 600 ; refresh + 600 ; retry + 1200 ; expire + 600 ; minimum + ) +@ NS a.root-servers.nil. + +ARL.MIL. 172800 IN NS NS1.ARL.MIL. +NS1.arl.mil. 172800 IN A 128.63.16.4 + diff --git a/bin/tests/system/glue/ns1/named.conf b/bin/tests/system/glue/ns1/named.conf new file mode 100644 index 0000000..00a740f --- /dev/null +++ b/bin/tests/system/glue/ns1/named.conf @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2004, 2005, 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. + */ + +/* $Id: named.conf,v 1.15 2007/06/19 23:47:03 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify no; + cache-file "cache"; + check-integrity no; +}; + +zone "." { + type master; + file "root.db"; +}; + +zone "root-servers.nil" { + type master; + file "root-servers.nil.db"; +}; +zone "net" { + type master; + file "net.db"; +}; + +zone "mil" { + type master; + file "mil.db"; +}; diff --git a/bin/tests/system/glue/ns1/net.db b/bin/tests/system/glue/ns1/net.db new file mode 100644 index 0000000..e0e718d --- /dev/null +++ b/bin/tests/system/glue/ns1/net.db @@ -0,0 +1,40 @@ +; 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. + +; $Id: net.db,v 1.8 2007/06/19 23:47:03 tbox Exp $ + +$ORIGIN net. +$TTL 300 +@ IN SOA gson.nominum.com. a.root.servers.nil. ( + 2000042100 ; serial + 600 ; refresh + 600 ; retry + 1200 ; expire + 600 ; minimum + ) +@ NS a.root-servers.nil. + +; FI. authoritative servers, for the FI. glue test. +uu.net. NS ns.uu.net. +NS.UU.NET. 172800 IN A 137.39.1.3 +eu.net. NS ns.eu.net. +NS.EU.NET. 172800 IN A 192.16.202.11 + +; Referral outside of server authority, but with glue records present. +; Don't hand out the glue. +example.net. NS ns1.example. +example.net. NS ns2.example. +ns1.example. 172800 IN A 1.1.1.1 +ns2.example. 172800 IN A 2.2.2.2 diff --git a/bin/tests/system/glue/ns1/root-servers.nil.db b/bin/tests/system/glue/ns1/root-servers.nil.db new file mode 100644 index 0000000..6c4c0c6 --- /dev/null +++ b/bin/tests/system/glue/ns1/root-servers.nil.db @@ -0,0 +1,31 @@ +; 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. + +; $Id: root-servers.nil.db,v 1.7 2007/06/19 23:47:03 tbox Exp $ + +$TTL 300 +@ IN SOA ns hostmaster ( + 1 + 3600 + 1800 + 1814400 + 3600 + ) + NS a +a A 10.53.0.1 +b A 10.53.0.2 + + + diff --git a/bin/tests/system/glue/ns1/root.db b/bin/tests/system/glue/ns1/root.db new file mode 100644 index 0000000..679c432 --- /dev/null +++ b/bin/tests/system/glue/ns1/root.db @@ -0,0 +1,76 @@ +; 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. + +; $Id: root.db,v 1.7 2007/06/19 23:47:03 tbox Exp $ + +$TTL 300 +. IN SOA gson.nominum.com. a.root.servers.nil. ( + 2000042100 ; serial + 600 ; refresh + 600 ; retry + 1200 ; expire + 600 ; minimum + ) +. NS a.root-servers.nil. + +root-servers.nil. NS a.root-servers.nil. +a.root-servers.nil. A 10.53.0.1 + +; Delegate some domains that contain name servers for the sample +; ccTLDs below. +net. 172800 IN NS a.root-servers.nil. +mil. 172800 IN NS a.root-servers.nil. +se. 172800 IN NS ns.uu.net. + +; +; A sample ccTLD +; +fi. 172800 IN NS NS.TELE.fi. +fi. 172800 IN NS PRIFI.EUNET.fi. +fi. 172800 IN NS NS.UU.NET. +fi. 172800 IN NS T.NS.VERIO.NET. +fi. 172800 IN NS HYDRA.HELSINKI.fi. +fi. 172800 IN NS NS.EU.NET. +NS.TELE.fi. 172800 IN A 193.210.18.18 +NS.TELE.fi. 172800 IN A 193.210.19.19 +PRIFI.EUNET.fi. 172800 IN A 193.66.1.146 +NS.UU.NET. 172800 IN A 137.39.1.3 +T.NS.VERIO.NET. 172800 IN A 192.67.14.16 +HYDRA.HELSINKI.fi. 172800 IN A 128.214.4.29 +NS.EU.NET. 172800 IN A 192.16.202.11 + +; +; Another sample ccTLD +; +is. 172800 IN NS ISGATE.is. +is. 172800 IN NS NISC.JVNC.NET. +is. 172800 IN NS NS.EU.NET. +is. 172800 IN NS SPARKY.ARL.MIL. +is. 172800 IN NS SUNIC.SUNET.SE. +ISGATE.is. 172800 IN A 193.4.58.51 +NISC.JVNC.NET. 172800 IN A 128.121.50.7 +NS.EU.NET. 172800 IN A 192.16.202.11 +SPARKY.ARL.MIL. 172800 IN A 128.63.58.18 +SUNIC.SUNET.SE. 172800 IN A 192.36.125.2 + +; +; A hypothetical ccTLD where we are authoritative for the NS glue. +; +xx. 172800 IN NS b.root-servers.nil. + +; +; A hypothetical ccTLD where we have cached NS glue. +; +yy. 172800 IN NS ns.zz. diff --git a/bin/tests/system/glue/setup.sh b/bin/tests/system/glue/setup.sh new file mode 100644 index 0000000..2dbbe03 --- /dev/null +++ b/bin/tests/system/glue/setup.sh @@ -0,0 +1,20 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 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. + +# $Id: setup.sh,v 1.6 2007/06/19 23:47:03 tbox Exp $ + +cd ns1 && cp -f cache.in cache diff --git a/bin/tests/system/glue/tests.sh b/bin/tests/system/glue/tests.sh new file mode 100644 index 0000000..3ecf701 --- /dev/null +++ b/bin/tests/system/glue/tests.sh @@ -0,0 +1,46 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2000, 2001, 2003 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. + +# $Id: tests.sh,v 1.9 2007/06/19 23:47:03 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +# +# Do glue tests. +# + +status=0 + +echo "I:testing that a ccTLD referral gets a full glue set from the root zone" +$DIG +norec @10.53.0.1 -p 5300 foo.bar.fi. A >dig.out || status=1 +$PERL ../digcomp.pl fi.good dig.out || status=1 + +echo "I:testing that we find glue A RRs we are authoritative for" +$DIG +norec @10.53.0.1 -p 5300 foo.bar.xx. a >dig.out || status=1 +$PERL ../digcomp.pl xx.good dig.out || status=1 + +echo "I:testing that we find glue A/AAAA RRs in the cache" +$DIG +norec @10.53.0.1 -p 5300 foo.bar.yy. a >dig.out || status=1 +$PERL ../digcomp.pl yy.good dig.out || status=1 + +echo "I:testing that we don't find out-of-zone glue" +$DIG +norec @10.53.0.1 -p 5300 example.net. a > dig.out || status=1 +$PERL ../digcomp.pl noglue.good dig.out || status=1 + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/glue/xx.good b/bin/tests/system/glue/xx.good new file mode 100644 index 0000000..19ae1d7 --- /dev/null +++ b/bin/tests/system/glue/xx.good @@ -0,0 +1,16 @@ + +; <<>> DiG 9.0 <<>> +norec @10.53.0.1 -p 5300 foo.bar.xx. a +;; global options: printcmd +;; Got answer: +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41239 +;; flags: qr ad; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 + +;; QUESTION SECTION: +;foo.bar.xx. IN A + +;; AUTHORITY SECTION: +xx. 172800 IN NS b.root-servers.nil. + +;; ADDITIONAL SECTION: +b.root-servers.nil. 300 IN A 10.53.0.2 + diff --git a/bin/tests/system/glue/yy.good b/bin/tests/system/glue/yy.good new file mode 100644 index 0000000..fd97e3d --- /dev/null +++ b/bin/tests/system/glue/yy.good @@ -0,0 +1,17 @@ + +; <<>> DiG 9.0 <<>> +norec @10.53.0.1 -p 5300 foo.bar.yy. a +;; global options: printcmd +;; Got answer: +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6172 +;; flags: qr ad; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 3 + +;; QUESTION SECTION: +;foo.bar.yy. IN A + +;; AUTHORITY SECTION: +yy. 172800 IN NS ns.zz. + +;; ADDITIONAL SECTION: +ns.zz. 3463 IN A 10.0.0.1 +ns.zz. 86263 IN AAAA 10::1 + diff --git a/bin/tests/system/ifconfig.sh b/bin/tests/system/ifconfig.sh new file mode 100755 index 0000000..779d6f9 --- /dev/null +++ b/bin/tests/system/ifconfig.sh @@ -0,0 +1,189 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2000-2003 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. + +# $Id: ifconfig.sh,v 1.55 2008/09/24 02:46:21 marka Exp $ + +# +# Set up interface aliases for bind9 system tests. +# + +config_guess="" +for f in ./config.guess ../../../config.guess +do + if test -f $f + then + config_guess=$f + fi +done + +if test "X$config_guess" = "X" +then + echo <<EOF >&2 +$0: must be run from the top level source directory or the +bin/tests/system directory +EOF + exit 1 +fi + +# If running on hp-ux, don't even try to run config.guess. +# It will try to create a temporary file in the current directory, +# which fails when running as root with the current directory +# on a NFS mounted disk. + +case `uname -a` in + *HP-UX*) sys=hpux ;; + *) sys=`sh $config_guess` ;; +esac + +case "$2" in +[0-9]|[1-9][0-9]|[1-9][0-9][0-9]) base=$2;; +*) base="" +esac + +case "$1" in + + start|up) + for ns in 1 2 3 4 5 6 7 + do + if test -n "$base" + then + int=`expr $ns + $base - 1` + else + int=$ns + fi + case "$sys" in + *-pc-solaris2.5.1) + ifconfig lo0:$int 10.53.0.$ns netmask 0xffffffff up + ;; + *-sun-solaris2.[6-7]) + ifconfig lo0:$int 10.53.0.$ns netmask 0xffffffff up + ;; + *-*-solaris2.[8-9]|*-*-solaris2.1[0-9]) + /sbin/ifconfig lo0:$int plumb + /sbin/ifconfig lo0:$int 10.53.0.$ns up + ;; + *-*-linux*) + ifconfig lo:$int 10.53.0.$ns up netmask 255.255.255.0 + ;; + *-unknown-freebsd*) + ifconfig lo0 10.53.0.$ns alias netmask 0xffffffff + ;; + *-unknown-netbsd*) + ifconfig lo0 10.53.0.$ns alias netmask 255.255.255.0 + ;; + *-unknown-openbsd*) + ifconfig lo0 10.53.0.$ns alias netmask 255.255.255.0 + ;; + *-*-bsdi[3-5].*) + ifconfig lo0 add 10.53.0.$ns netmask 255.255.255.0 + ;; + *-dec-osf[4-5].*) + ifconfig lo0 alias 10.53.0.$ns + ;; + *-sgi-irix6.*) + ifconfig lo0 alias 10.53.0.$ns + ;; + *-*-sysv5uw7*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*) + ifconfig lo0 10.53.0.$ns alias netmask 0xffffffff + ;; + *-ibm-aix4.*|*-ibm-aix5.*) + ifconfig lo0 alias 10.53.0.$ns + ;; + hpux) + ifconfig lo0:$int 10.53.0.$ns up + ;; + *-sco3.2v*) + ifconfig lo0 alias 10.53.0.$ns + ;; + *-darwin*) + ifconfig lo0 alias 10.53.0.$ns + ;; + *) + echo "Don't know how to set up interface. Giving up." + exit 1 + esac + done + ;; + + stop|down) + for ns in 7 6 5 4 3 2 1 + do + if test -n "$base" + then + int=`expr $ns + $base - 1` + else + int=$ns + fi + case "$sys" in + *-pc-solaris2.5.1) + ifconfig lo0:$int 0.0.0.0 down + ;; + *-sun-solaris2.[6-7]) + ifconfig lo0:$int 10.53.0.$ns down + ;; + *-*-solaris2.[8-9]|*-*-solaris2.1[0-9]) + ifconfig lo0:$int 10.53.0.$ns down + ifconfig lo0:$int 10.53.0.$ns unplumb + ;; + *-*-linux*) + ifconfig lo:$int 10.53.0.$ns down + ;; + *-unknown-freebsd*) + ifconfig lo0 10.53.0.$ns delete + ;; + *-unknown-netbsd*) + ifconfig lo0 10.53.0.$ns delete + ;; + *-unknown-openbsd*) + ifconfig lo0 10.53.0.$ns delete + ;; + *-*-bsdi[3-5].*) + ifconfig lo0 remove 10.53.0.$ns + ;; + *-dec-osf[4-5].*) + ifconfig lo0 -alias 10.53.0.$ns + ;; + *-sgi-irix6.*) + ifconfig lo0 -alias 10.53.0.$ns + ;; + *-*-sysv5uw7*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*) + ifconfig lo0 -alias 10.53.0.$ns + ;; + *-ibm-aix4.*|*-ibm-aix5.*) + ifconfig lo0 delete 10.53.0.$ns + ;; + hpux) + ifconfig lo0:$int 10.53.0.$ns down + ;; + *-sco3.2v*) + ifconfig lo0 -alias 10.53.0.$ns + ;; + *darwin*) + ifconfig lo0 -alias 10.53.0.$ns + ;; + *) + echo "Don't know how to destroy interface. Giving up." + exit 1 + esac + done + + ;; + + *) + echo "Usage: $0 { up | down } [base]" + exit 1 +esac diff --git a/bin/tests/system/ixfr/ans2/ans.pl b/bin/tests/system/ixfr/ans2/ans.pl new file mode 100644 index 0000000..ef67955 --- /dev/null +++ b/bin/tests/system/ixfr/ans2/ans.pl @@ -0,0 +1,157 @@ +#!/usr/bin/perl +# +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 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. + +# $Id: ans.pl,v 1.6 2007/09/24 04:13:25 marka Exp $ + +# +# This is the name server from hell. It provides canned +# responses based on pattern matching the queries, and +# can be reprogrammed on-the-fly over a TCP connection. +# +# The server listens for control connections on port 5301. +# A control connection is a TCP stream of lines like +# +# /pattern/ +# name ttl type rdata +# name ttl type rdata +# ... +# /pattern/ +# name ttl type rdata +# name ttl type rdata +# ... +# +# There can be any number of patterns, each associated +# with any number of response RRs. Each pattern is a +# Perl regular expression. +# +# Each incoming query is converted into a string of the form +# "qname qtype" (the printable query domain name, space, +# printable query type) and matched against each pattern. +# +# The first pattern matching the query is selected, and +# the RR following the pattern line are sent in the +# answer section of the response. +# +# Each new control connection causes the current set of +# patterns and responses to be cleared before adding new +# ones. +# +# The server handles UDP and TCP queries. Zone transfer +# responses work, but must fit in a single 64 k message. +# + +use IO::File; +use IO::Socket; +use Net::DNS; +use Net::DNS::Packet; + +my $ctlsock = IO::Socket::INET->new(LocalAddr => "10.53.0.2", + LocalPort => 5301, Proto => "tcp", Listen => 5, Reuse => 1) or die "$!"; + +my $udpsock = IO::Socket::INET->new(LocalAddr => "10.53.0.2", + LocalPort => 5300, Proto => "udp", Reuse => 1) or die "$!"; + +my $tcpsock = IO::Socket::INET->new(LocalAddr => "10.53.0.2", + LocalPort => 5300, Proto => "tcp", Listen => 5, Reuse => 1) or die "$!"; + +my $pidf = new IO::File "ans.pid", "w" or die "cannot open pid file: $!"; +print $pidf "$$\n" or die "cannot write pid file: $!"; +$pidf->close or die "cannot close pid file: $!";; +sub rmpid { unlink "ans.pid"; exit 1; }; + +$SIG{INT} = \&rmpid; +$SIG{TERM} = \&rmpid; + +my @answers = (); + +sub handle { + my ($buf) = @_; + + my ($packet, $err) = new Net::DNS::Packet(\$buf, 0); + $err and die $err; + + $packet->header->qr(1); + $packet->header->aa(1); + + my @questions = $packet->question; + my $qname = $questions[0]->qname; + my $qtype = $questions[0]->qtype; + + my $r; + foreach $r (@rules) { + my $pattern = $r->{pattern}; + warn "match $qname $qtype == $pattern"; + if ("$qname $qtype" =~ /$pattern/) { + my $a; + foreach $a (@{$r->{answer}}) { + $packet->push("answer", $a); + } + last; + } + } + + # $packet->print; + + return $packet->data; +} + +for (;;) { + $rin = ''; + vec($rin, fileno($ctlsock), 1) = 1; + vec($rin, fileno($tcpsock), 1) = 1; + vec($rin, fileno($udpsock), 1) = 1; + + select($rout = $rin, undef, undef, undef); + + if (vec($rout, fileno($ctlsock), 1)) { + warn "ctl conn"; + my $conn = $ctlsock->accept; + @rules = (); + while (my $line = $conn->getline) { + chomp $line; + if ($line =~ m!^/(.*)/$!) { + $rule = { pattern => $1, answer => [] }; + push(@rules, $rule); + } else { + push(@{$rule->{answer}}, + new Net::DNS::RR($line)); + } + + } + $conn->close; + } elsif (vec($rout, fileno($udpsock), 1)) { + printf "UDP request\n"; + $udpsock->recv($buf, 512); + $response = handle($buf); + $udpsock->send($response); + } elsif (vec($rout, fileno($tcpsock), 1)) { + my $conn = $tcpsock->accept; + for (;;) { + printf "TCP request\n"; + my $n = $conn->sysread($lenbuf, 2); + last unless $n == 2; + my $len = unpack("n", $lenbuf); + $n = $conn->sysread($buf, $len); + last unless $n == $len; + $response = handle($buf); + $len = length($response); + $n = $conn->syswrite(pack("n", $len), 2); + $n = $conn->syswrite($response, $len); + } + $conn->close; + } +} diff --git a/bin/tests/system/ixfr/clean.sh b/bin/tests/system/ixfr/clean.sh new file mode 100644 index 0000000..530f458 --- /dev/null +++ b/bin/tests/system/ixfr/clean.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 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. + +# $Id: clean.sh,v 1.6 2007/09/26 03:22:43 marka Exp $ + +rm -f ns1/named.conf ns1/myftp.db +rm -f */named.memstats diff --git a/bin/tests/system/ixfr/prereq.sh b/bin/tests/system/ixfr/prereq.sh new file mode 100644 index 0000000..aaf349b --- /dev/null +++ b/bin/tests/system/ixfr/prereq.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 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. + +# $Id: prereq.sh,v 1.5 2007/06/19 23:47:03 tbox Exp $ + +if $PERL -e 'use Net::DNS;' 2>/dev/null +then + : +else + echo "I:This test requires the Net::DNS library." >&2 + exit 1 +fi diff --git a/bin/tests/system/ixfr/setup.sh b/bin/tests/system/ixfr/setup.sh new file mode 100644 index 0000000..6e5b8e4 --- /dev/null +++ b/bin/tests/system/ixfr/setup.sh @@ -0,0 +1,43 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 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. + +# $Id: setup.sh,v 1.4 2007/06/19 23:47:03 tbox Exp $ + +rm -f ns1/*.db ns1/*.jnl + +cat <<EOF >ns1/named.conf +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify yes; +}; + +key rndc_key { + secret "1234abcd8765"; + algorithm hmac-md5; +}; + +controls { + inet 10.53.0.1 port 9953 allow { any; } keys { rndc_key; }; +}; +EOF diff --git a/bin/tests/system/ixfr/tests.sh b/bin/tests/system/ixfr/tests.sh new file mode 100644 index 0000000..109f01e --- /dev/null +++ b/bin/tests/system/ixfr/tests.sh @@ -0,0 +1,132 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 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. + +# $Id: tests.sh,v 1.5 2007/06/19 23:47:03 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +status=0 + +DIGOPTS="+tcp +noadd +nosea +nostat +noquest +nocomm +nocmd" +DIGCMD="$DIG $DIGOPTS @10.53.0.1 -p 5300" +SENDCMD="$PERL ../send.pl 10.53.0.2 5301" +RNDCCMD="$RNDC -s 10.53.0.1 -p 9953 -c ../common/rndc.conf" + +echo "I:testing initial AXFR" + +$SENDCMD <<EOF +/SOA/ +nil. 300 SOA ns.nil. root.nil. 1 300 300 604800 300 +/AXFR/ +nil. 300 SOA ns.nil. root.nil. 1 300 300 604800 300 +nil. 300 NS ns.nil. +nil. 300 TXT "initial AXFR" +a.nil. 60 A 10.0.0.61 +b.nil. 60 A 10.0.0.62 +nil. 300 SOA ns.nil. root.nil. 1 300 300 604800 300 +EOF + +sleep 1 + +# Initially, ns1 is not authoritative for anything (see setup.sh). +# Now that ans is up and running with the right data, we make it +# a slave for nil. + +cat <<EOF >>ns1/named.conf +zone "nil" { + type slave; + file "myftp.db"; + masters { 10.53.0.2; }; +}; +EOF + +$RNDCCMD reload + +sleep 2 + +$DIGCMD nil. TXT | grep 'initial AXFR' >/dev/null || { + echo "I:failed" + status=1 +} + +echo "I:testing successful IXFR" + +# We change the IP address of a.nil., and the TXT record at the apex. +# Then we do a SOA-only update. + +$SENDCMD <<EOF +/SOA/ +nil. 300 SOA ns.nil. root.nil. 3 300 300 604800 300 +/IXFR/ +nil. 300 SOA ns.nil. root.nil. 3 300 300 604800 300 +nil. 300 SOA ns.nil. root.nil. 1 300 300 604800 300 +a.nil. 60 A 10.0.0.61 +nil. 300 TXT "initial AXFR" +nil. 300 SOA ns.nil. root.nil. 2 300 300 604800 300 +nil. 300 TXT "successful IXFR" +a.nil. 60 A 10.0.1.61 +nil. 300 SOA ns.nil. root.nil. 2 300 300 604800 300 +nil. 300 SOA ns.nil. root.nil. 3 300 300 604800 300 +nil. 300 SOA ns.nil. root.nil. 3 300 300 604800 300 +EOF + +sleep 1 + +$RNDCCMD refresh nil + +sleep 2 + +$DIGCMD nil. TXT | grep 'successful IXFR' >/dev/null || { + echo "I:failed" + status=1 +} + +echo "I:testing AXFR fallback after IXFR failure" + +# Provide a broken IXFR response and a working fallback AXFR response + +$SENDCMD <<EOF +/SOA/ +nil. 300 SOA ns.nil. root.nil. 4 300 300 604800 300 +/IXFR/ +nil. 300 SOA ns.nil. root.nil. 4 300 300 604800 300 +nil. 300 SOA ns.nil. root.nil. 3 300 300 604800 300 +nil. 300 TXT "delete-nonexistent-txt-record" +nil. 300 SOA ns.nil. root.nil. 4 300 300 604800 300 +nil. 300 TXT "this-txt-record-would-be-added" +nil. 300 SOA ns.nil. root.nil. 4 300 300 604800 300 +/AXFR/ +nil. 300 SOA ns.nil. root.nil. 3 300 300 604800 300 +nil. 300 NS ns.nil. +nil. 300 TXT "fallback AXFR" +nil. 300 SOA ns.nil. root.nil. 3 300 300 604800 300 +EOF + +sleep 1 + +$RNDCCMD refresh nil + +sleep 2 + +$DIGCMD nil. TXT | grep 'fallback AXFR' >/dev/null || { + echo "I:failed" + status=1 +} + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/limits/clean.sh b/bin/tests/system/limits/clean.sh new file mode 100644 index 0000000..bf22607 --- /dev/null +++ b/bin/tests/system/limits/clean.sh @@ -0,0 +1,24 @@ +#!/bin/sh +# +# 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. + +# $Id: clean.sh,v 1.11 2007/09/26 03:22:44 marka Exp $ + +# +# Clean up after limits tests. +# +rm -f dig.out.* +rm -f */named.memstats diff --git a/bin/tests/system/limits/knowngood.dig.out.1000 b/bin/tests/system/limits/knowngood.dig.out.1000 new file mode 100644 index 0000000..3b7e01a --- /dev/null +++ b/bin/tests/system/limits/knowngood.dig.out.1000 @@ -0,0 +1,1023 @@ + +; <<>> DiG 8.2 <<>> 1000.example. @10.53.0.1 a -p +; (1 server found) +;; res options: init recurs defnam dnsrch +;; got answer: +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6 +;; flags: qr aa rd ad; QUERY: 1, ANSWER: 1000, AUTHORITY: 1, ADDITIONAL: 1 +;; QUERY SECTION: +;; 1000.example, type = A, class = IN + +;; ANSWER SECTION: +1000.example. 5M IN A 10.0.0.0 +1000.example. 5M IN A 10.0.0.1 +1000.example. 5M IN A 10.0.0.2 +1000.example. 5M IN A 10.0.0.3 +1000.example. 5M IN A 10.0.0.4 +1000.example. 5M IN A 10.0.0.5 +1000.example. 5M IN A 10.0.0.6 +1000.example. 5M IN A 10.0.0.7 +1000.example. 5M IN A 10.0.0.8 +1000.example. 5M IN A 10.0.0.9 +1000.example. 5M IN A 10.0.0.10 +1000.example. 5M IN A 10.0.0.11 +1000.example. 5M IN A 10.0.0.12 +1000.example. 5M IN A 10.0.0.13 +1000.example. 5M IN A 10.0.0.14 +1000.example. 5M IN A 10.0.0.15 +1000.example. 5M IN A 10.0.0.16 +1000.example. 5M IN A 10.0.0.17 +1000.example. 5M IN A 10.0.0.18 +1000.example. 5M IN A 10.0.0.19 +1000.example. 5M IN A 10.0.0.20 +1000.example. 5M IN A 10.0.0.21 +1000.example. 5M IN A 10.0.0.22 +1000.example. 5M IN A 10.0.0.23 +1000.example. 5M IN A 10.0.0.24 +1000.example. 5M IN A 10.0.0.25 +1000.example. 5M IN A 10.0.0.26 +1000.example. 5M IN A 10.0.0.27 +1000.example. 5M IN A 10.0.0.28 +1000.example. 5M IN A 10.0.0.29 +1000.example. 5M IN A 10.0.0.30 +1000.example. 5M IN A 10.0.0.31 +1000.example. 5M IN A 10.0.0.32 +1000.example. 5M IN A 10.0.0.33 +1000.example. 5M IN A 10.0.0.34 +1000.example. 5M IN A 10.0.0.35 +1000.example. 5M IN A 10.0.0.36 +1000.example. 5M IN A 10.0.0.37 +1000.example. 5M IN A 10.0.0.38 +1000.example. 5M IN A 10.0.0.39 +1000.example. 5M IN A 10.0.0.40 +1000.example. 5M IN A 10.0.0.41 +1000.example. 5M IN A 10.0.0.42 +1000.example. 5M IN A 10.0.0.43 +1000.example. 5M IN A 10.0.0.44 +1000.example. 5M IN A 10.0.0.45 +1000.example. 5M IN A 10.0.0.46 +1000.example. 5M IN A 10.0.0.47 +1000.example. 5M IN A 10.0.0.48 +1000.example. 5M IN A 10.0.0.49 +1000.example. 5M IN A 10.0.0.50 +1000.example. 5M IN A 10.0.0.51 +1000.example. 5M IN A 10.0.0.52 +1000.example. 5M IN A 10.0.0.53 +1000.example. 5M IN A 10.0.0.54 +1000.example. 5M IN A 10.0.0.55 +1000.example. 5M IN A 10.0.0.56 +1000.example. 5M IN A 10.0.0.57 +1000.example. 5M IN A 10.0.0.58 +1000.example. 5M IN A 10.0.0.59 +1000.example. 5M IN A 10.0.0.60 +1000.example. 5M IN A 10.0.0.61 +1000.example. 5M IN A 10.0.0.62 +1000.example. 5M IN A 10.0.0.63 +1000.example. 5M IN A 10.0.0.64 +1000.example. 5M IN A 10.0.0.65 +1000.example. 5M IN A 10.0.0.66 +1000.example. 5M IN A 10.0.0.67 +1000.example. 5M IN A 10.0.0.68 +1000.example. 5M IN A 10.0.0.69 +1000.example. 5M IN A 10.0.0.70 +1000.example. 5M IN A 10.0.0.71 +1000.example. 5M IN A 10.0.0.72 +1000.example. 5M IN A 10.0.0.73 +1000.example. 5M IN A 10.0.0.74 +1000.example. 5M IN A 10.0.0.75 +1000.example. 5M IN A 10.0.0.76 +1000.example. 5M IN A 10.0.0.77 +1000.example. 5M IN A 10.0.0.78 +1000.example. 5M IN A 10.0.0.79 +1000.example. 5M IN A 10.0.0.80 +1000.example. 5M IN A 10.0.0.81 +1000.example. 5M IN A 10.0.0.82 +1000.example. 5M IN A 10.0.0.83 +1000.example. 5M IN A 10.0.0.84 +1000.example. 5M IN A 10.0.0.85 +1000.example. 5M IN A 10.0.0.86 +1000.example. 5M IN A 10.0.0.87 +1000.example. 5M IN A 10.0.0.88 +1000.example. 5M IN A 10.0.0.89 +1000.example. 5M IN A 10.0.0.90 +1000.example. 5M IN A 10.0.0.91 +1000.example. 5M IN A 10.0.0.92 +1000.example. 5M IN A 10.0.0.93 +1000.example. 5M IN A 10.0.0.94 +1000.example. 5M IN A 10.0.0.95 +1000.example. 5M IN A 10.0.0.96 +1000.example. 5M IN A 10.0.0.97 +1000.example. 5M IN A 10.0.0.98 +1000.example. 5M IN A 10.0.0.99 +1000.example. 5M IN A 10.0.0.100 +1000.example. 5M IN A 10.0.0.101 +1000.example. 5M IN A 10.0.0.102 +1000.example. 5M IN A 10.0.0.103 +1000.example. 5M IN A 10.0.0.104 +1000.example. 5M IN A 10.0.0.105 +1000.example. 5M IN A 10.0.0.106 +1000.example. 5M IN A 10.0.0.107 +1000.example. 5M IN A 10.0.0.108 +1000.example. 5M IN A 10.0.0.109 +1000.example. 5M IN A 10.0.0.110 +1000.example. 5M IN A 10.0.0.111 +1000.example. 5M IN A 10.0.0.112 +1000.example. 5M IN A 10.0.0.113 +1000.example. 5M IN A 10.0.0.114 +1000.example. 5M IN A 10.0.0.115 +1000.example. 5M IN A 10.0.0.116 +1000.example. 5M IN A 10.0.0.117 +1000.example. 5M IN A 10.0.0.118 +1000.example. 5M IN A 10.0.0.119 +1000.example. 5M IN A 10.0.0.120 +1000.example. 5M IN A 10.0.0.121 +1000.example. 5M IN A 10.0.0.122 +1000.example. 5M IN A 10.0.0.123 +1000.example. 5M IN A 10.0.0.124 +1000.example. 5M IN A 10.0.0.125 +1000.example. 5M IN A 10.0.0.126 +1000.example. 5M IN A 10.0.0.127 +1000.example. 5M IN A 10.0.0.128 +1000.example. 5M IN A 10.0.0.129 +1000.example. 5M IN A 10.0.0.130 +1000.example. 5M IN A 10.0.0.131 +1000.example. 5M IN A 10.0.0.132 +1000.example. 5M IN A 10.0.0.133 +1000.example. 5M IN A 10.0.0.134 +1000.example. 5M IN A 10.0.0.135 +1000.example. 5M IN A 10.0.0.136 +1000.example. 5M IN A 10.0.0.137 +1000.example. 5M IN A 10.0.0.138 +1000.example. 5M IN A 10.0.0.139 +1000.example. 5M IN A 10.0.0.140 +1000.example. 5M IN A 10.0.0.141 +1000.example. 5M IN A 10.0.0.142 +1000.example. 5M IN A 10.0.0.143 +1000.example. 5M IN A 10.0.0.144 +1000.example. 5M IN A 10.0.0.145 +1000.example. 5M IN A 10.0.0.146 +1000.example. 5M IN A 10.0.0.147 +1000.example. 5M IN A 10.0.0.148 +1000.example. 5M IN A 10.0.0.149 +1000.example. 5M IN A 10.0.0.150 +1000.example. 5M IN A 10.0.0.151 +1000.example. 5M IN A 10.0.0.152 +1000.example. 5M IN A 10.0.0.153 +1000.example. 5M IN A 10.0.0.154 +1000.example. 5M IN A 10.0.0.155 +1000.example. 5M IN A 10.0.0.156 +1000.example. 5M IN A 10.0.0.157 +1000.example. 5M IN A 10.0.0.158 +1000.example. 5M IN A 10.0.0.159 +1000.example. 5M IN A 10.0.0.160 +1000.example. 5M IN A 10.0.0.161 +1000.example. 5M IN A 10.0.0.162 +1000.example. 5M IN A 10.0.0.163 +1000.example. 5M IN A 10.0.0.164 +1000.example. 5M IN A 10.0.0.165 +1000.example. 5M IN A 10.0.0.166 +1000.example. 5M IN A 10.0.0.167 +1000.example. 5M IN A 10.0.0.168 +1000.example. 5M IN A 10.0.0.169 +1000.example. 5M IN A 10.0.0.170 +1000.example. 5M IN A 10.0.0.171 +1000.example. 5M IN A 10.0.0.172 +1000.example. 5M IN A 10.0.0.173 +1000.example. 5M IN A 10.0.0.174 +1000.example. 5M IN A 10.0.0.175 +1000.example. 5M IN A 10.0.0.176 +1000.example. 5M IN A 10.0.0.177 +1000.example. 5M IN A 10.0.0.178 +1000.example. 5M IN A 10.0.0.179 +1000.example. 5M IN A 10.0.0.180 +1000.example. 5M IN A 10.0.0.181 +1000.example. 5M IN A 10.0.0.182 +1000.example. 5M IN A 10.0.0.183 +1000.example. 5M IN A 10.0.0.184 +1000.example. 5M IN A 10.0.0.185 +1000.example. 5M IN A 10.0.0.186 +1000.example. 5M IN A 10.0.0.187 +1000.example. 5M IN A 10.0.0.188 +1000.example. 5M IN A 10.0.0.189 +1000.example. 5M IN A 10.0.0.190 +1000.example. 5M IN A 10.0.0.191 +1000.example. 5M IN A 10.0.0.192 +1000.example. 5M IN A 10.0.0.193 +1000.example. 5M IN A 10.0.0.194 +1000.example. 5M IN A 10.0.0.195 +1000.example. 5M IN A 10.0.0.196 +1000.example. 5M IN A 10.0.0.197 +1000.example. 5M IN A 10.0.0.198 +1000.example. 5M IN A 10.0.0.199 +1000.example. 5M IN A 10.0.0.200 +1000.example. 5M IN A 10.0.0.201 +1000.example. 5M IN A 10.0.0.202 +1000.example. 5M IN A 10.0.0.203 +1000.example. 5M IN A 10.0.0.204 +1000.example. 5M IN A 10.0.0.205 +1000.example. 5M IN A 10.0.0.206 +1000.example. 5M IN A 10.0.0.207 +1000.example. 5M IN A 10.0.0.208 +1000.example. 5M IN A 10.0.0.209 +1000.example. 5M IN A 10.0.0.210 +1000.example. 5M IN A 10.0.0.211 +1000.example. 5M IN A 10.0.0.212 +1000.example. 5M IN A 10.0.0.213 +1000.example. 5M IN A 10.0.0.214 +1000.example. 5M IN A 10.0.0.215 +1000.example. 5M IN A 10.0.0.216 +1000.example. 5M IN A 10.0.0.217 +1000.example. 5M IN A 10.0.0.218 +1000.example. 5M IN A 10.0.0.219 +1000.example. 5M IN A 10.0.0.220 +1000.example. 5M IN A 10.0.0.221 +1000.example. 5M IN A 10.0.0.222 +1000.example. 5M IN A 10.0.0.223 +1000.example. 5M IN A 10.0.0.224 +1000.example. 5M IN A 10.0.0.225 +1000.example. 5M IN A 10.0.0.226 +1000.example. 5M IN A 10.0.0.227 +1000.example. 5M IN A 10.0.0.228 +1000.example. 5M IN A 10.0.0.229 +1000.example. 5M IN A 10.0.0.230 +1000.example. 5M IN A 10.0.0.231 +1000.example. 5M IN A 10.0.0.232 +1000.example. 5M IN A 10.0.0.233 +1000.example. 5M IN A 10.0.0.234 +1000.example. 5M IN A 10.0.0.235 +1000.example. 5M IN A 10.0.0.236 +1000.example. 5M IN A 10.0.0.237 +1000.example. 5M IN A 10.0.0.238 +1000.example. 5M IN A 10.0.0.239 +1000.example. 5M IN A 10.0.0.240 +1000.example. 5M IN A 10.0.0.241 +1000.example. 5M IN A 10.0.0.242 +1000.example. 5M IN A 10.0.0.243 +1000.example. 5M IN A 10.0.0.244 +1000.example. 5M IN A 10.0.0.245 +1000.example. 5M IN A 10.0.0.246 +1000.example. 5M IN A 10.0.0.247 +1000.example. 5M IN A 10.0.0.248 +1000.example. 5M IN A 10.0.0.249 +1000.example. 5M IN A 10.0.0.250 +1000.example. 5M IN A 10.0.0.251 +1000.example. 5M IN A 10.0.0.252 +1000.example. 5M IN A 10.0.0.253 +1000.example. 5M IN A 10.0.0.254 +1000.example. 5M IN A 10.0.0.255 +1000.example. 5M IN A 10.0.1.0 +1000.example. 5M IN A 10.0.1.1 +1000.example. 5M IN A 10.0.1.2 +1000.example. 5M IN A 10.0.1.3 +1000.example. 5M IN A 10.0.1.4 +1000.example. 5M IN A 10.0.1.5 +1000.example. 5M IN A 10.0.1.6 +1000.example. 5M IN A 10.0.1.7 +1000.example. 5M IN A 10.0.1.8 +1000.example. 5M IN A 10.0.1.9 +1000.example. 5M IN A 10.0.1.10 +1000.example. 5M IN A 10.0.1.11 +1000.example. 5M IN A 10.0.1.12 +1000.example. 5M IN A 10.0.1.13 +1000.example. 5M IN A 10.0.1.14 +1000.example. 5M IN A 10.0.1.15 +1000.example. 5M IN A 10.0.1.16 +1000.example. 5M IN A 10.0.1.17 +1000.example. 5M IN A 10.0.1.18 +1000.example. 5M IN A 10.0.1.19 +1000.example. 5M IN A 10.0.1.20 +1000.example. 5M IN A 10.0.1.21 +1000.example. 5M IN A 10.0.1.22 +1000.example. 5M IN A 10.0.1.23 +1000.example. 5M IN A 10.0.1.24 +1000.example. 5M IN A 10.0.1.25 +1000.example. 5M IN A 10.0.1.26 +1000.example. 5M IN A 10.0.1.27 +1000.example. 5M IN A 10.0.1.28 +1000.example. 5M IN A 10.0.1.29 +1000.example. 5M IN A 10.0.1.30 +1000.example. 5M IN A 10.0.1.31 +1000.example. 5M IN A 10.0.1.32 +1000.example. 5M IN A 10.0.1.33 +1000.example. 5M IN A 10.0.1.34 +1000.example. 5M IN A 10.0.1.35 +1000.example. 5M IN A 10.0.1.36 +1000.example. 5M IN A 10.0.1.37 +1000.example. 5M IN A 10.0.1.38 +1000.example. 5M IN A 10.0.1.39 +1000.example. 5M IN A 10.0.1.40 +1000.example. 5M IN A 10.0.1.41 +1000.example. 5M IN A 10.0.1.42 +1000.example. 5M IN A 10.0.1.43 +1000.example. 5M IN A 10.0.1.44 +1000.example. 5M IN A 10.0.1.45 +1000.example. 5M IN A 10.0.1.46 +1000.example. 5M IN A 10.0.1.47 +1000.example. 5M IN A 10.0.1.48 +1000.example. 5M IN A 10.0.1.49 +1000.example. 5M IN A 10.0.1.50 +1000.example. 5M IN A 10.0.1.51 +1000.example. 5M IN A 10.0.1.52 +1000.example. 5M IN A 10.0.1.53 +1000.example. 5M IN A 10.0.1.54 +1000.example. 5M IN A 10.0.1.55 +1000.example. 5M IN A 10.0.1.56 +1000.example. 5M IN A 10.0.1.57 +1000.example. 5M IN A 10.0.1.58 +1000.example. 5M IN A 10.0.1.59 +1000.example. 5M IN A 10.0.1.60 +1000.example. 5M IN A 10.0.1.61 +1000.example. 5M IN A 10.0.1.62 +1000.example. 5M IN A 10.0.1.63 +1000.example. 5M IN A 10.0.1.64 +1000.example. 5M IN A 10.0.1.65 +1000.example. 5M IN A 10.0.1.66 +1000.example. 5M IN A 10.0.1.67 +1000.example. 5M IN A 10.0.1.68 +1000.example. 5M IN A 10.0.1.69 +1000.example. 5M IN A 10.0.1.70 +1000.example. 5M IN A 10.0.1.71 +1000.example. 5M IN A 10.0.1.72 +1000.example. 5M IN A 10.0.1.73 +1000.example. 5M IN A 10.0.1.74 +1000.example. 5M IN A 10.0.1.75 +1000.example. 5M IN A 10.0.1.76 +1000.example. 5M IN A 10.0.1.77 +1000.example. 5M IN A 10.0.1.78 +1000.example. 5M IN A 10.0.1.79 +1000.example. 5M IN A 10.0.1.80 +1000.example. 5M IN A 10.0.1.81 +1000.example. 5M IN A 10.0.1.82 +1000.example. 5M IN A 10.0.1.83 +1000.example. 5M IN A 10.0.1.84 +1000.example. 5M IN A 10.0.1.85 +1000.example. 5M IN A 10.0.1.86 +1000.example. 5M IN A 10.0.1.87 +1000.example. 5M IN A 10.0.1.88 +1000.example. 5M IN A 10.0.1.89 +1000.example. 5M IN A 10.0.1.90 +1000.example. 5M IN A 10.0.1.91 +1000.example. 5M IN A 10.0.1.92 +1000.example. 5M IN A 10.0.1.93 +1000.example. 5M IN A 10.0.1.94 +1000.example. 5M IN A 10.0.1.95 +1000.example. 5M IN A 10.0.1.96 +1000.example. 5M IN A 10.0.1.97 +1000.example. 5M IN A 10.0.1.98 +1000.example. 5M IN A 10.0.1.99 +1000.example. 5M IN A 10.0.1.100 +1000.example. 5M IN A 10.0.1.101 +1000.example. 5M IN A 10.0.1.102 +1000.example. 5M IN A 10.0.1.103 +1000.example. 5M IN A 10.0.1.104 +1000.example. 5M IN A 10.0.1.105 +1000.example. 5M IN A 10.0.1.106 +1000.example. 5M IN A 10.0.1.107 +1000.example. 5M IN A 10.0.1.108 +1000.example. 5M IN A 10.0.1.109 +1000.example. 5M IN A 10.0.1.110 +1000.example. 5M IN A 10.0.1.111 +1000.example. 5M IN A 10.0.1.112 +1000.example. 5M IN A 10.0.1.113 +1000.example. 5M IN A 10.0.1.114 +1000.example. 5M IN A 10.0.1.115 +1000.example. 5M IN A 10.0.1.116 +1000.example. 5M IN A 10.0.1.117 +1000.example. 5M IN A 10.0.1.118 +1000.example. 5M IN A 10.0.1.119 +1000.example. 5M IN A 10.0.1.120 +1000.example. 5M IN A 10.0.1.121 +1000.example. 5M IN A 10.0.1.122 +1000.example. 5M IN A 10.0.1.123 +1000.example. 5M IN A 10.0.1.124 +1000.example. 5M IN A 10.0.1.125 +1000.example. 5M IN A 10.0.1.126 +1000.example. 5M IN A 10.0.1.127 +1000.example. 5M IN A 10.0.1.128 +1000.example. 5M IN A 10.0.1.129 +1000.example. 5M IN A 10.0.1.130 +1000.example. 5M IN A 10.0.1.131 +1000.example. 5M IN A 10.0.1.132 +1000.example. 5M IN A 10.0.1.133 +1000.example. 5M IN A 10.0.1.134 +1000.example. 5M IN A 10.0.1.135 +1000.example. 5M IN A 10.0.1.136 +1000.example. 5M IN A 10.0.1.137 +1000.example. 5M IN A 10.0.1.138 +1000.example. 5M IN A 10.0.1.139 +1000.example. 5M IN A 10.0.1.140 +1000.example. 5M IN A 10.0.1.141 +1000.example. 5M IN A 10.0.1.142 +1000.example. 5M IN A 10.0.1.143 +1000.example. 5M IN A 10.0.1.144 +1000.example. 5M IN A 10.0.1.145 +1000.example. 5M IN A 10.0.1.146 +1000.example. 5M IN A 10.0.1.147 +1000.example. 5M IN A 10.0.1.148 +1000.example. 5M IN A 10.0.1.149 +1000.example. 5M IN A 10.0.1.150 +1000.example. 5M IN A 10.0.1.151 +1000.example. 5M IN A 10.0.1.152 +1000.example. 5M IN A 10.0.1.153 +1000.example. 5M IN A 10.0.1.154 +1000.example. 5M IN A 10.0.1.155 +1000.example. 5M IN A 10.0.1.156 +1000.example. 5M IN A 10.0.1.157 +1000.example. 5M IN A 10.0.1.158 +1000.example. 5M IN A 10.0.1.159 +1000.example. 5M IN A 10.0.1.160 +1000.example. 5M IN A 10.0.1.161 +1000.example. 5M IN A 10.0.1.162 +1000.example. 5M IN A 10.0.1.163 +1000.example. 5M IN A 10.0.1.164 +1000.example. 5M IN A 10.0.1.165 +1000.example. 5M IN A 10.0.1.166 +1000.example. 5M IN A 10.0.1.167 +1000.example. 5M IN A 10.0.1.168 +1000.example. 5M IN A 10.0.1.169 +1000.example. 5M IN A 10.0.1.170 +1000.example. 5M IN A 10.0.1.171 +1000.example. 5M IN A 10.0.1.172 +1000.example. 5M IN A 10.0.1.173 +1000.example. 5M IN A 10.0.1.174 +1000.example. 5M IN A 10.0.1.175 +1000.example. 5M IN A 10.0.1.176 +1000.example. 5M IN A 10.0.1.177 +1000.example. 5M IN A 10.0.1.178 +1000.example. 5M IN A 10.0.1.179 +1000.example. 5M IN A 10.0.1.180 +1000.example. 5M IN A 10.0.1.181 +1000.example. 5M IN A 10.0.1.182 +1000.example. 5M IN A 10.0.1.183 +1000.example. 5M IN A 10.0.1.184 +1000.example. 5M IN A 10.0.1.185 +1000.example. 5M IN A 10.0.1.186 +1000.example. 5M IN A 10.0.1.187 +1000.example. 5M IN A 10.0.1.188 +1000.example. 5M IN A 10.0.1.189 +1000.example. 5M IN A 10.0.1.190 +1000.example. 5M IN A 10.0.1.191 +1000.example. 5M IN A 10.0.1.192 +1000.example. 5M IN A 10.0.1.193 +1000.example. 5M IN A 10.0.1.194 +1000.example. 5M IN A 10.0.1.195 +1000.example. 5M IN A 10.0.1.196 +1000.example. 5M IN A 10.0.1.197 +1000.example. 5M IN A 10.0.1.198 +1000.example. 5M IN A 10.0.1.199 +1000.example. 5M IN A 10.0.1.200 +1000.example. 5M IN A 10.0.1.201 +1000.example. 5M IN A 10.0.1.202 +1000.example. 5M IN A 10.0.1.203 +1000.example. 5M IN A 10.0.1.204 +1000.example. 5M IN A 10.0.1.205 +1000.example. 5M IN A 10.0.1.206 +1000.example. 5M IN A 10.0.1.207 +1000.example. 5M IN A 10.0.1.208 +1000.example. 5M IN A 10.0.1.209 +1000.example. 5M IN A 10.0.1.210 +1000.example. 5M IN A 10.0.1.211 +1000.example. 5M IN A 10.0.1.212 +1000.example. 5M IN A 10.0.1.213 +1000.example. 5M IN A 10.0.1.214 +1000.example. 5M IN A 10.0.1.215 +1000.example. 5M IN A 10.0.1.216 +1000.example. 5M IN A 10.0.1.217 +1000.example. 5M IN A 10.0.1.218 +1000.example. 5M IN A 10.0.1.219 +1000.example. 5M IN A 10.0.1.220 +1000.example. 5M IN A 10.0.1.221 +1000.example. 5M IN A 10.0.1.222 +1000.example. 5M IN A 10.0.1.223 +1000.example. 5M IN A 10.0.1.224 +1000.example. 5M IN A 10.0.1.225 +1000.example. 5M IN A 10.0.1.226 +1000.example. 5M IN A 10.0.1.227 +1000.example. 5M IN A 10.0.1.228 +1000.example. 5M IN A 10.0.1.229 +1000.example. 5M IN A 10.0.1.230 +1000.example. 5M IN A 10.0.1.231 +1000.example. 5M IN A 10.0.1.232 +1000.example. 5M IN A 10.0.1.233 +1000.example. 5M IN A 10.0.1.234 +1000.example. 5M IN A 10.0.1.235 +1000.example. 5M IN A 10.0.1.236 +1000.example. 5M IN A 10.0.1.237 +1000.example. 5M IN A 10.0.1.238 +1000.example. 5M IN A 10.0.1.239 +1000.example. 5M IN A 10.0.1.240 +1000.example. 5M IN A 10.0.1.241 +1000.example. 5M IN A 10.0.1.242 +1000.example. 5M IN A 10.0.1.243 +1000.example. 5M IN A 10.0.1.244 +1000.example. 5M IN A 10.0.1.245 +1000.example. 5M IN A 10.0.1.246 +1000.example. 5M IN A 10.0.1.247 +1000.example. 5M IN A 10.0.1.248 +1000.example. 5M IN A 10.0.1.249 +1000.example. 5M IN A 10.0.1.250 +1000.example. 5M IN A 10.0.1.251 +1000.example. 5M IN A 10.0.1.252 +1000.example. 5M IN A 10.0.1.253 +1000.example. 5M IN A 10.0.1.254 +1000.example. 5M IN A 10.0.1.255 +1000.example. 5M IN A 10.0.2.0 +1000.example. 5M IN A 10.0.2.1 +1000.example. 5M IN A 10.0.2.2 +1000.example. 5M IN A 10.0.2.3 +1000.example. 5M IN A 10.0.2.4 +1000.example. 5M IN A 10.0.2.5 +1000.example. 5M IN A 10.0.2.6 +1000.example. 5M IN A 10.0.2.7 +1000.example. 5M IN A 10.0.2.8 +1000.example. 5M IN A 10.0.2.9 +1000.example. 5M IN A 10.0.2.10 +1000.example. 5M IN A 10.0.2.11 +1000.example. 5M IN A 10.0.2.12 +1000.example. 5M IN A 10.0.2.13 +1000.example. 5M IN A 10.0.2.14 +1000.example. 5M IN A 10.0.2.15 +1000.example. 5M IN A 10.0.2.16 +1000.example. 5M IN A 10.0.2.17 +1000.example. 5M IN A 10.0.2.18 +1000.example. 5M IN A 10.0.2.19 +1000.example. 5M IN A 10.0.2.20 +1000.example. 5M IN A 10.0.2.21 +1000.example. 5M IN A 10.0.2.22 +1000.example. 5M IN A 10.0.2.23 +1000.example. 5M IN A 10.0.2.24 +1000.example. 5M IN A 10.0.2.25 +1000.example. 5M IN A 10.0.2.26 +1000.example. 5M IN A 10.0.2.27 +1000.example. 5M IN A 10.0.2.28 +1000.example. 5M IN A 10.0.2.29 +1000.example. 5M IN A 10.0.2.30 +1000.example. 5M IN A 10.0.2.31 +1000.example. 5M IN A 10.0.2.32 +1000.example. 5M IN A 10.0.2.33 +1000.example. 5M IN A 10.0.2.34 +1000.example. 5M IN A 10.0.2.35 +1000.example. 5M IN A 10.0.2.36 +1000.example. 5M IN A 10.0.2.37 +1000.example. 5M IN A 10.0.2.38 +1000.example. 5M IN A 10.0.2.39 +1000.example. 5M IN A 10.0.2.40 +1000.example. 5M IN A 10.0.2.41 +1000.example. 5M IN A 10.0.2.42 +1000.example. 5M IN A 10.0.2.43 +1000.example. 5M IN A 10.0.2.44 +1000.example. 5M IN A 10.0.2.45 +1000.example. 5M IN A 10.0.2.46 +1000.example. 5M IN A 10.0.2.47 +1000.example. 5M IN A 10.0.2.48 +1000.example. 5M IN A 10.0.2.49 +1000.example. 5M IN A 10.0.2.50 +1000.example. 5M IN A 10.0.2.51 +1000.example. 5M IN A 10.0.2.52 +1000.example. 5M IN A 10.0.2.53 +1000.example. 5M IN A 10.0.2.54 +1000.example. 5M IN A 10.0.2.55 +1000.example. 5M IN A 10.0.2.56 +1000.example. 5M IN A 10.0.2.57 +1000.example. 5M IN A 10.0.2.58 +1000.example. 5M IN A 10.0.2.59 +1000.example. 5M IN A 10.0.2.60 +1000.example. 5M IN A 10.0.2.61 +1000.example. 5M IN A 10.0.2.62 +1000.example. 5M IN A 10.0.2.63 +1000.example. 5M IN A 10.0.2.64 +1000.example. 5M IN A 10.0.2.65 +1000.example. 5M IN A 10.0.2.66 +1000.example. 5M IN A 10.0.2.67 +1000.example. 5M IN A 10.0.2.68 +1000.example. 5M IN A 10.0.2.69 +1000.example. 5M IN A 10.0.2.70 +1000.example. 5M IN A 10.0.2.71 +1000.example. 5M IN A 10.0.2.72 +1000.example. 5M IN A 10.0.2.73 +1000.example. 5M IN A 10.0.2.74 +1000.example. 5M IN A 10.0.2.75 +1000.example. 5M IN A 10.0.2.76 +1000.example. 5M IN A 10.0.2.77 +1000.example. 5M IN A 10.0.2.78 +1000.example. 5M IN A 10.0.2.79 +1000.example. 5M IN A 10.0.2.80 +1000.example. 5M IN A 10.0.2.81 +1000.example. 5M IN A 10.0.2.82 +1000.example. 5M IN A 10.0.2.83 +1000.example. 5M IN A 10.0.2.84 +1000.example. 5M IN A 10.0.2.85 +1000.example. 5M IN A 10.0.2.86 +1000.example. 5M IN A 10.0.2.87 +1000.example. 5M IN A 10.0.2.88 +1000.example. 5M IN A 10.0.2.89 +1000.example. 5M IN A 10.0.2.90 +1000.example. 5M IN A 10.0.2.91 +1000.example. 5M IN A 10.0.2.92 +1000.example. 5M IN A 10.0.2.93 +1000.example. 5M IN A 10.0.2.94 +1000.example. 5M IN A 10.0.2.95 +1000.example. 5M IN A 10.0.2.96 +1000.example. 5M IN A 10.0.2.97 +1000.example. 5M IN A 10.0.2.98 +1000.example. 5M IN A 10.0.2.99 +1000.example. 5M IN A 10.0.2.100 +1000.example. 5M IN A 10.0.2.101 +1000.example. 5M IN A 10.0.2.102 +1000.example. 5M IN A 10.0.2.103 +1000.example. 5M IN A 10.0.2.104 +1000.example. 5M IN A 10.0.2.105 +1000.example. 5M IN A 10.0.2.106 +1000.example. 5M IN A 10.0.2.107 +1000.example. 5M IN A 10.0.2.108 +1000.example. 5M IN A 10.0.2.109 +1000.example. 5M IN A 10.0.2.110 +1000.example. 5M IN A 10.0.2.111 +1000.example. 5M IN A 10.0.2.112 +1000.example. 5M IN A 10.0.2.113 +1000.example. 5M IN A 10.0.2.114 +1000.example. 5M IN A 10.0.2.115 +1000.example. 5M IN A 10.0.2.116 +1000.example. 5M IN A 10.0.2.117 +1000.example. 5M IN A 10.0.2.118 +1000.example. 5M IN A 10.0.2.119 +1000.example. 5M IN A 10.0.2.120 +1000.example. 5M IN A 10.0.2.121 +1000.example. 5M IN A 10.0.2.122 +1000.example. 5M IN A 10.0.2.123 +1000.example. 5M IN A 10.0.2.124 +1000.example. 5M IN A 10.0.2.125 +1000.example. 5M IN A 10.0.2.126 +1000.example. 5M IN A 10.0.2.127 +1000.example. 5M IN A 10.0.2.128 +1000.example. 5M IN A 10.0.2.129 +1000.example. 5M IN A 10.0.2.130 +1000.example. 5M IN A 10.0.2.131 +1000.example. 5M IN A 10.0.2.132 +1000.example. 5M IN A 10.0.2.133 +1000.example. 5M IN A 10.0.2.134 +1000.example. 5M IN A 10.0.2.135 +1000.example. 5M IN A 10.0.2.136 +1000.example. 5M IN A 10.0.2.137 +1000.example. 5M IN A 10.0.2.138 +1000.example. 5M IN A 10.0.2.139 +1000.example. 5M IN A 10.0.2.140 +1000.example. 5M IN A 10.0.2.141 +1000.example. 5M IN A 10.0.2.142 +1000.example. 5M IN A 10.0.2.143 +1000.example. 5M IN A 10.0.2.144 +1000.example. 5M IN A 10.0.2.145 +1000.example. 5M IN A 10.0.2.146 +1000.example. 5M IN A 10.0.2.147 +1000.example. 5M IN A 10.0.2.148 +1000.example. 5M IN A 10.0.2.149 +1000.example. 5M IN A 10.0.2.150 +1000.example. 5M IN A 10.0.2.151 +1000.example. 5M IN A 10.0.2.152 +1000.example. 5M IN A 10.0.2.153 +1000.example. 5M IN A 10.0.2.154 +1000.example. 5M IN A 10.0.2.155 +1000.example. 5M IN A 10.0.2.156 +1000.example. 5M IN A 10.0.2.157 +1000.example. 5M IN A 10.0.2.158 +1000.example. 5M IN A 10.0.2.159 +1000.example. 5M IN A 10.0.2.160 +1000.example. 5M IN A 10.0.2.161 +1000.example. 5M IN A 10.0.2.162 +1000.example. 5M IN A 10.0.2.163 +1000.example. 5M IN A 10.0.2.164 +1000.example. 5M IN A 10.0.2.165 +1000.example. 5M IN A 10.0.2.166 +1000.example. 5M IN A 10.0.2.167 +1000.example. 5M IN A 10.0.2.168 +1000.example. 5M IN A 10.0.2.169 +1000.example. 5M IN A 10.0.2.170 +1000.example. 5M IN A 10.0.2.171 +1000.example. 5M IN A 10.0.2.172 +1000.example. 5M IN A 10.0.2.173 +1000.example. 5M IN A 10.0.2.174 +1000.example. 5M IN A 10.0.2.175 +1000.example. 5M IN A 10.0.2.176 +1000.example. 5M IN A 10.0.2.177 +1000.example. 5M IN A 10.0.2.178 +1000.example. 5M IN A 10.0.2.179 +1000.example. 5M IN A 10.0.2.180 +1000.example. 5M IN A 10.0.2.181 +1000.example. 5M IN A 10.0.2.182 +1000.example. 5M IN A 10.0.2.183 +1000.example. 5M IN A 10.0.2.184 +1000.example. 5M IN A 10.0.2.185 +1000.example. 5M IN A 10.0.2.186 +1000.example. 5M IN A 10.0.2.187 +1000.example. 5M IN A 10.0.2.188 +1000.example. 5M IN A 10.0.2.189 +1000.example. 5M IN A 10.0.2.190 +1000.example. 5M IN A 10.0.2.191 +1000.example. 5M IN A 10.0.2.192 +1000.example. 5M IN A 10.0.2.193 +1000.example. 5M IN A 10.0.2.194 +1000.example. 5M IN A 10.0.2.195 +1000.example. 5M IN A 10.0.2.196 +1000.example. 5M IN A 10.0.2.197 +1000.example. 5M IN A 10.0.2.198 +1000.example. 5M IN A 10.0.2.199 +1000.example. 5M IN A 10.0.2.200 +1000.example. 5M IN A 10.0.2.201 +1000.example. 5M IN A 10.0.2.202 +1000.example. 5M IN A 10.0.2.203 +1000.example. 5M IN A 10.0.2.204 +1000.example. 5M IN A 10.0.2.205 +1000.example. 5M IN A 10.0.2.206 +1000.example. 5M IN A 10.0.2.207 +1000.example. 5M IN A 10.0.2.208 +1000.example. 5M IN A 10.0.2.209 +1000.example. 5M IN A 10.0.2.210 +1000.example. 5M IN A 10.0.2.211 +1000.example. 5M IN A 10.0.2.212 +1000.example. 5M IN A 10.0.2.213 +1000.example. 5M IN A 10.0.2.214 +1000.example. 5M IN A 10.0.2.215 +1000.example. 5M IN A 10.0.2.216 +1000.example. 5M IN A 10.0.2.217 +1000.example. 5M IN A 10.0.2.218 +1000.example. 5M IN A 10.0.2.219 +1000.example. 5M IN A 10.0.2.220 +1000.example. 5M IN A 10.0.2.221 +1000.example. 5M IN A 10.0.2.222 +1000.example. 5M IN A 10.0.2.223 +1000.example. 5M IN A 10.0.2.224 +1000.example. 5M IN A 10.0.2.225 +1000.example. 5M IN A 10.0.2.226 +1000.example. 5M IN A 10.0.2.227 +1000.example. 5M IN A 10.0.2.228 +1000.example. 5M IN A 10.0.2.229 +1000.example. 5M IN A 10.0.2.230 +1000.example. 5M IN A 10.0.2.231 +1000.example. 5M IN A 10.0.2.232 +1000.example. 5M IN A 10.0.2.233 +1000.example. 5M IN A 10.0.2.234 +1000.example. 5M IN A 10.0.2.235 +1000.example. 5M IN A 10.0.2.236 +1000.example. 5M IN A 10.0.2.237 +1000.example. 5M IN A 10.0.2.238 +1000.example. 5M IN A 10.0.2.239 +1000.example. 5M IN A 10.0.2.240 +1000.example. 5M IN A 10.0.2.241 +1000.example. 5M IN A 10.0.2.242 +1000.example. 5M IN A 10.0.2.243 +1000.example. 5M IN A 10.0.2.244 +1000.example. 5M IN A 10.0.2.245 +1000.example. 5M IN A 10.0.2.246 +1000.example. 5M IN A 10.0.2.247 +1000.example. 5M IN A 10.0.2.248 +1000.example. 5M IN A 10.0.2.249 +1000.example. 5M IN A 10.0.2.250 +1000.example. 5M IN A 10.0.2.251 +1000.example. 5M IN A 10.0.2.252 +1000.example. 5M IN A 10.0.2.253 +1000.example. 5M IN A 10.0.2.254 +1000.example. 5M IN A 10.0.2.255 +1000.example. 5M IN A 10.0.3.0 +1000.example. 5M IN A 10.0.3.1 +1000.example. 5M IN A 10.0.3.2 +1000.example. 5M IN A 10.0.3.3 +1000.example. 5M IN A 10.0.3.4 +1000.example. 5M IN A 10.0.3.5 +1000.example. 5M IN A 10.0.3.6 +1000.example. 5M IN A 10.0.3.7 +1000.example. 5M IN A 10.0.3.8 +1000.example. 5M IN A 10.0.3.9 +1000.example. 5M IN A 10.0.3.10 +1000.example. 5M IN A 10.0.3.11 +1000.example. 5M IN A 10.0.3.12 +1000.example. 5M IN A 10.0.3.13 +1000.example. 5M IN A 10.0.3.14 +1000.example. 5M IN A 10.0.3.15 +1000.example. 5M IN A 10.0.3.16 +1000.example. 5M IN A 10.0.3.17 +1000.example. 5M IN A 10.0.3.18 +1000.example. 5M IN A 10.0.3.19 +1000.example. 5M IN A 10.0.3.20 +1000.example. 5M IN A 10.0.3.21 +1000.example. 5M IN A 10.0.3.22 +1000.example. 5M IN A 10.0.3.23 +1000.example. 5M IN A 10.0.3.24 +1000.example. 5M IN A 10.0.3.25 +1000.example. 5M IN A 10.0.3.26 +1000.example. 5M IN A 10.0.3.27 +1000.example. 5M IN A 10.0.3.28 +1000.example. 5M IN A 10.0.3.29 +1000.example. 5M IN A 10.0.3.30 +1000.example. 5M IN A 10.0.3.31 +1000.example. 5M IN A 10.0.3.32 +1000.example. 5M IN A 10.0.3.33 +1000.example. 5M IN A 10.0.3.34 +1000.example. 5M IN A 10.0.3.35 +1000.example. 5M IN A 10.0.3.36 +1000.example. 5M IN A 10.0.3.37 +1000.example. 5M IN A 10.0.3.38 +1000.example. 5M IN A 10.0.3.39 +1000.example. 5M IN A 10.0.3.40 +1000.example. 5M IN A 10.0.3.41 +1000.example. 5M IN A 10.0.3.42 +1000.example. 5M IN A 10.0.3.43 +1000.example. 5M IN A 10.0.3.44 +1000.example. 5M IN A 10.0.3.45 +1000.example. 5M IN A 10.0.3.46 +1000.example. 5M IN A 10.0.3.47 +1000.example. 5M IN A 10.0.3.48 +1000.example. 5M IN A 10.0.3.49 +1000.example. 5M IN A 10.0.3.50 +1000.example. 5M IN A 10.0.3.51 +1000.example. 5M IN A 10.0.3.52 +1000.example. 5M IN A 10.0.3.53 +1000.example. 5M IN A 10.0.3.54 +1000.example. 5M IN A 10.0.3.55 +1000.example. 5M IN A 10.0.3.56 +1000.example. 5M IN A 10.0.3.57 +1000.example. 5M IN A 10.0.3.58 +1000.example. 5M IN A 10.0.3.59 +1000.example. 5M IN A 10.0.3.60 +1000.example. 5M IN A 10.0.3.61 +1000.example. 5M IN A 10.0.3.62 +1000.example. 5M IN A 10.0.3.63 +1000.example. 5M IN A 10.0.3.64 +1000.example. 5M IN A 10.0.3.65 +1000.example. 5M IN A 10.0.3.66 +1000.example. 5M IN A 10.0.3.67 +1000.example. 5M IN A 10.0.3.68 +1000.example. 5M IN A 10.0.3.69 +1000.example. 5M IN A 10.0.3.70 +1000.example. 5M IN A 10.0.3.71 +1000.example. 5M IN A 10.0.3.72 +1000.example. 5M IN A 10.0.3.73 +1000.example. 5M IN A 10.0.3.74 +1000.example. 5M IN A 10.0.3.75 +1000.example. 5M IN A 10.0.3.76 +1000.example. 5M IN A 10.0.3.77 +1000.example. 5M IN A 10.0.3.78 +1000.example. 5M IN A 10.0.3.79 +1000.example. 5M IN A 10.0.3.80 +1000.example. 5M IN A 10.0.3.81 +1000.example. 5M IN A 10.0.3.82 +1000.example. 5M IN A 10.0.3.83 +1000.example. 5M IN A 10.0.3.84 +1000.example. 5M IN A 10.0.3.85 +1000.example. 5M IN A 10.0.3.86 +1000.example. 5M IN A 10.0.3.87 +1000.example. 5M IN A 10.0.3.88 +1000.example. 5M IN A 10.0.3.89 +1000.example. 5M IN A 10.0.3.90 +1000.example. 5M IN A 10.0.3.91 +1000.example. 5M IN A 10.0.3.92 +1000.example. 5M IN A 10.0.3.93 +1000.example. 5M IN A 10.0.3.94 +1000.example. 5M IN A 10.0.3.95 +1000.example. 5M IN A 10.0.3.96 +1000.example. 5M IN A 10.0.3.97 +1000.example. 5M IN A 10.0.3.98 +1000.example. 5M IN A 10.0.3.99 +1000.example. 5M IN A 10.0.3.100 +1000.example. 5M IN A 10.0.3.101 +1000.example. 5M IN A 10.0.3.102 +1000.example. 5M IN A 10.0.3.103 +1000.example. 5M IN A 10.0.3.104 +1000.example. 5M IN A 10.0.3.105 +1000.example. 5M IN A 10.0.3.106 +1000.example. 5M IN A 10.0.3.107 +1000.example. 5M IN A 10.0.3.108 +1000.example. 5M IN A 10.0.3.109 +1000.example. 5M IN A 10.0.3.110 +1000.example. 5M IN A 10.0.3.111 +1000.example. 5M IN A 10.0.3.112 +1000.example. 5M IN A 10.0.3.113 +1000.example. 5M IN A 10.0.3.114 +1000.example. 5M IN A 10.0.3.115 +1000.example. 5M IN A 10.0.3.116 +1000.example. 5M IN A 10.0.3.117 +1000.example. 5M IN A 10.0.3.118 +1000.example. 5M IN A 10.0.3.119 +1000.example. 5M IN A 10.0.3.120 +1000.example. 5M IN A 10.0.3.121 +1000.example. 5M IN A 10.0.3.122 +1000.example. 5M IN A 10.0.3.123 +1000.example. 5M IN A 10.0.3.124 +1000.example. 5M IN A 10.0.3.125 +1000.example. 5M IN A 10.0.3.126 +1000.example. 5M IN A 10.0.3.127 +1000.example. 5M IN A 10.0.3.128 +1000.example. 5M IN A 10.0.3.129 +1000.example. 5M IN A 10.0.3.130 +1000.example. 5M IN A 10.0.3.131 +1000.example. 5M IN A 10.0.3.132 +1000.example. 5M IN A 10.0.3.133 +1000.example. 5M IN A 10.0.3.134 +1000.example. 5M IN A 10.0.3.135 +1000.example. 5M IN A 10.0.3.136 +1000.example. 5M IN A 10.0.3.137 +1000.example. 5M IN A 10.0.3.138 +1000.example. 5M IN A 10.0.3.139 +1000.example. 5M IN A 10.0.3.140 +1000.example. 5M IN A 10.0.3.141 +1000.example. 5M IN A 10.0.3.142 +1000.example. 5M IN A 10.0.3.143 +1000.example. 5M IN A 10.0.3.144 +1000.example. 5M IN A 10.0.3.145 +1000.example. 5M IN A 10.0.3.146 +1000.example. 5M IN A 10.0.3.147 +1000.example. 5M IN A 10.0.3.148 +1000.example. 5M IN A 10.0.3.149 +1000.example. 5M IN A 10.0.3.150 +1000.example. 5M IN A 10.0.3.151 +1000.example. 5M IN A 10.0.3.152 +1000.example. 5M IN A 10.0.3.153 +1000.example. 5M IN A 10.0.3.154 +1000.example. 5M IN A 10.0.3.155 +1000.example. 5M IN A 10.0.3.156 +1000.example. 5M IN A 10.0.3.157 +1000.example. 5M IN A 10.0.3.158 +1000.example. 5M IN A 10.0.3.159 +1000.example. 5M IN A 10.0.3.160 +1000.example. 5M IN A 10.0.3.161 +1000.example. 5M IN A 10.0.3.162 +1000.example. 5M IN A 10.0.3.163 +1000.example. 5M IN A 10.0.3.164 +1000.example. 5M IN A 10.0.3.165 +1000.example. 5M IN A 10.0.3.166 +1000.example. 5M IN A 10.0.3.167 +1000.example. 5M IN A 10.0.3.168 +1000.example. 5M IN A 10.0.3.169 +1000.example. 5M IN A 10.0.3.170 +1000.example. 5M IN A 10.0.3.171 +1000.example. 5M IN A 10.0.3.172 +1000.example. 5M IN A 10.0.3.173 +1000.example. 5M IN A 10.0.3.174 +1000.example. 5M IN A 10.0.3.175 +1000.example. 5M IN A 10.0.3.176 +1000.example. 5M IN A 10.0.3.177 +1000.example. 5M IN A 10.0.3.178 +1000.example. 5M IN A 10.0.3.179 +1000.example. 5M IN A 10.0.3.180 +1000.example. 5M IN A 10.0.3.181 +1000.example. 5M IN A 10.0.3.182 +1000.example. 5M IN A 10.0.3.183 +1000.example. 5M IN A 10.0.3.184 +1000.example. 5M IN A 10.0.3.185 +1000.example. 5M IN A 10.0.3.186 +1000.example. 5M IN A 10.0.3.187 +1000.example. 5M IN A 10.0.3.188 +1000.example. 5M IN A 10.0.3.189 +1000.example. 5M IN A 10.0.3.190 +1000.example. 5M IN A 10.0.3.191 +1000.example. 5M IN A 10.0.3.192 +1000.example. 5M IN A 10.0.3.193 +1000.example. 5M IN A 10.0.3.194 +1000.example. 5M IN A 10.0.3.195 +1000.example. 5M IN A 10.0.3.196 +1000.example. 5M IN A 10.0.3.197 +1000.example. 5M IN A 10.0.3.198 +1000.example. 5M IN A 10.0.3.199 +1000.example. 5M IN A 10.0.3.200 +1000.example. 5M IN A 10.0.3.201 +1000.example. 5M IN A 10.0.3.202 +1000.example. 5M IN A 10.0.3.203 +1000.example. 5M IN A 10.0.3.204 +1000.example. 5M IN A 10.0.3.205 +1000.example. 5M IN A 10.0.3.206 +1000.example. 5M IN A 10.0.3.207 +1000.example. 5M IN A 10.0.3.208 +1000.example. 5M IN A 10.0.3.209 +1000.example. 5M IN A 10.0.3.210 +1000.example. 5M IN A 10.0.3.211 +1000.example. 5M IN A 10.0.3.212 +1000.example. 5M IN A 10.0.3.213 +1000.example. 5M IN A 10.0.3.214 +1000.example. 5M IN A 10.0.3.215 +1000.example. 5M IN A 10.0.3.216 +1000.example. 5M IN A 10.0.3.217 +1000.example. 5M IN A 10.0.3.218 +1000.example. 5M IN A 10.0.3.219 +1000.example. 5M IN A 10.0.3.220 +1000.example. 5M IN A 10.0.3.221 +1000.example. 5M IN A 10.0.3.222 +1000.example. 5M IN A 10.0.3.223 +1000.example. 5M IN A 10.0.3.224 +1000.example. 5M IN A 10.0.3.225 +1000.example. 5M IN A 10.0.3.226 +1000.example. 5M IN A 10.0.3.227 +1000.example. 5M IN A 10.0.3.228 +1000.example. 5M IN A 10.0.3.229 +1000.example. 5M IN A 10.0.3.230 +1000.example. 5M IN A 10.0.3.231 + +;; AUTHORITY SECTION: +example. 5M IN NS ns1.example. + +;; ADDITIONAL SECTION: +ns1.example. 5M IN A 10.53.0.1 + +;; Total query time: 69 msec +;; FROM: draco to SERVER: 10.53.0.1 +;; WHEN: Fri Jun 23 12:58:14 2000 +;; MSG SIZE sent: 30 rcvd: 16064 + diff --git a/bin/tests/system/limits/knowngood.dig.out.2000 b/bin/tests/system/limits/knowngood.dig.out.2000 new file mode 100644 index 0000000..96c9181 --- /dev/null +++ b/bin/tests/system/limits/knowngood.dig.out.2000 @@ -0,0 +1,2023 @@ + +; <<>> DiG 8.2 <<>> 2000.example. @10.53.0.1 a -p +; (1 server found) +;; res options: init recurs defnam dnsrch +;; got answer: +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6 +;; flags: qr aa rd ad; QUERY: 1, ANSWER: 2000, AUTHORITY: 1, ADDITIONAL: 1 +;; QUERY SECTION: +;; 2000.example, type = A, class = IN + +;; ANSWER SECTION: +2000.example. 5M IN A 10.0.0.0 +2000.example. 5M IN A 10.0.0.1 +2000.example. 5M IN A 10.0.0.2 +2000.example. 5M IN A 10.0.0.3 +2000.example. 5M IN A 10.0.0.4 +2000.example. 5M IN A 10.0.0.5 +2000.example. 5M IN A 10.0.0.6 +2000.example. 5M IN A 10.0.0.7 +2000.example. 5M IN A 10.0.0.8 +2000.example. 5M IN A 10.0.0.9 +2000.example. 5M IN A 10.0.0.10 +2000.example. 5M IN A 10.0.0.11 +2000.example. 5M IN A 10.0.0.12 +2000.example. 5M IN A 10.0.0.13 +2000.example. 5M IN A 10.0.0.14 +2000.example. 5M IN A 10.0.0.15 +2000.example. 5M IN A 10.0.0.16 +2000.example. 5M IN A 10.0.0.17 +2000.example. 5M IN A 10.0.0.18 +2000.example. 5M IN A 10.0.0.19 +2000.example. 5M IN A 10.0.0.20 +2000.example. 5M IN A 10.0.0.21 +2000.example. 5M IN A 10.0.0.22 +2000.example. 5M IN A 10.0.0.23 +2000.example. 5M IN A 10.0.0.24 +2000.example. 5M IN A 10.0.0.25 +2000.example. 5M IN A 10.0.0.26 +2000.example. 5M IN A 10.0.0.27 +2000.example. 5M IN A 10.0.0.28 +2000.example. 5M IN A 10.0.0.29 +2000.example. 5M IN A 10.0.0.30 +2000.example. 5M IN A 10.0.0.31 +2000.example. 5M IN A 10.0.0.32 +2000.example. 5M IN A 10.0.0.33 +2000.example. 5M IN A 10.0.0.34 +2000.example. 5M IN A 10.0.0.35 +2000.example. 5M IN A 10.0.0.36 +2000.example. 5M IN A 10.0.0.37 +2000.example. 5M IN A 10.0.0.38 +2000.example. 5M IN A 10.0.0.39 +2000.example. 5M IN A 10.0.0.40 +2000.example. 5M IN A 10.0.0.41 +2000.example. 5M IN A 10.0.0.42 +2000.example. 5M IN A 10.0.0.43 +2000.example. 5M IN A 10.0.0.44 +2000.example. 5M IN A 10.0.0.45 +2000.example. 5M IN A 10.0.0.46 +2000.example. 5M IN A 10.0.0.47 +2000.example. 5M IN A 10.0.0.48 +2000.example. 5M IN A 10.0.0.49 +2000.example. 5M IN A 10.0.0.50 +2000.example. 5M IN A 10.0.0.51 +2000.example. 5M IN A 10.0.0.52 +2000.example. 5M IN A 10.0.0.53 +2000.example. 5M IN A 10.0.0.54 +2000.example. 5M IN A 10.0.0.55 +2000.example. 5M IN A 10.0.0.56 +2000.example. 5M IN A 10.0.0.57 +2000.example. 5M IN A 10.0.0.58 +2000.example. 5M IN A 10.0.0.59 +2000.example. 5M IN A 10.0.0.60 +2000.example. 5M IN A 10.0.0.61 +2000.example. 5M IN A 10.0.0.62 +2000.example. 5M IN A 10.0.0.63 +2000.example. 5M IN A 10.0.0.64 +2000.example. 5M IN A 10.0.0.65 +2000.example. 5M IN A 10.0.0.66 +2000.example. 5M IN A 10.0.0.67 +2000.example. 5M IN A 10.0.0.68 +2000.example. 5M IN A 10.0.0.69 +2000.example. 5M IN A 10.0.0.70 +2000.example. 5M IN A 10.0.0.71 +2000.example. 5M IN A 10.0.0.72 +2000.example. 5M IN A 10.0.0.73 +2000.example. 5M IN A 10.0.0.74 +2000.example. 5M IN A 10.0.0.75 +2000.example. 5M IN A 10.0.0.76 +2000.example. 5M IN A 10.0.0.77 +2000.example. 5M IN A 10.0.0.78 +2000.example. 5M IN A 10.0.0.79 +2000.example. 5M IN A 10.0.0.80 +2000.example. 5M IN A 10.0.0.81 +2000.example. 5M IN A 10.0.0.82 +2000.example. 5M IN A 10.0.0.83 +2000.example. 5M IN A 10.0.0.84 +2000.example. 5M IN A 10.0.0.85 +2000.example. 5M IN A 10.0.0.86 +2000.example. 5M IN A 10.0.0.87 +2000.example. 5M IN A 10.0.0.88 +2000.example. 5M IN A 10.0.0.89 +2000.example. 5M IN A 10.0.0.90 +2000.example. 5M IN A 10.0.0.91 +2000.example. 5M IN A 10.0.0.92 +2000.example. 5M IN A 10.0.0.93 +2000.example. 5M IN A 10.0.0.94 +2000.example. 5M IN A 10.0.0.95 +2000.example. 5M IN A 10.0.0.96 +2000.example. 5M IN A 10.0.0.97 +2000.example. 5M IN A 10.0.0.98 +2000.example. 5M IN A 10.0.0.99 +2000.example. 5M IN A 10.0.0.100 +2000.example. 5M IN A 10.0.0.101 +2000.example. 5M IN A 10.0.0.102 +2000.example. 5M IN A 10.0.0.103 +2000.example. 5M IN A 10.0.0.104 +2000.example. 5M IN A 10.0.0.105 +2000.example. 5M IN A 10.0.0.106 +2000.example. 5M IN A 10.0.0.107 +2000.example. 5M IN A 10.0.0.108 +2000.example. 5M IN A 10.0.0.109 +2000.example. 5M IN A 10.0.0.110 +2000.example. 5M IN A 10.0.0.111 +2000.example. 5M IN A 10.0.0.112 +2000.example. 5M IN A 10.0.0.113 +2000.example. 5M IN A 10.0.0.114 +2000.example. 5M IN A 10.0.0.115 +2000.example. 5M IN A 10.0.0.116 +2000.example. 5M IN A 10.0.0.117 +2000.example. 5M IN A 10.0.0.118 +2000.example. 5M IN A 10.0.0.119 +2000.example. 5M IN A 10.0.0.120 +2000.example. 5M IN A 10.0.0.121 +2000.example. 5M IN A 10.0.0.122 +2000.example. 5M IN A 10.0.0.123 +2000.example. 5M IN A 10.0.0.124 +2000.example. 5M IN A 10.0.0.125 +2000.example. 5M IN A 10.0.0.126 +2000.example. 5M IN A 10.0.0.127 +2000.example. 5M IN A 10.0.0.128 +2000.example. 5M IN A 10.0.0.129 +2000.example. 5M IN A 10.0.0.130 +2000.example. 5M IN A 10.0.0.131 +2000.example. 5M IN A 10.0.0.132 +2000.example. 5M IN A 10.0.0.133 +2000.example. 5M IN A 10.0.0.134 +2000.example. 5M IN A 10.0.0.135 +2000.example. 5M IN A 10.0.0.136 +2000.example. 5M IN A 10.0.0.137 +2000.example. 5M IN A 10.0.0.138 +2000.example. 5M IN A 10.0.0.139 +2000.example. 5M IN A 10.0.0.140 +2000.example. 5M IN A 10.0.0.141 +2000.example. 5M IN A 10.0.0.142 +2000.example. 5M IN A 10.0.0.143 +2000.example. 5M IN A 10.0.0.144 +2000.example. 5M IN A 10.0.0.145 +2000.example. 5M IN A 10.0.0.146 +2000.example. 5M IN A 10.0.0.147 +2000.example. 5M IN A 10.0.0.148 +2000.example. 5M IN A 10.0.0.149 +2000.example. 5M IN A 10.0.0.150 +2000.example. 5M IN A 10.0.0.151 +2000.example. 5M IN A 10.0.0.152 +2000.example. 5M IN A 10.0.0.153 +2000.example. 5M IN A 10.0.0.154 +2000.example. 5M IN A 10.0.0.155 +2000.example. 5M IN A 10.0.0.156 +2000.example. 5M IN A 10.0.0.157 +2000.example. 5M IN A 10.0.0.158 +2000.example. 5M IN A 10.0.0.159 +2000.example. 5M IN A 10.0.0.160 +2000.example. 5M IN A 10.0.0.161 +2000.example. 5M IN A 10.0.0.162 +2000.example. 5M IN A 10.0.0.163 +2000.example. 5M IN A 10.0.0.164 +2000.example. 5M IN A 10.0.0.165 +2000.example. 5M IN A 10.0.0.166 +2000.example. 5M IN A 10.0.0.167 +2000.example. 5M IN A 10.0.0.168 +2000.example. 5M IN A 10.0.0.169 +2000.example. 5M IN A 10.0.0.170 +2000.example. 5M IN A 10.0.0.171 +2000.example. 5M IN A 10.0.0.172 +2000.example. 5M IN A 10.0.0.173 +2000.example. 5M IN A 10.0.0.174 +2000.example. 5M IN A 10.0.0.175 +2000.example. 5M IN A 10.0.0.176 +2000.example. 5M IN A 10.0.0.177 +2000.example. 5M IN A 10.0.0.178 +2000.example. 5M IN A 10.0.0.179 +2000.example. 5M IN A 10.0.0.180 +2000.example. 5M IN A 10.0.0.181 +2000.example. 5M IN A 10.0.0.182 +2000.example. 5M IN A 10.0.0.183 +2000.example. 5M IN A 10.0.0.184 +2000.example. 5M IN A 10.0.0.185 +2000.example. 5M IN A 10.0.0.186 +2000.example. 5M IN A 10.0.0.187 +2000.example. 5M IN A 10.0.0.188 +2000.example. 5M IN A 10.0.0.189 +2000.example. 5M IN A 10.0.0.190 +2000.example. 5M IN A 10.0.0.191 +2000.example. 5M IN A 10.0.0.192 +2000.example. 5M IN A 10.0.0.193 +2000.example. 5M IN A 10.0.0.194 +2000.example. 5M IN A 10.0.0.195 +2000.example. 5M IN A 10.0.0.196 +2000.example. 5M IN A 10.0.0.197 +2000.example. 5M IN A 10.0.0.198 +2000.example. 5M IN A 10.0.0.199 +2000.example. 5M IN A 10.0.0.200 +2000.example. 5M IN A 10.0.0.201 +2000.example. 5M IN A 10.0.0.202 +2000.example. 5M IN A 10.0.0.203 +2000.example. 5M IN A 10.0.0.204 +2000.example. 5M IN A 10.0.0.205 +2000.example. 5M IN A 10.0.0.206 +2000.example. 5M IN A 10.0.0.207 +2000.example. 5M IN A 10.0.0.208 +2000.example. 5M IN A 10.0.0.209 +2000.example. 5M IN A 10.0.0.210 +2000.example. 5M IN A 10.0.0.211 +2000.example. 5M IN A 10.0.0.212 +2000.example. 5M IN A 10.0.0.213 +2000.example. 5M IN A 10.0.0.214 +2000.example. 5M IN A 10.0.0.215 +2000.example. 5M IN A 10.0.0.216 +2000.example. 5M IN A 10.0.0.217 +2000.example. 5M IN A 10.0.0.218 +2000.example. 5M IN A 10.0.0.219 +2000.example. 5M IN A 10.0.0.220 +2000.example. 5M IN A 10.0.0.221 +2000.example. 5M IN A 10.0.0.222 +2000.example. 5M IN A 10.0.0.223 +2000.example. 5M IN A 10.0.0.224 +2000.example. 5M IN A 10.0.0.225 +2000.example. 5M IN A 10.0.0.226 +2000.example. 5M IN A 10.0.0.227 +2000.example. 5M IN A 10.0.0.228 +2000.example. 5M IN A 10.0.0.229 +2000.example. 5M IN A 10.0.0.230 +2000.example. 5M IN A 10.0.0.231 +2000.example. 5M IN A 10.0.0.232 +2000.example. 5M IN A 10.0.0.233 +2000.example. 5M IN A 10.0.0.234 +2000.example. 5M IN A 10.0.0.235 +2000.example. 5M IN A 10.0.0.236 +2000.example. 5M IN A 10.0.0.237 +2000.example. 5M IN A 10.0.0.238 +2000.example. 5M IN A 10.0.0.239 +2000.example. 5M IN A 10.0.0.240 +2000.example. 5M IN A 10.0.0.241 +2000.example. 5M IN A 10.0.0.242 +2000.example. 5M IN A 10.0.0.243 +2000.example. 5M IN A 10.0.0.244 +2000.example. 5M IN A 10.0.0.245 +2000.example. 5M IN A 10.0.0.246 +2000.example. 5M IN A 10.0.0.247 +2000.example. 5M IN A 10.0.0.248 +2000.example. 5M IN A 10.0.0.249 +2000.example. 5M IN A 10.0.0.250 +2000.example. 5M IN A 10.0.0.251 +2000.example. 5M IN A 10.0.0.252 +2000.example. 5M IN A 10.0.0.253 +2000.example. 5M IN A 10.0.0.254 +2000.example. 5M IN A 10.0.0.255 +2000.example. 5M IN A 10.0.1.0 +2000.example. 5M IN A 10.0.1.1 +2000.example. 5M IN A 10.0.1.2 +2000.example. 5M IN A 10.0.1.3 +2000.example. 5M IN A 10.0.1.4 +2000.example. 5M IN A 10.0.1.5 +2000.example. 5M IN A 10.0.1.6 +2000.example. 5M IN A 10.0.1.7 +2000.example. 5M IN A 10.0.1.8 +2000.example. 5M IN A 10.0.1.9 +2000.example. 5M IN A 10.0.1.10 +2000.example. 5M IN A 10.0.1.11 +2000.example. 5M IN A 10.0.1.12 +2000.example. 5M IN A 10.0.1.13 +2000.example. 5M IN A 10.0.1.14 +2000.example. 5M IN A 10.0.1.15 +2000.example. 5M IN A 10.0.1.16 +2000.example. 5M IN A 10.0.1.17 +2000.example. 5M IN A 10.0.1.18 +2000.example. 5M IN A 10.0.1.19 +2000.example. 5M IN A 10.0.1.20 +2000.example. 5M IN A 10.0.1.21 +2000.example. 5M IN A 10.0.1.22 +2000.example. 5M IN A 10.0.1.23 +2000.example. 5M IN A 10.0.1.24 +2000.example. 5M IN A 10.0.1.25 +2000.example. 5M IN A 10.0.1.26 +2000.example. 5M IN A 10.0.1.27 +2000.example. 5M IN A 10.0.1.28 +2000.example. 5M IN A 10.0.1.29 +2000.example. 5M IN A 10.0.1.30 +2000.example. 5M IN A 10.0.1.31 +2000.example. 5M IN A 10.0.1.32 +2000.example. 5M IN A 10.0.1.33 +2000.example. 5M IN A 10.0.1.34 +2000.example. 5M IN A 10.0.1.35 +2000.example. 5M IN A 10.0.1.36 +2000.example. 5M IN A 10.0.1.37 +2000.example. 5M IN A 10.0.1.38 +2000.example. 5M IN A 10.0.1.39 +2000.example. 5M IN A 10.0.1.40 +2000.example. 5M IN A 10.0.1.41 +2000.example. 5M IN A 10.0.1.42 +2000.example. 5M IN A 10.0.1.43 +2000.example. 5M IN A 10.0.1.44 +2000.example. 5M IN A 10.0.1.45 +2000.example. 5M IN A 10.0.1.46 +2000.example. 5M IN A 10.0.1.47 +2000.example. 5M IN A 10.0.1.48 +2000.example. 5M IN A 10.0.1.49 +2000.example. 5M IN A 10.0.1.50 +2000.example. 5M IN A 10.0.1.51 +2000.example. 5M IN A 10.0.1.52 +2000.example. 5M IN A 10.0.1.53 +2000.example. 5M IN A 10.0.1.54 +2000.example. 5M IN A 10.0.1.55 +2000.example. 5M IN A 10.0.1.56 +2000.example. 5M IN A 10.0.1.57 +2000.example. 5M IN A 10.0.1.58 +2000.example. 5M IN A 10.0.1.59 +2000.example. 5M IN A 10.0.1.60 +2000.example. 5M IN A 10.0.1.61 +2000.example. 5M IN A 10.0.1.62 +2000.example. 5M IN A 10.0.1.63 +2000.example. 5M IN A 10.0.1.64 +2000.example. 5M IN A 10.0.1.65 +2000.example. 5M IN A 10.0.1.66 +2000.example. 5M IN A 10.0.1.67 +2000.example. 5M IN A 10.0.1.68 +2000.example. 5M IN A 10.0.1.69 +2000.example. 5M IN A 10.0.1.70 +2000.example. 5M IN A 10.0.1.71 +2000.example. 5M IN A 10.0.1.72 +2000.example. 5M IN A 10.0.1.73 +2000.example. 5M IN A 10.0.1.74 +2000.example. 5M IN A 10.0.1.75 +2000.example. 5M IN A 10.0.1.76 +2000.example. 5M IN A 10.0.1.77 +2000.example. 5M IN A 10.0.1.78 +2000.example. 5M IN A 10.0.1.79 +2000.example. 5M IN A 10.0.1.80 +2000.example. 5M IN A 10.0.1.81 +2000.example. 5M IN A 10.0.1.82 +2000.example. 5M IN A 10.0.1.83 +2000.example. 5M IN A 10.0.1.84 +2000.example. 5M IN A 10.0.1.85 +2000.example. 5M IN A 10.0.1.86 +2000.example. 5M IN A 10.0.1.87 +2000.example. 5M IN A 10.0.1.88 +2000.example. 5M IN A 10.0.1.89 +2000.example. 5M IN A 10.0.1.90 +2000.example. 5M IN A 10.0.1.91 +2000.example. 5M IN A 10.0.1.92 +2000.example. 5M IN A 10.0.1.93 +2000.example. 5M IN A 10.0.1.94 +2000.example. 5M IN A 10.0.1.95 +2000.example. 5M IN A 10.0.1.96 +2000.example. 5M IN A 10.0.1.97 +2000.example. 5M IN A 10.0.1.98 +2000.example. 5M IN A 10.0.1.99 +2000.example. 5M IN A 10.0.1.100 +2000.example. 5M IN A 10.0.1.101 +2000.example. 5M IN A 10.0.1.102 +2000.example. 5M IN A 10.0.1.103 +2000.example. 5M IN A 10.0.1.104 +2000.example. 5M IN A 10.0.1.105 +2000.example. 5M IN A 10.0.1.106 +2000.example. 5M IN A 10.0.1.107 +2000.example. 5M IN A 10.0.1.108 +2000.example. 5M IN A 10.0.1.109 +2000.example. 5M IN A 10.0.1.110 +2000.example. 5M IN A 10.0.1.111 +2000.example. 5M IN A 10.0.1.112 +2000.example. 5M IN A 10.0.1.113 +2000.example. 5M IN A 10.0.1.114 +2000.example. 5M IN A 10.0.1.115 +2000.example. 5M IN A 10.0.1.116 +2000.example. 5M IN A 10.0.1.117 +2000.example. 5M IN A 10.0.1.118 +2000.example. 5M IN A 10.0.1.119 +2000.example. 5M IN A 10.0.1.120 +2000.example. 5M IN A 10.0.1.121 +2000.example. 5M IN A 10.0.1.122 +2000.example. 5M IN A 10.0.1.123 +2000.example. 5M IN A 10.0.1.124 +2000.example. 5M IN A 10.0.1.125 +2000.example. 5M IN A 10.0.1.126 +2000.example. 5M IN A 10.0.1.127 +2000.example. 5M IN A 10.0.1.128 +2000.example. 5M IN A 10.0.1.129 +2000.example. 5M IN A 10.0.1.130 +2000.example. 5M IN A 10.0.1.131 +2000.example. 5M IN A 10.0.1.132 +2000.example. 5M IN A 10.0.1.133 +2000.example. 5M IN A 10.0.1.134 +2000.example. 5M IN A 10.0.1.135 +2000.example. 5M IN A 10.0.1.136 +2000.example. 5M IN A 10.0.1.137 +2000.example. 5M IN A 10.0.1.138 +2000.example. 5M IN A 10.0.1.139 +2000.example. 5M IN A 10.0.1.140 +2000.example. 5M IN A 10.0.1.141 +2000.example. 5M IN A 10.0.1.142 +2000.example. 5M IN A 10.0.1.143 +2000.example. 5M IN A 10.0.1.144 +2000.example. 5M IN A 10.0.1.145 +2000.example. 5M IN A 10.0.1.146 +2000.example. 5M IN A 10.0.1.147 +2000.example. 5M IN A 10.0.1.148 +2000.example. 5M IN A 10.0.1.149 +2000.example. 5M IN A 10.0.1.150 +2000.example. 5M IN A 10.0.1.151 +2000.example. 5M IN A 10.0.1.152 +2000.example. 5M IN A 10.0.1.153 +2000.example. 5M IN A 10.0.1.154 +2000.example. 5M IN A 10.0.1.155 +2000.example. 5M IN A 10.0.1.156 +2000.example. 5M IN A 10.0.1.157 +2000.example. 5M IN A 10.0.1.158 +2000.example. 5M IN A 10.0.1.159 +2000.example. 5M IN A 10.0.1.160 +2000.example. 5M IN A 10.0.1.161 +2000.example. 5M IN A 10.0.1.162 +2000.example. 5M IN A 10.0.1.163 +2000.example. 5M IN A 10.0.1.164 +2000.example. 5M IN A 10.0.1.165 +2000.example. 5M IN A 10.0.1.166 +2000.example. 5M IN A 10.0.1.167 +2000.example. 5M IN A 10.0.1.168 +2000.example. 5M IN A 10.0.1.169 +2000.example. 5M IN A 10.0.1.170 +2000.example. 5M IN A 10.0.1.171 +2000.example. 5M IN A 10.0.1.172 +2000.example. 5M IN A 10.0.1.173 +2000.example. 5M IN A 10.0.1.174 +2000.example. 5M IN A 10.0.1.175 +2000.example. 5M IN A 10.0.1.176 +2000.example. 5M IN A 10.0.1.177 +2000.example. 5M IN A 10.0.1.178 +2000.example. 5M IN A 10.0.1.179 +2000.example. 5M IN A 10.0.1.180 +2000.example. 5M IN A 10.0.1.181 +2000.example. 5M IN A 10.0.1.182 +2000.example. 5M IN A 10.0.1.183 +2000.example. 5M IN A 10.0.1.184 +2000.example. 5M IN A 10.0.1.185 +2000.example. 5M IN A 10.0.1.186 +2000.example. 5M IN A 10.0.1.187 +2000.example. 5M IN A 10.0.1.188 +2000.example. 5M IN A 10.0.1.189 +2000.example. 5M IN A 10.0.1.190 +2000.example. 5M IN A 10.0.1.191 +2000.example. 5M IN A 10.0.1.192 +2000.example. 5M IN A 10.0.1.193 +2000.example. 5M IN A 10.0.1.194 +2000.example. 5M IN A 10.0.1.195 +2000.example. 5M IN A 10.0.1.196 +2000.example. 5M IN A 10.0.1.197 +2000.example. 5M IN A 10.0.1.198 +2000.example. 5M IN A 10.0.1.199 +2000.example. 5M IN A 10.0.1.200 +2000.example. 5M IN A 10.0.1.201 +2000.example. 5M IN A 10.0.1.202 +2000.example. 5M IN A 10.0.1.203 +2000.example. 5M IN A 10.0.1.204 +2000.example. 5M IN A 10.0.1.205 +2000.example. 5M IN A 10.0.1.206 +2000.example. 5M IN A 10.0.1.207 +2000.example. 5M IN A 10.0.1.208 +2000.example. 5M IN A 10.0.1.209 +2000.example. 5M IN A 10.0.1.210 +2000.example. 5M IN A 10.0.1.211 +2000.example. 5M IN A 10.0.1.212 +2000.example. 5M IN A 10.0.1.213 +2000.example. 5M IN A 10.0.1.214 +2000.example. 5M IN A 10.0.1.215 +2000.example. 5M IN A 10.0.1.216 +2000.example. 5M IN A 10.0.1.217 +2000.example. 5M IN A 10.0.1.218 +2000.example. 5M IN A 10.0.1.219 +2000.example. 5M IN A 10.0.1.220 +2000.example. 5M IN A 10.0.1.221 +2000.example. 5M IN A 10.0.1.222 +2000.example. 5M IN A 10.0.1.223 +2000.example. 5M IN A 10.0.1.224 +2000.example. 5M IN A 10.0.1.225 +2000.example. 5M IN A 10.0.1.226 +2000.example. 5M IN A 10.0.1.227 +2000.example. 5M IN A 10.0.1.228 +2000.example. 5M IN A 10.0.1.229 +2000.example. 5M IN A 10.0.1.230 +2000.example. 5M IN A 10.0.1.231 +2000.example. 5M IN A 10.0.1.232 +2000.example. 5M IN A 10.0.1.233 +2000.example. 5M IN A 10.0.1.234 +2000.example. 5M IN A 10.0.1.235 +2000.example. 5M IN A 10.0.1.236 +2000.example. 5M IN A 10.0.1.237 +2000.example. 5M IN A 10.0.1.238 +2000.example. 5M IN A 10.0.1.239 +2000.example. 5M IN A 10.0.1.240 +2000.example. 5M IN A 10.0.1.241 +2000.example. 5M IN A 10.0.1.242 +2000.example. 5M IN A 10.0.1.243 +2000.example. 5M IN A 10.0.1.244 +2000.example. 5M IN A 10.0.1.245 +2000.example. 5M IN A 10.0.1.246 +2000.example. 5M IN A 10.0.1.247 +2000.example. 5M IN A 10.0.1.248 +2000.example. 5M IN A 10.0.1.249 +2000.example. 5M IN A 10.0.1.250 +2000.example. 5M IN A 10.0.1.251 +2000.example. 5M IN A 10.0.1.252 +2000.example. 5M IN A 10.0.1.253 +2000.example. 5M IN A 10.0.1.254 +2000.example. 5M IN A 10.0.1.255 +2000.example. 5M IN A 10.0.2.0 +2000.example. 5M IN A 10.0.2.1 +2000.example. 5M IN A 10.0.2.2 +2000.example. 5M IN A 10.0.2.3 +2000.example. 5M IN A 10.0.2.4 +2000.example. 5M IN A 10.0.2.5 +2000.example. 5M IN A 10.0.2.6 +2000.example. 5M IN A 10.0.2.7 +2000.example. 5M IN A 10.0.2.8 +2000.example. 5M IN A 10.0.2.9 +2000.example. 5M IN A 10.0.2.10 +2000.example. 5M IN A 10.0.2.11 +2000.example. 5M IN A 10.0.2.12 +2000.example. 5M IN A 10.0.2.13 +2000.example. 5M IN A 10.0.2.14 +2000.example. 5M IN A 10.0.2.15 +2000.example. 5M IN A 10.0.2.16 +2000.example. 5M IN A 10.0.2.17 +2000.example. 5M IN A 10.0.2.18 +2000.example. 5M IN A 10.0.2.19 +2000.example. 5M IN A 10.0.2.20 +2000.example. 5M IN A 10.0.2.21 +2000.example. 5M IN A 10.0.2.22 +2000.example. 5M IN A 10.0.2.23 +2000.example. 5M IN A 10.0.2.24 +2000.example. 5M IN A 10.0.2.25 +2000.example. 5M IN A 10.0.2.26 +2000.example. 5M IN A 10.0.2.27 +2000.example. 5M IN A 10.0.2.28 +2000.example. 5M IN A 10.0.2.29 +2000.example. 5M IN A 10.0.2.30 +2000.example. 5M IN A 10.0.2.31 +2000.example. 5M IN A 10.0.2.32 +2000.example. 5M IN A 10.0.2.33 +2000.example. 5M IN A 10.0.2.34 +2000.example. 5M IN A 10.0.2.35 +2000.example. 5M IN A 10.0.2.36 +2000.example. 5M IN A 10.0.2.37 +2000.example. 5M IN A 10.0.2.38 +2000.example. 5M IN A 10.0.2.39 +2000.example. 5M IN A 10.0.2.40 +2000.example. 5M IN A 10.0.2.41 +2000.example. 5M IN A 10.0.2.42 +2000.example. 5M IN A 10.0.2.43 +2000.example. 5M IN A 10.0.2.44 +2000.example. 5M IN A 10.0.2.45 +2000.example. 5M IN A 10.0.2.46 +2000.example. 5M IN A 10.0.2.47 +2000.example. 5M IN A 10.0.2.48 +2000.example. 5M IN A 10.0.2.49 +2000.example. 5M IN A 10.0.2.50 +2000.example. 5M IN A 10.0.2.51 +2000.example. 5M IN A 10.0.2.52 +2000.example. 5M IN A 10.0.2.53 +2000.example. 5M IN A 10.0.2.54 +2000.example. 5M IN A 10.0.2.55 +2000.example. 5M IN A 10.0.2.56 +2000.example. 5M IN A 10.0.2.57 +2000.example. 5M IN A 10.0.2.58 +2000.example. 5M IN A 10.0.2.59 +2000.example. 5M IN A 10.0.2.60 +2000.example. 5M IN A 10.0.2.61 +2000.example. 5M IN A 10.0.2.62 +2000.example. 5M IN A 10.0.2.63 +2000.example. 5M IN A 10.0.2.64 +2000.example. 5M IN A 10.0.2.65 +2000.example. 5M IN A 10.0.2.66 +2000.example. 5M IN A 10.0.2.67 +2000.example. 5M IN A 10.0.2.68 +2000.example. 5M IN A 10.0.2.69 +2000.example. 5M IN A 10.0.2.70 +2000.example. 5M IN A 10.0.2.71 +2000.example. 5M IN A 10.0.2.72 +2000.example. 5M IN A 10.0.2.73 +2000.example. 5M IN A 10.0.2.74 +2000.example. 5M IN A 10.0.2.75 +2000.example. 5M IN A 10.0.2.76 +2000.example. 5M IN A 10.0.2.77 +2000.example. 5M IN A 10.0.2.78 +2000.example. 5M IN A 10.0.2.79 +2000.example. 5M IN A 10.0.2.80 +2000.example. 5M IN A 10.0.2.81 +2000.example. 5M IN A 10.0.2.82 +2000.example. 5M IN A 10.0.2.83 +2000.example. 5M IN A 10.0.2.84 +2000.example. 5M IN A 10.0.2.85 +2000.example. 5M IN A 10.0.2.86 +2000.example. 5M IN A 10.0.2.87 +2000.example. 5M IN A 10.0.2.88 +2000.example. 5M IN A 10.0.2.89 +2000.example. 5M IN A 10.0.2.90 +2000.example. 5M IN A 10.0.2.91 +2000.example. 5M IN A 10.0.2.92 +2000.example. 5M IN A 10.0.2.93 +2000.example. 5M IN A 10.0.2.94 +2000.example. 5M IN A 10.0.2.95 +2000.example. 5M IN A 10.0.2.96 +2000.example. 5M IN A 10.0.2.97 +2000.example. 5M IN A 10.0.2.98 +2000.example. 5M IN A 10.0.2.99 +2000.example. 5M IN A 10.0.2.100 +2000.example. 5M IN A 10.0.2.101 +2000.example. 5M IN A 10.0.2.102 +2000.example. 5M IN A 10.0.2.103 +2000.example. 5M IN A 10.0.2.104 +2000.example. 5M IN A 10.0.2.105 +2000.example. 5M IN A 10.0.2.106 +2000.example. 5M IN A 10.0.2.107 +2000.example. 5M IN A 10.0.2.108 +2000.example. 5M IN A 10.0.2.109 +2000.example. 5M IN A 10.0.2.110 +2000.example. 5M IN A 10.0.2.111 +2000.example. 5M IN A 10.0.2.112 +2000.example. 5M IN A 10.0.2.113 +2000.example. 5M IN A 10.0.2.114 +2000.example. 5M IN A 10.0.2.115 +2000.example. 5M IN A 10.0.2.116 +2000.example. 5M IN A 10.0.2.117 +2000.example. 5M IN A 10.0.2.118 +2000.example. 5M IN A 10.0.2.119 +2000.example. 5M IN A 10.0.2.120 +2000.example. 5M IN A 10.0.2.121 +2000.example. 5M IN A 10.0.2.122 +2000.example. 5M IN A 10.0.2.123 +2000.example. 5M IN A 10.0.2.124 +2000.example. 5M IN A 10.0.2.125 +2000.example. 5M IN A 10.0.2.126 +2000.example. 5M IN A 10.0.2.127 +2000.example. 5M IN A 10.0.2.128 +2000.example. 5M IN A 10.0.2.129 +2000.example. 5M IN A 10.0.2.130 +2000.example. 5M IN A 10.0.2.131 +2000.example. 5M IN A 10.0.2.132 +2000.example. 5M IN A 10.0.2.133 +2000.example. 5M IN A 10.0.2.134 +2000.example. 5M IN A 10.0.2.135 +2000.example. 5M IN A 10.0.2.136 +2000.example. 5M IN A 10.0.2.137 +2000.example. 5M IN A 10.0.2.138 +2000.example. 5M IN A 10.0.2.139 +2000.example. 5M IN A 10.0.2.140 +2000.example. 5M IN A 10.0.2.141 +2000.example. 5M IN A 10.0.2.142 +2000.example. 5M IN A 10.0.2.143 +2000.example. 5M IN A 10.0.2.144 +2000.example. 5M IN A 10.0.2.145 +2000.example. 5M IN A 10.0.2.146 +2000.example. 5M IN A 10.0.2.147 +2000.example. 5M IN A 10.0.2.148 +2000.example. 5M IN A 10.0.2.149 +2000.example. 5M IN A 10.0.2.150 +2000.example. 5M IN A 10.0.2.151 +2000.example. 5M IN A 10.0.2.152 +2000.example. 5M IN A 10.0.2.153 +2000.example. 5M IN A 10.0.2.154 +2000.example. 5M IN A 10.0.2.155 +2000.example. 5M IN A 10.0.2.156 +2000.example. 5M IN A 10.0.2.157 +2000.example. 5M IN A 10.0.2.158 +2000.example. 5M IN A 10.0.2.159 +2000.example. 5M IN A 10.0.2.160 +2000.example. 5M IN A 10.0.2.161 +2000.example. 5M IN A 10.0.2.162 +2000.example. 5M IN A 10.0.2.163 +2000.example. 5M IN A 10.0.2.164 +2000.example. 5M IN A 10.0.2.165 +2000.example. 5M IN A 10.0.2.166 +2000.example. 5M IN A 10.0.2.167 +2000.example. 5M IN A 10.0.2.168 +2000.example. 5M IN A 10.0.2.169 +2000.example. 5M IN A 10.0.2.170 +2000.example. 5M IN A 10.0.2.171 +2000.example. 5M IN A 10.0.2.172 +2000.example. 5M IN A 10.0.2.173 +2000.example. 5M IN A 10.0.2.174 +2000.example. 5M IN A 10.0.2.175 +2000.example. 5M IN A 10.0.2.176 +2000.example. 5M IN A 10.0.2.177 +2000.example. 5M IN A 10.0.2.178 +2000.example. 5M IN A 10.0.2.179 +2000.example. 5M IN A 10.0.2.180 +2000.example. 5M IN A 10.0.2.181 +2000.example. 5M IN A 10.0.2.182 +2000.example. 5M IN A 10.0.2.183 +2000.example. 5M IN A 10.0.2.184 +2000.example. 5M IN A 10.0.2.185 +2000.example. 5M IN A 10.0.2.186 +2000.example. 5M IN A 10.0.2.187 +2000.example. 5M IN A 10.0.2.188 +2000.example. 5M IN A 10.0.2.189 +2000.example. 5M IN A 10.0.2.190 +2000.example. 5M IN A 10.0.2.191 +2000.example. 5M IN A 10.0.2.192 +2000.example. 5M IN A 10.0.2.193 +2000.example. 5M IN A 10.0.2.194 +2000.example. 5M IN A 10.0.2.195 +2000.example. 5M IN A 10.0.2.196 +2000.example. 5M IN A 10.0.2.197 +2000.example. 5M IN A 10.0.2.198 +2000.example. 5M IN A 10.0.2.199 +2000.example. 5M IN A 10.0.2.200 +2000.example. 5M IN A 10.0.2.201 +2000.example. 5M IN A 10.0.2.202 +2000.example. 5M IN A 10.0.2.203 +2000.example. 5M IN A 10.0.2.204 +2000.example. 5M IN A 10.0.2.205 +2000.example. 5M IN A 10.0.2.206 +2000.example. 5M IN A 10.0.2.207 +2000.example. 5M IN A 10.0.2.208 +2000.example. 5M IN A 10.0.2.209 +2000.example. 5M IN A 10.0.2.210 +2000.example. 5M IN A 10.0.2.211 +2000.example. 5M IN A 10.0.2.212 +2000.example. 5M IN A 10.0.2.213 +2000.example. 5M IN A 10.0.2.214 +2000.example. 5M IN A 10.0.2.215 +2000.example. 5M IN A 10.0.2.216 +2000.example. 5M IN A 10.0.2.217 +2000.example. 5M IN A 10.0.2.218 +2000.example. 5M IN A 10.0.2.219 +2000.example. 5M IN A 10.0.2.220 +2000.example. 5M IN A 10.0.2.221 +2000.example. 5M IN A 10.0.2.222 +2000.example. 5M IN A 10.0.2.223 +2000.example. 5M IN A 10.0.2.224 +2000.example. 5M IN A 10.0.2.225 +2000.example. 5M IN A 10.0.2.226 +2000.example. 5M IN A 10.0.2.227 +2000.example. 5M IN A 10.0.2.228 +2000.example. 5M IN A 10.0.2.229 +2000.example. 5M IN A 10.0.2.230 +2000.example. 5M IN A 10.0.2.231 +2000.example. 5M IN A 10.0.2.232 +2000.example. 5M IN A 10.0.2.233 +2000.example. 5M IN A 10.0.2.234 +2000.example. 5M IN A 10.0.2.235 +2000.example. 5M IN A 10.0.2.236 +2000.example. 5M IN A 10.0.2.237 +2000.example. 5M IN A 10.0.2.238 +2000.example. 5M IN A 10.0.2.239 +2000.example. 5M IN A 10.0.2.240 +2000.example. 5M IN A 10.0.2.241 +2000.example. 5M IN A 10.0.2.242 +2000.example. 5M IN A 10.0.2.243 +2000.example. 5M IN A 10.0.2.244 +2000.example. 5M IN A 10.0.2.245 +2000.example. 5M IN A 10.0.2.246 +2000.example. 5M IN A 10.0.2.247 +2000.example. 5M IN A 10.0.2.248 +2000.example. 5M IN A 10.0.2.249 +2000.example. 5M IN A 10.0.2.250 +2000.example. 5M IN A 10.0.2.251 +2000.example. 5M IN A 10.0.2.252 +2000.example. 5M IN A 10.0.2.253 +2000.example. 5M IN A 10.0.2.254 +2000.example. 5M IN A 10.0.2.255 +2000.example. 5M IN A 10.0.3.0 +2000.example. 5M IN A 10.0.3.1 +2000.example. 5M IN A 10.0.3.2 +2000.example. 5M IN A 10.0.3.3 +2000.example. 5M IN A 10.0.3.4 +2000.example. 5M IN A 10.0.3.5 +2000.example. 5M IN A 10.0.3.6 +2000.example. 5M IN A 10.0.3.7 +2000.example. 5M IN A 10.0.3.8 +2000.example. 5M IN A 10.0.3.9 +2000.example. 5M IN A 10.0.3.10 +2000.example. 5M IN A 10.0.3.11 +2000.example. 5M IN A 10.0.3.12 +2000.example. 5M IN A 10.0.3.13 +2000.example. 5M IN A 10.0.3.14 +2000.example. 5M IN A 10.0.3.15 +2000.example. 5M IN A 10.0.3.16 +2000.example. 5M IN A 10.0.3.17 +2000.example. 5M IN A 10.0.3.18 +2000.example. 5M IN A 10.0.3.19 +2000.example. 5M IN A 10.0.3.20 +2000.example. 5M IN A 10.0.3.21 +2000.example. 5M IN A 10.0.3.22 +2000.example. 5M IN A 10.0.3.23 +2000.example. 5M IN A 10.0.3.24 +2000.example. 5M IN A 10.0.3.25 +2000.example. 5M IN A 10.0.3.26 +2000.example. 5M IN A 10.0.3.27 +2000.example. 5M IN A 10.0.3.28 +2000.example. 5M IN A 10.0.3.29 +2000.example. 5M IN A 10.0.3.30 +2000.example. 5M IN A 10.0.3.31 +2000.example. 5M IN A 10.0.3.32 +2000.example. 5M IN A 10.0.3.33 +2000.example. 5M IN A 10.0.3.34 +2000.example. 5M IN A 10.0.3.35 +2000.example. 5M IN A 10.0.3.36 +2000.example. 5M IN A 10.0.3.37 +2000.example. 5M IN A 10.0.3.38 +2000.example. 5M IN A 10.0.3.39 +2000.example. 5M IN A 10.0.3.40 +2000.example. 5M IN A 10.0.3.41 +2000.example. 5M IN A 10.0.3.42 +2000.example. 5M IN A 10.0.3.43 +2000.example. 5M IN A 10.0.3.44 +2000.example. 5M IN A 10.0.3.45 +2000.example. 5M IN A 10.0.3.46 +2000.example. 5M IN A 10.0.3.47 +2000.example. 5M IN A 10.0.3.48 +2000.example. 5M IN A 10.0.3.49 +2000.example. 5M IN A 10.0.3.50 +2000.example. 5M IN A 10.0.3.51 +2000.example. 5M IN A 10.0.3.52 +2000.example. 5M IN A 10.0.3.53 +2000.example. 5M IN A 10.0.3.54 +2000.example. 5M IN A 10.0.3.55 +2000.example. 5M IN A 10.0.3.56 +2000.example. 5M IN A 10.0.3.57 +2000.example. 5M IN A 10.0.3.58 +2000.example. 5M IN A 10.0.3.59 +2000.example. 5M IN A 10.0.3.60 +2000.example. 5M IN A 10.0.3.61 +2000.example. 5M IN A 10.0.3.62 +2000.example. 5M IN A 10.0.3.63 +2000.example. 5M IN A 10.0.3.64 +2000.example. 5M IN A 10.0.3.65 +2000.example. 5M IN A 10.0.3.66 +2000.example. 5M IN A 10.0.3.67 +2000.example. 5M IN A 10.0.3.68 +2000.example. 5M IN A 10.0.3.69 +2000.example. 5M IN A 10.0.3.70 +2000.example. 5M IN A 10.0.3.71 +2000.example. 5M IN A 10.0.3.72 +2000.example. 5M IN A 10.0.3.73 +2000.example. 5M IN A 10.0.3.74 +2000.example. 5M IN A 10.0.3.75 +2000.example. 5M IN A 10.0.3.76 +2000.example. 5M IN A 10.0.3.77 +2000.example. 5M IN A 10.0.3.78 +2000.example. 5M IN A 10.0.3.79 +2000.example. 5M IN A 10.0.3.80 +2000.example. 5M IN A 10.0.3.81 +2000.example. 5M IN A 10.0.3.82 +2000.example. 5M IN A 10.0.3.83 +2000.example. 5M IN A 10.0.3.84 +2000.example. 5M IN A 10.0.3.85 +2000.example. 5M IN A 10.0.3.86 +2000.example. 5M IN A 10.0.3.87 +2000.example. 5M IN A 10.0.3.88 +2000.example. 5M IN A 10.0.3.89 +2000.example. 5M IN A 10.0.3.90 +2000.example. 5M IN A 10.0.3.91 +2000.example. 5M IN A 10.0.3.92 +2000.example. 5M IN A 10.0.3.93 +2000.example. 5M IN A 10.0.3.94 +2000.example. 5M IN A 10.0.3.95 +2000.example. 5M IN A 10.0.3.96 +2000.example. 5M IN A 10.0.3.97 +2000.example. 5M IN A 10.0.3.98 +2000.example. 5M IN A 10.0.3.99 +2000.example. 5M IN A 10.0.3.100 +2000.example. 5M IN A 10.0.3.101 +2000.example. 5M IN A 10.0.3.102 +2000.example. 5M IN A 10.0.3.103 +2000.example. 5M IN A 10.0.3.104 +2000.example. 5M IN A 10.0.3.105 +2000.example. 5M IN A 10.0.3.106 +2000.example. 5M IN A 10.0.3.107 +2000.example. 5M IN A 10.0.3.108 +2000.example. 5M IN A 10.0.3.109 +2000.example. 5M IN A 10.0.3.110 +2000.example. 5M IN A 10.0.3.111 +2000.example. 5M IN A 10.0.3.112 +2000.example. 5M IN A 10.0.3.113 +2000.example. 5M IN A 10.0.3.114 +2000.example. 5M IN A 10.0.3.115 +2000.example. 5M IN A 10.0.3.116 +2000.example. 5M IN A 10.0.3.117 +2000.example. 5M IN A 10.0.3.118 +2000.example. 5M IN A 10.0.3.119 +2000.example. 5M IN A 10.0.3.120 +2000.example. 5M IN A 10.0.3.121 +2000.example. 5M IN A 10.0.3.122 +2000.example. 5M IN A 10.0.3.123 +2000.example. 5M IN A 10.0.3.124 +2000.example. 5M IN A 10.0.3.125 +2000.example. 5M IN A 10.0.3.126 +2000.example. 5M IN A 10.0.3.127 +2000.example. 5M IN A 10.0.3.128 +2000.example. 5M IN A 10.0.3.129 +2000.example. 5M IN A 10.0.3.130 +2000.example. 5M IN A 10.0.3.131 +2000.example. 5M IN A 10.0.3.132 +2000.example. 5M IN A 10.0.3.133 +2000.example. 5M IN A 10.0.3.134 +2000.example. 5M IN A 10.0.3.135 +2000.example. 5M IN A 10.0.3.136 +2000.example. 5M IN A 10.0.3.137 +2000.example. 5M IN A 10.0.3.138 +2000.example. 5M IN A 10.0.3.139 +2000.example. 5M IN A 10.0.3.140 +2000.example. 5M IN A 10.0.3.141 +2000.example. 5M IN A 10.0.3.142 +2000.example. 5M IN A 10.0.3.143 +2000.example. 5M IN A 10.0.3.144 +2000.example. 5M IN A 10.0.3.145 +2000.example. 5M IN A 10.0.3.146 +2000.example. 5M IN A 10.0.3.147 +2000.example. 5M IN A 10.0.3.148 +2000.example. 5M IN A 10.0.3.149 +2000.example. 5M IN A 10.0.3.150 +2000.example. 5M IN A 10.0.3.151 +2000.example. 5M IN A 10.0.3.152 +2000.example. 5M IN A 10.0.3.153 +2000.example. 5M IN A 10.0.3.154 +2000.example. 5M IN A 10.0.3.155 +2000.example. 5M IN A 10.0.3.156 +2000.example. 5M IN A 10.0.3.157 +2000.example. 5M IN A 10.0.3.158 +2000.example. 5M IN A 10.0.3.159 +2000.example. 5M IN A 10.0.3.160 +2000.example. 5M IN A 10.0.3.161 +2000.example. 5M IN A 10.0.3.162 +2000.example. 5M IN A 10.0.3.163 +2000.example. 5M IN A 10.0.3.164 +2000.example. 5M IN A 10.0.3.165 +2000.example. 5M IN A 10.0.3.166 +2000.example. 5M IN A 10.0.3.167 +2000.example. 5M IN A 10.0.3.168 +2000.example. 5M IN A 10.0.3.169 +2000.example. 5M IN A 10.0.3.170 +2000.example. 5M IN A 10.0.3.171 +2000.example. 5M IN A 10.0.3.172 +2000.example. 5M IN A 10.0.3.173 +2000.example. 5M IN A 10.0.3.174 +2000.example. 5M IN A 10.0.3.175 +2000.example. 5M IN A 10.0.3.176 +2000.example. 5M IN A 10.0.3.177 +2000.example. 5M IN A 10.0.3.178 +2000.example. 5M IN A 10.0.3.179 +2000.example. 5M IN A 10.0.3.180 +2000.example. 5M IN A 10.0.3.181 +2000.example. 5M IN A 10.0.3.182 +2000.example. 5M IN A 10.0.3.183 +2000.example. 5M IN A 10.0.3.184 +2000.example. 5M IN A 10.0.3.185 +2000.example. 5M IN A 10.0.3.186 +2000.example. 5M IN A 10.0.3.187 +2000.example. 5M IN A 10.0.3.188 +2000.example. 5M IN A 10.0.3.189 +2000.example. 5M IN A 10.0.3.190 +2000.example. 5M IN A 10.0.3.191 +2000.example. 5M IN A 10.0.3.192 +2000.example. 5M IN A 10.0.3.193 +2000.example. 5M IN A 10.0.3.194 +2000.example. 5M IN A 10.0.3.195 +2000.example. 5M IN A 10.0.3.196 +2000.example. 5M IN A 10.0.3.197 +2000.example. 5M IN A 10.0.3.198 +2000.example. 5M IN A 10.0.3.199 +2000.example. 5M IN A 10.0.3.200 +2000.example. 5M IN A 10.0.3.201 +2000.example. 5M IN A 10.0.3.202 +2000.example. 5M IN A 10.0.3.203 +2000.example. 5M IN A 10.0.3.204 +2000.example. 5M IN A 10.0.3.205 +2000.example. 5M IN A 10.0.3.206 +2000.example. 5M IN A 10.0.3.207 +2000.example. 5M IN A 10.0.3.208 +2000.example. 5M IN A 10.0.3.209 +2000.example. 5M IN A 10.0.3.210 +2000.example. 5M IN A 10.0.3.211 +2000.example. 5M IN A 10.0.3.212 +2000.example. 5M IN A 10.0.3.213 +2000.example. 5M IN A 10.0.3.214 +2000.example. 5M IN A 10.0.3.215 +2000.example. 5M IN A 10.0.3.216 +2000.example. 5M IN A 10.0.3.217 +2000.example. 5M IN A 10.0.3.218 +2000.example. 5M IN A 10.0.3.219 +2000.example. 5M IN A 10.0.3.220 +2000.example. 5M IN A 10.0.3.221 +2000.example. 5M IN A 10.0.3.222 +2000.example. 5M IN A 10.0.3.223 +2000.example. 5M IN A 10.0.3.224 +2000.example. 5M IN A 10.0.3.225 +2000.example. 5M IN A 10.0.3.226 +2000.example. 5M IN A 10.0.3.227 +2000.example. 5M IN A 10.0.3.228 +2000.example. 5M IN A 10.0.3.229 +2000.example. 5M IN A 10.0.3.230 +2000.example. 5M IN A 10.0.3.231 +2000.example. 5M IN A 10.0.3.232 +2000.example. 5M IN A 10.0.3.233 +2000.example. 5M IN A 10.0.3.234 +2000.example. 5M IN A 10.0.3.235 +2000.example. 5M IN A 10.0.3.236 +2000.example. 5M IN A 10.0.3.237 +2000.example. 5M IN A 10.0.3.238 +2000.example. 5M IN A 10.0.3.239 +2000.example. 5M IN A 10.0.3.240 +2000.example. 5M IN A 10.0.3.241 +2000.example. 5M IN A 10.0.3.242 +2000.example. 5M IN A 10.0.3.243 +2000.example. 5M IN A 10.0.3.244 +2000.example. 5M IN A 10.0.3.245 +2000.example. 5M IN A 10.0.3.246 +2000.example. 5M IN A 10.0.3.247 +2000.example. 5M IN A 10.0.3.248 +2000.example. 5M IN A 10.0.3.249 +2000.example. 5M IN A 10.0.3.250 +2000.example. 5M IN A 10.0.3.251 +2000.example. 5M IN A 10.0.3.252 +2000.example. 5M IN A 10.0.3.253 +2000.example. 5M IN A 10.0.3.254 +2000.example. 5M IN A 10.0.3.255 +2000.example. 5M IN A 10.0.4.0 +2000.example. 5M IN A 10.0.4.1 +2000.example. 5M IN A 10.0.4.2 +2000.example. 5M IN A 10.0.4.3 +2000.example. 5M IN A 10.0.4.4 +2000.example. 5M IN A 10.0.4.5 +2000.example. 5M IN A 10.0.4.6 +2000.example. 5M IN A 10.0.4.7 +2000.example. 5M IN A 10.0.4.8 +2000.example. 5M IN A 10.0.4.9 +2000.example. 5M IN A 10.0.4.10 +2000.example. 5M IN A 10.0.4.11 +2000.example. 5M IN A 10.0.4.12 +2000.example. 5M IN A 10.0.4.13 +2000.example. 5M IN A 10.0.4.14 +2000.example. 5M IN A 10.0.4.15 +2000.example. 5M IN A 10.0.4.16 +2000.example. 5M IN A 10.0.4.17 +2000.example. 5M IN A 10.0.4.18 +2000.example. 5M IN A 10.0.4.19 +2000.example. 5M IN A 10.0.4.20 +2000.example. 5M IN A 10.0.4.21 +2000.example. 5M IN A 10.0.4.22 +2000.example. 5M IN A 10.0.4.23 +2000.example. 5M IN A 10.0.4.24 +2000.example. 5M IN A 10.0.4.25 +2000.example. 5M IN A 10.0.4.26 +2000.example. 5M IN A 10.0.4.27 +2000.example. 5M IN A 10.0.4.28 +2000.example. 5M IN A 10.0.4.29 +2000.example. 5M IN A 10.0.4.30 +2000.example. 5M IN A 10.0.4.31 +2000.example. 5M IN A 10.0.4.32 +2000.example. 5M IN A 10.0.4.33 +2000.example. 5M IN A 10.0.4.34 +2000.example. 5M IN A 10.0.4.35 +2000.example. 5M IN A 10.0.4.36 +2000.example. 5M IN A 10.0.4.37 +2000.example. 5M IN A 10.0.4.38 +2000.example. 5M IN A 10.0.4.39 +2000.example. 5M IN A 10.0.4.40 +2000.example. 5M IN A 10.0.4.41 +2000.example. 5M IN A 10.0.4.42 +2000.example. 5M IN A 10.0.4.43 +2000.example. 5M IN A 10.0.4.44 +2000.example. 5M IN A 10.0.4.45 +2000.example. 5M IN A 10.0.4.46 +2000.example. 5M IN A 10.0.4.47 +2000.example. 5M IN A 10.0.4.48 +2000.example. 5M IN A 10.0.4.49 +2000.example. 5M IN A 10.0.4.50 +2000.example. 5M IN A 10.0.4.51 +2000.example. 5M IN A 10.0.4.52 +2000.example. 5M IN A 10.0.4.53 +2000.example. 5M IN A 10.0.4.54 +2000.example. 5M IN A 10.0.4.55 +2000.example. 5M IN A 10.0.4.56 +2000.example. 5M IN A 10.0.4.57 +2000.example. 5M IN A 10.0.4.58 +2000.example. 5M IN A 10.0.4.59 +2000.example. 5M IN A 10.0.4.60 +2000.example. 5M IN A 10.0.4.61 +2000.example. 5M IN A 10.0.4.62 +2000.example. 5M IN A 10.0.4.63 +2000.example. 5M IN A 10.0.4.64 +2000.example. 5M IN A 10.0.4.65 +2000.example. 5M IN A 10.0.4.66 +2000.example. 5M IN A 10.0.4.67 +2000.example. 5M IN A 10.0.4.68 +2000.example. 5M IN A 10.0.4.69 +2000.example. 5M IN A 10.0.4.70 +2000.example. 5M IN A 10.0.4.71 +2000.example. 5M IN A 10.0.4.72 +2000.example. 5M IN A 10.0.4.73 +2000.example. 5M IN A 10.0.4.74 +2000.example. 5M IN A 10.0.4.75 +2000.example. 5M IN A 10.0.4.76 +2000.example. 5M IN A 10.0.4.77 +2000.example. 5M IN A 10.0.4.78 +2000.example. 5M IN A 10.0.4.79 +2000.example. 5M IN A 10.0.4.80 +2000.example. 5M IN A 10.0.4.81 +2000.example. 5M IN A 10.0.4.82 +2000.example. 5M IN A 10.0.4.83 +2000.example. 5M IN A 10.0.4.84 +2000.example. 5M IN A 10.0.4.85 +2000.example. 5M IN A 10.0.4.86 +2000.example. 5M IN A 10.0.4.87 +2000.example. 5M IN A 10.0.4.88 +2000.example. 5M IN A 10.0.4.89 +2000.example. 5M IN A 10.0.4.90 +2000.example. 5M IN A 10.0.4.91 +2000.example. 5M IN A 10.0.4.92 +2000.example. 5M IN A 10.0.4.93 +2000.example. 5M IN A 10.0.4.94 +2000.example. 5M IN A 10.0.4.95 +2000.example. 5M IN A 10.0.4.96 +2000.example. 5M IN A 10.0.4.97 +2000.example. 5M IN A 10.0.4.98 +2000.example. 5M IN A 10.0.4.99 +2000.example. 5M IN A 10.0.4.100 +2000.example. 5M IN A 10.0.4.101 +2000.example. 5M IN A 10.0.4.102 +2000.example. 5M IN A 10.0.4.103 +2000.example. 5M IN A 10.0.4.104 +2000.example. 5M IN A 10.0.4.105 +2000.example. 5M IN A 10.0.4.106 +2000.example. 5M IN A 10.0.4.107 +2000.example. 5M IN A 10.0.4.108 +2000.example. 5M IN A 10.0.4.109 +2000.example. 5M IN A 10.0.4.110 +2000.example. 5M IN A 10.0.4.111 +2000.example. 5M IN A 10.0.4.112 +2000.example. 5M IN A 10.0.4.113 +2000.example. 5M IN A 10.0.4.114 +2000.example. 5M IN A 10.0.4.115 +2000.example. 5M IN A 10.0.4.116 +2000.example. 5M IN A 10.0.4.117 +2000.example. 5M IN A 10.0.4.118 +2000.example. 5M IN A 10.0.4.119 +2000.example. 5M IN A 10.0.4.120 +2000.example. 5M IN A 10.0.4.121 +2000.example. 5M IN A 10.0.4.122 +2000.example. 5M IN A 10.0.4.123 +2000.example. 5M IN A 10.0.4.124 +2000.example. 5M IN A 10.0.4.125 +2000.example. 5M IN A 10.0.4.126 +2000.example. 5M IN A 10.0.4.127 +2000.example. 5M IN A 10.0.4.128 +2000.example. 5M IN A 10.0.4.129 +2000.example. 5M IN A 10.0.4.130 +2000.example. 5M IN A 10.0.4.131 +2000.example. 5M IN A 10.0.4.132 +2000.example. 5M IN A 10.0.4.133 +2000.example. 5M IN A 10.0.4.134 +2000.example. 5M IN A 10.0.4.135 +2000.example. 5M IN A 10.0.4.136 +2000.example. 5M IN A 10.0.4.137 +2000.example. 5M IN A 10.0.4.138 +2000.example. 5M IN A 10.0.4.139 +2000.example. 5M IN A 10.0.4.140 +2000.example. 5M IN A 10.0.4.141 +2000.example. 5M IN A 10.0.4.142 +2000.example. 5M IN A 10.0.4.143 +2000.example. 5M IN A 10.0.4.144 +2000.example. 5M IN A 10.0.4.145 +2000.example. 5M IN A 10.0.4.146 +2000.example. 5M IN A 10.0.4.147 +2000.example. 5M IN A 10.0.4.148 +2000.example. 5M IN A 10.0.4.149 +2000.example. 5M IN A 10.0.4.150 +2000.example. 5M IN A 10.0.4.151 +2000.example. 5M IN A 10.0.4.152 +2000.example. 5M IN A 10.0.4.153 +2000.example. 5M IN A 10.0.4.154 +2000.example. 5M IN A 10.0.4.155 +2000.example. 5M IN A 10.0.4.156 +2000.example. 5M IN A 10.0.4.157 +2000.example. 5M IN A 10.0.4.158 +2000.example. 5M IN A 10.0.4.159 +2000.example. 5M IN A 10.0.4.160 +2000.example. 5M IN A 10.0.4.161 +2000.example. 5M IN A 10.0.4.162 +2000.example. 5M IN A 10.0.4.163 +2000.example. 5M IN A 10.0.4.164 +2000.example. 5M IN A 10.0.4.165 +2000.example. 5M IN A 10.0.4.166 +2000.example. 5M IN A 10.0.4.167 +2000.example. 5M IN A 10.0.4.168 +2000.example. 5M IN A 10.0.4.169 +2000.example. 5M IN A 10.0.4.170 +2000.example. 5M IN A 10.0.4.171 +2000.example. 5M IN A 10.0.4.172 +2000.example. 5M IN A 10.0.4.173 +2000.example. 5M IN A 10.0.4.174 +2000.example. 5M IN A 10.0.4.175 +2000.example. 5M IN A 10.0.4.176 +2000.example. 5M IN A 10.0.4.177 +2000.example. 5M IN A 10.0.4.178 +2000.example. 5M IN A 10.0.4.179 +2000.example. 5M IN A 10.0.4.180 +2000.example. 5M IN A 10.0.4.181 +2000.example. 5M IN A 10.0.4.182 +2000.example. 5M IN A 10.0.4.183 +2000.example. 5M IN A 10.0.4.184 +2000.example. 5M IN A 10.0.4.185 +2000.example. 5M IN A 10.0.4.186 +2000.example. 5M IN A 10.0.4.187 +2000.example. 5M IN A 10.0.4.188 +2000.example. 5M IN A 10.0.4.189 +2000.example. 5M IN A 10.0.4.190 +2000.example. 5M IN A 10.0.4.191 +2000.example. 5M IN A 10.0.4.192 +2000.example. 5M IN A 10.0.4.193 +2000.example. 5M IN A 10.0.4.194 +2000.example. 5M IN A 10.0.4.195 +2000.example. 5M IN A 10.0.4.196 +2000.example. 5M IN A 10.0.4.197 +2000.example. 5M IN A 10.0.4.198 +2000.example. 5M IN A 10.0.4.199 +2000.example. 5M IN A 10.0.4.200 +2000.example. 5M IN A 10.0.4.201 +2000.example. 5M IN A 10.0.4.202 +2000.example. 5M IN A 10.0.4.203 +2000.example. 5M IN A 10.0.4.204 +2000.example. 5M IN A 10.0.4.205 +2000.example. 5M IN A 10.0.4.206 +2000.example. 5M IN A 10.0.4.207 +2000.example. 5M IN A 10.0.4.208 +2000.example. 5M IN A 10.0.4.209 +2000.example. 5M IN A 10.0.4.210 +2000.example. 5M IN A 10.0.4.211 +2000.example. 5M IN A 10.0.4.212 +2000.example. 5M IN A 10.0.4.213 +2000.example. 5M IN A 10.0.4.214 +2000.example. 5M IN A 10.0.4.215 +2000.example. 5M IN A 10.0.4.216 +2000.example. 5M IN A 10.0.4.217 +2000.example. 5M IN A 10.0.4.218 +2000.example. 5M IN A 10.0.4.219 +2000.example. 5M IN A 10.0.4.220 +2000.example. 5M IN A 10.0.4.221 +2000.example. 5M IN A 10.0.4.222 +2000.example. 5M IN A 10.0.4.223 +2000.example. 5M IN A 10.0.4.224 +2000.example. 5M IN A 10.0.4.225 +2000.example. 5M IN A 10.0.4.226 +2000.example. 5M IN A 10.0.4.227 +2000.example. 5M IN A 10.0.4.228 +2000.example. 5M IN A 10.0.4.229 +2000.example. 5M IN A 10.0.4.230 +2000.example. 5M IN A 10.0.4.231 +2000.example. 5M IN A 10.0.4.232 +2000.example. 5M IN A 10.0.4.233 +2000.example. 5M IN A 10.0.4.234 +2000.example. 5M IN A 10.0.4.235 +2000.example. 5M IN A 10.0.4.236 +2000.example. 5M IN A 10.0.4.237 +2000.example. 5M IN A 10.0.4.238 +2000.example. 5M IN A 10.0.4.239 +2000.example. 5M IN A 10.0.4.240 +2000.example. 5M IN A 10.0.4.241 +2000.example. 5M IN A 10.0.4.242 +2000.example. 5M IN A 10.0.4.243 +2000.example. 5M IN A 10.0.4.244 +2000.example. 5M IN A 10.0.4.245 +2000.example. 5M IN A 10.0.4.246 +2000.example. 5M IN A 10.0.4.247 +2000.example. 5M IN A 10.0.4.248 +2000.example. 5M IN A 10.0.4.249 +2000.example. 5M IN A 10.0.4.250 +2000.example. 5M IN A 10.0.4.251 +2000.example. 5M IN A 10.0.4.252 +2000.example. 5M IN A 10.0.4.253 +2000.example. 5M IN A 10.0.4.254 +2000.example. 5M IN A 10.0.4.255 +2000.example. 5M IN A 10.0.5.0 +2000.example. 5M IN A 10.0.5.1 +2000.example. 5M IN A 10.0.5.2 +2000.example. 5M IN A 10.0.5.3 +2000.example. 5M IN A 10.0.5.4 +2000.example. 5M IN A 10.0.5.5 +2000.example. 5M IN A 10.0.5.6 +2000.example. 5M IN A 10.0.5.7 +2000.example. 5M IN A 10.0.5.8 +2000.example. 5M IN A 10.0.5.9 +2000.example. 5M IN A 10.0.5.10 +2000.example. 5M IN A 10.0.5.11 +2000.example. 5M IN A 10.0.5.12 +2000.example. 5M IN A 10.0.5.13 +2000.example. 5M IN A 10.0.5.14 +2000.example. 5M IN A 10.0.5.15 +2000.example. 5M IN A 10.0.5.16 +2000.example. 5M IN A 10.0.5.17 +2000.example. 5M IN A 10.0.5.18 +2000.example. 5M IN A 10.0.5.19 +2000.example. 5M IN A 10.0.5.20 +2000.example. 5M IN A 10.0.5.21 +2000.example. 5M IN A 10.0.5.22 +2000.example. 5M IN A 10.0.5.23 +2000.example. 5M IN A 10.0.5.24 +2000.example. 5M IN A 10.0.5.25 +2000.example. 5M IN A 10.0.5.26 +2000.example. 5M IN A 10.0.5.27 +2000.example. 5M IN A 10.0.5.28 +2000.example. 5M IN A 10.0.5.29 +2000.example. 5M IN A 10.0.5.30 +2000.example. 5M IN A 10.0.5.31 +2000.example. 5M IN A 10.0.5.32 +2000.example. 5M IN A 10.0.5.33 +2000.example. 5M IN A 10.0.5.34 +2000.example. 5M IN A 10.0.5.35 +2000.example. 5M IN A 10.0.5.36 +2000.example. 5M IN A 10.0.5.37 +2000.example. 5M IN A 10.0.5.38 +2000.example. 5M IN A 10.0.5.39 +2000.example. 5M IN A 10.0.5.40 +2000.example. 5M IN A 10.0.5.41 +2000.example. 5M IN A 10.0.5.42 +2000.example. 5M IN A 10.0.5.43 +2000.example. 5M IN A 10.0.5.44 +2000.example. 5M IN A 10.0.5.45 +2000.example. 5M IN A 10.0.5.46 +2000.example. 5M IN A 10.0.5.47 +2000.example. 5M IN A 10.0.5.48 +2000.example. 5M IN A 10.0.5.49 +2000.example. 5M IN A 10.0.5.50 +2000.example. 5M IN A 10.0.5.51 +2000.example. 5M IN A 10.0.5.52 +2000.example. 5M IN A 10.0.5.53 +2000.example. 5M IN A 10.0.5.54 +2000.example. 5M IN A 10.0.5.55 +2000.example. 5M IN A 10.0.5.56 +2000.example. 5M IN A 10.0.5.57 +2000.example. 5M IN A 10.0.5.58 +2000.example. 5M IN A 10.0.5.59 +2000.example. 5M IN A 10.0.5.60 +2000.example. 5M IN A 10.0.5.61 +2000.example. 5M IN A 10.0.5.62 +2000.example. 5M IN A 10.0.5.63 +2000.example. 5M IN A 10.0.5.64 +2000.example. 5M IN A 10.0.5.65 +2000.example. 5M IN A 10.0.5.66 +2000.example. 5M IN A 10.0.5.67 +2000.example. 5M IN A 10.0.5.68 +2000.example. 5M IN A 10.0.5.69 +2000.example. 5M IN A 10.0.5.70 +2000.example. 5M IN A 10.0.5.71 +2000.example. 5M IN A 10.0.5.72 +2000.example. 5M IN A 10.0.5.73 +2000.example. 5M IN A 10.0.5.74 +2000.example. 5M IN A 10.0.5.75 +2000.example. 5M IN A 10.0.5.76 +2000.example. 5M IN A 10.0.5.77 +2000.example. 5M IN A 10.0.5.78 +2000.example. 5M IN A 10.0.5.79 +2000.example. 5M IN A 10.0.5.80 +2000.example. 5M IN A 10.0.5.81 +2000.example. 5M IN A 10.0.5.82 +2000.example. 5M IN A 10.0.5.83 +2000.example. 5M IN A 10.0.5.84 +2000.example. 5M IN A 10.0.5.85 +2000.example. 5M IN A 10.0.5.86 +2000.example. 5M IN A 10.0.5.87 +2000.example. 5M IN A 10.0.5.88 +2000.example. 5M IN A 10.0.5.89 +2000.example. 5M IN A 10.0.5.90 +2000.example. 5M IN A 10.0.5.91 +2000.example. 5M IN A 10.0.5.92 +2000.example. 5M IN A 10.0.5.93 +2000.example. 5M IN A 10.0.5.94 +2000.example. 5M IN A 10.0.5.95 +2000.example. 5M IN A 10.0.5.96 +2000.example. 5M IN A 10.0.5.97 +2000.example. 5M IN A 10.0.5.98 +2000.example. 5M IN A 10.0.5.99 +2000.example. 5M IN A 10.0.5.100 +2000.example. 5M IN A 10.0.5.101 +2000.example. 5M IN A 10.0.5.102 +2000.example. 5M IN A 10.0.5.103 +2000.example. 5M IN A 10.0.5.104 +2000.example. 5M IN A 10.0.5.105 +2000.example. 5M IN A 10.0.5.106 +2000.example. 5M IN A 10.0.5.107 +2000.example. 5M IN A 10.0.5.108 +2000.example. 5M IN A 10.0.5.109 +2000.example. 5M IN A 10.0.5.110 +2000.example. 5M IN A 10.0.5.111 +2000.example. 5M IN A 10.0.5.112 +2000.example. 5M IN A 10.0.5.113 +2000.example. 5M IN A 10.0.5.114 +2000.example. 5M IN A 10.0.5.115 +2000.example. 5M IN A 10.0.5.116 +2000.example. 5M IN A 10.0.5.117 +2000.example. 5M IN A 10.0.5.118 +2000.example. 5M IN A 10.0.5.119 +2000.example. 5M IN A 10.0.5.120 +2000.example. 5M IN A 10.0.5.121 +2000.example. 5M IN A 10.0.5.122 +2000.example. 5M IN A 10.0.5.123 +2000.example. 5M IN A 10.0.5.124 +2000.example. 5M IN A 10.0.5.125 +2000.example. 5M IN A 10.0.5.126 +2000.example. 5M IN A 10.0.5.127 +2000.example. 5M IN A 10.0.5.128 +2000.example. 5M IN A 10.0.5.129 +2000.example. 5M IN A 10.0.5.130 +2000.example. 5M IN A 10.0.5.131 +2000.example. 5M IN A 10.0.5.132 +2000.example. 5M IN A 10.0.5.133 +2000.example. 5M IN A 10.0.5.134 +2000.example. 5M IN A 10.0.5.135 +2000.example. 5M IN A 10.0.5.136 +2000.example. 5M IN A 10.0.5.137 +2000.example. 5M IN A 10.0.5.138 +2000.example. 5M IN A 10.0.5.139 +2000.example. 5M IN A 10.0.5.140 +2000.example. 5M IN A 10.0.5.141 +2000.example. 5M IN A 10.0.5.142 +2000.example. 5M IN A 10.0.5.143 +2000.example. 5M IN A 10.0.5.144 +2000.example. 5M IN A 10.0.5.145 +2000.example. 5M IN A 10.0.5.146 +2000.example. 5M IN A 10.0.5.147 +2000.example. 5M IN A 10.0.5.148 +2000.example. 5M IN A 10.0.5.149 +2000.example. 5M IN A 10.0.5.150 +2000.example. 5M IN A 10.0.5.151 +2000.example. 5M IN A 10.0.5.152 +2000.example. 5M IN A 10.0.5.153 +2000.example. 5M IN A 10.0.5.154 +2000.example. 5M IN A 10.0.5.155 +2000.example. 5M IN A 10.0.5.156 +2000.example. 5M IN A 10.0.5.157 +2000.example. 5M IN A 10.0.5.158 +2000.example. 5M IN A 10.0.5.159 +2000.example. 5M IN A 10.0.5.160 +2000.example. 5M IN A 10.0.5.161 +2000.example. 5M IN A 10.0.5.162 +2000.example. 5M IN A 10.0.5.163 +2000.example. 5M IN A 10.0.5.164 +2000.example. 5M IN A 10.0.5.165 +2000.example. 5M IN A 10.0.5.166 +2000.example. 5M IN A 10.0.5.167 +2000.example. 5M IN A 10.0.5.168 +2000.example. 5M IN A 10.0.5.169 +2000.example. 5M IN A 10.0.5.170 +2000.example. 5M IN A 10.0.5.171 +2000.example. 5M IN A 10.0.5.172 +2000.example. 5M IN A 10.0.5.173 +2000.example. 5M IN A 10.0.5.174 +2000.example. 5M IN A 10.0.5.175 +2000.example. 5M IN A 10.0.5.176 +2000.example. 5M IN A 10.0.5.177 +2000.example. 5M IN A 10.0.5.178 +2000.example. 5M IN A 10.0.5.179 +2000.example. 5M IN A 10.0.5.180 +2000.example. 5M IN A 10.0.5.181 +2000.example. 5M IN A 10.0.5.182 +2000.example. 5M IN A 10.0.5.183 +2000.example. 5M IN A 10.0.5.184 +2000.example. 5M IN A 10.0.5.185 +2000.example. 5M IN A 10.0.5.186 +2000.example. 5M IN A 10.0.5.187 +2000.example. 5M IN A 10.0.5.188 +2000.example. 5M IN A 10.0.5.189 +2000.example. 5M IN A 10.0.5.190 +2000.example. 5M IN A 10.0.5.191 +2000.example. 5M IN A 10.0.5.192 +2000.example. 5M IN A 10.0.5.193 +2000.example. 5M IN A 10.0.5.194 +2000.example. 5M IN A 10.0.5.195 +2000.example. 5M IN A 10.0.5.196 +2000.example. 5M IN A 10.0.5.197 +2000.example. 5M IN A 10.0.5.198 +2000.example. 5M IN A 10.0.5.199 +2000.example. 5M IN A 10.0.5.200 +2000.example. 5M IN A 10.0.5.201 +2000.example. 5M IN A 10.0.5.202 +2000.example. 5M IN A 10.0.5.203 +2000.example. 5M IN A 10.0.5.204 +2000.example. 5M IN A 10.0.5.205 +2000.example. 5M IN A 10.0.5.206 +2000.example. 5M IN A 10.0.5.207 +2000.example. 5M IN A 10.0.5.208 +2000.example. 5M IN A 10.0.5.209 +2000.example. 5M IN A 10.0.5.210 +2000.example. 5M IN A 10.0.5.211 +2000.example. 5M IN A 10.0.5.212 +2000.example. 5M IN A 10.0.5.213 +2000.example. 5M IN A 10.0.5.214 +2000.example. 5M IN A 10.0.5.215 +2000.example. 5M IN A 10.0.5.216 +2000.example. 5M IN A 10.0.5.217 +2000.example. 5M IN A 10.0.5.218 +2000.example. 5M IN A 10.0.5.219 +2000.example. 5M IN A 10.0.5.220 +2000.example. 5M IN A 10.0.5.221 +2000.example. 5M IN A 10.0.5.222 +2000.example. 5M IN A 10.0.5.223 +2000.example. 5M IN A 10.0.5.224 +2000.example. 5M IN A 10.0.5.225 +2000.example. 5M IN A 10.0.5.226 +2000.example. 5M IN A 10.0.5.227 +2000.example. 5M IN A 10.0.5.228 +2000.example. 5M IN A 10.0.5.229 +2000.example. 5M IN A 10.0.5.230 +2000.example. 5M IN A 10.0.5.231 +2000.example. 5M IN A 10.0.5.232 +2000.example. 5M IN A 10.0.5.233 +2000.example. 5M IN A 10.0.5.234 +2000.example. 5M IN A 10.0.5.235 +2000.example. 5M IN A 10.0.5.236 +2000.example. 5M IN A 10.0.5.237 +2000.example. 5M IN A 10.0.5.238 +2000.example. 5M IN A 10.0.5.239 +2000.example. 5M IN A 10.0.5.240 +2000.example. 5M IN A 10.0.5.241 +2000.example. 5M IN A 10.0.5.242 +2000.example. 5M IN A 10.0.5.243 +2000.example. 5M IN A 10.0.5.244 +2000.example. 5M IN A 10.0.5.245 +2000.example. 5M IN A 10.0.5.246 +2000.example. 5M IN A 10.0.5.247 +2000.example. 5M IN A 10.0.5.248 +2000.example. 5M IN A 10.0.5.249 +2000.example. 5M IN A 10.0.5.250 +2000.example. 5M IN A 10.0.5.251 +2000.example. 5M IN A 10.0.5.252 +2000.example. 5M IN A 10.0.5.253 +2000.example. 5M IN A 10.0.5.254 +2000.example. 5M IN A 10.0.5.255 +2000.example. 5M IN A 10.0.6.0 +2000.example. 5M IN A 10.0.6.1 +2000.example. 5M IN A 10.0.6.2 +2000.example. 5M IN A 10.0.6.3 +2000.example. 5M IN A 10.0.6.4 +2000.example. 5M IN A 10.0.6.5 +2000.example. 5M IN A 10.0.6.6 +2000.example. 5M IN A 10.0.6.7 +2000.example. 5M IN A 10.0.6.8 +2000.example. 5M IN A 10.0.6.9 +2000.example. 5M IN A 10.0.6.10 +2000.example. 5M IN A 10.0.6.11 +2000.example. 5M IN A 10.0.6.12 +2000.example. 5M IN A 10.0.6.13 +2000.example. 5M IN A 10.0.6.14 +2000.example. 5M IN A 10.0.6.15 +2000.example. 5M IN A 10.0.6.16 +2000.example. 5M IN A 10.0.6.17 +2000.example. 5M IN A 10.0.6.18 +2000.example. 5M IN A 10.0.6.19 +2000.example. 5M IN A 10.0.6.20 +2000.example. 5M IN A 10.0.6.21 +2000.example. 5M IN A 10.0.6.22 +2000.example. 5M IN A 10.0.6.23 +2000.example. 5M IN A 10.0.6.24 +2000.example. 5M IN A 10.0.6.25 +2000.example. 5M IN A 10.0.6.26 +2000.example. 5M IN A 10.0.6.27 +2000.example. 5M IN A 10.0.6.28 +2000.example. 5M IN A 10.0.6.29 +2000.example. 5M IN A 10.0.6.30 +2000.example. 5M IN A 10.0.6.31 +2000.example. 5M IN A 10.0.6.32 +2000.example. 5M IN A 10.0.6.33 +2000.example. 5M IN A 10.0.6.34 +2000.example. 5M IN A 10.0.6.35 +2000.example. 5M IN A 10.0.6.36 +2000.example. 5M IN A 10.0.6.37 +2000.example. 5M IN A 10.0.6.38 +2000.example. 5M IN A 10.0.6.39 +2000.example. 5M IN A 10.0.6.40 +2000.example. 5M IN A 10.0.6.41 +2000.example. 5M IN A 10.0.6.42 +2000.example. 5M IN A 10.0.6.43 +2000.example. 5M IN A 10.0.6.44 +2000.example. 5M IN A 10.0.6.45 +2000.example. 5M IN A 10.0.6.46 +2000.example. 5M IN A 10.0.6.47 +2000.example. 5M IN A 10.0.6.48 +2000.example. 5M IN A 10.0.6.49 +2000.example. 5M IN A 10.0.6.50 +2000.example. 5M IN A 10.0.6.51 +2000.example. 5M IN A 10.0.6.52 +2000.example. 5M IN A 10.0.6.53 +2000.example. 5M IN A 10.0.6.54 +2000.example. 5M IN A 10.0.6.55 +2000.example. 5M IN A 10.0.6.56 +2000.example. 5M IN A 10.0.6.57 +2000.example. 5M IN A 10.0.6.58 +2000.example. 5M IN A 10.0.6.59 +2000.example. 5M IN A 10.0.6.60 +2000.example. 5M IN A 10.0.6.61 +2000.example. 5M IN A 10.0.6.62 +2000.example. 5M IN A 10.0.6.63 +2000.example. 5M IN A 10.0.6.64 +2000.example. 5M IN A 10.0.6.65 +2000.example. 5M IN A 10.0.6.66 +2000.example. 5M IN A 10.0.6.67 +2000.example. 5M IN A 10.0.6.68 +2000.example. 5M IN A 10.0.6.69 +2000.example. 5M IN A 10.0.6.70 +2000.example. 5M IN A 10.0.6.71 +2000.example. 5M IN A 10.0.6.72 +2000.example. 5M IN A 10.0.6.73 +2000.example. 5M IN A 10.0.6.74 +2000.example. 5M IN A 10.0.6.75 +2000.example. 5M IN A 10.0.6.76 +2000.example. 5M IN A 10.0.6.77 +2000.example. 5M IN A 10.0.6.78 +2000.example. 5M IN A 10.0.6.79 +2000.example. 5M IN A 10.0.6.80 +2000.example. 5M IN A 10.0.6.81 +2000.example. 5M IN A 10.0.6.82 +2000.example. 5M IN A 10.0.6.83 +2000.example. 5M IN A 10.0.6.84 +2000.example. 5M IN A 10.0.6.85 +2000.example. 5M IN A 10.0.6.86 +2000.example. 5M IN A 10.0.6.87 +2000.example. 5M IN A 10.0.6.88 +2000.example. 5M IN A 10.0.6.89 +2000.example. 5M IN A 10.0.6.90 +2000.example. 5M IN A 10.0.6.91 +2000.example. 5M IN A 10.0.6.92 +2000.example. 5M IN A 10.0.6.93 +2000.example. 5M IN A 10.0.6.94 +2000.example. 5M IN A 10.0.6.95 +2000.example. 5M IN A 10.0.6.96 +2000.example. 5M IN A 10.0.6.97 +2000.example. 5M IN A 10.0.6.98 +2000.example. 5M IN A 10.0.6.99 +2000.example. 5M IN A 10.0.6.100 +2000.example. 5M IN A 10.0.6.101 +2000.example. 5M IN A 10.0.6.102 +2000.example. 5M IN A 10.0.6.103 +2000.example. 5M IN A 10.0.6.104 +2000.example. 5M IN A 10.0.6.105 +2000.example. 5M IN A 10.0.6.106 +2000.example. 5M IN A 10.0.6.107 +2000.example. 5M IN A 10.0.6.108 +2000.example. 5M IN A 10.0.6.109 +2000.example. 5M IN A 10.0.6.110 +2000.example. 5M IN A 10.0.6.111 +2000.example. 5M IN A 10.0.6.112 +2000.example. 5M IN A 10.0.6.113 +2000.example. 5M IN A 10.0.6.114 +2000.example. 5M IN A 10.0.6.115 +2000.example. 5M IN A 10.0.6.116 +2000.example. 5M IN A 10.0.6.117 +2000.example. 5M IN A 10.0.6.118 +2000.example. 5M IN A 10.0.6.119 +2000.example. 5M IN A 10.0.6.120 +2000.example. 5M IN A 10.0.6.121 +2000.example. 5M IN A 10.0.6.122 +2000.example. 5M IN A 10.0.6.123 +2000.example. 5M IN A 10.0.6.124 +2000.example. 5M IN A 10.0.6.125 +2000.example. 5M IN A 10.0.6.126 +2000.example. 5M IN A 10.0.6.127 +2000.example. 5M IN A 10.0.6.128 +2000.example. 5M IN A 10.0.6.129 +2000.example. 5M IN A 10.0.6.130 +2000.example. 5M IN A 10.0.6.131 +2000.example. 5M IN A 10.0.6.132 +2000.example. 5M IN A 10.0.6.133 +2000.example. 5M IN A 10.0.6.134 +2000.example. 5M IN A 10.0.6.135 +2000.example. 5M IN A 10.0.6.136 +2000.example. 5M IN A 10.0.6.137 +2000.example. 5M IN A 10.0.6.138 +2000.example. 5M IN A 10.0.6.139 +2000.example. 5M IN A 10.0.6.140 +2000.example. 5M IN A 10.0.6.141 +2000.example. 5M IN A 10.0.6.142 +2000.example. 5M IN A 10.0.6.143 +2000.example. 5M IN A 10.0.6.144 +2000.example. 5M IN A 10.0.6.145 +2000.example. 5M IN A 10.0.6.146 +2000.example. 5M IN A 10.0.6.147 +2000.example. 5M IN A 10.0.6.148 +2000.example. 5M IN A 10.0.6.149 +2000.example. 5M IN A 10.0.6.150 +2000.example. 5M IN A 10.0.6.151 +2000.example. 5M IN A 10.0.6.152 +2000.example. 5M IN A 10.0.6.153 +2000.example. 5M IN A 10.0.6.154 +2000.example. 5M IN A 10.0.6.155 +2000.example. 5M IN A 10.0.6.156 +2000.example. 5M IN A 10.0.6.157 +2000.example. 5M IN A 10.0.6.158 +2000.example. 5M IN A 10.0.6.159 +2000.example. 5M IN A 10.0.6.160 +2000.example. 5M IN A 10.0.6.161 +2000.example. 5M IN A 10.0.6.162 +2000.example. 5M IN A 10.0.6.163 +2000.example. 5M IN A 10.0.6.164 +2000.example. 5M IN A 10.0.6.165 +2000.example. 5M IN A 10.0.6.166 +2000.example. 5M IN A 10.0.6.167 +2000.example. 5M IN A 10.0.6.168 +2000.example. 5M IN A 10.0.6.169 +2000.example. 5M IN A 10.0.6.170 +2000.example. 5M IN A 10.0.6.171 +2000.example. 5M IN A 10.0.6.172 +2000.example. 5M IN A 10.0.6.173 +2000.example. 5M IN A 10.0.6.174 +2000.example. 5M IN A 10.0.6.175 +2000.example. 5M IN A 10.0.6.176 +2000.example. 5M IN A 10.0.6.177 +2000.example. 5M IN A 10.0.6.178 +2000.example. 5M IN A 10.0.6.179 +2000.example. 5M IN A 10.0.6.180 +2000.example. 5M IN A 10.0.6.181 +2000.example. 5M IN A 10.0.6.182 +2000.example. 5M IN A 10.0.6.183 +2000.example. 5M IN A 10.0.6.184 +2000.example. 5M IN A 10.0.6.185 +2000.example. 5M IN A 10.0.6.186 +2000.example. 5M IN A 10.0.6.187 +2000.example. 5M IN A 10.0.6.188 +2000.example. 5M IN A 10.0.6.189 +2000.example. 5M IN A 10.0.6.190 +2000.example. 5M IN A 10.0.6.191 +2000.example. 5M IN A 10.0.6.192 +2000.example. 5M IN A 10.0.6.193 +2000.example. 5M IN A 10.0.6.194 +2000.example. 5M IN A 10.0.6.195 +2000.example. 5M IN A 10.0.6.196 +2000.example. 5M IN A 10.0.6.197 +2000.example. 5M IN A 10.0.6.198 +2000.example. 5M IN A 10.0.6.199 +2000.example. 5M IN A 10.0.6.200 +2000.example. 5M IN A 10.0.6.201 +2000.example. 5M IN A 10.0.6.202 +2000.example. 5M IN A 10.0.6.203 +2000.example. 5M IN A 10.0.6.204 +2000.example. 5M IN A 10.0.6.205 +2000.example. 5M IN A 10.0.6.206 +2000.example. 5M IN A 10.0.6.207 +2000.example. 5M IN A 10.0.6.208 +2000.example. 5M IN A 10.0.6.209 +2000.example. 5M IN A 10.0.6.210 +2000.example. 5M IN A 10.0.6.211 +2000.example. 5M IN A 10.0.6.212 +2000.example. 5M IN A 10.0.6.213 +2000.example. 5M IN A 10.0.6.214 +2000.example. 5M IN A 10.0.6.215 +2000.example. 5M IN A 10.0.6.216 +2000.example. 5M IN A 10.0.6.217 +2000.example. 5M IN A 10.0.6.218 +2000.example. 5M IN A 10.0.6.219 +2000.example. 5M IN A 10.0.6.220 +2000.example. 5M IN A 10.0.6.221 +2000.example. 5M IN A 10.0.6.222 +2000.example. 5M IN A 10.0.6.223 +2000.example. 5M IN A 10.0.6.224 +2000.example. 5M IN A 10.0.6.225 +2000.example. 5M IN A 10.0.6.226 +2000.example. 5M IN A 10.0.6.227 +2000.example. 5M IN A 10.0.6.228 +2000.example. 5M IN A 10.0.6.229 +2000.example. 5M IN A 10.0.6.230 +2000.example. 5M IN A 10.0.6.231 +2000.example. 5M IN A 10.0.6.232 +2000.example. 5M IN A 10.0.6.233 +2000.example. 5M IN A 10.0.6.234 +2000.example. 5M IN A 10.0.6.235 +2000.example. 5M IN A 10.0.6.236 +2000.example. 5M IN A 10.0.6.237 +2000.example. 5M IN A 10.0.6.238 +2000.example. 5M IN A 10.0.6.239 +2000.example. 5M IN A 10.0.6.240 +2000.example. 5M IN A 10.0.6.241 +2000.example. 5M IN A 10.0.6.242 +2000.example. 5M IN A 10.0.6.243 +2000.example. 5M IN A 10.0.6.244 +2000.example. 5M IN A 10.0.6.245 +2000.example. 5M IN A 10.0.6.246 +2000.example. 5M IN A 10.0.6.247 +2000.example. 5M IN A 10.0.6.248 +2000.example. 5M IN A 10.0.6.249 +2000.example. 5M IN A 10.0.6.250 +2000.example. 5M IN A 10.0.6.251 +2000.example. 5M IN A 10.0.6.252 +2000.example. 5M IN A 10.0.6.253 +2000.example. 5M IN A 10.0.6.254 +2000.example. 5M IN A 10.0.6.255 +2000.example. 5M IN A 10.0.7.0 +2000.example. 5M IN A 10.0.7.1 +2000.example. 5M IN A 10.0.7.2 +2000.example. 5M IN A 10.0.7.3 +2000.example. 5M IN A 10.0.7.4 +2000.example. 5M IN A 10.0.7.5 +2000.example. 5M IN A 10.0.7.6 +2000.example. 5M IN A 10.0.7.7 +2000.example. 5M IN A 10.0.7.8 +2000.example. 5M IN A 10.0.7.9 +2000.example. 5M IN A 10.0.7.10 +2000.example. 5M IN A 10.0.7.11 +2000.example. 5M IN A 10.0.7.12 +2000.example. 5M IN A 10.0.7.13 +2000.example. 5M IN A 10.0.7.14 +2000.example. 5M IN A 10.0.7.15 +2000.example. 5M IN A 10.0.7.16 +2000.example. 5M IN A 10.0.7.17 +2000.example. 5M IN A 10.0.7.18 +2000.example. 5M IN A 10.0.7.19 +2000.example. 5M IN A 10.0.7.20 +2000.example. 5M IN A 10.0.7.21 +2000.example. 5M IN A 10.0.7.22 +2000.example. 5M IN A 10.0.7.23 +2000.example. 5M IN A 10.0.7.24 +2000.example. 5M IN A 10.0.7.25 +2000.example. 5M IN A 10.0.7.26 +2000.example. 5M IN A 10.0.7.27 +2000.example. 5M IN A 10.0.7.28 +2000.example. 5M IN A 10.0.7.29 +2000.example. 5M IN A 10.0.7.30 +2000.example. 5M IN A 10.0.7.31 +2000.example. 5M IN A 10.0.7.32 +2000.example. 5M IN A 10.0.7.33 +2000.example. 5M IN A 10.0.7.34 +2000.example. 5M IN A 10.0.7.35 +2000.example. 5M IN A 10.0.7.36 +2000.example. 5M IN A 10.0.7.37 +2000.example. 5M IN A 10.0.7.38 +2000.example. 5M IN A 10.0.7.39 +2000.example. 5M IN A 10.0.7.40 +2000.example. 5M IN A 10.0.7.41 +2000.example. 5M IN A 10.0.7.42 +2000.example. 5M IN A 10.0.7.43 +2000.example. 5M IN A 10.0.7.44 +2000.example. 5M IN A 10.0.7.45 +2000.example. 5M IN A 10.0.7.46 +2000.example. 5M IN A 10.0.7.47 +2000.example. 5M IN A 10.0.7.48 +2000.example. 5M IN A 10.0.7.49 +2000.example. 5M IN A 10.0.7.50 +2000.example. 5M IN A 10.0.7.51 +2000.example. 5M IN A 10.0.7.52 +2000.example. 5M IN A 10.0.7.53 +2000.example. 5M IN A 10.0.7.54 +2000.example. 5M IN A 10.0.7.55 +2000.example. 5M IN A 10.0.7.56 +2000.example. 5M IN A 10.0.7.57 +2000.example. 5M IN A 10.0.7.58 +2000.example. 5M IN A 10.0.7.59 +2000.example. 5M IN A 10.0.7.60 +2000.example. 5M IN A 10.0.7.61 +2000.example. 5M IN A 10.0.7.62 +2000.example. 5M IN A 10.0.7.63 +2000.example. 5M IN A 10.0.7.64 +2000.example. 5M IN A 10.0.7.65 +2000.example. 5M IN A 10.0.7.66 +2000.example. 5M IN A 10.0.7.67 +2000.example. 5M IN A 10.0.7.68 +2000.example. 5M IN A 10.0.7.69 +2000.example. 5M IN A 10.0.7.70 +2000.example. 5M IN A 10.0.7.71 +2000.example. 5M IN A 10.0.7.72 +2000.example. 5M IN A 10.0.7.73 +2000.example. 5M IN A 10.0.7.74 +2000.example. 5M IN A 10.0.7.75 +2000.example. 5M IN A 10.0.7.76 +2000.example. 5M IN A 10.0.7.77 +2000.example. 5M IN A 10.0.7.78 +2000.example. 5M IN A 10.0.7.79 +2000.example. 5M IN A 10.0.7.80 +2000.example. 5M IN A 10.0.7.81 +2000.example. 5M IN A 10.0.7.82 +2000.example. 5M IN A 10.0.7.83 +2000.example. 5M IN A 10.0.7.84 +2000.example. 5M IN A 10.0.7.85 +2000.example. 5M IN A 10.0.7.86 +2000.example. 5M IN A 10.0.7.87 +2000.example. 5M IN A 10.0.7.88 +2000.example. 5M IN A 10.0.7.89 +2000.example. 5M IN A 10.0.7.90 +2000.example. 5M IN A 10.0.7.91 +2000.example. 5M IN A 10.0.7.92 +2000.example. 5M IN A 10.0.7.93 +2000.example. 5M IN A 10.0.7.94 +2000.example. 5M IN A 10.0.7.95 +2000.example. 5M IN A 10.0.7.96 +2000.example. 5M IN A 10.0.7.97 +2000.example. 5M IN A 10.0.7.98 +2000.example. 5M IN A 10.0.7.99 +2000.example. 5M IN A 10.0.7.100 +2000.example. 5M IN A 10.0.7.101 +2000.example. 5M IN A 10.0.7.102 +2000.example. 5M IN A 10.0.7.103 +2000.example. 5M IN A 10.0.7.104 +2000.example. 5M IN A 10.0.7.105 +2000.example. 5M IN A 10.0.7.106 +2000.example. 5M IN A 10.0.7.107 +2000.example. 5M IN A 10.0.7.108 +2000.example. 5M IN A 10.0.7.109 +2000.example. 5M IN A 10.0.7.110 +2000.example. 5M IN A 10.0.7.111 +2000.example. 5M IN A 10.0.7.112 +2000.example. 5M IN A 10.0.7.113 +2000.example. 5M IN A 10.0.7.114 +2000.example. 5M IN A 10.0.7.115 +2000.example. 5M IN A 10.0.7.116 +2000.example. 5M IN A 10.0.7.117 +2000.example. 5M IN A 10.0.7.118 +2000.example. 5M IN A 10.0.7.119 +2000.example. 5M IN A 10.0.7.120 +2000.example. 5M IN A 10.0.7.121 +2000.example. 5M IN A 10.0.7.122 +2000.example. 5M IN A 10.0.7.123 +2000.example. 5M IN A 10.0.7.124 +2000.example. 5M IN A 10.0.7.125 +2000.example. 5M IN A 10.0.7.126 +2000.example. 5M IN A 10.0.7.127 +2000.example. 5M IN A 10.0.7.128 +2000.example. 5M IN A 10.0.7.129 +2000.example. 5M IN A 10.0.7.130 +2000.example. 5M IN A 10.0.7.131 +2000.example. 5M IN A 10.0.7.132 +2000.example. 5M IN A 10.0.7.133 +2000.example. 5M IN A 10.0.7.134 +2000.example. 5M IN A 10.0.7.135 +2000.example. 5M IN A 10.0.7.136 +2000.example. 5M IN A 10.0.7.137 +2000.example. 5M IN A 10.0.7.138 +2000.example. 5M IN A 10.0.7.139 +2000.example. 5M IN A 10.0.7.140 +2000.example. 5M IN A 10.0.7.141 +2000.example. 5M IN A 10.0.7.142 +2000.example. 5M IN A 10.0.7.143 +2000.example. 5M IN A 10.0.7.144 +2000.example. 5M IN A 10.0.7.145 +2000.example. 5M IN A 10.0.7.146 +2000.example. 5M IN A 10.0.7.147 +2000.example. 5M IN A 10.0.7.148 +2000.example. 5M IN A 10.0.7.149 +2000.example. 5M IN A 10.0.7.150 +2000.example. 5M IN A 10.0.7.151 +2000.example. 5M IN A 10.0.7.152 +2000.example. 5M IN A 10.0.7.153 +2000.example. 5M IN A 10.0.7.154 +2000.example. 5M IN A 10.0.7.155 +2000.example. 5M IN A 10.0.7.156 +2000.example. 5M IN A 10.0.7.157 +2000.example. 5M IN A 10.0.7.158 +2000.example. 5M IN A 10.0.7.159 +2000.example. 5M IN A 10.0.7.160 +2000.example. 5M IN A 10.0.7.161 +2000.example. 5M IN A 10.0.7.162 +2000.example. 5M IN A 10.0.7.163 +2000.example. 5M IN A 10.0.7.164 +2000.example. 5M IN A 10.0.7.165 +2000.example. 5M IN A 10.0.7.166 +2000.example. 5M IN A 10.0.7.167 +2000.example. 5M IN A 10.0.7.168 +2000.example. 5M IN A 10.0.7.169 +2000.example. 5M IN A 10.0.7.170 +2000.example. 5M IN A 10.0.7.171 +2000.example. 5M IN A 10.0.7.172 +2000.example. 5M IN A 10.0.7.173 +2000.example. 5M IN A 10.0.7.174 +2000.example. 5M IN A 10.0.7.175 +2000.example. 5M IN A 10.0.7.176 +2000.example. 5M IN A 10.0.7.177 +2000.example. 5M IN A 10.0.7.178 +2000.example. 5M IN A 10.0.7.179 +2000.example. 5M IN A 10.0.7.180 +2000.example. 5M IN A 10.0.7.181 +2000.example. 5M IN A 10.0.7.182 +2000.example. 5M IN A 10.0.7.183 +2000.example. 5M IN A 10.0.7.184 +2000.example. 5M IN A 10.0.7.185 +2000.example. 5M IN A 10.0.7.186 +2000.example. 5M IN A 10.0.7.187 +2000.example. 5M IN A 10.0.7.188 +2000.example. 5M IN A 10.0.7.189 +2000.example. 5M IN A 10.0.7.190 +2000.example. 5M IN A 10.0.7.191 +2000.example. 5M IN A 10.0.7.192 +2000.example. 5M IN A 10.0.7.193 +2000.example. 5M IN A 10.0.7.194 +2000.example. 5M IN A 10.0.7.195 +2000.example. 5M IN A 10.0.7.196 +2000.example. 5M IN A 10.0.7.197 +2000.example. 5M IN A 10.0.7.198 +2000.example. 5M IN A 10.0.7.199 +2000.example. 5M IN A 10.0.7.200 +2000.example. 5M IN A 10.0.7.201 +2000.example. 5M IN A 10.0.7.202 +2000.example. 5M IN A 10.0.7.203 +2000.example. 5M IN A 10.0.7.204 +2000.example. 5M IN A 10.0.7.205 +2000.example. 5M IN A 10.0.7.206 +2000.example. 5M IN A 10.0.7.207 + +;; AUTHORITY SECTION: +example. 5M IN NS ns1.example. + +;; ADDITIONAL SECTION: +ns1.example. 5M IN A 10.53.0.1 + +;; Total query time: 121 msec +;; FROM: draco to SERVER: 10.53.0.1 +;; WHEN: Fri Jun 23 12:58:14 2000 +;; MSG SIZE sent: 30 rcvd: 32068 + diff --git a/bin/tests/system/limits/knowngood.dig.out.3000 b/bin/tests/system/limits/knowngood.dig.out.3000 new file mode 100644 index 0000000..1932475 --- /dev/null +++ b/bin/tests/system/limits/knowngood.dig.out.3000 @@ -0,0 +1,3023 @@ + +; <<>> DiG 8.2 <<>> 3000.example. @10.53.0.1 a -p +; (1 server found) +;; res options: init recurs defnam dnsrch +;; got answer: +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6 +;; flags: qr aa rd ad; QUERY: 1, ANSWER: 3000, AUTHORITY: 1, ADDITIONAL: 1 +;; QUERY SECTION: +;; 3000.example, type = A, class = IN + +;; ANSWER SECTION: +3000.example. 5M IN A 10.0.0.0 +3000.example. 5M IN A 10.0.0.1 +3000.example. 5M IN A 10.0.0.2 +3000.example. 5M IN A 10.0.0.3 +3000.example. 5M IN A 10.0.0.4 +3000.example. 5M IN A 10.0.0.5 +3000.example. 5M IN A 10.0.0.6 +3000.example. 5M IN A 10.0.0.7 +3000.example. 5M IN A 10.0.0.8 +3000.example. 5M IN A 10.0.0.9 +3000.example. 5M IN A 10.0.0.10 +3000.example. 5M IN A 10.0.0.11 +3000.example. 5M IN A 10.0.0.12 +3000.example. 5M IN A 10.0.0.13 +3000.example. 5M IN A 10.0.0.14 +3000.example. 5M IN A 10.0.0.15 +3000.example. 5M IN A 10.0.0.16 +3000.example. 5M IN A 10.0.0.17 +3000.example. 5M IN A 10.0.0.18 +3000.example. 5M IN A 10.0.0.19 +3000.example. 5M IN A 10.0.0.20 +3000.example. 5M IN A 10.0.0.21 +3000.example. 5M IN A 10.0.0.22 +3000.example. 5M IN A 10.0.0.23 +3000.example. 5M IN A 10.0.0.24 +3000.example. 5M IN A 10.0.0.25 +3000.example. 5M IN A 10.0.0.26 +3000.example. 5M IN A 10.0.0.27 +3000.example. 5M IN A 10.0.0.28 +3000.example. 5M IN A 10.0.0.29 +3000.example. 5M IN A 10.0.0.30 +3000.example. 5M IN A 10.0.0.31 +3000.example. 5M IN A 10.0.0.32 +3000.example. 5M IN A 10.0.0.33 +3000.example. 5M IN A 10.0.0.34 +3000.example. 5M IN A 10.0.0.35 +3000.example. 5M IN A 10.0.0.36 +3000.example. 5M IN A 10.0.0.37 +3000.example. 5M IN A 10.0.0.38 +3000.example. 5M IN A 10.0.0.39 +3000.example. 5M IN A 10.0.0.40 +3000.example. 5M IN A 10.0.0.41 +3000.example. 5M IN A 10.0.0.42 +3000.example. 5M IN A 10.0.0.43 +3000.example. 5M IN A 10.0.0.44 +3000.example. 5M IN A 10.0.0.45 +3000.example. 5M IN A 10.0.0.46 +3000.example. 5M IN A 10.0.0.47 +3000.example. 5M IN A 10.0.0.48 +3000.example. 5M IN A 10.0.0.49 +3000.example. 5M IN A 10.0.0.50 +3000.example. 5M IN A 10.0.0.51 +3000.example. 5M IN A 10.0.0.52 +3000.example. 5M IN A 10.0.0.53 +3000.example. 5M IN A 10.0.0.54 +3000.example. 5M IN A 10.0.0.55 +3000.example. 5M IN A 10.0.0.56 +3000.example. 5M IN A 10.0.0.57 +3000.example. 5M IN A 10.0.0.58 +3000.example. 5M IN A 10.0.0.59 +3000.example. 5M IN A 10.0.0.60 +3000.example. 5M IN A 10.0.0.61 +3000.example. 5M IN A 10.0.0.62 +3000.example. 5M IN A 10.0.0.63 +3000.example. 5M IN A 10.0.0.64 +3000.example. 5M IN A 10.0.0.65 +3000.example. 5M IN A 10.0.0.66 +3000.example. 5M IN A 10.0.0.67 +3000.example. 5M IN A 10.0.0.68 +3000.example. 5M IN A 10.0.0.69 +3000.example. 5M IN A 10.0.0.70 +3000.example. 5M IN A 10.0.0.71 +3000.example. 5M IN A 10.0.0.72 +3000.example. 5M IN A 10.0.0.73 +3000.example. 5M IN A 10.0.0.74 +3000.example. 5M IN A 10.0.0.75 +3000.example. 5M IN A 10.0.0.76 +3000.example. 5M IN A 10.0.0.77 +3000.example. 5M IN A 10.0.0.78 +3000.example. 5M IN A 10.0.0.79 +3000.example. 5M IN A 10.0.0.80 +3000.example. 5M IN A 10.0.0.81 +3000.example. 5M IN A 10.0.0.82 +3000.example. 5M IN A 10.0.0.83 +3000.example. 5M IN A 10.0.0.84 +3000.example. 5M IN A 10.0.0.85 +3000.example. 5M IN A 10.0.0.86 +3000.example. 5M IN A 10.0.0.87 +3000.example. 5M IN A 10.0.0.88 +3000.example. 5M IN A 10.0.0.89 +3000.example. 5M IN A 10.0.0.90 +3000.example. 5M IN A 10.0.0.91 +3000.example. 5M IN A 10.0.0.92 +3000.example. 5M IN A 10.0.0.93 +3000.example. 5M IN A 10.0.0.94 +3000.example. 5M IN A 10.0.0.95 +3000.example. 5M IN A 10.0.0.96 +3000.example. 5M IN A 10.0.0.97 +3000.example. 5M IN A 10.0.0.98 +3000.example. 5M IN A 10.0.0.99 +3000.example. 5M IN A 10.0.0.100 +3000.example. 5M IN A 10.0.0.101 +3000.example. 5M IN A 10.0.0.102 +3000.example. 5M IN A 10.0.0.103 +3000.example. 5M IN A 10.0.0.104 +3000.example. 5M IN A 10.0.0.105 +3000.example. 5M IN A 10.0.0.106 +3000.example. 5M IN A 10.0.0.107 +3000.example. 5M IN A 10.0.0.108 +3000.example. 5M IN A 10.0.0.109 +3000.example. 5M IN A 10.0.0.110 +3000.example. 5M IN A 10.0.0.111 +3000.example. 5M IN A 10.0.0.112 +3000.example. 5M IN A 10.0.0.113 +3000.example. 5M IN A 10.0.0.114 +3000.example. 5M IN A 10.0.0.115 +3000.example. 5M IN A 10.0.0.116 +3000.example. 5M IN A 10.0.0.117 +3000.example. 5M IN A 10.0.0.118 +3000.example. 5M IN A 10.0.0.119 +3000.example. 5M IN A 10.0.0.120 +3000.example. 5M IN A 10.0.0.121 +3000.example. 5M IN A 10.0.0.122 +3000.example. 5M IN A 10.0.0.123 +3000.example. 5M IN A 10.0.0.124 +3000.example. 5M IN A 10.0.0.125 +3000.example. 5M IN A 10.0.0.126 +3000.example. 5M IN A 10.0.0.127 +3000.example. 5M IN A 10.0.0.128 +3000.example. 5M IN A 10.0.0.129 +3000.example. 5M IN A 10.0.0.130 +3000.example. 5M IN A 10.0.0.131 +3000.example. 5M IN A 10.0.0.132 +3000.example. 5M IN A 10.0.0.133 +3000.example. 5M IN A 10.0.0.134 +3000.example. 5M IN A 10.0.0.135 +3000.example. 5M IN A 10.0.0.136 +3000.example. 5M IN A 10.0.0.137 +3000.example. 5M IN A 10.0.0.138 +3000.example. 5M IN A 10.0.0.139 +3000.example. 5M IN A 10.0.0.140 +3000.example. 5M IN A 10.0.0.141 +3000.example. 5M IN A 10.0.0.142 +3000.example. 5M IN A 10.0.0.143 +3000.example. 5M IN A 10.0.0.144 +3000.example. 5M IN A 10.0.0.145 +3000.example. 5M IN A 10.0.0.146 +3000.example. 5M IN A 10.0.0.147 +3000.example. 5M IN A 10.0.0.148 +3000.example. 5M IN A 10.0.0.149 +3000.example. 5M IN A 10.0.0.150 +3000.example. 5M IN A 10.0.0.151 +3000.example. 5M IN A 10.0.0.152 +3000.example. 5M IN A 10.0.0.153 +3000.example. 5M IN A 10.0.0.154 +3000.example. 5M IN A 10.0.0.155 +3000.example. 5M IN A 10.0.0.156 +3000.example. 5M IN A 10.0.0.157 +3000.example. 5M IN A 10.0.0.158 +3000.example. 5M IN A 10.0.0.159 +3000.example. 5M IN A 10.0.0.160 +3000.example. 5M IN A 10.0.0.161 +3000.example. 5M IN A 10.0.0.162 +3000.example. 5M IN A 10.0.0.163 +3000.example. 5M IN A 10.0.0.164 +3000.example. 5M IN A 10.0.0.165 +3000.example. 5M IN A 10.0.0.166 +3000.example. 5M IN A 10.0.0.167 +3000.example. 5M IN A 10.0.0.168 +3000.example. 5M IN A 10.0.0.169 +3000.example. 5M IN A 10.0.0.170 +3000.example. 5M IN A 10.0.0.171 +3000.example. 5M IN A 10.0.0.172 +3000.example. 5M IN A 10.0.0.173 +3000.example. 5M IN A 10.0.0.174 +3000.example. 5M IN A 10.0.0.175 +3000.example. 5M IN A 10.0.0.176 +3000.example. 5M IN A 10.0.0.177 +3000.example. 5M IN A 10.0.0.178 +3000.example. 5M IN A 10.0.0.179 +3000.example. 5M IN A 10.0.0.180 +3000.example. 5M IN A 10.0.0.181 +3000.example. 5M IN A 10.0.0.182 +3000.example. 5M IN A 10.0.0.183 +3000.example. 5M IN A 10.0.0.184 +3000.example. 5M IN A 10.0.0.185 +3000.example. 5M IN A 10.0.0.186 +3000.example. 5M IN A 10.0.0.187 +3000.example. 5M IN A 10.0.0.188 +3000.example. 5M IN A 10.0.0.189 +3000.example. 5M IN A 10.0.0.190 +3000.example. 5M IN A 10.0.0.191 +3000.example. 5M IN A 10.0.0.192 +3000.example. 5M IN A 10.0.0.193 +3000.example. 5M IN A 10.0.0.194 +3000.example. 5M IN A 10.0.0.195 +3000.example. 5M IN A 10.0.0.196 +3000.example. 5M IN A 10.0.0.197 +3000.example. 5M IN A 10.0.0.198 +3000.example. 5M IN A 10.0.0.199 +3000.example. 5M IN A 10.0.0.200 +3000.example. 5M IN A 10.0.0.201 +3000.example. 5M IN A 10.0.0.202 +3000.example. 5M IN A 10.0.0.203 +3000.example. 5M IN A 10.0.0.204 +3000.example. 5M IN A 10.0.0.205 +3000.example. 5M IN A 10.0.0.206 +3000.example. 5M IN A 10.0.0.207 +3000.example. 5M IN A 10.0.0.208 +3000.example. 5M IN A 10.0.0.209 +3000.example. 5M IN A 10.0.0.210 +3000.example. 5M IN A 10.0.0.211 +3000.example. 5M IN A 10.0.0.212 +3000.example. 5M IN A 10.0.0.213 +3000.example. 5M IN A 10.0.0.214 +3000.example. 5M IN A 10.0.0.215 +3000.example. 5M IN A 10.0.0.216 +3000.example. 5M IN A 10.0.0.217 +3000.example. 5M IN A 10.0.0.218 +3000.example. 5M IN A 10.0.0.219 +3000.example. 5M IN A 10.0.0.220 +3000.example. 5M IN A 10.0.0.221 +3000.example. 5M IN A 10.0.0.222 +3000.example. 5M IN A 10.0.0.223 +3000.example. 5M IN A 10.0.0.224 +3000.example. 5M IN A 10.0.0.225 +3000.example. 5M IN A 10.0.0.226 +3000.example. 5M IN A 10.0.0.227 +3000.example. 5M IN A 10.0.0.228 +3000.example. 5M IN A 10.0.0.229 +3000.example. 5M IN A 10.0.0.230 +3000.example. 5M IN A 10.0.0.231 +3000.example. 5M IN A 10.0.0.232 +3000.example. 5M IN A 10.0.0.233 +3000.example. 5M IN A 10.0.0.234 +3000.example. 5M IN A 10.0.0.235 +3000.example. 5M IN A 10.0.0.236 +3000.example. 5M IN A 10.0.0.237 +3000.example. 5M IN A 10.0.0.238 +3000.example. 5M IN A 10.0.0.239 +3000.example. 5M IN A 10.0.0.240 +3000.example. 5M IN A 10.0.0.241 +3000.example. 5M IN A 10.0.0.242 +3000.example. 5M IN A 10.0.0.243 +3000.example. 5M IN A 10.0.0.244 +3000.example. 5M IN A 10.0.0.245 +3000.example. 5M IN A 10.0.0.246 +3000.example. 5M IN A 10.0.0.247 +3000.example. 5M IN A 10.0.0.248 +3000.example. 5M IN A 10.0.0.249 +3000.example. 5M IN A 10.0.0.250 +3000.example. 5M IN A 10.0.0.251 +3000.example. 5M IN A 10.0.0.252 +3000.example. 5M IN A 10.0.0.253 +3000.example. 5M IN A 10.0.0.254 +3000.example. 5M IN A 10.0.0.255 +3000.example. 5M IN A 10.0.1.0 +3000.example. 5M IN A 10.0.1.1 +3000.example. 5M IN A 10.0.1.2 +3000.example. 5M IN A 10.0.1.3 +3000.example. 5M IN A 10.0.1.4 +3000.example. 5M IN A 10.0.1.5 +3000.example. 5M IN A 10.0.1.6 +3000.example. 5M IN A 10.0.1.7 +3000.example. 5M IN A 10.0.1.8 +3000.example. 5M IN A 10.0.1.9 +3000.example. 5M IN A 10.0.1.10 +3000.example. 5M IN A 10.0.1.11 +3000.example. 5M IN A 10.0.1.12 +3000.example. 5M IN A 10.0.1.13 +3000.example. 5M IN A 10.0.1.14 +3000.example. 5M IN A 10.0.1.15 +3000.example. 5M IN A 10.0.1.16 +3000.example. 5M IN A 10.0.1.17 +3000.example. 5M IN A 10.0.1.18 +3000.example. 5M IN A 10.0.1.19 +3000.example. 5M IN A 10.0.1.20 +3000.example. 5M IN A 10.0.1.21 +3000.example. 5M IN A 10.0.1.22 +3000.example. 5M IN A 10.0.1.23 +3000.example. 5M IN A 10.0.1.24 +3000.example. 5M IN A 10.0.1.25 +3000.example. 5M IN A 10.0.1.26 +3000.example. 5M IN A 10.0.1.27 +3000.example. 5M IN A 10.0.1.28 +3000.example. 5M IN A 10.0.1.29 +3000.example. 5M IN A 10.0.1.30 +3000.example. 5M IN A 10.0.1.31 +3000.example. 5M IN A 10.0.1.32 +3000.example. 5M IN A 10.0.1.33 +3000.example. 5M IN A 10.0.1.34 +3000.example. 5M IN A 10.0.1.35 +3000.example. 5M IN A 10.0.1.36 +3000.example. 5M IN A 10.0.1.37 +3000.example. 5M IN A 10.0.1.38 +3000.example. 5M IN A 10.0.1.39 +3000.example. 5M IN A 10.0.1.40 +3000.example. 5M IN A 10.0.1.41 +3000.example. 5M IN A 10.0.1.42 +3000.example. 5M IN A 10.0.1.43 +3000.example. 5M IN A 10.0.1.44 +3000.example. 5M IN A 10.0.1.45 +3000.example. 5M IN A 10.0.1.46 +3000.example. 5M IN A 10.0.1.47 +3000.example. 5M IN A 10.0.1.48 +3000.example. 5M IN A 10.0.1.49 +3000.example. 5M IN A 10.0.1.50 +3000.example. 5M IN A 10.0.1.51 +3000.example. 5M IN A 10.0.1.52 +3000.example. 5M IN A 10.0.1.53 +3000.example. 5M IN A 10.0.1.54 +3000.example. 5M IN A 10.0.1.55 +3000.example. 5M IN A 10.0.1.56 +3000.example. 5M IN A 10.0.1.57 +3000.example. 5M IN A 10.0.1.58 +3000.example. 5M IN A 10.0.1.59 +3000.example. 5M IN A 10.0.1.60 +3000.example. 5M IN A 10.0.1.61 +3000.example. 5M IN A 10.0.1.62 +3000.example. 5M IN A 10.0.1.63 +3000.example. 5M IN A 10.0.1.64 +3000.example. 5M IN A 10.0.1.65 +3000.example. 5M IN A 10.0.1.66 +3000.example. 5M IN A 10.0.1.67 +3000.example. 5M IN A 10.0.1.68 +3000.example. 5M IN A 10.0.1.69 +3000.example. 5M IN A 10.0.1.70 +3000.example. 5M IN A 10.0.1.71 +3000.example. 5M IN A 10.0.1.72 +3000.example. 5M IN A 10.0.1.73 +3000.example. 5M IN A 10.0.1.74 +3000.example. 5M IN A 10.0.1.75 +3000.example. 5M IN A 10.0.1.76 +3000.example. 5M IN A 10.0.1.77 +3000.example. 5M IN A 10.0.1.78 +3000.example. 5M IN A 10.0.1.79 +3000.example. 5M IN A 10.0.1.80 +3000.example. 5M IN A 10.0.1.81 +3000.example. 5M IN A 10.0.1.82 +3000.example. 5M IN A 10.0.1.83 +3000.example. 5M IN A 10.0.1.84 +3000.example. 5M IN A 10.0.1.85 +3000.example. 5M IN A 10.0.1.86 +3000.example. 5M IN A 10.0.1.87 +3000.example. 5M IN A 10.0.1.88 +3000.example. 5M IN A 10.0.1.89 +3000.example. 5M IN A 10.0.1.90 +3000.example. 5M IN A 10.0.1.91 +3000.example. 5M IN A 10.0.1.92 +3000.example. 5M IN A 10.0.1.93 +3000.example. 5M IN A 10.0.1.94 +3000.example. 5M IN A 10.0.1.95 +3000.example. 5M IN A 10.0.1.96 +3000.example. 5M IN A 10.0.1.97 +3000.example. 5M IN A 10.0.1.98 +3000.example. 5M IN A 10.0.1.99 +3000.example. 5M IN A 10.0.1.100 +3000.example. 5M IN A 10.0.1.101 +3000.example. 5M IN A 10.0.1.102 +3000.example. 5M IN A 10.0.1.103 +3000.example. 5M IN A 10.0.1.104 +3000.example. 5M IN A 10.0.1.105 +3000.example. 5M IN A 10.0.1.106 +3000.example. 5M IN A 10.0.1.107 +3000.example. 5M IN A 10.0.1.108 +3000.example. 5M IN A 10.0.1.109 +3000.example. 5M IN A 10.0.1.110 +3000.example. 5M IN A 10.0.1.111 +3000.example. 5M IN A 10.0.1.112 +3000.example. 5M IN A 10.0.1.113 +3000.example. 5M IN A 10.0.1.114 +3000.example. 5M IN A 10.0.1.115 +3000.example. 5M IN A 10.0.1.116 +3000.example. 5M IN A 10.0.1.117 +3000.example. 5M IN A 10.0.1.118 +3000.example. 5M IN A 10.0.1.119 +3000.example. 5M IN A 10.0.1.120 +3000.example. 5M IN A 10.0.1.121 +3000.example. 5M IN A 10.0.1.122 +3000.example. 5M IN A 10.0.1.123 +3000.example. 5M IN A 10.0.1.124 +3000.example. 5M IN A 10.0.1.125 +3000.example. 5M IN A 10.0.1.126 +3000.example. 5M IN A 10.0.1.127 +3000.example. 5M IN A 10.0.1.128 +3000.example. 5M IN A 10.0.1.129 +3000.example. 5M IN A 10.0.1.130 +3000.example. 5M IN A 10.0.1.131 +3000.example. 5M IN A 10.0.1.132 +3000.example. 5M IN A 10.0.1.133 +3000.example. 5M IN A 10.0.1.134 +3000.example. 5M IN A 10.0.1.135 +3000.example. 5M IN A 10.0.1.136 +3000.example. 5M IN A 10.0.1.137 +3000.example. 5M IN A 10.0.1.138 +3000.example. 5M IN A 10.0.1.139 +3000.example. 5M IN A 10.0.1.140 +3000.example. 5M IN A 10.0.1.141 +3000.example. 5M IN A 10.0.1.142 +3000.example. 5M IN A 10.0.1.143 +3000.example. 5M IN A 10.0.1.144 +3000.example. 5M IN A 10.0.1.145 +3000.example. 5M IN A 10.0.1.146 +3000.example. 5M IN A 10.0.1.147 +3000.example. 5M IN A 10.0.1.148 +3000.example. 5M IN A 10.0.1.149 +3000.example. 5M IN A 10.0.1.150 +3000.example. 5M IN A 10.0.1.151 +3000.example. 5M IN A 10.0.1.152 +3000.example. 5M IN A 10.0.1.153 +3000.example. 5M IN A 10.0.1.154 +3000.example. 5M IN A 10.0.1.155 +3000.example. 5M IN A 10.0.1.156 +3000.example. 5M IN A 10.0.1.157 +3000.example. 5M IN A 10.0.1.158 +3000.example. 5M IN A 10.0.1.159 +3000.example. 5M IN A 10.0.1.160 +3000.example. 5M IN A 10.0.1.161 +3000.example. 5M IN A 10.0.1.162 +3000.example. 5M IN A 10.0.1.163 +3000.example. 5M IN A 10.0.1.164 +3000.example. 5M IN A 10.0.1.165 +3000.example. 5M IN A 10.0.1.166 +3000.example. 5M IN A 10.0.1.167 +3000.example. 5M IN A 10.0.1.168 +3000.example. 5M IN A 10.0.1.169 +3000.example. 5M IN A 10.0.1.170 +3000.example. 5M IN A 10.0.1.171 +3000.example. 5M IN A 10.0.1.172 +3000.example. 5M IN A 10.0.1.173 +3000.example. 5M IN A 10.0.1.174 +3000.example. 5M IN A 10.0.1.175 +3000.example. 5M IN A 10.0.1.176 +3000.example. 5M IN A 10.0.1.177 +3000.example. 5M IN A 10.0.1.178 +3000.example. 5M IN A 10.0.1.179 +3000.example. 5M IN A 10.0.1.180 +3000.example. 5M IN A 10.0.1.181 +3000.example. 5M IN A 10.0.1.182 +3000.example. 5M IN A 10.0.1.183 +3000.example. 5M IN A 10.0.1.184 +3000.example. 5M IN A 10.0.1.185 +3000.example. 5M IN A 10.0.1.186 +3000.example. 5M IN A 10.0.1.187 +3000.example. 5M IN A 10.0.1.188 +3000.example. 5M IN A 10.0.1.189 +3000.example. 5M IN A 10.0.1.190 +3000.example. 5M IN A 10.0.1.191 +3000.example. 5M IN A 10.0.1.192 +3000.example. 5M IN A 10.0.1.193 +3000.example. 5M IN A 10.0.1.194 +3000.example. 5M IN A 10.0.1.195 +3000.example. 5M IN A 10.0.1.196 +3000.example. 5M IN A 10.0.1.197 +3000.example. 5M IN A 10.0.1.198 +3000.example. 5M IN A 10.0.1.199 +3000.example. 5M IN A 10.0.1.200 +3000.example. 5M IN A 10.0.1.201 +3000.example. 5M IN A 10.0.1.202 +3000.example. 5M IN A 10.0.1.203 +3000.example. 5M IN A 10.0.1.204 +3000.example. 5M IN A 10.0.1.205 +3000.example. 5M IN A 10.0.1.206 +3000.example. 5M IN A 10.0.1.207 +3000.example. 5M IN A 10.0.1.208 +3000.example. 5M IN A 10.0.1.209 +3000.example. 5M IN A 10.0.1.210 +3000.example. 5M IN A 10.0.1.211 +3000.example. 5M IN A 10.0.1.212 +3000.example. 5M IN A 10.0.1.213 +3000.example. 5M IN A 10.0.1.214 +3000.example. 5M IN A 10.0.1.215 +3000.example. 5M IN A 10.0.1.216 +3000.example. 5M IN A 10.0.1.217 +3000.example. 5M IN A 10.0.1.218 +3000.example. 5M IN A 10.0.1.219 +3000.example. 5M IN A 10.0.1.220 +3000.example. 5M IN A 10.0.1.221 +3000.example. 5M IN A 10.0.1.222 +3000.example. 5M IN A 10.0.1.223 +3000.example. 5M IN A 10.0.1.224 +3000.example. 5M IN A 10.0.1.225 +3000.example. 5M IN A 10.0.1.226 +3000.example. 5M IN A 10.0.1.227 +3000.example. 5M IN A 10.0.1.228 +3000.example. 5M IN A 10.0.1.229 +3000.example. 5M IN A 10.0.1.230 +3000.example. 5M IN A 10.0.1.231 +3000.example. 5M IN A 10.0.1.232 +3000.example. 5M IN A 10.0.1.233 +3000.example. 5M IN A 10.0.1.234 +3000.example. 5M IN A 10.0.1.235 +3000.example. 5M IN A 10.0.1.236 +3000.example. 5M IN A 10.0.1.237 +3000.example. 5M IN A 10.0.1.238 +3000.example. 5M IN A 10.0.1.239 +3000.example. 5M IN A 10.0.1.240 +3000.example. 5M IN A 10.0.1.241 +3000.example. 5M IN A 10.0.1.242 +3000.example. 5M IN A 10.0.1.243 +3000.example. 5M IN A 10.0.1.244 +3000.example. 5M IN A 10.0.1.245 +3000.example. 5M IN A 10.0.1.246 +3000.example. 5M IN A 10.0.1.247 +3000.example. 5M IN A 10.0.1.248 +3000.example. 5M IN A 10.0.1.249 +3000.example. 5M IN A 10.0.1.250 +3000.example. 5M IN A 10.0.1.251 +3000.example. 5M IN A 10.0.1.252 +3000.example. 5M IN A 10.0.1.253 +3000.example. 5M IN A 10.0.1.254 +3000.example. 5M IN A 10.0.1.255 +3000.example. 5M IN A 10.0.2.0 +3000.example. 5M IN A 10.0.2.1 +3000.example. 5M IN A 10.0.2.2 +3000.example. 5M IN A 10.0.2.3 +3000.example. 5M IN A 10.0.2.4 +3000.example. 5M IN A 10.0.2.5 +3000.example. 5M IN A 10.0.2.6 +3000.example. 5M IN A 10.0.2.7 +3000.example. 5M IN A 10.0.2.8 +3000.example. 5M IN A 10.0.2.9 +3000.example. 5M IN A 10.0.2.10 +3000.example. 5M IN A 10.0.2.11 +3000.example. 5M IN A 10.0.2.12 +3000.example. 5M IN A 10.0.2.13 +3000.example. 5M IN A 10.0.2.14 +3000.example. 5M IN A 10.0.2.15 +3000.example. 5M IN A 10.0.2.16 +3000.example. 5M IN A 10.0.2.17 +3000.example. 5M IN A 10.0.2.18 +3000.example. 5M IN A 10.0.2.19 +3000.example. 5M IN A 10.0.2.20 +3000.example. 5M IN A 10.0.2.21 +3000.example. 5M IN A 10.0.2.22 +3000.example. 5M IN A 10.0.2.23 +3000.example. 5M IN A 10.0.2.24 +3000.example. 5M IN A 10.0.2.25 +3000.example. 5M IN A 10.0.2.26 +3000.example. 5M IN A 10.0.2.27 +3000.example. 5M IN A 10.0.2.28 +3000.example. 5M IN A 10.0.2.29 +3000.example. 5M IN A 10.0.2.30 +3000.example. 5M IN A 10.0.2.31 +3000.example. 5M IN A 10.0.2.32 +3000.example. 5M IN A 10.0.2.33 +3000.example. 5M IN A 10.0.2.34 +3000.example. 5M IN A 10.0.2.35 +3000.example. 5M IN A 10.0.2.36 +3000.example. 5M IN A 10.0.2.37 +3000.example. 5M IN A 10.0.2.38 +3000.example. 5M IN A 10.0.2.39 +3000.example. 5M IN A 10.0.2.40 +3000.example. 5M IN A 10.0.2.41 +3000.example. 5M IN A 10.0.2.42 +3000.example. 5M IN A 10.0.2.43 +3000.example. 5M IN A 10.0.2.44 +3000.example. 5M IN A 10.0.2.45 +3000.example. 5M IN A 10.0.2.46 +3000.example. 5M IN A 10.0.2.47 +3000.example. 5M IN A 10.0.2.48 +3000.example. 5M IN A 10.0.2.49 +3000.example. 5M IN A 10.0.2.50 +3000.example. 5M IN A 10.0.2.51 +3000.example. 5M IN A 10.0.2.52 +3000.example. 5M IN A 10.0.2.53 +3000.example. 5M IN A 10.0.2.54 +3000.example. 5M IN A 10.0.2.55 +3000.example. 5M IN A 10.0.2.56 +3000.example. 5M IN A 10.0.2.57 +3000.example. 5M IN A 10.0.2.58 +3000.example. 5M IN A 10.0.2.59 +3000.example. 5M IN A 10.0.2.60 +3000.example. 5M IN A 10.0.2.61 +3000.example. 5M IN A 10.0.2.62 +3000.example. 5M IN A 10.0.2.63 +3000.example. 5M IN A 10.0.2.64 +3000.example. 5M IN A 10.0.2.65 +3000.example. 5M IN A 10.0.2.66 +3000.example. 5M IN A 10.0.2.67 +3000.example. 5M IN A 10.0.2.68 +3000.example. 5M IN A 10.0.2.69 +3000.example. 5M IN A 10.0.2.70 +3000.example. 5M IN A 10.0.2.71 +3000.example. 5M IN A 10.0.2.72 +3000.example. 5M IN A 10.0.2.73 +3000.example. 5M IN A 10.0.2.74 +3000.example. 5M IN A 10.0.2.75 +3000.example. 5M IN A 10.0.2.76 +3000.example. 5M IN A 10.0.2.77 +3000.example. 5M IN A 10.0.2.78 +3000.example. 5M IN A 10.0.2.79 +3000.example. 5M IN A 10.0.2.80 +3000.example. 5M IN A 10.0.2.81 +3000.example. 5M IN A 10.0.2.82 +3000.example. 5M IN A 10.0.2.83 +3000.example. 5M IN A 10.0.2.84 +3000.example. 5M IN A 10.0.2.85 +3000.example. 5M IN A 10.0.2.86 +3000.example. 5M IN A 10.0.2.87 +3000.example. 5M IN A 10.0.2.88 +3000.example. 5M IN A 10.0.2.89 +3000.example. 5M IN A 10.0.2.90 +3000.example. 5M IN A 10.0.2.91 +3000.example. 5M IN A 10.0.2.92 +3000.example. 5M IN A 10.0.2.93 +3000.example. 5M IN A 10.0.2.94 +3000.example. 5M IN A 10.0.2.95 +3000.example. 5M IN A 10.0.2.96 +3000.example. 5M IN A 10.0.2.97 +3000.example. 5M IN A 10.0.2.98 +3000.example. 5M IN A 10.0.2.99 +3000.example. 5M IN A 10.0.2.100 +3000.example. 5M IN A 10.0.2.101 +3000.example. 5M IN A 10.0.2.102 +3000.example. 5M IN A 10.0.2.103 +3000.example. 5M IN A 10.0.2.104 +3000.example. 5M IN A 10.0.2.105 +3000.example. 5M IN A 10.0.2.106 +3000.example. 5M IN A 10.0.2.107 +3000.example. 5M IN A 10.0.2.108 +3000.example. 5M IN A 10.0.2.109 +3000.example. 5M IN A 10.0.2.110 +3000.example. 5M IN A 10.0.2.111 +3000.example. 5M IN A 10.0.2.112 +3000.example. 5M IN A 10.0.2.113 +3000.example. 5M IN A 10.0.2.114 +3000.example. 5M IN A 10.0.2.115 +3000.example. 5M IN A 10.0.2.116 +3000.example. 5M IN A 10.0.2.117 +3000.example. 5M IN A 10.0.2.118 +3000.example. 5M IN A 10.0.2.119 +3000.example. 5M IN A 10.0.2.120 +3000.example. 5M IN A 10.0.2.121 +3000.example. 5M IN A 10.0.2.122 +3000.example. 5M IN A 10.0.2.123 +3000.example. 5M IN A 10.0.2.124 +3000.example. 5M IN A 10.0.2.125 +3000.example. 5M IN A 10.0.2.126 +3000.example. 5M IN A 10.0.2.127 +3000.example. 5M IN A 10.0.2.128 +3000.example. 5M IN A 10.0.2.129 +3000.example. 5M IN A 10.0.2.130 +3000.example. 5M IN A 10.0.2.131 +3000.example. 5M IN A 10.0.2.132 +3000.example. 5M IN A 10.0.2.133 +3000.example. 5M IN A 10.0.2.134 +3000.example. 5M IN A 10.0.2.135 +3000.example. 5M IN A 10.0.2.136 +3000.example. 5M IN A 10.0.2.137 +3000.example. 5M IN A 10.0.2.138 +3000.example. 5M IN A 10.0.2.139 +3000.example. 5M IN A 10.0.2.140 +3000.example. 5M IN A 10.0.2.141 +3000.example. 5M IN A 10.0.2.142 +3000.example. 5M IN A 10.0.2.143 +3000.example. 5M IN A 10.0.2.144 +3000.example. 5M IN A 10.0.2.145 +3000.example. 5M IN A 10.0.2.146 +3000.example. 5M IN A 10.0.2.147 +3000.example. 5M IN A 10.0.2.148 +3000.example. 5M IN A 10.0.2.149 +3000.example. 5M IN A 10.0.2.150 +3000.example. 5M IN A 10.0.2.151 +3000.example. 5M IN A 10.0.2.152 +3000.example. 5M IN A 10.0.2.153 +3000.example. 5M IN A 10.0.2.154 +3000.example. 5M IN A 10.0.2.155 +3000.example. 5M IN A 10.0.2.156 +3000.example. 5M IN A 10.0.2.157 +3000.example. 5M IN A 10.0.2.158 +3000.example. 5M IN A 10.0.2.159 +3000.example. 5M IN A 10.0.2.160 +3000.example. 5M IN A 10.0.2.161 +3000.example. 5M IN A 10.0.2.162 +3000.example. 5M IN A 10.0.2.163 +3000.example. 5M IN A 10.0.2.164 +3000.example. 5M IN A 10.0.2.165 +3000.example. 5M IN A 10.0.2.166 +3000.example. 5M IN A 10.0.2.167 +3000.example. 5M IN A 10.0.2.168 +3000.example. 5M IN A 10.0.2.169 +3000.example. 5M IN A 10.0.2.170 +3000.example. 5M IN A 10.0.2.171 +3000.example. 5M IN A 10.0.2.172 +3000.example. 5M IN A 10.0.2.173 +3000.example. 5M IN A 10.0.2.174 +3000.example. 5M IN A 10.0.2.175 +3000.example. 5M IN A 10.0.2.176 +3000.example. 5M IN A 10.0.2.177 +3000.example. 5M IN A 10.0.2.178 +3000.example. 5M IN A 10.0.2.179 +3000.example. 5M IN A 10.0.2.180 +3000.example. 5M IN A 10.0.2.181 +3000.example. 5M IN A 10.0.2.182 +3000.example. 5M IN A 10.0.2.183 +3000.example. 5M IN A 10.0.2.184 +3000.example. 5M IN A 10.0.2.185 +3000.example. 5M IN A 10.0.2.186 +3000.example. 5M IN A 10.0.2.187 +3000.example. 5M IN A 10.0.2.188 +3000.example. 5M IN A 10.0.2.189 +3000.example. 5M IN A 10.0.2.190 +3000.example. 5M IN A 10.0.2.191 +3000.example. 5M IN A 10.0.2.192 +3000.example. 5M IN A 10.0.2.193 +3000.example. 5M IN A 10.0.2.194 +3000.example. 5M IN A 10.0.2.195 +3000.example. 5M IN A 10.0.2.196 +3000.example. 5M IN A 10.0.2.197 +3000.example. 5M IN A 10.0.2.198 +3000.example. 5M IN A 10.0.2.199 +3000.example. 5M IN A 10.0.2.200 +3000.example. 5M IN A 10.0.2.201 +3000.example. 5M IN A 10.0.2.202 +3000.example. 5M IN A 10.0.2.203 +3000.example. 5M IN A 10.0.2.204 +3000.example. 5M IN A 10.0.2.205 +3000.example. 5M IN A 10.0.2.206 +3000.example. 5M IN A 10.0.2.207 +3000.example. 5M IN A 10.0.2.208 +3000.example. 5M IN A 10.0.2.209 +3000.example. 5M IN A 10.0.2.210 +3000.example. 5M IN A 10.0.2.211 +3000.example. 5M IN A 10.0.2.212 +3000.example. 5M IN A 10.0.2.213 +3000.example. 5M IN A 10.0.2.214 +3000.example. 5M IN A 10.0.2.215 +3000.example. 5M IN A 10.0.2.216 +3000.example. 5M IN A 10.0.2.217 +3000.example. 5M IN A 10.0.2.218 +3000.example. 5M IN A 10.0.2.219 +3000.example. 5M IN A 10.0.2.220 +3000.example. 5M IN A 10.0.2.221 +3000.example. 5M IN A 10.0.2.222 +3000.example. 5M IN A 10.0.2.223 +3000.example. 5M IN A 10.0.2.224 +3000.example. 5M IN A 10.0.2.225 +3000.example. 5M IN A 10.0.2.226 +3000.example. 5M IN A 10.0.2.227 +3000.example. 5M IN A 10.0.2.228 +3000.example. 5M IN A 10.0.2.229 +3000.example. 5M IN A 10.0.2.230 +3000.example. 5M IN A 10.0.2.231 +3000.example. 5M IN A 10.0.2.232 +3000.example. 5M IN A 10.0.2.233 +3000.example. 5M IN A 10.0.2.234 +3000.example. 5M IN A 10.0.2.235 +3000.example. 5M IN A 10.0.2.236 +3000.example. 5M IN A 10.0.2.237 +3000.example. 5M IN A 10.0.2.238 +3000.example. 5M IN A 10.0.2.239 +3000.example. 5M IN A 10.0.2.240 +3000.example. 5M IN A 10.0.2.241 +3000.example. 5M IN A 10.0.2.242 +3000.example. 5M IN A 10.0.2.243 +3000.example. 5M IN A 10.0.2.244 +3000.example. 5M IN A 10.0.2.245 +3000.example. 5M IN A 10.0.2.246 +3000.example. 5M IN A 10.0.2.247 +3000.example. 5M IN A 10.0.2.248 +3000.example. 5M IN A 10.0.2.249 +3000.example. 5M IN A 10.0.2.250 +3000.example. 5M IN A 10.0.2.251 +3000.example. 5M IN A 10.0.2.252 +3000.example. 5M IN A 10.0.2.253 +3000.example. 5M IN A 10.0.2.254 +3000.example. 5M IN A 10.0.2.255 +3000.example. 5M IN A 10.0.3.0 +3000.example. 5M IN A 10.0.3.1 +3000.example. 5M IN A 10.0.3.2 +3000.example. 5M IN A 10.0.3.3 +3000.example. 5M IN A 10.0.3.4 +3000.example. 5M IN A 10.0.3.5 +3000.example. 5M IN A 10.0.3.6 +3000.example. 5M IN A 10.0.3.7 +3000.example. 5M IN A 10.0.3.8 +3000.example. 5M IN A 10.0.3.9 +3000.example. 5M IN A 10.0.3.10 +3000.example. 5M IN A 10.0.3.11 +3000.example. 5M IN A 10.0.3.12 +3000.example. 5M IN A 10.0.3.13 +3000.example. 5M IN A 10.0.3.14 +3000.example. 5M IN A 10.0.3.15 +3000.example. 5M IN A 10.0.3.16 +3000.example. 5M IN A 10.0.3.17 +3000.example. 5M IN A 10.0.3.18 +3000.example. 5M IN A 10.0.3.19 +3000.example. 5M IN A 10.0.3.20 +3000.example. 5M IN A 10.0.3.21 +3000.example. 5M IN A 10.0.3.22 +3000.example. 5M IN A 10.0.3.23 +3000.example. 5M IN A 10.0.3.24 +3000.example. 5M IN A 10.0.3.25 +3000.example. 5M IN A 10.0.3.26 +3000.example. 5M IN A 10.0.3.27 +3000.example. 5M IN A 10.0.3.28 +3000.example. 5M IN A 10.0.3.29 +3000.example. 5M IN A 10.0.3.30 +3000.example. 5M IN A 10.0.3.31 +3000.example. 5M IN A 10.0.3.32 +3000.example. 5M IN A 10.0.3.33 +3000.example. 5M IN A 10.0.3.34 +3000.example. 5M IN A 10.0.3.35 +3000.example. 5M IN A 10.0.3.36 +3000.example. 5M IN A 10.0.3.37 +3000.example. 5M IN A 10.0.3.38 +3000.example. 5M IN A 10.0.3.39 +3000.example. 5M IN A 10.0.3.40 +3000.example. 5M IN A 10.0.3.41 +3000.example. 5M IN A 10.0.3.42 +3000.example. 5M IN A 10.0.3.43 +3000.example. 5M IN A 10.0.3.44 +3000.example. 5M IN A 10.0.3.45 +3000.example. 5M IN A 10.0.3.46 +3000.example. 5M IN A 10.0.3.47 +3000.example. 5M IN A 10.0.3.48 +3000.example. 5M IN A 10.0.3.49 +3000.example. 5M IN A 10.0.3.50 +3000.example. 5M IN A 10.0.3.51 +3000.example. 5M IN A 10.0.3.52 +3000.example. 5M IN A 10.0.3.53 +3000.example. 5M IN A 10.0.3.54 +3000.example. 5M IN A 10.0.3.55 +3000.example. 5M IN A 10.0.3.56 +3000.example. 5M IN A 10.0.3.57 +3000.example. 5M IN A 10.0.3.58 +3000.example. 5M IN A 10.0.3.59 +3000.example. 5M IN A 10.0.3.60 +3000.example. 5M IN A 10.0.3.61 +3000.example. 5M IN A 10.0.3.62 +3000.example. 5M IN A 10.0.3.63 +3000.example. 5M IN A 10.0.3.64 +3000.example. 5M IN A 10.0.3.65 +3000.example. 5M IN A 10.0.3.66 +3000.example. 5M IN A 10.0.3.67 +3000.example. 5M IN A 10.0.3.68 +3000.example. 5M IN A 10.0.3.69 +3000.example. 5M IN A 10.0.3.70 +3000.example. 5M IN A 10.0.3.71 +3000.example. 5M IN A 10.0.3.72 +3000.example. 5M IN A 10.0.3.73 +3000.example. 5M IN A 10.0.3.74 +3000.example. 5M IN A 10.0.3.75 +3000.example. 5M IN A 10.0.3.76 +3000.example. 5M IN A 10.0.3.77 +3000.example. 5M IN A 10.0.3.78 +3000.example. 5M IN A 10.0.3.79 +3000.example. 5M IN A 10.0.3.80 +3000.example. 5M IN A 10.0.3.81 +3000.example. 5M IN A 10.0.3.82 +3000.example. 5M IN A 10.0.3.83 +3000.example. 5M IN A 10.0.3.84 +3000.example. 5M IN A 10.0.3.85 +3000.example. 5M IN A 10.0.3.86 +3000.example. 5M IN A 10.0.3.87 +3000.example. 5M IN A 10.0.3.88 +3000.example. 5M IN A 10.0.3.89 +3000.example. 5M IN A 10.0.3.90 +3000.example. 5M IN A 10.0.3.91 +3000.example. 5M IN A 10.0.3.92 +3000.example. 5M IN A 10.0.3.93 +3000.example. 5M IN A 10.0.3.94 +3000.example. 5M IN A 10.0.3.95 +3000.example. 5M IN A 10.0.3.96 +3000.example. 5M IN A 10.0.3.97 +3000.example. 5M IN A 10.0.3.98 +3000.example. 5M IN A 10.0.3.99 +3000.example. 5M IN A 10.0.3.100 +3000.example. 5M IN A 10.0.3.101 +3000.example. 5M IN A 10.0.3.102 +3000.example. 5M IN A 10.0.3.103 +3000.example. 5M IN A 10.0.3.104 +3000.example. 5M IN A 10.0.3.105 +3000.example. 5M IN A 10.0.3.106 +3000.example. 5M IN A 10.0.3.107 +3000.example. 5M IN A 10.0.3.108 +3000.example. 5M IN A 10.0.3.109 +3000.example. 5M IN A 10.0.3.110 +3000.example. 5M IN A 10.0.3.111 +3000.example. 5M IN A 10.0.3.112 +3000.example. 5M IN A 10.0.3.113 +3000.example. 5M IN A 10.0.3.114 +3000.example. 5M IN A 10.0.3.115 +3000.example. 5M IN A 10.0.3.116 +3000.example. 5M IN A 10.0.3.117 +3000.example. 5M IN A 10.0.3.118 +3000.example. 5M IN A 10.0.3.119 +3000.example. 5M IN A 10.0.3.120 +3000.example. 5M IN A 10.0.3.121 +3000.example. 5M IN A 10.0.3.122 +3000.example. 5M IN A 10.0.3.123 +3000.example. 5M IN A 10.0.3.124 +3000.example. 5M IN A 10.0.3.125 +3000.example. 5M IN A 10.0.3.126 +3000.example. 5M IN A 10.0.3.127 +3000.example. 5M IN A 10.0.3.128 +3000.example. 5M IN A 10.0.3.129 +3000.example. 5M IN A 10.0.3.130 +3000.example. 5M IN A 10.0.3.131 +3000.example. 5M IN A 10.0.3.132 +3000.example. 5M IN A 10.0.3.133 +3000.example. 5M IN A 10.0.3.134 +3000.example. 5M IN A 10.0.3.135 +3000.example. 5M IN A 10.0.3.136 +3000.example. 5M IN A 10.0.3.137 +3000.example. 5M IN A 10.0.3.138 +3000.example. 5M IN A 10.0.3.139 +3000.example. 5M IN A 10.0.3.140 +3000.example. 5M IN A 10.0.3.141 +3000.example. 5M IN A 10.0.3.142 +3000.example. 5M IN A 10.0.3.143 +3000.example. 5M IN A 10.0.3.144 +3000.example. 5M IN A 10.0.3.145 +3000.example. 5M IN A 10.0.3.146 +3000.example. 5M IN A 10.0.3.147 +3000.example. 5M IN A 10.0.3.148 +3000.example. 5M IN A 10.0.3.149 +3000.example. 5M IN A 10.0.3.150 +3000.example. 5M IN A 10.0.3.151 +3000.example. 5M IN A 10.0.3.152 +3000.example. 5M IN A 10.0.3.153 +3000.example. 5M IN A 10.0.3.154 +3000.example. 5M IN A 10.0.3.155 +3000.example. 5M IN A 10.0.3.156 +3000.example. 5M IN A 10.0.3.157 +3000.example. 5M IN A 10.0.3.158 +3000.example. 5M IN A 10.0.3.159 +3000.example. 5M IN A 10.0.3.160 +3000.example. 5M IN A 10.0.3.161 +3000.example. 5M IN A 10.0.3.162 +3000.example. 5M IN A 10.0.3.163 +3000.example. 5M IN A 10.0.3.164 +3000.example. 5M IN A 10.0.3.165 +3000.example. 5M IN A 10.0.3.166 +3000.example. 5M IN A 10.0.3.167 +3000.example. 5M IN A 10.0.3.168 +3000.example. 5M IN A 10.0.3.169 +3000.example. 5M IN A 10.0.3.170 +3000.example. 5M IN A 10.0.3.171 +3000.example. 5M IN A 10.0.3.172 +3000.example. 5M IN A 10.0.3.173 +3000.example. 5M IN A 10.0.3.174 +3000.example. 5M IN A 10.0.3.175 +3000.example. 5M IN A 10.0.3.176 +3000.example. 5M IN A 10.0.3.177 +3000.example. 5M IN A 10.0.3.178 +3000.example. 5M IN A 10.0.3.179 +3000.example. 5M IN A 10.0.3.180 +3000.example. 5M IN A 10.0.3.181 +3000.example. 5M IN A 10.0.3.182 +3000.example. 5M IN A 10.0.3.183 +3000.example. 5M IN A 10.0.3.184 +3000.example. 5M IN A 10.0.3.185 +3000.example. 5M IN A 10.0.3.186 +3000.example. 5M IN A 10.0.3.187 +3000.example. 5M IN A 10.0.3.188 +3000.example. 5M IN A 10.0.3.189 +3000.example. 5M IN A 10.0.3.190 +3000.example. 5M IN A 10.0.3.191 +3000.example. 5M IN A 10.0.3.192 +3000.example. 5M IN A 10.0.3.193 +3000.example. 5M IN A 10.0.3.194 +3000.example. 5M IN A 10.0.3.195 +3000.example. 5M IN A 10.0.3.196 +3000.example. 5M IN A 10.0.3.197 +3000.example. 5M IN A 10.0.3.198 +3000.example. 5M IN A 10.0.3.199 +3000.example. 5M IN A 10.0.3.200 +3000.example. 5M IN A 10.0.3.201 +3000.example. 5M IN A 10.0.3.202 +3000.example. 5M IN A 10.0.3.203 +3000.example. 5M IN A 10.0.3.204 +3000.example. 5M IN A 10.0.3.205 +3000.example. 5M IN A 10.0.3.206 +3000.example. 5M IN A 10.0.3.207 +3000.example. 5M IN A 10.0.3.208 +3000.example. 5M IN A 10.0.3.209 +3000.example. 5M IN A 10.0.3.210 +3000.example. 5M IN A 10.0.3.211 +3000.example. 5M IN A 10.0.3.212 +3000.example. 5M IN A 10.0.3.213 +3000.example. 5M IN A 10.0.3.214 +3000.example. 5M IN A 10.0.3.215 +3000.example. 5M IN A 10.0.3.216 +3000.example. 5M IN A 10.0.3.217 +3000.example. 5M IN A 10.0.3.218 +3000.example. 5M IN A 10.0.3.219 +3000.example. 5M IN A 10.0.3.220 +3000.example. 5M IN A 10.0.3.221 +3000.example. 5M IN A 10.0.3.222 +3000.example. 5M IN A 10.0.3.223 +3000.example. 5M IN A 10.0.3.224 +3000.example. 5M IN A 10.0.3.225 +3000.example. 5M IN A 10.0.3.226 +3000.example. 5M IN A 10.0.3.227 +3000.example. 5M IN A 10.0.3.228 +3000.example. 5M IN A 10.0.3.229 +3000.example. 5M IN A 10.0.3.230 +3000.example. 5M IN A 10.0.3.231 +3000.example. 5M IN A 10.0.3.232 +3000.example. 5M IN A 10.0.3.233 +3000.example. 5M IN A 10.0.3.234 +3000.example. 5M IN A 10.0.3.235 +3000.example. 5M IN A 10.0.3.236 +3000.example. 5M IN A 10.0.3.237 +3000.example. 5M IN A 10.0.3.238 +3000.example. 5M IN A 10.0.3.239 +3000.example. 5M IN A 10.0.3.240 +3000.example. 5M IN A 10.0.3.241 +3000.example. 5M IN A 10.0.3.242 +3000.example. 5M IN A 10.0.3.243 +3000.example. 5M IN A 10.0.3.244 +3000.example. 5M IN A 10.0.3.245 +3000.example. 5M IN A 10.0.3.246 +3000.example. 5M IN A 10.0.3.247 +3000.example. 5M IN A 10.0.3.248 +3000.example. 5M IN A 10.0.3.249 +3000.example. 5M IN A 10.0.3.250 +3000.example. 5M IN A 10.0.3.251 +3000.example. 5M IN A 10.0.3.252 +3000.example. 5M IN A 10.0.3.253 +3000.example. 5M IN A 10.0.3.254 +3000.example. 5M IN A 10.0.3.255 +3000.example. 5M IN A 10.0.4.0 +3000.example. 5M IN A 10.0.4.1 +3000.example. 5M IN A 10.0.4.2 +3000.example. 5M IN A 10.0.4.3 +3000.example. 5M IN A 10.0.4.4 +3000.example. 5M IN A 10.0.4.5 +3000.example. 5M IN A 10.0.4.6 +3000.example. 5M IN A 10.0.4.7 +3000.example. 5M IN A 10.0.4.8 +3000.example. 5M IN A 10.0.4.9 +3000.example. 5M IN A 10.0.4.10 +3000.example. 5M IN A 10.0.4.11 +3000.example. 5M IN A 10.0.4.12 +3000.example. 5M IN A 10.0.4.13 +3000.example. 5M IN A 10.0.4.14 +3000.example. 5M IN A 10.0.4.15 +3000.example. 5M IN A 10.0.4.16 +3000.example. 5M IN A 10.0.4.17 +3000.example. 5M IN A 10.0.4.18 +3000.example. 5M IN A 10.0.4.19 +3000.example. 5M IN A 10.0.4.20 +3000.example. 5M IN A 10.0.4.21 +3000.example. 5M IN A 10.0.4.22 +3000.example. 5M IN A 10.0.4.23 +3000.example. 5M IN A 10.0.4.24 +3000.example. 5M IN A 10.0.4.25 +3000.example. 5M IN A 10.0.4.26 +3000.example. 5M IN A 10.0.4.27 +3000.example. 5M IN A 10.0.4.28 +3000.example. 5M IN A 10.0.4.29 +3000.example. 5M IN A 10.0.4.30 +3000.example. 5M IN A 10.0.4.31 +3000.example. 5M IN A 10.0.4.32 +3000.example. 5M IN A 10.0.4.33 +3000.example. 5M IN A 10.0.4.34 +3000.example. 5M IN A 10.0.4.35 +3000.example. 5M IN A 10.0.4.36 +3000.example. 5M IN A 10.0.4.37 +3000.example. 5M IN A 10.0.4.38 +3000.example. 5M IN A 10.0.4.39 +3000.example. 5M IN A 10.0.4.40 +3000.example. 5M IN A 10.0.4.41 +3000.example. 5M IN A 10.0.4.42 +3000.example. 5M IN A 10.0.4.43 +3000.example. 5M IN A 10.0.4.44 +3000.example. 5M IN A 10.0.4.45 +3000.example. 5M IN A 10.0.4.46 +3000.example. 5M IN A 10.0.4.47 +3000.example. 5M IN A 10.0.4.48 +3000.example. 5M IN A 10.0.4.49 +3000.example. 5M IN A 10.0.4.50 +3000.example. 5M IN A 10.0.4.51 +3000.example. 5M IN A 10.0.4.52 +3000.example. 5M IN A 10.0.4.53 +3000.example. 5M IN A 10.0.4.54 +3000.example. 5M IN A 10.0.4.55 +3000.example. 5M IN A 10.0.4.56 +3000.example. 5M IN A 10.0.4.57 +3000.example. 5M IN A 10.0.4.58 +3000.example. 5M IN A 10.0.4.59 +3000.example. 5M IN A 10.0.4.60 +3000.example. 5M IN A 10.0.4.61 +3000.example. 5M IN A 10.0.4.62 +3000.example. 5M IN A 10.0.4.63 +3000.example. 5M IN A 10.0.4.64 +3000.example. 5M IN A 10.0.4.65 +3000.example. 5M IN A 10.0.4.66 +3000.example. 5M IN A 10.0.4.67 +3000.example. 5M IN A 10.0.4.68 +3000.example. 5M IN A 10.0.4.69 +3000.example. 5M IN A 10.0.4.70 +3000.example. 5M IN A 10.0.4.71 +3000.example. 5M IN A 10.0.4.72 +3000.example. 5M IN A 10.0.4.73 +3000.example. 5M IN A 10.0.4.74 +3000.example. 5M IN A 10.0.4.75 +3000.example. 5M IN A 10.0.4.76 +3000.example. 5M IN A 10.0.4.77 +3000.example. 5M IN A 10.0.4.78 +3000.example. 5M IN A 10.0.4.79 +3000.example. 5M IN A 10.0.4.80 +3000.example. 5M IN A 10.0.4.81 +3000.example. 5M IN A 10.0.4.82 +3000.example. 5M IN A 10.0.4.83 +3000.example. 5M IN A 10.0.4.84 +3000.example. 5M IN A 10.0.4.85 +3000.example. 5M IN A 10.0.4.86 +3000.example. 5M IN A 10.0.4.87 +3000.example. 5M IN A 10.0.4.88 +3000.example. 5M IN A 10.0.4.89 +3000.example. 5M IN A 10.0.4.90 +3000.example. 5M IN A 10.0.4.91 +3000.example. 5M IN A 10.0.4.92 +3000.example. 5M IN A 10.0.4.93 +3000.example. 5M IN A 10.0.4.94 +3000.example. 5M IN A 10.0.4.95 +3000.example. 5M IN A 10.0.4.96 +3000.example. 5M IN A 10.0.4.97 +3000.example. 5M IN A 10.0.4.98 +3000.example. 5M IN A 10.0.4.99 +3000.example. 5M IN A 10.0.4.100 +3000.example. 5M IN A 10.0.4.101 +3000.example. 5M IN A 10.0.4.102 +3000.example. 5M IN A 10.0.4.103 +3000.example. 5M IN A 10.0.4.104 +3000.example. 5M IN A 10.0.4.105 +3000.example. 5M IN A 10.0.4.106 +3000.example. 5M IN A 10.0.4.107 +3000.example. 5M IN A 10.0.4.108 +3000.example. 5M IN A 10.0.4.109 +3000.example. 5M IN A 10.0.4.110 +3000.example. 5M IN A 10.0.4.111 +3000.example. 5M IN A 10.0.4.112 +3000.example. 5M IN A 10.0.4.113 +3000.example. 5M IN A 10.0.4.114 +3000.example. 5M IN A 10.0.4.115 +3000.example. 5M IN A 10.0.4.116 +3000.example. 5M IN A 10.0.4.117 +3000.example. 5M IN A 10.0.4.118 +3000.example. 5M IN A 10.0.4.119 +3000.example. 5M IN A 10.0.4.120 +3000.example. 5M IN A 10.0.4.121 +3000.example. 5M IN A 10.0.4.122 +3000.example. 5M IN A 10.0.4.123 +3000.example. 5M IN A 10.0.4.124 +3000.example. 5M IN A 10.0.4.125 +3000.example. 5M IN A 10.0.4.126 +3000.example. 5M IN A 10.0.4.127 +3000.example. 5M IN A 10.0.4.128 +3000.example. 5M IN A 10.0.4.129 +3000.example. 5M IN A 10.0.4.130 +3000.example. 5M IN A 10.0.4.131 +3000.example. 5M IN A 10.0.4.132 +3000.example. 5M IN A 10.0.4.133 +3000.example. 5M IN A 10.0.4.134 +3000.example. 5M IN A 10.0.4.135 +3000.example. 5M IN A 10.0.4.136 +3000.example. 5M IN A 10.0.4.137 +3000.example. 5M IN A 10.0.4.138 +3000.example. 5M IN A 10.0.4.139 +3000.example. 5M IN A 10.0.4.140 +3000.example. 5M IN A 10.0.4.141 +3000.example. 5M IN A 10.0.4.142 +3000.example. 5M IN A 10.0.4.143 +3000.example. 5M IN A 10.0.4.144 +3000.example. 5M IN A 10.0.4.145 +3000.example. 5M IN A 10.0.4.146 +3000.example. 5M IN A 10.0.4.147 +3000.example. 5M IN A 10.0.4.148 +3000.example. 5M IN A 10.0.4.149 +3000.example. 5M IN A 10.0.4.150 +3000.example. 5M IN A 10.0.4.151 +3000.example. 5M IN A 10.0.4.152 +3000.example. 5M IN A 10.0.4.153 +3000.example. 5M IN A 10.0.4.154 +3000.example. 5M IN A 10.0.4.155 +3000.example. 5M IN A 10.0.4.156 +3000.example. 5M IN A 10.0.4.157 +3000.example. 5M IN A 10.0.4.158 +3000.example. 5M IN A 10.0.4.159 +3000.example. 5M IN A 10.0.4.160 +3000.example. 5M IN A 10.0.4.161 +3000.example. 5M IN A 10.0.4.162 +3000.example. 5M IN A 10.0.4.163 +3000.example. 5M IN A 10.0.4.164 +3000.example. 5M IN A 10.0.4.165 +3000.example. 5M IN A 10.0.4.166 +3000.example. 5M IN A 10.0.4.167 +3000.example. 5M IN A 10.0.4.168 +3000.example. 5M IN A 10.0.4.169 +3000.example. 5M IN A 10.0.4.170 +3000.example. 5M IN A 10.0.4.171 +3000.example. 5M IN A 10.0.4.172 +3000.example. 5M IN A 10.0.4.173 +3000.example. 5M IN A 10.0.4.174 +3000.example. 5M IN A 10.0.4.175 +3000.example. 5M IN A 10.0.4.176 +3000.example. 5M IN A 10.0.4.177 +3000.example. 5M IN A 10.0.4.178 +3000.example. 5M IN A 10.0.4.179 +3000.example. 5M IN A 10.0.4.180 +3000.example. 5M IN A 10.0.4.181 +3000.example. 5M IN A 10.0.4.182 +3000.example. 5M IN A 10.0.4.183 +3000.example. 5M IN A 10.0.4.184 +3000.example. 5M IN A 10.0.4.185 +3000.example. 5M IN A 10.0.4.186 +3000.example. 5M IN A 10.0.4.187 +3000.example. 5M IN A 10.0.4.188 +3000.example. 5M IN A 10.0.4.189 +3000.example. 5M IN A 10.0.4.190 +3000.example. 5M IN A 10.0.4.191 +3000.example. 5M IN A 10.0.4.192 +3000.example. 5M IN A 10.0.4.193 +3000.example. 5M IN A 10.0.4.194 +3000.example. 5M IN A 10.0.4.195 +3000.example. 5M IN A 10.0.4.196 +3000.example. 5M IN A 10.0.4.197 +3000.example. 5M IN A 10.0.4.198 +3000.example. 5M IN A 10.0.4.199 +3000.example. 5M IN A 10.0.4.200 +3000.example. 5M IN A 10.0.4.201 +3000.example. 5M IN A 10.0.4.202 +3000.example. 5M IN A 10.0.4.203 +3000.example. 5M IN A 10.0.4.204 +3000.example. 5M IN A 10.0.4.205 +3000.example. 5M IN A 10.0.4.206 +3000.example. 5M IN A 10.0.4.207 +3000.example. 5M IN A 10.0.4.208 +3000.example. 5M IN A 10.0.4.209 +3000.example. 5M IN A 10.0.4.210 +3000.example. 5M IN A 10.0.4.211 +3000.example. 5M IN A 10.0.4.212 +3000.example. 5M IN A 10.0.4.213 +3000.example. 5M IN A 10.0.4.214 +3000.example. 5M IN A 10.0.4.215 +3000.example. 5M IN A 10.0.4.216 +3000.example. 5M IN A 10.0.4.217 +3000.example. 5M IN A 10.0.4.218 +3000.example. 5M IN A 10.0.4.219 +3000.example. 5M IN A 10.0.4.220 +3000.example. 5M IN A 10.0.4.221 +3000.example. 5M IN A 10.0.4.222 +3000.example. 5M IN A 10.0.4.223 +3000.example. 5M IN A 10.0.4.224 +3000.example. 5M IN A 10.0.4.225 +3000.example. 5M IN A 10.0.4.226 +3000.example. 5M IN A 10.0.4.227 +3000.example. 5M IN A 10.0.4.228 +3000.example. 5M IN A 10.0.4.229 +3000.example. 5M IN A 10.0.4.230 +3000.example. 5M IN A 10.0.4.231 +3000.example. 5M IN A 10.0.4.232 +3000.example. 5M IN A 10.0.4.233 +3000.example. 5M IN A 10.0.4.234 +3000.example. 5M IN A 10.0.4.235 +3000.example. 5M IN A 10.0.4.236 +3000.example. 5M IN A 10.0.4.237 +3000.example. 5M IN A 10.0.4.238 +3000.example. 5M IN A 10.0.4.239 +3000.example. 5M IN A 10.0.4.240 +3000.example. 5M IN A 10.0.4.241 +3000.example. 5M IN A 10.0.4.242 +3000.example. 5M IN A 10.0.4.243 +3000.example. 5M IN A 10.0.4.244 +3000.example. 5M IN A 10.0.4.245 +3000.example. 5M IN A 10.0.4.246 +3000.example. 5M IN A 10.0.4.247 +3000.example. 5M IN A 10.0.4.248 +3000.example. 5M IN A 10.0.4.249 +3000.example. 5M IN A 10.0.4.250 +3000.example. 5M IN A 10.0.4.251 +3000.example. 5M IN A 10.0.4.252 +3000.example. 5M IN A 10.0.4.253 +3000.example. 5M IN A 10.0.4.254 +3000.example. 5M IN A 10.0.4.255 +3000.example. 5M IN A 10.0.5.0 +3000.example. 5M IN A 10.0.5.1 +3000.example. 5M IN A 10.0.5.2 +3000.example. 5M IN A 10.0.5.3 +3000.example. 5M IN A 10.0.5.4 +3000.example. 5M IN A 10.0.5.5 +3000.example. 5M IN A 10.0.5.6 +3000.example. 5M IN A 10.0.5.7 +3000.example. 5M IN A 10.0.5.8 +3000.example. 5M IN A 10.0.5.9 +3000.example. 5M IN A 10.0.5.10 +3000.example. 5M IN A 10.0.5.11 +3000.example. 5M IN A 10.0.5.12 +3000.example. 5M IN A 10.0.5.13 +3000.example. 5M IN A 10.0.5.14 +3000.example. 5M IN A 10.0.5.15 +3000.example. 5M IN A 10.0.5.16 +3000.example. 5M IN A 10.0.5.17 +3000.example. 5M IN A 10.0.5.18 +3000.example. 5M IN A 10.0.5.19 +3000.example. 5M IN A 10.0.5.20 +3000.example. 5M IN A 10.0.5.21 +3000.example. 5M IN A 10.0.5.22 +3000.example. 5M IN A 10.0.5.23 +3000.example. 5M IN A 10.0.5.24 +3000.example. 5M IN A 10.0.5.25 +3000.example. 5M IN A 10.0.5.26 +3000.example. 5M IN A 10.0.5.27 +3000.example. 5M IN A 10.0.5.28 +3000.example. 5M IN A 10.0.5.29 +3000.example. 5M IN A 10.0.5.30 +3000.example. 5M IN A 10.0.5.31 +3000.example. 5M IN A 10.0.5.32 +3000.example. 5M IN A 10.0.5.33 +3000.example. 5M IN A 10.0.5.34 +3000.example. 5M IN A 10.0.5.35 +3000.example. 5M IN A 10.0.5.36 +3000.example. 5M IN A 10.0.5.37 +3000.example. 5M IN A 10.0.5.38 +3000.example. 5M IN A 10.0.5.39 +3000.example. 5M IN A 10.0.5.40 +3000.example. 5M IN A 10.0.5.41 +3000.example. 5M IN A 10.0.5.42 +3000.example. 5M IN A 10.0.5.43 +3000.example. 5M IN A 10.0.5.44 +3000.example. 5M IN A 10.0.5.45 +3000.example. 5M IN A 10.0.5.46 +3000.example. 5M IN A 10.0.5.47 +3000.example. 5M IN A 10.0.5.48 +3000.example. 5M IN A 10.0.5.49 +3000.example. 5M IN A 10.0.5.50 +3000.example. 5M IN A 10.0.5.51 +3000.example. 5M IN A 10.0.5.52 +3000.example. 5M IN A 10.0.5.53 +3000.example. 5M IN A 10.0.5.54 +3000.example. 5M IN A 10.0.5.55 +3000.example. 5M IN A 10.0.5.56 +3000.example. 5M IN A 10.0.5.57 +3000.example. 5M IN A 10.0.5.58 +3000.example. 5M IN A 10.0.5.59 +3000.example. 5M IN A 10.0.5.60 +3000.example. 5M IN A 10.0.5.61 +3000.example. 5M IN A 10.0.5.62 +3000.example. 5M IN A 10.0.5.63 +3000.example. 5M IN A 10.0.5.64 +3000.example. 5M IN A 10.0.5.65 +3000.example. 5M IN A 10.0.5.66 +3000.example. 5M IN A 10.0.5.67 +3000.example. 5M IN A 10.0.5.68 +3000.example. 5M IN A 10.0.5.69 +3000.example. 5M IN A 10.0.5.70 +3000.example. 5M IN A 10.0.5.71 +3000.example. 5M IN A 10.0.5.72 +3000.example. 5M IN A 10.0.5.73 +3000.example. 5M IN A 10.0.5.74 +3000.example. 5M IN A 10.0.5.75 +3000.example. 5M IN A 10.0.5.76 +3000.example. 5M IN A 10.0.5.77 +3000.example. 5M IN A 10.0.5.78 +3000.example. 5M IN A 10.0.5.79 +3000.example. 5M IN A 10.0.5.80 +3000.example. 5M IN A 10.0.5.81 +3000.example. 5M IN A 10.0.5.82 +3000.example. 5M IN A 10.0.5.83 +3000.example. 5M IN A 10.0.5.84 +3000.example. 5M IN A 10.0.5.85 +3000.example. 5M IN A 10.0.5.86 +3000.example. 5M IN A 10.0.5.87 +3000.example. 5M IN A 10.0.5.88 +3000.example. 5M IN A 10.0.5.89 +3000.example. 5M IN A 10.0.5.90 +3000.example. 5M IN A 10.0.5.91 +3000.example. 5M IN A 10.0.5.92 +3000.example. 5M IN A 10.0.5.93 +3000.example. 5M IN A 10.0.5.94 +3000.example. 5M IN A 10.0.5.95 +3000.example. 5M IN A 10.0.5.96 +3000.example. 5M IN A 10.0.5.97 +3000.example. 5M IN A 10.0.5.98 +3000.example. 5M IN A 10.0.5.99 +3000.example. 5M IN A 10.0.5.100 +3000.example. 5M IN A 10.0.5.101 +3000.example. 5M IN A 10.0.5.102 +3000.example. 5M IN A 10.0.5.103 +3000.example. 5M IN A 10.0.5.104 +3000.example. 5M IN A 10.0.5.105 +3000.example. 5M IN A 10.0.5.106 +3000.example. 5M IN A 10.0.5.107 +3000.example. 5M IN A 10.0.5.108 +3000.example. 5M IN A 10.0.5.109 +3000.example. 5M IN A 10.0.5.110 +3000.example. 5M IN A 10.0.5.111 +3000.example. 5M IN A 10.0.5.112 +3000.example. 5M IN A 10.0.5.113 +3000.example. 5M IN A 10.0.5.114 +3000.example. 5M IN A 10.0.5.115 +3000.example. 5M IN A 10.0.5.116 +3000.example. 5M IN A 10.0.5.117 +3000.example. 5M IN A 10.0.5.118 +3000.example. 5M IN A 10.0.5.119 +3000.example. 5M IN A 10.0.5.120 +3000.example. 5M IN A 10.0.5.121 +3000.example. 5M IN A 10.0.5.122 +3000.example. 5M IN A 10.0.5.123 +3000.example. 5M IN A 10.0.5.124 +3000.example. 5M IN A 10.0.5.125 +3000.example. 5M IN A 10.0.5.126 +3000.example. 5M IN A 10.0.5.127 +3000.example. 5M IN A 10.0.5.128 +3000.example. 5M IN A 10.0.5.129 +3000.example. 5M IN A 10.0.5.130 +3000.example. 5M IN A 10.0.5.131 +3000.example. 5M IN A 10.0.5.132 +3000.example. 5M IN A 10.0.5.133 +3000.example. 5M IN A 10.0.5.134 +3000.example. 5M IN A 10.0.5.135 +3000.example. 5M IN A 10.0.5.136 +3000.example. 5M IN A 10.0.5.137 +3000.example. 5M IN A 10.0.5.138 +3000.example. 5M IN A 10.0.5.139 +3000.example. 5M IN A 10.0.5.140 +3000.example. 5M IN A 10.0.5.141 +3000.example. 5M IN A 10.0.5.142 +3000.example. 5M IN A 10.0.5.143 +3000.example. 5M IN A 10.0.5.144 +3000.example. 5M IN A 10.0.5.145 +3000.example. 5M IN A 10.0.5.146 +3000.example. 5M IN A 10.0.5.147 +3000.example. 5M IN A 10.0.5.148 +3000.example. 5M IN A 10.0.5.149 +3000.example. 5M IN A 10.0.5.150 +3000.example. 5M IN A 10.0.5.151 +3000.example. 5M IN A 10.0.5.152 +3000.example. 5M IN A 10.0.5.153 +3000.example. 5M IN A 10.0.5.154 +3000.example. 5M IN A 10.0.5.155 +3000.example. 5M IN A 10.0.5.156 +3000.example. 5M IN A 10.0.5.157 +3000.example. 5M IN A 10.0.5.158 +3000.example. 5M IN A 10.0.5.159 +3000.example. 5M IN A 10.0.5.160 +3000.example. 5M IN A 10.0.5.161 +3000.example. 5M IN A 10.0.5.162 +3000.example. 5M IN A 10.0.5.163 +3000.example. 5M IN A 10.0.5.164 +3000.example. 5M IN A 10.0.5.165 +3000.example. 5M IN A 10.0.5.166 +3000.example. 5M IN A 10.0.5.167 +3000.example. 5M IN A 10.0.5.168 +3000.example. 5M IN A 10.0.5.169 +3000.example. 5M IN A 10.0.5.170 +3000.example. 5M IN A 10.0.5.171 +3000.example. 5M IN A 10.0.5.172 +3000.example. 5M IN A 10.0.5.173 +3000.example. 5M IN A 10.0.5.174 +3000.example. 5M IN A 10.0.5.175 +3000.example. 5M IN A 10.0.5.176 +3000.example. 5M IN A 10.0.5.177 +3000.example. 5M IN A 10.0.5.178 +3000.example. 5M IN A 10.0.5.179 +3000.example. 5M IN A 10.0.5.180 +3000.example. 5M IN A 10.0.5.181 +3000.example. 5M IN A 10.0.5.182 +3000.example. 5M IN A 10.0.5.183 +3000.example. 5M IN A 10.0.5.184 +3000.example. 5M IN A 10.0.5.185 +3000.example. 5M IN A 10.0.5.186 +3000.example. 5M IN A 10.0.5.187 +3000.example. 5M IN A 10.0.5.188 +3000.example. 5M IN A 10.0.5.189 +3000.example. 5M IN A 10.0.5.190 +3000.example. 5M IN A 10.0.5.191 +3000.example. 5M IN A 10.0.5.192 +3000.example. 5M IN A 10.0.5.193 +3000.example. 5M IN A 10.0.5.194 +3000.example. 5M IN A 10.0.5.195 +3000.example. 5M IN A 10.0.5.196 +3000.example. 5M IN A 10.0.5.197 +3000.example. 5M IN A 10.0.5.198 +3000.example. 5M IN A 10.0.5.199 +3000.example. 5M IN A 10.0.5.200 +3000.example. 5M IN A 10.0.5.201 +3000.example. 5M IN A 10.0.5.202 +3000.example. 5M IN A 10.0.5.203 +3000.example. 5M IN A 10.0.5.204 +3000.example. 5M IN A 10.0.5.205 +3000.example. 5M IN A 10.0.5.206 +3000.example. 5M IN A 10.0.5.207 +3000.example. 5M IN A 10.0.5.208 +3000.example. 5M IN A 10.0.5.209 +3000.example. 5M IN A 10.0.5.210 +3000.example. 5M IN A 10.0.5.211 +3000.example. 5M IN A 10.0.5.212 +3000.example. 5M IN A 10.0.5.213 +3000.example. 5M IN A 10.0.5.214 +3000.example. 5M IN A 10.0.5.215 +3000.example. 5M IN A 10.0.5.216 +3000.example. 5M IN A 10.0.5.217 +3000.example. 5M IN A 10.0.5.218 +3000.example. 5M IN A 10.0.5.219 +3000.example. 5M IN A 10.0.5.220 +3000.example. 5M IN A 10.0.5.221 +3000.example. 5M IN A 10.0.5.222 +3000.example. 5M IN A 10.0.5.223 +3000.example. 5M IN A 10.0.5.224 +3000.example. 5M IN A 10.0.5.225 +3000.example. 5M IN A 10.0.5.226 +3000.example. 5M IN A 10.0.5.227 +3000.example. 5M IN A 10.0.5.228 +3000.example. 5M IN A 10.0.5.229 +3000.example. 5M IN A 10.0.5.230 +3000.example. 5M IN A 10.0.5.231 +3000.example. 5M IN A 10.0.5.232 +3000.example. 5M IN A 10.0.5.233 +3000.example. 5M IN A 10.0.5.234 +3000.example. 5M IN A 10.0.5.235 +3000.example. 5M IN A 10.0.5.236 +3000.example. 5M IN A 10.0.5.237 +3000.example. 5M IN A 10.0.5.238 +3000.example. 5M IN A 10.0.5.239 +3000.example. 5M IN A 10.0.5.240 +3000.example. 5M IN A 10.0.5.241 +3000.example. 5M IN A 10.0.5.242 +3000.example. 5M IN A 10.0.5.243 +3000.example. 5M IN A 10.0.5.244 +3000.example. 5M IN A 10.0.5.245 +3000.example. 5M IN A 10.0.5.246 +3000.example. 5M IN A 10.0.5.247 +3000.example. 5M IN A 10.0.5.248 +3000.example. 5M IN A 10.0.5.249 +3000.example. 5M IN A 10.0.5.250 +3000.example. 5M IN A 10.0.5.251 +3000.example. 5M IN A 10.0.5.252 +3000.example. 5M IN A 10.0.5.253 +3000.example. 5M IN A 10.0.5.254 +3000.example. 5M IN A 10.0.5.255 +3000.example. 5M IN A 10.0.6.0 +3000.example. 5M IN A 10.0.6.1 +3000.example. 5M IN A 10.0.6.2 +3000.example. 5M IN A 10.0.6.3 +3000.example. 5M IN A 10.0.6.4 +3000.example. 5M IN A 10.0.6.5 +3000.example. 5M IN A 10.0.6.6 +3000.example. 5M IN A 10.0.6.7 +3000.example. 5M IN A 10.0.6.8 +3000.example. 5M IN A 10.0.6.9 +3000.example. 5M IN A 10.0.6.10 +3000.example. 5M IN A 10.0.6.11 +3000.example. 5M IN A 10.0.6.12 +3000.example. 5M IN A 10.0.6.13 +3000.example. 5M IN A 10.0.6.14 +3000.example. 5M IN A 10.0.6.15 +3000.example. 5M IN A 10.0.6.16 +3000.example. 5M IN A 10.0.6.17 +3000.example. 5M IN A 10.0.6.18 +3000.example. 5M IN A 10.0.6.19 +3000.example. 5M IN A 10.0.6.20 +3000.example. 5M IN A 10.0.6.21 +3000.example. 5M IN A 10.0.6.22 +3000.example. 5M IN A 10.0.6.23 +3000.example. 5M IN A 10.0.6.24 +3000.example. 5M IN A 10.0.6.25 +3000.example. 5M IN A 10.0.6.26 +3000.example. 5M IN A 10.0.6.27 +3000.example. 5M IN A 10.0.6.28 +3000.example. 5M IN A 10.0.6.29 +3000.example. 5M IN A 10.0.6.30 +3000.example. 5M IN A 10.0.6.31 +3000.example. 5M IN A 10.0.6.32 +3000.example. 5M IN A 10.0.6.33 +3000.example. 5M IN A 10.0.6.34 +3000.example. 5M IN A 10.0.6.35 +3000.example. 5M IN A 10.0.6.36 +3000.example. 5M IN A 10.0.6.37 +3000.example. 5M IN A 10.0.6.38 +3000.example. 5M IN A 10.0.6.39 +3000.example. 5M IN A 10.0.6.40 +3000.example. 5M IN A 10.0.6.41 +3000.example. 5M IN A 10.0.6.42 +3000.example. 5M IN A 10.0.6.43 +3000.example. 5M IN A 10.0.6.44 +3000.example. 5M IN A 10.0.6.45 +3000.example. 5M IN A 10.0.6.46 +3000.example. 5M IN A 10.0.6.47 +3000.example. 5M IN A 10.0.6.48 +3000.example. 5M IN A 10.0.6.49 +3000.example. 5M IN A 10.0.6.50 +3000.example. 5M IN A 10.0.6.51 +3000.example. 5M IN A 10.0.6.52 +3000.example. 5M IN A 10.0.6.53 +3000.example. 5M IN A 10.0.6.54 +3000.example. 5M IN A 10.0.6.55 +3000.example. 5M IN A 10.0.6.56 +3000.example. 5M IN A 10.0.6.57 +3000.example. 5M IN A 10.0.6.58 +3000.example. 5M IN A 10.0.6.59 +3000.example. 5M IN A 10.0.6.60 +3000.example. 5M IN A 10.0.6.61 +3000.example. 5M IN A 10.0.6.62 +3000.example. 5M IN A 10.0.6.63 +3000.example. 5M IN A 10.0.6.64 +3000.example. 5M IN A 10.0.6.65 +3000.example. 5M IN A 10.0.6.66 +3000.example. 5M IN A 10.0.6.67 +3000.example. 5M IN A 10.0.6.68 +3000.example. 5M IN A 10.0.6.69 +3000.example. 5M IN A 10.0.6.70 +3000.example. 5M IN A 10.0.6.71 +3000.example. 5M IN A 10.0.6.72 +3000.example. 5M IN A 10.0.6.73 +3000.example. 5M IN A 10.0.6.74 +3000.example. 5M IN A 10.0.6.75 +3000.example. 5M IN A 10.0.6.76 +3000.example. 5M IN A 10.0.6.77 +3000.example. 5M IN A 10.0.6.78 +3000.example. 5M IN A 10.0.6.79 +3000.example. 5M IN A 10.0.6.80 +3000.example. 5M IN A 10.0.6.81 +3000.example. 5M IN A 10.0.6.82 +3000.example. 5M IN A 10.0.6.83 +3000.example. 5M IN A 10.0.6.84 +3000.example. 5M IN A 10.0.6.85 +3000.example. 5M IN A 10.0.6.86 +3000.example. 5M IN A 10.0.6.87 +3000.example. 5M IN A 10.0.6.88 +3000.example. 5M IN A 10.0.6.89 +3000.example. 5M IN A 10.0.6.90 +3000.example. 5M IN A 10.0.6.91 +3000.example. 5M IN A 10.0.6.92 +3000.example. 5M IN A 10.0.6.93 +3000.example. 5M IN A 10.0.6.94 +3000.example. 5M IN A 10.0.6.95 +3000.example. 5M IN A 10.0.6.96 +3000.example. 5M IN A 10.0.6.97 +3000.example. 5M IN A 10.0.6.98 +3000.example. 5M IN A 10.0.6.99 +3000.example. 5M IN A 10.0.6.100 +3000.example. 5M IN A 10.0.6.101 +3000.example. 5M IN A 10.0.6.102 +3000.example. 5M IN A 10.0.6.103 +3000.example. 5M IN A 10.0.6.104 +3000.example. 5M IN A 10.0.6.105 +3000.example. 5M IN A 10.0.6.106 +3000.example. 5M IN A 10.0.6.107 +3000.example. 5M IN A 10.0.6.108 +3000.example. 5M IN A 10.0.6.109 +3000.example. 5M IN A 10.0.6.110 +3000.example. 5M IN A 10.0.6.111 +3000.example. 5M IN A 10.0.6.112 +3000.example. 5M IN A 10.0.6.113 +3000.example. 5M IN A 10.0.6.114 +3000.example. 5M IN A 10.0.6.115 +3000.example. 5M IN A 10.0.6.116 +3000.example. 5M IN A 10.0.6.117 +3000.example. 5M IN A 10.0.6.118 +3000.example. 5M IN A 10.0.6.119 +3000.example. 5M IN A 10.0.6.120 +3000.example. 5M IN A 10.0.6.121 +3000.example. 5M IN A 10.0.6.122 +3000.example. 5M IN A 10.0.6.123 +3000.example. 5M IN A 10.0.6.124 +3000.example. 5M IN A 10.0.6.125 +3000.example. 5M IN A 10.0.6.126 +3000.example. 5M IN A 10.0.6.127 +3000.example. 5M IN A 10.0.6.128 +3000.example. 5M IN A 10.0.6.129 +3000.example. 5M IN A 10.0.6.130 +3000.example. 5M IN A 10.0.6.131 +3000.example. 5M IN A 10.0.6.132 +3000.example. 5M IN A 10.0.6.133 +3000.example. 5M IN A 10.0.6.134 +3000.example. 5M IN A 10.0.6.135 +3000.example. 5M IN A 10.0.6.136 +3000.example. 5M IN A 10.0.6.137 +3000.example. 5M IN A 10.0.6.138 +3000.example. 5M IN A 10.0.6.139 +3000.example. 5M IN A 10.0.6.140 +3000.example. 5M IN A 10.0.6.141 +3000.example. 5M IN A 10.0.6.142 +3000.example. 5M IN A 10.0.6.143 +3000.example. 5M IN A 10.0.6.144 +3000.example. 5M IN A 10.0.6.145 +3000.example. 5M IN A 10.0.6.146 +3000.example. 5M IN A 10.0.6.147 +3000.example. 5M IN A 10.0.6.148 +3000.example. 5M IN A 10.0.6.149 +3000.example. 5M IN A 10.0.6.150 +3000.example. 5M IN A 10.0.6.151 +3000.example. 5M IN A 10.0.6.152 +3000.example. 5M IN A 10.0.6.153 +3000.example. 5M IN A 10.0.6.154 +3000.example. 5M IN A 10.0.6.155 +3000.example. 5M IN A 10.0.6.156 +3000.example. 5M IN A 10.0.6.157 +3000.example. 5M IN A 10.0.6.158 +3000.example. 5M IN A 10.0.6.159 +3000.example. 5M IN A 10.0.6.160 +3000.example. 5M IN A 10.0.6.161 +3000.example. 5M IN A 10.0.6.162 +3000.example. 5M IN A 10.0.6.163 +3000.example. 5M IN A 10.0.6.164 +3000.example. 5M IN A 10.0.6.165 +3000.example. 5M IN A 10.0.6.166 +3000.example. 5M IN A 10.0.6.167 +3000.example. 5M IN A 10.0.6.168 +3000.example. 5M IN A 10.0.6.169 +3000.example. 5M IN A 10.0.6.170 +3000.example. 5M IN A 10.0.6.171 +3000.example. 5M IN A 10.0.6.172 +3000.example. 5M IN A 10.0.6.173 +3000.example. 5M IN A 10.0.6.174 +3000.example. 5M IN A 10.0.6.175 +3000.example. 5M IN A 10.0.6.176 +3000.example. 5M IN A 10.0.6.177 +3000.example. 5M IN A 10.0.6.178 +3000.example. 5M IN A 10.0.6.179 +3000.example. 5M IN A 10.0.6.180 +3000.example. 5M IN A 10.0.6.181 +3000.example. 5M IN A 10.0.6.182 +3000.example. 5M IN A 10.0.6.183 +3000.example. 5M IN A 10.0.6.184 +3000.example. 5M IN A 10.0.6.185 +3000.example. 5M IN A 10.0.6.186 +3000.example. 5M IN A 10.0.6.187 +3000.example. 5M IN A 10.0.6.188 +3000.example. 5M IN A 10.0.6.189 +3000.example. 5M IN A 10.0.6.190 +3000.example. 5M IN A 10.0.6.191 +3000.example. 5M IN A 10.0.6.192 +3000.example. 5M IN A 10.0.6.193 +3000.example. 5M IN A 10.0.6.194 +3000.example. 5M IN A 10.0.6.195 +3000.example. 5M IN A 10.0.6.196 +3000.example. 5M IN A 10.0.6.197 +3000.example. 5M IN A 10.0.6.198 +3000.example. 5M IN A 10.0.6.199 +3000.example. 5M IN A 10.0.6.200 +3000.example. 5M IN A 10.0.6.201 +3000.example. 5M IN A 10.0.6.202 +3000.example. 5M IN A 10.0.6.203 +3000.example. 5M IN A 10.0.6.204 +3000.example. 5M IN A 10.0.6.205 +3000.example. 5M IN A 10.0.6.206 +3000.example. 5M IN A 10.0.6.207 +3000.example. 5M IN A 10.0.6.208 +3000.example. 5M IN A 10.0.6.209 +3000.example. 5M IN A 10.0.6.210 +3000.example. 5M IN A 10.0.6.211 +3000.example. 5M IN A 10.0.6.212 +3000.example. 5M IN A 10.0.6.213 +3000.example. 5M IN A 10.0.6.214 +3000.example. 5M IN A 10.0.6.215 +3000.example. 5M IN A 10.0.6.216 +3000.example. 5M IN A 10.0.6.217 +3000.example. 5M IN A 10.0.6.218 +3000.example. 5M IN A 10.0.6.219 +3000.example. 5M IN A 10.0.6.220 +3000.example. 5M IN A 10.0.6.221 +3000.example. 5M IN A 10.0.6.222 +3000.example. 5M IN A 10.0.6.223 +3000.example. 5M IN A 10.0.6.224 +3000.example. 5M IN A 10.0.6.225 +3000.example. 5M IN A 10.0.6.226 +3000.example. 5M IN A 10.0.6.227 +3000.example. 5M IN A 10.0.6.228 +3000.example. 5M IN A 10.0.6.229 +3000.example. 5M IN A 10.0.6.230 +3000.example. 5M IN A 10.0.6.231 +3000.example. 5M IN A 10.0.6.232 +3000.example. 5M IN A 10.0.6.233 +3000.example. 5M IN A 10.0.6.234 +3000.example. 5M IN A 10.0.6.235 +3000.example. 5M IN A 10.0.6.236 +3000.example. 5M IN A 10.0.6.237 +3000.example. 5M IN A 10.0.6.238 +3000.example. 5M IN A 10.0.6.239 +3000.example. 5M IN A 10.0.6.240 +3000.example. 5M IN A 10.0.6.241 +3000.example. 5M IN A 10.0.6.242 +3000.example. 5M IN A 10.0.6.243 +3000.example. 5M IN A 10.0.6.244 +3000.example. 5M IN A 10.0.6.245 +3000.example. 5M IN A 10.0.6.246 +3000.example. 5M IN A 10.0.6.247 +3000.example. 5M IN A 10.0.6.248 +3000.example. 5M IN A 10.0.6.249 +3000.example. 5M IN A 10.0.6.250 +3000.example. 5M IN A 10.0.6.251 +3000.example. 5M IN A 10.0.6.252 +3000.example. 5M IN A 10.0.6.253 +3000.example. 5M IN A 10.0.6.254 +3000.example. 5M IN A 10.0.6.255 +3000.example. 5M IN A 10.0.7.0 +3000.example. 5M IN A 10.0.7.1 +3000.example. 5M IN A 10.0.7.2 +3000.example. 5M IN A 10.0.7.3 +3000.example. 5M IN A 10.0.7.4 +3000.example. 5M IN A 10.0.7.5 +3000.example. 5M IN A 10.0.7.6 +3000.example. 5M IN A 10.0.7.7 +3000.example. 5M IN A 10.0.7.8 +3000.example. 5M IN A 10.0.7.9 +3000.example. 5M IN A 10.0.7.10 +3000.example. 5M IN A 10.0.7.11 +3000.example. 5M IN A 10.0.7.12 +3000.example. 5M IN A 10.0.7.13 +3000.example. 5M IN A 10.0.7.14 +3000.example. 5M IN A 10.0.7.15 +3000.example. 5M IN A 10.0.7.16 +3000.example. 5M IN A 10.0.7.17 +3000.example. 5M IN A 10.0.7.18 +3000.example. 5M IN A 10.0.7.19 +3000.example. 5M IN A 10.0.7.20 +3000.example. 5M IN A 10.0.7.21 +3000.example. 5M IN A 10.0.7.22 +3000.example. 5M IN A 10.0.7.23 +3000.example. 5M IN A 10.0.7.24 +3000.example. 5M IN A 10.0.7.25 +3000.example. 5M IN A 10.0.7.26 +3000.example. 5M IN A 10.0.7.27 +3000.example. 5M IN A 10.0.7.28 +3000.example. 5M IN A 10.0.7.29 +3000.example. 5M IN A 10.0.7.30 +3000.example. 5M IN A 10.0.7.31 +3000.example. 5M IN A 10.0.7.32 +3000.example. 5M IN A 10.0.7.33 +3000.example. 5M IN A 10.0.7.34 +3000.example. 5M IN A 10.0.7.35 +3000.example. 5M IN A 10.0.7.36 +3000.example. 5M IN A 10.0.7.37 +3000.example. 5M IN A 10.0.7.38 +3000.example. 5M IN A 10.0.7.39 +3000.example. 5M IN A 10.0.7.40 +3000.example. 5M IN A 10.0.7.41 +3000.example. 5M IN A 10.0.7.42 +3000.example. 5M IN A 10.0.7.43 +3000.example. 5M IN A 10.0.7.44 +3000.example. 5M IN A 10.0.7.45 +3000.example. 5M IN A 10.0.7.46 +3000.example. 5M IN A 10.0.7.47 +3000.example. 5M IN A 10.0.7.48 +3000.example. 5M IN A 10.0.7.49 +3000.example. 5M IN A 10.0.7.50 +3000.example. 5M IN A 10.0.7.51 +3000.example. 5M IN A 10.0.7.52 +3000.example. 5M IN A 10.0.7.53 +3000.example. 5M IN A 10.0.7.54 +3000.example. 5M IN A 10.0.7.55 +3000.example. 5M IN A 10.0.7.56 +3000.example. 5M IN A 10.0.7.57 +3000.example. 5M IN A 10.0.7.58 +3000.example. 5M IN A 10.0.7.59 +3000.example. 5M IN A 10.0.7.60 +3000.example. 5M IN A 10.0.7.61 +3000.example. 5M IN A 10.0.7.62 +3000.example. 5M IN A 10.0.7.63 +3000.example. 5M IN A 10.0.7.64 +3000.example. 5M IN A 10.0.7.65 +3000.example. 5M IN A 10.0.7.66 +3000.example. 5M IN A 10.0.7.67 +3000.example. 5M IN A 10.0.7.68 +3000.example. 5M IN A 10.0.7.69 +3000.example. 5M IN A 10.0.7.70 +3000.example. 5M IN A 10.0.7.71 +3000.example. 5M IN A 10.0.7.72 +3000.example. 5M IN A 10.0.7.73 +3000.example. 5M IN A 10.0.7.74 +3000.example. 5M IN A 10.0.7.75 +3000.example. 5M IN A 10.0.7.76 +3000.example. 5M IN A 10.0.7.77 +3000.example. 5M IN A 10.0.7.78 +3000.example. 5M IN A 10.0.7.79 +3000.example. 5M IN A 10.0.7.80 +3000.example. 5M IN A 10.0.7.81 +3000.example. 5M IN A 10.0.7.82 +3000.example. 5M IN A 10.0.7.83 +3000.example. 5M IN A 10.0.7.84 +3000.example. 5M IN A 10.0.7.85 +3000.example. 5M IN A 10.0.7.86 +3000.example. 5M IN A 10.0.7.87 +3000.example. 5M IN A 10.0.7.88 +3000.example. 5M IN A 10.0.7.89 +3000.example. 5M IN A 10.0.7.90 +3000.example. 5M IN A 10.0.7.91 +3000.example. 5M IN A 10.0.7.92 +3000.example. 5M IN A 10.0.7.93 +3000.example. 5M IN A 10.0.7.94 +3000.example. 5M IN A 10.0.7.95 +3000.example. 5M IN A 10.0.7.96 +3000.example. 5M IN A 10.0.7.97 +3000.example. 5M IN A 10.0.7.98 +3000.example. 5M IN A 10.0.7.99 +3000.example. 5M IN A 10.0.7.100 +3000.example. 5M IN A 10.0.7.101 +3000.example. 5M IN A 10.0.7.102 +3000.example. 5M IN A 10.0.7.103 +3000.example. 5M IN A 10.0.7.104 +3000.example. 5M IN A 10.0.7.105 +3000.example. 5M IN A 10.0.7.106 +3000.example. 5M IN A 10.0.7.107 +3000.example. 5M IN A 10.0.7.108 +3000.example. 5M IN A 10.0.7.109 +3000.example. 5M IN A 10.0.7.110 +3000.example. 5M IN A 10.0.7.111 +3000.example. 5M IN A 10.0.7.112 +3000.example. 5M IN A 10.0.7.113 +3000.example. 5M IN A 10.0.7.114 +3000.example. 5M IN A 10.0.7.115 +3000.example. 5M IN A 10.0.7.116 +3000.example. 5M IN A 10.0.7.117 +3000.example. 5M IN A 10.0.7.118 +3000.example. 5M IN A 10.0.7.119 +3000.example. 5M IN A 10.0.7.120 +3000.example. 5M IN A 10.0.7.121 +3000.example. 5M IN A 10.0.7.122 +3000.example. 5M IN A 10.0.7.123 +3000.example. 5M IN A 10.0.7.124 +3000.example. 5M IN A 10.0.7.125 +3000.example. 5M IN A 10.0.7.126 +3000.example. 5M IN A 10.0.7.127 +3000.example. 5M IN A 10.0.7.128 +3000.example. 5M IN A 10.0.7.129 +3000.example. 5M IN A 10.0.7.130 +3000.example. 5M IN A 10.0.7.131 +3000.example. 5M IN A 10.0.7.132 +3000.example. 5M IN A 10.0.7.133 +3000.example. 5M IN A 10.0.7.134 +3000.example. 5M IN A 10.0.7.135 +3000.example. 5M IN A 10.0.7.136 +3000.example. 5M IN A 10.0.7.137 +3000.example. 5M IN A 10.0.7.138 +3000.example. 5M IN A 10.0.7.139 +3000.example. 5M IN A 10.0.7.140 +3000.example. 5M IN A 10.0.7.141 +3000.example. 5M IN A 10.0.7.142 +3000.example. 5M IN A 10.0.7.143 +3000.example. 5M IN A 10.0.7.144 +3000.example. 5M IN A 10.0.7.145 +3000.example. 5M IN A 10.0.7.146 +3000.example. 5M IN A 10.0.7.147 +3000.example. 5M IN A 10.0.7.148 +3000.example. 5M IN A 10.0.7.149 +3000.example. 5M IN A 10.0.7.150 +3000.example. 5M IN A 10.0.7.151 +3000.example. 5M IN A 10.0.7.152 +3000.example. 5M IN A 10.0.7.153 +3000.example. 5M IN A 10.0.7.154 +3000.example. 5M IN A 10.0.7.155 +3000.example. 5M IN A 10.0.7.156 +3000.example. 5M IN A 10.0.7.157 +3000.example. 5M IN A 10.0.7.158 +3000.example. 5M IN A 10.0.7.159 +3000.example. 5M IN A 10.0.7.160 +3000.example. 5M IN A 10.0.7.161 +3000.example. 5M IN A 10.0.7.162 +3000.example. 5M IN A 10.0.7.163 +3000.example. 5M IN A 10.0.7.164 +3000.example. 5M IN A 10.0.7.165 +3000.example. 5M IN A 10.0.7.166 +3000.example. 5M IN A 10.0.7.167 +3000.example. 5M IN A 10.0.7.168 +3000.example. 5M IN A 10.0.7.169 +3000.example. 5M IN A 10.0.7.170 +3000.example. 5M IN A 10.0.7.171 +3000.example. 5M IN A 10.0.7.172 +3000.example. 5M IN A 10.0.7.173 +3000.example. 5M IN A 10.0.7.174 +3000.example. 5M IN A 10.0.7.175 +3000.example. 5M IN A 10.0.7.176 +3000.example. 5M IN A 10.0.7.177 +3000.example. 5M IN A 10.0.7.178 +3000.example. 5M IN A 10.0.7.179 +3000.example. 5M IN A 10.0.7.180 +3000.example. 5M IN A 10.0.7.181 +3000.example. 5M IN A 10.0.7.182 +3000.example. 5M IN A 10.0.7.183 +3000.example. 5M IN A 10.0.7.184 +3000.example. 5M IN A 10.0.7.185 +3000.example. 5M IN A 10.0.7.186 +3000.example. 5M IN A 10.0.7.187 +3000.example. 5M IN A 10.0.7.188 +3000.example. 5M IN A 10.0.7.189 +3000.example. 5M IN A 10.0.7.190 +3000.example. 5M IN A 10.0.7.191 +3000.example. 5M IN A 10.0.7.192 +3000.example. 5M IN A 10.0.7.193 +3000.example. 5M IN A 10.0.7.194 +3000.example. 5M IN A 10.0.7.195 +3000.example. 5M IN A 10.0.7.196 +3000.example. 5M IN A 10.0.7.197 +3000.example. 5M IN A 10.0.7.198 +3000.example. 5M IN A 10.0.7.199 +3000.example. 5M IN A 10.0.7.200 +3000.example. 5M IN A 10.0.7.201 +3000.example. 5M IN A 10.0.7.202 +3000.example. 5M IN A 10.0.7.203 +3000.example. 5M IN A 10.0.7.204 +3000.example. 5M IN A 10.0.7.205 +3000.example. 5M IN A 10.0.7.206 +3000.example. 5M IN A 10.0.7.207 +3000.example. 5M IN A 10.0.7.208 +3000.example. 5M IN A 10.0.7.209 +3000.example. 5M IN A 10.0.7.210 +3000.example. 5M IN A 10.0.7.211 +3000.example. 5M IN A 10.0.7.212 +3000.example. 5M IN A 10.0.7.213 +3000.example. 5M IN A 10.0.7.214 +3000.example. 5M IN A 10.0.7.215 +3000.example. 5M IN A 10.0.7.216 +3000.example. 5M IN A 10.0.7.217 +3000.example. 5M IN A 10.0.7.218 +3000.example. 5M IN A 10.0.7.219 +3000.example. 5M IN A 10.0.7.220 +3000.example. 5M IN A 10.0.7.221 +3000.example. 5M IN A 10.0.7.222 +3000.example. 5M IN A 10.0.7.223 +3000.example. 5M IN A 10.0.7.224 +3000.example. 5M IN A 10.0.7.225 +3000.example. 5M IN A 10.0.7.226 +3000.example. 5M IN A 10.0.7.227 +3000.example. 5M IN A 10.0.7.228 +3000.example. 5M IN A 10.0.7.229 +3000.example. 5M IN A 10.0.7.230 +3000.example. 5M IN A 10.0.7.231 +3000.example. 5M IN A 10.0.7.232 +3000.example. 5M IN A 10.0.7.233 +3000.example. 5M IN A 10.0.7.234 +3000.example. 5M IN A 10.0.7.235 +3000.example. 5M IN A 10.0.7.236 +3000.example. 5M IN A 10.0.7.237 +3000.example. 5M IN A 10.0.7.238 +3000.example. 5M IN A 10.0.7.239 +3000.example. 5M IN A 10.0.7.240 +3000.example. 5M IN A 10.0.7.241 +3000.example. 5M IN A 10.0.7.242 +3000.example. 5M IN A 10.0.7.243 +3000.example. 5M IN A 10.0.7.244 +3000.example. 5M IN A 10.0.7.245 +3000.example. 5M IN A 10.0.7.246 +3000.example. 5M IN A 10.0.7.247 +3000.example. 5M IN A 10.0.7.248 +3000.example. 5M IN A 10.0.7.249 +3000.example. 5M IN A 10.0.7.250 +3000.example. 5M IN A 10.0.7.251 +3000.example. 5M IN A 10.0.7.252 +3000.example. 5M IN A 10.0.7.253 +3000.example. 5M IN A 10.0.7.254 +3000.example. 5M IN A 10.0.7.255 +3000.example. 5M IN A 10.0.8.0 +3000.example. 5M IN A 10.0.8.1 +3000.example. 5M IN A 10.0.8.2 +3000.example. 5M IN A 10.0.8.3 +3000.example. 5M IN A 10.0.8.4 +3000.example. 5M IN A 10.0.8.5 +3000.example. 5M IN A 10.0.8.6 +3000.example. 5M IN A 10.0.8.7 +3000.example. 5M IN A 10.0.8.8 +3000.example. 5M IN A 10.0.8.9 +3000.example. 5M IN A 10.0.8.10 +3000.example. 5M IN A 10.0.8.11 +3000.example. 5M IN A 10.0.8.12 +3000.example. 5M IN A 10.0.8.13 +3000.example. 5M IN A 10.0.8.14 +3000.example. 5M IN A 10.0.8.15 +3000.example. 5M IN A 10.0.8.16 +3000.example. 5M IN A 10.0.8.17 +3000.example. 5M IN A 10.0.8.18 +3000.example. 5M IN A 10.0.8.19 +3000.example. 5M IN A 10.0.8.20 +3000.example. 5M IN A 10.0.8.21 +3000.example. 5M IN A 10.0.8.22 +3000.example. 5M IN A 10.0.8.23 +3000.example. 5M IN A 10.0.8.24 +3000.example. 5M IN A 10.0.8.25 +3000.example. 5M IN A 10.0.8.26 +3000.example. 5M IN A 10.0.8.27 +3000.example. 5M IN A 10.0.8.28 +3000.example. 5M IN A 10.0.8.29 +3000.example. 5M IN A 10.0.8.30 +3000.example. 5M IN A 10.0.8.31 +3000.example. 5M IN A 10.0.8.32 +3000.example. 5M IN A 10.0.8.33 +3000.example. 5M IN A 10.0.8.34 +3000.example. 5M IN A 10.0.8.35 +3000.example. 5M IN A 10.0.8.36 +3000.example. 5M IN A 10.0.8.37 +3000.example. 5M IN A 10.0.8.38 +3000.example. 5M IN A 10.0.8.39 +3000.example. 5M IN A 10.0.8.40 +3000.example. 5M IN A 10.0.8.41 +3000.example. 5M IN A 10.0.8.42 +3000.example. 5M IN A 10.0.8.43 +3000.example. 5M IN A 10.0.8.44 +3000.example. 5M IN A 10.0.8.45 +3000.example. 5M IN A 10.0.8.46 +3000.example. 5M IN A 10.0.8.47 +3000.example. 5M IN A 10.0.8.48 +3000.example. 5M IN A 10.0.8.49 +3000.example. 5M IN A 10.0.8.50 +3000.example. 5M IN A 10.0.8.51 +3000.example. 5M IN A 10.0.8.52 +3000.example. 5M IN A 10.0.8.53 +3000.example. 5M IN A 10.0.8.54 +3000.example. 5M IN A 10.0.8.55 +3000.example. 5M IN A 10.0.8.56 +3000.example. 5M IN A 10.0.8.57 +3000.example. 5M IN A 10.0.8.58 +3000.example. 5M IN A 10.0.8.59 +3000.example. 5M IN A 10.0.8.60 +3000.example. 5M IN A 10.0.8.61 +3000.example. 5M IN A 10.0.8.62 +3000.example. 5M IN A 10.0.8.63 +3000.example. 5M IN A 10.0.8.64 +3000.example. 5M IN A 10.0.8.65 +3000.example. 5M IN A 10.0.8.66 +3000.example. 5M IN A 10.0.8.67 +3000.example. 5M IN A 10.0.8.68 +3000.example. 5M IN A 10.0.8.69 +3000.example. 5M IN A 10.0.8.70 +3000.example. 5M IN A 10.0.8.71 +3000.example. 5M IN A 10.0.8.72 +3000.example. 5M IN A 10.0.8.73 +3000.example. 5M IN A 10.0.8.74 +3000.example. 5M IN A 10.0.8.75 +3000.example. 5M IN A 10.0.8.76 +3000.example. 5M IN A 10.0.8.77 +3000.example. 5M IN A 10.0.8.78 +3000.example. 5M IN A 10.0.8.79 +3000.example. 5M IN A 10.0.8.80 +3000.example. 5M IN A 10.0.8.81 +3000.example. 5M IN A 10.0.8.82 +3000.example. 5M IN A 10.0.8.83 +3000.example. 5M IN A 10.0.8.84 +3000.example. 5M IN A 10.0.8.85 +3000.example. 5M IN A 10.0.8.86 +3000.example. 5M IN A 10.0.8.87 +3000.example. 5M IN A 10.0.8.88 +3000.example. 5M IN A 10.0.8.89 +3000.example. 5M IN A 10.0.8.90 +3000.example. 5M IN A 10.0.8.91 +3000.example. 5M IN A 10.0.8.92 +3000.example. 5M IN A 10.0.8.93 +3000.example. 5M IN A 10.0.8.94 +3000.example. 5M IN A 10.0.8.95 +3000.example. 5M IN A 10.0.8.96 +3000.example. 5M IN A 10.0.8.97 +3000.example. 5M IN A 10.0.8.98 +3000.example. 5M IN A 10.0.8.99 +3000.example. 5M IN A 10.0.8.100 +3000.example. 5M IN A 10.0.8.101 +3000.example. 5M IN A 10.0.8.102 +3000.example. 5M IN A 10.0.8.103 +3000.example. 5M IN A 10.0.8.104 +3000.example. 5M IN A 10.0.8.105 +3000.example. 5M IN A 10.0.8.106 +3000.example. 5M IN A 10.0.8.107 +3000.example. 5M IN A 10.0.8.108 +3000.example. 5M IN A 10.0.8.109 +3000.example. 5M IN A 10.0.8.110 +3000.example. 5M IN A 10.0.8.111 +3000.example. 5M IN A 10.0.8.112 +3000.example. 5M IN A 10.0.8.113 +3000.example. 5M IN A 10.0.8.114 +3000.example. 5M IN A 10.0.8.115 +3000.example. 5M IN A 10.0.8.116 +3000.example. 5M IN A 10.0.8.117 +3000.example. 5M IN A 10.0.8.118 +3000.example. 5M IN A 10.0.8.119 +3000.example. 5M IN A 10.0.8.120 +3000.example. 5M IN A 10.0.8.121 +3000.example. 5M IN A 10.0.8.122 +3000.example. 5M IN A 10.0.8.123 +3000.example. 5M IN A 10.0.8.124 +3000.example. 5M IN A 10.0.8.125 +3000.example. 5M IN A 10.0.8.126 +3000.example. 5M IN A 10.0.8.127 +3000.example. 5M IN A 10.0.8.128 +3000.example. 5M IN A 10.0.8.129 +3000.example. 5M IN A 10.0.8.130 +3000.example. 5M IN A 10.0.8.131 +3000.example. 5M IN A 10.0.8.132 +3000.example. 5M IN A 10.0.8.133 +3000.example. 5M IN A 10.0.8.134 +3000.example. 5M IN A 10.0.8.135 +3000.example. 5M IN A 10.0.8.136 +3000.example. 5M IN A 10.0.8.137 +3000.example. 5M IN A 10.0.8.138 +3000.example. 5M IN A 10.0.8.139 +3000.example. 5M IN A 10.0.8.140 +3000.example. 5M IN A 10.0.8.141 +3000.example. 5M IN A 10.0.8.142 +3000.example. 5M IN A 10.0.8.143 +3000.example. 5M IN A 10.0.8.144 +3000.example. 5M IN A 10.0.8.145 +3000.example. 5M IN A 10.0.8.146 +3000.example. 5M IN A 10.0.8.147 +3000.example. 5M IN A 10.0.8.148 +3000.example. 5M IN A 10.0.8.149 +3000.example. 5M IN A 10.0.8.150 +3000.example. 5M IN A 10.0.8.151 +3000.example. 5M IN A 10.0.8.152 +3000.example. 5M IN A 10.0.8.153 +3000.example. 5M IN A 10.0.8.154 +3000.example. 5M IN A 10.0.8.155 +3000.example. 5M IN A 10.0.8.156 +3000.example. 5M IN A 10.0.8.157 +3000.example. 5M IN A 10.0.8.158 +3000.example. 5M IN A 10.0.8.159 +3000.example. 5M IN A 10.0.8.160 +3000.example. 5M IN A 10.0.8.161 +3000.example. 5M IN A 10.0.8.162 +3000.example. 5M IN A 10.0.8.163 +3000.example. 5M IN A 10.0.8.164 +3000.example. 5M IN A 10.0.8.165 +3000.example. 5M IN A 10.0.8.166 +3000.example. 5M IN A 10.0.8.167 +3000.example. 5M IN A 10.0.8.168 +3000.example. 5M IN A 10.0.8.169 +3000.example. 5M IN A 10.0.8.170 +3000.example. 5M IN A 10.0.8.171 +3000.example. 5M IN A 10.0.8.172 +3000.example. 5M IN A 10.0.8.173 +3000.example. 5M IN A 10.0.8.174 +3000.example. 5M IN A 10.0.8.175 +3000.example. 5M IN A 10.0.8.176 +3000.example. 5M IN A 10.0.8.177 +3000.example. 5M IN A 10.0.8.178 +3000.example. 5M IN A 10.0.8.179 +3000.example. 5M IN A 10.0.8.180 +3000.example. 5M IN A 10.0.8.181 +3000.example. 5M IN A 10.0.8.182 +3000.example. 5M IN A 10.0.8.183 +3000.example. 5M IN A 10.0.8.184 +3000.example. 5M IN A 10.0.8.185 +3000.example. 5M IN A 10.0.8.186 +3000.example. 5M IN A 10.0.8.187 +3000.example. 5M IN A 10.0.8.188 +3000.example. 5M IN A 10.0.8.189 +3000.example. 5M IN A 10.0.8.190 +3000.example. 5M IN A 10.0.8.191 +3000.example. 5M IN A 10.0.8.192 +3000.example. 5M IN A 10.0.8.193 +3000.example. 5M IN A 10.0.8.194 +3000.example. 5M IN A 10.0.8.195 +3000.example. 5M IN A 10.0.8.196 +3000.example. 5M IN A 10.0.8.197 +3000.example. 5M IN A 10.0.8.198 +3000.example. 5M IN A 10.0.8.199 +3000.example. 5M IN A 10.0.8.200 +3000.example. 5M IN A 10.0.8.201 +3000.example. 5M IN A 10.0.8.202 +3000.example. 5M IN A 10.0.8.203 +3000.example. 5M IN A 10.0.8.204 +3000.example. 5M IN A 10.0.8.205 +3000.example. 5M IN A 10.0.8.206 +3000.example. 5M IN A 10.0.8.207 +3000.example. 5M IN A 10.0.8.208 +3000.example. 5M IN A 10.0.8.209 +3000.example. 5M IN A 10.0.8.210 +3000.example. 5M IN A 10.0.8.211 +3000.example. 5M IN A 10.0.8.212 +3000.example. 5M IN A 10.0.8.213 +3000.example. 5M IN A 10.0.8.214 +3000.example. 5M IN A 10.0.8.215 +3000.example. 5M IN A 10.0.8.216 +3000.example. 5M IN A 10.0.8.217 +3000.example. 5M IN A 10.0.8.218 +3000.example. 5M IN A 10.0.8.219 +3000.example. 5M IN A 10.0.8.220 +3000.example. 5M IN A 10.0.8.221 +3000.example. 5M IN A 10.0.8.222 +3000.example. 5M IN A 10.0.8.223 +3000.example. 5M IN A 10.0.8.224 +3000.example. 5M IN A 10.0.8.225 +3000.example. 5M IN A 10.0.8.226 +3000.example. 5M IN A 10.0.8.227 +3000.example. 5M IN A 10.0.8.228 +3000.example. 5M IN A 10.0.8.229 +3000.example. 5M IN A 10.0.8.230 +3000.example. 5M IN A 10.0.8.231 +3000.example. 5M IN A 10.0.8.232 +3000.example. 5M IN A 10.0.8.233 +3000.example. 5M IN A 10.0.8.234 +3000.example. 5M IN A 10.0.8.235 +3000.example. 5M IN A 10.0.8.236 +3000.example. 5M IN A 10.0.8.237 +3000.example. 5M IN A 10.0.8.238 +3000.example. 5M IN A 10.0.8.239 +3000.example. 5M IN A 10.0.8.240 +3000.example. 5M IN A 10.0.8.241 +3000.example. 5M IN A 10.0.8.242 +3000.example. 5M IN A 10.0.8.243 +3000.example. 5M IN A 10.0.8.244 +3000.example. 5M IN A 10.0.8.245 +3000.example. 5M IN A 10.0.8.246 +3000.example. 5M IN A 10.0.8.247 +3000.example. 5M IN A 10.0.8.248 +3000.example. 5M IN A 10.0.8.249 +3000.example. 5M IN A 10.0.8.250 +3000.example. 5M IN A 10.0.8.251 +3000.example. 5M IN A 10.0.8.252 +3000.example. 5M IN A 10.0.8.253 +3000.example. 5M IN A 10.0.8.254 +3000.example. 5M IN A 10.0.8.255 +3000.example. 5M IN A 10.0.9.0 +3000.example. 5M IN A 10.0.9.1 +3000.example. 5M IN A 10.0.9.2 +3000.example. 5M IN A 10.0.9.3 +3000.example. 5M IN A 10.0.9.4 +3000.example. 5M IN A 10.0.9.5 +3000.example. 5M IN A 10.0.9.6 +3000.example. 5M IN A 10.0.9.7 +3000.example. 5M IN A 10.0.9.8 +3000.example. 5M IN A 10.0.9.9 +3000.example. 5M IN A 10.0.9.10 +3000.example. 5M IN A 10.0.9.11 +3000.example. 5M IN A 10.0.9.12 +3000.example. 5M IN A 10.0.9.13 +3000.example. 5M IN A 10.0.9.14 +3000.example. 5M IN A 10.0.9.15 +3000.example. 5M IN A 10.0.9.16 +3000.example. 5M IN A 10.0.9.17 +3000.example. 5M IN A 10.0.9.18 +3000.example. 5M IN A 10.0.9.19 +3000.example. 5M IN A 10.0.9.20 +3000.example. 5M IN A 10.0.9.21 +3000.example. 5M IN A 10.0.9.22 +3000.example. 5M IN A 10.0.9.23 +3000.example. 5M IN A 10.0.9.24 +3000.example. 5M IN A 10.0.9.25 +3000.example. 5M IN A 10.0.9.26 +3000.example. 5M IN A 10.0.9.27 +3000.example. 5M IN A 10.0.9.28 +3000.example. 5M IN A 10.0.9.29 +3000.example. 5M IN A 10.0.9.30 +3000.example. 5M IN A 10.0.9.31 +3000.example. 5M IN A 10.0.9.32 +3000.example. 5M IN A 10.0.9.33 +3000.example. 5M IN A 10.0.9.34 +3000.example. 5M IN A 10.0.9.35 +3000.example. 5M IN A 10.0.9.36 +3000.example. 5M IN A 10.0.9.37 +3000.example. 5M IN A 10.0.9.38 +3000.example. 5M IN A 10.0.9.39 +3000.example. 5M IN A 10.0.9.40 +3000.example. 5M IN A 10.0.9.41 +3000.example. 5M IN A 10.0.9.42 +3000.example. 5M IN A 10.0.9.43 +3000.example. 5M IN A 10.0.9.44 +3000.example. 5M IN A 10.0.9.45 +3000.example. 5M IN A 10.0.9.46 +3000.example. 5M IN A 10.0.9.47 +3000.example. 5M IN A 10.0.9.48 +3000.example. 5M IN A 10.0.9.49 +3000.example. 5M IN A 10.0.9.50 +3000.example. 5M IN A 10.0.9.51 +3000.example. 5M IN A 10.0.9.52 +3000.example. 5M IN A 10.0.9.53 +3000.example. 5M IN A 10.0.9.54 +3000.example. 5M IN A 10.0.9.55 +3000.example. 5M IN A 10.0.9.56 +3000.example. 5M IN A 10.0.9.57 +3000.example. 5M IN A 10.0.9.58 +3000.example. 5M IN A 10.0.9.59 +3000.example. 5M IN A 10.0.9.60 +3000.example. 5M IN A 10.0.9.61 +3000.example. 5M IN A 10.0.9.62 +3000.example. 5M IN A 10.0.9.63 +3000.example. 5M IN A 10.0.9.64 +3000.example. 5M IN A 10.0.9.65 +3000.example. 5M IN A 10.0.9.66 +3000.example. 5M IN A 10.0.9.67 +3000.example. 5M IN A 10.0.9.68 +3000.example. 5M IN A 10.0.9.69 +3000.example. 5M IN A 10.0.9.70 +3000.example. 5M IN A 10.0.9.71 +3000.example. 5M IN A 10.0.9.72 +3000.example. 5M IN A 10.0.9.73 +3000.example. 5M IN A 10.0.9.74 +3000.example. 5M IN A 10.0.9.75 +3000.example. 5M IN A 10.0.9.76 +3000.example. 5M IN A 10.0.9.77 +3000.example. 5M IN A 10.0.9.78 +3000.example. 5M IN A 10.0.9.79 +3000.example. 5M IN A 10.0.9.80 +3000.example. 5M IN A 10.0.9.81 +3000.example. 5M IN A 10.0.9.82 +3000.example. 5M IN A 10.0.9.83 +3000.example. 5M IN A 10.0.9.84 +3000.example. 5M IN A 10.0.9.85 +3000.example. 5M IN A 10.0.9.86 +3000.example. 5M IN A 10.0.9.87 +3000.example. 5M IN A 10.0.9.88 +3000.example. 5M IN A 10.0.9.89 +3000.example. 5M IN A 10.0.9.90 +3000.example. 5M IN A 10.0.9.91 +3000.example. 5M IN A 10.0.9.92 +3000.example. 5M IN A 10.0.9.93 +3000.example. 5M IN A 10.0.9.94 +3000.example. 5M IN A 10.0.9.95 +3000.example. 5M IN A 10.0.9.96 +3000.example. 5M IN A 10.0.9.97 +3000.example. 5M IN A 10.0.9.98 +3000.example. 5M IN A 10.0.9.99 +3000.example. 5M IN A 10.0.9.100 +3000.example. 5M IN A 10.0.9.101 +3000.example. 5M IN A 10.0.9.102 +3000.example. 5M IN A 10.0.9.103 +3000.example. 5M IN A 10.0.9.104 +3000.example. 5M IN A 10.0.9.105 +3000.example. 5M IN A 10.0.9.106 +3000.example. 5M IN A 10.0.9.107 +3000.example. 5M IN A 10.0.9.108 +3000.example. 5M IN A 10.0.9.109 +3000.example. 5M IN A 10.0.9.110 +3000.example. 5M IN A 10.0.9.111 +3000.example. 5M IN A 10.0.9.112 +3000.example. 5M IN A 10.0.9.113 +3000.example. 5M IN A 10.0.9.114 +3000.example. 5M IN A 10.0.9.115 +3000.example. 5M IN A 10.0.9.116 +3000.example. 5M IN A 10.0.9.117 +3000.example. 5M IN A 10.0.9.118 +3000.example. 5M IN A 10.0.9.119 +3000.example. 5M IN A 10.0.9.120 +3000.example. 5M IN A 10.0.9.121 +3000.example. 5M IN A 10.0.9.122 +3000.example. 5M IN A 10.0.9.123 +3000.example. 5M IN A 10.0.9.124 +3000.example. 5M IN A 10.0.9.125 +3000.example. 5M IN A 10.0.9.126 +3000.example. 5M IN A 10.0.9.127 +3000.example. 5M IN A 10.0.9.128 +3000.example. 5M IN A 10.0.9.129 +3000.example. 5M IN A 10.0.9.130 +3000.example. 5M IN A 10.0.9.131 +3000.example. 5M IN A 10.0.9.132 +3000.example. 5M IN A 10.0.9.133 +3000.example. 5M IN A 10.0.9.134 +3000.example. 5M IN A 10.0.9.135 +3000.example. 5M IN A 10.0.9.136 +3000.example. 5M IN A 10.0.9.137 +3000.example. 5M IN A 10.0.9.138 +3000.example. 5M IN A 10.0.9.139 +3000.example. 5M IN A 10.0.9.140 +3000.example. 5M IN A 10.0.9.141 +3000.example. 5M IN A 10.0.9.142 +3000.example. 5M IN A 10.0.9.143 +3000.example. 5M IN A 10.0.9.144 +3000.example. 5M IN A 10.0.9.145 +3000.example. 5M IN A 10.0.9.146 +3000.example. 5M IN A 10.0.9.147 +3000.example. 5M IN A 10.0.9.148 +3000.example. 5M IN A 10.0.9.149 +3000.example. 5M IN A 10.0.9.150 +3000.example. 5M IN A 10.0.9.151 +3000.example. 5M IN A 10.0.9.152 +3000.example. 5M IN A 10.0.9.153 +3000.example. 5M IN A 10.0.9.154 +3000.example. 5M IN A 10.0.9.155 +3000.example. 5M IN A 10.0.9.156 +3000.example. 5M IN A 10.0.9.157 +3000.example. 5M IN A 10.0.9.158 +3000.example. 5M IN A 10.0.9.159 +3000.example. 5M IN A 10.0.9.160 +3000.example. 5M IN A 10.0.9.161 +3000.example. 5M IN A 10.0.9.162 +3000.example. 5M IN A 10.0.9.163 +3000.example. 5M IN A 10.0.9.164 +3000.example. 5M IN A 10.0.9.165 +3000.example. 5M IN A 10.0.9.166 +3000.example. 5M IN A 10.0.9.167 +3000.example. 5M IN A 10.0.9.168 +3000.example. 5M IN A 10.0.9.169 +3000.example. 5M IN A 10.0.9.170 +3000.example. 5M IN A 10.0.9.171 +3000.example. 5M IN A 10.0.9.172 +3000.example. 5M IN A 10.0.9.173 +3000.example. 5M IN A 10.0.9.174 +3000.example. 5M IN A 10.0.9.175 +3000.example. 5M IN A 10.0.9.176 +3000.example. 5M IN A 10.0.9.177 +3000.example. 5M IN A 10.0.9.178 +3000.example. 5M IN A 10.0.9.179 +3000.example. 5M IN A 10.0.9.180 +3000.example. 5M IN A 10.0.9.181 +3000.example. 5M IN A 10.0.9.182 +3000.example. 5M IN A 10.0.9.183 +3000.example. 5M IN A 10.0.9.184 +3000.example. 5M IN A 10.0.9.185 +3000.example. 5M IN A 10.0.9.186 +3000.example. 5M IN A 10.0.9.187 +3000.example. 5M IN A 10.0.9.188 +3000.example. 5M IN A 10.0.9.189 +3000.example. 5M IN A 10.0.9.190 +3000.example. 5M IN A 10.0.9.191 +3000.example. 5M IN A 10.0.9.192 +3000.example. 5M IN A 10.0.9.193 +3000.example. 5M IN A 10.0.9.194 +3000.example. 5M IN A 10.0.9.195 +3000.example. 5M IN A 10.0.9.196 +3000.example. 5M IN A 10.0.9.197 +3000.example. 5M IN A 10.0.9.198 +3000.example. 5M IN A 10.0.9.199 +3000.example. 5M IN A 10.0.9.200 +3000.example. 5M IN A 10.0.9.201 +3000.example. 5M IN A 10.0.9.202 +3000.example. 5M IN A 10.0.9.203 +3000.example. 5M IN A 10.0.9.204 +3000.example. 5M IN A 10.0.9.205 +3000.example. 5M IN A 10.0.9.206 +3000.example. 5M IN A 10.0.9.207 +3000.example. 5M IN A 10.0.9.208 +3000.example. 5M IN A 10.0.9.209 +3000.example. 5M IN A 10.0.9.210 +3000.example. 5M IN A 10.0.9.211 +3000.example. 5M IN A 10.0.9.212 +3000.example. 5M IN A 10.0.9.213 +3000.example. 5M IN A 10.0.9.214 +3000.example. 5M IN A 10.0.9.215 +3000.example. 5M IN A 10.0.9.216 +3000.example. 5M IN A 10.0.9.217 +3000.example. 5M IN A 10.0.9.218 +3000.example. 5M IN A 10.0.9.219 +3000.example. 5M IN A 10.0.9.220 +3000.example. 5M IN A 10.0.9.221 +3000.example. 5M IN A 10.0.9.222 +3000.example. 5M IN A 10.0.9.223 +3000.example. 5M IN A 10.0.9.224 +3000.example. 5M IN A 10.0.9.225 +3000.example. 5M IN A 10.0.9.226 +3000.example. 5M IN A 10.0.9.227 +3000.example. 5M IN A 10.0.9.228 +3000.example. 5M IN A 10.0.9.229 +3000.example. 5M IN A 10.0.9.230 +3000.example. 5M IN A 10.0.9.231 +3000.example. 5M IN A 10.0.9.232 +3000.example. 5M IN A 10.0.9.233 +3000.example. 5M IN A 10.0.9.234 +3000.example. 5M IN A 10.0.9.235 +3000.example. 5M IN A 10.0.9.236 +3000.example. 5M IN A 10.0.9.237 +3000.example. 5M IN A 10.0.9.238 +3000.example. 5M IN A 10.0.9.239 +3000.example. 5M IN A 10.0.9.240 +3000.example. 5M IN A 10.0.9.241 +3000.example. 5M IN A 10.0.9.242 +3000.example. 5M IN A 10.0.9.243 +3000.example. 5M IN A 10.0.9.244 +3000.example. 5M IN A 10.0.9.245 +3000.example. 5M IN A 10.0.9.246 +3000.example. 5M IN A 10.0.9.247 +3000.example. 5M IN A 10.0.9.248 +3000.example. 5M IN A 10.0.9.249 +3000.example. 5M IN A 10.0.9.250 +3000.example. 5M IN A 10.0.9.251 +3000.example. 5M IN A 10.0.9.252 +3000.example. 5M IN A 10.0.9.253 +3000.example. 5M IN A 10.0.9.254 +3000.example. 5M IN A 10.0.9.255 +3000.example. 5M IN A 10.0.10.0 +3000.example. 5M IN A 10.0.10.1 +3000.example. 5M IN A 10.0.10.2 +3000.example. 5M IN A 10.0.10.3 +3000.example. 5M IN A 10.0.10.4 +3000.example. 5M IN A 10.0.10.5 +3000.example. 5M IN A 10.0.10.6 +3000.example. 5M IN A 10.0.10.7 +3000.example. 5M IN A 10.0.10.8 +3000.example. 5M IN A 10.0.10.9 +3000.example. 5M IN A 10.0.10.10 +3000.example. 5M IN A 10.0.10.11 +3000.example. 5M IN A 10.0.10.12 +3000.example. 5M IN A 10.0.10.13 +3000.example. 5M IN A 10.0.10.14 +3000.example. 5M IN A 10.0.10.15 +3000.example. 5M IN A 10.0.10.16 +3000.example. 5M IN A 10.0.10.17 +3000.example. 5M IN A 10.0.10.18 +3000.example. 5M IN A 10.0.10.19 +3000.example. 5M IN A 10.0.10.20 +3000.example. 5M IN A 10.0.10.21 +3000.example. 5M IN A 10.0.10.22 +3000.example. 5M IN A 10.0.10.23 +3000.example. 5M IN A 10.0.10.24 +3000.example. 5M IN A 10.0.10.25 +3000.example. 5M IN A 10.0.10.26 +3000.example. 5M IN A 10.0.10.27 +3000.example. 5M IN A 10.0.10.28 +3000.example. 5M IN A 10.0.10.29 +3000.example. 5M IN A 10.0.10.30 +3000.example. 5M IN A 10.0.10.31 +3000.example. 5M IN A 10.0.10.32 +3000.example. 5M IN A 10.0.10.33 +3000.example. 5M IN A 10.0.10.34 +3000.example. 5M IN A 10.0.10.35 +3000.example. 5M IN A 10.0.10.36 +3000.example. 5M IN A 10.0.10.37 +3000.example. 5M IN A 10.0.10.38 +3000.example. 5M IN A 10.0.10.39 +3000.example. 5M IN A 10.0.10.40 +3000.example. 5M IN A 10.0.10.41 +3000.example. 5M IN A 10.0.10.42 +3000.example. 5M IN A 10.0.10.43 +3000.example. 5M IN A 10.0.10.44 +3000.example. 5M IN A 10.0.10.45 +3000.example. 5M IN A 10.0.10.46 +3000.example. 5M IN A 10.0.10.47 +3000.example. 5M IN A 10.0.10.48 +3000.example. 5M IN A 10.0.10.49 +3000.example. 5M IN A 10.0.10.50 +3000.example. 5M IN A 10.0.10.51 +3000.example. 5M IN A 10.0.10.52 +3000.example. 5M IN A 10.0.10.53 +3000.example. 5M IN A 10.0.10.54 +3000.example. 5M IN A 10.0.10.55 +3000.example. 5M IN A 10.0.10.56 +3000.example. 5M IN A 10.0.10.57 +3000.example. 5M IN A 10.0.10.58 +3000.example. 5M IN A 10.0.10.59 +3000.example. 5M IN A 10.0.10.60 +3000.example. 5M IN A 10.0.10.61 +3000.example. 5M IN A 10.0.10.62 +3000.example. 5M IN A 10.0.10.63 +3000.example. 5M IN A 10.0.10.64 +3000.example. 5M IN A 10.0.10.65 +3000.example. 5M IN A 10.0.10.66 +3000.example. 5M IN A 10.0.10.67 +3000.example. 5M IN A 10.0.10.68 +3000.example. 5M IN A 10.0.10.69 +3000.example. 5M IN A 10.0.10.70 +3000.example. 5M IN A 10.0.10.71 +3000.example. 5M IN A 10.0.10.72 +3000.example. 5M IN A 10.0.10.73 +3000.example. 5M IN A 10.0.10.74 +3000.example. 5M IN A 10.0.10.75 +3000.example. 5M IN A 10.0.10.76 +3000.example. 5M IN A 10.0.10.77 +3000.example. 5M IN A 10.0.10.78 +3000.example. 5M IN A 10.0.10.79 +3000.example. 5M IN A 10.0.10.80 +3000.example. 5M IN A 10.0.10.81 +3000.example. 5M IN A 10.0.10.82 +3000.example. 5M IN A 10.0.10.83 +3000.example. 5M IN A 10.0.10.84 +3000.example. 5M IN A 10.0.10.85 +3000.example. 5M IN A 10.0.10.86 +3000.example. 5M IN A 10.0.10.87 +3000.example. 5M IN A 10.0.10.88 +3000.example. 5M IN A 10.0.10.89 +3000.example. 5M IN A 10.0.10.90 +3000.example. 5M IN A 10.0.10.91 +3000.example. 5M IN A 10.0.10.92 +3000.example. 5M IN A 10.0.10.93 +3000.example. 5M IN A 10.0.10.94 +3000.example. 5M IN A 10.0.10.95 +3000.example. 5M IN A 10.0.10.96 +3000.example. 5M IN A 10.0.10.97 +3000.example. 5M IN A 10.0.10.98 +3000.example. 5M IN A 10.0.10.99 +3000.example. 5M IN A 10.0.10.100 +3000.example. 5M IN A 10.0.10.101 +3000.example. 5M IN A 10.0.10.102 +3000.example. 5M IN A 10.0.10.103 +3000.example. 5M IN A 10.0.10.104 +3000.example. 5M IN A 10.0.10.105 +3000.example. 5M IN A 10.0.10.106 +3000.example. 5M IN A 10.0.10.107 +3000.example. 5M IN A 10.0.10.108 +3000.example. 5M IN A 10.0.10.109 +3000.example. 5M IN A 10.0.10.110 +3000.example. 5M IN A 10.0.10.111 +3000.example. 5M IN A 10.0.10.112 +3000.example. 5M IN A 10.0.10.113 +3000.example. 5M IN A 10.0.10.114 +3000.example. 5M IN A 10.0.10.115 +3000.example. 5M IN A 10.0.10.116 +3000.example. 5M IN A 10.0.10.117 +3000.example. 5M IN A 10.0.10.118 +3000.example. 5M IN A 10.0.10.119 +3000.example. 5M IN A 10.0.10.120 +3000.example. 5M IN A 10.0.10.121 +3000.example. 5M IN A 10.0.10.122 +3000.example. 5M IN A 10.0.10.123 +3000.example. 5M IN A 10.0.10.124 +3000.example. 5M IN A 10.0.10.125 +3000.example. 5M IN A 10.0.10.126 +3000.example. 5M IN A 10.0.10.127 +3000.example. 5M IN A 10.0.10.128 +3000.example. 5M IN A 10.0.10.129 +3000.example. 5M IN A 10.0.10.130 +3000.example. 5M IN A 10.0.10.131 +3000.example. 5M IN A 10.0.10.132 +3000.example. 5M IN A 10.0.10.133 +3000.example. 5M IN A 10.0.10.134 +3000.example. 5M IN A 10.0.10.135 +3000.example. 5M IN A 10.0.10.136 +3000.example. 5M IN A 10.0.10.137 +3000.example. 5M IN A 10.0.10.138 +3000.example. 5M IN A 10.0.10.139 +3000.example. 5M IN A 10.0.10.140 +3000.example. 5M IN A 10.0.10.141 +3000.example. 5M IN A 10.0.10.142 +3000.example. 5M IN A 10.0.10.143 +3000.example. 5M IN A 10.0.10.144 +3000.example. 5M IN A 10.0.10.145 +3000.example. 5M IN A 10.0.10.146 +3000.example. 5M IN A 10.0.10.147 +3000.example. 5M IN A 10.0.10.148 +3000.example. 5M IN A 10.0.10.149 +3000.example. 5M IN A 10.0.10.150 +3000.example. 5M IN A 10.0.10.151 +3000.example. 5M IN A 10.0.10.152 +3000.example. 5M IN A 10.0.10.153 +3000.example. 5M IN A 10.0.10.154 +3000.example. 5M IN A 10.0.10.155 +3000.example. 5M IN A 10.0.10.156 +3000.example. 5M IN A 10.0.10.157 +3000.example. 5M IN A 10.0.10.158 +3000.example. 5M IN A 10.0.10.159 +3000.example. 5M IN A 10.0.10.160 +3000.example. 5M IN A 10.0.10.161 +3000.example. 5M IN A 10.0.10.162 +3000.example. 5M IN A 10.0.10.163 +3000.example. 5M IN A 10.0.10.164 +3000.example. 5M IN A 10.0.10.165 +3000.example. 5M IN A 10.0.10.166 +3000.example. 5M IN A 10.0.10.167 +3000.example. 5M IN A 10.0.10.168 +3000.example. 5M IN A 10.0.10.169 +3000.example. 5M IN A 10.0.10.170 +3000.example. 5M IN A 10.0.10.171 +3000.example. 5M IN A 10.0.10.172 +3000.example. 5M IN A 10.0.10.173 +3000.example. 5M IN A 10.0.10.174 +3000.example. 5M IN A 10.0.10.175 +3000.example. 5M IN A 10.0.10.176 +3000.example. 5M IN A 10.0.10.177 +3000.example. 5M IN A 10.0.10.178 +3000.example. 5M IN A 10.0.10.179 +3000.example. 5M IN A 10.0.10.180 +3000.example. 5M IN A 10.0.10.181 +3000.example. 5M IN A 10.0.10.182 +3000.example. 5M IN A 10.0.10.183 +3000.example. 5M IN A 10.0.10.184 +3000.example. 5M IN A 10.0.10.185 +3000.example. 5M IN A 10.0.10.186 +3000.example. 5M IN A 10.0.10.187 +3000.example. 5M IN A 10.0.10.188 +3000.example. 5M IN A 10.0.10.189 +3000.example. 5M IN A 10.0.10.190 +3000.example. 5M IN A 10.0.10.191 +3000.example. 5M IN A 10.0.10.192 +3000.example. 5M IN A 10.0.10.193 +3000.example. 5M IN A 10.0.10.194 +3000.example. 5M IN A 10.0.10.195 +3000.example. 5M IN A 10.0.10.196 +3000.example. 5M IN A 10.0.10.197 +3000.example. 5M IN A 10.0.10.198 +3000.example. 5M IN A 10.0.10.199 +3000.example. 5M IN A 10.0.10.200 +3000.example. 5M IN A 10.0.10.201 +3000.example. 5M IN A 10.0.10.202 +3000.example. 5M IN A 10.0.10.203 +3000.example. 5M IN A 10.0.10.204 +3000.example. 5M IN A 10.0.10.205 +3000.example. 5M IN A 10.0.10.206 +3000.example. 5M IN A 10.0.10.207 +3000.example. 5M IN A 10.0.10.208 +3000.example. 5M IN A 10.0.10.209 +3000.example. 5M IN A 10.0.10.210 +3000.example. 5M IN A 10.0.10.211 +3000.example. 5M IN A 10.0.10.212 +3000.example. 5M IN A 10.0.10.213 +3000.example. 5M IN A 10.0.10.214 +3000.example. 5M IN A 10.0.10.215 +3000.example. 5M IN A 10.0.10.216 +3000.example. 5M IN A 10.0.10.217 +3000.example. 5M IN A 10.0.10.218 +3000.example. 5M IN A 10.0.10.219 +3000.example. 5M IN A 10.0.10.220 +3000.example. 5M IN A 10.0.10.221 +3000.example. 5M IN A 10.0.10.222 +3000.example. 5M IN A 10.0.10.223 +3000.example. 5M IN A 10.0.10.224 +3000.example. 5M IN A 10.0.10.225 +3000.example. 5M IN A 10.0.10.226 +3000.example. 5M IN A 10.0.10.227 +3000.example. 5M IN A 10.0.10.228 +3000.example. 5M IN A 10.0.10.229 +3000.example. 5M IN A 10.0.10.230 +3000.example. 5M IN A 10.0.10.231 +3000.example. 5M IN A 10.0.10.232 +3000.example. 5M IN A 10.0.10.233 +3000.example. 5M IN A 10.0.10.234 +3000.example. 5M IN A 10.0.10.235 +3000.example. 5M IN A 10.0.10.236 +3000.example. 5M IN A 10.0.10.237 +3000.example. 5M IN A 10.0.10.238 +3000.example. 5M IN A 10.0.10.239 +3000.example. 5M IN A 10.0.10.240 +3000.example. 5M IN A 10.0.10.241 +3000.example. 5M IN A 10.0.10.242 +3000.example. 5M IN A 10.0.10.243 +3000.example. 5M IN A 10.0.10.244 +3000.example. 5M IN A 10.0.10.245 +3000.example. 5M IN A 10.0.10.246 +3000.example. 5M IN A 10.0.10.247 +3000.example. 5M IN A 10.0.10.248 +3000.example. 5M IN A 10.0.10.249 +3000.example. 5M IN A 10.0.10.250 +3000.example. 5M IN A 10.0.10.251 +3000.example. 5M IN A 10.0.10.252 +3000.example. 5M IN A 10.0.10.253 +3000.example. 5M IN A 10.0.10.254 +3000.example. 5M IN A 10.0.10.255 +3000.example. 5M IN A 10.0.11.0 +3000.example. 5M IN A 10.0.11.1 +3000.example. 5M IN A 10.0.11.2 +3000.example. 5M IN A 10.0.11.3 +3000.example. 5M IN A 10.0.11.4 +3000.example. 5M IN A 10.0.11.5 +3000.example. 5M IN A 10.0.11.6 +3000.example. 5M IN A 10.0.11.7 +3000.example. 5M IN A 10.0.11.8 +3000.example. 5M IN A 10.0.11.9 +3000.example. 5M IN A 10.0.11.10 +3000.example. 5M IN A 10.0.11.11 +3000.example. 5M IN A 10.0.11.12 +3000.example. 5M IN A 10.0.11.13 +3000.example. 5M IN A 10.0.11.14 +3000.example. 5M IN A 10.0.11.15 +3000.example. 5M IN A 10.0.11.16 +3000.example. 5M IN A 10.0.11.17 +3000.example. 5M IN A 10.0.11.18 +3000.example. 5M IN A 10.0.11.19 +3000.example. 5M IN A 10.0.11.20 +3000.example. 5M IN A 10.0.11.21 +3000.example. 5M IN A 10.0.11.22 +3000.example. 5M IN A 10.0.11.23 +3000.example. 5M IN A 10.0.11.24 +3000.example. 5M IN A 10.0.11.25 +3000.example. 5M IN A 10.0.11.26 +3000.example. 5M IN A 10.0.11.27 +3000.example. 5M IN A 10.0.11.28 +3000.example. 5M IN A 10.0.11.29 +3000.example. 5M IN A 10.0.11.30 +3000.example. 5M IN A 10.0.11.31 +3000.example. 5M IN A 10.0.11.32 +3000.example. 5M IN A 10.0.11.33 +3000.example. 5M IN A 10.0.11.34 +3000.example. 5M IN A 10.0.11.35 +3000.example. 5M IN A 10.0.11.36 +3000.example. 5M IN A 10.0.11.37 +3000.example. 5M IN A 10.0.11.38 +3000.example. 5M IN A 10.0.11.39 +3000.example. 5M IN A 10.0.11.40 +3000.example. 5M IN A 10.0.11.41 +3000.example. 5M IN A 10.0.11.42 +3000.example. 5M IN A 10.0.11.43 +3000.example. 5M IN A 10.0.11.44 +3000.example. 5M IN A 10.0.11.45 +3000.example. 5M IN A 10.0.11.46 +3000.example. 5M IN A 10.0.11.47 +3000.example. 5M IN A 10.0.11.48 +3000.example. 5M IN A 10.0.11.49 +3000.example. 5M IN A 10.0.11.50 +3000.example. 5M IN A 10.0.11.51 +3000.example. 5M IN A 10.0.11.52 +3000.example. 5M IN A 10.0.11.53 +3000.example. 5M IN A 10.0.11.54 +3000.example. 5M IN A 10.0.11.55 +3000.example. 5M IN A 10.0.11.56 +3000.example. 5M IN A 10.0.11.57 +3000.example. 5M IN A 10.0.11.58 +3000.example. 5M IN A 10.0.11.59 +3000.example. 5M IN A 10.0.11.60 +3000.example. 5M IN A 10.0.11.61 +3000.example. 5M IN A 10.0.11.62 +3000.example. 5M IN A 10.0.11.63 +3000.example. 5M IN A 10.0.11.64 +3000.example. 5M IN A 10.0.11.65 +3000.example. 5M IN A 10.0.11.66 +3000.example. 5M IN A 10.0.11.67 +3000.example. 5M IN A 10.0.11.68 +3000.example. 5M IN A 10.0.11.69 +3000.example. 5M IN A 10.0.11.70 +3000.example. 5M IN A 10.0.11.71 +3000.example. 5M IN A 10.0.11.72 +3000.example. 5M IN A 10.0.11.73 +3000.example. 5M IN A 10.0.11.74 +3000.example. 5M IN A 10.0.11.75 +3000.example. 5M IN A 10.0.11.76 +3000.example. 5M IN A 10.0.11.77 +3000.example. 5M IN A 10.0.11.78 +3000.example. 5M IN A 10.0.11.79 +3000.example. 5M IN A 10.0.11.80 +3000.example. 5M IN A 10.0.11.81 +3000.example. 5M IN A 10.0.11.82 +3000.example. 5M IN A 10.0.11.83 +3000.example. 5M IN A 10.0.11.84 +3000.example. 5M IN A 10.0.11.85 +3000.example. 5M IN A 10.0.11.86 +3000.example. 5M IN A 10.0.11.87 +3000.example. 5M IN A 10.0.11.88 +3000.example. 5M IN A 10.0.11.89 +3000.example. 5M IN A 10.0.11.90 +3000.example. 5M IN A 10.0.11.91 +3000.example. 5M IN A 10.0.11.92 +3000.example. 5M IN A 10.0.11.93 +3000.example. 5M IN A 10.0.11.94 +3000.example. 5M IN A 10.0.11.95 +3000.example. 5M IN A 10.0.11.96 +3000.example. 5M IN A 10.0.11.97 +3000.example. 5M IN A 10.0.11.98 +3000.example. 5M IN A 10.0.11.99 +3000.example. 5M IN A 10.0.11.100 +3000.example. 5M IN A 10.0.11.101 +3000.example. 5M IN A 10.0.11.102 +3000.example. 5M IN A 10.0.11.103 +3000.example. 5M IN A 10.0.11.104 +3000.example. 5M IN A 10.0.11.105 +3000.example. 5M IN A 10.0.11.106 +3000.example. 5M IN A 10.0.11.107 +3000.example. 5M IN A 10.0.11.108 +3000.example. 5M IN A 10.0.11.109 +3000.example. 5M IN A 10.0.11.110 +3000.example. 5M IN A 10.0.11.111 +3000.example. 5M IN A 10.0.11.112 +3000.example. 5M IN A 10.0.11.113 +3000.example. 5M IN A 10.0.11.114 +3000.example. 5M IN A 10.0.11.115 +3000.example. 5M IN A 10.0.11.116 +3000.example. 5M IN A 10.0.11.117 +3000.example. 5M IN A 10.0.11.118 +3000.example. 5M IN A 10.0.11.119 +3000.example. 5M IN A 10.0.11.120 +3000.example. 5M IN A 10.0.11.121 +3000.example. 5M IN A 10.0.11.122 +3000.example. 5M IN A 10.0.11.123 +3000.example. 5M IN A 10.0.11.124 +3000.example. 5M IN A 10.0.11.125 +3000.example. 5M IN A 10.0.11.126 +3000.example. 5M IN A 10.0.11.127 +3000.example. 5M IN A 10.0.11.128 +3000.example. 5M IN A 10.0.11.129 +3000.example. 5M IN A 10.0.11.130 +3000.example. 5M IN A 10.0.11.131 +3000.example. 5M IN A 10.0.11.132 +3000.example. 5M IN A 10.0.11.133 +3000.example. 5M IN A 10.0.11.134 +3000.example. 5M IN A 10.0.11.135 +3000.example. 5M IN A 10.0.11.136 +3000.example. 5M IN A 10.0.11.137 +3000.example. 5M IN A 10.0.11.138 +3000.example. 5M IN A 10.0.11.139 +3000.example. 5M IN A 10.0.11.140 +3000.example. 5M IN A 10.0.11.141 +3000.example. 5M IN A 10.0.11.142 +3000.example. 5M IN A 10.0.11.143 +3000.example. 5M IN A 10.0.11.144 +3000.example. 5M IN A 10.0.11.145 +3000.example. 5M IN A 10.0.11.146 +3000.example. 5M IN A 10.0.11.147 +3000.example. 5M IN A 10.0.11.148 +3000.example. 5M IN A 10.0.11.149 +3000.example. 5M IN A 10.0.11.150 +3000.example. 5M IN A 10.0.11.151 +3000.example. 5M IN A 10.0.11.152 +3000.example. 5M IN A 10.0.11.153 +3000.example. 5M IN A 10.0.11.154 +3000.example. 5M IN A 10.0.11.155 +3000.example. 5M IN A 10.0.11.156 +3000.example. 5M IN A 10.0.11.157 +3000.example. 5M IN A 10.0.11.158 +3000.example. 5M IN A 10.0.11.159 +3000.example. 5M IN A 10.0.11.160 +3000.example. 5M IN A 10.0.11.161 +3000.example. 5M IN A 10.0.11.162 +3000.example. 5M IN A 10.0.11.163 +3000.example. 5M IN A 10.0.11.164 +3000.example. 5M IN A 10.0.11.165 +3000.example. 5M IN A 10.0.11.166 +3000.example. 5M IN A 10.0.11.167 +3000.example. 5M IN A 10.0.11.168 +3000.example. 5M IN A 10.0.11.169 +3000.example. 5M IN A 10.0.11.170 +3000.example. 5M IN A 10.0.11.171 +3000.example. 5M IN A 10.0.11.172 +3000.example. 5M IN A 10.0.11.173 +3000.example. 5M IN A 10.0.11.174 +3000.example. 5M IN A 10.0.11.175 +3000.example. 5M IN A 10.0.11.176 +3000.example. 5M IN A 10.0.11.177 +3000.example. 5M IN A 10.0.11.178 +3000.example. 5M IN A 10.0.11.179 +3000.example. 5M IN A 10.0.11.180 +3000.example. 5M IN A 10.0.11.181 +3000.example. 5M IN A 10.0.11.182 +3000.example. 5M IN A 10.0.11.183 + +;; AUTHORITY SECTION: +example. 5M IN NS ns1.example. + +;; ADDITIONAL SECTION: +ns1.example. 5M IN A 10.53.0.1 + +;; Total query time: 211 msec +;; FROM: draco to SERVER: 10.53.0.1 +;; WHEN: Fri Jun 23 12:58:17 2000 +;; MSG SIZE sent: 30 rcvd: 48068 + diff --git a/bin/tests/system/limits/knowngood.dig.out.4000 b/bin/tests/system/limits/knowngood.dig.out.4000 new file mode 100644 index 0000000..8b109c8 --- /dev/null +++ b/bin/tests/system/limits/knowngood.dig.out.4000 @@ -0,0 +1,4023 @@ + +; <<>> DiG 8.2 <<>> 4000.example. @10.53.0.1 a -p +; (1 server found) +;; res options: init recurs defnam dnsrch +;; got answer: +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6 +;; flags: qr aa rd ad; QUERY: 1, ANSWER: 4000, AUTHORITY: 1, ADDITIONAL: 1 +;; QUERY SECTION: +;; 4000.example, type = A, class = IN + +;; ANSWER SECTION: +4000.example. 5M IN A 10.0.0.0 +4000.example. 5M IN A 10.0.0.1 +4000.example. 5M IN A 10.0.0.2 +4000.example. 5M IN A 10.0.0.3 +4000.example. 5M IN A 10.0.0.4 +4000.example. 5M IN A 10.0.0.5 +4000.example. 5M IN A 10.0.0.6 +4000.example. 5M IN A 10.0.0.7 +4000.example. 5M IN A 10.0.0.8 +4000.example. 5M IN A 10.0.0.9 +4000.example. 5M IN A 10.0.0.10 +4000.example. 5M IN A 10.0.0.11 +4000.example. 5M IN A 10.0.0.12 +4000.example. 5M IN A 10.0.0.13 +4000.example. 5M IN A 10.0.0.14 +4000.example. 5M IN A 10.0.0.15 +4000.example. 5M IN A 10.0.0.16 +4000.example. 5M IN A 10.0.0.17 +4000.example. 5M IN A 10.0.0.18 +4000.example. 5M IN A 10.0.0.19 +4000.example. 5M IN A 10.0.0.20 +4000.example. 5M IN A 10.0.0.21 +4000.example. 5M IN A 10.0.0.22 +4000.example. 5M IN A 10.0.0.23 +4000.example. 5M IN A 10.0.0.24 +4000.example. 5M IN A 10.0.0.25 +4000.example. 5M IN A 10.0.0.26 +4000.example. 5M IN A 10.0.0.27 +4000.example. 5M IN A 10.0.0.28 +4000.example. 5M IN A 10.0.0.29 +4000.example. 5M IN A 10.0.0.30 +4000.example. 5M IN A 10.0.0.31 +4000.example. 5M IN A 10.0.0.32 +4000.example. 5M IN A 10.0.0.33 +4000.example. 5M IN A 10.0.0.34 +4000.example. 5M IN A 10.0.0.35 +4000.example. 5M IN A 10.0.0.36 +4000.example. 5M IN A 10.0.0.37 +4000.example. 5M IN A 10.0.0.38 +4000.example. 5M IN A 10.0.0.39 +4000.example. 5M IN A 10.0.0.40 +4000.example. 5M IN A 10.0.0.41 +4000.example. 5M IN A 10.0.0.42 +4000.example. 5M IN A 10.0.0.43 +4000.example. 5M IN A 10.0.0.44 +4000.example. 5M IN A 10.0.0.45 +4000.example. 5M IN A 10.0.0.46 +4000.example. 5M IN A 10.0.0.47 +4000.example. 5M IN A 10.0.0.48 +4000.example. 5M IN A 10.0.0.49 +4000.example. 5M IN A 10.0.0.50 +4000.example. 5M IN A 10.0.0.51 +4000.example. 5M IN A 10.0.0.52 +4000.example. 5M IN A 10.0.0.53 +4000.example. 5M IN A 10.0.0.54 +4000.example. 5M IN A 10.0.0.55 +4000.example. 5M IN A 10.0.0.56 +4000.example. 5M IN A 10.0.0.57 +4000.example. 5M IN A 10.0.0.58 +4000.example. 5M IN A 10.0.0.59 +4000.example. 5M IN A 10.0.0.60 +4000.example. 5M IN A 10.0.0.61 +4000.example. 5M IN A 10.0.0.62 +4000.example. 5M IN A 10.0.0.63 +4000.example. 5M IN A 10.0.0.64 +4000.example. 5M IN A 10.0.0.65 +4000.example. 5M IN A 10.0.0.66 +4000.example. 5M IN A 10.0.0.67 +4000.example. 5M IN A 10.0.0.68 +4000.example. 5M IN A 10.0.0.69 +4000.example. 5M IN A 10.0.0.70 +4000.example. 5M IN A 10.0.0.71 +4000.example. 5M IN A 10.0.0.72 +4000.example. 5M IN A 10.0.0.73 +4000.example. 5M IN A 10.0.0.74 +4000.example. 5M IN A 10.0.0.75 +4000.example. 5M IN A 10.0.0.76 +4000.example. 5M IN A 10.0.0.77 +4000.example. 5M IN A 10.0.0.78 +4000.example. 5M IN A 10.0.0.79 +4000.example. 5M IN A 10.0.0.80 +4000.example. 5M IN A 10.0.0.81 +4000.example. 5M IN A 10.0.0.82 +4000.example. 5M IN A 10.0.0.83 +4000.example. 5M IN A 10.0.0.84 +4000.example. 5M IN A 10.0.0.85 +4000.example. 5M IN A 10.0.0.86 +4000.example. 5M IN A 10.0.0.87 +4000.example. 5M IN A 10.0.0.88 +4000.example. 5M IN A 10.0.0.89 +4000.example. 5M IN A 10.0.0.90 +4000.example. 5M IN A 10.0.0.91 +4000.example. 5M IN A 10.0.0.92 +4000.example. 5M IN A 10.0.0.93 +4000.example. 5M IN A 10.0.0.94 +4000.example. 5M IN A 10.0.0.95 +4000.example. 5M IN A 10.0.0.96 +4000.example. 5M IN A 10.0.0.97 +4000.example. 5M IN A 10.0.0.98 +4000.example. 5M IN A 10.0.0.99 +4000.example. 5M IN A 10.0.0.100 +4000.example. 5M IN A 10.0.0.101 +4000.example. 5M IN A 10.0.0.102 +4000.example. 5M IN A 10.0.0.103 +4000.example. 5M IN A 10.0.0.104 +4000.example. 5M IN A 10.0.0.105 +4000.example. 5M IN A 10.0.0.106 +4000.example. 5M IN A 10.0.0.107 +4000.example. 5M IN A 10.0.0.108 +4000.example. 5M IN A 10.0.0.109 +4000.example. 5M IN A 10.0.0.110 +4000.example. 5M IN A 10.0.0.111 +4000.example. 5M IN A 10.0.0.112 +4000.example. 5M IN A 10.0.0.113 +4000.example. 5M IN A 10.0.0.114 +4000.example. 5M IN A 10.0.0.115 +4000.example. 5M IN A 10.0.0.116 +4000.example. 5M IN A 10.0.0.117 +4000.example. 5M IN A 10.0.0.118 +4000.example. 5M IN A 10.0.0.119 +4000.example. 5M IN A 10.0.0.120 +4000.example. 5M IN A 10.0.0.121 +4000.example. 5M IN A 10.0.0.122 +4000.example. 5M IN A 10.0.0.123 +4000.example. 5M IN A 10.0.0.124 +4000.example. 5M IN A 10.0.0.125 +4000.example. 5M IN A 10.0.0.126 +4000.example. 5M IN A 10.0.0.127 +4000.example. 5M IN A 10.0.0.128 +4000.example. 5M IN A 10.0.0.129 +4000.example. 5M IN A 10.0.0.130 +4000.example. 5M IN A 10.0.0.131 +4000.example. 5M IN A 10.0.0.132 +4000.example. 5M IN A 10.0.0.133 +4000.example. 5M IN A 10.0.0.134 +4000.example. 5M IN A 10.0.0.135 +4000.example. 5M IN A 10.0.0.136 +4000.example. 5M IN A 10.0.0.137 +4000.example. 5M IN A 10.0.0.138 +4000.example. 5M IN A 10.0.0.139 +4000.example. 5M IN A 10.0.0.140 +4000.example. 5M IN A 10.0.0.141 +4000.example. 5M IN A 10.0.0.142 +4000.example. 5M IN A 10.0.0.143 +4000.example. 5M IN A 10.0.0.144 +4000.example. 5M IN A 10.0.0.145 +4000.example. 5M IN A 10.0.0.146 +4000.example. 5M IN A 10.0.0.147 +4000.example. 5M IN A 10.0.0.148 +4000.example. 5M IN A 10.0.0.149 +4000.example. 5M IN A 10.0.0.150 +4000.example. 5M IN A 10.0.0.151 +4000.example. 5M IN A 10.0.0.152 +4000.example. 5M IN A 10.0.0.153 +4000.example. 5M IN A 10.0.0.154 +4000.example. 5M IN A 10.0.0.155 +4000.example. 5M IN A 10.0.0.156 +4000.example. 5M IN A 10.0.0.157 +4000.example. 5M IN A 10.0.0.158 +4000.example. 5M IN A 10.0.0.159 +4000.example. 5M IN A 10.0.0.160 +4000.example. 5M IN A 10.0.0.161 +4000.example. 5M IN A 10.0.0.162 +4000.example. 5M IN A 10.0.0.163 +4000.example. 5M IN A 10.0.0.164 +4000.example. 5M IN A 10.0.0.165 +4000.example. 5M IN A 10.0.0.166 +4000.example. 5M IN A 10.0.0.167 +4000.example. 5M IN A 10.0.0.168 +4000.example. 5M IN A 10.0.0.169 +4000.example. 5M IN A 10.0.0.170 +4000.example. 5M IN A 10.0.0.171 +4000.example. 5M IN A 10.0.0.172 +4000.example. 5M IN A 10.0.0.173 +4000.example. 5M IN A 10.0.0.174 +4000.example. 5M IN A 10.0.0.175 +4000.example. 5M IN A 10.0.0.176 +4000.example. 5M IN A 10.0.0.177 +4000.example. 5M IN A 10.0.0.178 +4000.example. 5M IN A 10.0.0.179 +4000.example. 5M IN A 10.0.0.180 +4000.example. 5M IN A 10.0.0.181 +4000.example. 5M IN A 10.0.0.182 +4000.example. 5M IN A 10.0.0.183 +4000.example. 5M IN A 10.0.0.184 +4000.example. 5M IN A 10.0.0.185 +4000.example. 5M IN A 10.0.0.186 +4000.example. 5M IN A 10.0.0.187 +4000.example. 5M IN A 10.0.0.188 +4000.example. 5M IN A 10.0.0.189 +4000.example. 5M IN A 10.0.0.190 +4000.example. 5M IN A 10.0.0.191 +4000.example. 5M IN A 10.0.0.192 +4000.example. 5M IN A 10.0.0.193 +4000.example. 5M IN A 10.0.0.194 +4000.example. 5M IN A 10.0.0.195 +4000.example. 5M IN A 10.0.0.196 +4000.example. 5M IN A 10.0.0.197 +4000.example. 5M IN A 10.0.0.198 +4000.example. 5M IN A 10.0.0.199 +4000.example. 5M IN A 10.0.0.200 +4000.example. 5M IN A 10.0.0.201 +4000.example. 5M IN A 10.0.0.202 +4000.example. 5M IN A 10.0.0.203 +4000.example. 5M IN A 10.0.0.204 +4000.example. 5M IN A 10.0.0.205 +4000.example. 5M IN A 10.0.0.206 +4000.example. 5M IN A 10.0.0.207 +4000.example. 5M IN A 10.0.0.208 +4000.example. 5M IN A 10.0.0.209 +4000.example. 5M IN A 10.0.0.210 +4000.example. 5M IN A 10.0.0.211 +4000.example. 5M IN A 10.0.0.212 +4000.example. 5M IN A 10.0.0.213 +4000.example. 5M IN A 10.0.0.214 +4000.example. 5M IN A 10.0.0.215 +4000.example. 5M IN A 10.0.0.216 +4000.example. 5M IN A 10.0.0.217 +4000.example. 5M IN A 10.0.0.218 +4000.example. 5M IN A 10.0.0.219 +4000.example. 5M IN A 10.0.0.220 +4000.example. 5M IN A 10.0.0.221 +4000.example. 5M IN A 10.0.0.222 +4000.example. 5M IN A 10.0.0.223 +4000.example. 5M IN A 10.0.0.224 +4000.example. 5M IN A 10.0.0.225 +4000.example. 5M IN A 10.0.0.226 +4000.example. 5M IN A 10.0.0.227 +4000.example. 5M IN A 10.0.0.228 +4000.example. 5M IN A 10.0.0.229 +4000.example. 5M IN A 10.0.0.230 +4000.example. 5M IN A 10.0.0.231 +4000.example. 5M IN A 10.0.0.232 +4000.example. 5M IN A 10.0.0.233 +4000.example. 5M IN A 10.0.0.234 +4000.example. 5M IN A 10.0.0.235 +4000.example. 5M IN A 10.0.0.236 +4000.example. 5M IN A 10.0.0.237 +4000.example. 5M IN A 10.0.0.238 +4000.example. 5M IN A 10.0.0.239 +4000.example. 5M IN A 10.0.0.240 +4000.example. 5M IN A 10.0.0.241 +4000.example. 5M IN A 10.0.0.242 +4000.example. 5M IN A 10.0.0.243 +4000.example. 5M IN A 10.0.0.244 +4000.example. 5M IN A 10.0.0.245 +4000.example. 5M IN A 10.0.0.246 +4000.example. 5M IN A 10.0.0.247 +4000.example. 5M IN A 10.0.0.248 +4000.example. 5M IN A 10.0.0.249 +4000.example. 5M IN A 10.0.0.250 +4000.example. 5M IN A 10.0.0.251 +4000.example. 5M IN A 10.0.0.252 +4000.example. 5M IN A 10.0.0.253 +4000.example. 5M IN A 10.0.0.254 +4000.example. 5M IN A 10.0.0.255 +4000.example. 5M IN A 10.0.1.0 +4000.example. 5M IN A 10.0.1.1 +4000.example. 5M IN A 10.0.1.2 +4000.example. 5M IN A 10.0.1.3 +4000.example. 5M IN A 10.0.1.4 +4000.example. 5M IN A 10.0.1.5 +4000.example. 5M IN A 10.0.1.6 +4000.example. 5M IN A 10.0.1.7 +4000.example. 5M IN A 10.0.1.8 +4000.example. 5M IN A 10.0.1.9 +4000.example. 5M IN A 10.0.1.10 +4000.example. 5M IN A 10.0.1.11 +4000.example. 5M IN A 10.0.1.12 +4000.example. 5M IN A 10.0.1.13 +4000.example. 5M IN A 10.0.1.14 +4000.example. 5M IN A 10.0.1.15 +4000.example. 5M IN A 10.0.1.16 +4000.example. 5M IN A 10.0.1.17 +4000.example. 5M IN A 10.0.1.18 +4000.example. 5M IN A 10.0.1.19 +4000.example. 5M IN A 10.0.1.20 +4000.example. 5M IN A 10.0.1.21 +4000.example. 5M IN A 10.0.1.22 +4000.example. 5M IN A 10.0.1.23 +4000.example. 5M IN A 10.0.1.24 +4000.example. 5M IN A 10.0.1.25 +4000.example. 5M IN A 10.0.1.26 +4000.example. 5M IN A 10.0.1.27 +4000.example. 5M IN A 10.0.1.28 +4000.example. 5M IN A 10.0.1.29 +4000.example. 5M IN A 10.0.1.30 +4000.example. 5M IN A 10.0.1.31 +4000.example. 5M IN A 10.0.1.32 +4000.example. 5M IN A 10.0.1.33 +4000.example. 5M IN A 10.0.1.34 +4000.example. 5M IN A 10.0.1.35 +4000.example. 5M IN A 10.0.1.36 +4000.example. 5M IN A 10.0.1.37 +4000.example. 5M IN A 10.0.1.38 +4000.example. 5M IN A 10.0.1.39 +4000.example. 5M IN A 10.0.1.40 +4000.example. 5M IN A 10.0.1.41 +4000.example. 5M IN A 10.0.1.42 +4000.example. 5M IN A 10.0.1.43 +4000.example. 5M IN A 10.0.1.44 +4000.example. 5M IN A 10.0.1.45 +4000.example. 5M IN A 10.0.1.46 +4000.example. 5M IN A 10.0.1.47 +4000.example. 5M IN A 10.0.1.48 +4000.example. 5M IN A 10.0.1.49 +4000.example. 5M IN A 10.0.1.50 +4000.example. 5M IN A 10.0.1.51 +4000.example. 5M IN A 10.0.1.52 +4000.example. 5M IN A 10.0.1.53 +4000.example. 5M IN A 10.0.1.54 +4000.example. 5M IN A 10.0.1.55 +4000.example. 5M IN A 10.0.1.56 +4000.example. 5M IN A 10.0.1.57 +4000.example. 5M IN A 10.0.1.58 +4000.example. 5M IN A 10.0.1.59 +4000.example. 5M IN A 10.0.1.60 +4000.example. 5M IN A 10.0.1.61 +4000.example. 5M IN A 10.0.1.62 +4000.example. 5M IN A 10.0.1.63 +4000.example. 5M IN A 10.0.1.64 +4000.example. 5M IN A 10.0.1.65 +4000.example. 5M IN A 10.0.1.66 +4000.example. 5M IN A 10.0.1.67 +4000.example. 5M IN A 10.0.1.68 +4000.example. 5M IN A 10.0.1.69 +4000.example. 5M IN A 10.0.1.70 +4000.example. 5M IN A 10.0.1.71 +4000.example. 5M IN A 10.0.1.72 +4000.example. 5M IN A 10.0.1.73 +4000.example. 5M IN A 10.0.1.74 +4000.example. 5M IN A 10.0.1.75 +4000.example. 5M IN A 10.0.1.76 +4000.example. 5M IN A 10.0.1.77 +4000.example. 5M IN A 10.0.1.78 +4000.example. 5M IN A 10.0.1.79 +4000.example. 5M IN A 10.0.1.80 +4000.example. 5M IN A 10.0.1.81 +4000.example. 5M IN A 10.0.1.82 +4000.example. 5M IN A 10.0.1.83 +4000.example. 5M IN A 10.0.1.84 +4000.example. 5M IN A 10.0.1.85 +4000.example. 5M IN A 10.0.1.86 +4000.example. 5M IN A 10.0.1.87 +4000.example. 5M IN A 10.0.1.88 +4000.example. 5M IN A 10.0.1.89 +4000.example. 5M IN A 10.0.1.90 +4000.example. 5M IN A 10.0.1.91 +4000.example. 5M IN A 10.0.1.92 +4000.example. 5M IN A 10.0.1.93 +4000.example. 5M IN A 10.0.1.94 +4000.example. 5M IN A 10.0.1.95 +4000.example. 5M IN A 10.0.1.96 +4000.example. 5M IN A 10.0.1.97 +4000.example. 5M IN A 10.0.1.98 +4000.example. 5M IN A 10.0.1.99 +4000.example. 5M IN A 10.0.1.100 +4000.example. 5M IN A 10.0.1.101 +4000.example. 5M IN A 10.0.1.102 +4000.example. 5M IN A 10.0.1.103 +4000.example. 5M IN A 10.0.1.104 +4000.example. 5M IN A 10.0.1.105 +4000.example. 5M IN A 10.0.1.106 +4000.example. 5M IN A 10.0.1.107 +4000.example. 5M IN A 10.0.1.108 +4000.example. 5M IN A 10.0.1.109 +4000.example. 5M IN A 10.0.1.110 +4000.example. 5M IN A 10.0.1.111 +4000.example. 5M IN A 10.0.1.112 +4000.example. 5M IN A 10.0.1.113 +4000.example. 5M IN A 10.0.1.114 +4000.example. 5M IN A 10.0.1.115 +4000.example. 5M IN A 10.0.1.116 +4000.example. 5M IN A 10.0.1.117 +4000.example. 5M IN A 10.0.1.118 +4000.example. 5M IN A 10.0.1.119 +4000.example. 5M IN A 10.0.1.120 +4000.example. 5M IN A 10.0.1.121 +4000.example. 5M IN A 10.0.1.122 +4000.example. 5M IN A 10.0.1.123 +4000.example. 5M IN A 10.0.1.124 +4000.example. 5M IN A 10.0.1.125 +4000.example. 5M IN A 10.0.1.126 +4000.example. 5M IN A 10.0.1.127 +4000.example. 5M IN A 10.0.1.128 +4000.example. 5M IN A 10.0.1.129 +4000.example. 5M IN A 10.0.1.130 +4000.example. 5M IN A 10.0.1.131 +4000.example. 5M IN A 10.0.1.132 +4000.example. 5M IN A 10.0.1.133 +4000.example. 5M IN A 10.0.1.134 +4000.example. 5M IN A 10.0.1.135 +4000.example. 5M IN A 10.0.1.136 +4000.example. 5M IN A 10.0.1.137 +4000.example. 5M IN A 10.0.1.138 +4000.example. 5M IN A 10.0.1.139 +4000.example. 5M IN A 10.0.1.140 +4000.example. 5M IN A 10.0.1.141 +4000.example. 5M IN A 10.0.1.142 +4000.example. 5M IN A 10.0.1.143 +4000.example. 5M IN A 10.0.1.144 +4000.example. 5M IN A 10.0.1.145 +4000.example. 5M IN A 10.0.1.146 +4000.example. 5M IN A 10.0.1.147 +4000.example. 5M IN A 10.0.1.148 +4000.example. 5M IN A 10.0.1.149 +4000.example. 5M IN A 10.0.1.150 +4000.example. 5M IN A 10.0.1.151 +4000.example. 5M IN A 10.0.1.152 +4000.example. 5M IN A 10.0.1.153 +4000.example. 5M IN A 10.0.1.154 +4000.example. 5M IN A 10.0.1.155 +4000.example. 5M IN A 10.0.1.156 +4000.example. 5M IN A 10.0.1.157 +4000.example. 5M IN A 10.0.1.158 +4000.example. 5M IN A 10.0.1.159 +4000.example. 5M IN A 10.0.1.160 +4000.example. 5M IN A 10.0.1.161 +4000.example. 5M IN A 10.0.1.162 +4000.example. 5M IN A 10.0.1.163 +4000.example. 5M IN A 10.0.1.164 +4000.example. 5M IN A 10.0.1.165 +4000.example. 5M IN A 10.0.1.166 +4000.example. 5M IN A 10.0.1.167 +4000.example. 5M IN A 10.0.1.168 +4000.example. 5M IN A 10.0.1.169 +4000.example. 5M IN A 10.0.1.170 +4000.example. 5M IN A 10.0.1.171 +4000.example. 5M IN A 10.0.1.172 +4000.example. 5M IN A 10.0.1.173 +4000.example. 5M IN A 10.0.1.174 +4000.example. 5M IN A 10.0.1.175 +4000.example. 5M IN A 10.0.1.176 +4000.example. 5M IN A 10.0.1.177 +4000.example. 5M IN A 10.0.1.178 +4000.example. 5M IN A 10.0.1.179 +4000.example. 5M IN A 10.0.1.180 +4000.example. 5M IN A 10.0.1.181 +4000.example. 5M IN A 10.0.1.182 +4000.example. 5M IN A 10.0.1.183 +4000.example. 5M IN A 10.0.1.184 +4000.example. 5M IN A 10.0.1.185 +4000.example. 5M IN A 10.0.1.186 +4000.example. 5M IN A 10.0.1.187 +4000.example. 5M IN A 10.0.1.188 +4000.example. 5M IN A 10.0.1.189 +4000.example. 5M IN A 10.0.1.190 +4000.example. 5M IN A 10.0.1.191 +4000.example. 5M IN A 10.0.1.192 +4000.example. 5M IN A 10.0.1.193 +4000.example. 5M IN A 10.0.1.194 +4000.example. 5M IN A 10.0.1.195 +4000.example. 5M IN A 10.0.1.196 +4000.example. 5M IN A 10.0.1.197 +4000.example. 5M IN A 10.0.1.198 +4000.example. 5M IN A 10.0.1.199 +4000.example. 5M IN A 10.0.1.200 +4000.example. 5M IN A 10.0.1.201 +4000.example. 5M IN A 10.0.1.202 +4000.example. 5M IN A 10.0.1.203 +4000.example. 5M IN A 10.0.1.204 +4000.example. 5M IN A 10.0.1.205 +4000.example. 5M IN A 10.0.1.206 +4000.example. 5M IN A 10.0.1.207 +4000.example. 5M IN A 10.0.1.208 +4000.example. 5M IN A 10.0.1.209 +4000.example. 5M IN A 10.0.1.210 +4000.example. 5M IN A 10.0.1.211 +4000.example. 5M IN A 10.0.1.212 +4000.example. 5M IN A 10.0.1.213 +4000.example. 5M IN A 10.0.1.214 +4000.example. 5M IN A 10.0.1.215 +4000.example. 5M IN A 10.0.1.216 +4000.example. 5M IN A 10.0.1.217 +4000.example. 5M IN A 10.0.1.218 +4000.example. 5M IN A 10.0.1.219 +4000.example. 5M IN A 10.0.1.220 +4000.example. 5M IN A 10.0.1.221 +4000.example. 5M IN A 10.0.1.222 +4000.example. 5M IN A 10.0.1.223 +4000.example. 5M IN A 10.0.1.224 +4000.example. 5M IN A 10.0.1.225 +4000.example. 5M IN A 10.0.1.226 +4000.example. 5M IN A 10.0.1.227 +4000.example. 5M IN A 10.0.1.228 +4000.example. 5M IN A 10.0.1.229 +4000.example. 5M IN A 10.0.1.230 +4000.example. 5M IN A 10.0.1.231 +4000.example. 5M IN A 10.0.1.232 +4000.example. 5M IN A 10.0.1.233 +4000.example. 5M IN A 10.0.1.234 +4000.example. 5M IN A 10.0.1.235 +4000.example. 5M IN A 10.0.1.236 +4000.example. 5M IN A 10.0.1.237 +4000.example. 5M IN A 10.0.1.238 +4000.example. 5M IN A 10.0.1.239 +4000.example. 5M IN A 10.0.1.240 +4000.example. 5M IN A 10.0.1.241 +4000.example. 5M IN A 10.0.1.242 +4000.example. 5M IN A 10.0.1.243 +4000.example. 5M IN A 10.0.1.244 +4000.example. 5M IN A 10.0.1.245 +4000.example. 5M IN A 10.0.1.246 +4000.example. 5M IN A 10.0.1.247 +4000.example. 5M IN A 10.0.1.248 +4000.example. 5M IN A 10.0.1.249 +4000.example. 5M IN A 10.0.1.250 +4000.example. 5M IN A 10.0.1.251 +4000.example. 5M IN A 10.0.1.252 +4000.example. 5M IN A 10.0.1.253 +4000.example. 5M IN A 10.0.1.254 +4000.example. 5M IN A 10.0.1.255 +4000.example. 5M IN A 10.0.2.0 +4000.example. 5M IN A 10.0.2.1 +4000.example. 5M IN A 10.0.2.2 +4000.example. 5M IN A 10.0.2.3 +4000.example. 5M IN A 10.0.2.4 +4000.example. 5M IN A 10.0.2.5 +4000.example. 5M IN A 10.0.2.6 +4000.example. 5M IN A 10.0.2.7 +4000.example. 5M IN A 10.0.2.8 +4000.example. 5M IN A 10.0.2.9 +4000.example. 5M IN A 10.0.2.10 +4000.example. 5M IN A 10.0.2.11 +4000.example. 5M IN A 10.0.2.12 +4000.example. 5M IN A 10.0.2.13 +4000.example. 5M IN A 10.0.2.14 +4000.example. 5M IN A 10.0.2.15 +4000.example. 5M IN A 10.0.2.16 +4000.example. 5M IN A 10.0.2.17 +4000.example. 5M IN A 10.0.2.18 +4000.example. 5M IN A 10.0.2.19 +4000.example. 5M IN A 10.0.2.20 +4000.example. 5M IN A 10.0.2.21 +4000.example. 5M IN A 10.0.2.22 +4000.example. 5M IN A 10.0.2.23 +4000.example. 5M IN A 10.0.2.24 +4000.example. 5M IN A 10.0.2.25 +4000.example. 5M IN A 10.0.2.26 +4000.example. 5M IN A 10.0.2.27 +4000.example. 5M IN A 10.0.2.28 +4000.example. 5M IN A 10.0.2.29 +4000.example. 5M IN A 10.0.2.30 +4000.example. 5M IN A 10.0.2.31 +4000.example. 5M IN A 10.0.2.32 +4000.example. 5M IN A 10.0.2.33 +4000.example. 5M IN A 10.0.2.34 +4000.example. 5M IN A 10.0.2.35 +4000.example. 5M IN A 10.0.2.36 +4000.example. 5M IN A 10.0.2.37 +4000.example. 5M IN A 10.0.2.38 +4000.example. 5M IN A 10.0.2.39 +4000.example. 5M IN A 10.0.2.40 +4000.example. 5M IN A 10.0.2.41 +4000.example. 5M IN A 10.0.2.42 +4000.example. 5M IN A 10.0.2.43 +4000.example. 5M IN A 10.0.2.44 +4000.example. 5M IN A 10.0.2.45 +4000.example. 5M IN A 10.0.2.46 +4000.example. 5M IN A 10.0.2.47 +4000.example. 5M IN A 10.0.2.48 +4000.example. 5M IN A 10.0.2.49 +4000.example. 5M IN A 10.0.2.50 +4000.example. 5M IN A 10.0.2.51 +4000.example. 5M IN A 10.0.2.52 +4000.example. 5M IN A 10.0.2.53 +4000.example. 5M IN A 10.0.2.54 +4000.example. 5M IN A 10.0.2.55 +4000.example. 5M IN A 10.0.2.56 +4000.example. 5M IN A 10.0.2.57 +4000.example. 5M IN A 10.0.2.58 +4000.example. 5M IN A 10.0.2.59 +4000.example. 5M IN A 10.0.2.60 +4000.example. 5M IN A 10.0.2.61 +4000.example. 5M IN A 10.0.2.62 +4000.example. 5M IN A 10.0.2.63 +4000.example. 5M IN A 10.0.2.64 +4000.example. 5M IN A 10.0.2.65 +4000.example. 5M IN A 10.0.2.66 +4000.example. 5M IN A 10.0.2.67 +4000.example. 5M IN A 10.0.2.68 +4000.example. 5M IN A 10.0.2.69 +4000.example. 5M IN A 10.0.2.70 +4000.example. 5M IN A 10.0.2.71 +4000.example. 5M IN A 10.0.2.72 +4000.example. 5M IN A 10.0.2.73 +4000.example. 5M IN A 10.0.2.74 +4000.example. 5M IN A 10.0.2.75 +4000.example. 5M IN A 10.0.2.76 +4000.example. 5M IN A 10.0.2.77 +4000.example. 5M IN A 10.0.2.78 +4000.example. 5M IN A 10.0.2.79 +4000.example. 5M IN A 10.0.2.80 +4000.example. 5M IN A 10.0.2.81 +4000.example. 5M IN A 10.0.2.82 +4000.example. 5M IN A 10.0.2.83 +4000.example. 5M IN A 10.0.2.84 +4000.example. 5M IN A 10.0.2.85 +4000.example. 5M IN A 10.0.2.86 +4000.example. 5M IN A 10.0.2.87 +4000.example. 5M IN A 10.0.2.88 +4000.example. 5M IN A 10.0.2.89 +4000.example. 5M IN A 10.0.2.90 +4000.example. 5M IN A 10.0.2.91 +4000.example. 5M IN A 10.0.2.92 +4000.example. 5M IN A 10.0.2.93 +4000.example. 5M IN A 10.0.2.94 +4000.example. 5M IN A 10.0.2.95 +4000.example. 5M IN A 10.0.2.96 +4000.example. 5M IN A 10.0.2.97 +4000.example. 5M IN A 10.0.2.98 +4000.example. 5M IN A 10.0.2.99 +4000.example. 5M IN A 10.0.2.100 +4000.example. 5M IN A 10.0.2.101 +4000.example. 5M IN A 10.0.2.102 +4000.example. 5M IN A 10.0.2.103 +4000.example. 5M IN A 10.0.2.104 +4000.example. 5M IN A 10.0.2.105 +4000.example. 5M IN A 10.0.2.106 +4000.example. 5M IN A 10.0.2.107 +4000.example. 5M IN A 10.0.2.108 +4000.example. 5M IN A 10.0.2.109 +4000.example. 5M IN A 10.0.2.110 +4000.example. 5M IN A 10.0.2.111 +4000.example. 5M IN A 10.0.2.112 +4000.example. 5M IN A 10.0.2.113 +4000.example. 5M IN A 10.0.2.114 +4000.example. 5M IN A 10.0.2.115 +4000.example. 5M IN A 10.0.2.116 +4000.example. 5M IN A 10.0.2.117 +4000.example. 5M IN A 10.0.2.118 +4000.example. 5M IN A 10.0.2.119 +4000.example. 5M IN A 10.0.2.120 +4000.example. 5M IN A 10.0.2.121 +4000.example. 5M IN A 10.0.2.122 +4000.example. 5M IN A 10.0.2.123 +4000.example. 5M IN A 10.0.2.124 +4000.example. 5M IN A 10.0.2.125 +4000.example. 5M IN A 10.0.2.126 +4000.example. 5M IN A 10.0.2.127 +4000.example. 5M IN A 10.0.2.128 +4000.example. 5M IN A 10.0.2.129 +4000.example. 5M IN A 10.0.2.130 +4000.example. 5M IN A 10.0.2.131 +4000.example. 5M IN A 10.0.2.132 +4000.example. 5M IN A 10.0.2.133 +4000.example. 5M IN A 10.0.2.134 +4000.example. 5M IN A 10.0.2.135 +4000.example. 5M IN A 10.0.2.136 +4000.example. 5M IN A 10.0.2.137 +4000.example. 5M IN A 10.0.2.138 +4000.example. 5M IN A 10.0.2.139 +4000.example. 5M IN A 10.0.2.140 +4000.example. 5M IN A 10.0.2.141 +4000.example. 5M IN A 10.0.2.142 +4000.example. 5M IN A 10.0.2.143 +4000.example. 5M IN A 10.0.2.144 +4000.example. 5M IN A 10.0.2.145 +4000.example. 5M IN A 10.0.2.146 +4000.example. 5M IN A 10.0.2.147 +4000.example. 5M IN A 10.0.2.148 +4000.example. 5M IN A 10.0.2.149 +4000.example. 5M IN A 10.0.2.150 +4000.example. 5M IN A 10.0.2.151 +4000.example. 5M IN A 10.0.2.152 +4000.example. 5M IN A 10.0.2.153 +4000.example. 5M IN A 10.0.2.154 +4000.example. 5M IN A 10.0.2.155 +4000.example. 5M IN A 10.0.2.156 +4000.example. 5M IN A 10.0.2.157 +4000.example. 5M IN A 10.0.2.158 +4000.example. 5M IN A 10.0.2.159 +4000.example. 5M IN A 10.0.2.160 +4000.example. 5M IN A 10.0.2.161 +4000.example. 5M IN A 10.0.2.162 +4000.example. 5M IN A 10.0.2.163 +4000.example. 5M IN A 10.0.2.164 +4000.example. 5M IN A 10.0.2.165 +4000.example. 5M IN A 10.0.2.166 +4000.example. 5M IN A 10.0.2.167 +4000.example. 5M IN A 10.0.2.168 +4000.example. 5M IN A 10.0.2.169 +4000.example. 5M IN A 10.0.2.170 +4000.example. 5M IN A 10.0.2.171 +4000.example. 5M IN A 10.0.2.172 +4000.example. 5M IN A 10.0.2.173 +4000.example. 5M IN A 10.0.2.174 +4000.example. 5M IN A 10.0.2.175 +4000.example. 5M IN A 10.0.2.176 +4000.example. 5M IN A 10.0.2.177 +4000.example. 5M IN A 10.0.2.178 +4000.example. 5M IN A 10.0.2.179 +4000.example. 5M IN A 10.0.2.180 +4000.example. 5M IN A 10.0.2.181 +4000.example. 5M IN A 10.0.2.182 +4000.example. 5M IN A 10.0.2.183 +4000.example. 5M IN A 10.0.2.184 +4000.example. 5M IN A 10.0.2.185 +4000.example. 5M IN A 10.0.2.186 +4000.example. 5M IN A 10.0.2.187 +4000.example. 5M IN A 10.0.2.188 +4000.example. 5M IN A 10.0.2.189 +4000.example. 5M IN A 10.0.2.190 +4000.example. 5M IN A 10.0.2.191 +4000.example. 5M IN A 10.0.2.192 +4000.example. 5M IN A 10.0.2.193 +4000.example. 5M IN A 10.0.2.194 +4000.example. 5M IN A 10.0.2.195 +4000.example. 5M IN A 10.0.2.196 +4000.example. 5M IN A 10.0.2.197 +4000.example. 5M IN A 10.0.2.198 +4000.example. 5M IN A 10.0.2.199 +4000.example. 5M IN A 10.0.2.200 +4000.example. 5M IN A 10.0.2.201 +4000.example. 5M IN A 10.0.2.202 +4000.example. 5M IN A 10.0.2.203 +4000.example. 5M IN A 10.0.2.204 +4000.example. 5M IN A 10.0.2.205 +4000.example. 5M IN A 10.0.2.206 +4000.example. 5M IN A 10.0.2.207 +4000.example. 5M IN A 10.0.2.208 +4000.example. 5M IN A 10.0.2.209 +4000.example. 5M IN A 10.0.2.210 +4000.example. 5M IN A 10.0.2.211 +4000.example. 5M IN A 10.0.2.212 +4000.example. 5M IN A 10.0.2.213 +4000.example. 5M IN A 10.0.2.214 +4000.example. 5M IN A 10.0.2.215 +4000.example. 5M IN A 10.0.2.216 +4000.example. 5M IN A 10.0.2.217 +4000.example. 5M IN A 10.0.2.218 +4000.example. 5M IN A 10.0.2.219 +4000.example. 5M IN A 10.0.2.220 +4000.example. 5M IN A 10.0.2.221 +4000.example. 5M IN A 10.0.2.222 +4000.example. 5M IN A 10.0.2.223 +4000.example. 5M IN A 10.0.2.224 +4000.example. 5M IN A 10.0.2.225 +4000.example. 5M IN A 10.0.2.226 +4000.example. 5M IN A 10.0.2.227 +4000.example. 5M IN A 10.0.2.228 +4000.example. 5M IN A 10.0.2.229 +4000.example. 5M IN A 10.0.2.230 +4000.example. 5M IN A 10.0.2.231 +4000.example. 5M IN A 10.0.2.232 +4000.example. 5M IN A 10.0.2.233 +4000.example. 5M IN A 10.0.2.234 +4000.example. 5M IN A 10.0.2.235 +4000.example. 5M IN A 10.0.2.236 +4000.example. 5M IN A 10.0.2.237 +4000.example. 5M IN A 10.0.2.238 +4000.example. 5M IN A 10.0.2.239 +4000.example. 5M IN A 10.0.2.240 +4000.example. 5M IN A 10.0.2.241 +4000.example. 5M IN A 10.0.2.242 +4000.example. 5M IN A 10.0.2.243 +4000.example. 5M IN A 10.0.2.244 +4000.example. 5M IN A 10.0.2.245 +4000.example. 5M IN A 10.0.2.246 +4000.example. 5M IN A 10.0.2.247 +4000.example. 5M IN A 10.0.2.248 +4000.example. 5M IN A 10.0.2.249 +4000.example. 5M IN A 10.0.2.250 +4000.example. 5M IN A 10.0.2.251 +4000.example. 5M IN A 10.0.2.252 +4000.example. 5M IN A 10.0.2.253 +4000.example. 5M IN A 10.0.2.254 +4000.example. 5M IN A 10.0.2.255 +4000.example. 5M IN A 10.0.3.0 +4000.example. 5M IN A 10.0.3.1 +4000.example. 5M IN A 10.0.3.2 +4000.example. 5M IN A 10.0.3.3 +4000.example. 5M IN A 10.0.3.4 +4000.example. 5M IN A 10.0.3.5 +4000.example. 5M IN A 10.0.3.6 +4000.example. 5M IN A 10.0.3.7 +4000.example. 5M IN A 10.0.3.8 +4000.example. 5M IN A 10.0.3.9 +4000.example. 5M IN A 10.0.3.10 +4000.example. 5M IN A 10.0.3.11 +4000.example. 5M IN A 10.0.3.12 +4000.example. 5M IN A 10.0.3.13 +4000.example. 5M IN A 10.0.3.14 +4000.example. 5M IN A 10.0.3.15 +4000.example. 5M IN A 10.0.3.16 +4000.example. 5M IN A 10.0.3.17 +4000.example. 5M IN A 10.0.3.18 +4000.example. 5M IN A 10.0.3.19 +4000.example. 5M IN A 10.0.3.20 +4000.example. 5M IN A 10.0.3.21 +4000.example. 5M IN A 10.0.3.22 +4000.example. 5M IN A 10.0.3.23 +4000.example. 5M IN A 10.0.3.24 +4000.example. 5M IN A 10.0.3.25 +4000.example. 5M IN A 10.0.3.26 +4000.example. 5M IN A 10.0.3.27 +4000.example. 5M IN A 10.0.3.28 +4000.example. 5M IN A 10.0.3.29 +4000.example. 5M IN A 10.0.3.30 +4000.example. 5M IN A 10.0.3.31 +4000.example. 5M IN A 10.0.3.32 +4000.example. 5M IN A 10.0.3.33 +4000.example. 5M IN A 10.0.3.34 +4000.example. 5M IN A 10.0.3.35 +4000.example. 5M IN A 10.0.3.36 +4000.example. 5M IN A 10.0.3.37 +4000.example. 5M IN A 10.0.3.38 +4000.example. 5M IN A 10.0.3.39 +4000.example. 5M IN A 10.0.3.40 +4000.example. 5M IN A 10.0.3.41 +4000.example. 5M IN A 10.0.3.42 +4000.example. 5M IN A 10.0.3.43 +4000.example. 5M IN A 10.0.3.44 +4000.example. 5M IN A 10.0.3.45 +4000.example. 5M IN A 10.0.3.46 +4000.example. 5M IN A 10.0.3.47 +4000.example. 5M IN A 10.0.3.48 +4000.example. 5M IN A 10.0.3.49 +4000.example. 5M IN A 10.0.3.50 +4000.example. 5M IN A 10.0.3.51 +4000.example. 5M IN A 10.0.3.52 +4000.example. 5M IN A 10.0.3.53 +4000.example. 5M IN A 10.0.3.54 +4000.example. 5M IN A 10.0.3.55 +4000.example. 5M IN A 10.0.3.56 +4000.example. 5M IN A 10.0.3.57 +4000.example. 5M IN A 10.0.3.58 +4000.example. 5M IN A 10.0.3.59 +4000.example. 5M IN A 10.0.3.60 +4000.example. 5M IN A 10.0.3.61 +4000.example. 5M IN A 10.0.3.62 +4000.example. 5M IN A 10.0.3.63 +4000.example. 5M IN A 10.0.3.64 +4000.example. 5M IN A 10.0.3.65 +4000.example. 5M IN A 10.0.3.66 +4000.example. 5M IN A 10.0.3.67 +4000.example. 5M IN A 10.0.3.68 +4000.example. 5M IN A 10.0.3.69 +4000.example. 5M IN A 10.0.3.70 +4000.example. 5M IN A 10.0.3.71 +4000.example. 5M IN A 10.0.3.72 +4000.example. 5M IN A 10.0.3.73 +4000.example. 5M IN A 10.0.3.74 +4000.example. 5M IN A 10.0.3.75 +4000.example. 5M IN A 10.0.3.76 +4000.example. 5M IN A 10.0.3.77 +4000.example. 5M IN A 10.0.3.78 +4000.example. 5M IN A 10.0.3.79 +4000.example. 5M IN A 10.0.3.80 +4000.example. 5M IN A 10.0.3.81 +4000.example. 5M IN A 10.0.3.82 +4000.example. 5M IN A 10.0.3.83 +4000.example. 5M IN A 10.0.3.84 +4000.example. 5M IN A 10.0.3.85 +4000.example. 5M IN A 10.0.3.86 +4000.example. 5M IN A 10.0.3.87 +4000.example. 5M IN A 10.0.3.88 +4000.example. 5M IN A 10.0.3.89 +4000.example. 5M IN A 10.0.3.90 +4000.example. 5M IN A 10.0.3.91 +4000.example. 5M IN A 10.0.3.92 +4000.example. 5M IN A 10.0.3.93 +4000.example. 5M IN A 10.0.3.94 +4000.example. 5M IN A 10.0.3.95 +4000.example. 5M IN A 10.0.3.96 +4000.example. 5M IN A 10.0.3.97 +4000.example. 5M IN A 10.0.3.98 +4000.example. 5M IN A 10.0.3.99 +4000.example. 5M IN A 10.0.3.100 +4000.example. 5M IN A 10.0.3.101 +4000.example. 5M IN A 10.0.3.102 +4000.example. 5M IN A 10.0.3.103 +4000.example. 5M IN A 10.0.3.104 +4000.example. 5M IN A 10.0.3.105 +4000.example. 5M IN A 10.0.3.106 +4000.example. 5M IN A 10.0.3.107 +4000.example. 5M IN A 10.0.3.108 +4000.example. 5M IN A 10.0.3.109 +4000.example. 5M IN A 10.0.3.110 +4000.example. 5M IN A 10.0.3.111 +4000.example. 5M IN A 10.0.3.112 +4000.example. 5M IN A 10.0.3.113 +4000.example. 5M IN A 10.0.3.114 +4000.example. 5M IN A 10.0.3.115 +4000.example. 5M IN A 10.0.3.116 +4000.example. 5M IN A 10.0.3.117 +4000.example. 5M IN A 10.0.3.118 +4000.example. 5M IN A 10.0.3.119 +4000.example. 5M IN A 10.0.3.120 +4000.example. 5M IN A 10.0.3.121 +4000.example. 5M IN A 10.0.3.122 +4000.example. 5M IN A 10.0.3.123 +4000.example. 5M IN A 10.0.3.124 +4000.example. 5M IN A 10.0.3.125 +4000.example. 5M IN A 10.0.3.126 +4000.example. 5M IN A 10.0.3.127 +4000.example. 5M IN A 10.0.3.128 +4000.example. 5M IN A 10.0.3.129 +4000.example. 5M IN A 10.0.3.130 +4000.example. 5M IN A 10.0.3.131 +4000.example. 5M IN A 10.0.3.132 +4000.example. 5M IN A 10.0.3.133 +4000.example. 5M IN A 10.0.3.134 +4000.example. 5M IN A 10.0.3.135 +4000.example. 5M IN A 10.0.3.136 +4000.example. 5M IN A 10.0.3.137 +4000.example. 5M IN A 10.0.3.138 +4000.example. 5M IN A 10.0.3.139 +4000.example. 5M IN A 10.0.3.140 +4000.example. 5M IN A 10.0.3.141 +4000.example. 5M IN A 10.0.3.142 +4000.example. 5M IN A 10.0.3.143 +4000.example. 5M IN A 10.0.3.144 +4000.example. 5M IN A 10.0.3.145 +4000.example. 5M IN A 10.0.3.146 +4000.example. 5M IN A 10.0.3.147 +4000.example. 5M IN A 10.0.3.148 +4000.example. 5M IN A 10.0.3.149 +4000.example. 5M IN A 10.0.3.150 +4000.example. 5M IN A 10.0.3.151 +4000.example. 5M IN A 10.0.3.152 +4000.example. 5M IN A 10.0.3.153 +4000.example. 5M IN A 10.0.3.154 +4000.example. 5M IN A 10.0.3.155 +4000.example. 5M IN A 10.0.3.156 +4000.example. 5M IN A 10.0.3.157 +4000.example. 5M IN A 10.0.3.158 +4000.example. 5M IN A 10.0.3.159 +4000.example. 5M IN A 10.0.3.160 +4000.example. 5M IN A 10.0.3.161 +4000.example. 5M IN A 10.0.3.162 +4000.example. 5M IN A 10.0.3.163 +4000.example. 5M IN A 10.0.3.164 +4000.example. 5M IN A 10.0.3.165 +4000.example. 5M IN A 10.0.3.166 +4000.example. 5M IN A 10.0.3.167 +4000.example. 5M IN A 10.0.3.168 +4000.example. 5M IN A 10.0.3.169 +4000.example. 5M IN A 10.0.3.170 +4000.example. 5M IN A 10.0.3.171 +4000.example. 5M IN A 10.0.3.172 +4000.example. 5M IN A 10.0.3.173 +4000.example. 5M IN A 10.0.3.174 +4000.example. 5M IN A 10.0.3.175 +4000.example. 5M IN A 10.0.3.176 +4000.example. 5M IN A 10.0.3.177 +4000.example. 5M IN A 10.0.3.178 +4000.example. 5M IN A 10.0.3.179 +4000.example. 5M IN A 10.0.3.180 +4000.example. 5M IN A 10.0.3.181 +4000.example. 5M IN A 10.0.3.182 +4000.example. 5M IN A 10.0.3.183 +4000.example. 5M IN A 10.0.3.184 +4000.example. 5M IN A 10.0.3.185 +4000.example. 5M IN A 10.0.3.186 +4000.example. 5M IN A 10.0.3.187 +4000.example. 5M IN A 10.0.3.188 +4000.example. 5M IN A 10.0.3.189 +4000.example. 5M IN A 10.0.3.190 +4000.example. 5M IN A 10.0.3.191 +4000.example. 5M IN A 10.0.3.192 +4000.example. 5M IN A 10.0.3.193 +4000.example. 5M IN A 10.0.3.194 +4000.example. 5M IN A 10.0.3.195 +4000.example. 5M IN A 10.0.3.196 +4000.example. 5M IN A 10.0.3.197 +4000.example. 5M IN A 10.0.3.198 +4000.example. 5M IN A 10.0.3.199 +4000.example. 5M IN A 10.0.3.200 +4000.example. 5M IN A 10.0.3.201 +4000.example. 5M IN A 10.0.3.202 +4000.example. 5M IN A 10.0.3.203 +4000.example. 5M IN A 10.0.3.204 +4000.example. 5M IN A 10.0.3.205 +4000.example. 5M IN A 10.0.3.206 +4000.example. 5M IN A 10.0.3.207 +4000.example. 5M IN A 10.0.3.208 +4000.example. 5M IN A 10.0.3.209 +4000.example. 5M IN A 10.0.3.210 +4000.example. 5M IN A 10.0.3.211 +4000.example. 5M IN A 10.0.3.212 +4000.example. 5M IN A 10.0.3.213 +4000.example. 5M IN A 10.0.3.214 +4000.example. 5M IN A 10.0.3.215 +4000.example. 5M IN A 10.0.3.216 +4000.example. 5M IN A 10.0.3.217 +4000.example. 5M IN A 10.0.3.218 +4000.example. 5M IN A 10.0.3.219 +4000.example. 5M IN A 10.0.3.220 +4000.example. 5M IN A 10.0.3.221 +4000.example. 5M IN A 10.0.3.222 +4000.example. 5M IN A 10.0.3.223 +4000.example. 5M IN A 10.0.3.224 +4000.example. 5M IN A 10.0.3.225 +4000.example. 5M IN A 10.0.3.226 +4000.example. 5M IN A 10.0.3.227 +4000.example. 5M IN A 10.0.3.228 +4000.example. 5M IN A 10.0.3.229 +4000.example. 5M IN A 10.0.3.230 +4000.example. 5M IN A 10.0.3.231 +4000.example. 5M IN A 10.0.3.232 +4000.example. 5M IN A 10.0.3.233 +4000.example. 5M IN A 10.0.3.234 +4000.example. 5M IN A 10.0.3.235 +4000.example. 5M IN A 10.0.3.236 +4000.example. 5M IN A 10.0.3.237 +4000.example. 5M IN A 10.0.3.238 +4000.example. 5M IN A 10.0.3.239 +4000.example. 5M IN A 10.0.3.240 +4000.example. 5M IN A 10.0.3.241 +4000.example. 5M IN A 10.0.3.242 +4000.example. 5M IN A 10.0.3.243 +4000.example. 5M IN A 10.0.3.244 +4000.example. 5M IN A 10.0.3.245 +4000.example. 5M IN A 10.0.3.246 +4000.example. 5M IN A 10.0.3.247 +4000.example. 5M IN A 10.0.3.248 +4000.example. 5M IN A 10.0.3.249 +4000.example. 5M IN A 10.0.3.250 +4000.example. 5M IN A 10.0.3.251 +4000.example. 5M IN A 10.0.3.252 +4000.example. 5M IN A 10.0.3.253 +4000.example. 5M IN A 10.0.3.254 +4000.example. 5M IN A 10.0.3.255 +4000.example. 5M IN A 10.0.4.0 +4000.example. 5M IN A 10.0.4.1 +4000.example. 5M IN A 10.0.4.2 +4000.example. 5M IN A 10.0.4.3 +4000.example. 5M IN A 10.0.4.4 +4000.example. 5M IN A 10.0.4.5 +4000.example. 5M IN A 10.0.4.6 +4000.example. 5M IN A 10.0.4.7 +4000.example. 5M IN A 10.0.4.8 +4000.example. 5M IN A 10.0.4.9 +4000.example. 5M IN A 10.0.4.10 +4000.example. 5M IN A 10.0.4.11 +4000.example. 5M IN A 10.0.4.12 +4000.example. 5M IN A 10.0.4.13 +4000.example. 5M IN A 10.0.4.14 +4000.example. 5M IN A 10.0.4.15 +4000.example. 5M IN A 10.0.4.16 +4000.example. 5M IN A 10.0.4.17 +4000.example. 5M IN A 10.0.4.18 +4000.example. 5M IN A 10.0.4.19 +4000.example. 5M IN A 10.0.4.20 +4000.example. 5M IN A 10.0.4.21 +4000.example. 5M IN A 10.0.4.22 +4000.example. 5M IN A 10.0.4.23 +4000.example. 5M IN A 10.0.4.24 +4000.example. 5M IN A 10.0.4.25 +4000.example. 5M IN A 10.0.4.26 +4000.example. 5M IN A 10.0.4.27 +4000.example. 5M IN A 10.0.4.28 +4000.example. 5M IN A 10.0.4.29 +4000.example. 5M IN A 10.0.4.30 +4000.example. 5M IN A 10.0.4.31 +4000.example. 5M IN A 10.0.4.32 +4000.example. 5M IN A 10.0.4.33 +4000.example. 5M IN A 10.0.4.34 +4000.example. 5M IN A 10.0.4.35 +4000.example. 5M IN A 10.0.4.36 +4000.example. 5M IN A 10.0.4.37 +4000.example. 5M IN A 10.0.4.38 +4000.example. 5M IN A 10.0.4.39 +4000.example. 5M IN A 10.0.4.40 +4000.example. 5M IN A 10.0.4.41 +4000.example. 5M IN A 10.0.4.42 +4000.example. 5M IN A 10.0.4.43 +4000.example. 5M IN A 10.0.4.44 +4000.example. 5M IN A 10.0.4.45 +4000.example. 5M IN A 10.0.4.46 +4000.example. 5M IN A 10.0.4.47 +4000.example. 5M IN A 10.0.4.48 +4000.example. 5M IN A 10.0.4.49 +4000.example. 5M IN A 10.0.4.50 +4000.example. 5M IN A 10.0.4.51 +4000.example. 5M IN A 10.0.4.52 +4000.example. 5M IN A 10.0.4.53 +4000.example. 5M IN A 10.0.4.54 +4000.example. 5M IN A 10.0.4.55 +4000.example. 5M IN A 10.0.4.56 +4000.example. 5M IN A 10.0.4.57 +4000.example. 5M IN A 10.0.4.58 +4000.example. 5M IN A 10.0.4.59 +4000.example. 5M IN A 10.0.4.60 +4000.example. 5M IN A 10.0.4.61 +4000.example. 5M IN A 10.0.4.62 +4000.example. 5M IN A 10.0.4.63 +4000.example. 5M IN A 10.0.4.64 +4000.example. 5M IN A 10.0.4.65 +4000.example. 5M IN A 10.0.4.66 +4000.example. 5M IN A 10.0.4.67 +4000.example. 5M IN A 10.0.4.68 +4000.example. 5M IN A 10.0.4.69 +4000.example. 5M IN A 10.0.4.70 +4000.example. 5M IN A 10.0.4.71 +4000.example. 5M IN A 10.0.4.72 +4000.example. 5M IN A 10.0.4.73 +4000.example. 5M IN A 10.0.4.74 +4000.example. 5M IN A 10.0.4.75 +4000.example. 5M IN A 10.0.4.76 +4000.example. 5M IN A 10.0.4.77 +4000.example. 5M IN A 10.0.4.78 +4000.example. 5M IN A 10.0.4.79 +4000.example. 5M IN A 10.0.4.80 +4000.example. 5M IN A 10.0.4.81 +4000.example. 5M IN A 10.0.4.82 +4000.example. 5M IN A 10.0.4.83 +4000.example. 5M IN A 10.0.4.84 +4000.example. 5M IN A 10.0.4.85 +4000.example. 5M IN A 10.0.4.86 +4000.example. 5M IN A 10.0.4.87 +4000.example. 5M IN A 10.0.4.88 +4000.example. 5M IN A 10.0.4.89 +4000.example. 5M IN A 10.0.4.90 +4000.example. 5M IN A 10.0.4.91 +4000.example. 5M IN A 10.0.4.92 +4000.example. 5M IN A 10.0.4.93 +4000.example. 5M IN A 10.0.4.94 +4000.example. 5M IN A 10.0.4.95 +4000.example. 5M IN A 10.0.4.96 +4000.example. 5M IN A 10.0.4.97 +4000.example. 5M IN A 10.0.4.98 +4000.example. 5M IN A 10.0.4.99 +4000.example. 5M IN A 10.0.4.100 +4000.example. 5M IN A 10.0.4.101 +4000.example. 5M IN A 10.0.4.102 +4000.example. 5M IN A 10.0.4.103 +4000.example. 5M IN A 10.0.4.104 +4000.example. 5M IN A 10.0.4.105 +4000.example. 5M IN A 10.0.4.106 +4000.example. 5M IN A 10.0.4.107 +4000.example. 5M IN A 10.0.4.108 +4000.example. 5M IN A 10.0.4.109 +4000.example. 5M IN A 10.0.4.110 +4000.example. 5M IN A 10.0.4.111 +4000.example. 5M IN A 10.0.4.112 +4000.example. 5M IN A 10.0.4.113 +4000.example. 5M IN A 10.0.4.114 +4000.example. 5M IN A 10.0.4.115 +4000.example. 5M IN A 10.0.4.116 +4000.example. 5M IN A 10.0.4.117 +4000.example. 5M IN A 10.0.4.118 +4000.example. 5M IN A 10.0.4.119 +4000.example. 5M IN A 10.0.4.120 +4000.example. 5M IN A 10.0.4.121 +4000.example. 5M IN A 10.0.4.122 +4000.example. 5M IN A 10.0.4.123 +4000.example. 5M IN A 10.0.4.124 +4000.example. 5M IN A 10.0.4.125 +4000.example. 5M IN A 10.0.4.126 +4000.example. 5M IN A 10.0.4.127 +4000.example. 5M IN A 10.0.4.128 +4000.example. 5M IN A 10.0.4.129 +4000.example. 5M IN A 10.0.4.130 +4000.example. 5M IN A 10.0.4.131 +4000.example. 5M IN A 10.0.4.132 +4000.example. 5M IN A 10.0.4.133 +4000.example. 5M IN A 10.0.4.134 +4000.example. 5M IN A 10.0.4.135 +4000.example. 5M IN A 10.0.4.136 +4000.example. 5M IN A 10.0.4.137 +4000.example. 5M IN A 10.0.4.138 +4000.example. 5M IN A 10.0.4.139 +4000.example. 5M IN A 10.0.4.140 +4000.example. 5M IN A 10.0.4.141 +4000.example. 5M IN A 10.0.4.142 +4000.example. 5M IN A 10.0.4.143 +4000.example. 5M IN A 10.0.4.144 +4000.example. 5M IN A 10.0.4.145 +4000.example. 5M IN A 10.0.4.146 +4000.example. 5M IN A 10.0.4.147 +4000.example. 5M IN A 10.0.4.148 +4000.example. 5M IN A 10.0.4.149 +4000.example. 5M IN A 10.0.4.150 +4000.example. 5M IN A 10.0.4.151 +4000.example. 5M IN A 10.0.4.152 +4000.example. 5M IN A 10.0.4.153 +4000.example. 5M IN A 10.0.4.154 +4000.example. 5M IN A 10.0.4.155 +4000.example. 5M IN A 10.0.4.156 +4000.example. 5M IN A 10.0.4.157 +4000.example. 5M IN A 10.0.4.158 +4000.example. 5M IN A 10.0.4.159 +4000.example. 5M IN A 10.0.4.160 +4000.example. 5M IN A 10.0.4.161 +4000.example. 5M IN A 10.0.4.162 +4000.example. 5M IN A 10.0.4.163 +4000.example. 5M IN A 10.0.4.164 +4000.example. 5M IN A 10.0.4.165 +4000.example. 5M IN A 10.0.4.166 +4000.example. 5M IN A 10.0.4.167 +4000.example. 5M IN A 10.0.4.168 +4000.example. 5M IN A 10.0.4.169 +4000.example. 5M IN A 10.0.4.170 +4000.example. 5M IN A 10.0.4.171 +4000.example. 5M IN A 10.0.4.172 +4000.example. 5M IN A 10.0.4.173 +4000.example. 5M IN A 10.0.4.174 +4000.example. 5M IN A 10.0.4.175 +4000.example. 5M IN A 10.0.4.176 +4000.example. 5M IN A 10.0.4.177 +4000.example. 5M IN A 10.0.4.178 +4000.example. 5M IN A 10.0.4.179 +4000.example. 5M IN A 10.0.4.180 +4000.example. 5M IN A 10.0.4.181 +4000.example. 5M IN A 10.0.4.182 +4000.example. 5M IN A 10.0.4.183 +4000.example. 5M IN A 10.0.4.184 +4000.example. 5M IN A 10.0.4.185 +4000.example. 5M IN A 10.0.4.186 +4000.example. 5M IN A 10.0.4.187 +4000.example. 5M IN A 10.0.4.188 +4000.example. 5M IN A 10.0.4.189 +4000.example. 5M IN A 10.0.4.190 +4000.example. 5M IN A 10.0.4.191 +4000.example. 5M IN A 10.0.4.192 +4000.example. 5M IN A 10.0.4.193 +4000.example. 5M IN A 10.0.4.194 +4000.example. 5M IN A 10.0.4.195 +4000.example. 5M IN A 10.0.4.196 +4000.example. 5M IN A 10.0.4.197 +4000.example. 5M IN A 10.0.4.198 +4000.example. 5M IN A 10.0.4.199 +4000.example. 5M IN A 10.0.4.200 +4000.example. 5M IN A 10.0.4.201 +4000.example. 5M IN A 10.0.4.202 +4000.example. 5M IN A 10.0.4.203 +4000.example. 5M IN A 10.0.4.204 +4000.example. 5M IN A 10.0.4.205 +4000.example. 5M IN A 10.0.4.206 +4000.example. 5M IN A 10.0.4.207 +4000.example. 5M IN A 10.0.4.208 +4000.example. 5M IN A 10.0.4.209 +4000.example. 5M IN A 10.0.4.210 +4000.example. 5M IN A 10.0.4.211 +4000.example. 5M IN A 10.0.4.212 +4000.example. 5M IN A 10.0.4.213 +4000.example. 5M IN A 10.0.4.214 +4000.example. 5M IN A 10.0.4.215 +4000.example. 5M IN A 10.0.4.216 +4000.example. 5M IN A 10.0.4.217 +4000.example. 5M IN A 10.0.4.218 +4000.example. 5M IN A 10.0.4.219 +4000.example. 5M IN A 10.0.4.220 +4000.example. 5M IN A 10.0.4.221 +4000.example. 5M IN A 10.0.4.222 +4000.example. 5M IN A 10.0.4.223 +4000.example. 5M IN A 10.0.4.224 +4000.example. 5M IN A 10.0.4.225 +4000.example. 5M IN A 10.0.4.226 +4000.example. 5M IN A 10.0.4.227 +4000.example. 5M IN A 10.0.4.228 +4000.example. 5M IN A 10.0.4.229 +4000.example. 5M IN A 10.0.4.230 +4000.example. 5M IN A 10.0.4.231 +4000.example. 5M IN A 10.0.4.232 +4000.example. 5M IN A 10.0.4.233 +4000.example. 5M IN A 10.0.4.234 +4000.example. 5M IN A 10.0.4.235 +4000.example. 5M IN A 10.0.4.236 +4000.example. 5M IN A 10.0.4.237 +4000.example. 5M IN A 10.0.4.238 +4000.example. 5M IN A 10.0.4.239 +4000.example. 5M IN A 10.0.4.240 +4000.example. 5M IN A 10.0.4.241 +4000.example. 5M IN A 10.0.4.242 +4000.example. 5M IN A 10.0.4.243 +4000.example. 5M IN A 10.0.4.244 +4000.example. 5M IN A 10.0.4.245 +4000.example. 5M IN A 10.0.4.246 +4000.example. 5M IN A 10.0.4.247 +4000.example. 5M IN A 10.0.4.248 +4000.example. 5M IN A 10.0.4.249 +4000.example. 5M IN A 10.0.4.250 +4000.example. 5M IN A 10.0.4.251 +4000.example. 5M IN A 10.0.4.252 +4000.example. 5M IN A 10.0.4.253 +4000.example. 5M IN A 10.0.4.254 +4000.example. 5M IN A 10.0.4.255 +4000.example. 5M IN A 10.0.5.0 +4000.example. 5M IN A 10.0.5.1 +4000.example. 5M IN A 10.0.5.2 +4000.example. 5M IN A 10.0.5.3 +4000.example. 5M IN A 10.0.5.4 +4000.example. 5M IN A 10.0.5.5 +4000.example. 5M IN A 10.0.5.6 +4000.example. 5M IN A 10.0.5.7 +4000.example. 5M IN A 10.0.5.8 +4000.example. 5M IN A 10.0.5.9 +4000.example. 5M IN A 10.0.5.10 +4000.example. 5M IN A 10.0.5.11 +4000.example. 5M IN A 10.0.5.12 +4000.example. 5M IN A 10.0.5.13 +4000.example. 5M IN A 10.0.5.14 +4000.example. 5M IN A 10.0.5.15 +4000.example. 5M IN A 10.0.5.16 +4000.example. 5M IN A 10.0.5.17 +4000.example. 5M IN A 10.0.5.18 +4000.example. 5M IN A 10.0.5.19 +4000.example. 5M IN A 10.0.5.20 +4000.example. 5M IN A 10.0.5.21 +4000.example. 5M IN A 10.0.5.22 +4000.example. 5M IN A 10.0.5.23 +4000.example. 5M IN A 10.0.5.24 +4000.example. 5M IN A 10.0.5.25 +4000.example. 5M IN A 10.0.5.26 +4000.example. 5M IN A 10.0.5.27 +4000.example. 5M IN A 10.0.5.28 +4000.example. 5M IN A 10.0.5.29 +4000.example. 5M IN A 10.0.5.30 +4000.example. 5M IN A 10.0.5.31 +4000.example. 5M IN A 10.0.5.32 +4000.example. 5M IN A 10.0.5.33 +4000.example. 5M IN A 10.0.5.34 +4000.example. 5M IN A 10.0.5.35 +4000.example. 5M IN A 10.0.5.36 +4000.example. 5M IN A 10.0.5.37 +4000.example. 5M IN A 10.0.5.38 +4000.example. 5M IN A 10.0.5.39 +4000.example. 5M IN A 10.0.5.40 +4000.example. 5M IN A 10.0.5.41 +4000.example. 5M IN A 10.0.5.42 +4000.example. 5M IN A 10.0.5.43 +4000.example. 5M IN A 10.0.5.44 +4000.example. 5M IN A 10.0.5.45 +4000.example. 5M IN A 10.0.5.46 +4000.example. 5M IN A 10.0.5.47 +4000.example. 5M IN A 10.0.5.48 +4000.example. 5M IN A 10.0.5.49 +4000.example. 5M IN A 10.0.5.50 +4000.example. 5M IN A 10.0.5.51 +4000.example. 5M IN A 10.0.5.52 +4000.example. 5M IN A 10.0.5.53 +4000.example. 5M IN A 10.0.5.54 +4000.example. 5M IN A 10.0.5.55 +4000.example. 5M IN A 10.0.5.56 +4000.example. 5M IN A 10.0.5.57 +4000.example. 5M IN A 10.0.5.58 +4000.example. 5M IN A 10.0.5.59 +4000.example. 5M IN A 10.0.5.60 +4000.example. 5M IN A 10.0.5.61 +4000.example. 5M IN A 10.0.5.62 +4000.example. 5M IN A 10.0.5.63 +4000.example. 5M IN A 10.0.5.64 +4000.example. 5M IN A 10.0.5.65 +4000.example. 5M IN A 10.0.5.66 +4000.example. 5M IN A 10.0.5.67 +4000.example. 5M IN A 10.0.5.68 +4000.example. 5M IN A 10.0.5.69 +4000.example. 5M IN A 10.0.5.70 +4000.example. 5M IN A 10.0.5.71 +4000.example. 5M IN A 10.0.5.72 +4000.example. 5M IN A 10.0.5.73 +4000.example. 5M IN A 10.0.5.74 +4000.example. 5M IN A 10.0.5.75 +4000.example. 5M IN A 10.0.5.76 +4000.example. 5M IN A 10.0.5.77 +4000.example. 5M IN A 10.0.5.78 +4000.example. 5M IN A 10.0.5.79 +4000.example. 5M IN A 10.0.5.80 +4000.example. 5M IN A 10.0.5.81 +4000.example. 5M IN A 10.0.5.82 +4000.example. 5M IN A 10.0.5.83 +4000.example. 5M IN A 10.0.5.84 +4000.example. 5M IN A 10.0.5.85 +4000.example. 5M IN A 10.0.5.86 +4000.example. 5M IN A 10.0.5.87 +4000.example. 5M IN A 10.0.5.88 +4000.example. 5M IN A 10.0.5.89 +4000.example. 5M IN A 10.0.5.90 +4000.example. 5M IN A 10.0.5.91 +4000.example. 5M IN A 10.0.5.92 +4000.example. 5M IN A 10.0.5.93 +4000.example. 5M IN A 10.0.5.94 +4000.example. 5M IN A 10.0.5.95 +4000.example. 5M IN A 10.0.5.96 +4000.example. 5M IN A 10.0.5.97 +4000.example. 5M IN A 10.0.5.98 +4000.example. 5M IN A 10.0.5.99 +4000.example. 5M IN A 10.0.5.100 +4000.example. 5M IN A 10.0.5.101 +4000.example. 5M IN A 10.0.5.102 +4000.example. 5M IN A 10.0.5.103 +4000.example. 5M IN A 10.0.5.104 +4000.example. 5M IN A 10.0.5.105 +4000.example. 5M IN A 10.0.5.106 +4000.example. 5M IN A 10.0.5.107 +4000.example. 5M IN A 10.0.5.108 +4000.example. 5M IN A 10.0.5.109 +4000.example. 5M IN A 10.0.5.110 +4000.example. 5M IN A 10.0.5.111 +4000.example. 5M IN A 10.0.5.112 +4000.example. 5M IN A 10.0.5.113 +4000.example. 5M IN A 10.0.5.114 +4000.example. 5M IN A 10.0.5.115 +4000.example. 5M IN A 10.0.5.116 +4000.example. 5M IN A 10.0.5.117 +4000.example. 5M IN A 10.0.5.118 +4000.example. 5M IN A 10.0.5.119 +4000.example. 5M IN A 10.0.5.120 +4000.example. 5M IN A 10.0.5.121 +4000.example. 5M IN A 10.0.5.122 +4000.example. 5M IN A 10.0.5.123 +4000.example. 5M IN A 10.0.5.124 +4000.example. 5M IN A 10.0.5.125 +4000.example. 5M IN A 10.0.5.126 +4000.example. 5M IN A 10.0.5.127 +4000.example. 5M IN A 10.0.5.128 +4000.example. 5M IN A 10.0.5.129 +4000.example. 5M IN A 10.0.5.130 +4000.example. 5M IN A 10.0.5.131 +4000.example. 5M IN A 10.0.5.132 +4000.example. 5M IN A 10.0.5.133 +4000.example. 5M IN A 10.0.5.134 +4000.example. 5M IN A 10.0.5.135 +4000.example. 5M IN A 10.0.5.136 +4000.example. 5M IN A 10.0.5.137 +4000.example. 5M IN A 10.0.5.138 +4000.example. 5M IN A 10.0.5.139 +4000.example. 5M IN A 10.0.5.140 +4000.example. 5M IN A 10.0.5.141 +4000.example. 5M IN A 10.0.5.142 +4000.example. 5M IN A 10.0.5.143 +4000.example. 5M IN A 10.0.5.144 +4000.example. 5M IN A 10.0.5.145 +4000.example. 5M IN A 10.0.5.146 +4000.example. 5M IN A 10.0.5.147 +4000.example. 5M IN A 10.0.5.148 +4000.example. 5M IN A 10.0.5.149 +4000.example. 5M IN A 10.0.5.150 +4000.example. 5M IN A 10.0.5.151 +4000.example. 5M IN A 10.0.5.152 +4000.example. 5M IN A 10.0.5.153 +4000.example. 5M IN A 10.0.5.154 +4000.example. 5M IN A 10.0.5.155 +4000.example. 5M IN A 10.0.5.156 +4000.example. 5M IN A 10.0.5.157 +4000.example. 5M IN A 10.0.5.158 +4000.example. 5M IN A 10.0.5.159 +4000.example. 5M IN A 10.0.5.160 +4000.example. 5M IN A 10.0.5.161 +4000.example. 5M IN A 10.0.5.162 +4000.example. 5M IN A 10.0.5.163 +4000.example. 5M IN A 10.0.5.164 +4000.example. 5M IN A 10.0.5.165 +4000.example. 5M IN A 10.0.5.166 +4000.example. 5M IN A 10.0.5.167 +4000.example. 5M IN A 10.0.5.168 +4000.example. 5M IN A 10.0.5.169 +4000.example. 5M IN A 10.0.5.170 +4000.example. 5M IN A 10.0.5.171 +4000.example. 5M IN A 10.0.5.172 +4000.example. 5M IN A 10.0.5.173 +4000.example. 5M IN A 10.0.5.174 +4000.example. 5M IN A 10.0.5.175 +4000.example. 5M IN A 10.0.5.176 +4000.example. 5M IN A 10.0.5.177 +4000.example. 5M IN A 10.0.5.178 +4000.example. 5M IN A 10.0.5.179 +4000.example. 5M IN A 10.0.5.180 +4000.example. 5M IN A 10.0.5.181 +4000.example. 5M IN A 10.0.5.182 +4000.example. 5M IN A 10.0.5.183 +4000.example. 5M IN A 10.0.5.184 +4000.example. 5M IN A 10.0.5.185 +4000.example. 5M IN A 10.0.5.186 +4000.example. 5M IN A 10.0.5.187 +4000.example. 5M IN A 10.0.5.188 +4000.example. 5M IN A 10.0.5.189 +4000.example. 5M IN A 10.0.5.190 +4000.example. 5M IN A 10.0.5.191 +4000.example. 5M IN A 10.0.5.192 +4000.example. 5M IN A 10.0.5.193 +4000.example. 5M IN A 10.0.5.194 +4000.example. 5M IN A 10.0.5.195 +4000.example. 5M IN A 10.0.5.196 +4000.example. 5M IN A 10.0.5.197 +4000.example. 5M IN A 10.0.5.198 +4000.example. 5M IN A 10.0.5.199 +4000.example. 5M IN A 10.0.5.200 +4000.example. 5M IN A 10.0.5.201 +4000.example. 5M IN A 10.0.5.202 +4000.example. 5M IN A 10.0.5.203 +4000.example. 5M IN A 10.0.5.204 +4000.example. 5M IN A 10.0.5.205 +4000.example. 5M IN A 10.0.5.206 +4000.example. 5M IN A 10.0.5.207 +4000.example. 5M IN A 10.0.5.208 +4000.example. 5M IN A 10.0.5.209 +4000.example. 5M IN A 10.0.5.210 +4000.example. 5M IN A 10.0.5.211 +4000.example. 5M IN A 10.0.5.212 +4000.example. 5M IN A 10.0.5.213 +4000.example. 5M IN A 10.0.5.214 +4000.example. 5M IN A 10.0.5.215 +4000.example. 5M IN A 10.0.5.216 +4000.example. 5M IN A 10.0.5.217 +4000.example. 5M IN A 10.0.5.218 +4000.example. 5M IN A 10.0.5.219 +4000.example. 5M IN A 10.0.5.220 +4000.example. 5M IN A 10.0.5.221 +4000.example. 5M IN A 10.0.5.222 +4000.example. 5M IN A 10.0.5.223 +4000.example. 5M IN A 10.0.5.224 +4000.example. 5M IN A 10.0.5.225 +4000.example. 5M IN A 10.0.5.226 +4000.example. 5M IN A 10.0.5.227 +4000.example. 5M IN A 10.0.5.228 +4000.example. 5M IN A 10.0.5.229 +4000.example. 5M IN A 10.0.5.230 +4000.example. 5M IN A 10.0.5.231 +4000.example. 5M IN A 10.0.5.232 +4000.example. 5M IN A 10.0.5.233 +4000.example. 5M IN A 10.0.5.234 +4000.example. 5M IN A 10.0.5.235 +4000.example. 5M IN A 10.0.5.236 +4000.example. 5M IN A 10.0.5.237 +4000.example. 5M IN A 10.0.5.238 +4000.example. 5M IN A 10.0.5.239 +4000.example. 5M IN A 10.0.5.240 +4000.example. 5M IN A 10.0.5.241 +4000.example. 5M IN A 10.0.5.242 +4000.example. 5M IN A 10.0.5.243 +4000.example. 5M IN A 10.0.5.244 +4000.example. 5M IN A 10.0.5.245 +4000.example. 5M IN A 10.0.5.246 +4000.example. 5M IN A 10.0.5.247 +4000.example. 5M IN A 10.0.5.248 +4000.example. 5M IN A 10.0.5.249 +4000.example. 5M IN A 10.0.5.250 +4000.example. 5M IN A 10.0.5.251 +4000.example. 5M IN A 10.0.5.252 +4000.example. 5M IN A 10.0.5.253 +4000.example. 5M IN A 10.0.5.254 +4000.example. 5M IN A 10.0.5.255 +4000.example. 5M IN A 10.0.6.0 +4000.example. 5M IN A 10.0.6.1 +4000.example. 5M IN A 10.0.6.2 +4000.example. 5M IN A 10.0.6.3 +4000.example. 5M IN A 10.0.6.4 +4000.example. 5M IN A 10.0.6.5 +4000.example. 5M IN A 10.0.6.6 +4000.example. 5M IN A 10.0.6.7 +4000.example. 5M IN A 10.0.6.8 +4000.example. 5M IN A 10.0.6.9 +4000.example. 5M IN A 10.0.6.10 +4000.example. 5M IN A 10.0.6.11 +4000.example. 5M IN A 10.0.6.12 +4000.example. 5M IN A 10.0.6.13 +4000.example. 5M IN A 10.0.6.14 +4000.example. 5M IN A 10.0.6.15 +4000.example. 5M IN A 10.0.6.16 +4000.example. 5M IN A 10.0.6.17 +4000.example. 5M IN A 10.0.6.18 +4000.example. 5M IN A 10.0.6.19 +4000.example. 5M IN A 10.0.6.20 +4000.example. 5M IN A 10.0.6.21 +4000.example. 5M IN A 10.0.6.22 +4000.example. 5M IN A 10.0.6.23 +4000.example. 5M IN A 10.0.6.24 +4000.example. 5M IN A 10.0.6.25 +4000.example. 5M IN A 10.0.6.26 +4000.example. 5M IN A 10.0.6.27 +4000.example. 5M IN A 10.0.6.28 +4000.example. 5M IN A 10.0.6.29 +4000.example. 5M IN A 10.0.6.30 +4000.example. 5M IN A 10.0.6.31 +4000.example. 5M IN A 10.0.6.32 +4000.example. 5M IN A 10.0.6.33 +4000.example. 5M IN A 10.0.6.34 +4000.example. 5M IN A 10.0.6.35 +4000.example. 5M IN A 10.0.6.36 +4000.example. 5M IN A 10.0.6.37 +4000.example. 5M IN A 10.0.6.38 +4000.example. 5M IN A 10.0.6.39 +4000.example. 5M IN A 10.0.6.40 +4000.example. 5M IN A 10.0.6.41 +4000.example. 5M IN A 10.0.6.42 +4000.example. 5M IN A 10.0.6.43 +4000.example. 5M IN A 10.0.6.44 +4000.example. 5M IN A 10.0.6.45 +4000.example. 5M IN A 10.0.6.46 +4000.example. 5M IN A 10.0.6.47 +4000.example. 5M IN A 10.0.6.48 +4000.example. 5M IN A 10.0.6.49 +4000.example. 5M IN A 10.0.6.50 +4000.example. 5M IN A 10.0.6.51 +4000.example. 5M IN A 10.0.6.52 +4000.example. 5M IN A 10.0.6.53 +4000.example. 5M IN A 10.0.6.54 +4000.example. 5M IN A 10.0.6.55 +4000.example. 5M IN A 10.0.6.56 +4000.example. 5M IN A 10.0.6.57 +4000.example. 5M IN A 10.0.6.58 +4000.example. 5M IN A 10.0.6.59 +4000.example. 5M IN A 10.0.6.60 +4000.example. 5M IN A 10.0.6.61 +4000.example. 5M IN A 10.0.6.62 +4000.example. 5M IN A 10.0.6.63 +4000.example. 5M IN A 10.0.6.64 +4000.example. 5M IN A 10.0.6.65 +4000.example. 5M IN A 10.0.6.66 +4000.example. 5M IN A 10.0.6.67 +4000.example. 5M IN A 10.0.6.68 +4000.example. 5M IN A 10.0.6.69 +4000.example. 5M IN A 10.0.6.70 +4000.example. 5M IN A 10.0.6.71 +4000.example. 5M IN A 10.0.6.72 +4000.example. 5M IN A 10.0.6.73 +4000.example. 5M IN A 10.0.6.74 +4000.example. 5M IN A 10.0.6.75 +4000.example. 5M IN A 10.0.6.76 +4000.example. 5M IN A 10.0.6.77 +4000.example. 5M IN A 10.0.6.78 +4000.example. 5M IN A 10.0.6.79 +4000.example. 5M IN A 10.0.6.80 +4000.example. 5M IN A 10.0.6.81 +4000.example. 5M IN A 10.0.6.82 +4000.example. 5M IN A 10.0.6.83 +4000.example. 5M IN A 10.0.6.84 +4000.example. 5M IN A 10.0.6.85 +4000.example. 5M IN A 10.0.6.86 +4000.example. 5M IN A 10.0.6.87 +4000.example. 5M IN A 10.0.6.88 +4000.example. 5M IN A 10.0.6.89 +4000.example. 5M IN A 10.0.6.90 +4000.example. 5M IN A 10.0.6.91 +4000.example. 5M IN A 10.0.6.92 +4000.example. 5M IN A 10.0.6.93 +4000.example. 5M IN A 10.0.6.94 +4000.example. 5M IN A 10.0.6.95 +4000.example. 5M IN A 10.0.6.96 +4000.example. 5M IN A 10.0.6.97 +4000.example. 5M IN A 10.0.6.98 +4000.example. 5M IN A 10.0.6.99 +4000.example. 5M IN A 10.0.6.100 +4000.example. 5M IN A 10.0.6.101 +4000.example. 5M IN A 10.0.6.102 +4000.example. 5M IN A 10.0.6.103 +4000.example. 5M IN A 10.0.6.104 +4000.example. 5M IN A 10.0.6.105 +4000.example. 5M IN A 10.0.6.106 +4000.example. 5M IN A 10.0.6.107 +4000.example. 5M IN A 10.0.6.108 +4000.example. 5M IN A 10.0.6.109 +4000.example. 5M IN A 10.0.6.110 +4000.example. 5M IN A 10.0.6.111 +4000.example. 5M IN A 10.0.6.112 +4000.example. 5M IN A 10.0.6.113 +4000.example. 5M IN A 10.0.6.114 +4000.example. 5M IN A 10.0.6.115 +4000.example. 5M IN A 10.0.6.116 +4000.example. 5M IN A 10.0.6.117 +4000.example. 5M IN A 10.0.6.118 +4000.example. 5M IN A 10.0.6.119 +4000.example. 5M IN A 10.0.6.120 +4000.example. 5M IN A 10.0.6.121 +4000.example. 5M IN A 10.0.6.122 +4000.example. 5M IN A 10.0.6.123 +4000.example. 5M IN A 10.0.6.124 +4000.example. 5M IN A 10.0.6.125 +4000.example. 5M IN A 10.0.6.126 +4000.example. 5M IN A 10.0.6.127 +4000.example. 5M IN A 10.0.6.128 +4000.example. 5M IN A 10.0.6.129 +4000.example. 5M IN A 10.0.6.130 +4000.example. 5M IN A 10.0.6.131 +4000.example. 5M IN A 10.0.6.132 +4000.example. 5M IN A 10.0.6.133 +4000.example. 5M IN A 10.0.6.134 +4000.example. 5M IN A 10.0.6.135 +4000.example. 5M IN A 10.0.6.136 +4000.example. 5M IN A 10.0.6.137 +4000.example. 5M IN A 10.0.6.138 +4000.example. 5M IN A 10.0.6.139 +4000.example. 5M IN A 10.0.6.140 +4000.example. 5M IN A 10.0.6.141 +4000.example. 5M IN A 10.0.6.142 +4000.example. 5M IN A 10.0.6.143 +4000.example. 5M IN A 10.0.6.144 +4000.example. 5M IN A 10.0.6.145 +4000.example. 5M IN A 10.0.6.146 +4000.example. 5M IN A 10.0.6.147 +4000.example. 5M IN A 10.0.6.148 +4000.example. 5M IN A 10.0.6.149 +4000.example. 5M IN A 10.0.6.150 +4000.example. 5M IN A 10.0.6.151 +4000.example. 5M IN A 10.0.6.152 +4000.example. 5M IN A 10.0.6.153 +4000.example. 5M IN A 10.0.6.154 +4000.example. 5M IN A 10.0.6.155 +4000.example. 5M IN A 10.0.6.156 +4000.example. 5M IN A 10.0.6.157 +4000.example. 5M IN A 10.0.6.158 +4000.example. 5M IN A 10.0.6.159 +4000.example. 5M IN A 10.0.6.160 +4000.example. 5M IN A 10.0.6.161 +4000.example. 5M IN A 10.0.6.162 +4000.example. 5M IN A 10.0.6.163 +4000.example. 5M IN A 10.0.6.164 +4000.example. 5M IN A 10.0.6.165 +4000.example. 5M IN A 10.0.6.166 +4000.example. 5M IN A 10.0.6.167 +4000.example. 5M IN A 10.0.6.168 +4000.example. 5M IN A 10.0.6.169 +4000.example. 5M IN A 10.0.6.170 +4000.example. 5M IN A 10.0.6.171 +4000.example. 5M IN A 10.0.6.172 +4000.example. 5M IN A 10.0.6.173 +4000.example. 5M IN A 10.0.6.174 +4000.example. 5M IN A 10.0.6.175 +4000.example. 5M IN A 10.0.6.176 +4000.example. 5M IN A 10.0.6.177 +4000.example. 5M IN A 10.0.6.178 +4000.example. 5M IN A 10.0.6.179 +4000.example. 5M IN A 10.0.6.180 +4000.example. 5M IN A 10.0.6.181 +4000.example. 5M IN A 10.0.6.182 +4000.example. 5M IN A 10.0.6.183 +4000.example. 5M IN A 10.0.6.184 +4000.example. 5M IN A 10.0.6.185 +4000.example. 5M IN A 10.0.6.186 +4000.example. 5M IN A 10.0.6.187 +4000.example. 5M IN A 10.0.6.188 +4000.example. 5M IN A 10.0.6.189 +4000.example. 5M IN A 10.0.6.190 +4000.example. 5M IN A 10.0.6.191 +4000.example. 5M IN A 10.0.6.192 +4000.example. 5M IN A 10.0.6.193 +4000.example. 5M IN A 10.0.6.194 +4000.example. 5M IN A 10.0.6.195 +4000.example. 5M IN A 10.0.6.196 +4000.example. 5M IN A 10.0.6.197 +4000.example. 5M IN A 10.0.6.198 +4000.example. 5M IN A 10.0.6.199 +4000.example. 5M IN A 10.0.6.200 +4000.example. 5M IN A 10.0.6.201 +4000.example. 5M IN A 10.0.6.202 +4000.example. 5M IN A 10.0.6.203 +4000.example. 5M IN A 10.0.6.204 +4000.example. 5M IN A 10.0.6.205 +4000.example. 5M IN A 10.0.6.206 +4000.example. 5M IN A 10.0.6.207 +4000.example. 5M IN A 10.0.6.208 +4000.example. 5M IN A 10.0.6.209 +4000.example. 5M IN A 10.0.6.210 +4000.example. 5M IN A 10.0.6.211 +4000.example. 5M IN A 10.0.6.212 +4000.example. 5M IN A 10.0.6.213 +4000.example. 5M IN A 10.0.6.214 +4000.example. 5M IN A 10.0.6.215 +4000.example. 5M IN A 10.0.6.216 +4000.example. 5M IN A 10.0.6.217 +4000.example. 5M IN A 10.0.6.218 +4000.example. 5M IN A 10.0.6.219 +4000.example. 5M IN A 10.0.6.220 +4000.example. 5M IN A 10.0.6.221 +4000.example. 5M IN A 10.0.6.222 +4000.example. 5M IN A 10.0.6.223 +4000.example. 5M IN A 10.0.6.224 +4000.example. 5M IN A 10.0.6.225 +4000.example. 5M IN A 10.0.6.226 +4000.example. 5M IN A 10.0.6.227 +4000.example. 5M IN A 10.0.6.228 +4000.example. 5M IN A 10.0.6.229 +4000.example. 5M IN A 10.0.6.230 +4000.example. 5M IN A 10.0.6.231 +4000.example. 5M IN A 10.0.6.232 +4000.example. 5M IN A 10.0.6.233 +4000.example. 5M IN A 10.0.6.234 +4000.example. 5M IN A 10.0.6.235 +4000.example. 5M IN A 10.0.6.236 +4000.example. 5M IN A 10.0.6.237 +4000.example. 5M IN A 10.0.6.238 +4000.example. 5M IN A 10.0.6.239 +4000.example. 5M IN A 10.0.6.240 +4000.example. 5M IN A 10.0.6.241 +4000.example. 5M IN A 10.0.6.242 +4000.example. 5M IN A 10.0.6.243 +4000.example. 5M IN A 10.0.6.244 +4000.example. 5M IN A 10.0.6.245 +4000.example. 5M IN A 10.0.6.246 +4000.example. 5M IN A 10.0.6.247 +4000.example. 5M IN A 10.0.6.248 +4000.example. 5M IN A 10.0.6.249 +4000.example. 5M IN A 10.0.6.250 +4000.example. 5M IN A 10.0.6.251 +4000.example. 5M IN A 10.0.6.252 +4000.example. 5M IN A 10.0.6.253 +4000.example. 5M IN A 10.0.6.254 +4000.example. 5M IN A 10.0.6.255 +4000.example. 5M IN A 10.0.7.0 +4000.example. 5M IN A 10.0.7.1 +4000.example. 5M IN A 10.0.7.2 +4000.example. 5M IN A 10.0.7.3 +4000.example. 5M IN A 10.0.7.4 +4000.example. 5M IN A 10.0.7.5 +4000.example. 5M IN A 10.0.7.6 +4000.example. 5M IN A 10.0.7.7 +4000.example. 5M IN A 10.0.7.8 +4000.example. 5M IN A 10.0.7.9 +4000.example. 5M IN A 10.0.7.10 +4000.example. 5M IN A 10.0.7.11 +4000.example. 5M IN A 10.0.7.12 +4000.example. 5M IN A 10.0.7.13 +4000.example. 5M IN A 10.0.7.14 +4000.example. 5M IN A 10.0.7.15 +4000.example. 5M IN A 10.0.7.16 +4000.example. 5M IN A 10.0.7.17 +4000.example. 5M IN A 10.0.7.18 +4000.example. 5M IN A 10.0.7.19 +4000.example. 5M IN A 10.0.7.20 +4000.example. 5M IN A 10.0.7.21 +4000.example. 5M IN A 10.0.7.22 +4000.example. 5M IN A 10.0.7.23 +4000.example. 5M IN A 10.0.7.24 +4000.example. 5M IN A 10.0.7.25 +4000.example. 5M IN A 10.0.7.26 +4000.example. 5M IN A 10.0.7.27 +4000.example. 5M IN A 10.0.7.28 +4000.example. 5M IN A 10.0.7.29 +4000.example. 5M IN A 10.0.7.30 +4000.example. 5M IN A 10.0.7.31 +4000.example. 5M IN A 10.0.7.32 +4000.example. 5M IN A 10.0.7.33 +4000.example. 5M IN A 10.0.7.34 +4000.example. 5M IN A 10.0.7.35 +4000.example. 5M IN A 10.0.7.36 +4000.example. 5M IN A 10.0.7.37 +4000.example. 5M IN A 10.0.7.38 +4000.example. 5M IN A 10.0.7.39 +4000.example. 5M IN A 10.0.7.40 +4000.example. 5M IN A 10.0.7.41 +4000.example. 5M IN A 10.0.7.42 +4000.example. 5M IN A 10.0.7.43 +4000.example. 5M IN A 10.0.7.44 +4000.example. 5M IN A 10.0.7.45 +4000.example. 5M IN A 10.0.7.46 +4000.example. 5M IN A 10.0.7.47 +4000.example. 5M IN A 10.0.7.48 +4000.example. 5M IN A 10.0.7.49 +4000.example. 5M IN A 10.0.7.50 +4000.example. 5M IN A 10.0.7.51 +4000.example. 5M IN A 10.0.7.52 +4000.example. 5M IN A 10.0.7.53 +4000.example. 5M IN A 10.0.7.54 +4000.example. 5M IN A 10.0.7.55 +4000.example. 5M IN A 10.0.7.56 +4000.example. 5M IN A 10.0.7.57 +4000.example. 5M IN A 10.0.7.58 +4000.example. 5M IN A 10.0.7.59 +4000.example. 5M IN A 10.0.7.60 +4000.example. 5M IN A 10.0.7.61 +4000.example. 5M IN A 10.0.7.62 +4000.example. 5M IN A 10.0.7.63 +4000.example. 5M IN A 10.0.7.64 +4000.example. 5M IN A 10.0.7.65 +4000.example. 5M IN A 10.0.7.66 +4000.example. 5M IN A 10.0.7.67 +4000.example. 5M IN A 10.0.7.68 +4000.example. 5M IN A 10.0.7.69 +4000.example. 5M IN A 10.0.7.70 +4000.example. 5M IN A 10.0.7.71 +4000.example. 5M IN A 10.0.7.72 +4000.example. 5M IN A 10.0.7.73 +4000.example. 5M IN A 10.0.7.74 +4000.example. 5M IN A 10.0.7.75 +4000.example. 5M IN A 10.0.7.76 +4000.example. 5M IN A 10.0.7.77 +4000.example. 5M IN A 10.0.7.78 +4000.example. 5M IN A 10.0.7.79 +4000.example. 5M IN A 10.0.7.80 +4000.example. 5M IN A 10.0.7.81 +4000.example. 5M IN A 10.0.7.82 +4000.example. 5M IN A 10.0.7.83 +4000.example. 5M IN A 10.0.7.84 +4000.example. 5M IN A 10.0.7.85 +4000.example. 5M IN A 10.0.7.86 +4000.example. 5M IN A 10.0.7.87 +4000.example. 5M IN A 10.0.7.88 +4000.example. 5M IN A 10.0.7.89 +4000.example. 5M IN A 10.0.7.90 +4000.example. 5M IN A 10.0.7.91 +4000.example. 5M IN A 10.0.7.92 +4000.example. 5M IN A 10.0.7.93 +4000.example. 5M IN A 10.0.7.94 +4000.example. 5M IN A 10.0.7.95 +4000.example. 5M IN A 10.0.7.96 +4000.example. 5M IN A 10.0.7.97 +4000.example. 5M IN A 10.0.7.98 +4000.example. 5M IN A 10.0.7.99 +4000.example. 5M IN A 10.0.7.100 +4000.example. 5M IN A 10.0.7.101 +4000.example. 5M IN A 10.0.7.102 +4000.example. 5M IN A 10.0.7.103 +4000.example. 5M IN A 10.0.7.104 +4000.example. 5M IN A 10.0.7.105 +4000.example. 5M IN A 10.0.7.106 +4000.example. 5M IN A 10.0.7.107 +4000.example. 5M IN A 10.0.7.108 +4000.example. 5M IN A 10.0.7.109 +4000.example. 5M IN A 10.0.7.110 +4000.example. 5M IN A 10.0.7.111 +4000.example. 5M IN A 10.0.7.112 +4000.example. 5M IN A 10.0.7.113 +4000.example. 5M IN A 10.0.7.114 +4000.example. 5M IN A 10.0.7.115 +4000.example. 5M IN A 10.0.7.116 +4000.example. 5M IN A 10.0.7.117 +4000.example. 5M IN A 10.0.7.118 +4000.example. 5M IN A 10.0.7.119 +4000.example. 5M IN A 10.0.7.120 +4000.example. 5M IN A 10.0.7.121 +4000.example. 5M IN A 10.0.7.122 +4000.example. 5M IN A 10.0.7.123 +4000.example. 5M IN A 10.0.7.124 +4000.example. 5M IN A 10.0.7.125 +4000.example. 5M IN A 10.0.7.126 +4000.example. 5M IN A 10.0.7.127 +4000.example. 5M IN A 10.0.7.128 +4000.example. 5M IN A 10.0.7.129 +4000.example. 5M IN A 10.0.7.130 +4000.example. 5M IN A 10.0.7.131 +4000.example. 5M IN A 10.0.7.132 +4000.example. 5M IN A 10.0.7.133 +4000.example. 5M IN A 10.0.7.134 +4000.example. 5M IN A 10.0.7.135 +4000.example. 5M IN A 10.0.7.136 +4000.example. 5M IN A 10.0.7.137 +4000.example. 5M IN A 10.0.7.138 +4000.example. 5M IN A 10.0.7.139 +4000.example. 5M IN A 10.0.7.140 +4000.example. 5M IN A 10.0.7.141 +4000.example. 5M IN A 10.0.7.142 +4000.example. 5M IN A 10.0.7.143 +4000.example. 5M IN A 10.0.7.144 +4000.example. 5M IN A 10.0.7.145 +4000.example. 5M IN A 10.0.7.146 +4000.example. 5M IN A 10.0.7.147 +4000.example. 5M IN A 10.0.7.148 +4000.example. 5M IN A 10.0.7.149 +4000.example. 5M IN A 10.0.7.150 +4000.example. 5M IN A 10.0.7.151 +4000.example. 5M IN A 10.0.7.152 +4000.example. 5M IN A 10.0.7.153 +4000.example. 5M IN A 10.0.7.154 +4000.example. 5M IN A 10.0.7.155 +4000.example. 5M IN A 10.0.7.156 +4000.example. 5M IN A 10.0.7.157 +4000.example. 5M IN A 10.0.7.158 +4000.example. 5M IN A 10.0.7.159 +4000.example. 5M IN A 10.0.7.160 +4000.example. 5M IN A 10.0.7.161 +4000.example. 5M IN A 10.0.7.162 +4000.example. 5M IN A 10.0.7.163 +4000.example. 5M IN A 10.0.7.164 +4000.example. 5M IN A 10.0.7.165 +4000.example. 5M IN A 10.0.7.166 +4000.example. 5M IN A 10.0.7.167 +4000.example. 5M IN A 10.0.7.168 +4000.example. 5M IN A 10.0.7.169 +4000.example. 5M IN A 10.0.7.170 +4000.example. 5M IN A 10.0.7.171 +4000.example. 5M IN A 10.0.7.172 +4000.example. 5M IN A 10.0.7.173 +4000.example. 5M IN A 10.0.7.174 +4000.example. 5M IN A 10.0.7.175 +4000.example. 5M IN A 10.0.7.176 +4000.example. 5M IN A 10.0.7.177 +4000.example. 5M IN A 10.0.7.178 +4000.example. 5M IN A 10.0.7.179 +4000.example. 5M IN A 10.0.7.180 +4000.example. 5M IN A 10.0.7.181 +4000.example. 5M IN A 10.0.7.182 +4000.example. 5M IN A 10.0.7.183 +4000.example. 5M IN A 10.0.7.184 +4000.example. 5M IN A 10.0.7.185 +4000.example. 5M IN A 10.0.7.186 +4000.example. 5M IN A 10.0.7.187 +4000.example. 5M IN A 10.0.7.188 +4000.example. 5M IN A 10.0.7.189 +4000.example. 5M IN A 10.0.7.190 +4000.example. 5M IN A 10.0.7.191 +4000.example. 5M IN A 10.0.7.192 +4000.example. 5M IN A 10.0.7.193 +4000.example. 5M IN A 10.0.7.194 +4000.example. 5M IN A 10.0.7.195 +4000.example. 5M IN A 10.0.7.196 +4000.example. 5M IN A 10.0.7.197 +4000.example. 5M IN A 10.0.7.198 +4000.example. 5M IN A 10.0.7.199 +4000.example. 5M IN A 10.0.7.200 +4000.example. 5M IN A 10.0.7.201 +4000.example. 5M IN A 10.0.7.202 +4000.example. 5M IN A 10.0.7.203 +4000.example. 5M IN A 10.0.7.204 +4000.example. 5M IN A 10.0.7.205 +4000.example. 5M IN A 10.0.7.206 +4000.example. 5M IN A 10.0.7.207 +4000.example. 5M IN A 10.0.7.208 +4000.example. 5M IN A 10.0.7.209 +4000.example. 5M IN A 10.0.7.210 +4000.example. 5M IN A 10.0.7.211 +4000.example. 5M IN A 10.0.7.212 +4000.example. 5M IN A 10.0.7.213 +4000.example. 5M IN A 10.0.7.214 +4000.example. 5M IN A 10.0.7.215 +4000.example. 5M IN A 10.0.7.216 +4000.example. 5M IN A 10.0.7.217 +4000.example. 5M IN A 10.0.7.218 +4000.example. 5M IN A 10.0.7.219 +4000.example. 5M IN A 10.0.7.220 +4000.example. 5M IN A 10.0.7.221 +4000.example. 5M IN A 10.0.7.222 +4000.example. 5M IN A 10.0.7.223 +4000.example. 5M IN A 10.0.7.224 +4000.example. 5M IN A 10.0.7.225 +4000.example. 5M IN A 10.0.7.226 +4000.example. 5M IN A 10.0.7.227 +4000.example. 5M IN A 10.0.7.228 +4000.example. 5M IN A 10.0.7.229 +4000.example. 5M IN A 10.0.7.230 +4000.example. 5M IN A 10.0.7.231 +4000.example. 5M IN A 10.0.7.232 +4000.example. 5M IN A 10.0.7.233 +4000.example. 5M IN A 10.0.7.234 +4000.example. 5M IN A 10.0.7.235 +4000.example. 5M IN A 10.0.7.236 +4000.example. 5M IN A 10.0.7.237 +4000.example. 5M IN A 10.0.7.238 +4000.example. 5M IN A 10.0.7.239 +4000.example. 5M IN A 10.0.7.240 +4000.example. 5M IN A 10.0.7.241 +4000.example. 5M IN A 10.0.7.242 +4000.example. 5M IN A 10.0.7.243 +4000.example. 5M IN A 10.0.7.244 +4000.example. 5M IN A 10.0.7.245 +4000.example. 5M IN A 10.0.7.246 +4000.example. 5M IN A 10.0.7.247 +4000.example. 5M IN A 10.0.7.248 +4000.example. 5M IN A 10.0.7.249 +4000.example. 5M IN A 10.0.7.250 +4000.example. 5M IN A 10.0.7.251 +4000.example. 5M IN A 10.0.7.252 +4000.example. 5M IN A 10.0.7.253 +4000.example. 5M IN A 10.0.7.254 +4000.example. 5M IN A 10.0.7.255 +4000.example. 5M IN A 10.0.8.0 +4000.example. 5M IN A 10.0.8.1 +4000.example. 5M IN A 10.0.8.2 +4000.example. 5M IN A 10.0.8.3 +4000.example. 5M IN A 10.0.8.4 +4000.example. 5M IN A 10.0.8.5 +4000.example. 5M IN A 10.0.8.6 +4000.example. 5M IN A 10.0.8.7 +4000.example. 5M IN A 10.0.8.8 +4000.example. 5M IN A 10.0.8.9 +4000.example. 5M IN A 10.0.8.10 +4000.example. 5M IN A 10.0.8.11 +4000.example. 5M IN A 10.0.8.12 +4000.example. 5M IN A 10.0.8.13 +4000.example. 5M IN A 10.0.8.14 +4000.example. 5M IN A 10.0.8.15 +4000.example. 5M IN A 10.0.8.16 +4000.example. 5M IN A 10.0.8.17 +4000.example. 5M IN A 10.0.8.18 +4000.example. 5M IN A 10.0.8.19 +4000.example. 5M IN A 10.0.8.20 +4000.example. 5M IN A 10.0.8.21 +4000.example. 5M IN A 10.0.8.22 +4000.example. 5M IN A 10.0.8.23 +4000.example. 5M IN A 10.0.8.24 +4000.example. 5M IN A 10.0.8.25 +4000.example. 5M IN A 10.0.8.26 +4000.example. 5M IN A 10.0.8.27 +4000.example. 5M IN A 10.0.8.28 +4000.example. 5M IN A 10.0.8.29 +4000.example. 5M IN A 10.0.8.30 +4000.example. 5M IN A 10.0.8.31 +4000.example. 5M IN A 10.0.8.32 +4000.example. 5M IN A 10.0.8.33 +4000.example. 5M IN A 10.0.8.34 +4000.example. 5M IN A 10.0.8.35 +4000.example. 5M IN A 10.0.8.36 +4000.example. 5M IN A 10.0.8.37 +4000.example. 5M IN A 10.0.8.38 +4000.example. 5M IN A 10.0.8.39 +4000.example. 5M IN A 10.0.8.40 +4000.example. 5M IN A 10.0.8.41 +4000.example. 5M IN A 10.0.8.42 +4000.example. 5M IN A 10.0.8.43 +4000.example. 5M IN A 10.0.8.44 +4000.example. 5M IN A 10.0.8.45 +4000.example. 5M IN A 10.0.8.46 +4000.example. 5M IN A 10.0.8.47 +4000.example. 5M IN A 10.0.8.48 +4000.example. 5M IN A 10.0.8.49 +4000.example. 5M IN A 10.0.8.50 +4000.example. 5M IN A 10.0.8.51 +4000.example. 5M IN A 10.0.8.52 +4000.example. 5M IN A 10.0.8.53 +4000.example. 5M IN A 10.0.8.54 +4000.example. 5M IN A 10.0.8.55 +4000.example. 5M IN A 10.0.8.56 +4000.example. 5M IN A 10.0.8.57 +4000.example. 5M IN A 10.0.8.58 +4000.example. 5M IN A 10.0.8.59 +4000.example. 5M IN A 10.0.8.60 +4000.example. 5M IN A 10.0.8.61 +4000.example. 5M IN A 10.0.8.62 +4000.example. 5M IN A 10.0.8.63 +4000.example. 5M IN A 10.0.8.64 +4000.example. 5M IN A 10.0.8.65 +4000.example. 5M IN A 10.0.8.66 +4000.example. 5M IN A 10.0.8.67 +4000.example. 5M IN A 10.0.8.68 +4000.example. 5M IN A 10.0.8.69 +4000.example. 5M IN A 10.0.8.70 +4000.example. 5M IN A 10.0.8.71 +4000.example. 5M IN A 10.0.8.72 +4000.example. 5M IN A 10.0.8.73 +4000.example. 5M IN A 10.0.8.74 +4000.example. 5M IN A 10.0.8.75 +4000.example. 5M IN A 10.0.8.76 +4000.example. 5M IN A 10.0.8.77 +4000.example. 5M IN A 10.0.8.78 +4000.example. 5M IN A 10.0.8.79 +4000.example. 5M IN A 10.0.8.80 +4000.example. 5M IN A 10.0.8.81 +4000.example. 5M IN A 10.0.8.82 +4000.example. 5M IN A 10.0.8.83 +4000.example. 5M IN A 10.0.8.84 +4000.example. 5M IN A 10.0.8.85 +4000.example. 5M IN A 10.0.8.86 +4000.example. 5M IN A 10.0.8.87 +4000.example. 5M IN A 10.0.8.88 +4000.example. 5M IN A 10.0.8.89 +4000.example. 5M IN A 10.0.8.90 +4000.example. 5M IN A 10.0.8.91 +4000.example. 5M IN A 10.0.8.92 +4000.example. 5M IN A 10.0.8.93 +4000.example. 5M IN A 10.0.8.94 +4000.example. 5M IN A 10.0.8.95 +4000.example. 5M IN A 10.0.8.96 +4000.example. 5M IN A 10.0.8.97 +4000.example. 5M IN A 10.0.8.98 +4000.example. 5M IN A 10.0.8.99 +4000.example. 5M IN A 10.0.8.100 +4000.example. 5M IN A 10.0.8.101 +4000.example. 5M IN A 10.0.8.102 +4000.example. 5M IN A 10.0.8.103 +4000.example. 5M IN A 10.0.8.104 +4000.example. 5M IN A 10.0.8.105 +4000.example. 5M IN A 10.0.8.106 +4000.example. 5M IN A 10.0.8.107 +4000.example. 5M IN A 10.0.8.108 +4000.example. 5M IN A 10.0.8.109 +4000.example. 5M IN A 10.0.8.110 +4000.example. 5M IN A 10.0.8.111 +4000.example. 5M IN A 10.0.8.112 +4000.example. 5M IN A 10.0.8.113 +4000.example. 5M IN A 10.0.8.114 +4000.example. 5M IN A 10.0.8.115 +4000.example. 5M IN A 10.0.8.116 +4000.example. 5M IN A 10.0.8.117 +4000.example. 5M IN A 10.0.8.118 +4000.example. 5M IN A 10.0.8.119 +4000.example. 5M IN A 10.0.8.120 +4000.example. 5M IN A 10.0.8.121 +4000.example. 5M IN A 10.0.8.122 +4000.example. 5M IN A 10.0.8.123 +4000.example. 5M IN A 10.0.8.124 +4000.example. 5M IN A 10.0.8.125 +4000.example. 5M IN A 10.0.8.126 +4000.example. 5M IN A 10.0.8.127 +4000.example. 5M IN A 10.0.8.128 +4000.example. 5M IN A 10.0.8.129 +4000.example. 5M IN A 10.0.8.130 +4000.example. 5M IN A 10.0.8.131 +4000.example. 5M IN A 10.0.8.132 +4000.example. 5M IN A 10.0.8.133 +4000.example. 5M IN A 10.0.8.134 +4000.example. 5M IN A 10.0.8.135 +4000.example. 5M IN A 10.0.8.136 +4000.example. 5M IN A 10.0.8.137 +4000.example. 5M IN A 10.0.8.138 +4000.example. 5M IN A 10.0.8.139 +4000.example. 5M IN A 10.0.8.140 +4000.example. 5M IN A 10.0.8.141 +4000.example. 5M IN A 10.0.8.142 +4000.example. 5M IN A 10.0.8.143 +4000.example. 5M IN A 10.0.8.144 +4000.example. 5M IN A 10.0.8.145 +4000.example. 5M IN A 10.0.8.146 +4000.example. 5M IN A 10.0.8.147 +4000.example. 5M IN A 10.0.8.148 +4000.example. 5M IN A 10.0.8.149 +4000.example. 5M IN A 10.0.8.150 +4000.example. 5M IN A 10.0.8.151 +4000.example. 5M IN A 10.0.8.152 +4000.example. 5M IN A 10.0.8.153 +4000.example. 5M IN A 10.0.8.154 +4000.example. 5M IN A 10.0.8.155 +4000.example. 5M IN A 10.0.8.156 +4000.example. 5M IN A 10.0.8.157 +4000.example. 5M IN A 10.0.8.158 +4000.example. 5M IN A 10.0.8.159 +4000.example. 5M IN A 10.0.8.160 +4000.example. 5M IN A 10.0.8.161 +4000.example. 5M IN A 10.0.8.162 +4000.example. 5M IN A 10.0.8.163 +4000.example. 5M IN A 10.0.8.164 +4000.example. 5M IN A 10.0.8.165 +4000.example. 5M IN A 10.0.8.166 +4000.example. 5M IN A 10.0.8.167 +4000.example. 5M IN A 10.0.8.168 +4000.example. 5M IN A 10.0.8.169 +4000.example. 5M IN A 10.0.8.170 +4000.example. 5M IN A 10.0.8.171 +4000.example. 5M IN A 10.0.8.172 +4000.example. 5M IN A 10.0.8.173 +4000.example. 5M IN A 10.0.8.174 +4000.example. 5M IN A 10.0.8.175 +4000.example. 5M IN A 10.0.8.176 +4000.example. 5M IN A 10.0.8.177 +4000.example. 5M IN A 10.0.8.178 +4000.example. 5M IN A 10.0.8.179 +4000.example. 5M IN A 10.0.8.180 +4000.example. 5M IN A 10.0.8.181 +4000.example. 5M IN A 10.0.8.182 +4000.example. 5M IN A 10.0.8.183 +4000.example. 5M IN A 10.0.8.184 +4000.example. 5M IN A 10.0.8.185 +4000.example. 5M IN A 10.0.8.186 +4000.example. 5M IN A 10.0.8.187 +4000.example. 5M IN A 10.0.8.188 +4000.example. 5M IN A 10.0.8.189 +4000.example. 5M IN A 10.0.8.190 +4000.example. 5M IN A 10.0.8.191 +4000.example. 5M IN A 10.0.8.192 +4000.example. 5M IN A 10.0.8.193 +4000.example. 5M IN A 10.0.8.194 +4000.example. 5M IN A 10.0.8.195 +4000.example. 5M IN A 10.0.8.196 +4000.example. 5M IN A 10.0.8.197 +4000.example. 5M IN A 10.0.8.198 +4000.example. 5M IN A 10.0.8.199 +4000.example. 5M IN A 10.0.8.200 +4000.example. 5M IN A 10.0.8.201 +4000.example. 5M IN A 10.0.8.202 +4000.example. 5M IN A 10.0.8.203 +4000.example. 5M IN A 10.0.8.204 +4000.example. 5M IN A 10.0.8.205 +4000.example. 5M IN A 10.0.8.206 +4000.example. 5M IN A 10.0.8.207 +4000.example. 5M IN A 10.0.8.208 +4000.example. 5M IN A 10.0.8.209 +4000.example. 5M IN A 10.0.8.210 +4000.example. 5M IN A 10.0.8.211 +4000.example. 5M IN A 10.0.8.212 +4000.example. 5M IN A 10.0.8.213 +4000.example. 5M IN A 10.0.8.214 +4000.example. 5M IN A 10.0.8.215 +4000.example. 5M IN A 10.0.8.216 +4000.example. 5M IN A 10.0.8.217 +4000.example. 5M IN A 10.0.8.218 +4000.example. 5M IN A 10.0.8.219 +4000.example. 5M IN A 10.0.8.220 +4000.example. 5M IN A 10.0.8.221 +4000.example. 5M IN A 10.0.8.222 +4000.example. 5M IN A 10.0.8.223 +4000.example. 5M IN A 10.0.8.224 +4000.example. 5M IN A 10.0.8.225 +4000.example. 5M IN A 10.0.8.226 +4000.example. 5M IN A 10.0.8.227 +4000.example. 5M IN A 10.0.8.228 +4000.example. 5M IN A 10.0.8.229 +4000.example. 5M IN A 10.0.8.230 +4000.example. 5M IN A 10.0.8.231 +4000.example. 5M IN A 10.0.8.232 +4000.example. 5M IN A 10.0.8.233 +4000.example. 5M IN A 10.0.8.234 +4000.example. 5M IN A 10.0.8.235 +4000.example. 5M IN A 10.0.8.236 +4000.example. 5M IN A 10.0.8.237 +4000.example. 5M IN A 10.0.8.238 +4000.example. 5M IN A 10.0.8.239 +4000.example. 5M IN A 10.0.8.240 +4000.example. 5M IN A 10.0.8.241 +4000.example. 5M IN A 10.0.8.242 +4000.example. 5M IN A 10.0.8.243 +4000.example. 5M IN A 10.0.8.244 +4000.example. 5M IN A 10.0.8.245 +4000.example. 5M IN A 10.0.8.246 +4000.example. 5M IN A 10.0.8.247 +4000.example. 5M IN A 10.0.8.248 +4000.example. 5M IN A 10.0.8.249 +4000.example. 5M IN A 10.0.8.250 +4000.example. 5M IN A 10.0.8.251 +4000.example. 5M IN A 10.0.8.252 +4000.example. 5M IN A 10.0.8.253 +4000.example. 5M IN A 10.0.8.254 +4000.example. 5M IN A 10.0.8.255 +4000.example. 5M IN A 10.0.9.0 +4000.example. 5M IN A 10.0.9.1 +4000.example. 5M IN A 10.0.9.2 +4000.example. 5M IN A 10.0.9.3 +4000.example. 5M IN A 10.0.9.4 +4000.example. 5M IN A 10.0.9.5 +4000.example. 5M IN A 10.0.9.6 +4000.example. 5M IN A 10.0.9.7 +4000.example. 5M IN A 10.0.9.8 +4000.example. 5M IN A 10.0.9.9 +4000.example. 5M IN A 10.0.9.10 +4000.example. 5M IN A 10.0.9.11 +4000.example. 5M IN A 10.0.9.12 +4000.example. 5M IN A 10.0.9.13 +4000.example. 5M IN A 10.0.9.14 +4000.example. 5M IN A 10.0.9.15 +4000.example. 5M IN A 10.0.9.16 +4000.example. 5M IN A 10.0.9.17 +4000.example. 5M IN A 10.0.9.18 +4000.example. 5M IN A 10.0.9.19 +4000.example. 5M IN A 10.0.9.20 +4000.example. 5M IN A 10.0.9.21 +4000.example. 5M IN A 10.0.9.22 +4000.example. 5M IN A 10.0.9.23 +4000.example. 5M IN A 10.0.9.24 +4000.example. 5M IN A 10.0.9.25 +4000.example. 5M IN A 10.0.9.26 +4000.example. 5M IN A 10.0.9.27 +4000.example. 5M IN A 10.0.9.28 +4000.example. 5M IN A 10.0.9.29 +4000.example. 5M IN A 10.0.9.30 +4000.example. 5M IN A 10.0.9.31 +4000.example. 5M IN A 10.0.9.32 +4000.example. 5M IN A 10.0.9.33 +4000.example. 5M IN A 10.0.9.34 +4000.example. 5M IN A 10.0.9.35 +4000.example. 5M IN A 10.0.9.36 +4000.example. 5M IN A 10.0.9.37 +4000.example. 5M IN A 10.0.9.38 +4000.example. 5M IN A 10.0.9.39 +4000.example. 5M IN A 10.0.9.40 +4000.example. 5M IN A 10.0.9.41 +4000.example. 5M IN A 10.0.9.42 +4000.example. 5M IN A 10.0.9.43 +4000.example. 5M IN A 10.0.9.44 +4000.example. 5M IN A 10.0.9.45 +4000.example. 5M IN A 10.0.9.46 +4000.example. 5M IN A 10.0.9.47 +4000.example. 5M IN A 10.0.9.48 +4000.example. 5M IN A 10.0.9.49 +4000.example. 5M IN A 10.0.9.50 +4000.example. 5M IN A 10.0.9.51 +4000.example. 5M IN A 10.0.9.52 +4000.example. 5M IN A 10.0.9.53 +4000.example. 5M IN A 10.0.9.54 +4000.example. 5M IN A 10.0.9.55 +4000.example. 5M IN A 10.0.9.56 +4000.example. 5M IN A 10.0.9.57 +4000.example. 5M IN A 10.0.9.58 +4000.example. 5M IN A 10.0.9.59 +4000.example. 5M IN A 10.0.9.60 +4000.example. 5M IN A 10.0.9.61 +4000.example. 5M IN A 10.0.9.62 +4000.example. 5M IN A 10.0.9.63 +4000.example. 5M IN A 10.0.9.64 +4000.example. 5M IN A 10.0.9.65 +4000.example. 5M IN A 10.0.9.66 +4000.example. 5M IN A 10.0.9.67 +4000.example. 5M IN A 10.0.9.68 +4000.example. 5M IN A 10.0.9.69 +4000.example. 5M IN A 10.0.9.70 +4000.example. 5M IN A 10.0.9.71 +4000.example. 5M IN A 10.0.9.72 +4000.example. 5M IN A 10.0.9.73 +4000.example. 5M IN A 10.0.9.74 +4000.example. 5M IN A 10.0.9.75 +4000.example. 5M IN A 10.0.9.76 +4000.example. 5M IN A 10.0.9.77 +4000.example. 5M IN A 10.0.9.78 +4000.example. 5M IN A 10.0.9.79 +4000.example. 5M IN A 10.0.9.80 +4000.example. 5M IN A 10.0.9.81 +4000.example. 5M IN A 10.0.9.82 +4000.example. 5M IN A 10.0.9.83 +4000.example. 5M IN A 10.0.9.84 +4000.example. 5M IN A 10.0.9.85 +4000.example. 5M IN A 10.0.9.86 +4000.example. 5M IN A 10.0.9.87 +4000.example. 5M IN A 10.0.9.88 +4000.example. 5M IN A 10.0.9.89 +4000.example. 5M IN A 10.0.9.90 +4000.example. 5M IN A 10.0.9.91 +4000.example. 5M IN A 10.0.9.92 +4000.example. 5M IN A 10.0.9.93 +4000.example. 5M IN A 10.0.9.94 +4000.example. 5M IN A 10.0.9.95 +4000.example. 5M IN A 10.0.9.96 +4000.example. 5M IN A 10.0.9.97 +4000.example. 5M IN A 10.0.9.98 +4000.example. 5M IN A 10.0.9.99 +4000.example. 5M IN A 10.0.9.100 +4000.example. 5M IN A 10.0.9.101 +4000.example. 5M IN A 10.0.9.102 +4000.example. 5M IN A 10.0.9.103 +4000.example. 5M IN A 10.0.9.104 +4000.example. 5M IN A 10.0.9.105 +4000.example. 5M IN A 10.0.9.106 +4000.example. 5M IN A 10.0.9.107 +4000.example. 5M IN A 10.0.9.108 +4000.example. 5M IN A 10.0.9.109 +4000.example. 5M IN A 10.0.9.110 +4000.example. 5M IN A 10.0.9.111 +4000.example. 5M IN A 10.0.9.112 +4000.example. 5M IN A 10.0.9.113 +4000.example. 5M IN A 10.0.9.114 +4000.example. 5M IN A 10.0.9.115 +4000.example. 5M IN A 10.0.9.116 +4000.example. 5M IN A 10.0.9.117 +4000.example. 5M IN A 10.0.9.118 +4000.example. 5M IN A 10.0.9.119 +4000.example. 5M IN A 10.0.9.120 +4000.example. 5M IN A 10.0.9.121 +4000.example. 5M IN A 10.0.9.122 +4000.example. 5M IN A 10.0.9.123 +4000.example. 5M IN A 10.0.9.124 +4000.example. 5M IN A 10.0.9.125 +4000.example. 5M IN A 10.0.9.126 +4000.example. 5M IN A 10.0.9.127 +4000.example. 5M IN A 10.0.9.128 +4000.example. 5M IN A 10.0.9.129 +4000.example. 5M IN A 10.0.9.130 +4000.example. 5M IN A 10.0.9.131 +4000.example. 5M IN A 10.0.9.132 +4000.example. 5M IN A 10.0.9.133 +4000.example. 5M IN A 10.0.9.134 +4000.example. 5M IN A 10.0.9.135 +4000.example. 5M IN A 10.0.9.136 +4000.example. 5M IN A 10.0.9.137 +4000.example. 5M IN A 10.0.9.138 +4000.example. 5M IN A 10.0.9.139 +4000.example. 5M IN A 10.0.9.140 +4000.example. 5M IN A 10.0.9.141 +4000.example. 5M IN A 10.0.9.142 +4000.example. 5M IN A 10.0.9.143 +4000.example. 5M IN A 10.0.9.144 +4000.example. 5M IN A 10.0.9.145 +4000.example. 5M IN A 10.0.9.146 +4000.example. 5M IN A 10.0.9.147 +4000.example. 5M IN A 10.0.9.148 +4000.example. 5M IN A 10.0.9.149 +4000.example. 5M IN A 10.0.9.150 +4000.example. 5M IN A 10.0.9.151 +4000.example. 5M IN A 10.0.9.152 +4000.example. 5M IN A 10.0.9.153 +4000.example. 5M IN A 10.0.9.154 +4000.example. 5M IN A 10.0.9.155 +4000.example. 5M IN A 10.0.9.156 +4000.example. 5M IN A 10.0.9.157 +4000.example. 5M IN A 10.0.9.158 +4000.example. 5M IN A 10.0.9.159 +4000.example. 5M IN A 10.0.9.160 +4000.example. 5M IN A 10.0.9.161 +4000.example. 5M IN A 10.0.9.162 +4000.example. 5M IN A 10.0.9.163 +4000.example. 5M IN A 10.0.9.164 +4000.example. 5M IN A 10.0.9.165 +4000.example. 5M IN A 10.0.9.166 +4000.example. 5M IN A 10.0.9.167 +4000.example. 5M IN A 10.0.9.168 +4000.example. 5M IN A 10.0.9.169 +4000.example. 5M IN A 10.0.9.170 +4000.example. 5M IN A 10.0.9.171 +4000.example. 5M IN A 10.0.9.172 +4000.example. 5M IN A 10.0.9.173 +4000.example. 5M IN A 10.0.9.174 +4000.example. 5M IN A 10.0.9.175 +4000.example. 5M IN A 10.0.9.176 +4000.example. 5M IN A 10.0.9.177 +4000.example. 5M IN A 10.0.9.178 +4000.example. 5M IN A 10.0.9.179 +4000.example. 5M IN A 10.0.9.180 +4000.example. 5M IN A 10.0.9.181 +4000.example. 5M IN A 10.0.9.182 +4000.example. 5M IN A 10.0.9.183 +4000.example. 5M IN A 10.0.9.184 +4000.example. 5M IN A 10.0.9.185 +4000.example. 5M IN A 10.0.9.186 +4000.example. 5M IN A 10.0.9.187 +4000.example. 5M IN A 10.0.9.188 +4000.example. 5M IN A 10.0.9.189 +4000.example. 5M IN A 10.0.9.190 +4000.example. 5M IN A 10.0.9.191 +4000.example. 5M IN A 10.0.9.192 +4000.example. 5M IN A 10.0.9.193 +4000.example. 5M IN A 10.0.9.194 +4000.example. 5M IN A 10.0.9.195 +4000.example. 5M IN A 10.0.9.196 +4000.example. 5M IN A 10.0.9.197 +4000.example. 5M IN A 10.0.9.198 +4000.example. 5M IN A 10.0.9.199 +4000.example. 5M IN A 10.0.9.200 +4000.example. 5M IN A 10.0.9.201 +4000.example. 5M IN A 10.0.9.202 +4000.example. 5M IN A 10.0.9.203 +4000.example. 5M IN A 10.0.9.204 +4000.example. 5M IN A 10.0.9.205 +4000.example. 5M IN A 10.0.9.206 +4000.example. 5M IN A 10.0.9.207 +4000.example. 5M IN A 10.0.9.208 +4000.example. 5M IN A 10.0.9.209 +4000.example. 5M IN A 10.0.9.210 +4000.example. 5M IN A 10.0.9.211 +4000.example. 5M IN A 10.0.9.212 +4000.example. 5M IN A 10.0.9.213 +4000.example. 5M IN A 10.0.9.214 +4000.example. 5M IN A 10.0.9.215 +4000.example. 5M IN A 10.0.9.216 +4000.example. 5M IN A 10.0.9.217 +4000.example. 5M IN A 10.0.9.218 +4000.example. 5M IN A 10.0.9.219 +4000.example. 5M IN A 10.0.9.220 +4000.example. 5M IN A 10.0.9.221 +4000.example. 5M IN A 10.0.9.222 +4000.example. 5M IN A 10.0.9.223 +4000.example. 5M IN A 10.0.9.224 +4000.example. 5M IN A 10.0.9.225 +4000.example. 5M IN A 10.0.9.226 +4000.example. 5M IN A 10.0.9.227 +4000.example. 5M IN A 10.0.9.228 +4000.example. 5M IN A 10.0.9.229 +4000.example. 5M IN A 10.0.9.230 +4000.example. 5M IN A 10.0.9.231 +4000.example. 5M IN A 10.0.9.232 +4000.example. 5M IN A 10.0.9.233 +4000.example. 5M IN A 10.0.9.234 +4000.example. 5M IN A 10.0.9.235 +4000.example. 5M IN A 10.0.9.236 +4000.example. 5M IN A 10.0.9.237 +4000.example. 5M IN A 10.0.9.238 +4000.example. 5M IN A 10.0.9.239 +4000.example. 5M IN A 10.0.9.240 +4000.example. 5M IN A 10.0.9.241 +4000.example. 5M IN A 10.0.9.242 +4000.example. 5M IN A 10.0.9.243 +4000.example. 5M IN A 10.0.9.244 +4000.example. 5M IN A 10.0.9.245 +4000.example. 5M IN A 10.0.9.246 +4000.example. 5M IN A 10.0.9.247 +4000.example. 5M IN A 10.0.9.248 +4000.example. 5M IN A 10.0.9.249 +4000.example. 5M IN A 10.0.9.250 +4000.example. 5M IN A 10.0.9.251 +4000.example. 5M IN A 10.0.9.252 +4000.example. 5M IN A 10.0.9.253 +4000.example. 5M IN A 10.0.9.254 +4000.example. 5M IN A 10.0.9.255 +4000.example. 5M IN A 10.0.10.0 +4000.example. 5M IN A 10.0.10.1 +4000.example. 5M IN A 10.0.10.2 +4000.example. 5M IN A 10.0.10.3 +4000.example. 5M IN A 10.0.10.4 +4000.example. 5M IN A 10.0.10.5 +4000.example. 5M IN A 10.0.10.6 +4000.example. 5M IN A 10.0.10.7 +4000.example. 5M IN A 10.0.10.8 +4000.example. 5M IN A 10.0.10.9 +4000.example. 5M IN A 10.0.10.10 +4000.example. 5M IN A 10.0.10.11 +4000.example. 5M IN A 10.0.10.12 +4000.example. 5M IN A 10.0.10.13 +4000.example. 5M IN A 10.0.10.14 +4000.example. 5M IN A 10.0.10.15 +4000.example. 5M IN A 10.0.10.16 +4000.example. 5M IN A 10.0.10.17 +4000.example. 5M IN A 10.0.10.18 +4000.example. 5M IN A 10.0.10.19 +4000.example. 5M IN A 10.0.10.20 +4000.example. 5M IN A 10.0.10.21 +4000.example. 5M IN A 10.0.10.22 +4000.example. 5M IN A 10.0.10.23 +4000.example. 5M IN A 10.0.10.24 +4000.example. 5M IN A 10.0.10.25 +4000.example. 5M IN A 10.0.10.26 +4000.example. 5M IN A 10.0.10.27 +4000.example. 5M IN A 10.0.10.28 +4000.example. 5M IN A 10.0.10.29 +4000.example. 5M IN A 10.0.10.30 +4000.example. 5M IN A 10.0.10.31 +4000.example. 5M IN A 10.0.10.32 +4000.example. 5M IN A 10.0.10.33 +4000.example. 5M IN A 10.0.10.34 +4000.example. 5M IN A 10.0.10.35 +4000.example. 5M IN A 10.0.10.36 +4000.example. 5M IN A 10.0.10.37 +4000.example. 5M IN A 10.0.10.38 +4000.example. 5M IN A 10.0.10.39 +4000.example. 5M IN A 10.0.10.40 +4000.example. 5M IN A 10.0.10.41 +4000.example. 5M IN A 10.0.10.42 +4000.example. 5M IN A 10.0.10.43 +4000.example. 5M IN A 10.0.10.44 +4000.example. 5M IN A 10.0.10.45 +4000.example. 5M IN A 10.0.10.46 +4000.example. 5M IN A 10.0.10.47 +4000.example. 5M IN A 10.0.10.48 +4000.example. 5M IN A 10.0.10.49 +4000.example. 5M IN A 10.0.10.50 +4000.example. 5M IN A 10.0.10.51 +4000.example. 5M IN A 10.0.10.52 +4000.example. 5M IN A 10.0.10.53 +4000.example. 5M IN A 10.0.10.54 +4000.example. 5M IN A 10.0.10.55 +4000.example. 5M IN A 10.0.10.56 +4000.example. 5M IN A 10.0.10.57 +4000.example. 5M IN A 10.0.10.58 +4000.example. 5M IN A 10.0.10.59 +4000.example. 5M IN A 10.0.10.60 +4000.example. 5M IN A 10.0.10.61 +4000.example. 5M IN A 10.0.10.62 +4000.example. 5M IN A 10.0.10.63 +4000.example. 5M IN A 10.0.10.64 +4000.example. 5M IN A 10.0.10.65 +4000.example. 5M IN A 10.0.10.66 +4000.example. 5M IN A 10.0.10.67 +4000.example. 5M IN A 10.0.10.68 +4000.example. 5M IN A 10.0.10.69 +4000.example. 5M IN A 10.0.10.70 +4000.example. 5M IN A 10.0.10.71 +4000.example. 5M IN A 10.0.10.72 +4000.example. 5M IN A 10.0.10.73 +4000.example. 5M IN A 10.0.10.74 +4000.example. 5M IN A 10.0.10.75 +4000.example. 5M IN A 10.0.10.76 +4000.example. 5M IN A 10.0.10.77 +4000.example. 5M IN A 10.0.10.78 +4000.example. 5M IN A 10.0.10.79 +4000.example. 5M IN A 10.0.10.80 +4000.example. 5M IN A 10.0.10.81 +4000.example. 5M IN A 10.0.10.82 +4000.example. 5M IN A 10.0.10.83 +4000.example. 5M IN A 10.0.10.84 +4000.example. 5M IN A 10.0.10.85 +4000.example. 5M IN A 10.0.10.86 +4000.example. 5M IN A 10.0.10.87 +4000.example. 5M IN A 10.0.10.88 +4000.example. 5M IN A 10.0.10.89 +4000.example. 5M IN A 10.0.10.90 +4000.example. 5M IN A 10.0.10.91 +4000.example. 5M IN A 10.0.10.92 +4000.example. 5M IN A 10.0.10.93 +4000.example. 5M IN A 10.0.10.94 +4000.example. 5M IN A 10.0.10.95 +4000.example. 5M IN A 10.0.10.96 +4000.example. 5M IN A 10.0.10.97 +4000.example. 5M IN A 10.0.10.98 +4000.example. 5M IN A 10.0.10.99 +4000.example. 5M IN A 10.0.10.100 +4000.example. 5M IN A 10.0.10.101 +4000.example. 5M IN A 10.0.10.102 +4000.example. 5M IN A 10.0.10.103 +4000.example. 5M IN A 10.0.10.104 +4000.example. 5M IN A 10.0.10.105 +4000.example. 5M IN A 10.0.10.106 +4000.example. 5M IN A 10.0.10.107 +4000.example. 5M IN A 10.0.10.108 +4000.example. 5M IN A 10.0.10.109 +4000.example. 5M IN A 10.0.10.110 +4000.example. 5M IN A 10.0.10.111 +4000.example. 5M IN A 10.0.10.112 +4000.example. 5M IN A 10.0.10.113 +4000.example. 5M IN A 10.0.10.114 +4000.example. 5M IN A 10.0.10.115 +4000.example. 5M IN A 10.0.10.116 +4000.example. 5M IN A 10.0.10.117 +4000.example. 5M IN A 10.0.10.118 +4000.example. 5M IN A 10.0.10.119 +4000.example. 5M IN A 10.0.10.120 +4000.example. 5M IN A 10.0.10.121 +4000.example. 5M IN A 10.0.10.122 +4000.example. 5M IN A 10.0.10.123 +4000.example. 5M IN A 10.0.10.124 +4000.example. 5M IN A 10.0.10.125 +4000.example. 5M IN A 10.0.10.126 +4000.example. 5M IN A 10.0.10.127 +4000.example. 5M IN A 10.0.10.128 +4000.example. 5M IN A 10.0.10.129 +4000.example. 5M IN A 10.0.10.130 +4000.example. 5M IN A 10.0.10.131 +4000.example. 5M IN A 10.0.10.132 +4000.example. 5M IN A 10.0.10.133 +4000.example. 5M IN A 10.0.10.134 +4000.example. 5M IN A 10.0.10.135 +4000.example. 5M IN A 10.0.10.136 +4000.example. 5M IN A 10.0.10.137 +4000.example. 5M IN A 10.0.10.138 +4000.example. 5M IN A 10.0.10.139 +4000.example. 5M IN A 10.0.10.140 +4000.example. 5M IN A 10.0.10.141 +4000.example. 5M IN A 10.0.10.142 +4000.example. 5M IN A 10.0.10.143 +4000.example. 5M IN A 10.0.10.144 +4000.example. 5M IN A 10.0.10.145 +4000.example. 5M IN A 10.0.10.146 +4000.example. 5M IN A 10.0.10.147 +4000.example. 5M IN A 10.0.10.148 +4000.example. 5M IN A 10.0.10.149 +4000.example. 5M IN A 10.0.10.150 +4000.example. 5M IN A 10.0.10.151 +4000.example. 5M IN A 10.0.10.152 +4000.example. 5M IN A 10.0.10.153 +4000.example. 5M IN A 10.0.10.154 +4000.example. 5M IN A 10.0.10.155 +4000.example. 5M IN A 10.0.10.156 +4000.example. 5M IN A 10.0.10.157 +4000.example. 5M IN A 10.0.10.158 +4000.example. 5M IN A 10.0.10.159 +4000.example. 5M IN A 10.0.10.160 +4000.example. 5M IN A 10.0.10.161 +4000.example. 5M IN A 10.0.10.162 +4000.example. 5M IN A 10.0.10.163 +4000.example. 5M IN A 10.0.10.164 +4000.example. 5M IN A 10.0.10.165 +4000.example. 5M IN A 10.0.10.166 +4000.example. 5M IN A 10.0.10.167 +4000.example. 5M IN A 10.0.10.168 +4000.example. 5M IN A 10.0.10.169 +4000.example. 5M IN A 10.0.10.170 +4000.example. 5M IN A 10.0.10.171 +4000.example. 5M IN A 10.0.10.172 +4000.example. 5M IN A 10.0.10.173 +4000.example. 5M IN A 10.0.10.174 +4000.example. 5M IN A 10.0.10.175 +4000.example. 5M IN A 10.0.10.176 +4000.example. 5M IN A 10.0.10.177 +4000.example. 5M IN A 10.0.10.178 +4000.example. 5M IN A 10.0.10.179 +4000.example. 5M IN A 10.0.10.180 +4000.example. 5M IN A 10.0.10.181 +4000.example. 5M IN A 10.0.10.182 +4000.example. 5M IN A 10.0.10.183 +4000.example. 5M IN A 10.0.10.184 +4000.example. 5M IN A 10.0.10.185 +4000.example. 5M IN A 10.0.10.186 +4000.example. 5M IN A 10.0.10.187 +4000.example. 5M IN A 10.0.10.188 +4000.example. 5M IN A 10.0.10.189 +4000.example. 5M IN A 10.0.10.190 +4000.example. 5M IN A 10.0.10.191 +4000.example. 5M IN A 10.0.10.192 +4000.example. 5M IN A 10.0.10.193 +4000.example. 5M IN A 10.0.10.194 +4000.example. 5M IN A 10.0.10.195 +4000.example. 5M IN A 10.0.10.196 +4000.example. 5M IN A 10.0.10.197 +4000.example. 5M IN A 10.0.10.198 +4000.example. 5M IN A 10.0.10.199 +4000.example. 5M IN A 10.0.10.200 +4000.example. 5M IN A 10.0.10.201 +4000.example. 5M IN A 10.0.10.202 +4000.example. 5M IN A 10.0.10.203 +4000.example. 5M IN A 10.0.10.204 +4000.example. 5M IN A 10.0.10.205 +4000.example. 5M IN A 10.0.10.206 +4000.example. 5M IN A 10.0.10.207 +4000.example. 5M IN A 10.0.10.208 +4000.example. 5M IN A 10.0.10.209 +4000.example. 5M IN A 10.0.10.210 +4000.example. 5M IN A 10.0.10.211 +4000.example. 5M IN A 10.0.10.212 +4000.example. 5M IN A 10.0.10.213 +4000.example. 5M IN A 10.0.10.214 +4000.example. 5M IN A 10.0.10.215 +4000.example. 5M IN A 10.0.10.216 +4000.example. 5M IN A 10.0.10.217 +4000.example. 5M IN A 10.0.10.218 +4000.example. 5M IN A 10.0.10.219 +4000.example. 5M IN A 10.0.10.220 +4000.example. 5M IN A 10.0.10.221 +4000.example. 5M IN A 10.0.10.222 +4000.example. 5M IN A 10.0.10.223 +4000.example. 5M IN A 10.0.10.224 +4000.example. 5M IN A 10.0.10.225 +4000.example. 5M IN A 10.0.10.226 +4000.example. 5M IN A 10.0.10.227 +4000.example. 5M IN A 10.0.10.228 +4000.example. 5M IN A 10.0.10.229 +4000.example. 5M IN A 10.0.10.230 +4000.example. 5M IN A 10.0.10.231 +4000.example. 5M IN A 10.0.10.232 +4000.example. 5M IN A 10.0.10.233 +4000.example. 5M IN A 10.0.10.234 +4000.example. 5M IN A 10.0.10.235 +4000.example. 5M IN A 10.0.10.236 +4000.example. 5M IN A 10.0.10.237 +4000.example. 5M IN A 10.0.10.238 +4000.example. 5M IN A 10.0.10.239 +4000.example. 5M IN A 10.0.10.240 +4000.example. 5M IN A 10.0.10.241 +4000.example. 5M IN A 10.0.10.242 +4000.example. 5M IN A 10.0.10.243 +4000.example. 5M IN A 10.0.10.244 +4000.example. 5M IN A 10.0.10.245 +4000.example. 5M IN A 10.0.10.246 +4000.example. 5M IN A 10.0.10.247 +4000.example. 5M IN A 10.0.10.248 +4000.example. 5M IN A 10.0.10.249 +4000.example. 5M IN A 10.0.10.250 +4000.example. 5M IN A 10.0.10.251 +4000.example. 5M IN A 10.0.10.252 +4000.example. 5M IN A 10.0.10.253 +4000.example. 5M IN A 10.0.10.254 +4000.example. 5M IN A 10.0.10.255 +4000.example. 5M IN A 10.0.11.0 +4000.example. 5M IN A 10.0.11.1 +4000.example. 5M IN A 10.0.11.2 +4000.example. 5M IN A 10.0.11.3 +4000.example. 5M IN A 10.0.11.4 +4000.example. 5M IN A 10.0.11.5 +4000.example. 5M IN A 10.0.11.6 +4000.example. 5M IN A 10.0.11.7 +4000.example. 5M IN A 10.0.11.8 +4000.example. 5M IN A 10.0.11.9 +4000.example. 5M IN A 10.0.11.10 +4000.example. 5M IN A 10.0.11.11 +4000.example. 5M IN A 10.0.11.12 +4000.example. 5M IN A 10.0.11.13 +4000.example. 5M IN A 10.0.11.14 +4000.example. 5M IN A 10.0.11.15 +4000.example. 5M IN A 10.0.11.16 +4000.example. 5M IN A 10.0.11.17 +4000.example. 5M IN A 10.0.11.18 +4000.example. 5M IN A 10.0.11.19 +4000.example. 5M IN A 10.0.11.20 +4000.example. 5M IN A 10.0.11.21 +4000.example. 5M IN A 10.0.11.22 +4000.example. 5M IN A 10.0.11.23 +4000.example. 5M IN A 10.0.11.24 +4000.example. 5M IN A 10.0.11.25 +4000.example. 5M IN A 10.0.11.26 +4000.example. 5M IN A 10.0.11.27 +4000.example. 5M IN A 10.0.11.28 +4000.example. 5M IN A 10.0.11.29 +4000.example. 5M IN A 10.0.11.30 +4000.example. 5M IN A 10.0.11.31 +4000.example. 5M IN A 10.0.11.32 +4000.example. 5M IN A 10.0.11.33 +4000.example. 5M IN A 10.0.11.34 +4000.example. 5M IN A 10.0.11.35 +4000.example. 5M IN A 10.0.11.36 +4000.example. 5M IN A 10.0.11.37 +4000.example. 5M IN A 10.0.11.38 +4000.example. 5M IN A 10.0.11.39 +4000.example. 5M IN A 10.0.11.40 +4000.example. 5M IN A 10.0.11.41 +4000.example. 5M IN A 10.0.11.42 +4000.example. 5M IN A 10.0.11.43 +4000.example. 5M IN A 10.0.11.44 +4000.example. 5M IN A 10.0.11.45 +4000.example. 5M IN A 10.0.11.46 +4000.example. 5M IN A 10.0.11.47 +4000.example. 5M IN A 10.0.11.48 +4000.example. 5M IN A 10.0.11.49 +4000.example. 5M IN A 10.0.11.50 +4000.example. 5M IN A 10.0.11.51 +4000.example. 5M IN A 10.0.11.52 +4000.example. 5M IN A 10.0.11.53 +4000.example. 5M IN A 10.0.11.54 +4000.example. 5M IN A 10.0.11.55 +4000.example. 5M IN A 10.0.11.56 +4000.example. 5M IN A 10.0.11.57 +4000.example. 5M IN A 10.0.11.58 +4000.example. 5M IN A 10.0.11.59 +4000.example. 5M IN A 10.0.11.60 +4000.example. 5M IN A 10.0.11.61 +4000.example. 5M IN A 10.0.11.62 +4000.example. 5M IN A 10.0.11.63 +4000.example. 5M IN A 10.0.11.64 +4000.example. 5M IN A 10.0.11.65 +4000.example. 5M IN A 10.0.11.66 +4000.example. 5M IN A 10.0.11.67 +4000.example. 5M IN A 10.0.11.68 +4000.example. 5M IN A 10.0.11.69 +4000.example. 5M IN A 10.0.11.70 +4000.example. 5M IN A 10.0.11.71 +4000.example. 5M IN A 10.0.11.72 +4000.example. 5M IN A 10.0.11.73 +4000.example. 5M IN A 10.0.11.74 +4000.example. 5M IN A 10.0.11.75 +4000.example. 5M IN A 10.0.11.76 +4000.example. 5M IN A 10.0.11.77 +4000.example. 5M IN A 10.0.11.78 +4000.example. 5M IN A 10.0.11.79 +4000.example. 5M IN A 10.0.11.80 +4000.example. 5M IN A 10.0.11.81 +4000.example. 5M IN A 10.0.11.82 +4000.example. 5M IN A 10.0.11.83 +4000.example. 5M IN A 10.0.11.84 +4000.example. 5M IN A 10.0.11.85 +4000.example. 5M IN A 10.0.11.86 +4000.example. 5M IN A 10.0.11.87 +4000.example. 5M IN A 10.0.11.88 +4000.example. 5M IN A 10.0.11.89 +4000.example. 5M IN A 10.0.11.90 +4000.example. 5M IN A 10.0.11.91 +4000.example. 5M IN A 10.0.11.92 +4000.example. 5M IN A 10.0.11.93 +4000.example. 5M IN A 10.0.11.94 +4000.example. 5M IN A 10.0.11.95 +4000.example. 5M IN A 10.0.11.96 +4000.example. 5M IN A 10.0.11.97 +4000.example. 5M IN A 10.0.11.98 +4000.example. 5M IN A 10.0.11.99 +4000.example. 5M IN A 10.0.11.100 +4000.example. 5M IN A 10.0.11.101 +4000.example. 5M IN A 10.0.11.102 +4000.example. 5M IN A 10.0.11.103 +4000.example. 5M IN A 10.0.11.104 +4000.example. 5M IN A 10.0.11.105 +4000.example. 5M IN A 10.0.11.106 +4000.example. 5M IN A 10.0.11.107 +4000.example. 5M IN A 10.0.11.108 +4000.example. 5M IN A 10.0.11.109 +4000.example. 5M IN A 10.0.11.110 +4000.example. 5M IN A 10.0.11.111 +4000.example. 5M IN A 10.0.11.112 +4000.example. 5M IN A 10.0.11.113 +4000.example. 5M IN A 10.0.11.114 +4000.example. 5M IN A 10.0.11.115 +4000.example. 5M IN A 10.0.11.116 +4000.example. 5M IN A 10.0.11.117 +4000.example. 5M IN A 10.0.11.118 +4000.example. 5M IN A 10.0.11.119 +4000.example. 5M IN A 10.0.11.120 +4000.example. 5M IN A 10.0.11.121 +4000.example. 5M IN A 10.0.11.122 +4000.example. 5M IN A 10.0.11.123 +4000.example. 5M IN A 10.0.11.124 +4000.example. 5M IN A 10.0.11.125 +4000.example. 5M IN A 10.0.11.126 +4000.example. 5M IN A 10.0.11.127 +4000.example. 5M IN A 10.0.11.128 +4000.example. 5M IN A 10.0.11.129 +4000.example. 5M IN A 10.0.11.130 +4000.example. 5M IN A 10.0.11.131 +4000.example. 5M IN A 10.0.11.132 +4000.example. 5M IN A 10.0.11.133 +4000.example. 5M IN A 10.0.11.134 +4000.example. 5M IN A 10.0.11.135 +4000.example. 5M IN A 10.0.11.136 +4000.example. 5M IN A 10.0.11.137 +4000.example. 5M IN A 10.0.11.138 +4000.example. 5M IN A 10.0.11.139 +4000.example. 5M IN A 10.0.11.140 +4000.example. 5M IN A 10.0.11.141 +4000.example. 5M IN A 10.0.11.142 +4000.example. 5M IN A 10.0.11.143 +4000.example. 5M IN A 10.0.11.144 +4000.example. 5M IN A 10.0.11.145 +4000.example. 5M IN A 10.0.11.146 +4000.example. 5M IN A 10.0.11.147 +4000.example. 5M IN A 10.0.11.148 +4000.example. 5M IN A 10.0.11.149 +4000.example. 5M IN A 10.0.11.150 +4000.example. 5M IN A 10.0.11.151 +4000.example. 5M IN A 10.0.11.152 +4000.example. 5M IN A 10.0.11.153 +4000.example. 5M IN A 10.0.11.154 +4000.example. 5M IN A 10.0.11.155 +4000.example. 5M IN A 10.0.11.156 +4000.example. 5M IN A 10.0.11.157 +4000.example. 5M IN A 10.0.11.158 +4000.example. 5M IN A 10.0.11.159 +4000.example. 5M IN A 10.0.11.160 +4000.example. 5M IN A 10.0.11.161 +4000.example. 5M IN A 10.0.11.162 +4000.example. 5M IN A 10.0.11.163 +4000.example. 5M IN A 10.0.11.164 +4000.example. 5M IN A 10.0.11.165 +4000.example. 5M IN A 10.0.11.166 +4000.example. 5M IN A 10.0.11.167 +4000.example. 5M IN A 10.0.11.168 +4000.example. 5M IN A 10.0.11.169 +4000.example. 5M IN A 10.0.11.170 +4000.example. 5M IN A 10.0.11.171 +4000.example. 5M IN A 10.0.11.172 +4000.example. 5M IN A 10.0.11.173 +4000.example. 5M IN A 10.0.11.174 +4000.example. 5M IN A 10.0.11.175 +4000.example. 5M IN A 10.0.11.176 +4000.example. 5M IN A 10.0.11.177 +4000.example. 5M IN A 10.0.11.178 +4000.example. 5M IN A 10.0.11.179 +4000.example. 5M IN A 10.0.11.180 +4000.example. 5M IN A 10.0.11.181 +4000.example. 5M IN A 10.0.11.182 +4000.example. 5M IN A 10.0.11.183 +4000.example. 5M IN A 10.0.11.184 +4000.example. 5M IN A 10.0.11.185 +4000.example. 5M IN A 10.0.11.186 +4000.example. 5M IN A 10.0.11.187 +4000.example. 5M IN A 10.0.11.188 +4000.example. 5M IN A 10.0.11.189 +4000.example. 5M IN A 10.0.11.190 +4000.example. 5M IN A 10.0.11.191 +4000.example. 5M IN A 10.0.11.192 +4000.example. 5M IN A 10.0.11.193 +4000.example. 5M IN A 10.0.11.194 +4000.example. 5M IN A 10.0.11.195 +4000.example. 5M IN A 10.0.11.196 +4000.example. 5M IN A 10.0.11.197 +4000.example. 5M IN A 10.0.11.198 +4000.example. 5M IN A 10.0.11.199 +4000.example. 5M IN A 10.0.11.200 +4000.example. 5M IN A 10.0.11.201 +4000.example. 5M IN A 10.0.11.202 +4000.example. 5M IN A 10.0.11.203 +4000.example. 5M IN A 10.0.11.204 +4000.example. 5M IN A 10.0.11.205 +4000.example. 5M IN A 10.0.11.206 +4000.example. 5M IN A 10.0.11.207 +4000.example. 5M IN A 10.0.11.208 +4000.example. 5M IN A 10.0.11.209 +4000.example. 5M IN A 10.0.11.210 +4000.example. 5M IN A 10.0.11.211 +4000.example. 5M IN A 10.0.11.212 +4000.example. 5M IN A 10.0.11.213 +4000.example. 5M IN A 10.0.11.214 +4000.example. 5M IN A 10.0.11.215 +4000.example. 5M IN A 10.0.11.216 +4000.example. 5M IN A 10.0.11.217 +4000.example. 5M IN A 10.0.11.218 +4000.example. 5M IN A 10.0.11.219 +4000.example. 5M IN A 10.0.11.220 +4000.example. 5M IN A 10.0.11.221 +4000.example. 5M IN A 10.0.11.222 +4000.example. 5M IN A 10.0.11.223 +4000.example. 5M IN A 10.0.11.224 +4000.example. 5M IN A 10.0.11.225 +4000.example. 5M IN A 10.0.11.226 +4000.example. 5M IN A 10.0.11.227 +4000.example. 5M IN A 10.0.11.228 +4000.example. 5M IN A 10.0.11.229 +4000.example. 5M IN A 10.0.11.230 +4000.example. 5M IN A 10.0.11.231 +4000.example. 5M IN A 10.0.11.232 +4000.example. 5M IN A 10.0.11.233 +4000.example. 5M IN A 10.0.11.234 +4000.example. 5M IN A 10.0.11.235 +4000.example. 5M IN A 10.0.11.236 +4000.example. 5M IN A 10.0.11.237 +4000.example. 5M IN A 10.0.11.238 +4000.example. 5M IN A 10.0.11.239 +4000.example. 5M IN A 10.0.11.240 +4000.example. 5M IN A 10.0.11.241 +4000.example. 5M IN A 10.0.11.242 +4000.example. 5M IN A 10.0.11.243 +4000.example. 5M IN A 10.0.11.244 +4000.example. 5M IN A 10.0.11.245 +4000.example. 5M IN A 10.0.11.246 +4000.example. 5M IN A 10.0.11.247 +4000.example. 5M IN A 10.0.11.248 +4000.example. 5M IN A 10.0.11.249 +4000.example. 5M IN A 10.0.11.250 +4000.example. 5M IN A 10.0.11.251 +4000.example. 5M IN A 10.0.11.252 +4000.example. 5M IN A 10.0.11.253 +4000.example. 5M IN A 10.0.11.254 +4000.example. 5M IN A 10.0.11.255 +4000.example. 5M IN A 10.0.12.0 +4000.example. 5M IN A 10.0.12.1 +4000.example. 5M IN A 10.0.12.2 +4000.example. 5M IN A 10.0.12.3 +4000.example. 5M IN A 10.0.12.4 +4000.example. 5M IN A 10.0.12.5 +4000.example. 5M IN A 10.0.12.6 +4000.example. 5M IN A 10.0.12.7 +4000.example. 5M IN A 10.0.12.8 +4000.example. 5M IN A 10.0.12.9 +4000.example. 5M IN A 10.0.12.10 +4000.example. 5M IN A 10.0.12.11 +4000.example. 5M IN A 10.0.12.12 +4000.example. 5M IN A 10.0.12.13 +4000.example. 5M IN A 10.0.12.14 +4000.example. 5M IN A 10.0.12.15 +4000.example. 5M IN A 10.0.12.16 +4000.example. 5M IN A 10.0.12.17 +4000.example. 5M IN A 10.0.12.18 +4000.example. 5M IN A 10.0.12.19 +4000.example. 5M IN A 10.0.12.20 +4000.example. 5M IN A 10.0.12.21 +4000.example. 5M IN A 10.0.12.22 +4000.example. 5M IN A 10.0.12.23 +4000.example. 5M IN A 10.0.12.24 +4000.example. 5M IN A 10.0.12.25 +4000.example. 5M IN A 10.0.12.26 +4000.example. 5M IN A 10.0.12.27 +4000.example. 5M IN A 10.0.12.28 +4000.example. 5M IN A 10.0.12.29 +4000.example. 5M IN A 10.0.12.30 +4000.example. 5M IN A 10.0.12.31 +4000.example. 5M IN A 10.0.12.32 +4000.example. 5M IN A 10.0.12.33 +4000.example. 5M IN A 10.0.12.34 +4000.example. 5M IN A 10.0.12.35 +4000.example. 5M IN A 10.0.12.36 +4000.example. 5M IN A 10.0.12.37 +4000.example. 5M IN A 10.0.12.38 +4000.example. 5M IN A 10.0.12.39 +4000.example. 5M IN A 10.0.12.40 +4000.example. 5M IN A 10.0.12.41 +4000.example. 5M IN A 10.0.12.42 +4000.example. 5M IN A 10.0.12.43 +4000.example. 5M IN A 10.0.12.44 +4000.example. 5M IN A 10.0.12.45 +4000.example. 5M IN A 10.0.12.46 +4000.example. 5M IN A 10.0.12.47 +4000.example. 5M IN A 10.0.12.48 +4000.example. 5M IN A 10.0.12.49 +4000.example. 5M IN A 10.0.12.50 +4000.example. 5M IN A 10.0.12.51 +4000.example. 5M IN A 10.0.12.52 +4000.example. 5M IN A 10.0.12.53 +4000.example. 5M IN A 10.0.12.54 +4000.example. 5M IN A 10.0.12.55 +4000.example. 5M IN A 10.0.12.56 +4000.example. 5M IN A 10.0.12.57 +4000.example. 5M IN A 10.0.12.58 +4000.example. 5M IN A 10.0.12.59 +4000.example. 5M IN A 10.0.12.60 +4000.example. 5M IN A 10.0.12.61 +4000.example. 5M IN A 10.0.12.62 +4000.example. 5M IN A 10.0.12.63 +4000.example. 5M IN A 10.0.12.64 +4000.example. 5M IN A 10.0.12.65 +4000.example. 5M IN A 10.0.12.66 +4000.example. 5M IN A 10.0.12.67 +4000.example. 5M IN A 10.0.12.68 +4000.example. 5M IN A 10.0.12.69 +4000.example. 5M IN A 10.0.12.70 +4000.example. 5M IN A 10.0.12.71 +4000.example. 5M IN A 10.0.12.72 +4000.example. 5M IN A 10.0.12.73 +4000.example. 5M IN A 10.0.12.74 +4000.example. 5M IN A 10.0.12.75 +4000.example. 5M IN A 10.0.12.76 +4000.example. 5M IN A 10.0.12.77 +4000.example. 5M IN A 10.0.12.78 +4000.example. 5M IN A 10.0.12.79 +4000.example. 5M IN A 10.0.12.80 +4000.example. 5M IN A 10.0.12.81 +4000.example. 5M IN A 10.0.12.82 +4000.example. 5M IN A 10.0.12.83 +4000.example. 5M IN A 10.0.12.84 +4000.example. 5M IN A 10.0.12.85 +4000.example. 5M IN A 10.0.12.86 +4000.example. 5M IN A 10.0.12.87 +4000.example. 5M IN A 10.0.12.88 +4000.example. 5M IN A 10.0.12.89 +4000.example. 5M IN A 10.0.12.90 +4000.example. 5M IN A 10.0.12.91 +4000.example. 5M IN A 10.0.12.92 +4000.example. 5M IN A 10.0.12.93 +4000.example. 5M IN A 10.0.12.94 +4000.example. 5M IN A 10.0.12.95 +4000.example. 5M IN A 10.0.12.96 +4000.example. 5M IN A 10.0.12.97 +4000.example. 5M IN A 10.0.12.98 +4000.example. 5M IN A 10.0.12.99 +4000.example. 5M IN A 10.0.12.100 +4000.example. 5M IN A 10.0.12.101 +4000.example. 5M IN A 10.0.12.102 +4000.example. 5M IN A 10.0.12.103 +4000.example. 5M IN A 10.0.12.104 +4000.example. 5M IN A 10.0.12.105 +4000.example. 5M IN A 10.0.12.106 +4000.example. 5M IN A 10.0.12.107 +4000.example. 5M IN A 10.0.12.108 +4000.example. 5M IN A 10.0.12.109 +4000.example. 5M IN A 10.0.12.110 +4000.example. 5M IN A 10.0.12.111 +4000.example. 5M IN A 10.0.12.112 +4000.example. 5M IN A 10.0.12.113 +4000.example. 5M IN A 10.0.12.114 +4000.example. 5M IN A 10.0.12.115 +4000.example. 5M IN A 10.0.12.116 +4000.example. 5M IN A 10.0.12.117 +4000.example. 5M IN A 10.0.12.118 +4000.example. 5M IN A 10.0.12.119 +4000.example. 5M IN A 10.0.12.120 +4000.example. 5M IN A 10.0.12.121 +4000.example. 5M IN A 10.0.12.122 +4000.example. 5M IN A 10.0.12.123 +4000.example. 5M IN A 10.0.12.124 +4000.example. 5M IN A 10.0.12.125 +4000.example. 5M IN A 10.0.12.126 +4000.example. 5M IN A 10.0.12.127 +4000.example. 5M IN A 10.0.12.128 +4000.example. 5M IN A 10.0.12.129 +4000.example. 5M IN A 10.0.12.130 +4000.example. 5M IN A 10.0.12.131 +4000.example. 5M IN A 10.0.12.132 +4000.example. 5M IN A 10.0.12.133 +4000.example. 5M IN A 10.0.12.134 +4000.example. 5M IN A 10.0.12.135 +4000.example. 5M IN A 10.0.12.136 +4000.example. 5M IN A 10.0.12.137 +4000.example. 5M IN A 10.0.12.138 +4000.example. 5M IN A 10.0.12.139 +4000.example. 5M IN A 10.0.12.140 +4000.example. 5M IN A 10.0.12.141 +4000.example. 5M IN A 10.0.12.142 +4000.example. 5M IN A 10.0.12.143 +4000.example. 5M IN A 10.0.12.144 +4000.example. 5M IN A 10.0.12.145 +4000.example. 5M IN A 10.0.12.146 +4000.example. 5M IN A 10.0.12.147 +4000.example. 5M IN A 10.0.12.148 +4000.example. 5M IN A 10.0.12.149 +4000.example. 5M IN A 10.0.12.150 +4000.example. 5M IN A 10.0.12.151 +4000.example. 5M IN A 10.0.12.152 +4000.example. 5M IN A 10.0.12.153 +4000.example. 5M IN A 10.0.12.154 +4000.example. 5M IN A 10.0.12.155 +4000.example. 5M IN A 10.0.12.156 +4000.example. 5M IN A 10.0.12.157 +4000.example. 5M IN A 10.0.12.158 +4000.example. 5M IN A 10.0.12.159 +4000.example. 5M IN A 10.0.12.160 +4000.example. 5M IN A 10.0.12.161 +4000.example. 5M IN A 10.0.12.162 +4000.example. 5M IN A 10.0.12.163 +4000.example. 5M IN A 10.0.12.164 +4000.example. 5M IN A 10.0.12.165 +4000.example. 5M IN A 10.0.12.166 +4000.example. 5M IN A 10.0.12.167 +4000.example. 5M IN A 10.0.12.168 +4000.example. 5M IN A 10.0.12.169 +4000.example. 5M IN A 10.0.12.170 +4000.example. 5M IN A 10.0.12.171 +4000.example. 5M IN A 10.0.12.172 +4000.example. 5M IN A 10.0.12.173 +4000.example. 5M IN A 10.0.12.174 +4000.example. 5M IN A 10.0.12.175 +4000.example. 5M IN A 10.0.12.176 +4000.example. 5M IN A 10.0.12.177 +4000.example. 5M IN A 10.0.12.178 +4000.example. 5M IN A 10.0.12.179 +4000.example. 5M IN A 10.0.12.180 +4000.example. 5M IN A 10.0.12.181 +4000.example. 5M IN A 10.0.12.182 +4000.example. 5M IN A 10.0.12.183 +4000.example. 5M IN A 10.0.12.184 +4000.example. 5M IN A 10.0.12.185 +4000.example. 5M IN A 10.0.12.186 +4000.example. 5M IN A 10.0.12.187 +4000.example. 5M IN A 10.0.12.188 +4000.example. 5M IN A 10.0.12.189 +4000.example. 5M IN A 10.0.12.190 +4000.example. 5M IN A 10.0.12.191 +4000.example. 5M IN A 10.0.12.192 +4000.example. 5M IN A 10.0.12.193 +4000.example. 5M IN A 10.0.12.194 +4000.example. 5M IN A 10.0.12.195 +4000.example. 5M IN A 10.0.12.196 +4000.example. 5M IN A 10.0.12.197 +4000.example. 5M IN A 10.0.12.198 +4000.example. 5M IN A 10.0.12.199 +4000.example. 5M IN A 10.0.12.200 +4000.example. 5M IN A 10.0.12.201 +4000.example. 5M IN A 10.0.12.202 +4000.example. 5M IN A 10.0.12.203 +4000.example. 5M IN A 10.0.12.204 +4000.example. 5M IN A 10.0.12.205 +4000.example. 5M IN A 10.0.12.206 +4000.example. 5M IN A 10.0.12.207 +4000.example. 5M IN A 10.0.12.208 +4000.example. 5M IN A 10.0.12.209 +4000.example. 5M IN A 10.0.12.210 +4000.example. 5M IN A 10.0.12.211 +4000.example. 5M IN A 10.0.12.212 +4000.example. 5M IN A 10.0.12.213 +4000.example. 5M IN A 10.0.12.214 +4000.example. 5M IN A 10.0.12.215 +4000.example. 5M IN A 10.0.12.216 +4000.example. 5M IN A 10.0.12.217 +4000.example. 5M IN A 10.0.12.218 +4000.example. 5M IN A 10.0.12.219 +4000.example. 5M IN A 10.0.12.220 +4000.example. 5M IN A 10.0.12.221 +4000.example. 5M IN A 10.0.12.222 +4000.example. 5M IN A 10.0.12.223 +4000.example. 5M IN A 10.0.12.224 +4000.example. 5M IN A 10.0.12.225 +4000.example. 5M IN A 10.0.12.226 +4000.example. 5M IN A 10.0.12.227 +4000.example. 5M IN A 10.0.12.228 +4000.example. 5M IN A 10.0.12.229 +4000.example. 5M IN A 10.0.12.230 +4000.example. 5M IN A 10.0.12.231 +4000.example. 5M IN A 10.0.12.232 +4000.example. 5M IN A 10.0.12.233 +4000.example. 5M IN A 10.0.12.234 +4000.example. 5M IN A 10.0.12.235 +4000.example. 5M IN A 10.0.12.236 +4000.example. 5M IN A 10.0.12.237 +4000.example. 5M IN A 10.0.12.238 +4000.example. 5M IN A 10.0.12.239 +4000.example. 5M IN A 10.0.12.240 +4000.example. 5M IN A 10.0.12.241 +4000.example. 5M IN A 10.0.12.242 +4000.example. 5M IN A 10.0.12.243 +4000.example. 5M IN A 10.0.12.244 +4000.example. 5M IN A 10.0.12.245 +4000.example. 5M IN A 10.0.12.246 +4000.example. 5M IN A 10.0.12.247 +4000.example. 5M IN A 10.0.12.248 +4000.example. 5M IN A 10.0.12.249 +4000.example. 5M IN A 10.0.12.250 +4000.example. 5M IN A 10.0.12.251 +4000.example. 5M IN A 10.0.12.252 +4000.example. 5M IN A 10.0.12.253 +4000.example. 5M IN A 10.0.12.254 +4000.example. 5M IN A 10.0.12.255 +4000.example. 5M IN A 10.0.13.0 +4000.example. 5M IN A 10.0.13.1 +4000.example. 5M IN A 10.0.13.2 +4000.example. 5M IN A 10.0.13.3 +4000.example. 5M IN A 10.0.13.4 +4000.example. 5M IN A 10.0.13.5 +4000.example. 5M IN A 10.0.13.6 +4000.example. 5M IN A 10.0.13.7 +4000.example. 5M IN A 10.0.13.8 +4000.example. 5M IN A 10.0.13.9 +4000.example. 5M IN A 10.0.13.10 +4000.example. 5M IN A 10.0.13.11 +4000.example. 5M IN A 10.0.13.12 +4000.example. 5M IN A 10.0.13.13 +4000.example. 5M IN A 10.0.13.14 +4000.example. 5M IN A 10.0.13.15 +4000.example. 5M IN A 10.0.13.16 +4000.example. 5M IN A 10.0.13.17 +4000.example. 5M IN A 10.0.13.18 +4000.example. 5M IN A 10.0.13.19 +4000.example. 5M IN A 10.0.13.20 +4000.example. 5M IN A 10.0.13.21 +4000.example. 5M IN A 10.0.13.22 +4000.example. 5M IN A 10.0.13.23 +4000.example. 5M IN A 10.0.13.24 +4000.example. 5M IN A 10.0.13.25 +4000.example. 5M IN A 10.0.13.26 +4000.example. 5M IN A 10.0.13.27 +4000.example. 5M IN A 10.0.13.28 +4000.example. 5M IN A 10.0.13.29 +4000.example. 5M IN A 10.0.13.30 +4000.example. 5M IN A 10.0.13.31 +4000.example. 5M IN A 10.0.13.32 +4000.example. 5M IN A 10.0.13.33 +4000.example. 5M IN A 10.0.13.34 +4000.example. 5M IN A 10.0.13.35 +4000.example. 5M IN A 10.0.13.36 +4000.example. 5M IN A 10.0.13.37 +4000.example. 5M IN A 10.0.13.38 +4000.example. 5M IN A 10.0.13.39 +4000.example. 5M IN A 10.0.13.40 +4000.example. 5M IN A 10.0.13.41 +4000.example. 5M IN A 10.0.13.42 +4000.example. 5M IN A 10.0.13.43 +4000.example. 5M IN A 10.0.13.44 +4000.example. 5M IN A 10.0.13.45 +4000.example. 5M IN A 10.0.13.46 +4000.example. 5M IN A 10.0.13.47 +4000.example. 5M IN A 10.0.13.48 +4000.example. 5M IN A 10.0.13.49 +4000.example. 5M IN A 10.0.13.50 +4000.example. 5M IN A 10.0.13.51 +4000.example. 5M IN A 10.0.13.52 +4000.example. 5M IN A 10.0.13.53 +4000.example. 5M IN A 10.0.13.54 +4000.example. 5M IN A 10.0.13.55 +4000.example. 5M IN A 10.0.13.56 +4000.example. 5M IN A 10.0.13.57 +4000.example. 5M IN A 10.0.13.58 +4000.example. 5M IN A 10.0.13.59 +4000.example. 5M IN A 10.0.13.60 +4000.example. 5M IN A 10.0.13.61 +4000.example. 5M IN A 10.0.13.62 +4000.example. 5M IN A 10.0.13.63 +4000.example. 5M IN A 10.0.13.64 +4000.example. 5M IN A 10.0.13.65 +4000.example. 5M IN A 10.0.13.66 +4000.example. 5M IN A 10.0.13.67 +4000.example. 5M IN A 10.0.13.68 +4000.example. 5M IN A 10.0.13.69 +4000.example. 5M IN A 10.0.13.70 +4000.example. 5M IN A 10.0.13.71 +4000.example. 5M IN A 10.0.13.72 +4000.example. 5M IN A 10.0.13.73 +4000.example. 5M IN A 10.0.13.74 +4000.example. 5M IN A 10.0.13.75 +4000.example. 5M IN A 10.0.13.76 +4000.example. 5M IN A 10.0.13.77 +4000.example. 5M IN A 10.0.13.78 +4000.example. 5M IN A 10.0.13.79 +4000.example. 5M IN A 10.0.13.80 +4000.example. 5M IN A 10.0.13.81 +4000.example. 5M IN A 10.0.13.82 +4000.example. 5M IN A 10.0.13.83 +4000.example. 5M IN A 10.0.13.84 +4000.example. 5M IN A 10.0.13.85 +4000.example. 5M IN A 10.0.13.86 +4000.example. 5M IN A 10.0.13.87 +4000.example. 5M IN A 10.0.13.88 +4000.example. 5M IN A 10.0.13.89 +4000.example. 5M IN A 10.0.13.90 +4000.example. 5M IN A 10.0.13.91 +4000.example. 5M IN A 10.0.13.92 +4000.example. 5M IN A 10.0.13.93 +4000.example. 5M IN A 10.0.13.94 +4000.example. 5M IN A 10.0.13.95 +4000.example. 5M IN A 10.0.13.96 +4000.example. 5M IN A 10.0.13.97 +4000.example. 5M IN A 10.0.13.98 +4000.example. 5M IN A 10.0.13.99 +4000.example. 5M IN A 10.0.13.100 +4000.example. 5M IN A 10.0.13.101 +4000.example. 5M IN A 10.0.13.102 +4000.example. 5M IN A 10.0.13.103 +4000.example. 5M IN A 10.0.13.104 +4000.example. 5M IN A 10.0.13.105 +4000.example. 5M IN A 10.0.13.106 +4000.example. 5M IN A 10.0.13.107 +4000.example. 5M IN A 10.0.13.108 +4000.example. 5M IN A 10.0.13.109 +4000.example. 5M IN A 10.0.13.110 +4000.example. 5M IN A 10.0.13.111 +4000.example. 5M IN A 10.0.13.112 +4000.example. 5M IN A 10.0.13.113 +4000.example. 5M IN A 10.0.13.114 +4000.example. 5M IN A 10.0.13.115 +4000.example. 5M IN A 10.0.13.116 +4000.example. 5M IN A 10.0.13.117 +4000.example. 5M IN A 10.0.13.118 +4000.example. 5M IN A 10.0.13.119 +4000.example. 5M IN A 10.0.13.120 +4000.example. 5M IN A 10.0.13.121 +4000.example. 5M IN A 10.0.13.122 +4000.example. 5M IN A 10.0.13.123 +4000.example. 5M IN A 10.0.13.124 +4000.example. 5M IN A 10.0.13.125 +4000.example. 5M IN A 10.0.13.126 +4000.example. 5M IN A 10.0.13.127 +4000.example. 5M IN A 10.0.13.128 +4000.example. 5M IN A 10.0.13.129 +4000.example. 5M IN A 10.0.13.130 +4000.example. 5M IN A 10.0.13.131 +4000.example. 5M IN A 10.0.13.132 +4000.example. 5M IN A 10.0.13.133 +4000.example. 5M IN A 10.0.13.134 +4000.example. 5M IN A 10.0.13.135 +4000.example. 5M IN A 10.0.13.136 +4000.example. 5M IN A 10.0.13.137 +4000.example. 5M IN A 10.0.13.138 +4000.example. 5M IN A 10.0.13.139 +4000.example. 5M IN A 10.0.13.140 +4000.example. 5M IN A 10.0.13.141 +4000.example. 5M IN A 10.0.13.142 +4000.example. 5M IN A 10.0.13.143 +4000.example. 5M IN A 10.0.13.144 +4000.example. 5M IN A 10.0.13.145 +4000.example. 5M IN A 10.0.13.146 +4000.example. 5M IN A 10.0.13.147 +4000.example. 5M IN A 10.0.13.148 +4000.example. 5M IN A 10.0.13.149 +4000.example. 5M IN A 10.0.13.150 +4000.example. 5M IN A 10.0.13.151 +4000.example. 5M IN A 10.0.13.152 +4000.example. 5M IN A 10.0.13.153 +4000.example. 5M IN A 10.0.13.154 +4000.example. 5M IN A 10.0.13.155 +4000.example. 5M IN A 10.0.13.156 +4000.example. 5M IN A 10.0.13.157 +4000.example. 5M IN A 10.0.13.158 +4000.example. 5M IN A 10.0.13.159 +4000.example. 5M IN A 10.0.13.160 +4000.example. 5M IN A 10.0.13.161 +4000.example. 5M IN A 10.0.13.162 +4000.example. 5M IN A 10.0.13.163 +4000.example. 5M IN A 10.0.13.164 +4000.example. 5M IN A 10.0.13.165 +4000.example. 5M IN A 10.0.13.166 +4000.example. 5M IN A 10.0.13.167 +4000.example. 5M IN A 10.0.13.168 +4000.example. 5M IN A 10.0.13.169 +4000.example. 5M IN A 10.0.13.170 +4000.example. 5M IN A 10.0.13.171 +4000.example. 5M IN A 10.0.13.172 +4000.example. 5M IN A 10.0.13.173 +4000.example. 5M IN A 10.0.13.174 +4000.example. 5M IN A 10.0.13.175 +4000.example. 5M IN A 10.0.13.176 +4000.example. 5M IN A 10.0.13.177 +4000.example. 5M IN A 10.0.13.178 +4000.example. 5M IN A 10.0.13.179 +4000.example. 5M IN A 10.0.13.180 +4000.example. 5M IN A 10.0.13.181 +4000.example. 5M IN A 10.0.13.182 +4000.example. 5M IN A 10.0.13.183 +4000.example. 5M IN A 10.0.13.184 +4000.example. 5M IN A 10.0.13.185 +4000.example. 5M IN A 10.0.13.186 +4000.example. 5M IN A 10.0.13.187 +4000.example. 5M IN A 10.0.13.188 +4000.example. 5M IN A 10.0.13.189 +4000.example. 5M IN A 10.0.13.190 +4000.example. 5M IN A 10.0.13.191 +4000.example. 5M IN A 10.0.13.192 +4000.example. 5M IN A 10.0.13.193 +4000.example. 5M IN A 10.0.13.194 +4000.example. 5M IN A 10.0.13.195 +4000.example. 5M IN A 10.0.13.196 +4000.example. 5M IN A 10.0.13.197 +4000.example. 5M IN A 10.0.13.198 +4000.example. 5M IN A 10.0.13.199 +4000.example. 5M IN A 10.0.13.200 +4000.example. 5M IN A 10.0.13.201 +4000.example. 5M IN A 10.0.13.202 +4000.example. 5M IN A 10.0.13.203 +4000.example. 5M IN A 10.0.13.204 +4000.example. 5M IN A 10.0.13.205 +4000.example. 5M IN A 10.0.13.206 +4000.example. 5M IN A 10.0.13.207 +4000.example. 5M IN A 10.0.13.208 +4000.example. 5M IN A 10.0.13.209 +4000.example. 5M IN A 10.0.13.210 +4000.example. 5M IN A 10.0.13.211 +4000.example. 5M IN A 10.0.13.212 +4000.example. 5M IN A 10.0.13.213 +4000.example. 5M IN A 10.0.13.214 +4000.example. 5M IN A 10.0.13.215 +4000.example. 5M IN A 10.0.13.216 +4000.example. 5M IN A 10.0.13.217 +4000.example. 5M IN A 10.0.13.218 +4000.example. 5M IN A 10.0.13.219 +4000.example. 5M IN A 10.0.13.220 +4000.example. 5M IN A 10.0.13.221 +4000.example. 5M IN A 10.0.13.222 +4000.example. 5M IN A 10.0.13.223 +4000.example. 5M IN A 10.0.13.224 +4000.example. 5M IN A 10.0.13.225 +4000.example. 5M IN A 10.0.13.226 +4000.example. 5M IN A 10.0.13.227 +4000.example. 5M IN A 10.0.13.228 +4000.example. 5M IN A 10.0.13.229 +4000.example. 5M IN A 10.0.13.230 +4000.example. 5M IN A 10.0.13.231 +4000.example. 5M IN A 10.0.13.232 +4000.example. 5M IN A 10.0.13.233 +4000.example. 5M IN A 10.0.13.234 +4000.example. 5M IN A 10.0.13.235 +4000.example. 5M IN A 10.0.13.236 +4000.example. 5M IN A 10.0.13.237 +4000.example. 5M IN A 10.0.13.238 +4000.example. 5M IN A 10.0.13.239 +4000.example. 5M IN A 10.0.13.240 +4000.example. 5M IN A 10.0.13.241 +4000.example. 5M IN A 10.0.13.242 +4000.example. 5M IN A 10.0.13.243 +4000.example. 5M IN A 10.0.13.244 +4000.example. 5M IN A 10.0.13.245 +4000.example. 5M IN A 10.0.13.246 +4000.example. 5M IN A 10.0.13.247 +4000.example. 5M IN A 10.0.13.248 +4000.example. 5M IN A 10.0.13.249 +4000.example. 5M IN A 10.0.13.250 +4000.example. 5M IN A 10.0.13.251 +4000.example. 5M IN A 10.0.13.252 +4000.example. 5M IN A 10.0.13.253 +4000.example. 5M IN A 10.0.13.254 +4000.example. 5M IN A 10.0.13.255 +4000.example. 5M IN A 10.0.14.0 +4000.example. 5M IN A 10.0.14.1 +4000.example. 5M IN A 10.0.14.2 +4000.example. 5M IN A 10.0.14.3 +4000.example. 5M IN A 10.0.14.4 +4000.example. 5M IN A 10.0.14.5 +4000.example. 5M IN A 10.0.14.6 +4000.example. 5M IN A 10.0.14.7 +4000.example. 5M IN A 10.0.14.8 +4000.example. 5M IN A 10.0.14.9 +4000.example. 5M IN A 10.0.14.10 +4000.example. 5M IN A 10.0.14.11 +4000.example. 5M IN A 10.0.14.12 +4000.example. 5M IN A 10.0.14.13 +4000.example. 5M IN A 10.0.14.14 +4000.example. 5M IN A 10.0.14.15 +4000.example. 5M IN A 10.0.14.16 +4000.example. 5M IN A 10.0.14.17 +4000.example. 5M IN A 10.0.14.18 +4000.example. 5M IN A 10.0.14.19 +4000.example. 5M IN A 10.0.14.20 +4000.example. 5M IN A 10.0.14.21 +4000.example. 5M IN A 10.0.14.22 +4000.example. 5M IN A 10.0.14.23 +4000.example. 5M IN A 10.0.14.24 +4000.example. 5M IN A 10.0.14.25 +4000.example. 5M IN A 10.0.14.26 +4000.example. 5M IN A 10.0.14.27 +4000.example. 5M IN A 10.0.14.28 +4000.example. 5M IN A 10.0.14.29 +4000.example. 5M IN A 10.0.14.30 +4000.example. 5M IN A 10.0.14.31 +4000.example. 5M IN A 10.0.14.32 +4000.example. 5M IN A 10.0.14.33 +4000.example. 5M IN A 10.0.14.34 +4000.example. 5M IN A 10.0.14.35 +4000.example. 5M IN A 10.0.14.36 +4000.example. 5M IN A 10.0.14.37 +4000.example. 5M IN A 10.0.14.38 +4000.example. 5M IN A 10.0.14.39 +4000.example. 5M IN A 10.0.14.40 +4000.example. 5M IN A 10.0.14.41 +4000.example. 5M IN A 10.0.14.42 +4000.example. 5M IN A 10.0.14.43 +4000.example. 5M IN A 10.0.14.44 +4000.example. 5M IN A 10.0.14.45 +4000.example. 5M IN A 10.0.14.46 +4000.example. 5M IN A 10.0.14.47 +4000.example. 5M IN A 10.0.14.48 +4000.example. 5M IN A 10.0.14.49 +4000.example. 5M IN A 10.0.14.50 +4000.example. 5M IN A 10.0.14.51 +4000.example. 5M IN A 10.0.14.52 +4000.example. 5M IN A 10.0.14.53 +4000.example. 5M IN A 10.0.14.54 +4000.example. 5M IN A 10.0.14.55 +4000.example. 5M IN A 10.0.14.56 +4000.example. 5M IN A 10.0.14.57 +4000.example. 5M IN A 10.0.14.58 +4000.example. 5M IN A 10.0.14.59 +4000.example. 5M IN A 10.0.14.60 +4000.example. 5M IN A 10.0.14.61 +4000.example. 5M IN A 10.0.14.62 +4000.example. 5M IN A 10.0.14.63 +4000.example. 5M IN A 10.0.14.64 +4000.example. 5M IN A 10.0.14.65 +4000.example. 5M IN A 10.0.14.66 +4000.example. 5M IN A 10.0.14.67 +4000.example. 5M IN A 10.0.14.68 +4000.example. 5M IN A 10.0.14.69 +4000.example. 5M IN A 10.0.14.70 +4000.example. 5M IN A 10.0.14.71 +4000.example. 5M IN A 10.0.14.72 +4000.example. 5M IN A 10.0.14.73 +4000.example. 5M IN A 10.0.14.74 +4000.example. 5M IN A 10.0.14.75 +4000.example. 5M IN A 10.0.14.76 +4000.example. 5M IN A 10.0.14.77 +4000.example. 5M IN A 10.0.14.78 +4000.example. 5M IN A 10.0.14.79 +4000.example. 5M IN A 10.0.14.80 +4000.example. 5M IN A 10.0.14.81 +4000.example. 5M IN A 10.0.14.82 +4000.example. 5M IN A 10.0.14.83 +4000.example. 5M IN A 10.0.14.84 +4000.example. 5M IN A 10.0.14.85 +4000.example. 5M IN A 10.0.14.86 +4000.example. 5M IN A 10.0.14.87 +4000.example. 5M IN A 10.0.14.88 +4000.example. 5M IN A 10.0.14.89 +4000.example. 5M IN A 10.0.14.90 +4000.example. 5M IN A 10.0.14.91 +4000.example. 5M IN A 10.0.14.92 +4000.example. 5M IN A 10.0.14.93 +4000.example. 5M IN A 10.0.14.94 +4000.example. 5M IN A 10.0.14.95 +4000.example. 5M IN A 10.0.14.96 +4000.example. 5M IN A 10.0.14.97 +4000.example. 5M IN A 10.0.14.98 +4000.example. 5M IN A 10.0.14.99 +4000.example. 5M IN A 10.0.14.100 +4000.example. 5M IN A 10.0.14.101 +4000.example. 5M IN A 10.0.14.102 +4000.example. 5M IN A 10.0.14.103 +4000.example. 5M IN A 10.0.14.104 +4000.example. 5M IN A 10.0.14.105 +4000.example. 5M IN A 10.0.14.106 +4000.example. 5M IN A 10.0.14.107 +4000.example. 5M IN A 10.0.14.108 +4000.example. 5M IN A 10.0.14.109 +4000.example. 5M IN A 10.0.14.110 +4000.example. 5M IN A 10.0.14.111 +4000.example. 5M IN A 10.0.14.112 +4000.example. 5M IN A 10.0.14.113 +4000.example. 5M IN A 10.0.14.114 +4000.example. 5M IN A 10.0.14.115 +4000.example. 5M IN A 10.0.14.116 +4000.example. 5M IN A 10.0.14.117 +4000.example. 5M IN A 10.0.14.118 +4000.example. 5M IN A 10.0.14.119 +4000.example. 5M IN A 10.0.14.120 +4000.example. 5M IN A 10.0.14.121 +4000.example. 5M IN A 10.0.14.122 +4000.example. 5M IN A 10.0.14.123 +4000.example. 5M IN A 10.0.14.124 +4000.example. 5M IN A 10.0.14.125 +4000.example. 5M IN A 10.0.14.126 +4000.example. 5M IN A 10.0.14.127 +4000.example. 5M IN A 10.0.14.128 +4000.example. 5M IN A 10.0.14.129 +4000.example. 5M IN A 10.0.14.130 +4000.example. 5M IN A 10.0.14.131 +4000.example. 5M IN A 10.0.14.132 +4000.example. 5M IN A 10.0.14.133 +4000.example. 5M IN A 10.0.14.134 +4000.example. 5M IN A 10.0.14.135 +4000.example. 5M IN A 10.0.14.136 +4000.example. 5M IN A 10.0.14.137 +4000.example. 5M IN A 10.0.14.138 +4000.example. 5M IN A 10.0.14.139 +4000.example. 5M IN A 10.0.14.140 +4000.example. 5M IN A 10.0.14.141 +4000.example. 5M IN A 10.0.14.142 +4000.example. 5M IN A 10.0.14.143 +4000.example. 5M IN A 10.0.14.144 +4000.example. 5M IN A 10.0.14.145 +4000.example. 5M IN A 10.0.14.146 +4000.example. 5M IN A 10.0.14.147 +4000.example. 5M IN A 10.0.14.148 +4000.example. 5M IN A 10.0.14.149 +4000.example. 5M IN A 10.0.14.150 +4000.example. 5M IN A 10.0.14.151 +4000.example. 5M IN A 10.0.14.152 +4000.example. 5M IN A 10.0.14.153 +4000.example. 5M IN A 10.0.14.154 +4000.example. 5M IN A 10.0.14.155 +4000.example. 5M IN A 10.0.14.156 +4000.example. 5M IN A 10.0.14.157 +4000.example. 5M IN A 10.0.14.158 +4000.example. 5M IN A 10.0.14.159 +4000.example. 5M IN A 10.0.14.160 +4000.example. 5M IN A 10.0.14.161 +4000.example. 5M IN A 10.0.14.162 +4000.example. 5M IN A 10.0.14.163 +4000.example. 5M IN A 10.0.14.164 +4000.example. 5M IN A 10.0.14.165 +4000.example. 5M IN A 10.0.14.166 +4000.example. 5M IN A 10.0.14.167 +4000.example. 5M IN A 10.0.14.168 +4000.example. 5M IN A 10.0.14.169 +4000.example. 5M IN A 10.0.14.170 +4000.example. 5M IN A 10.0.14.171 +4000.example. 5M IN A 10.0.14.172 +4000.example. 5M IN A 10.0.14.173 +4000.example. 5M IN A 10.0.14.174 +4000.example. 5M IN A 10.0.14.175 +4000.example. 5M IN A 10.0.14.176 +4000.example. 5M IN A 10.0.14.177 +4000.example. 5M IN A 10.0.14.178 +4000.example. 5M IN A 10.0.14.179 +4000.example. 5M IN A 10.0.14.180 +4000.example. 5M IN A 10.0.14.181 +4000.example. 5M IN A 10.0.14.182 +4000.example. 5M IN A 10.0.14.183 +4000.example. 5M IN A 10.0.14.184 +4000.example. 5M IN A 10.0.14.185 +4000.example. 5M IN A 10.0.14.186 +4000.example. 5M IN A 10.0.14.187 +4000.example. 5M IN A 10.0.14.188 +4000.example. 5M IN A 10.0.14.189 +4000.example. 5M IN A 10.0.14.190 +4000.example. 5M IN A 10.0.14.191 +4000.example. 5M IN A 10.0.14.192 +4000.example. 5M IN A 10.0.14.193 +4000.example. 5M IN A 10.0.14.194 +4000.example. 5M IN A 10.0.14.195 +4000.example. 5M IN A 10.0.14.196 +4000.example. 5M IN A 10.0.14.197 +4000.example. 5M IN A 10.0.14.198 +4000.example. 5M IN A 10.0.14.199 +4000.example. 5M IN A 10.0.14.200 +4000.example. 5M IN A 10.0.14.201 +4000.example. 5M IN A 10.0.14.202 +4000.example. 5M IN A 10.0.14.203 +4000.example. 5M IN A 10.0.14.204 +4000.example. 5M IN A 10.0.14.205 +4000.example. 5M IN A 10.0.14.206 +4000.example. 5M IN A 10.0.14.207 +4000.example. 5M IN A 10.0.14.208 +4000.example. 5M IN A 10.0.14.209 +4000.example. 5M IN A 10.0.14.210 +4000.example. 5M IN A 10.0.14.211 +4000.example. 5M IN A 10.0.14.212 +4000.example. 5M IN A 10.0.14.213 +4000.example. 5M IN A 10.0.14.214 +4000.example. 5M IN A 10.0.14.215 +4000.example. 5M IN A 10.0.14.216 +4000.example. 5M IN A 10.0.14.217 +4000.example. 5M IN A 10.0.14.218 +4000.example. 5M IN A 10.0.14.219 +4000.example. 5M IN A 10.0.14.220 +4000.example. 5M IN A 10.0.14.221 +4000.example. 5M IN A 10.0.14.222 +4000.example. 5M IN A 10.0.14.223 +4000.example. 5M IN A 10.0.14.224 +4000.example. 5M IN A 10.0.14.225 +4000.example. 5M IN A 10.0.14.226 +4000.example. 5M IN A 10.0.14.227 +4000.example. 5M IN A 10.0.14.228 +4000.example. 5M IN A 10.0.14.229 +4000.example. 5M IN A 10.0.14.230 +4000.example. 5M IN A 10.0.14.231 +4000.example. 5M IN A 10.0.14.232 +4000.example. 5M IN A 10.0.14.233 +4000.example. 5M IN A 10.0.14.234 +4000.example. 5M IN A 10.0.14.235 +4000.example. 5M IN A 10.0.14.236 +4000.example. 5M IN A 10.0.14.237 +4000.example. 5M IN A 10.0.14.238 +4000.example. 5M IN A 10.0.14.239 +4000.example. 5M IN A 10.0.14.240 +4000.example. 5M IN A 10.0.14.241 +4000.example. 5M IN A 10.0.14.242 +4000.example. 5M IN A 10.0.14.243 +4000.example. 5M IN A 10.0.14.244 +4000.example. 5M IN A 10.0.14.245 +4000.example. 5M IN A 10.0.14.246 +4000.example. 5M IN A 10.0.14.247 +4000.example. 5M IN A 10.0.14.248 +4000.example. 5M IN A 10.0.14.249 +4000.example. 5M IN A 10.0.14.250 +4000.example. 5M IN A 10.0.14.251 +4000.example. 5M IN A 10.0.14.252 +4000.example. 5M IN A 10.0.14.253 +4000.example. 5M IN A 10.0.14.254 +4000.example. 5M IN A 10.0.14.255 +4000.example. 5M IN A 10.0.15.0 +4000.example. 5M IN A 10.0.15.1 +4000.example. 5M IN A 10.0.15.2 +4000.example. 5M IN A 10.0.15.3 +4000.example. 5M IN A 10.0.15.4 +4000.example. 5M IN A 10.0.15.5 +4000.example. 5M IN A 10.0.15.6 +4000.example. 5M IN A 10.0.15.7 +4000.example. 5M IN A 10.0.15.8 +4000.example. 5M IN A 10.0.15.9 +4000.example. 5M IN A 10.0.15.10 +4000.example. 5M IN A 10.0.15.11 +4000.example. 5M IN A 10.0.15.12 +4000.example. 5M IN A 10.0.15.13 +4000.example. 5M IN A 10.0.15.14 +4000.example. 5M IN A 10.0.15.15 +4000.example. 5M IN A 10.0.15.16 +4000.example. 5M IN A 10.0.15.17 +4000.example. 5M IN A 10.0.15.18 +4000.example. 5M IN A 10.0.15.19 +4000.example. 5M IN A 10.0.15.20 +4000.example. 5M IN A 10.0.15.21 +4000.example. 5M IN A 10.0.15.22 +4000.example. 5M IN A 10.0.15.23 +4000.example. 5M IN A 10.0.15.24 +4000.example. 5M IN A 10.0.15.25 +4000.example. 5M IN A 10.0.15.26 +4000.example. 5M IN A 10.0.15.27 +4000.example. 5M IN A 10.0.15.28 +4000.example. 5M IN A 10.0.15.29 +4000.example. 5M IN A 10.0.15.30 +4000.example. 5M IN A 10.0.15.31 +4000.example. 5M IN A 10.0.15.32 +4000.example. 5M IN A 10.0.15.33 +4000.example. 5M IN A 10.0.15.34 +4000.example. 5M IN A 10.0.15.35 +4000.example. 5M IN A 10.0.15.36 +4000.example. 5M IN A 10.0.15.37 +4000.example. 5M IN A 10.0.15.38 +4000.example. 5M IN A 10.0.15.39 +4000.example. 5M IN A 10.0.15.40 +4000.example. 5M IN A 10.0.15.41 +4000.example. 5M IN A 10.0.15.42 +4000.example. 5M IN A 10.0.15.43 +4000.example. 5M IN A 10.0.15.44 +4000.example. 5M IN A 10.0.15.45 +4000.example. 5M IN A 10.0.15.46 +4000.example. 5M IN A 10.0.15.47 +4000.example. 5M IN A 10.0.15.48 +4000.example. 5M IN A 10.0.15.49 +4000.example. 5M IN A 10.0.15.50 +4000.example. 5M IN A 10.0.15.51 +4000.example. 5M IN A 10.0.15.52 +4000.example. 5M IN A 10.0.15.53 +4000.example. 5M IN A 10.0.15.54 +4000.example. 5M IN A 10.0.15.55 +4000.example. 5M IN A 10.0.15.56 +4000.example. 5M IN A 10.0.15.57 +4000.example. 5M IN A 10.0.15.58 +4000.example. 5M IN A 10.0.15.59 +4000.example. 5M IN A 10.0.15.60 +4000.example. 5M IN A 10.0.15.61 +4000.example. 5M IN A 10.0.15.62 +4000.example. 5M IN A 10.0.15.63 +4000.example. 5M IN A 10.0.15.64 +4000.example. 5M IN A 10.0.15.65 +4000.example. 5M IN A 10.0.15.66 +4000.example. 5M IN A 10.0.15.67 +4000.example. 5M IN A 10.0.15.68 +4000.example. 5M IN A 10.0.15.69 +4000.example. 5M IN A 10.0.15.70 +4000.example. 5M IN A 10.0.15.71 +4000.example. 5M IN A 10.0.15.72 +4000.example. 5M IN A 10.0.15.73 +4000.example. 5M IN A 10.0.15.74 +4000.example. 5M IN A 10.0.15.75 +4000.example. 5M IN A 10.0.15.76 +4000.example. 5M IN A 10.0.15.77 +4000.example. 5M IN A 10.0.15.78 +4000.example. 5M IN A 10.0.15.79 +4000.example. 5M IN A 10.0.15.80 +4000.example. 5M IN A 10.0.15.81 +4000.example. 5M IN A 10.0.15.82 +4000.example. 5M IN A 10.0.15.83 +4000.example. 5M IN A 10.0.15.84 +4000.example. 5M IN A 10.0.15.85 +4000.example. 5M IN A 10.0.15.86 +4000.example. 5M IN A 10.0.15.87 +4000.example. 5M IN A 10.0.15.88 +4000.example. 5M IN A 10.0.15.89 +4000.example. 5M IN A 10.0.15.90 +4000.example. 5M IN A 10.0.15.91 +4000.example. 5M IN A 10.0.15.92 +4000.example. 5M IN A 10.0.15.93 +4000.example. 5M IN A 10.0.15.94 +4000.example. 5M IN A 10.0.15.95 +4000.example. 5M IN A 10.0.15.96 +4000.example. 5M IN A 10.0.15.97 +4000.example. 5M IN A 10.0.15.98 +4000.example. 5M IN A 10.0.15.99 +4000.example. 5M IN A 10.0.15.100 +4000.example. 5M IN A 10.0.15.101 +4000.example. 5M IN A 10.0.15.102 +4000.example. 5M IN A 10.0.15.103 +4000.example. 5M IN A 10.0.15.104 +4000.example. 5M IN A 10.0.15.105 +4000.example. 5M IN A 10.0.15.106 +4000.example. 5M IN A 10.0.15.107 +4000.example. 5M IN A 10.0.15.108 +4000.example. 5M IN A 10.0.15.109 +4000.example. 5M IN A 10.0.15.110 +4000.example. 5M IN A 10.0.15.111 +4000.example. 5M IN A 10.0.15.112 +4000.example. 5M IN A 10.0.15.113 +4000.example. 5M IN A 10.0.15.114 +4000.example. 5M IN A 10.0.15.115 +4000.example. 5M IN A 10.0.15.116 +4000.example. 5M IN A 10.0.15.117 +4000.example. 5M IN A 10.0.15.118 +4000.example. 5M IN A 10.0.15.119 +4000.example. 5M IN A 10.0.15.120 +4000.example. 5M IN A 10.0.15.121 +4000.example. 5M IN A 10.0.15.122 +4000.example. 5M IN A 10.0.15.123 +4000.example. 5M IN A 10.0.15.124 +4000.example. 5M IN A 10.0.15.125 +4000.example. 5M IN A 10.0.15.126 +4000.example. 5M IN A 10.0.15.127 +4000.example. 5M IN A 10.0.15.128 +4000.example. 5M IN A 10.0.15.129 +4000.example. 5M IN A 10.0.15.130 +4000.example. 5M IN A 10.0.15.131 +4000.example. 5M IN A 10.0.15.132 +4000.example. 5M IN A 10.0.15.133 +4000.example. 5M IN A 10.0.15.134 +4000.example. 5M IN A 10.0.15.135 +4000.example. 5M IN A 10.0.15.136 +4000.example. 5M IN A 10.0.15.137 +4000.example. 5M IN A 10.0.15.138 +4000.example. 5M IN A 10.0.15.139 +4000.example. 5M IN A 10.0.15.140 +4000.example. 5M IN A 10.0.15.141 +4000.example. 5M IN A 10.0.15.142 +4000.example. 5M IN A 10.0.15.143 +4000.example. 5M IN A 10.0.15.144 +4000.example. 5M IN A 10.0.15.145 +4000.example. 5M IN A 10.0.15.146 +4000.example. 5M IN A 10.0.15.147 +4000.example. 5M IN A 10.0.15.148 +4000.example. 5M IN A 10.0.15.149 +4000.example. 5M IN A 10.0.15.150 +4000.example. 5M IN A 10.0.15.151 +4000.example. 5M IN A 10.0.15.152 +4000.example. 5M IN A 10.0.15.153 +4000.example. 5M IN A 10.0.15.154 +4000.example. 5M IN A 10.0.15.155 +4000.example. 5M IN A 10.0.15.156 +4000.example. 5M IN A 10.0.15.157 +4000.example. 5M IN A 10.0.15.158 +4000.example. 5M IN A 10.0.15.159 + +;; AUTHORITY SECTION: +example. 5M IN NS ns1.example. + +;; ADDITIONAL SECTION: +ns1.example. 5M IN A 10.53.0.1 + +;; Total query time: 279 msec +;; FROM: draco to SERVER: 10.53.0.1 +;; WHEN: Fri Jun 23 12:58:20 2000 +;; MSG SIZE sent: 30 rcvd: 64068 + diff --git a/bin/tests/system/limits/knowngood.dig.out.a-maximum-rrset b/bin/tests/system/limits/knowngood.dig.out.a-maximum-rrset new file mode 100644 index 0000000..1688e83 --- /dev/null +++ b/bin/tests/system/limits/knowngood.dig.out.a-maximum-rrset @@ -0,0 +1,4114 @@ + +; <<>> DiG 8.2 <<>> a-maximum-rrset.example. @10.53.0.1 a -p +; (1 server found) +;; res options: init recurs defnam dnsrch +;; got answer: +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6 +;; flags: qr aa rd ad; QUERY: 1, ANSWER: 4091, AUTHORITY: 1, ADDITIONAL: 1 +;; QUERY SECTION: +;; a-maximum-rrset.example, type = A, class = IN + +;; ANSWER SECTION: +a-maximum-rrset.example. 5M IN A 10.0.0.0 +a-maximum-rrset.example. 5M IN A 10.0.0.1 +a-maximum-rrset.example. 5M IN A 10.0.0.2 +a-maximum-rrset.example. 5M IN A 10.0.0.3 +a-maximum-rrset.example. 5M IN A 10.0.0.4 +a-maximum-rrset.example. 5M IN A 10.0.0.5 +a-maximum-rrset.example. 5M IN A 10.0.0.6 +a-maximum-rrset.example. 5M IN A 10.0.0.7 +a-maximum-rrset.example. 5M IN A 10.0.0.8 +a-maximum-rrset.example. 5M IN A 10.0.0.9 +a-maximum-rrset.example. 5M IN A 10.0.0.10 +a-maximum-rrset.example. 5M IN A 10.0.0.11 +a-maximum-rrset.example. 5M IN A 10.0.0.12 +a-maximum-rrset.example. 5M IN A 10.0.0.13 +a-maximum-rrset.example. 5M IN A 10.0.0.14 +a-maximum-rrset.example. 5M IN A 10.0.0.15 +a-maximum-rrset.example. 5M IN A 10.0.0.16 +a-maximum-rrset.example. 5M IN A 10.0.0.17 +a-maximum-rrset.example. 5M IN A 10.0.0.18 +a-maximum-rrset.example. 5M IN A 10.0.0.19 +a-maximum-rrset.example. 5M IN A 10.0.0.20 +a-maximum-rrset.example. 5M IN A 10.0.0.21 +a-maximum-rrset.example. 5M IN A 10.0.0.22 +a-maximum-rrset.example. 5M IN A 10.0.0.23 +a-maximum-rrset.example. 5M IN A 10.0.0.24 +a-maximum-rrset.example. 5M IN A 10.0.0.25 +a-maximum-rrset.example. 5M IN A 10.0.0.26 +a-maximum-rrset.example. 5M IN A 10.0.0.27 +a-maximum-rrset.example. 5M IN A 10.0.0.28 +a-maximum-rrset.example. 5M IN A 10.0.0.29 +a-maximum-rrset.example. 5M IN A 10.0.0.30 +a-maximum-rrset.example. 5M IN A 10.0.0.31 +a-maximum-rrset.example. 5M IN A 10.0.0.32 +a-maximum-rrset.example. 5M IN A 10.0.0.33 +a-maximum-rrset.example. 5M IN A 10.0.0.34 +a-maximum-rrset.example. 5M IN A 10.0.0.35 +a-maximum-rrset.example. 5M IN A 10.0.0.36 +a-maximum-rrset.example. 5M IN A 10.0.0.37 +a-maximum-rrset.example. 5M IN A 10.0.0.38 +a-maximum-rrset.example. 5M IN A 10.0.0.39 +a-maximum-rrset.example. 5M IN A 10.0.0.40 +a-maximum-rrset.example. 5M IN A 10.0.0.41 +a-maximum-rrset.example. 5M IN A 10.0.0.42 +a-maximum-rrset.example. 5M IN A 10.0.0.43 +a-maximum-rrset.example. 5M IN A 10.0.0.44 +a-maximum-rrset.example. 5M IN A 10.0.0.45 +a-maximum-rrset.example. 5M IN A 10.0.0.46 +a-maximum-rrset.example. 5M IN A 10.0.0.47 +a-maximum-rrset.example. 5M IN A 10.0.0.48 +a-maximum-rrset.example. 5M IN A 10.0.0.49 +a-maximum-rrset.example. 5M IN A 10.0.0.50 +a-maximum-rrset.example. 5M IN A 10.0.0.51 +a-maximum-rrset.example. 5M IN A 10.0.0.52 +a-maximum-rrset.example. 5M IN A 10.0.0.53 +a-maximum-rrset.example. 5M IN A 10.0.0.54 +a-maximum-rrset.example. 5M IN A 10.0.0.55 +a-maximum-rrset.example. 5M IN A 10.0.0.56 +a-maximum-rrset.example. 5M IN A 10.0.0.57 +a-maximum-rrset.example. 5M IN A 10.0.0.58 +a-maximum-rrset.example. 5M IN A 10.0.0.59 +a-maximum-rrset.example. 5M IN A 10.0.0.60 +a-maximum-rrset.example. 5M IN A 10.0.0.61 +a-maximum-rrset.example. 5M IN A 10.0.0.62 +a-maximum-rrset.example. 5M IN A 10.0.0.63 +a-maximum-rrset.example. 5M IN A 10.0.0.64 +a-maximum-rrset.example. 5M IN A 10.0.0.65 +a-maximum-rrset.example. 5M IN A 10.0.0.66 +a-maximum-rrset.example. 5M IN A 10.0.0.67 +a-maximum-rrset.example. 5M IN A 10.0.0.68 +a-maximum-rrset.example. 5M IN A 10.0.0.69 +a-maximum-rrset.example. 5M IN A 10.0.0.70 +a-maximum-rrset.example. 5M IN A 10.0.0.71 +a-maximum-rrset.example. 5M IN A 10.0.0.72 +a-maximum-rrset.example. 5M IN A 10.0.0.73 +a-maximum-rrset.example. 5M IN A 10.0.0.74 +a-maximum-rrset.example. 5M IN A 10.0.0.75 +a-maximum-rrset.example. 5M IN A 10.0.0.76 +a-maximum-rrset.example. 5M IN A 10.0.0.77 +a-maximum-rrset.example. 5M IN A 10.0.0.78 +a-maximum-rrset.example. 5M IN A 10.0.0.79 +a-maximum-rrset.example. 5M IN A 10.0.0.80 +a-maximum-rrset.example. 5M IN A 10.0.0.81 +a-maximum-rrset.example. 5M IN A 10.0.0.82 +a-maximum-rrset.example. 5M IN A 10.0.0.83 +a-maximum-rrset.example. 5M IN A 10.0.0.84 +a-maximum-rrset.example. 5M IN A 10.0.0.85 +a-maximum-rrset.example. 5M IN A 10.0.0.86 +a-maximum-rrset.example. 5M IN A 10.0.0.87 +a-maximum-rrset.example. 5M IN A 10.0.0.88 +a-maximum-rrset.example. 5M IN A 10.0.0.89 +a-maximum-rrset.example. 5M IN A 10.0.0.90 +a-maximum-rrset.example. 5M IN A 10.0.0.91 +a-maximum-rrset.example. 5M IN A 10.0.0.92 +a-maximum-rrset.example. 5M IN A 10.0.0.93 +a-maximum-rrset.example. 5M IN A 10.0.0.94 +a-maximum-rrset.example. 5M IN A 10.0.0.95 +a-maximum-rrset.example. 5M IN A 10.0.0.96 +a-maximum-rrset.example. 5M IN A 10.0.0.97 +a-maximum-rrset.example. 5M IN A 10.0.0.98 +a-maximum-rrset.example. 5M IN A 10.0.0.99 +a-maximum-rrset.example. 5M IN A 10.0.0.100 +a-maximum-rrset.example. 5M IN A 10.0.0.101 +a-maximum-rrset.example. 5M IN A 10.0.0.102 +a-maximum-rrset.example. 5M IN A 10.0.0.103 +a-maximum-rrset.example. 5M IN A 10.0.0.104 +a-maximum-rrset.example. 5M IN A 10.0.0.105 +a-maximum-rrset.example. 5M IN A 10.0.0.106 +a-maximum-rrset.example. 5M IN A 10.0.0.107 +a-maximum-rrset.example. 5M IN A 10.0.0.108 +a-maximum-rrset.example. 5M IN A 10.0.0.109 +a-maximum-rrset.example. 5M IN A 10.0.0.110 +a-maximum-rrset.example. 5M IN A 10.0.0.111 +a-maximum-rrset.example. 5M IN A 10.0.0.112 +a-maximum-rrset.example. 5M IN A 10.0.0.113 +a-maximum-rrset.example. 5M IN A 10.0.0.114 +a-maximum-rrset.example. 5M IN A 10.0.0.115 +a-maximum-rrset.example. 5M IN A 10.0.0.116 +a-maximum-rrset.example. 5M IN A 10.0.0.117 +a-maximum-rrset.example. 5M IN A 10.0.0.118 +a-maximum-rrset.example. 5M IN A 10.0.0.119 +a-maximum-rrset.example. 5M IN A 10.0.0.120 +a-maximum-rrset.example. 5M IN A 10.0.0.121 +a-maximum-rrset.example. 5M IN A 10.0.0.122 +a-maximum-rrset.example. 5M IN A 10.0.0.123 +a-maximum-rrset.example. 5M IN A 10.0.0.124 +a-maximum-rrset.example. 5M IN A 10.0.0.125 +a-maximum-rrset.example. 5M IN A 10.0.0.126 +a-maximum-rrset.example. 5M IN A 10.0.0.127 +a-maximum-rrset.example. 5M IN A 10.0.0.128 +a-maximum-rrset.example. 5M IN A 10.0.0.129 +a-maximum-rrset.example. 5M IN A 10.0.0.130 +a-maximum-rrset.example. 5M IN A 10.0.0.131 +a-maximum-rrset.example. 5M IN A 10.0.0.132 +a-maximum-rrset.example. 5M IN A 10.0.0.133 +a-maximum-rrset.example. 5M IN A 10.0.0.134 +a-maximum-rrset.example. 5M IN A 10.0.0.135 +a-maximum-rrset.example. 5M IN A 10.0.0.136 +a-maximum-rrset.example. 5M IN A 10.0.0.137 +a-maximum-rrset.example. 5M IN A 10.0.0.138 +a-maximum-rrset.example. 5M IN A 10.0.0.139 +a-maximum-rrset.example. 5M IN A 10.0.0.140 +a-maximum-rrset.example. 5M IN A 10.0.0.141 +a-maximum-rrset.example. 5M IN A 10.0.0.142 +a-maximum-rrset.example. 5M IN A 10.0.0.143 +a-maximum-rrset.example. 5M IN A 10.0.0.144 +a-maximum-rrset.example. 5M IN A 10.0.0.145 +a-maximum-rrset.example. 5M IN A 10.0.0.146 +a-maximum-rrset.example. 5M IN A 10.0.0.147 +a-maximum-rrset.example. 5M IN A 10.0.0.148 +a-maximum-rrset.example. 5M IN A 10.0.0.149 +a-maximum-rrset.example. 5M IN A 10.0.0.150 +a-maximum-rrset.example. 5M IN A 10.0.0.151 +a-maximum-rrset.example. 5M IN A 10.0.0.152 +a-maximum-rrset.example. 5M IN A 10.0.0.153 +a-maximum-rrset.example. 5M IN A 10.0.0.154 +a-maximum-rrset.example. 5M IN A 10.0.0.155 +a-maximum-rrset.example. 5M IN A 10.0.0.156 +a-maximum-rrset.example. 5M IN A 10.0.0.157 +a-maximum-rrset.example. 5M IN A 10.0.0.158 +a-maximum-rrset.example. 5M IN A 10.0.0.159 +a-maximum-rrset.example. 5M IN A 10.0.0.160 +a-maximum-rrset.example. 5M IN A 10.0.0.161 +a-maximum-rrset.example. 5M IN A 10.0.0.162 +a-maximum-rrset.example. 5M IN A 10.0.0.163 +a-maximum-rrset.example. 5M IN A 10.0.0.164 +a-maximum-rrset.example. 5M IN A 10.0.0.165 +a-maximum-rrset.example. 5M IN A 10.0.0.166 +a-maximum-rrset.example. 5M IN A 10.0.0.167 +a-maximum-rrset.example. 5M IN A 10.0.0.168 +a-maximum-rrset.example. 5M IN A 10.0.0.169 +a-maximum-rrset.example. 5M IN A 10.0.0.170 +a-maximum-rrset.example. 5M IN A 10.0.0.171 +a-maximum-rrset.example. 5M IN A 10.0.0.172 +a-maximum-rrset.example. 5M IN A 10.0.0.173 +a-maximum-rrset.example. 5M IN A 10.0.0.174 +a-maximum-rrset.example. 5M IN A 10.0.0.175 +a-maximum-rrset.example. 5M IN A 10.0.0.176 +a-maximum-rrset.example. 5M IN A 10.0.0.177 +a-maximum-rrset.example. 5M IN A 10.0.0.178 +a-maximum-rrset.example. 5M IN A 10.0.0.179 +a-maximum-rrset.example. 5M IN A 10.0.0.180 +a-maximum-rrset.example. 5M IN A 10.0.0.181 +a-maximum-rrset.example. 5M IN A 10.0.0.182 +a-maximum-rrset.example. 5M IN A 10.0.0.183 +a-maximum-rrset.example. 5M IN A 10.0.0.184 +a-maximum-rrset.example. 5M IN A 10.0.0.185 +a-maximum-rrset.example. 5M IN A 10.0.0.186 +a-maximum-rrset.example. 5M IN A 10.0.0.187 +a-maximum-rrset.example. 5M IN A 10.0.0.188 +a-maximum-rrset.example. 5M IN A 10.0.0.189 +a-maximum-rrset.example. 5M IN A 10.0.0.190 +a-maximum-rrset.example. 5M IN A 10.0.0.191 +a-maximum-rrset.example. 5M IN A 10.0.0.192 +a-maximum-rrset.example. 5M IN A 10.0.0.193 +a-maximum-rrset.example. 5M IN A 10.0.0.194 +a-maximum-rrset.example. 5M IN A 10.0.0.195 +a-maximum-rrset.example. 5M IN A 10.0.0.196 +a-maximum-rrset.example. 5M IN A 10.0.0.197 +a-maximum-rrset.example. 5M IN A 10.0.0.198 +a-maximum-rrset.example. 5M IN A 10.0.0.199 +a-maximum-rrset.example. 5M IN A 10.0.0.200 +a-maximum-rrset.example. 5M IN A 10.0.0.201 +a-maximum-rrset.example. 5M IN A 10.0.0.202 +a-maximum-rrset.example. 5M IN A 10.0.0.203 +a-maximum-rrset.example. 5M IN A 10.0.0.204 +a-maximum-rrset.example. 5M IN A 10.0.0.205 +a-maximum-rrset.example. 5M IN A 10.0.0.206 +a-maximum-rrset.example. 5M IN A 10.0.0.207 +a-maximum-rrset.example. 5M IN A 10.0.0.208 +a-maximum-rrset.example. 5M IN A 10.0.0.209 +a-maximum-rrset.example. 5M IN A 10.0.0.210 +a-maximum-rrset.example. 5M IN A 10.0.0.211 +a-maximum-rrset.example. 5M IN A 10.0.0.212 +a-maximum-rrset.example. 5M IN A 10.0.0.213 +a-maximum-rrset.example. 5M IN A 10.0.0.214 +a-maximum-rrset.example. 5M IN A 10.0.0.215 +a-maximum-rrset.example. 5M IN A 10.0.0.216 +a-maximum-rrset.example. 5M IN A 10.0.0.217 +a-maximum-rrset.example. 5M IN A 10.0.0.218 +a-maximum-rrset.example. 5M IN A 10.0.0.219 +a-maximum-rrset.example. 5M IN A 10.0.0.220 +a-maximum-rrset.example. 5M IN A 10.0.0.221 +a-maximum-rrset.example. 5M IN A 10.0.0.222 +a-maximum-rrset.example. 5M IN A 10.0.0.223 +a-maximum-rrset.example. 5M IN A 10.0.0.224 +a-maximum-rrset.example. 5M IN A 10.0.0.225 +a-maximum-rrset.example. 5M IN A 10.0.0.226 +a-maximum-rrset.example. 5M IN A 10.0.0.227 +a-maximum-rrset.example. 5M IN A 10.0.0.228 +a-maximum-rrset.example. 5M IN A 10.0.0.229 +a-maximum-rrset.example. 5M IN A 10.0.0.230 +a-maximum-rrset.example. 5M IN A 10.0.0.231 +a-maximum-rrset.example. 5M IN A 10.0.0.232 +a-maximum-rrset.example. 5M IN A 10.0.0.233 +a-maximum-rrset.example. 5M IN A 10.0.0.234 +a-maximum-rrset.example. 5M IN A 10.0.0.235 +a-maximum-rrset.example. 5M IN A 10.0.0.236 +a-maximum-rrset.example. 5M IN A 10.0.0.237 +a-maximum-rrset.example. 5M IN A 10.0.0.238 +a-maximum-rrset.example. 5M IN A 10.0.0.239 +a-maximum-rrset.example. 5M IN A 10.0.0.240 +a-maximum-rrset.example. 5M IN A 10.0.0.241 +a-maximum-rrset.example. 5M IN A 10.0.0.242 +a-maximum-rrset.example. 5M IN A 10.0.0.243 +a-maximum-rrset.example. 5M IN A 10.0.0.244 +a-maximum-rrset.example. 5M IN A 10.0.0.245 +a-maximum-rrset.example. 5M IN A 10.0.0.246 +a-maximum-rrset.example. 5M IN A 10.0.0.247 +a-maximum-rrset.example. 5M IN A 10.0.0.248 +a-maximum-rrset.example. 5M IN A 10.0.0.249 +a-maximum-rrset.example. 5M IN A 10.0.0.250 +a-maximum-rrset.example. 5M IN A 10.0.0.251 +a-maximum-rrset.example. 5M IN A 10.0.0.252 +a-maximum-rrset.example. 5M IN A 10.0.0.253 +a-maximum-rrset.example. 5M IN A 10.0.0.254 +a-maximum-rrset.example. 5M IN A 10.0.0.255 +a-maximum-rrset.example. 5M IN A 10.0.1.0 +a-maximum-rrset.example. 5M IN A 10.0.1.1 +a-maximum-rrset.example. 5M IN A 10.0.1.2 +a-maximum-rrset.example. 5M IN A 10.0.1.3 +a-maximum-rrset.example. 5M IN A 10.0.1.4 +a-maximum-rrset.example. 5M IN A 10.0.1.5 +a-maximum-rrset.example. 5M IN A 10.0.1.6 +a-maximum-rrset.example. 5M IN A 10.0.1.7 +a-maximum-rrset.example. 5M IN A 10.0.1.8 +a-maximum-rrset.example. 5M IN A 10.0.1.9 +a-maximum-rrset.example. 5M IN A 10.0.1.10 +a-maximum-rrset.example. 5M IN A 10.0.1.11 +a-maximum-rrset.example. 5M IN A 10.0.1.12 +a-maximum-rrset.example. 5M IN A 10.0.1.13 +a-maximum-rrset.example. 5M IN A 10.0.1.14 +a-maximum-rrset.example. 5M IN A 10.0.1.15 +a-maximum-rrset.example. 5M IN A 10.0.1.16 +a-maximum-rrset.example. 5M IN A 10.0.1.17 +a-maximum-rrset.example. 5M IN A 10.0.1.18 +a-maximum-rrset.example. 5M IN A 10.0.1.19 +a-maximum-rrset.example. 5M IN A 10.0.1.20 +a-maximum-rrset.example. 5M IN A 10.0.1.21 +a-maximum-rrset.example. 5M IN A 10.0.1.22 +a-maximum-rrset.example. 5M IN A 10.0.1.23 +a-maximum-rrset.example. 5M IN A 10.0.1.24 +a-maximum-rrset.example. 5M IN A 10.0.1.25 +a-maximum-rrset.example. 5M IN A 10.0.1.26 +a-maximum-rrset.example. 5M IN A 10.0.1.27 +a-maximum-rrset.example. 5M IN A 10.0.1.28 +a-maximum-rrset.example. 5M IN A 10.0.1.29 +a-maximum-rrset.example. 5M IN A 10.0.1.30 +a-maximum-rrset.example. 5M IN A 10.0.1.31 +a-maximum-rrset.example. 5M IN A 10.0.1.32 +a-maximum-rrset.example. 5M IN A 10.0.1.33 +a-maximum-rrset.example. 5M IN A 10.0.1.34 +a-maximum-rrset.example. 5M IN A 10.0.1.35 +a-maximum-rrset.example. 5M IN A 10.0.1.36 +a-maximum-rrset.example. 5M IN A 10.0.1.37 +a-maximum-rrset.example. 5M IN A 10.0.1.38 +a-maximum-rrset.example. 5M IN A 10.0.1.39 +a-maximum-rrset.example. 5M IN A 10.0.1.40 +a-maximum-rrset.example. 5M IN A 10.0.1.41 +a-maximum-rrset.example. 5M IN A 10.0.1.42 +a-maximum-rrset.example. 5M IN A 10.0.1.43 +a-maximum-rrset.example. 5M IN A 10.0.1.44 +a-maximum-rrset.example. 5M IN A 10.0.1.45 +a-maximum-rrset.example. 5M IN A 10.0.1.46 +a-maximum-rrset.example. 5M IN A 10.0.1.47 +a-maximum-rrset.example. 5M IN A 10.0.1.48 +a-maximum-rrset.example. 5M IN A 10.0.1.49 +a-maximum-rrset.example. 5M IN A 10.0.1.50 +a-maximum-rrset.example. 5M IN A 10.0.1.51 +a-maximum-rrset.example. 5M IN A 10.0.1.52 +a-maximum-rrset.example. 5M IN A 10.0.1.53 +a-maximum-rrset.example. 5M IN A 10.0.1.54 +a-maximum-rrset.example. 5M IN A 10.0.1.55 +a-maximum-rrset.example. 5M IN A 10.0.1.56 +a-maximum-rrset.example. 5M IN A 10.0.1.57 +a-maximum-rrset.example. 5M IN A 10.0.1.58 +a-maximum-rrset.example. 5M IN A 10.0.1.59 +a-maximum-rrset.example. 5M IN A 10.0.1.60 +a-maximum-rrset.example. 5M IN A 10.0.1.61 +a-maximum-rrset.example. 5M IN A 10.0.1.62 +a-maximum-rrset.example. 5M IN A 10.0.1.63 +a-maximum-rrset.example. 5M IN A 10.0.1.64 +a-maximum-rrset.example. 5M IN A 10.0.1.65 +a-maximum-rrset.example. 5M IN A 10.0.1.66 +a-maximum-rrset.example. 5M IN A 10.0.1.67 +a-maximum-rrset.example. 5M IN A 10.0.1.68 +a-maximum-rrset.example. 5M IN A 10.0.1.69 +a-maximum-rrset.example. 5M IN A 10.0.1.70 +a-maximum-rrset.example. 5M IN A 10.0.1.71 +a-maximum-rrset.example. 5M IN A 10.0.1.72 +a-maximum-rrset.example. 5M IN A 10.0.1.73 +a-maximum-rrset.example. 5M IN A 10.0.1.74 +a-maximum-rrset.example. 5M IN A 10.0.1.75 +a-maximum-rrset.example. 5M IN A 10.0.1.76 +a-maximum-rrset.example. 5M IN A 10.0.1.77 +a-maximum-rrset.example. 5M IN A 10.0.1.78 +a-maximum-rrset.example. 5M IN A 10.0.1.79 +a-maximum-rrset.example. 5M IN A 10.0.1.80 +a-maximum-rrset.example. 5M IN A 10.0.1.81 +a-maximum-rrset.example. 5M IN A 10.0.1.82 +a-maximum-rrset.example. 5M IN A 10.0.1.83 +a-maximum-rrset.example. 5M IN A 10.0.1.84 +a-maximum-rrset.example. 5M IN A 10.0.1.85 +a-maximum-rrset.example. 5M IN A 10.0.1.86 +a-maximum-rrset.example. 5M IN A 10.0.1.87 +a-maximum-rrset.example. 5M IN A 10.0.1.88 +a-maximum-rrset.example. 5M IN A 10.0.1.89 +a-maximum-rrset.example. 5M IN A 10.0.1.90 +a-maximum-rrset.example. 5M IN A 10.0.1.91 +a-maximum-rrset.example. 5M IN A 10.0.1.92 +a-maximum-rrset.example. 5M IN A 10.0.1.93 +a-maximum-rrset.example. 5M IN A 10.0.1.94 +a-maximum-rrset.example. 5M IN A 10.0.1.95 +a-maximum-rrset.example. 5M IN A 10.0.1.96 +a-maximum-rrset.example. 5M IN A 10.0.1.97 +a-maximum-rrset.example. 5M IN A 10.0.1.98 +a-maximum-rrset.example. 5M IN A 10.0.1.99 +a-maximum-rrset.example. 5M IN A 10.0.1.100 +a-maximum-rrset.example. 5M IN A 10.0.1.101 +a-maximum-rrset.example. 5M IN A 10.0.1.102 +a-maximum-rrset.example. 5M IN A 10.0.1.103 +a-maximum-rrset.example. 5M IN A 10.0.1.104 +a-maximum-rrset.example. 5M IN A 10.0.1.105 +a-maximum-rrset.example. 5M IN A 10.0.1.106 +a-maximum-rrset.example. 5M IN A 10.0.1.107 +a-maximum-rrset.example. 5M IN A 10.0.1.108 +a-maximum-rrset.example. 5M IN A 10.0.1.109 +a-maximum-rrset.example. 5M IN A 10.0.1.110 +a-maximum-rrset.example. 5M IN A 10.0.1.111 +a-maximum-rrset.example. 5M IN A 10.0.1.112 +a-maximum-rrset.example. 5M IN A 10.0.1.113 +a-maximum-rrset.example. 5M IN A 10.0.1.114 +a-maximum-rrset.example. 5M IN A 10.0.1.115 +a-maximum-rrset.example. 5M IN A 10.0.1.116 +a-maximum-rrset.example. 5M IN A 10.0.1.117 +a-maximum-rrset.example. 5M IN A 10.0.1.118 +a-maximum-rrset.example. 5M IN A 10.0.1.119 +a-maximum-rrset.example. 5M IN A 10.0.1.120 +a-maximum-rrset.example. 5M IN A 10.0.1.121 +a-maximum-rrset.example. 5M IN A 10.0.1.122 +a-maximum-rrset.example. 5M IN A 10.0.1.123 +a-maximum-rrset.example. 5M IN A 10.0.1.124 +a-maximum-rrset.example. 5M IN A 10.0.1.125 +a-maximum-rrset.example. 5M IN A 10.0.1.126 +a-maximum-rrset.example. 5M IN A 10.0.1.127 +a-maximum-rrset.example. 5M IN A 10.0.1.128 +a-maximum-rrset.example. 5M IN A 10.0.1.129 +a-maximum-rrset.example. 5M IN A 10.0.1.130 +a-maximum-rrset.example. 5M IN A 10.0.1.131 +a-maximum-rrset.example. 5M IN A 10.0.1.132 +a-maximum-rrset.example. 5M IN A 10.0.1.133 +a-maximum-rrset.example. 5M IN A 10.0.1.134 +a-maximum-rrset.example. 5M IN A 10.0.1.135 +a-maximum-rrset.example. 5M IN A 10.0.1.136 +a-maximum-rrset.example. 5M IN A 10.0.1.137 +a-maximum-rrset.example. 5M IN A 10.0.1.138 +a-maximum-rrset.example. 5M IN A 10.0.1.139 +a-maximum-rrset.example. 5M IN A 10.0.1.140 +a-maximum-rrset.example. 5M IN A 10.0.1.141 +a-maximum-rrset.example. 5M IN A 10.0.1.142 +a-maximum-rrset.example. 5M IN A 10.0.1.143 +a-maximum-rrset.example. 5M IN A 10.0.1.144 +a-maximum-rrset.example. 5M IN A 10.0.1.145 +a-maximum-rrset.example. 5M IN A 10.0.1.146 +a-maximum-rrset.example. 5M IN A 10.0.1.147 +a-maximum-rrset.example. 5M IN A 10.0.1.148 +a-maximum-rrset.example. 5M IN A 10.0.1.149 +a-maximum-rrset.example. 5M IN A 10.0.1.150 +a-maximum-rrset.example. 5M IN A 10.0.1.151 +a-maximum-rrset.example. 5M IN A 10.0.1.152 +a-maximum-rrset.example. 5M IN A 10.0.1.153 +a-maximum-rrset.example. 5M IN A 10.0.1.154 +a-maximum-rrset.example. 5M IN A 10.0.1.155 +a-maximum-rrset.example. 5M IN A 10.0.1.156 +a-maximum-rrset.example. 5M IN A 10.0.1.157 +a-maximum-rrset.example. 5M IN A 10.0.1.158 +a-maximum-rrset.example. 5M IN A 10.0.1.159 +a-maximum-rrset.example. 5M IN A 10.0.1.160 +a-maximum-rrset.example. 5M IN A 10.0.1.161 +a-maximum-rrset.example. 5M IN A 10.0.1.162 +a-maximum-rrset.example. 5M IN A 10.0.1.163 +a-maximum-rrset.example. 5M IN A 10.0.1.164 +a-maximum-rrset.example. 5M IN A 10.0.1.165 +a-maximum-rrset.example. 5M IN A 10.0.1.166 +a-maximum-rrset.example. 5M IN A 10.0.1.167 +a-maximum-rrset.example. 5M IN A 10.0.1.168 +a-maximum-rrset.example. 5M IN A 10.0.1.169 +a-maximum-rrset.example. 5M IN A 10.0.1.170 +a-maximum-rrset.example. 5M IN A 10.0.1.171 +a-maximum-rrset.example. 5M IN A 10.0.1.172 +a-maximum-rrset.example. 5M IN A 10.0.1.173 +a-maximum-rrset.example. 5M IN A 10.0.1.174 +a-maximum-rrset.example. 5M IN A 10.0.1.175 +a-maximum-rrset.example. 5M IN A 10.0.1.176 +a-maximum-rrset.example. 5M IN A 10.0.1.177 +a-maximum-rrset.example. 5M IN A 10.0.1.178 +a-maximum-rrset.example. 5M IN A 10.0.1.179 +a-maximum-rrset.example. 5M IN A 10.0.1.180 +a-maximum-rrset.example. 5M IN A 10.0.1.181 +a-maximum-rrset.example. 5M IN A 10.0.1.182 +a-maximum-rrset.example. 5M IN A 10.0.1.183 +a-maximum-rrset.example. 5M IN A 10.0.1.184 +a-maximum-rrset.example. 5M IN A 10.0.1.185 +a-maximum-rrset.example. 5M IN A 10.0.1.186 +a-maximum-rrset.example. 5M IN A 10.0.1.187 +a-maximum-rrset.example. 5M IN A 10.0.1.188 +a-maximum-rrset.example. 5M IN A 10.0.1.189 +a-maximum-rrset.example. 5M IN A 10.0.1.190 +a-maximum-rrset.example. 5M IN A 10.0.1.191 +a-maximum-rrset.example. 5M IN A 10.0.1.192 +a-maximum-rrset.example. 5M IN A 10.0.1.193 +a-maximum-rrset.example. 5M IN A 10.0.1.194 +a-maximum-rrset.example. 5M IN A 10.0.1.195 +a-maximum-rrset.example. 5M IN A 10.0.1.196 +a-maximum-rrset.example. 5M IN A 10.0.1.197 +a-maximum-rrset.example. 5M IN A 10.0.1.198 +a-maximum-rrset.example. 5M IN A 10.0.1.199 +a-maximum-rrset.example. 5M IN A 10.0.1.200 +a-maximum-rrset.example. 5M IN A 10.0.1.201 +a-maximum-rrset.example. 5M IN A 10.0.1.202 +a-maximum-rrset.example. 5M IN A 10.0.1.203 +a-maximum-rrset.example. 5M IN A 10.0.1.204 +a-maximum-rrset.example. 5M IN A 10.0.1.205 +a-maximum-rrset.example. 5M IN A 10.0.1.206 +a-maximum-rrset.example. 5M IN A 10.0.1.207 +a-maximum-rrset.example. 5M IN A 10.0.1.208 +a-maximum-rrset.example. 5M IN A 10.0.1.209 +a-maximum-rrset.example. 5M IN A 10.0.1.210 +a-maximum-rrset.example. 5M IN A 10.0.1.211 +a-maximum-rrset.example. 5M IN A 10.0.1.212 +a-maximum-rrset.example. 5M IN A 10.0.1.213 +a-maximum-rrset.example. 5M IN A 10.0.1.214 +a-maximum-rrset.example. 5M IN A 10.0.1.215 +a-maximum-rrset.example. 5M IN A 10.0.1.216 +a-maximum-rrset.example. 5M IN A 10.0.1.217 +a-maximum-rrset.example. 5M IN A 10.0.1.218 +a-maximum-rrset.example. 5M IN A 10.0.1.219 +a-maximum-rrset.example. 5M IN A 10.0.1.220 +a-maximum-rrset.example. 5M IN A 10.0.1.221 +a-maximum-rrset.example. 5M IN A 10.0.1.222 +a-maximum-rrset.example. 5M IN A 10.0.1.223 +a-maximum-rrset.example. 5M IN A 10.0.1.224 +a-maximum-rrset.example. 5M IN A 10.0.1.225 +a-maximum-rrset.example. 5M IN A 10.0.1.226 +a-maximum-rrset.example. 5M IN A 10.0.1.227 +a-maximum-rrset.example. 5M IN A 10.0.1.228 +a-maximum-rrset.example. 5M IN A 10.0.1.229 +a-maximum-rrset.example. 5M IN A 10.0.1.230 +a-maximum-rrset.example. 5M IN A 10.0.1.231 +a-maximum-rrset.example. 5M IN A 10.0.1.232 +a-maximum-rrset.example. 5M IN A 10.0.1.233 +a-maximum-rrset.example. 5M IN A 10.0.1.234 +a-maximum-rrset.example. 5M IN A 10.0.1.235 +a-maximum-rrset.example. 5M IN A 10.0.1.236 +a-maximum-rrset.example. 5M IN A 10.0.1.237 +a-maximum-rrset.example. 5M IN A 10.0.1.238 +a-maximum-rrset.example. 5M IN A 10.0.1.239 +a-maximum-rrset.example. 5M IN A 10.0.1.240 +a-maximum-rrset.example. 5M IN A 10.0.1.241 +a-maximum-rrset.example. 5M IN A 10.0.1.242 +a-maximum-rrset.example. 5M IN A 10.0.1.243 +a-maximum-rrset.example. 5M IN A 10.0.1.244 +a-maximum-rrset.example. 5M IN A 10.0.1.245 +a-maximum-rrset.example. 5M IN A 10.0.1.246 +a-maximum-rrset.example. 5M IN A 10.0.1.247 +a-maximum-rrset.example. 5M IN A 10.0.1.248 +a-maximum-rrset.example. 5M IN A 10.0.1.249 +a-maximum-rrset.example. 5M IN A 10.0.1.250 +a-maximum-rrset.example. 5M IN A 10.0.1.251 +a-maximum-rrset.example. 5M IN A 10.0.1.252 +a-maximum-rrset.example. 5M IN A 10.0.1.253 +a-maximum-rrset.example. 5M IN A 10.0.1.254 +a-maximum-rrset.example. 5M IN A 10.0.1.255 +a-maximum-rrset.example. 5M IN A 10.0.2.0 +a-maximum-rrset.example. 5M IN A 10.0.2.1 +a-maximum-rrset.example. 5M IN A 10.0.2.2 +a-maximum-rrset.example. 5M IN A 10.0.2.3 +a-maximum-rrset.example. 5M IN A 10.0.2.4 +a-maximum-rrset.example. 5M IN A 10.0.2.5 +a-maximum-rrset.example. 5M IN A 10.0.2.6 +a-maximum-rrset.example. 5M IN A 10.0.2.7 +a-maximum-rrset.example. 5M IN A 10.0.2.8 +a-maximum-rrset.example. 5M IN A 10.0.2.9 +a-maximum-rrset.example. 5M IN A 10.0.2.10 +a-maximum-rrset.example. 5M IN A 10.0.2.11 +a-maximum-rrset.example. 5M IN A 10.0.2.12 +a-maximum-rrset.example. 5M IN A 10.0.2.13 +a-maximum-rrset.example. 5M IN A 10.0.2.14 +a-maximum-rrset.example. 5M IN A 10.0.2.15 +a-maximum-rrset.example. 5M IN A 10.0.2.16 +a-maximum-rrset.example. 5M IN A 10.0.2.17 +a-maximum-rrset.example. 5M IN A 10.0.2.18 +a-maximum-rrset.example. 5M IN A 10.0.2.19 +a-maximum-rrset.example. 5M IN A 10.0.2.20 +a-maximum-rrset.example. 5M IN A 10.0.2.21 +a-maximum-rrset.example. 5M IN A 10.0.2.22 +a-maximum-rrset.example. 5M IN A 10.0.2.23 +a-maximum-rrset.example. 5M IN A 10.0.2.24 +a-maximum-rrset.example. 5M IN A 10.0.2.25 +a-maximum-rrset.example. 5M IN A 10.0.2.26 +a-maximum-rrset.example. 5M IN A 10.0.2.27 +a-maximum-rrset.example. 5M IN A 10.0.2.28 +a-maximum-rrset.example. 5M IN A 10.0.2.29 +a-maximum-rrset.example. 5M IN A 10.0.2.30 +a-maximum-rrset.example. 5M IN A 10.0.2.31 +a-maximum-rrset.example. 5M IN A 10.0.2.32 +a-maximum-rrset.example. 5M IN A 10.0.2.33 +a-maximum-rrset.example. 5M IN A 10.0.2.34 +a-maximum-rrset.example. 5M IN A 10.0.2.35 +a-maximum-rrset.example. 5M IN A 10.0.2.36 +a-maximum-rrset.example. 5M IN A 10.0.2.37 +a-maximum-rrset.example. 5M IN A 10.0.2.38 +a-maximum-rrset.example. 5M IN A 10.0.2.39 +a-maximum-rrset.example. 5M IN A 10.0.2.40 +a-maximum-rrset.example. 5M IN A 10.0.2.41 +a-maximum-rrset.example. 5M IN A 10.0.2.42 +a-maximum-rrset.example. 5M IN A 10.0.2.43 +a-maximum-rrset.example. 5M IN A 10.0.2.44 +a-maximum-rrset.example. 5M IN A 10.0.2.45 +a-maximum-rrset.example. 5M IN A 10.0.2.46 +a-maximum-rrset.example. 5M IN A 10.0.2.47 +a-maximum-rrset.example. 5M IN A 10.0.2.48 +a-maximum-rrset.example. 5M IN A 10.0.2.49 +a-maximum-rrset.example. 5M IN A 10.0.2.50 +a-maximum-rrset.example. 5M IN A 10.0.2.51 +a-maximum-rrset.example. 5M IN A 10.0.2.52 +a-maximum-rrset.example. 5M IN A 10.0.2.53 +a-maximum-rrset.example. 5M IN A 10.0.2.54 +a-maximum-rrset.example. 5M IN A 10.0.2.55 +a-maximum-rrset.example. 5M IN A 10.0.2.56 +a-maximum-rrset.example. 5M IN A 10.0.2.57 +a-maximum-rrset.example. 5M IN A 10.0.2.58 +a-maximum-rrset.example. 5M IN A 10.0.2.59 +a-maximum-rrset.example. 5M IN A 10.0.2.60 +a-maximum-rrset.example. 5M IN A 10.0.2.61 +a-maximum-rrset.example. 5M IN A 10.0.2.62 +a-maximum-rrset.example. 5M IN A 10.0.2.63 +a-maximum-rrset.example. 5M IN A 10.0.2.64 +a-maximum-rrset.example. 5M IN A 10.0.2.65 +a-maximum-rrset.example. 5M IN A 10.0.2.66 +a-maximum-rrset.example. 5M IN A 10.0.2.67 +a-maximum-rrset.example. 5M IN A 10.0.2.68 +a-maximum-rrset.example. 5M IN A 10.0.2.69 +a-maximum-rrset.example. 5M IN A 10.0.2.70 +a-maximum-rrset.example. 5M IN A 10.0.2.71 +a-maximum-rrset.example. 5M IN A 10.0.2.72 +a-maximum-rrset.example. 5M IN A 10.0.2.73 +a-maximum-rrset.example. 5M IN A 10.0.2.74 +a-maximum-rrset.example. 5M IN A 10.0.2.75 +a-maximum-rrset.example. 5M IN A 10.0.2.76 +a-maximum-rrset.example. 5M IN A 10.0.2.77 +a-maximum-rrset.example. 5M IN A 10.0.2.78 +a-maximum-rrset.example. 5M IN A 10.0.2.79 +a-maximum-rrset.example. 5M IN A 10.0.2.80 +a-maximum-rrset.example. 5M IN A 10.0.2.81 +a-maximum-rrset.example. 5M IN A 10.0.2.82 +a-maximum-rrset.example. 5M IN A 10.0.2.83 +a-maximum-rrset.example. 5M IN A 10.0.2.84 +a-maximum-rrset.example. 5M IN A 10.0.2.85 +a-maximum-rrset.example. 5M IN A 10.0.2.86 +a-maximum-rrset.example. 5M IN A 10.0.2.87 +a-maximum-rrset.example. 5M IN A 10.0.2.88 +a-maximum-rrset.example. 5M IN A 10.0.2.89 +a-maximum-rrset.example. 5M IN A 10.0.2.90 +a-maximum-rrset.example. 5M IN A 10.0.2.91 +a-maximum-rrset.example. 5M IN A 10.0.2.92 +a-maximum-rrset.example. 5M IN A 10.0.2.93 +a-maximum-rrset.example. 5M IN A 10.0.2.94 +a-maximum-rrset.example. 5M IN A 10.0.2.95 +a-maximum-rrset.example. 5M IN A 10.0.2.96 +a-maximum-rrset.example. 5M IN A 10.0.2.97 +a-maximum-rrset.example. 5M IN A 10.0.2.98 +a-maximum-rrset.example. 5M IN A 10.0.2.99 +a-maximum-rrset.example. 5M IN A 10.0.2.100 +a-maximum-rrset.example. 5M IN A 10.0.2.101 +a-maximum-rrset.example. 5M IN A 10.0.2.102 +a-maximum-rrset.example. 5M IN A 10.0.2.103 +a-maximum-rrset.example. 5M IN A 10.0.2.104 +a-maximum-rrset.example. 5M IN A 10.0.2.105 +a-maximum-rrset.example. 5M IN A 10.0.2.106 +a-maximum-rrset.example. 5M IN A 10.0.2.107 +a-maximum-rrset.example. 5M IN A 10.0.2.108 +a-maximum-rrset.example. 5M IN A 10.0.2.109 +a-maximum-rrset.example. 5M IN A 10.0.2.110 +a-maximum-rrset.example. 5M IN A 10.0.2.111 +a-maximum-rrset.example. 5M IN A 10.0.2.112 +a-maximum-rrset.example. 5M IN A 10.0.2.113 +a-maximum-rrset.example. 5M IN A 10.0.2.114 +a-maximum-rrset.example. 5M IN A 10.0.2.115 +a-maximum-rrset.example. 5M IN A 10.0.2.116 +a-maximum-rrset.example. 5M IN A 10.0.2.117 +a-maximum-rrset.example. 5M IN A 10.0.2.118 +a-maximum-rrset.example. 5M IN A 10.0.2.119 +a-maximum-rrset.example. 5M IN A 10.0.2.120 +a-maximum-rrset.example. 5M IN A 10.0.2.121 +a-maximum-rrset.example. 5M IN A 10.0.2.122 +a-maximum-rrset.example. 5M IN A 10.0.2.123 +a-maximum-rrset.example. 5M IN A 10.0.2.124 +a-maximum-rrset.example. 5M IN A 10.0.2.125 +a-maximum-rrset.example. 5M IN A 10.0.2.126 +a-maximum-rrset.example. 5M IN A 10.0.2.127 +a-maximum-rrset.example. 5M IN A 10.0.2.128 +a-maximum-rrset.example. 5M IN A 10.0.2.129 +a-maximum-rrset.example. 5M IN A 10.0.2.130 +a-maximum-rrset.example. 5M IN A 10.0.2.131 +a-maximum-rrset.example. 5M IN A 10.0.2.132 +a-maximum-rrset.example. 5M IN A 10.0.2.133 +a-maximum-rrset.example. 5M IN A 10.0.2.134 +a-maximum-rrset.example. 5M IN A 10.0.2.135 +a-maximum-rrset.example. 5M IN A 10.0.2.136 +a-maximum-rrset.example. 5M IN A 10.0.2.137 +a-maximum-rrset.example. 5M IN A 10.0.2.138 +a-maximum-rrset.example. 5M IN A 10.0.2.139 +a-maximum-rrset.example. 5M IN A 10.0.2.140 +a-maximum-rrset.example. 5M IN A 10.0.2.141 +a-maximum-rrset.example. 5M IN A 10.0.2.142 +a-maximum-rrset.example. 5M IN A 10.0.2.143 +a-maximum-rrset.example. 5M IN A 10.0.2.144 +a-maximum-rrset.example. 5M IN A 10.0.2.145 +a-maximum-rrset.example. 5M IN A 10.0.2.146 +a-maximum-rrset.example. 5M IN A 10.0.2.147 +a-maximum-rrset.example. 5M IN A 10.0.2.148 +a-maximum-rrset.example. 5M IN A 10.0.2.149 +a-maximum-rrset.example. 5M IN A 10.0.2.150 +a-maximum-rrset.example. 5M IN A 10.0.2.151 +a-maximum-rrset.example. 5M IN A 10.0.2.152 +a-maximum-rrset.example. 5M IN A 10.0.2.153 +a-maximum-rrset.example. 5M IN A 10.0.2.154 +a-maximum-rrset.example. 5M IN A 10.0.2.155 +a-maximum-rrset.example. 5M IN A 10.0.2.156 +a-maximum-rrset.example. 5M IN A 10.0.2.157 +a-maximum-rrset.example. 5M IN A 10.0.2.158 +a-maximum-rrset.example. 5M IN A 10.0.2.159 +a-maximum-rrset.example. 5M IN A 10.0.2.160 +a-maximum-rrset.example. 5M IN A 10.0.2.161 +a-maximum-rrset.example. 5M IN A 10.0.2.162 +a-maximum-rrset.example. 5M IN A 10.0.2.163 +a-maximum-rrset.example. 5M IN A 10.0.2.164 +a-maximum-rrset.example. 5M IN A 10.0.2.165 +a-maximum-rrset.example. 5M IN A 10.0.2.166 +a-maximum-rrset.example. 5M IN A 10.0.2.167 +a-maximum-rrset.example. 5M IN A 10.0.2.168 +a-maximum-rrset.example. 5M IN A 10.0.2.169 +a-maximum-rrset.example. 5M IN A 10.0.2.170 +a-maximum-rrset.example. 5M IN A 10.0.2.171 +a-maximum-rrset.example. 5M IN A 10.0.2.172 +a-maximum-rrset.example. 5M IN A 10.0.2.173 +a-maximum-rrset.example. 5M IN A 10.0.2.174 +a-maximum-rrset.example. 5M IN A 10.0.2.175 +a-maximum-rrset.example. 5M IN A 10.0.2.176 +a-maximum-rrset.example. 5M IN A 10.0.2.177 +a-maximum-rrset.example. 5M IN A 10.0.2.178 +a-maximum-rrset.example. 5M IN A 10.0.2.179 +a-maximum-rrset.example. 5M IN A 10.0.2.180 +a-maximum-rrset.example. 5M IN A 10.0.2.181 +a-maximum-rrset.example. 5M IN A 10.0.2.182 +a-maximum-rrset.example. 5M IN A 10.0.2.183 +a-maximum-rrset.example. 5M IN A 10.0.2.184 +a-maximum-rrset.example. 5M IN A 10.0.2.185 +a-maximum-rrset.example. 5M IN A 10.0.2.186 +a-maximum-rrset.example. 5M IN A 10.0.2.187 +a-maximum-rrset.example. 5M IN A 10.0.2.188 +a-maximum-rrset.example. 5M IN A 10.0.2.189 +a-maximum-rrset.example. 5M IN A 10.0.2.190 +a-maximum-rrset.example. 5M IN A 10.0.2.191 +a-maximum-rrset.example. 5M IN A 10.0.2.192 +a-maximum-rrset.example. 5M IN A 10.0.2.193 +a-maximum-rrset.example. 5M IN A 10.0.2.194 +a-maximum-rrset.example. 5M IN A 10.0.2.195 +a-maximum-rrset.example. 5M IN A 10.0.2.196 +a-maximum-rrset.example. 5M IN A 10.0.2.197 +a-maximum-rrset.example. 5M IN A 10.0.2.198 +a-maximum-rrset.example. 5M IN A 10.0.2.199 +a-maximum-rrset.example. 5M IN A 10.0.2.200 +a-maximum-rrset.example. 5M IN A 10.0.2.201 +a-maximum-rrset.example. 5M IN A 10.0.2.202 +a-maximum-rrset.example. 5M IN A 10.0.2.203 +a-maximum-rrset.example. 5M IN A 10.0.2.204 +a-maximum-rrset.example. 5M IN A 10.0.2.205 +a-maximum-rrset.example. 5M IN A 10.0.2.206 +a-maximum-rrset.example. 5M IN A 10.0.2.207 +a-maximum-rrset.example. 5M IN A 10.0.2.208 +a-maximum-rrset.example. 5M IN A 10.0.2.209 +a-maximum-rrset.example. 5M IN A 10.0.2.210 +a-maximum-rrset.example. 5M IN A 10.0.2.211 +a-maximum-rrset.example. 5M IN A 10.0.2.212 +a-maximum-rrset.example. 5M IN A 10.0.2.213 +a-maximum-rrset.example. 5M IN A 10.0.2.214 +a-maximum-rrset.example. 5M IN A 10.0.2.215 +a-maximum-rrset.example. 5M IN A 10.0.2.216 +a-maximum-rrset.example. 5M IN A 10.0.2.217 +a-maximum-rrset.example. 5M IN A 10.0.2.218 +a-maximum-rrset.example. 5M IN A 10.0.2.219 +a-maximum-rrset.example. 5M IN A 10.0.2.220 +a-maximum-rrset.example. 5M IN A 10.0.2.221 +a-maximum-rrset.example. 5M IN A 10.0.2.222 +a-maximum-rrset.example. 5M IN A 10.0.2.223 +a-maximum-rrset.example. 5M IN A 10.0.2.224 +a-maximum-rrset.example. 5M IN A 10.0.2.225 +a-maximum-rrset.example. 5M IN A 10.0.2.226 +a-maximum-rrset.example. 5M IN A 10.0.2.227 +a-maximum-rrset.example. 5M IN A 10.0.2.228 +a-maximum-rrset.example. 5M IN A 10.0.2.229 +a-maximum-rrset.example. 5M IN A 10.0.2.230 +a-maximum-rrset.example. 5M IN A 10.0.2.231 +a-maximum-rrset.example. 5M IN A 10.0.2.232 +a-maximum-rrset.example. 5M IN A 10.0.2.233 +a-maximum-rrset.example. 5M IN A 10.0.2.234 +a-maximum-rrset.example. 5M IN A 10.0.2.235 +a-maximum-rrset.example. 5M IN A 10.0.2.236 +a-maximum-rrset.example. 5M IN A 10.0.2.237 +a-maximum-rrset.example. 5M IN A 10.0.2.238 +a-maximum-rrset.example. 5M IN A 10.0.2.239 +a-maximum-rrset.example. 5M IN A 10.0.2.240 +a-maximum-rrset.example. 5M IN A 10.0.2.241 +a-maximum-rrset.example. 5M IN A 10.0.2.242 +a-maximum-rrset.example. 5M IN A 10.0.2.243 +a-maximum-rrset.example. 5M IN A 10.0.2.244 +a-maximum-rrset.example. 5M IN A 10.0.2.245 +a-maximum-rrset.example. 5M IN A 10.0.2.246 +a-maximum-rrset.example. 5M IN A 10.0.2.247 +a-maximum-rrset.example. 5M IN A 10.0.2.248 +a-maximum-rrset.example. 5M IN A 10.0.2.249 +a-maximum-rrset.example. 5M IN A 10.0.2.250 +a-maximum-rrset.example. 5M IN A 10.0.2.251 +a-maximum-rrset.example. 5M IN A 10.0.2.252 +a-maximum-rrset.example. 5M IN A 10.0.2.253 +a-maximum-rrset.example. 5M IN A 10.0.2.254 +a-maximum-rrset.example. 5M IN A 10.0.2.255 +a-maximum-rrset.example. 5M IN A 10.0.3.0 +a-maximum-rrset.example. 5M IN A 10.0.3.1 +a-maximum-rrset.example. 5M IN A 10.0.3.2 +a-maximum-rrset.example. 5M IN A 10.0.3.3 +a-maximum-rrset.example. 5M IN A 10.0.3.4 +a-maximum-rrset.example. 5M IN A 10.0.3.5 +a-maximum-rrset.example. 5M IN A 10.0.3.6 +a-maximum-rrset.example. 5M IN A 10.0.3.7 +a-maximum-rrset.example. 5M IN A 10.0.3.8 +a-maximum-rrset.example. 5M IN A 10.0.3.9 +a-maximum-rrset.example. 5M IN A 10.0.3.10 +a-maximum-rrset.example. 5M IN A 10.0.3.11 +a-maximum-rrset.example. 5M IN A 10.0.3.12 +a-maximum-rrset.example. 5M IN A 10.0.3.13 +a-maximum-rrset.example. 5M IN A 10.0.3.14 +a-maximum-rrset.example. 5M IN A 10.0.3.15 +a-maximum-rrset.example. 5M IN A 10.0.3.16 +a-maximum-rrset.example. 5M IN A 10.0.3.17 +a-maximum-rrset.example. 5M IN A 10.0.3.18 +a-maximum-rrset.example. 5M IN A 10.0.3.19 +a-maximum-rrset.example. 5M IN A 10.0.3.20 +a-maximum-rrset.example. 5M IN A 10.0.3.21 +a-maximum-rrset.example. 5M IN A 10.0.3.22 +a-maximum-rrset.example. 5M IN A 10.0.3.23 +a-maximum-rrset.example. 5M IN A 10.0.3.24 +a-maximum-rrset.example. 5M IN A 10.0.3.25 +a-maximum-rrset.example. 5M IN A 10.0.3.26 +a-maximum-rrset.example. 5M IN A 10.0.3.27 +a-maximum-rrset.example. 5M IN A 10.0.3.28 +a-maximum-rrset.example. 5M IN A 10.0.3.29 +a-maximum-rrset.example. 5M IN A 10.0.3.30 +a-maximum-rrset.example. 5M IN A 10.0.3.31 +a-maximum-rrset.example. 5M IN A 10.0.3.32 +a-maximum-rrset.example. 5M IN A 10.0.3.33 +a-maximum-rrset.example. 5M IN A 10.0.3.34 +a-maximum-rrset.example. 5M IN A 10.0.3.35 +a-maximum-rrset.example. 5M IN A 10.0.3.36 +a-maximum-rrset.example. 5M IN A 10.0.3.37 +a-maximum-rrset.example. 5M IN A 10.0.3.38 +a-maximum-rrset.example. 5M IN A 10.0.3.39 +a-maximum-rrset.example. 5M IN A 10.0.3.40 +a-maximum-rrset.example. 5M IN A 10.0.3.41 +a-maximum-rrset.example. 5M IN A 10.0.3.42 +a-maximum-rrset.example. 5M IN A 10.0.3.43 +a-maximum-rrset.example. 5M IN A 10.0.3.44 +a-maximum-rrset.example. 5M IN A 10.0.3.45 +a-maximum-rrset.example. 5M IN A 10.0.3.46 +a-maximum-rrset.example. 5M IN A 10.0.3.47 +a-maximum-rrset.example. 5M IN A 10.0.3.48 +a-maximum-rrset.example. 5M IN A 10.0.3.49 +a-maximum-rrset.example. 5M IN A 10.0.3.50 +a-maximum-rrset.example. 5M IN A 10.0.3.51 +a-maximum-rrset.example. 5M IN A 10.0.3.52 +a-maximum-rrset.example. 5M IN A 10.0.3.53 +a-maximum-rrset.example. 5M IN A 10.0.3.54 +a-maximum-rrset.example. 5M IN A 10.0.3.55 +a-maximum-rrset.example. 5M IN A 10.0.3.56 +a-maximum-rrset.example. 5M IN A 10.0.3.57 +a-maximum-rrset.example. 5M IN A 10.0.3.58 +a-maximum-rrset.example. 5M IN A 10.0.3.59 +a-maximum-rrset.example. 5M IN A 10.0.3.60 +a-maximum-rrset.example. 5M IN A 10.0.3.61 +a-maximum-rrset.example. 5M IN A 10.0.3.62 +a-maximum-rrset.example. 5M IN A 10.0.3.63 +a-maximum-rrset.example. 5M IN A 10.0.3.64 +a-maximum-rrset.example. 5M IN A 10.0.3.65 +a-maximum-rrset.example. 5M IN A 10.0.3.66 +a-maximum-rrset.example. 5M IN A 10.0.3.67 +a-maximum-rrset.example. 5M IN A 10.0.3.68 +a-maximum-rrset.example. 5M IN A 10.0.3.69 +a-maximum-rrset.example. 5M IN A 10.0.3.70 +a-maximum-rrset.example. 5M IN A 10.0.3.71 +a-maximum-rrset.example. 5M IN A 10.0.3.72 +a-maximum-rrset.example. 5M IN A 10.0.3.73 +a-maximum-rrset.example. 5M IN A 10.0.3.74 +a-maximum-rrset.example. 5M IN A 10.0.3.75 +a-maximum-rrset.example. 5M IN A 10.0.3.76 +a-maximum-rrset.example. 5M IN A 10.0.3.77 +a-maximum-rrset.example. 5M IN A 10.0.3.78 +a-maximum-rrset.example. 5M IN A 10.0.3.79 +a-maximum-rrset.example. 5M IN A 10.0.3.80 +a-maximum-rrset.example. 5M IN A 10.0.3.81 +a-maximum-rrset.example. 5M IN A 10.0.3.82 +a-maximum-rrset.example. 5M IN A 10.0.3.83 +a-maximum-rrset.example. 5M IN A 10.0.3.84 +a-maximum-rrset.example. 5M IN A 10.0.3.85 +a-maximum-rrset.example. 5M IN A 10.0.3.86 +a-maximum-rrset.example. 5M IN A 10.0.3.87 +a-maximum-rrset.example. 5M IN A 10.0.3.88 +a-maximum-rrset.example. 5M IN A 10.0.3.89 +a-maximum-rrset.example. 5M IN A 10.0.3.90 +a-maximum-rrset.example. 5M IN A 10.0.3.91 +a-maximum-rrset.example. 5M IN A 10.0.3.92 +a-maximum-rrset.example. 5M IN A 10.0.3.93 +a-maximum-rrset.example. 5M IN A 10.0.3.94 +a-maximum-rrset.example. 5M IN A 10.0.3.95 +a-maximum-rrset.example. 5M IN A 10.0.3.96 +a-maximum-rrset.example. 5M IN A 10.0.3.97 +a-maximum-rrset.example. 5M IN A 10.0.3.98 +a-maximum-rrset.example. 5M IN A 10.0.3.99 +a-maximum-rrset.example. 5M IN A 10.0.3.100 +a-maximum-rrset.example. 5M IN A 10.0.3.101 +a-maximum-rrset.example. 5M IN A 10.0.3.102 +a-maximum-rrset.example. 5M IN A 10.0.3.103 +a-maximum-rrset.example. 5M IN A 10.0.3.104 +a-maximum-rrset.example. 5M IN A 10.0.3.105 +a-maximum-rrset.example. 5M IN A 10.0.3.106 +a-maximum-rrset.example. 5M IN A 10.0.3.107 +a-maximum-rrset.example. 5M IN A 10.0.3.108 +a-maximum-rrset.example. 5M IN A 10.0.3.109 +a-maximum-rrset.example. 5M IN A 10.0.3.110 +a-maximum-rrset.example. 5M IN A 10.0.3.111 +a-maximum-rrset.example. 5M IN A 10.0.3.112 +a-maximum-rrset.example. 5M IN A 10.0.3.113 +a-maximum-rrset.example. 5M IN A 10.0.3.114 +a-maximum-rrset.example. 5M IN A 10.0.3.115 +a-maximum-rrset.example. 5M IN A 10.0.3.116 +a-maximum-rrset.example. 5M IN A 10.0.3.117 +a-maximum-rrset.example. 5M IN A 10.0.3.118 +a-maximum-rrset.example. 5M IN A 10.0.3.119 +a-maximum-rrset.example. 5M IN A 10.0.3.120 +a-maximum-rrset.example. 5M IN A 10.0.3.121 +a-maximum-rrset.example. 5M IN A 10.0.3.122 +a-maximum-rrset.example. 5M IN A 10.0.3.123 +a-maximum-rrset.example. 5M IN A 10.0.3.124 +a-maximum-rrset.example. 5M IN A 10.0.3.125 +a-maximum-rrset.example. 5M IN A 10.0.3.126 +a-maximum-rrset.example. 5M IN A 10.0.3.127 +a-maximum-rrset.example. 5M IN A 10.0.3.128 +a-maximum-rrset.example. 5M IN A 10.0.3.129 +a-maximum-rrset.example. 5M IN A 10.0.3.130 +a-maximum-rrset.example. 5M IN A 10.0.3.131 +a-maximum-rrset.example. 5M IN A 10.0.3.132 +a-maximum-rrset.example. 5M IN A 10.0.3.133 +a-maximum-rrset.example. 5M IN A 10.0.3.134 +a-maximum-rrset.example. 5M IN A 10.0.3.135 +a-maximum-rrset.example. 5M IN A 10.0.3.136 +a-maximum-rrset.example. 5M IN A 10.0.3.137 +a-maximum-rrset.example. 5M IN A 10.0.3.138 +a-maximum-rrset.example. 5M IN A 10.0.3.139 +a-maximum-rrset.example. 5M IN A 10.0.3.140 +a-maximum-rrset.example. 5M IN A 10.0.3.141 +a-maximum-rrset.example. 5M IN A 10.0.3.142 +a-maximum-rrset.example. 5M IN A 10.0.3.143 +a-maximum-rrset.example. 5M IN A 10.0.3.144 +a-maximum-rrset.example. 5M IN A 10.0.3.145 +a-maximum-rrset.example. 5M IN A 10.0.3.146 +a-maximum-rrset.example. 5M IN A 10.0.3.147 +a-maximum-rrset.example. 5M IN A 10.0.3.148 +a-maximum-rrset.example. 5M IN A 10.0.3.149 +a-maximum-rrset.example. 5M IN A 10.0.3.150 +a-maximum-rrset.example. 5M IN A 10.0.3.151 +a-maximum-rrset.example. 5M IN A 10.0.3.152 +a-maximum-rrset.example. 5M IN A 10.0.3.153 +a-maximum-rrset.example. 5M IN A 10.0.3.154 +a-maximum-rrset.example. 5M IN A 10.0.3.155 +a-maximum-rrset.example. 5M IN A 10.0.3.156 +a-maximum-rrset.example. 5M IN A 10.0.3.157 +a-maximum-rrset.example. 5M IN A 10.0.3.158 +a-maximum-rrset.example. 5M IN A 10.0.3.159 +a-maximum-rrset.example. 5M IN A 10.0.3.160 +a-maximum-rrset.example. 5M IN A 10.0.3.161 +a-maximum-rrset.example. 5M IN A 10.0.3.162 +a-maximum-rrset.example. 5M IN A 10.0.3.163 +a-maximum-rrset.example. 5M IN A 10.0.3.164 +a-maximum-rrset.example. 5M IN A 10.0.3.165 +a-maximum-rrset.example. 5M IN A 10.0.3.166 +a-maximum-rrset.example. 5M IN A 10.0.3.167 +a-maximum-rrset.example. 5M IN A 10.0.3.168 +a-maximum-rrset.example. 5M IN A 10.0.3.169 +a-maximum-rrset.example. 5M IN A 10.0.3.170 +a-maximum-rrset.example. 5M IN A 10.0.3.171 +a-maximum-rrset.example. 5M IN A 10.0.3.172 +a-maximum-rrset.example. 5M IN A 10.0.3.173 +a-maximum-rrset.example. 5M IN A 10.0.3.174 +a-maximum-rrset.example. 5M IN A 10.0.3.175 +a-maximum-rrset.example. 5M IN A 10.0.3.176 +a-maximum-rrset.example. 5M IN A 10.0.3.177 +a-maximum-rrset.example. 5M IN A 10.0.3.178 +a-maximum-rrset.example. 5M IN A 10.0.3.179 +a-maximum-rrset.example. 5M IN A 10.0.3.180 +a-maximum-rrset.example. 5M IN A 10.0.3.181 +a-maximum-rrset.example. 5M IN A 10.0.3.182 +a-maximum-rrset.example. 5M IN A 10.0.3.183 +a-maximum-rrset.example. 5M IN A 10.0.3.184 +a-maximum-rrset.example. 5M IN A 10.0.3.185 +a-maximum-rrset.example. 5M IN A 10.0.3.186 +a-maximum-rrset.example. 5M IN A 10.0.3.187 +a-maximum-rrset.example. 5M IN A 10.0.3.188 +a-maximum-rrset.example. 5M IN A 10.0.3.189 +a-maximum-rrset.example. 5M IN A 10.0.3.190 +a-maximum-rrset.example. 5M IN A 10.0.3.191 +a-maximum-rrset.example. 5M IN A 10.0.3.192 +a-maximum-rrset.example. 5M IN A 10.0.3.193 +a-maximum-rrset.example. 5M IN A 10.0.3.194 +a-maximum-rrset.example. 5M IN A 10.0.3.195 +a-maximum-rrset.example. 5M IN A 10.0.3.196 +a-maximum-rrset.example. 5M IN A 10.0.3.197 +a-maximum-rrset.example. 5M IN A 10.0.3.198 +a-maximum-rrset.example. 5M IN A 10.0.3.199 +a-maximum-rrset.example. 5M IN A 10.0.3.200 +a-maximum-rrset.example. 5M IN A 10.0.3.201 +a-maximum-rrset.example. 5M IN A 10.0.3.202 +a-maximum-rrset.example. 5M IN A 10.0.3.203 +a-maximum-rrset.example. 5M IN A 10.0.3.204 +a-maximum-rrset.example. 5M IN A 10.0.3.205 +a-maximum-rrset.example. 5M IN A 10.0.3.206 +a-maximum-rrset.example. 5M IN A 10.0.3.207 +a-maximum-rrset.example. 5M IN A 10.0.3.208 +a-maximum-rrset.example. 5M IN A 10.0.3.209 +a-maximum-rrset.example. 5M IN A 10.0.3.210 +a-maximum-rrset.example. 5M IN A 10.0.3.211 +a-maximum-rrset.example. 5M IN A 10.0.3.212 +a-maximum-rrset.example. 5M IN A 10.0.3.213 +a-maximum-rrset.example. 5M IN A 10.0.3.214 +a-maximum-rrset.example. 5M IN A 10.0.3.215 +a-maximum-rrset.example. 5M IN A 10.0.3.216 +a-maximum-rrset.example. 5M IN A 10.0.3.217 +a-maximum-rrset.example. 5M IN A 10.0.3.218 +a-maximum-rrset.example. 5M IN A 10.0.3.219 +a-maximum-rrset.example. 5M IN A 10.0.3.220 +a-maximum-rrset.example. 5M IN A 10.0.3.221 +a-maximum-rrset.example. 5M IN A 10.0.3.222 +a-maximum-rrset.example. 5M IN A 10.0.3.223 +a-maximum-rrset.example. 5M IN A 10.0.3.224 +a-maximum-rrset.example. 5M IN A 10.0.3.225 +a-maximum-rrset.example. 5M IN A 10.0.3.226 +a-maximum-rrset.example. 5M IN A 10.0.3.227 +a-maximum-rrset.example. 5M IN A 10.0.3.228 +a-maximum-rrset.example. 5M IN A 10.0.3.229 +a-maximum-rrset.example. 5M IN A 10.0.3.230 +a-maximum-rrset.example. 5M IN A 10.0.3.231 +a-maximum-rrset.example. 5M IN A 10.0.3.232 +a-maximum-rrset.example. 5M IN A 10.0.3.233 +a-maximum-rrset.example. 5M IN A 10.0.3.234 +a-maximum-rrset.example. 5M IN A 10.0.3.235 +a-maximum-rrset.example. 5M IN A 10.0.3.236 +a-maximum-rrset.example. 5M IN A 10.0.3.237 +a-maximum-rrset.example. 5M IN A 10.0.3.238 +a-maximum-rrset.example. 5M IN A 10.0.3.239 +a-maximum-rrset.example. 5M IN A 10.0.3.240 +a-maximum-rrset.example. 5M IN A 10.0.3.241 +a-maximum-rrset.example. 5M IN A 10.0.3.242 +a-maximum-rrset.example. 5M IN A 10.0.3.243 +a-maximum-rrset.example. 5M IN A 10.0.3.244 +a-maximum-rrset.example. 5M IN A 10.0.3.245 +a-maximum-rrset.example. 5M IN A 10.0.3.246 +a-maximum-rrset.example. 5M IN A 10.0.3.247 +a-maximum-rrset.example. 5M IN A 10.0.3.248 +a-maximum-rrset.example. 5M IN A 10.0.3.249 +a-maximum-rrset.example. 5M IN A 10.0.3.250 +a-maximum-rrset.example. 5M IN A 10.0.3.251 +a-maximum-rrset.example. 5M IN A 10.0.3.252 +a-maximum-rrset.example. 5M IN A 10.0.3.253 +a-maximum-rrset.example. 5M IN A 10.0.3.254 +a-maximum-rrset.example. 5M IN A 10.0.3.255 +a-maximum-rrset.example. 5M IN A 10.0.4.0 +a-maximum-rrset.example. 5M IN A 10.0.4.1 +a-maximum-rrset.example. 5M IN A 10.0.4.2 +a-maximum-rrset.example. 5M IN A 10.0.4.3 +a-maximum-rrset.example. 5M IN A 10.0.4.4 +a-maximum-rrset.example. 5M IN A 10.0.4.5 +a-maximum-rrset.example. 5M IN A 10.0.4.6 +a-maximum-rrset.example. 5M IN A 10.0.4.7 +a-maximum-rrset.example. 5M IN A 10.0.4.8 +a-maximum-rrset.example. 5M IN A 10.0.4.9 +a-maximum-rrset.example. 5M IN A 10.0.4.10 +a-maximum-rrset.example. 5M IN A 10.0.4.11 +a-maximum-rrset.example. 5M IN A 10.0.4.12 +a-maximum-rrset.example. 5M IN A 10.0.4.13 +a-maximum-rrset.example. 5M IN A 10.0.4.14 +a-maximum-rrset.example. 5M IN A 10.0.4.15 +a-maximum-rrset.example. 5M IN A 10.0.4.16 +a-maximum-rrset.example. 5M IN A 10.0.4.17 +a-maximum-rrset.example. 5M IN A 10.0.4.18 +a-maximum-rrset.example. 5M IN A 10.0.4.19 +a-maximum-rrset.example. 5M IN A 10.0.4.20 +a-maximum-rrset.example. 5M IN A 10.0.4.21 +a-maximum-rrset.example. 5M IN A 10.0.4.22 +a-maximum-rrset.example. 5M IN A 10.0.4.23 +a-maximum-rrset.example. 5M IN A 10.0.4.24 +a-maximum-rrset.example. 5M IN A 10.0.4.25 +a-maximum-rrset.example. 5M IN A 10.0.4.26 +a-maximum-rrset.example. 5M IN A 10.0.4.27 +a-maximum-rrset.example. 5M IN A 10.0.4.28 +a-maximum-rrset.example. 5M IN A 10.0.4.29 +a-maximum-rrset.example. 5M IN A 10.0.4.30 +a-maximum-rrset.example. 5M IN A 10.0.4.31 +a-maximum-rrset.example. 5M IN A 10.0.4.32 +a-maximum-rrset.example. 5M IN A 10.0.4.33 +a-maximum-rrset.example. 5M IN A 10.0.4.34 +a-maximum-rrset.example. 5M IN A 10.0.4.35 +a-maximum-rrset.example. 5M IN A 10.0.4.36 +a-maximum-rrset.example. 5M IN A 10.0.4.37 +a-maximum-rrset.example. 5M IN A 10.0.4.38 +a-maximum-rrset.example. 5M IN A 10.0.4.39 +a-maximum-rrset.example. 5M IN A 10.0.4.40 +a-maximum-rrset.example. 5M IN A 10.0.4.41 +a-maximum-rrset.example. 5M IN A 10.0.4.42 +a-maximum-rrset.example. 5M IN A 10.0.4.43 +a-maximum-rrset.example. 5M IN A 10.0.4.44 +a-maximum-rrset.example. 5M IN A 10.0.4.45 +a-maximum-rrset.example. 5M IN A 10.0.4.46 +a-maximum-rrset.example. 5M IN A 10.0.4.47 +a-maximum-rrset.example. 5M IN A 10.0.4.48 +a-maximum-rrset.example. 5M IN A 10.0.4.49 +a-maximum-rrset.example. 5M IN A 10.0.4.50 +a-maximum-rrset.example. 5M IN A 10.0.4.51 +a-maximum-rrset.example. 5M IN A 10.0.4.52 +a-maximum-rrset.example. 5M IN A 10.0.4.53 +a-maximum-rrset.example. 5M IN A 10.0.4.54 +a-maximum-rrset.example. 5M IN A 10.0.4.55 +a-maximum-rrset.example. 5M IN A 10.0.4.56 +a-maximum-rrset.example. 5M IN A 10.0.4.57 +a-maximum-rrset.example. 5M IN A 10.0.4.58 +a-maximum-rrset.example. 5M IN A 10.0.4.59 +a-maximum-rrset.example. 5M IN A 10.0.4.60 +a-maximum-rrset.example. 5M IN A 10.0.4.61 +a-maximum-rrset.example. 5M IN A 10.0.4.62 +a-maximum-rrset.example. 5M IN A 10.0.4.63 +a-maximum-rrset.example. 5M IN A 10.0.4.64 +a-maximum-rrset.example. 5M IN A 10.0.4.65 +a-maximum-rrset.example. 5M IN A 10.0.4.66 +a-maximum-rrset.example. 5M IN A 10.0.4.67 +a-maximum-rrset.example. 5M IN A 10.0.4.68 +a-maximum-rrset.example. 5M IN A 10.0.4.69 +a-maximum-rrset.example. 5M IN A 10.0.4.70 +a-maximum-rrset.example. 5M IN A 10.0.4.71 +a-maximum-rrset.example. 5M IN A 10.0.4.72 +a-maximum-rrset.example. 5M IN A 10.0.4.73 +a-maximum-rrset.example. 5M IN A 10.0.4.74 +a-maximum-rrset.example. 5M IN A 10.0.4.75 +a-maximum-rrset.example. 5M IN A 10.0.4.76 +a-maximum-rrset.example. 5M IN A 10.0.4.77 +a-maximum-rrset.example. 5M IN A 10.0.4.78 +a-maximum-rrset.example. 5M IN A 10.0.4.79 +a-maximum-rrset.example. 5M IN A 10.0.4.80 +a-maximum-rrset.example. 5M IN A 10.0.4.81 +a-maximum-rrset.example. 5M IN A 10.0.4.82 +a-maximum-rrset.example. 5M IN A 10.0.4.83 +a-maximum-rrset.example. 5M IN A 10.0.4.84 +a-maximum-rrset.example. 5M IN A 10.0.4.85 +a-maximum-rrset.example. 5M IN A 10.0.4.86 +a-maximum-rrset.example. 5M IN A 10.0.4.87 +a-maximum-rrset.example. 5M IN A 10.0.4.88 +a-maximum-rrset.example. 5M IN A 10.0.4.89 +a-maximum-rrset.example. 5M IN A 10.0.4.90 +a-maximum-rrset.example. 5M IN A 10.0.4.91 +a-maximum-rrset.example. 5M IN A 10.0.4.92 +a-maximum-rrset.example. 5M IN A 10.0.4.93 +a-maximum-rrset.example. 5M IN A 10.0.4.94 +a-maximum-rrset.example. 5M IN A 10.0.4.95 +a-maximum-rrset.example. 5M IN A 10.0.4.96 +a-maximum-rrset.example. 5M IN A 10.0.4.97 +a-maximum-rrset.example. 5M IN A 10.0.4.98 +a-maximum-rrset.example. 5M IN A 10.0.4.99 +a-maximum-rrset.example. 5M IN A 10.0.4.100 +a-maximum-rrset.example. 5M IN A 10.0.4.101 +a-maximum-rrset.example. 5M IN A 10.0.4.102 +a-maximum-rrset.example. 5M IN A 10.0.4.103 +a-maximum-rrset.example. 5M IN A 10.0.4.104 +a-maximum-rrset.example. 5M IN A 10.0.4.105 +a-maximum-rrset.example. 5M IN A 10.0.4.106 +a-maximum-rrset.example. 5M IN A 10.0.4.107 +a-maximum-rrset.example. 5M IN A 10.0.4.108 +a-maximum-rrset.example. 5M IN A 10.0.4.109 +a-maximum-rrset.example. 5M IN A 10.0.4.110 +a-maximum-rrset.example. 5M IN A 10.0.4.111 +a-maximum-rrset.example. 5M IN A 10.0.4.112 +a-maximum-rrset.example. 5M IN A 10.0.4.113 +a-maximum-rrset.example. 5M IN A 10.0.4.114 +a-maximum-rrset.example. 5M IN A 10.0.4.115 +a-maximum-rrset.example. 5M IN A 10.0.4.116 +a-maximum-rrset.example. 5M IN A 10.0.4.117 +a-maximum-rrset.example. 5M IN A 10.0.4.118 +a-maximum-rrset.example. 5M IN A 10.0.4.119 +a-maximum-rrset.example. 5M IN A 10.0.4.120 +a-maximum-rrset.example. 5M IN A 10.0.4.121 +a-maximum-rrset.example. 5M IN A 10.0.4.122 +a-maximum-rrset.example. 5M IN A 10.0.4.123 +a-maximum-rrset.example. 5M IN A 10.0.4.124 +a-maximum-rrset.example. 5M IN A 10.0.4.125 +a-maximum-rrset.example. 5M IN A 10.0.4.126 +a-maximum-rrset.example. 5M IN A 10.0.4.127 +a-maximum-rrset.example. 5M IN A 10.0.4.128 +a-maximum-rrset.example. 5M IN A 10.0.4.129 +a-maximum-rrset.example. 5M IN A 10.0.4.130 +a-maximum-rrset.example. 5M IN A 10.0.4.131 +a-maximum-rrset.example. 5M IN A 10.0.4.132 +a-maximum-rrset.example. 5M IN A 10.0.4.133 +a-maximum-rrset.example. 5M IN A 10.0.4.134 +a-maximum-rrset.example. 5M IN A 10.0.4.135 +a-maximum-rrset.example. 5M IN A 10.0.4.136 +a-maximum-rrset.example. 5M IN A 10.0.4.137 +a-maximum-rrset.example. 5M IN A 10.0.4.138 +a-maximum-rrset.example. 5M IN A 10.0.4.139 +a-maximum-rrset.example. 5M IN A 10.0.4.140 +a-maximum-rrset.example. 5M IN A 10.0.4.141 +a-maximum-rrset.example. 5M IN A 10.0.4.142 +a-maximum-rrset.example. 5M IN A 10.0.4.143 +a-maximum-rrset.example. 5M IN A 10.0.4.144 +a-maximum-rrset.example. 5M IN A 10.0.4.145 +a-maximum-rrset.example. 5M IN A 10.0.4.146 +a-maximum-rrset.example. 5M IN A 10.0.4.147 +a-maximum-rrset.example. 5M IN A 10.0.4.148 +a-maximum-rrset.example. 5M IN A 10.0.4.149 +a-maximum-rrset.example. 5M IN A 10.0.4.150 +a-maximum-rrset.example. 5M IN A 10.0.4.151 +a-maximum-rrset.example. 5M IN A 10.0.4.152 +a-maximum-rrset.example. 5M IN A 10.0.4.153 +a-maximum-rrset.example. 5M IN A 10.0.4.154 +a-maximum-rrset.example. 5M IN A 10.0.4.155 +a-maximum-rrset.example. 5M IN A 10.0.4.156 +a-maximum-rrset.example. 5M IN A 10.0.4.157 +a-maximum-rrset.example. 5M IN A 10.0.4.158 +a-maximum-rrset.example. 5M IN A 10.0.4.159 +a-maximum-rrset.example. 5M IN A 10.0.4.160 +a-maximum-rrset.example. 5M IN A 10.0.4.161 +a-maximum-rrset.example. 5M IN A 10.0.4.162 +a-maximum-rrset.example. 5M IN A 10.0.4.163 +a-maximum-rrset.example. 5M IN A 10.0.4.164 +a-maximum-rrset.example. 5M IN A 10.0.4.165 +a-maximum-rrset.example. 5M IN A 10.0.4.166 +a-maximum-rrset.example. 5M IN A 10.0.4.167 +a-maximum-rrset.example. 5M IN A 10.0.4.168 +a-maximum-rrset.example. 5M IN A 10.0.4.169 +a-maximum-rrset.example. 5M IN A 10.0.4.170 +a-maximum-rrset.example. 5M IN A 10.0.4.171 +a-maximum-rrset.example. 5M IN A 10.0.4.172 +a-maximum-rrset.example. 5M IN A 10.0.4.173 +a-maximum-rrset.example. 5M IN A 10.0.4.174 +a-maximum-rrset.example. 5M IN A 10.0.4.175 +a-maximum-rrset.example. 5M IN A 10.0.4.176 +a-maximum-rrset.example. 5M IN A 10.0.4.177 +a-maximum-rrset.example. 5M IN A 10.0.4.178 +a-maximum-rrset.example. 5M IN A 10.0.4.179 +a-maximum-rrset.example. 5M IN A 10.0.4.180 +a-maximum-rrset.example. 5M IN A 10.0.4.181 +a-maximum-rrset.example. 5M IN A 10.0.4.182 +a-maximum-rrset.example. 5M IN A 10.0.4.183 +a-maximum-rrset.example. 5M IN A 10.0.4.184 +a-maximum-rrset.example. 5M IN A 10.0.4.185 +a-maximum-rrset.example. 5M IN A 10.0.4.186 +a-maximum-rrset.example. 5M IN A 10.0.4.187 +a-maximum-rrset.example. 5M IN A 10.0.4.188 +a-maximum-rrset.example. 5M IN A 10.0.4.189 +a-maximum-rrset.example. 5M IN A 10.0.4.190 +a-maximum-rrset.example. 5M IN A 10.0.4.191 +a-maximum-rrset.example. 5M IN A 10.0.4.192 +a-maximum-rrset.example. 5M IN A 10.0.4.193 +a-maximum-rrset.example. 5M IN A 10.0.4.194 +a-maximum-rrset.example. 5M IN A 10.0.4.195 +a-maximum-rrset.example. 5M IN A 10.0.4.196 +a-maximum-rrset.example. 5M IN A 10.0.4.197 +a-maximum-rrset.example. 5M IN A 10.0.4.198 +a-maximum-rrset.example. 5M IN A 10.0.4.199 +a-maximum-rrset.example. 5M IN A 10.0.4.200 +a-maximum-rrset.example. 5M IN A 10.0.4.201 +a-maximum-rrset.example. 5M IN A 10.0.4.202 +a-maximum-rrset.example. 5M IN A 10.0.4.203 +a-maximum-rrset.example. 5M IN A 10.0.4.204 +a-maximum-rrset.example. 5M IN A 10.0.4.205 +a-maximum-rrset.example. 5M IN A 10.0.4.206 +a-maximum-rrset.example. 5M IN A 10.0.4.207 +a-maximum-rrset.example. 5M IN A 10.0.4.208 +a-maximum-rrset.example. 5M IN A 10.0.4.209 +a-maximum-rrset.example. 5M IN A 10.0.4.210 +a-maximum-rrset.example. 5M IN A 10.0.4.211 +a-maximum-rrset.example. 5M IN A 10.0.4.212 +a-maximum-rrset.example. 5M IN A 10.0.4.213 +a-maximum-rrset.example. 5M IN A 10.0.4.214 +a-maximum-rrset.example. 5M IN A 10.0.4.215 +a-maximum-rrset.example. 5M IN A 10.0.4.216 +a-maximum-rrset.example. 5M IN A 10.0.4.217 +a-maximum-rrset.example. 5M IN A 10.0.4.218 +a-maximum-rrset.example. 5M IN A 10.0.4.219 +a-maximum-rrset.example. 5M IN A 10.0.4.220 +a-maximum-rrset.example. 5M IN A 10.0.4.221 +a-maximum-rrset.example. 5M IN A 10.0.4.222 +a-maximum-rrset.example. 5M IN A 10.0.4.223 +a-maximum-rrset.example. 5M IN A 10.0.4.224 +a-maximum-rrset.example. 5M IN A 10.0.4.225 +a-maximum-rrset.example. 5M IN A 10.0.4.226 +a-maximum-rrset.example. 5M IN A 10.0.4.227 +a-maximum-rrset.example. 5M IN A 10.0.4.228 +a-maximum-rrset.example. 5M IN A 10.0.4.229 +a-maximum-rrset.example. 5M IN A 10.0.4.230 +a-maximum-rrset.example. 5M IN A 10.0.4.231 +a-maximum-rrset.example. 5M IN A 10.0.4.232 +a-maximum-rrset.example. 5M IN A 10.0.4.233 +a-maximum-rrset.example. 5M IN A 10.0.4.234 +a-maximum-rrset.example. 5M IN A 10.0.4.235 +a-maximum-rrset.example. 5M IN A 10.0.4.236 +a-maximum-rrset.example. 5M IN A 10.0.4.237 +a-maximum-rrset.example. 5M IN A 10.0.4.238 +a-maximum-rrset.example. 5M IN A 10.0.4.239 +a-maximum-rrset.example. 5M IN A 10.0.4.240 +a-maximum-rrset.example. 5M IN A 10.0.4.241 +a-maximum-rrset.example. 5M IN A 10.0.4.242 +a-maximum-rrset.example. 5M IN A 10.0.4.243 +a-maximum-rrset.example. 5M IN A 10.0.4.244 +a-maximum-rrset.example. 5M IN A 10.0.4.245 +a-maximum-rrset.example. 5M IN A 10.0.4.246 +a-maximum-rrset.example. 5M IN A 10.0.4.247 +a-maximum-rrset.example. 5M IN A 10.0.4.248 +a-maximum-rrset.example. 5M IN A 10.0.4.249 +a-maximum-rrset.example. 5M IN A 10.0.4.250 +a-maximum-rrset.example. 5M IN A 10.0.4.251 +a-maximum-rrset.example. 5M IN A 10.0.4.252 +a-maximum-rrset.example. 5M IN A 10.0.4.253 +a-maximum-rrset.example. 5M IN A 10.0.4.254 +a-maximum-rrset.example. 5M IN A 10.0.4.255 +a-maximum-rrset.example. 5M IN A 10.0.5.0 +a-maximum-rrset.example. 5M IN A 10.0.5.1 +a-maximum-rrset.example. 5M IN A 10.0.5.2 +a-maximum-rrset.example. 5M IN A 10.0.5.3 +a-maximum-rrset.example. 5M IN A 10.0.5.4 +a-maximum-rrset.example. 5M IN A 10.0.5.5 +a-maximum-rrset.example. 5M IN A 10.0.5.6 +a-maximum-rrset.example. 5M IN A 10.0.5.7 +a-maximum-rrset.example. 5M IN A 10.0.5.8 +a-maximum-rrset.example. 5M IN A 10.0.5.9 +a-maximum-rrset.example. 5M IN A 10.0.5.10 +a-maximum-rrset.example. 5M IN A 10.0.5.11 +a-maximum-rrset.example. 5M IN A 10.0.5.12 +a-maximum-rrset.example. 5M IN A 10.0.5.13 +a-maximum-rrset.example. 5M IN A 10.0.5.14 +a-maximum-rrset.example. 5M IN A 10.0.5.15 +a-maximum-rrset.example. 5M IN A 10.0.5.16 +a-maximum-rrset.example. 5M IN A 10.0.5.17 +a-maximum-rrset.example. 5M IN A 10.0.5.18 +a-maximum-rrset.example. 5M IN A 10.0.5.19 +a-maximum-rrset.example. 5M IN A 10.0.5.20 +a-maximum-rrset.example. 5M IN A 10.0.5.21 +a-maximum-rrset.example. 5M IN A 10.0.5.22 +a-maximum-rrset.example. 5M IN A 10.0.5.23 +a-maximum-rrset.example. 5M IN A 10.0.5.24 +a-maximum-rrset.example. 5M IN A 10.0.5.25 +a-maximum-rrset.example. 5M IN A 10.0.5.26 +a-maximum-rrset.example. 5M IN A 10.0.5.27 +a-maximum-rrset.example. 5M IN A 10.0.5.28 +a-maximum-rrset.example. 5M IN A 10.0.5.29 +a-maximum-rrset.example. 5M IN A 10.0.5.30 +a-maximum-rrset.example. 5M IN A 10.0.5.31 +a-maximum-rrset.example. 5M IN A 10.0.5.32 +a-maximum-rrset.example. 5M IN A 10.0.5.33 +a-maximum-rrset.example. 5M IN A 10.0.5.34 +a-maximum-rrset.example. 5M IN A 10.0.5.35 +a-maximum-rrset.example. 5M IN A 10.0.5.36 +a-maximum-rrset.example. 5M IN A 10.0.5.37 +a-maximum-rrset.example. 5M IN A 10.0.5.38 +a-maximum-rrset.example. 5M IN A 10.0.5.39 +a-maximum-rrset.example. 5M IN A 10.0.5.40 +a-maximum-rrset.example. 5M IN A 10.0.5.41 +a-maximum-rrset.example. 5M IN A 10.0.5.42 +a-maximum-rrset.example. 5M IN A 10.0.5.43 +a-maximum-rrset.example. 5M IN A 10.0.5.44 +a-maximum-rrset.example. 5M IN A 10.0.5.45 +a-maximum-rrset.example. 5M IN A 10.0.5.46 +a-maximum-rrset.example. 5M IN A 10.0.5.47 +a-maximum-rrset.example. 5M IN A 10.0.5.48 +a-maximum-rrset.example. 5M IN A 10.0.5.49 +a-maximum-rrset.example. 5M IN A 10.0.5.50 +a-maximum-rrset.example. 5M IN A 10.0.5.51 +a-maximum-rrset.example. 5M IN A 10.0.5.52 +a-maximum-rrset.example. 5M IN A 10.0.5.53 +a-maximum-rrset.example. 5M IN A 10.0.5.54 +a-maximum-rrset.example. 5M IN A 10.0.5.55 +a-maximum-rrset.example. 5M IN A 10.0.5.56 +a-maximum-rrset.example. 5M IN A 10.0.5.57 +a-maximum-rrset.example. 5M IN A 10.0.5.58 +a-maximum-rrset.example. 5M IN A 10.0.5.59 +a-maximum-rrset.example. 5M IN A 10.0.5.60 +a-maximum-rrset.example. 5M IN A 10.0.5.61 +a-maximum-rrset.example. 5M IN A 10.0.5.62 +a-maximum-rrset.example. 5M IN A 10.0.5.63 +a-maximum-rrset.example. 5M IN A 10.0.5.64 +a-maximum-rrset.example. 5M IN A 10.0.5.65 +a-maximum-rrset.example. 5M IN A 10.0.5.66 +a-maximum-rrset.example. 5M IN A 10.0.5.67 +a-maximum-rrset.example. 5M IN A 10.0.5.68 +a-maximum-rrset.example. 5M IN A 10.0.5.69 +a-maximum-rrset.example. 5M IN A 10.0.5.70 +a-maximum-rrset.example. 5M IN A 10.0.5.71 +a-maximum-rrset.example. 5M IN A 10.0.5.72 +a-maximum-rrset.example. 5M IN A 10.0.5.73 +a-maximum-rrset.example. 5M IN A 10.0.5.74 +a-maximum-rrset.example. 5M IN A 10.0.5.75 +a-maximum-rrset.example. 5M IN A 10.0.5.76 +a-maximum-rrset.example. 5M IN A 10.0.5.77 +a-maximum-rrset.example. 5M IN A 10.0.5.78 +a-maximum-rrset.example. 5M IN A 10.0.5.79 +a-maximum-rrset.example. 5M IN A 10.0.5.80 +a-maximum-rrset.example. 5M IN A 10.0.5.81 +a-maximum-rrset.example. 5M IN A 10.0.5.82 +a-maximum-rrset.example. 5M IN A 10.0.5.83 +a-maximum-rrset.example. 5M IN A 10.0.5.84 +a-maximum-rrset.example. 5M IN A 10.0.5.85 +a-maximum-rrset.example. 5M IN A 10.0.5.86 +a-maximum-rrset.example. 5M IN A 10.0.5.87 +a-maximum-rrset.example. 5M IN A 10.0.5.88 +a-maximum-rrset.example. 5M IN A 10.0.5.89 +a-maximum-rrset.example. 5M IN A 10.0.5.90 +a-maximum-rrset.example. 5M IN A 10.0.5.91 +a-maximum-rrset.example. 5M IN A 10.0.5.92 +a-maximum-rrset.example. 5M IN A 10.0.5.93 +a-maximum-rrset.example. 5M IN A 10.0.5.94 +a-maximum-rrset.example. 5M IN A 10.0.5.95 +a-maximum-rrset.example. 5M IN A 10.0.5.96 +a-maximum-rrset.example. 5M IN A 10.0.5.97 +a-maximum-rrset.example. 5M IN A 10.0.5.98 +a-maximum-rrset.example. 5M IN A 10.0.5.99 +a-maximum-rrset.example. 5M IN A 10.0.5.100 +a-maximum-rrset.example. 5M IN A 10.0.5.101 +a-maximum-rrset.example. 5M IN A 10.0.5.102 +a-maximum-rrset.example. 5M IN A 10.0.5.103 +a-maximum-rrset.example. 5M IN A 10.0.5.104 +a-maximum-rrset.example. 5M IN A 10.0.5.105 +a-maximum-rrset.example. 5M IN A 10.0.5.106 +a-maximum-rrset.example. 5M IN A 10.0.5.107 +a-maximum-rrset.example. 5M IN A 10.0.5.108 +a-maximum-rrset.example. 5M IN A 10.0.5.109 +a-maximum-rrset.example. 5M IN A 10.0.5.110 +a-maximum-rrset.example. 5M IN A 10.0.5.111 +a-maximum-rrset.example. 5M IN A 10.0.5.112 +a-maximum-rrset.example. 5M IN A 10.0.5.113 +a-maximum-rrset.example. 5M IN A 10.0.5.114 +a-maximum-rrset.example. 5M IN A 10.0.5.115 +a-maximum-rrset.example. 5M IN A 10.0.5.116 +a-maximum-rrset.example. 5M IN A 10.0.5.117 +a-maximum-rrset.example. 5M IN A 10.0.5.118 +a-maximum-rrset.example. 5M IN A 10.0.5.119 +a-maximum-rrset.example. 5M IN A 10.0.5.120 +a-maximum-rrset.example. 5M IN A 10.0.5.121 +a-maximum-rrset.example. 5M IN A 10.0.5.122 +a-maximum-rrset.example. 5M IN A 10.0.5.123 +a-maximum-rrset.example. 5M IN A 10.0.5.124 +a-maximum-rrset.example. 5M IN A 10.0.5.125 +a-maximum-rrset.example. 5M IN A 10.0.5.126 +a-maximum-rrset.example. 5M IN A 10.0.5.127 +a-maximum-rrset.example. 5M IN A 10.0.5.128 +a-maximum-rrset.example. 5M IN A 10.0.5.129 +a-maximum-rrset.example. 5M IN A 10.0.5.130 +a-maximum-rrset.example. 5M IN A 10.0.5.131 +a-maximum-rrset.example. 5M IN A 10.0.5.132 +a-maximum-rrset.example. 5M IN A 10.0.5.133 +a-maximum-rrset.example. 5M IN A 10.0.5.134 +a-maximum-rrset.example. 5M IN A 10.0.5.135 +a-maximum-rrset.example. 5M IN A 10.0.5.136 +a-maximum-rrset.example. 5M IN A 10.0.5.137 +a-maximum-rrset.example. 5M IN A 10.0.5.138 +a-maximum-rrset.example. 5M IN A 10.0.5.139 +a-maximum-rrset.example. 5M IN A 10.0.5.140 +a-maximum-rrset.example. 5M IN A 10.0.5.141 +a-maximum-rrset.example. 5M IN A 10.0.5.142 +a-maximum-rrset.example. 5M IN A 10.0.5.143 +a-maximum-rrset.example. 5M IN A 10.0.5.144 +a-maximum-rrset.example. 5M IN A 10.0.5.145 +a-maximum-rrset.example. 5M IN A 10.0.5.146 +a-maximum-rrset.example. 5M IN A 10.0.5.147 +a-maximum-rrset.example. 5M IN A 10.0.5.148 +a-maximum-rrset.example. 5M IN A 10.0.5.149 +a-maximum-rrset.example. 5M IN A 10.0.5.150 +a-maximum-rrset.example. 5M IN A 10.0.5.151 +a-maximum-rrset.example. 5M IN A 10.0.5.152 +a-maximum-rrset.example. 5M IN A 10.0.5.153 +a-maximum-rrset.example. 5M IN A 10.0.5.154 +a-maximum-rrset.example. 5M IN A 10.0.5.155 +a-maximum-rrset.example. 5M IN A 10.0.5.156 +a-maximum-rrset.example. 5M IN A 10.0.5.157 +a-maximum-rrset.example. 5M IN A 10.0.5.158 +a-maximum-rrset.example. 5M IN A 10.0.5.159 +a-maximum-rrset.example. 5M IN A 10.0.5.160 +a-maximum-rrset.example. 5M IN A 10.0.5.161 +a-maximum-rrset.example. 5M IN A 10.0.5.162 +a-maximum-rrset.example. 5M IN A 10.0.5.163 +a-maximum-rrset.example. 5M IN A 10.0.5.164 +a-maximum-rrset.example. 5M IN A 10.0.5.165 +a-maximum-rrset.example. 5M IN A 10.0.5.166 +a-maximum-rrset.example. 5M IN A 10.0.5.167 +a-maximum-rrset.example. 5M IN A 10.0.5.168 +a-maximum-rrset.example. 5M IN A 10.0.5.169 +a-maximum-rrset.example. 5M IN A 10.0.5.170 +a-maximum-rrset.example. 5M IN A 10.0.5.171 +a-maximum-rrset.example. 5M IN A 10.0.5.172 +a-maximum-rrset.example. 5M IN A 10.0.5.173 +a-maximum-rrset.example. 5M IN A 10.0.5.174 +a-maximum-rrset.example. 5M IN A 10.0.5.175 +a-maximum-rrset.example. 5M IN A 10.0.5.176 +a-maximum-rrset.example. 5M IN A 10.0.5.177 +a-maximum-rrset.example. 5M IN A 10.0.5.178 +a-maximum-rrset.example. 5M IN A 10.0.5.179 +a-maximum-rrset.example. 5M IN A 10.0.5.180 +a-maximum-rrset.example. 5M IN A 10.0.5.181 +a-maximum-rrset.example. 5M IN A 10.0.5.182 +a-maximum-rrset.example. 5M IN A 10.0.5.183 +a-maximum-rrset.example. 5M IN A 10.0.5.184 +a-maximum-rrset.example. 5M IN A 10.0.5.185 +a-maximum-rrset.example. 5M IN A 10.0.5.186 +a-maximum-rrset.example. 5M IN A 10.0.5.187 +a-maximum-rrset.example. 5M IN A 10.0.5.188 +a-maximum-rrset.example. 5M IN A 10.0.5.189 +a-maximum-rrset.example. 5M IN A 10.0.5.190 +a-maximum-rrset.example. 5M IN A 10.0.5.191 +a-maximum-rrset.example. 5M IN A 10.0.5.192 +a-maximum-rrset.example. 5M IN A 10.0.5.193 +a-maximum-rrset.example. 5M IN A 10.0.5.194 +a-maximum-rrset.example. 5M IN A 10.0.5.195 +a-maximum-rrset.example. 5M IN A 10.0.5.196 +a-maximum-rrset.example. 5M IN A 10.0.5.197 +a-maximum-rrset.example. 5M IN A 10.0.5.198 +a-maximum-rrset.example. 5M IN A 10.0.5.199 +a-maximum-rrset.example. 5M IN A 10.0.5.200 +a-maximum-rrset.example. 5M IN A 10.0.5.201 +a-maximum-rrset.example. 5M IN A 10.0.5.202 +a-maximum-rrset.example. 5M IN A 10.0.5.203 +a-maximum-rrset.example. 5M IN A 10.0.5.204 +a-maximum-rrset.example. 5M IN A 10.0.5.205 +a-maximum-rrset.example. 5M IN A 10.0.5.206 +a-maximum-rrset.example. 5M IN A 10.0.5.207 +a-maximum-rrset.example. 5M IN A 10.0.5.208 +a-maximum-rrset.example. 5M IN A 10.0.5.209 +a-maximum-rrset.example. 5M IN A 10.0.5.210 +a-maximum-rrset.example. 5M IN A 10.0.5.211 +a-maximum-rrset.example. 5M IN A 10.0.5.212 +a-maximum-rrset.example. 5M IN A 10.0.5.213 +a-maximum-rrset.example. 5M IN A 10.0.5.214 +a-maximum-rrset.example. 5M IN A 10.0.5.215 +a-maximum-rrset.example. 5M IN A 10.0.5.216 +a-maximum-rrset.example. 5M IN A 10.0.5.217 +a-maximum-rrset.example. 5M IN A 10.0.5.218 +a-maximum-rrset.example. 5M IN A 10.0.5.219 +a-maximum-rrset.example. 5M IN A 10.0.5.220 +a-maximum-rrset.example. 5M IN A 10.0.5.221 +a-maximum-rrset.example. 5M IN A 10.0.5.222 +a-maximum-rrset.example. 5M IN A 10.0.5.223 +a-maximum-rrset.example. 5M IN A 10.0.5.224 +a-maximum-rrset.example. 5M IN A 10.0.5.225 +a-maximum-rrset.example. 5M IN A 10.0.5.226 +a-maximum-rrset.example. 5M IN A 10.0.5.227 +a-maximum-rrset.example. 5M IN A 10.0.5.228 +a-maximum-rrset.example. 5M IN A 10.0.5.229 +a-maximum-rrset.example. 5M IN A 10.0.5.230 +a-maximum-rrset.example. 5M IN A 10.0.5.231 +a-maximum-rrset.example. 5M IN A 10.0.5.232 +a-maximum-rrset.example. 5M IN A 10.0.5.233 +a-maximum-rrset.example. 5M IN A 10.0.5.234 +a-maximum-rrset.example. 5M IN A 10.0.5.235 +a-maximum-rrset.example. 5M IN A 10.0.5.236 +a-maximum-rrset.example. 5M IN A 10.0.5.237 +a-maximum-rrset.example. 5M IN A 10.0.5.238 +a-maximum-rrset.example. 5M IN A 10.0.5.239 +a-maximum-rrset.example. 5M IN A 10.0.5.240 +a-maximum-rrset.example. 5M IN A 10.0.5.241 +a-maximum-rrset.example. 5M IN A 10.0.5.242 +a-maximum-rrset.example. 5M IN A 10.0.5.243 +a-maximum-rrset.example. 5M IN A 10.0.5.244 +a-maximum-rrset.example. 5M IN A 10.0.5.245 +a-maximum-rrset.example. 5M IN A 10.0.5.246 +a-maximum-rrset.example. 5M IN A 10.0.5.247 +a-maximum-rrset.example. 5M IN A 10.0.5.248 +a-maximum-rrset.example. 5M IN A 10.0.5.249 +a-maximum-rrset.example. 5M IN A 10.0.5.250 +a-maximum-rrset.example. 5M IN A 10.0.5.251 +a-maximum-rrset.example. 5M IN A 10.0.5.252 +a-maximum-rrset.example. 5M IN A 10.0.5.253 +a-maximum-rrset.example. 5M IN A 10.0.5.254 +a-maximum-rrset.example. 5M IN A 10.0.5.255 +a-maximum-rrset.example. 5M IN A 10.0.6.0 +a-maximum-rrset.example. 5M IN A 10.0.6.1 +a-maximum-rrset.example. 5M IN A 10.0.6.2 +a-maximum-rrset.example. 5M IN A 10.0.6.3 +a-maximum-rrset.example. 5M IN A 10.0.6.4 +a-maximum-rrset.example. 5M IN A 10.0.6.5 +a-maximum-rrset.example. 5M IN A 10.0.6.6 +a-maximum-rrset.example. 5M IN A 10.0.6.7 +a-maximum-rrset.example. 5M IN A 10.0.6.8 +a-maximum-rrset.example. 5M IN A 10.0.6.9 +a-maximum-rrset.example. 5M IN A 10.0.6.10 +a-maximum-rrset.example. 5M IN A 10.0.6.11 +a-maximum-rrset.example. 5M IN A 10.0.6.12 +a-maximum-rrset.example. 5M IN A 10.0.6.13 +a-maximum-rrset.example. 5M IN A 10.0.6.14 +a-maximum-rrset.example. 5M IN A 10.0.6.15 +a-maximum-rrset.example. 5M IN A 10.0.6.16 +a-maximum-rrset.example. 5M IN A 10.0.6.17 +a-maximum-rrset.example. 5M IN A 10.0.6.18 +a-maximum-rrset.example. 5M IN A 10.0.6.19 +a-maximum-rrset.example. 5M IN A 10.0.6.20 +a-maximum-rrset.example. 5M IN A 10.0.6.21 +a-maximum-rrset.example. 5M IN A 10.0.6.22 +a-maximum-rrset.example. 5M IN A 10.0.6.23 +a-maximum-rrset.example. 5M IN A 10.0.6.24 +a-maximum-rrset.example. 5M IN A 10.0.6.25 +a-maximum-rrset.example. 5M IN A 10.0.6.26 +a-maximum-rrset.example. 5M IN A 10.0.6.27 +a-maximum-rrset.example. 5M IN A 10.0.6.28 +a-maximum-rrset.example. 5M IN A 10.0.6.29 +a-maximum-rrset.example. 5M IN A 10.0.6.30 +a-maximum-rrset.example. 5M IN A 10.0.6.31 +a-maximum-rrset.example. 5M IN A 10.0.6.32 +a-maximum-rrset.example. 5M IN A 10.0.6.33 +a-maximum-rrset.example. 5M IN A 10.0.6.34 +a-maximum-rrset.example. 5M IN A 10.0.6.35 +a-maximum-rrset.example. 5M IN A 10.0.6.36 +a-maximum-rrset.example. 5M IN A 10.0.6.37 +a-maximum-rrset.example. 5M IN A 10.0.6.38 +a-maximum-rrset.example. 5M IN A 10.0.6.39 +a-maximum-rrset.example. 5M IN A 10.0.6.40 +a-maximum-rrset.example. 5M IN A 10.0.6.41 +a-maximum-rrset.example. 5M IN A 10.0.6.42 +a-maximum-rrset.example. 5M IN A 10.0.6.43 +a-maximum-rrset.example. 5M IN A 10.0.6.44 +a-maximum-rrset.example. 5M IN A 10.0.6.45 +a-maximum-rrset.example. 5M IN A 10.0.6.46 +a-maximum-rrset.example. 5M IN A 10.0.6.47 +a-maximum-rrset.example. 5M IN A 10.0.6.48 +a-maximum-rrset.example. 5M IN A 10.0.6.49 +a-maximum-rrset.example. 5M IN A 10.0.6.50 +a-maximum-rrset.example. 5M IN A 10.0.6.51 +a-maximum-rrset.example. 5M IN A 10.0.6.52 +a-maximum-rrset.example. 5M IN A 10.0.6.53 +a-maximum-rrset.example. 5M IN A 10.0.6.54 +a-maximum-rrset.example. 5M IN A 10.0.6.55 +a-maximum-rrset.example. 5M IN A 10.0.6.56 +a-maximum-rrset.example. 5M IN A 10.0.6.57 +a-maximum-rrset.example. 5M IN A 10.0.6.58 +a-maximum-rrset.example. 5M IN A 10.0.6.59 +a-maximum-rrset.example. 5M IN A 10.0.6.60 +a-maximum-rrset.example. 5M IN A 10.0.6.61 +a-maximum-rrset.example. 5M IN A 10.0.6.62 +a-maximum-rrset.example. 5M IN A 10.0.6.63 +a-maximum-rrset.example. 5M IN A 10.0.6.64 +a-maximum-rrset.example. 5M IN A 10.0.6.65 +a-maximum-rrset.example. 5M IN A 10.0.6.66 +a-maximum-rrset.example. 5M IN A 10.0.6.67 +a-maximum-rrset.example. 5M IN A 10.0.6.68 +a-maximum-rrset.example. 5M IN A 10.0.6.69 +a-maximum-rrset.example. 5M IN A 10.0.6.70 +a-maximum-rrset.example. 5M IN A 10.0.6.71 +a-maximum-rrset.example. 5M IN A 10.0.6.72 +a-maximum-rrset.example. 5M IN A 10.0.6.73 +a-maximum-rrset.example. 5M IN A 10.0.6.74 +a-maximum-rrset.example. 5M IN A 10.0.6.75 +a-maximum-rrset.example. 5M IN A 10.0.6.76 +a-maximum-rrset.example. 5M IN A 10.0.6.77 +a-maximum-rrset.example. 5M IN A 10.0.6.78 +a-maximum-rrset.example. 5M IN A 10.0.6.79 +a-maximum-rrset.example. 5M IN A 10.0.6.80 +a-maximum-rrset.example. 5M IN A 10.0.6.81 +a-maximum-rrset.example. 5M IN A 10.0.6.82 +a-maximum-rrset.example. 5M IN A 10.0.6.83 +a-maximum-rrset.example. 5M IN A 10.0.6.84 +a-maximum-rrset.example. 5M IN A 10.0.6.85 +a-maximum-rrset.example. 5M IN A 10.0.6.86 +a-maximum-rrset.example. 5M IN A 10.0.6.87 +a-maximum-rrset.example. 5M IN A 10.0.6.88 +a-maximum-rrset.example. 5M IN A 10.0.6.89 +a-maximum-rrset.example. 5M IN A 10.0.6.90 +a-maximum-rrset.example. 5M IN A 10.0.6.91 +a-maximum-rrset.example. 5M IN A 10.0.6.92 +a-maximum-rrset.example. 5M IN A 10.0.6.93 +a-maximum-rrset.example. 5M IN A 10.0.6.94 +a-maximum-rrset.example. 5M IN A 10.0.6.95 +a-maximum-rrset.example. 5M IN A 10.0.6.96 +a-maximum-rrset.example. 5M IN A 10.0.6.97 +a-maximum-rrset.example. 5M IN A 10.0.6.98 +a-maximum-rrset.example. 5M IN A 10.0.6.99 +a-maximum-rrset.example. 5M IN A 10.0.6.100 +a-maximum-rrset.example. 5M IN A 10.0.6.101 +a-maximum-rrset.example. 5M IN A 10.0.6.102 +a-maximum-rrset.example. 5M IN A 10.0.6.103 +a-maximum-rrset.example. 5M IN A 10.0.6.104 +a-maximum-rrset.example. 5M IN A 10.0.6.105 +a-maximum-rrset.example. 5M IN A 10.0.6.106 +a-maximum-rrset.example. 5M IN A 10.0.6.107 +a-maximum-rrset.example. 5M IN A 10.0.6.108 +a-maximum-rrset.example. 5M IN A 10.0.6.109 +a-maximum-rrset.example. 5M IN A 10.0.6.110 +a-maximum-rrset.example. 5M IN A 10.0.6.111 +a-maximum-rrset.example. 5M IN A 10.0.6.112 +a-maximum-rrset.example. 5M IN A 10.0.6.113 +a-maximum-rrset.example. 5M IN A 10.0.6.114 +a-maximum-rrset.example. 5M IN A 10.0.6.115 +a-maximum-rrset.example. 5M IN A 10.0.6.116 +a-maximum-rrset.example. 5M IN A 10.0.6.117 +a-maximum-rrset.example. 5M IN A 10.0.6.118 +a-maximum-rrset.example. 5M IN A 10.0.6.119 +a-maximum-rrset.example. 5M IN A 10.0.6.120 +a-maximum-rrset.example. 5M IN A 10.0.6.121 +a-maximum-rrset.example. 5M IN A 10.0.6.122 +a-maximum-rrset.example. 5M IN A 10.0.6.123 +a-maximum-rrset.example. 5M IN A 10.0.6.124 +a-maximum-rrset.example. 5M IN A 10.0.6.125 +a-maximum-rrset.example. 5M IN A 10.0.6.126 +a-maximum-rrset.example. 5M IN A 10.0.6.127 +a-maximum-rrset.example. 5M IN A 10.0.6.128 +a-maximum-rrset.example. 5M IN A 10.0.6.129 +a-maximum-rrset.example. 5M IN A 10.0.6.130 +a-maximum-rrset.example. 5M IN A 10.0.6.131 +a-maximum-rrset.example. 5M IN A 10.0.6.132 +a-maximum-rrset.example. 5M IN A 10.0.6.133 +a-maximum-rrset.example. 5M IN A 10.0.6.134 +a-maximum-rrset.example. 5M IN A 10.0.6.135 +a-maximum-rrset.example. 5M IN A 10.0.6.136 +a-maximum-rrset.example. 5M IN A 10.0.6.137 +a-maximum-rrset.example. 5M IN A 10.0.6.138 +a-maximum-rrset.example. 5M IN A 10.0.6.139 +a-maximum-rrset.example. 5M IN A 10.0.6.140 +a-maximum-rrset.example. 5M IN A 10.0.6.141 +a-maximum-rrset.example. 5M IN A 10.0.6.142 +a-maximum-rrset.example. 5M IN A 10.0.6.143 +a-maximum-rrset.example. 5M IN A 10.0.6.144 +a-maximum-rrset.example. 5M IN A 10.0.6.145 +a-maximum-rrset.example. 5M IN A 10.0.6.146 +a-maximum-rrset.example. 5M IN A 10.0.6.147 +a-maximum-rrset.example. 5M IN A 10.0.6.148 +a-maximum-rrset.example. 5M IN A 10.0.6.149 +a-maximum-rrset.example. 5M IN A 10.0.6.150 +a-maximum-rrset.example. 5M IN A 10.0.6.151 +a-maximum-rrset.example. 5M IN A 10.0.6.152 +a-maximum-rrset.example. 5M IN A 10.0.6.153 +a-maximum-rrset.example. 5M IN A 10.0.6.154 +a-maximum-rrset.example. 5M IN A 10.0.6.155 +a-maximum-rrset.example. 5M IN A 10.0.6.156 +a-maximum-rrset.example. 5M IN A 10.0.6.157 +a-maximum-rrset.example. 5M IN A 10.0.6.158 +a-maximum-rrset.example. 5M IN A 10.0.6.159 +a-maximum-rrset.example. 5M IN A 10.0.6.160 +a-maximum-rrset.example. 5M IN A 10.0.6.161 +a-maximum-rrset.example. 5M IN A 10.0.6.162 +a-maximum-rrset.example. 5M IN A 10.0.6.163 +a-maximum-rrset.example. 5M IN A 10.0.6.164 +a-maximum-rrset.example. 5M IN A 10.0.6.165 +a-maximum-rrset.example. 5M IN A 10.0.6.166 +a-maximum-rrset.example. 5M IN A 10.0.6.167 +a-maximum-rrset.example. 5M IN A 10.0.6.168 +a-maximum-rrset.example. 5M IN A 10.0.6.169 +a-maximum-rrset.example. 5M IN A 10.0.6.170 +a-maximum-rrset.example. 5M IN A 10.0.6.171 +a-maximum-rrset.example. 5M IN A 10.0.6.172 +a-maximum-rrset.example. 5M IN A 10.0.6.173 +a-maximum-rrset.example. 5M IN A 10.0.6.174 +a-maximum-rrset.example. 5M IN A 10.0.6.175 +a-maximum-rrset.example. 5M IN A 10.0.6.176 +a-maximum-rrset.example. 5M IN A 10.0.6.177 +a-maximum-rrset.example. 5M IN A 10.0.6.178 +a-maximum-rrset.example. 5M IN A 10.0.6.179 +a-maximum-rrset.example. 5M IN A 10.0.6.180 +a-maximum-rrset.example. 5M IN A 10.0.6.181 +a-maximum-rrset.example. 5M IN A 10.0.6.182 +a-maximum-rrset.example. 5M IN A 10.0.6.183 +a-maximum-rrset.example. 5M IN A 10.0.6.184 +a-maximum-rrset.example. 5M IN A 10.0.6.185 +a-maximum-rrset.example. 5M IN A 10.0.6.186 +a-maximum-rrset.example. 5M IN A 10.0.6.187 +a-maximum-rrset.example. 5M IN A 10.0.6.188 +a-maximum-rrset.example. 5M IN A 10.0.6.189 +a-maximum-rrset.example. 5M IN A 10.0.6.190 +a-maximum-rrset.example. 5M IN A 10.0.6.191 +a-maximum-rrset.example. 5M IN A 10.0.6.192 +a-maximum-rrset.example. 5M IN A 10.0.6.193 +a-maximum-rrset.example. 5M IN A 10.0.6.194 +a-maximum-rrset.example. 5M IN A 10.0.6.195 +a-maximum-rrset.example. 5M IN A 10.0.6.196 +a-maximum-rrset.example. 5M IN A 10.0.6.197 +a-maximum-rrset.example. 5M IN A 10.0.6.198 +a-maximum-rrset.example. 5M IN A 10.0.6.199 +a-maximum-rrset.example. 5M IN A 10.0.6.200 +a-maximum-rrset.example. 5M IN A 10.0.6.201 +a-maximum-rrset.example. 5M IN A 10.0.6.202 +a-maximum-rrset.example. 5M IN A 10.0.6.203 +a-maximum-rrset.example. 5M IN A 10.0.6.204 +a-maximum-rrset.example. 5M IN A 10.0.6.205 +a-maximum-rrset.example. 5M IN A 10.0.6.206 +a-maximum-rrset.example. 5M IN A 10.0.6.207 +a-maximum-rrset.example. 5M IN A 10.0.6.208 +a-maximum-rrset.example. 5M IN A 10.0.6.209 +a-maximum-rrset.example. 5M IN A 10.0.6.210 +a-maximum-rrset.example. 5M IN A 10.0.6.211 +a-maximum-rrset.example. 5M IN A 10.0.6.212 +a-maximum-rrset.example. 5M IN A 10.0.6.213 +a-maximum-rrset.example. 5M IN A 10.0.6.214 +a-maximum-rrset.example. 5M IN A 10.0.6.215 +a-maximum-rrset.example. 5M IN A 10.0.6.216 +a-maximum-rrset.example. 5M IN A 10.0.6.217 +a-maximum-rrset.example. 5M IN A 10.0.6.218 +a-maximum-rrset.example. 5M IN A 10.0.6.219 +a-maximum-rrset.example. 5M IN A 10.0.6.220 +a-maximum-rrset.example. 5M IN A 10.0.6.221 +a-maximum-rrset.example. 5M IN A 10.0.6.222 +a-maximum-rrset.example. 5M IN A 10.0.6.223 +a-maximum-rrset.example. 5M IN A 10.0.6.224 +a-maximum-rrset.example. 5M IN A 10.0.6.225 +a-maximum-rrset.example. 5M IN A 10.0.6.226 +a-maximum-rrset.example. 5M IN A 10.0.6.227 +a-maximum-rrset.example. 5M IN A 10.0.6.228 +a-maximum-rrset.example. 5M IN A 10.0.6.229 +a-maximum-rrset.example. 5M IN A 10.0.6.230 +a-maximum-rrset.example. 5M IN A 10.0.6.231 +a-maximum-rrset.example. 5M IN A 10.0.6.232 +a-maximum-rrset.example. 5M IN A 10.0.6.233 +a-maximum-rrset.example. 5M IN A 10.0.6.234 +a-maximum-rrset.example. 5M IN A 10.0.6.235 +a-maximum-rrset.example. 5M IN A 10.0.6.236 +a-maximum-rrset.example. 5M IN A 10.0.6.237 +a-maximum-rrset.example. 5M IN A 10.0.6.238 +a-maximum-rrset.example. 5M IN A 10.0.6.239 +a-maximum-rrset.example. 5M IN A 10.0.6.240 +a-maximum-rrset.example. 5M IN A 10.0.6.241 +a-maximum-rrset.example. 5M IN A 10.0.6.242 +a-maximum-rrset.example. 5M IN A 10.0.6.243 +a-maximum-rrset.example. 5M IN A 10.0.6.244 +a-maximum-rrset.example. 5M IN A 10.0.6.245 +a-maximum-rrset.example. 5M IN A 10.0.6.246 +a-maximum-rrset.example. 5M IN A 10.0.6.247 +a-maximum-rrset.example. 5M IN A 10.0.6.248 +a-maximum-rrset.example. 5M IN A 10.0.6.249 +a-maximum-rrset.example. 5M IN A 10.0.6.250 +a-maximum-rrset.example. 5M IN A 10.0.6.251 +a-maximum-rrset.example. 5M IN A 10.0.6.252 +a-maximum-rrset.example. 5M IN A 10.0.6.253 +a-maximum-rrset.example. 5M IN A 10.0.6.254 +a-maximum-rrset.example. 5M IN A 10.0.6.255 +a-maximum-rrset.example. 5M IN A 10.0.7.0 +a-maximum-rrset.example. 5M IN A 10.0.7.1 +a-maximum-rrset.example. 5M IN A 10.0.7.2 +a-maximum-rrset.example. 5M IN A 10.0.7.3 +a-maximum-rrset.example. 5M IN A 10.0.7.4 +a-maximum-rrset.example. 5M IN A 10.0.7.5 +a-maximum-rrset.example. 5M IN A 10.0.7.6 +a-maximum-rrset.example. 5M IN A 10.0.7.7 +a-maximum-rrset.example. 5M IN A 10.0.7.8 +a-maximum-rrset.example. 5M IN A 10.0.7.9 +a-maximum-rrset.example. 5M IN A 10.0.7.10 +a-maximum-rrset.example. 5M IN A 10.0.7.11 +a-maximum-rrset.example. 5M IN A 10.0.7.12 +a-maximum-rrset.example. 5M IN A 10.0.7.13 +a-maximum-rrset.example. 5M IN A 10.0.7.14 +a-maximum-rrset.example. 5M IN A 10.0.7.15 +a-maximum-rrset.example. 5M IN A 10.0.7.16 +a-maximum-rrset.example. 5M IN A 10.0.7.17 +a-maximum-rrset.example. 5M IN A 10.0.7.18 +a-maximum-rrset.example. 5M IN A 10.0.7.19 +a-maximum-rrset.example. 5M IN A 10.0.7.20 +a-maximum-rrset.example. 5M IN A 10.0.7.21 +a-maximum-rrset.example. 5M IN A 10.0.7.22 +a-maximum-rrset.example. 5M IN A 10.0.7.23 +a-maximum-rrset.example. 5M IN A 10.0.7.24 +a-maximum-rrset.example. 5M IN A 10.0.7.25 +a-maximum-rrset.example. 5M IN A 10.0.7.26 +a-maximum-rrset.example. 5M IN A 10.0.7.27 +a-maximum-rrset.example. 5M IN A 10.0.7.28 +a-maximum-rrset.example. 5M IN A 10.0.7.29 +a-maximum-rrset.example. 5M IN A 10.0.7.30 +a-maximum-rrset.example. 5M IN A 10.0.7.31 +a-maximum-rrset.example. 5M IN A 10.0.7.32 +a-maximum-rrset.example. 5M IN A 10.0.7.33 +a-maximum-rrset.example. 5M IN A 10.0.7.34 +a-maximum-rrset.example. 5M IN A 10.0.7.35 +a-maximum-rrset.example. 5M IN A 10.0.7.36 +a-maximum-rrset.example. 5M IN A 10.0.7.37 +a-maximum-rrset.example. 5M IN A 10.0.7.38 +a-maximum-rrset.example. 5M IN A 10.0.7.39 +a-maximum-rrset.example. 5M IN A 10.0.7.40 +a-maximum-rrset.example. 5M IN A 10.0.7.41 +a-maximum-rrset.example. 5M IN A 10.0.7.42 +a-maximum-rrset.example. 5M IN A 10.0.7.43 +a-maximum-rrset.example. 5M IN A 10.0.7.44 +a-maximum-rrset.example. 5M IN A 10.0.7.45 +a-maximum-rrset.example. 5M IN A 10.0.7.46 +a-maximum-rrset.example. 5M IN A 10.0.7.47 +a-maximum-rrset.example. 5M IN A 10.0.7.48 +a-maximum-rrset.example. 5M IN A 10.0.7.49 +a-maximum-rrset.example. 5M IN A 10.0.7.50 +a-maximum-rrset.example. 5M IN A 10.0.7.51 +a-maximum-rrset.example. 5M IN A 10.0.7.52 +a-maximum-rrset.example. 5M IN A 10.0.7.53 +a-maximum-rrset.example. 5M IN A 10.0.7.54 +a-maximum-rrset.example. 5M IN A 10.0.7.55 +a-maximum-rrset.example. 5M IN A 10.0.7.56 +a-maximum-rrset.example. 5M IN A 10.0.7.57 +a-maximum-rrset.example. 5M IN A 10.0.7.58 +a-maximum-rrset.example. 5M IN A 10.0.7.59 +a-maximum-rrset.example. 5M IN A 10.0.7.60 +a-maximum-rrset.example. 5M IN A 10.0.7.61 +a-maximum-rrset.example. 5M IN A 10.0.7.62 +a-maximum-rrset.example. 5M IN A 10.0.7.63 +a-maximum-rrset.example. 5M IN A 10.0.7.64 +a-maximum-rrset.example. 5M IN A 10.0.7.65 +a-maximum-rrset.example. 5M IN A 10.0.7.66 +a-maximum-rrset.example. 5M IN A 10.0.7.67 +a-maximum-rrset.example. 5M IN A 10.0.7.68 +a-maximum-rrset.example. 5M IN A 10.0.7.69 +a-maximum-rrset.example. 5M IN A 10.0.7.70 +a-maximum-rrset.example. 5M IN A 10.0.7.71 +a-maximum-rrset.example. 5M IN A 10.0.7.72 +a-maximum-rrset.example. 5M IN A 10.0.7.73 +a-maximum-rrset.example. 5M IN A 10.0.7.74 +a-maximum-rrset.example. 5M IN A 10.0.7.75 +a-maximum-rrset.example. 5M IN A 10.0.7.76 +a-maximum-rrset.example. 5M IN A 10.0.7.77 +a-maximum-rrset.example. 5M IN A 10.0.7.78 +a-maximum-rrset.example. 5M IN A 10.0.7.79 +a-maximum-rrset.example. 5M IN A 10.0.7.80 +a-maximum-rrset.example. 5M IN A 10.0.7.81 +a-maximum-rrset.example. 5M IN A 10.0.7.82 +a-maximum-rrset.example. 5M IN A 10.0.7.83 +a-maximum-rrset.example. 5M IN A 10.0.7.84 +a-maximum-rrset.example. 5M IN A 10.0.7.85 +a-maximum-rrset.example. 5M IN A 10.0.7.86 +a-maximum-rrset.example. 5M IN A 10.0.7.87 +a-maximum-rrset.example. 5M IN A 10.0.7.88 +a-maximum-rrset.example. 5M IN A 10.0.7.89 +a-maximum-rrset.example. 5M IN A 10.0.7.90 +a-maximum-rrset.example. 5M IN A 10.0.7.91 +a-maximum-rrset.example. 5M IN A 10.0.7.92 +a-maximum-rrset.example. 5M IN A 10.0.7.93 +a-maximum-rrset.example. 5M IN A 10.0.7.94 +a-maximum-rrset.example. 5M IN A 10.0.7.95 +a-maximum-rrset.example. 5M IN A 10.0.7.96 +a-maximum-rrset.example. 5M IN A 10.0.7.97 +a-maximum-rrset.example. 5M IN A 10.0.7.98 +a-maximum-rrset.example. 5M IN A 10.0.7.99 +a-maximum-rrset.example. 5M IN A 10.0.7.100 +a-maximum-rrset.example. 5M IN A 10.0.7.101 +a-maximum-rrset.example. 5M IN A 10.0.7.102 +a-maximum-rrset.example. 5M IN A 10.0.7.103 +a-maximum-rrset.example. 5M IN A 10.0.7.104 +a-maximum-rrset.example. 5M IN A 10.0.7.105 +a-maximum-rrset.example. 5M IN A 10.0.7.106 +a-maximum-rrset.example. 5M IN A 10.0.7.107 +a-maximum-rrset.example. 5M IN A 10.0.7.108 +a-maximum-rrset.example. 5M IN A 10.0.7.109 +a-maximum-rrset.example. 5M IN A 10.0.7.110 +a-maximum-rrset.example. 5M IN A 10.0.7.111 +a-maximum-rrset.example. 5M IN A 10.0.7.112 +a-maximum-rrset.example. 5M IN A 10.0.7.113 +a-maximum-rrset.example. 5M IN A 10.0.7.114 +a-maximum-rrset.example. 5M IN A 10.0.7.115 +a-maximum-rrset.example. 5M IN A 10.0.7.116 +a-maximum-rrset.example. 5M IN A 10.0.7.117 +a-maximum-rrset.example. 5M IN A 10.0.7.118 +a-maximum-rrset.example. 5M IN A 10.0.7.119 +a-maximum-rrset.example. 5M IN A 10.0.7.120 +a-maximum-rrset.example. 5M IN A 10.0.7.121 +a-maximum-rrset.example. 5M IN A 10.0.7.122 +a-maximum-rrset.example. 5M IN A 10.0.7.123 +a-maximum-rrset.example. 5M IN A 10.0.7.124 +a-maximum-rrset.example. 5M IN A 10.0.7.125 +a-maximum-rrset.example. 5M IN A 10.0.7.126 +a-maximum-rrset.example. 5M IN A 10.0.7.127 +a-maximum-rrset.example. 5M IN A 10.0.7.128 +a-maximum-rrset.example. 5M IN A 10.0.7.129 +a-maximum-rrset.example. 5M IN A 10.0.7.130 +a-maximum-rrset.example. 5M IN A 10.0.7.131 +a-maximum-rrset.example. 5M IN A 10.0.7.132 +a-maximum-rrset.example. 5M IN A 10.0.7.133 +a-maximum-rrset.example. 5M IN A 10.0.7.134 +a-maximum-rrset.example. 5M IN A 10.0.7.135 +a-maximum-rrset.example. 5M IN A 10.0.7.136 +a-maximum-rrset.example. 5M IN A 10.0.7.137 +a-maximum-rrset.example. 5M IN A 10.0.7.138 +a-maximum-rrset.example. 5M IN A 10.0.7.139 +a-maximum-rrset.example. 5M IN A 10.0.7.140 +a-maximum-rrset.example. 5M IN A 10.0.7.141 +a-maximum-rrset.example. 5M IN A 10.0.7.142 +a-maximum-rrset.example. 5M IN A 10.0.7.143 +a-maximum-rrset.example. 5M IN A 10.0.7.144 +a-maximum-rrset.example. 5M IN A 10.0.7.145 +a-maximum-rrset.example. 5M IN A 10.0.7.146 +a-maximum-rrset.example. 5M IN A 10.0.7.147 +a-maximum-rrset.example. 5M IN A 10.0.7.148 +a-maximum-rrset.example. 5M IN A 10.0.7.149 +a-maximum-rrset.example. 5M IN A 10.0.7.150 +a-maximum-rrset.example. 5M IN A 10.0.7.151 +a-maximum-rrset.example. 5M IN A 10.0.7.152 +a-maximum-rrset.example. 5M IN A 10.0.7.153 +a-maximum-rrset.example. 5M IN A 10.0.7.154 +a-maximum-rrset.example. 5M IN A 10.0.7.155 +a-maximum-rrset.example. 5M IN A 10.0.7.156 +a-maximum-rrset.example. 5M IN A 10.0.7.157 +a-maximum-rrset.example. 5M IN A 10.0.7.158 +a-maximum-rrset.example. 5M IN A 10.0.7.159 +a-maximum-rrset.example. 5M IN A 10.0.7.160 +a-maximum-rrset.example. 5M IN A 10.0.7.161 +a-maximum-rrset.example. 5M IN A 10.0.7.162 +a-maximum-rrset.example. 5M IN A 10.0.7.163 +a-maximum-rrset.example. 5M IN A 10.0.7.164 +a-maximum-rrset.example. 5M IN A 10.0.7.165 +a-maximum-rrset.example. 5M IN A 10.0.7.166 +a-maximum-rrset.example. 5M IN A 10.0.7.167 +a-maximum-rrset.example. 5M IN A 10.0.7.168 +a-maximum-rrset.example. 5M IN A 10.0.7.169 +a-maximum-rrset.example. 5M IN A 10.0.7.170 +a-maximum-rrset.example. 5M IN A 10.0.7.171 +a-maximum-rrset.example. 5M IN A 10.0.7.172 +a-maximum-rrset.example. 5M IN A 10.0.7.173 +a-maximum-rrset.example. 5M IN A 10.0.7.174 +a-maximum-rrset.example. 5M IN A 10.0.7.175 +a-maximum-rrset.example. 5M IN A 10.0.7.176 +a-maximum-rrset.example. 5M IN A 10.0.7.177 +a-maximum-rrset.example. 5M IN A 10.0.7.178 +a-maximum-rrset.example. 5M IN A 10.0.7.179 +a-maximum-rrset.example. 5M IN A 10.0.7.180 +a-maximum-rrset.example. 5M IN A 10.0.7.181 +a-maximum-rrset.example. 5M IN A 10.0.7.182 +a-maximum-rrset.example. 5M IN A 10.0.7.183 +a-maximum-rrset.example. 5M IN A 10.0.7.184 +a-maximum-rrset.example. 5M IN A 10.0.7.185 +a-maximum-rrset.example. 5M IN A 10.0.7.186 +a-maximum-rrset.example. 5M IN A 10.0.7.187 +a-maximum-rrset.example. 5M IN A 10.0.7.188 +a-maximum-rrset.example. 5M IN A 10.0.7.189 +a-maximum-rrset.example. 5M IN A 10.0.7.190 +a-maximum-rrset.example. 5M IN A 10.0.7.191 +a-maximum-rrset.example. 5M IN A 10.0.7.192 +a-maximum-rrset.example. 5M IN A 10.0.7.193 +a-maximum-rrset.example. 5M IN A 10.0.7.194 +a-maximum-rrset.example. 5M IN A 10.0.7.195 +a-maximum-rrset.example. 5M IN A 10.0.7.196 +a-maximum-rrset.example. 5M IN A 10.0.7.197 +a-maximum-rrset.example. 5M IN A 10.0.7.198 +a-maximum-rrset.example. 5M IN A 10.0.7.199 +a-maximum-rrset.example. 5M IN A 10.0.7.200 +a-maximum-rrset.example. 5M IN A 10.0.7.201 +a-maximum-rrset.example. 5M IN A 10.0.7.202 +a-maximum-rrset.example. 5M IN A 10.0.7.203 +a-maximum-rrset.example. 5M IN A 10.0.7.204 +a-maximum-rrset.example. 5M IN A 10.0.7.205 +a-maximum-rrset.example. 5M IN A 10.0.7.206 +a-maximum-rrset.example. 5M IN A 10.0.7.207 +a-maximum-rrset.example. 5M IN A 10.0.7.208 +a-maximum-rrset.example. 5M IN A 10.0.7.209 +a-maximum-rrset.example. 5M IN A 10.0.7.210 +a-maximum-rrset.example. 5M IN A 10.0.7.211 +a-maximum-rrset.example. 5M IN A 10.0.7.212 +a-maximum-rrset.example. 5M IN A 10.0.7.213 +a-maximum-rrset.example. 5M IN A 10.0.7.214 +a-maximum-rrset.example. 5M IN A 10.0.7.215 +a-maximum-rrset.example. 5M IN A 10.0.7.216 +a-maximum-rrset.example. 5M IN A 10.0.7.217 +a-maximum-rrset.example. 5M IN A 10.0.7.218 +a-maximum-rrset.example. 5M IN A 10.0.7.219 +a-maximum-rrset.example. 5M IN A 10.0.7.220 +a-maximum-rrset.example. 5M IN A 10.0.7.221 +a-maximum-rrset.example. 5M IN A 10.0.7.222 +a-maximum-rrset.example. 5M IN A 10.0.7.223 +a-maximum-rrset.example. 5M IN A 10.0.7.224 +a-maximum-rrset.example. 5M IN A 10.0.7.225 +a-maximum-rrset.example. 5M IN A 10.0.7.226 +a-maximum-rrset.example. 5M IN A 10.0.7.227 +a-maximum-rrset.example. 5M IN A 10.0.7.228 +a-maximum-rrset.example. 5M IN A 10.0.7.229 +a-maximum-rrset.example. 5M IN A 10.0.7.230 +a-maximum-rrset.example. 5M IN A 10.0.7.231 +a-maximum-rrset.example. 5M IN A 10.0.7.232 +a-maximum-rrset.example. 5M IN A 10.0.7.233 +a-maximum-rrset.example. 5M IN A 10.0.7.234 +a-maximum-rrset.example. 5M IN A 10.0.7.235 +a-maximum-rrset.example. 5M IN A 10.0.7.236 +a-maximum-rrset.example. 5M IN A 10.0.7.237 +a-maximum-rrset.example. 5M IN A 10.0.7.238 +a-maximum-rrset.example. 5M IN A 10.0.7.239 +a-maximum-rrset.example. 5M IN A 10.0.7.240 +a-maximum-rrset.example. 5M IN A 10.0.7.241 +a-maximum-rrset.example. 5M IN A 10.0.7.242 +a-maximum-rrset.example. 5M IN A 10.0.7.243 +a-maximum-rrset.example. 5M IN A 10.0.7.244 +a-maximum-rrset.example. 5M IN A 10.0.7.245 +a-maximum-rrset.example. 5M IN A 10.0.7.246 +a-maximum-rrset.example. 5M IN A 10.0.7.247 +a-maximum-rrset.example. 5M IN A 10.0.7.248 +a-maximum-rrset.example. 5M IN A 10.0.7.249 +a-maximum-rrset.example. 5M IN A 10.0.7.250 +a-maximum-rrset.example. 5M IN A 10.0.7.251 +a-maximum-rrset.example. 5M IN A 10.0.7.252 +a-maximum-rrset.example. 5M IN A 10.0.7.253 +a-maximum-rrset.example. 5M IN A 10.0.7.254 +a-maximum-rrset.example. 5M IN A 10.0.7.255 +a-maximum-rrset.example. 5M IN A 10.0.8.0 +a-maximum-rrset.example. 5M IN A 10.0.8.1 +a-maximum-rrset.example. 5M IN A 10.0.8.2 +a-maximum-rrset.example. 5M IN A 10.0.8.3 +a-maximum-rrset.example. 5M IN A 10.0.8.4 +a-maximum-rrset.example. 5M IN A 10.0.8.5 +a-maximum-rrset.example. 5M IN A 10.0.8.6 +a-maximum-rrset.example. 5M IN A 10.0.8.7 +a-maximum-rrset.example. 5M IN A 10.0.8.8 +a-maximum-rrset.example. 5M IN A 10.0.8.9 +a-maximum-rrset.example. 5M IN A 10.0.8.10 +a-maximum-rrset.example. 5M IN A 10.0.8.11 +a-maximum-rrset.example. 5M IN A 10.0.8.12 +a-maximum-rrset.example. 5M IN A 10.0.8.13 +a-maximum-rrset.example. 5M IN A 10.0.8.14 +a-maximum-rrset.example. 5M IN A 10.0.8.15 +a-maximum-rrset.example. 5M IN A 10.0.8.16 +a-maximum-rrset.example. 5M IN A 10.0.8.17 +a-maximum-rrset.example. 5M IN A 10.0.8.18 +a-maximum-rrset.example. 5M IN A 10.0.8.19 +a-maximum-rrset.example. 5M IN A 10.0.8.20 +a-maximum-rrset.example. 5M IN A 10.0.8.21 +a-maximum-rrset.example. 5M IN A 10.0.8.22 +a-maximum-rrset.example. 5M IN A 10.0.8.23 +a-maximum-rrset.example. 5M IN A 10.0.8.24 +a-maximum-rrset.example. 5M IN A 10.0.8.25 +a-maximum-rrset.example. 5M IN A 10.0.8.26 +a-maximum-rrset.example. 5M IN A 10.0.8.27 +a-maximum-rrset.example. 5M IN A 10.0.8.28 +a-maximum-rrset.example. 5M IN A 10.0.8.29 +a-maximum-rrset.example. 5M IN A 10.0.8.30 +a-maximum-rrset.example. 5M IN A 10.0.8.31 +a-maximum-rrset.example. 5M IN A 10.0.8.32 +a-maximum-rrset.example. 5M IN A 10.0.8.33 +a-maximum-rrset.example. 5M IN A 10.0.8.34 +a-maximum-rrset.example. 5M IN A 10.0.8.35 +a-maximum-rrset.example. 5M IN A 10.0.8.36 +a-maximum-rrset.example. 5M IN A 10.0.8.37 +a-maximum-rrset.example. 5M IN A 10.0.8.38 +a-maximum-rrset.example. 5M IN A 10.0.8.39 +a-maximum-rrset.example. 5M IN A 10.0.8.40 +a-maximum-rrset.example. 5M IN A 10.0.8.41 +a-maximum-rrset.example. 5M IN A 10.0.8.42 +a-maximum-rrset.example. 5M IN A 10.0.8.43 +a-maximum-rrset.example. 5M IN A 10.0.8.44 +a-maximum-rrset.example. 5M IN A 10.0.8.45 +a-maximum-rrset.example. 5M IN A 10.0.8.46 +a-maximum-rrset.example. 5M IN A 10.0.8.47 +a-maximum-rrset.example. 5M IN A 10.0.8.48 +a-maximum-rrset.example. 5M IN A 10.0.8.49 +a-maximum-rrset.example. 5M IN A 10.0.8.50 +a-maximum-rrset.example. 5M IN A 10.0.8.51 +a-maximum-rrset.example. 5M IN A 10.0.8.52 +a-maximum-rrset.example. 5M IN A 10.0.8.53 +a-maximum-rrset.example. 5M IN A 10.0.8.54 +a-maximum-rrset.example. 5M IN A 10.0.8.55 +a-maximum-rrset.example. 5M IN A 10.0.8.56 +a-maximum-rrset.example. 5M IN A 10.0.8.57 +a-maximum-rrset.example. 5M IN A 10.0.8.58 +a-maximum-rrset.example. 5M IN A 10.0.8.59 +a-maximum-rrset.example. 5M IN A 10.0.8.60 +a-maximum-rrset.example. 5M IN A 10.0.8.61 +a-maximum-rrset.example. 5M IN A 10.0.8.62 +a-maximum-rrset.example. 5M IN A 10.0.8.63 +a-maximum-rrset.example. 5M IN A 10.0.8.64 +a-maximum-rrset.example. 5M IN A 10.0.8.65 +a-maximum-rrset.example. 5M IN A 10.0.8.66 +a-maximum-rrset.example. 5M IN A 10.0.8.67 +a-maximum-rrset.example. 5M IN A 10.0.8.68 +a-maximum-rrset.example. 5M IN A 10.0.8.69 +a-maximum-rrset.example. 5M IN A 10.0.8.70 +a-maximum-rrset.example. 5M IN A 10.0.8.71 +a-maximum-rrset.example. 5M IN A 10.0.8.72 +a-maximum-rrset.example. 5M IN A 10.0.8.73 +a-maximum-rrset.example. 5M IN A 10.0.8.74 +a-maximum-rrset.example. 5M IN A 10.0.8.75 +a-maximum-rrset.example. 5M IN A 10.0.8.76 +a-maximum-rrset.example. 5M IN A 10.0.8.77 +a-maximum-rrset.example. 5M IN A 10.0.8.78 +a-maximum-rrset.example. 5M IN A 10.0.8.79 +a-maximum-rrset.example. 5M IN A 10.0.8.80 +a-maximum-rrset.example. 5M IN A 10.0.8.81 +a-maximum-rrset.example. 5M IN A 10.0.8.82 +a-maximum-rrset.example. 5M IN A 10.0.8.83 +a-maximum-rrset.example. 5M IN A 10.0.8.84 +a-maximum-rrset.example. 5M IN A 10.0.8.85 +a-maximum-rrset.example. 5M IN A 10.0.8.86 +a-maximum-rrset.example. 5M IN A 10.0.8.87 +a-maximum-rrset.example. 5M IN A 10.0.8.88 +a-maximum-rrset.example. 5M IN A 10.0.8.89 +a-maximum-rrset.example. 5M IN A 10.0.8.90 +a-maximum-rrset.example. 5M IN A 10.0.8.91 +a-maximum-rrset.example. 5M IN A 10.0.8.92 +a-maximum-rrset.example. 5M IN A 10.0.8.93 +a-maximum-rrset.example. 5M IN A 10.0.8.94 +a-maximum-rrset.example. 5M IN A 10.0.8.95 +a-maximum-rrset.example. 5M IN A 10.0.8.96 +a-maximum-rrset.example. 5M IN A 10.0.8.97 +a-maximum-rrset.example. 5M IN A 10.0.8.98 +a-maximum-rrset.example. 5M IN A 10.0.8.99 +a-maximum-rrset.example. 5M IN A 10.0.8.100 +a-maximum-rrset.example. 5M IN A 10.0.8.101 +a-maximum-rrset.example. 5M IN A 10.0.8.102 +a-maximum-rrset.example. 5M IN A 10.0.8.103 +a-maximum-rrset.example. 5M IN A 10.0.8.104 +a-maximum-rrset.example. 5M IN A 10.0.8.105 +a-maximum-rrset.example. 5M IN A 10.0.8.106 +a-maximum-rrset.example. 5M IN A 10.0.8.107 +a-maximum-rrset.example. 5M IN A 10.0.8.108 +a-maximum-rrset.example. 5M IN A 10.0.8.109 +a-maximum-rrset.example. 5M IN A 10.0.8.110 +a-maximum-rrset.example. 5M IN A 10.0.8.111 +a-maximum-rrset.example. 5M IN A 10.0.8.112 +a-maximum-rrset.example. 5M IN A 10.0.8.113 +a-maximum-rrset.example. 5M IN A 10.0.8.114 +a-maximum-rrset.example. 5M IN A 10.0.8.115 +a-maximum-rrset.example. 5M IN A 10.0.8.116 +a-maximum-rrset.example. 5M IN A 10.0.8.117 +a-maximum-rrset.example. 5M IN A 10.0.8.118 +a-maximum-rrset.example. 5M IN A 10.0.8.119 +a-maximum-rrset.example. 5M IN A 10.0.8.120 +a-maximum-rrset.example. 5M IN A 10.0.8.121 +a-maximum-rrset.example. 5M IN A 10.0.8.122 +a-maximum-rrset.example. 5M IN A 10.0.8.123 +a-maximum-rrset.example. 5M IN A 10.0.8.124 +a-maximum-rrset.example. 5M IN A 10.0.8.125 +a-maximum-rrset.example. 5M IN A 10.0.8.126 +a-maximum-rrset.example. 5M IN A 10.0.8.127 +a-maximum-rrset.example. 5M IN A 10.0.8.128 +a-maximum-rrset.example. 5M IN A 10.0.8.129 +a-maximum-rrset.example. 5M IN A 10.0.8.130 +a-maximum-rrset.example. 5M IN A 10.0.8.131 +a-maximum-rrset.example. 5M IN A 10.0.8.132 +a-maximum-rrset.example. 5M IN A 10.0.8.133 +a-maximum-rrset.example. 5M IN A 10.0.8.134 +a-maximum-rrset.example. 5M IN A 10.0.8.135 +a-maximum-rrset.example. 5M IN A 10.0.8.136 +a-maximum-rrset.example. 5M IN A 10.0.8.137 +a-maximum-rrset.example. 5M IN A 10.0.8.138 +a-maximum-rrset.example. 5M IN A 10.0.8.139 +a-maximum-rrset.example. 5M IN A 10.0.8.140 +a-maximum-rrset.example. 5M IN A 10.0.8.141 +a-maximum-rrset.example. 5M IN A 10.0.8.142 +a-maximum-rrset.example. 5M IN A 10.0.8.143 +a-maximum-rrset.example. 5M IN A 10.0.8.144 +a-maximum-rrset.example. 5M IN A 10.0.8.145 +a-maximum-rrset.example. 5M IN A 10.0.8.146 +a-maximum-rrset.example. 5M IN A 10.0.8.147 +a-maximum-rrset.example. 5M IN A 10.0.8.148 +a-maximum-rrset.example. 5M IN A 10.0.8.149 +a-maximum-rrset.example. 5M IN A 10.0.8.150 +a-maximum-rrset.example. 5M IN A 10.0.8.151 +a-maximum-rrset.example. 5M IN A 10.0.8.152 +a-maximum-rrset.example. 5M IN A 10.0.8.153 +a-maximum-rrset.example. 5M IN A 10.0.8.154 +a-maximum-rrset.example. 5M IN A 10.0.8.155 +a-maximum-rrset.example. 5M IN A 10.0.8.156 +a-maximum-rrset.example. 5M IN A 10.0.8.157 +a-maximum-rrset.example. 5M IN A 10.0.8.158 +a-maximum-rrset.example. 5M IN A 10.0.8.159 +a-maximum-rrset.example. 5M IN A 10.0.8.160 +a-maximum-rrset.example. 5M IN A 10.0.8.161 +a-maximum-rrset.example. 5M IN A 10.0.8.162 +a-maximum-rrset.example. 5M IN A 10.0.8.163 +a-maximum-rrset.example. 5M IN A 10.0.8.164 +a-maximum-rrset.example. 5M IN A 10.0.8.165 +a-maximum-rrset.example. 5M IN A 10.0.8.166 +a-maximum-rrset.example. 5M IN A 10.0.8.167 +a-maximum-rrset.example. 5M IN A 10.0.8.168 +a-maximum-rrset.example. 5M IN A 10.0.8.169 +a-maximum-rrset.example. 5M IN A 10.0.8.170 +a-maximum-rrset.example. 5M IN A 10.0.8.171 +a-maximum-rrset.example. 5M IN A 10.0.8.172 +a-maximum-rrset.example. 5M IN A 10.0.8.173 +a-maximum-rrset.example. 5M IN A 10.0.8.174 +a-maximum-rrset.example. 5M IN A 10.0.8.175 +a-maximum-rrset.example. 5M IN A 10.0.8.176 +a-maximum-rrset.example. 5M IN A 10.0.8.177 +a-maximum-rrset.example. 5M IN A 10.0.8.178 +a-maximum-rrset.example. 5M IN A 10.0.8.179 +a-maximum-rrset.example. 5M IN A 10.0.8.180 +a-maximum-rrset.example. 5M IN A 10.0.8.181 +a-maximum-rrset.example. 5M IN A 10.0.8.182 +a-maximum-rrset.example. 5M IN A 10.0.8.183 +a-maximum-rrset.example. 5M IN A 10.0.8.184 +a-maximum-rrset.example. 5M IN A 10.0.8.185 +a-maximum-rrset.example. 5M IN A 10.0.8.186 +a-maximum-rrset.example. 5M IN A 10.0.8.187 +a-maximum-rrset.example. 5M IN A 10.0.8.188 +a-maximum-rrset.example. 5M IN A 10.0.8.189 +a-maximum-rrset.example. 5M IN A 10.0.8.190 +a-maximum-rrset.example. 5M IN A 10.0.8.191 +a-maximum-rrset.example. 5M IN A 10.0.8.192 +a-maximum-rrset.example. 5M IN A 10.0.8.193 +a-maximum-rrset.example. 5M IN A 10.0.8.194 +a-maximum-rrset.example. 5M IN A 10.0.8.195 +a-maximum-rrset.example. 5M IN A 10.0.8.196 +a-maximum-rrset.example. 5M IN A 10.0.8.197 +a-maximum-rrset.example. 5M IN A 10.0.8.198 +a-maximum-rrset.example. 5M IN A 10.0.8.199 +a-maximum-rrset.example. 5M IN A 10.0.8.200 +a-maximum-rrset.example. 5M IN A 10.0.8.201 +a-maximum-rrset.example. 5M IN A 10.0.8.202 +a-maximum-rrset.example. 5M IN A 10.0.8.203 +a-maximum-rrset.example. 5M IN A 10.0.8.204 +a-maximum-rrset.example. 5M IN A 10.0.8.205 +a-maximum-rrset.example. 5M IN A 10.0.8.206 +a-maximum-rrset.example. 5M IN A 10.0.8.207 +a-maximum-rrset.example. 5M IN A 10.0.8.208 +a-maximum-rrset.example. 5M IN A 10.0.8.209 +a-maximum-rrset.example. 5M IN A 10.0.8.210 +a-maximum-rrset.example. 5M IN A 10.0.8.211 +a-maximum-rrset.example. 5M IN A 10.0.8.212 +a-maximum-rrset.example. 5M IN A 10.0.8.213 +a-maximum-rrset.example. 5M IN A 10.0.8.214 +a-maximum-rrset.example. 5M IN A 10.0.8.215 +a-maximum-rrset.example. 5M IN A 10.0.8.216 +a-maximum-rrset.example. 5M IN A 10.0.8.217 +a-maximum-rrset.example. 5M IN A 10.0.8.218 +a-maximum-rrset.example. 5M IN A 10.0.8.219 +a-maximum-rrset.example. 5M IN A 10.0.8.220 +a-maximum-rrset.example. 5M IN A 10.0.8.221 +a-maximum-rrset.example. 5M IN A 10.0.8.222 +a-maximum-rrset.example. 5M IN A 10.0.8.223 +a-maximum-rrset.example. 5M IN A 10.0.8.224 +a-maximum-rrset.example. 5M IN A 10.0.8.225 +a-maximum-rrset.example. 5M IN A 10.0.8.226 +a-maximum-rrset.example. 5M IN A 10.0.8.227 +a-maximum-rrset.example. 5M IN A 10.0.8.228 +a-maximum-rrset.example. 5M IN A 10.0.8.229 +a-maximum-rrset.example. 5M IN A 10.0.8.230 +a-maximum-rrset.example. 5M IN A 10.0.8.231 +a-maximum-rrset.example. 5M IN A 10.0.8.232 +a-maximum-rrset.example. 5M IN A 10.0.8.233 +a-maximum-rrset.example. 5M IN A 10.0.8.234 +a-maximum-rrset.example. 5M IN A 10.0.8.235 +a-maximum-rrset.example. 5M IN A 10.0.8.236 +a-maximum-rrset.example. 5M IN A 10.0.8.237 +a-maximum-rrset.example. 5M IN A 10.0.8.238 +a-maximum-rrset.example. 5M IN A 10.0.8.239 +a-maximum-rrset.example. 5M IN A 10.0.8.240 +a-maximum-rrset.example. 5M IN A 10.0.8.241 +a-maximum-rrset.example. 5M IN A 10.0.8.242 +a-maximum-rrset.example. 5M IN A 10.0.8.243 +a-maximum-rrset.example. 5M IN A 10.0.8.244 +a-maximum-rrset.example. 5M IN A 10.0.8.245 +a-maximum-rrset.example. 5M IN A 10.0.8.246 +a-maximum-rrset.example. 5M IN A 10.0.8.247 +a-maximum-rrset.example. 5M IN A 10.0.8.248 +a-maximum-rrset.example. 5M IN A 10.0.8.249 +a-maximum-rrset.example. 5M IN A 10.0.8.250 +a-maximum-rrset.example. 5M IN A 10.0.8.251 +a-maximum-rrset.example. 5M IN A 10.0.8.252 +a-maximum-rrset.example. 5M IN A 10.0.8.253 +a-maximum-rrset.example. 5M IN A 10.0.8.254 +a-maximum-rrset.example. 5M IN A 10.0.8.255 +a-maximum-rrset.example. 5M IN A 10.0.9.0 +a-maximum-rrset.example. 5M IN A 10.0.9.1 +a-maximum-rrset.example. 5M IN A 10.0.9.2 +a-maximum-rrset.example. 5M IN A 10.0.9.3 +a-maximum-rrset.example. 5M IN A 10.0.9.4 +a-maximum-rrset.example. 5M IN A 10.0.9.5 +a-maximum-rrset.example. 5M IN A 10.0.9.6 +a-maximum-rrset.example. 5M IN A 10.0.9.7 +a-maximum-rrset.example. 5M IN A 10.0.9.8 +a-maximum-rrset.example. 5M IN A 10.0.9.9 +a-maximum-rrset.example. 5M IN A 10.0.9.10 +a-maximum-rrset.example. 5M IN A 10.0.9.11 +a-maximum-rrset.example. 5M IN A 10.0.9.12 +a-maximum-rrset.example. 5M IN A 10.0.9.13 +a-maximum-rrset.example. 5M IN A 10.0.9.14 +a-maximum-rrset.example. 5M IN A 10.0.9.15 +a-maximum-rrset.example. 5M IN A 10.0.9.16 +a-maximum-rrset.example. 5M IN A 10.0.9.17 +a-maximum-rrset.example. 5M IN A 10.0.9.18 +a-maximum-rrset.example. 5M IN A 10.0.9.19 +a-maximum-rrset.example. 5M IN A 10.0.9.20 +a-maximum-rrset.example. 5M IN A 10.0.9.21 +a-maximum-rrset.example. 5M IN A 10.0.9.22 +a-maximum-rrset.example. 5M IN A 10.0.9.23 +a-maximum-rrset.example. 5M IN A 10.0.9.24 +a-maximum-rrset.example. 5M IN A 10.0.9.25 +a-maximum-rrset.example. 5M IN A 10.0.9.26 +a-maximum-rrset.example. 5M IN A 10.0.9.27 +a-maximum-rrset.example. 5M IN A 10.0.9.28 +a-maximum-rrset.example. 5M IN A 10.0.9.29 +a-maximum-rrset.example. 5M IN A 10.0.9.30 +a-maximum-rrset.example. 5M IN A 10.0.9.31 +a-maximum-rrset.example. 5M IN A 10.0.9.32 +a-maximum-rrset.example. 5M IN A 10.0.9.33 +a-maximum-rrset.example. 5M IN A 10.0.9.34 +a-maximum-rrset.example. 5M IN A 10.0.9.35 +a-maximum-rrset.example. 5M IN A 10.0.9.36 +a-maximum-rrset.example. 5M IN A 10.0.9.37 +a-maximum-rrset.example. 5M IN A 10.0.9.38 +a-maximum-rrset.example. 5M IN A 10.0.9.39 +a-maximum-rrset.example. 5M IN A 10.0.9.40 +a-maximum-rrset.example. 5M IN A 10.0.9.41 +a-maximum-rrset.example. 5M IN A 10.0.9.42 +a-maximum-rrset.example. 5M IN A 10.0.9.43 +a-maximum-rrset.example. 5M IN A 10.0.9.44 +a-maximum-rrset.example. 5M IN A 10.0.9.45 +a-maximum-rrset.example. 5M IN A 10.0.9.46 +a-maximum-rrset.example. 5M IN A 10.0.9.47 +a-maximum-rrset.example. 5M IN A 10.0.9.48 +a-maximum-rrset.example. 5M IN A 10.0.9.49 +a-maximum-rrset.example. 5M IN A 10.0.9.50 +a-maximum-rrset.example. 5M IN A 10.0.9.51 +a-maximum-rrset.example. 5M IN A 10.0.9.52 +a-maximum-rrset.example. 5M IN A 10.0.9.53 +a-maximum-rrset.example. 5M IN A 10.0.9.54 +a-maximum-rrset.example. 5M IN A 10.0.9.55 +a-maximum-rrset.example. 5M IN A 10.0.9.56 +a-maximum-rrset.example. 5M IN A 10.0.9.57 +a-maximum-rrset.example. 5M IN A 10.0.9.58 +a-maximum-rrset.example. 5M IN A 10.0.9.59 +a-maximum-rrset.example. 5M IN A 10.0.9.60 +a-maximum-rrset.example. 5M IN A 10.0.9.61 +a-maximum-rrset.example. 5M IN A 10.0.9.62 +a-maximum-rrset.example. 5M IN A 10.0.9.63 +a-maximum-rrset.example. 5M IN A 10.0.9.64 +a-maximum-rrset.example. 5M IN A 10.0.9.65 +a-maximum-rrset.example. 5M IN A 10.0.9.66 +a-maximum-rrset.example. 5M IN A 10.0.9.67 +a-maximum-rrset.example. 5M IN A 10.0.9.68 +a-maximum-rrset.example. 5M IN A 10.0.9.69 +a-maximum-rrset.example. 5M IN A 10.0.9.70 +a-maximum-rrset.example. 5M IN A 10.0.9.71 +a-maximum-rrset.example. 5M IN A 10.0.9.72 +a-maximum-rrset.example. 5M IN A 10.0.9.73 +a-maximum-rrset.example. 5M IN A 10.0.9.74 +a-maximum-rrset.example. 5M IN A 10.0.9.75 +a-maximum-rrset.example. 5M IN A 10.0.9.76 +a-maximum-rrset.example. 5M IN A 10.0.9.77 +a-maximum-rrset.example. 5M IN A 10.0.9.78 +a-maximum-rrset.example. 5M IN A 10.0.9.79 +a-maximum-rrset.example. 5M IN A 10.0.9.80 +a-maximum-rrset.example. 5M IN A 10.0.9.81 +a-maximum-rrset.example. 5M IN A 10.0.9.82 +a-maximum-rrset.example. 5M IN A 10.0.9.83 +a-maximum-rrset.example. 5M IN A 10.0.9.84 +a-maximum-rrset.example. 5M IN A 10.0.9.85 +a-maximum-rrset.example. 5M IN A 10.0.9.86 +a-maximum-rrset.example. 5M IN A 10.0.9.87 +a-maximum-rrset.example. 5M IN A 10.0.9.88 +a-maximum-rrset.example. 5M IN A 10.0.9.89 +a-maximum-rrset.example. 5M IN A 10.0.9.90 +a-maximum-rrset.example. 5M IN A 10.0.9.91 +a-maximum-rrset.example. 5M IN A 10.0.9.92 +a-maximum-rrset.example. 5M IN A 10.0.9.93 +a-maximum-rrset.example. 5M IN A 10.0.9.94 +a-maximum-rrset.example. 5M IN A 10.0.9.95 +a-maximum-rrset.example. 5M IN A 10.0.9.96 +a-maximum-rrset.example. 5M IN A 10.0.9.97 +a-maximum-rrset.example. 5M IN A 10.0.9.98 +a-maximum-rrset.example. 5M IN A 10.0.9.99 +a-maximum-rrset.example. 5M IN A 10.0.9.100 +a-maximum-rrset.example. 5M IN A 10.0.9.101 +a-maximum-rrset.example. 5M IN A 10.0.9.102 +a-maximum-rrset.example. 5M IN A 10.0.9.103 +a-maximum-rrset.example. 5M IN A 10.0.9.104 +a-maximum-rrset.example. 5M IN A 10.0.9.105 +a-maximum-rrset.example. 5M IN A 10.0.9.106 +a-maximum-rrset.example. 5M IN A 10.0.9.107 +a-maximum-rrset.example. 5M IN A 10.0.9.108 +a-maximum-rrset.example. 5M IN A 10.0.9.109 +a-maximum-rrset.example. 5M IN A 10.0.9.110 +a-maximum-rrset.example. 5M IN A 10.0.9.111 +a-maximum-rrset.example. 5M IN A 10.0.9.112 +a-maximum-rrset.example. 5M IN A 10.0.9.113 +a-maximum-rrset.example. 5M IN A 10.0.9.114 +a-maximum-rrset.example. 5M IN A 10.0.9.115 +a-maximum-rrset.example. 5M IN A 10.0.9.116 +a-maximum-rrset.example. 5M IN A 10.0.9.117 +a-maximum-rrset.example. 5M IN A 10.0.9.118 +a-maximum-rrset.example. 5M IN A 10.0.9.119 +a-maximum-rrset.example. 5M IN A 10.0.9.120 +a-maximum-rrset.example. 5M IN A 10.0.9.121 +a-maximum-rrset.example. 5M IN A 10.0.9.122 +a-maximum-rrset.example. 5M IN A 10.0.9.123 +a-maximum-rrset.example. 5M IN A 10.0.9.124 +a-maximum-rrset.example. 5M IN A 10.0.9.125 +a-maximum-rrset.example. 5M IN A 10.0.9.126 +a-maximum-rrset.example. 5M IN A 10.0.9.127 +a-maximum-rrset.example. 5M IN A 10.0.9.128 +a-maximum-rrset.example. 5M IN A 10.0.9.129 +a-maximum-rrset.example. 5M IN A 10.0.9.130 +a-maximum-rrset.example. 5M IN A 10.0.9.131 +a-maximum-rrset.example. 5M IN A 10.0.9.132 +a-maximum-rrset.example. 5M IN A 10.0.9.133 +a-maximum-rrset.example. 5M IN A 10.0.9.134 +a-maximum-rrset.example. 5M IN A 10.0.9.135 +a-maximum-rrset.example. 5M IN A 10.0.9.136 +a-maximum-rrset.example. 5M IN A 10.0.9.137 +a-maximum-rrset.example. 5M IN A 10.0.9.138 +a-maximum-rrset.example. 5M IN A 10.0.9.139 +a-maximum-rrset.example. 5M IN A 10.0.9.140 +a-maximum-rrset.example. 5M IN A 10.0.9.141 +a-maximum-rrset.example. 5M IN A 10.0.9.142 +a-maximum-rrset.example. 5M IN A 10.0.9.143 +a-maximum-rrset.example. 5M IN A 10.0.9.144 +a-maximum-rrset.example. 5M IN A 10.0.9.145 +a-maximum-rrset.example. 5M IN A 10.0.9.146 +a-maximum-rrset.example. 5M IN A 10.0.9.147 +a-maximum-rrset.example. 5M IN A 10.0.9.148 +a-maximum-rrset.example. 5M IN A 10.0.9.149 +a-maximum-rrset.example. 5M IN A 10.0.9.150 +a-maximum-rrset.example. 5M IN A 10.0.9.151 +a-maximum-rrset.example. 5M IN A 10.0.9.152 +a-maximum-rrset.example. 5M IN A 10.0.9.153 +a-maximum-rrset.example. 5M IN A 10.0.9.154 +a-maximum-rrset.example. 5M IN A 10.0.9.155 +a-maximum-rrset.example. 5M IN A 10.0.9.156 +a-maximum-rrset.example. 5M IN A 10.0.9.157 +a-maximum-rrset.example. 5M IN A 10.0.9.158 +a-maximum-rrset.example. 5M IN A 10.0.9.159 +a-maximum-rrset.example. 5M IN A 10.0.9.160 +a-maximum-rrset.example. 5M IN A 10.0.9.161 +a-maximum-rrset.example. 5M IN A 10.0.9.162 +a-maximum-rrset.example. 5M IN A 10.0.9.163 +a-maximum-rrset.example. 5M IN A 10.0.9.164 +a-maximum-rrset.example. 5M IN A 10.0.9.165 +a-maximum-rrset.example. 5M IN A 10.0.9.166 +a-maximum-rrset.example. 5M IN A 10.0.9.167 +a-maximum-rrset.example. 5M IN A 10.0.9.168 +a-maximum-rrset.example. 5M IN A 10.0.9.169 +a-maximum-rrset.example. 5M IN A 10.0.9.170 +a-maximum-rrset.example. 5M IN A 10.0.9.171 +a-maximum-rrset.example. 5M IN A 10.0.9.172 +a-maximum-rrset.example. 5M IN A 10.0.9.173 +a-maximum-rrset.example. 5M IN A 10.0.9.174 +a-maximum-rrset.example. 5M IN A 10.0.9.175 +a-maximum-rrset.example. 5M IN A 10.0.9.176 +a-maximum-rrset.example. 5M IN A 10.0.9.177 +a-maximum-rrset.example. 5M IN A 10.0.9.178 +a-maximum-rrset.example. 5M IN A 10.0.9.179 +a-maximum-rrset.example. 5M IN A 10.0.9.180 +a-maximum-rrset.example. 5M IN A 10.0.9.181 +a-maximum-rrset.example. 5M IN A 10.0.9.182 +a-maximum-rrset.example. 5M IN A 10.0.9.183 +a-maximum-rrset.example. 5M IN A 10.0.9.184 +a-maximum-rrset.example. 5M IN A 10.0.9.185 +a-maximum-rrset.example. 5M IN A 10.0.9.186 +a-maximum-rrset.example. 5M IN A 10.0.9.187 +a-maximum-rrset.example. 5M IN A 10.0.9.188 +a-maximum-rrset.example. 5M IN A 10.0.9.189 +a-maximum-rrset.example. 5M IN A 10.0.9.190 +a-maximum-rrset.example. 5M IN A 10.0.9.191 +a-maximum-rrset.example. 5M IN A 10.0.9.192 +a-maximum-rrset.example. 5M IN A 10.0.9.193 +a-maximum-rrset.example. 5M IN A 10.0.9.194 +a-maximum-rrset.example. 5M IN A 10.0.9.195 +a-maximum-rrset.example. 5M IN A 10.0.9.196 +a-maximum-rrset.example. 5M IN A 10.0.9.197 +a-maximum-rrset.example. 5M IN A 10.0.9.198 +a-maximum-rrset.example. 5M IN A 10.0.9.199 +a-maximum-rrset.example. 5M IN A 10.0.9.200 +a-maximum-rrset.example. 5M IN A 10.0.9.201 +a-maximum-rrset.example. 5M IN A 10.0.9.202 +a-maximum-rrset.example. 5M IN A 10.0.9.203 +a-maximum-rrset.example. 5M IN A 10.0.9.204 +a-maximum-rrset.example. 5M IN A 10.0.9.205 +a-maximum-rrset.example. 5M IN A 10.0.9.206 +a-maximum-rrset.example. 5M IN A 10.0.9.207 +a-maximum-rrset.example. 5M IN A 10.0.9.208 +a-maximum-rrset.example. 5M IN A 10.0.9.209 +a-maximum-rrset.example. 5M IN A 10.0.9.210 +a-maximum-rrset.example. 5M IN A 10.0.9.211 +a-maximum-rrset.example. 5M IN A 10.0.9.212 +a-maximum-rrset.example. 5M IN A 10.0.9.213 +a-maximum-rrset.example. 5M IN A 10.0.9.214 +a-maximum-rrset.example. 5M IN A 10.0.9.215 +a-maximum-rrset.example. 5M IN A 10.0.9.216 +a-maximum-rrset.example. 5M IN A 10.0.9.217 +a-maximum-rrset.example. 5M IN A 10.0.9.218 +a-maximum-rrset.example. 5M IN A 10.0.9.219 +a-maximum-rrset.example. 5M IN A 10.0.9.220 +a-maximum-rrset.example. 5M IN A 10.0.9.221 +a-maximum-rrset.example. 5M IN A 10.0.9.222 +a-maximum-rrset.example. 5M IN A 10.0.9.223 +a-maximum-rrset.example. 5M IN A 10.0.9.224 +a-maximum-rrset.example. 5M IN A 10.0.9.225 +a-maximum-rrset.example. 5M IN A 10.0.9.226 +a-maximum-rrset.example. 5M IN A 10.0.9.227 +a-maximum-rrset.example. 5M IN A 10.0.9.228 +a-maximum-rrset.example. 5M IN A 10.0.9.229 +a-maximum-rrset.example. 5M IN A 10.0.9.230 +a-maximum-rrset.example. 5M IN A 10.0.9.231 +a-maximum-rrset.example. 5M IN A 10.0.9.232 +a-maximum-rrset.example. 5M IN A 10.0.9.233 +a-maximum-rrset.example. 5M IN A 10.0.9.234 +a-maximum-rrset.example. 5M IN A 10.0.9.235 +a-maximum-rrset.example. 5M IN A 10.0.9.236 +a-maximum-rrset.example. 5M IN A 10.0.9.237 +a-maximum-rrset.example. 5M IN A 10.0.9.238 +a-maximum-rrset.example. 5M IN A 10.0.9.239 +a-maximum-rrset.example. 5M IN A 10.0.9.240 +a-maximum-rrset.example. 5M IN A 10.0.9.241 +a-maximum-rrset.example. 5M IN A 10.0.9.242 +a-maximum-rrset.example. 5M IN A 10.0.9.243 +a-maximum-rrset.example. 5M IN A 10.0.9.244 +a-maximum-rrset.example. 5M IN A 10.0.9.245 +a-maximum-rrset.example. 5M IN A 10.0.9.246 +a-maximum-rrset.example. 5M IN A 10.0.9.247 +a-maximum-rrset.example. 5M IN A 10.0.9.248 +a-maximum-rrset.example. 5M IN A 10.0.9.249 +a-maximum-rrset.example. 5M IN A 10.0.9.250 +a-maximum-rrset.example. 5M IN A 10.0.9.251 +a-maximum-rrset.example. 5M IN A 10.0.9.252 +a-maximum-rrset.example. 5M IN A 10.0.9.253 +a-maximum-rrset.example. 5M IN A 10.0.9.254 +a-maximum-rrset.example. 5M IN A 10.0.9.255 +a-maximum-rrset.example. 5M IN A 10.0.10.0 +a-maximum-rrset.example. 5M IN A 10.0.10.1 +a-maximum-rrset.example. 5M IN A 10.0.10.2 +a-maximum-rrset.example. 5M IN A 10.0.10.3 +a-maximum-rrset.example. 5M IN A 10.0.10.4 +a-maximum-rrset.example. 5M IN A 10.0.10.5 +a-maximum-rrset.example. 5M IN A 10.0.10.6 +a-maximum-rrset.example. 5M IN A 10.0.10.7 +a-maximum-rrset.example. 5M IN A 10.0.10.8 +a-maximum-rrset.example. 5M IN A 10.0.10.9 +a-maximum-rrset.example. 5M IN A 10.0.10.10 +a-maximum-rrset.example. 5M IN A 10.0.10.11 +a-maximum-rrset.example. 5M IN A 10.0.10.12 +a-maximum-rrset.example. 5M IN A 10.0.10.13 +a-maximum-rrset.example. 5M IN A 10.0.10.14 +a-maximum-rrset.example. 5M IN A 10.0.10.15 +a-maximum-rrset.example. 5M IN A 10.0.10.16 +a-maximum-rrset.example. 5M IN A 10.0.10.17 +a-maximum-rrset.example. 5M IN A 10.0.10.18 +a-maximum-rrset.example. 5M IN A 10.0.10.19 +a-maximum-rrset.example. 5M IN A 10.0.10.20 +a-maximum-rrset.example. 5M IN A 10.0.10.21 +a-maximum-rrset.example. 5M IN A 10.0.10.22 +a-maximum-rrset.example. 5M IN A 10.0.10.23 +a-maximum-rrset.example. 5M IN A 10.0.10.24 +a-maximum-rrset.example. 5M IN A 10.0.10.25 +a-maximum-rrset.example. 5M IN A 10.0.10.26 +a-maximum-rrset.example. 5M IN A 10.0.10.27 +a-maximum-rrset.example. 5M IN A 10.0.10.28 +a-maximum-rrset.example. 5M IN A 10.0.10.29 +a-maximum-rrset.example. 5M IN A 10.0.10.30 +a-maximum-rrset.example. 5M IN A 10.0.10.31 +a-maximum-rrset.example. 5M IN A 10.0.10.32 +a-maximum-rrset.example. 5M IN A 10.0.10.33 +a-maximum-rrset.example. 5M IN A 10.0.10.34 +a-maximum-rrset.example. 5M IN A 10.0.10.35 +a-maximum-rrset.example. 5M IN A 10.0.10.36 +a-maximum-rrset.example. 5M IN A 10.0.10.37 +a-maximum-rrset.example. 5M IN A 10.0.10.38 +a-maximum-rrset.example. 5M IN A 10.0.10.39 +a-maximum-rrset.example. 5M IN A 10.0.10.40 +a-maximum-rrset.example. 5M IN A 10.0.10.41 +a-maximum-rrset.example. 5M IN A 10.0.10.42 +a-maximum-rrset.example. 5M IN A 10.0.10.43 +a-maximum-rrset.example. 5M IN A 10.0.10.44 +a-maximum-rrset.example. 5M IN A 10.0.10.45 +a-maximum-rrset.example. 5M IN A 10.0.10.46 +a-maximum-rrset.example. 5M IN A 10.0.10.47 +a-maximum-rrset.example. 5M IN A 10.0.10.48 +a-maximum-rrset.example. 5M IN A 10.0.10.49 +a-maximum-rrset.example. 5M IN A 10.0.10.50 +a-maximum-rrset.example. 5M IN A 10.0.10.51 +a-maximum-rrset.example. 5M IN A 10.0.10.52 +a-maximum-rrset.example. 5M IN A 10.0.10.53 +a-maximum-rrset.example. 5M IN A 10.0.10.54 +a-maximum-rrset.example. 5M IN A 10.0.10.55 +a-maximum-rrset.example. 5M IN A 10.0.10.56 +a-maximum-rrset.example. 5M IN A 10.0.10.57 +a-maximum-rrset.example. 5M IN A 10.0.10.58 +a-maximum-rrset.example. 5M IN A 10.0.10.59 +a-maximum-rrset.example. 5M IN A 10.0.10.60 +a-maximum-rrset.example. 5M IN A 10.0.10.61 +a-maximum-rrset.example. 5M IN A 10.0.10.62 +a-maximum-rrset.example. 5M IN A 10.0.10.63 +a-maximum-rrset.example. 5M IN A 10.0.10.64 +a-maximum-rrset.example. 5M IN A 10.0.10.65 +a-maximum-rrset.example. 5M IN A 10.0.10.66 +a-maximum-rrset.example. 5M IN A 10.0.10.67 +a-maximum-rrset.example. 5M IN A 10.0.10.68 +a-maximum-rrset.example. 5M IN A 10.0.10.69 +a-maximum-rrset.example. 5M IN A 10.0.10.70 +a-maximum-rrset.example. 5M IN A 10.0.10.71 +a-maximum-rrset.example. 5M IN A 10.0.10.72 +a-maximum-rrset.example. 5M IN A 10.0.10.73 +a-maximum-rrset.example. 5M IN A 10.0.10.74 +a-maximum-rrset.example. 5M IN A 10.0.10.75 +a-maximum-rrset.example. 5M IN A 10.0.10.76 +a-maximum-rrset.example. 5M IN A 10.0.10.77 +a-maximum-rrset.example. 5M IN A 10.0.10.78 +a-maximum-rrset.example. 5M IN A 10.0.10.79 +a-maximum-rrset.example. 5M IN A 10.0.10.80 +a-maximum-rrset.example. 5M IN A 10.0.10.81 +a-maximum-rrset.example. 5M IN A 10.0.10.82 +a-maximum-rrset.example. 5M IN A 10.0.10.83 +a-maximum-rrset.example. 5M IN A 10.0.10.84 +a-maximum-rrset.example. 5M IN A 10.0.10.85 +a-maximum-rrset.example. 5M IN A 10.0.10.86 +a-maximum-rrset.example. 5M IN A 10.0.10.87 +a-maximum-rrset.example. 5M IN A 10.0.10.88 +a-maximum-rrset.example. 5M IN A 10.0.10.89 +a-maximum-rrset.example. 5M IN A 10.0.10.90 +a-maximum-rrset.example. 5M IN A 10.0.10.91 +a-maximum-rrset.example. 5M IN A 10.0.10.92 +a-maximum-rrset.example. 5M IN A 10.0.10.93 +a-maximum-rrset.example. 5M IN A 10.0.10.94 +a-maximum-rrset.example. 5M IN A 10.0.10.95 +a-maximum-rrset.example. 5M IN A 10.0.10.96 +a-maximum-rrset.example. 5M IN A 10.0.10.97 +a-maximum-rrset.example. 5M IN A 10.0.10.98 +a-maximum-rrset.example. 5M IN A 10.0.10.99 +a-maximum-rrset.example. 5M IN A 10.0.10.100 +a-maximum-rrset.example. 5M IN A 10.0.10.101 +a-maximum-rrset.example. 5M IN A 10.0.10.102 +a-maximum-rrset.example. 5M IN A 10.0.10.103 +a-maximum-rrset.example. 5M IN A 10.0.10.104 +a-maximum-rrset.example. 5M IN A 10.0.10.105 +a-maximum-rrset.example. 5M IN A 10.0.10.106 +a-maximum-rrset.example. 5M IN A 10.0.10.107 +a-maximum-rrset.example. 5M IN A 10.0.10.108 +a-maximum-rrset.example. 5M IN A 10.0.10.109 +a-maximum-rrset.example. 5M IN A 10.0.10.110 +a-maximum-rrset.example. 5M IN A 10.0.10.111 +a-maximum-rrset.example. 5M IN A 10.0.10.112 +a-maximum-rrset.example. 5M IN A 10.0.10.113 +a-maximum-rrset.example. 5M IN A 10.0.10.114 +a-maximum-rrset.example. 5M IN A 10.0.10.115 +a-maximum-rrset.example. 5M IN A 10.0.10.116 +a-maximum-rrset.example. 5M IN A 10.0.10.117 +a-maximum-rrset.example. 5M IN A 10.0.10.118 +a-maximum-rrset.example. 5M IN A 10.0.10.119 +a-maximum-rrset.example. 5M IN A 10.0.10.120 +a-maximum-rrset.example. 5M IN A 10.0.10.121 +a-maximum-rrset.example. 5M IN A 10.0.10.122 +a-maximum-rrset.example. 5M IN A 10.0.10.123 +a-maximum-rrset.example. 5M IN A 10.0.10.124 +a-maximum-rrset.example. 5M IN A 10.0.10.125 +a-maximum-rrset.example. 5M IN A 10.0.10.126 +a-maximum-rrset.example. 5M IN A 10.0.10.127 +a-maximum-rrset.example. 5M IN A 10.0.10.128 +a-maximum-rrset.example. 5M IN A 10.0.10.129 +a-maximum-rrset.example. 5M IN A 10.0.10.130 +a-maximum-rrset.example. 5M IN A 10.0.10.131 +a-maximum-rrset.example. 5M IN A 10.0.10.132 +a-maximum-rrset.example. 5M IN A 10.0.10.133 +a-maximum-rrset.example. 5M IN A 10.0.10.134 +a-maximum-rrset.example. 5M IN A 10.0.10.135 +a-maximum-rrset.example. 5M IN A 10.0.10.136 +a-maximum-rrset.example. 5M IN A 10.0.10.137 +a-maximum-rrset.example. 5M IN A 10.0.10.138 +a-maximum-rrset.example. 5M IN A 10.0.10.139 +a-maximum-rrset.example. 5M IN A 10.0.10.140 +a-maximum-rrset.example. 5M IN A 10.0.10.141 +a-maximum-rrset.example. 5M IN A 10.0.10.142 +a-maximum-rrset.example. 5M IN A 10.0.10.143 +a-maximum-rrset.example. 5M IN A 10.0.10.144 +a-maximum-rrset.example. 5M IN A 10.0.10.145 +a-maximum-rrset.example. 5M IN A 10.0.10.146 +a-maximum-rrset.example. 5M IN A 10.0.10.147 +a-maximum-rrset.example. 5M IN A 10.0.10.148 +a-maximum-rrset.example. 5M IN A 10.0.10.149 +a-maximum-rrset.example. 5M IN A 10.0.10.150 +a-maximum-rrset.example. 5M IN A 10.0.10.151 +a-maximum-rrset.example. 5M IN A 10.0.10.152 +a-maximum-rrset.example. 5M IN A 10.0.10.153 +a-maximum-rrset.example. 5M IN A 10.0.10.154 +a-maximum-rrset.example. 5M IN A 10.0.10.155 +a-maximum-rrset.example. 5M IN A 10.0.10.156 +a-maximum-rrset.example. 5M IN A 10.0.10.157 +a-maximum-rrset.example. 5M IN A 10.0.10.158 +a-maximum-rrset.example. 5M IN A 10.0.10.159 +a-maximum-rrset.example. 5M IN A 10.0.10.160 +a-maximum-rrset.example. 5M IN A 10.0.10.161 +a-maximum-rrset.example. 5M IN A 10.0.10.162 +a-maximum-rrset.example. 5M IN A 10.0.10.163 +a-maximum-rrset.example. 5M IN A 10.0.10.164 +a-maximum-rrset.example. 5M IN A 10.0.10.165 +a-maximum-rrset.example. 5M IN A 10.0.10.166 +a-maximum-rrset.example. 5M IN A 10.0.10.167 +a-maximum-rrset.example. 5M IN A 10.0.10.168 +a-maximum-rrset.example. 5M IN A 10.0.10.169 +a-maximum-rrset.example. 5M IN A 10.0.10.170 +a-maximum-rrset.example. 5M IN A 10.0.10.171 +a-maximum-rrset.example. 5M IN A 10.0.10.172 +a-maximum-rrset.example. 5M IN A 10.0.10.173 +a-maximum-rrset.example. 5M IN A 10.0.10.174 +a-maximum-rrset.example. 5M IN A 10.0.10.175 +a-maximum-rrset.example. 5M IN A 10.0.10.176 +a-maximum-rrset.example. 5M IN A 10.0.10.177 +a-maximum-rrset.example. 5M IN A 10.0.10.178 +a-maximum-rrset.example. 5M IN A 10.0.10.179 +a-maximum-rrset.example. 5M IN A 10.0.10.180 +a-maximum-rrset.example. 5M IN A 10.0.10.181 +a-maximum-rrset.example. 5M IN A 10.0.10.182 +a-maximum-rrset.example. 5M IN A 10.0.10.183 +a-maximum-rrset.example. 5M IN A 10.0.10.184 +a-maximum-rrset.example. 5M IN A 10.0.10.185 +a-maximum-rrset.example. 5M IN A 10.0.10.186 +a-maximum-rrset.example. 5M IN A 10.0.10.187 +a-maximum-rrset.example. 5M IN A 10.0.10.188 +a-maximum-rrset.example. 5M IN A 10.0.10.189 +a-maximum-rrset.example. 5M IN A 10.0.10.190 +a-maximum-rrset.example. 5M IN A 10.0.10.191 +a-maximum-rrset.example. 5M IN A 10.0.10.192 +a-maximum-rrset.example. 5M IN A 10.0.10.193 +a-maximum-rrset.example. 5M IN A 10.0.10.194 +a-maximum-rrset.example. 5M IN A 10.0.10.195 +a-maximum-rrset.example. 5M IN A 10.0.10.196 +a-maximum-rrset.example. 5M IN A 10.0.10.197 +a-maximum-rrset.example. 5M IN A 10.0.10.198 +a-maximum-rrset.example. 5M IN A 10.0.10.199 +a-maximum-rrset.example. 5M IN A 10.0.10.200 +a-maximum-rrset.example. 5M IN A 10.0.10.201 +a-maximum-rrset.example. 5M IN A 10.0.10.202 +a-maximum-rrset.example. 5M IN A 10.0.10.203 +a-maximum-rrset.example. 5M IN A 10.0.10.204 +a-maximum-rrset.example. 5M IN A 10.0.10.205 +a-maximum-rrset.example. 5M IN A 10.0.10.206 +a-maximum-rrset.example. 5M IN A 10.0.10.207 +a-maximum-rrset.example. 5M IN A 10.0.10.208 +a-maximum-rrset.example. 5M IN A 10.0.10.209 +a-maximum-rrset.example. 5M IN A 10.0.10.210 +a-maximum-rrset.example. 5M IN A 10.0.10.211 +a-maximum-rrset.example. 5M IN A 10.0.10.212 +a-maximum-rrset.example. 5M IN A 10.0.10.213 +a-maximum-rrset.example. 5M IN A 10.0.10.214 +a-maximum-rrset.example. 5M IN A 10.0.10.215 +a-maximum-rrset.example. 5M IN A 10.0.10.216 +a-maximum-rrset.example. 5M IN A 10.0.10.217 +a-maximum-rrset.example. 5M IN A 10.0.10.218 +a-maximum-rrset.example. 5M IN A 10.0.10.219 +a-maximum-rrset.example. 5M IN A 10.0.10.220 +a-maximum-rrset.example. 5M IN A 10.0.10.221 +a-maximum-rrset.example. 5M IN A 10.0.10.222 +a-maximum-rrset.example. 5M IN A 10.0.10.223 +a-maximum-rrset.example. 5M IN A 10.0.10.224 +a-maximum-rrset.example. 5M IN A 10.0.10.225 +a-maximum-rrset.example. 5M IN A 10.0.10.226 +a-maximum-rrset.example. 5M IN A 10.0.10.227 +a-maximum-rrset.example. 5M IN A 10.0.10.228 +a-maximum-rrset.example. 5M IN A 10.0.10.229 +a-maximum-rrset.example. 5M IN A 10.0.10.230 +a-maximum-rrset.example. 5M IN A 10.0.10.231 +a-maximum-rrset.example. 5M IN A 10.0.10.232 +a-maximum-rrset.example. 5M IN A 10.0.10.233 +a-maximum-rrset.example. 5M IN A 10.0.10.234 +a-maximum-rrset.example. 5M IN A 10.0.10.235 +a-maximum-rrset.example. 5M IN A 10.0.10.236 +a-maximum-rrset.example. 5M IN A 10.0.10.237 +a-maximum-rrset.example. 5M IN A 10.0.10.238 +a-maximum-rrset.example. 5M IN A 10.0.10.239 +a-maximum-rrset.example. 5M IN A 10.0.10.240 +a-maximum-rrset.example. 5M IN A 10.0.10.241 +a-maximum-rrset.example. 5M IN A 10.0.10.242 +a-maximum-rrset.example. 5M IN A 10.0.10.243 +a-maximum-rrset.example. 5M IN A 10.0.10.244 +a-maximum-rrset.example. 5M IN A 10.0.10.245 +a-maximum-rrset.example. 5M IN A 10.0.10.246 +a-maximum-rrset.example. 5M IN A 10.0.10.247 +a-maximum-rrset.example. 5M IN A 10.0.10.248 +a-maximum-rrset.example. 5M IN A 10.0.10.249 +a-maximum-rrset.example. 5M IN A 10.0.10.250 +a-maximum-rrset.example. 5M IN A 10.0.10.251 +a-maximum-rrset.example. 5M IN A 10.0.10.252 +a-maximum-rrset.example. 5M IN A 10.0.10.253 +a-maximum-rrset.example. 5M IN A 10.0.10.254 +a-maximum-rrset.example. 5M IN A 10.0.10.255 +a-maximum-rrset.example. 5M IN A 10.0.11.0 +a-maximum-rrset.example. 5M IN A 10.0.11.1 +a-maximum-rrset.example. 5M IN A 10.0.11.2 +a-maximum-rrset.example. 5M IN A 10.0.11.3 +a-maximum-rrset.example. 5M IN A 10.0.11.4 +a-maximum-rrset.example. 5M IN A 10.0.11.5 +a-maximum-rrset.example. 5M IN A 10.0.11.6 +a-maximum-rrset.example. 5M IN A 10.0.11.7 +a-maximum-rrset.example. 5M IN A 10.0.11.8 +a-maximum-rrset.example. 5M IN A 10.0.11.9 +a-maximum-rrset.example. 5M IN A 10.0.11.10 +a-maximum-rrset.example. 5M IN A 10.0.11.11 +a-maximum-rrset.example. 5M IN A 10.0.11.12 +a-maximum-rrset.example. 5M IN A 10.0.11.13 +a-maximum-rrset.example. 5M IN A 10.0.11.14 +a-maximum-rrset.example. 5M IN A 10.0.11.15 +a-maximum-rrset.example. 5M IN A 10.0.11.16 +a-maximum-rrset.example. 5M IN A 10.0.11.17 +a-maximum-rrset.example. 5M IN A 10.0.11.18 +a-maximum-rrset.example. 5M IN A 10.0.11.19 +a-maximum-rrset.example. 5M IN A 10.0.11.20 +a-maximum-rrset.example. 5M IN A 10.0.11.21 +a-maximum-rrset.example. 5M IN A 10.0.11.22 +a-maximum-rrset.example. 5M IN A 10.0.11.23 +a-maximum-rrset.example. 5M IN A 10.0.11.24 +a-maximum-rrset.example. 5M IN A 10.0.11.25 +a-maximum-rrset.example. 5M IN A 10.0.11.26 +a-maximum-rrset.example. 5M IN A 10.0.11.27 +a-maximum-rrset.example. 5M IN A 10.0.11.28 +a-maximum-rrset.example. 5M IN A 10.0.11.29 +a-maximum-rrset.example. 5M IN A 10.0.11.30 +a-maximum-rrset.example. 5M IN A 10.0.11.31 +a-maximum-rrset.example. 5M IN A 10.0.11.32 +a-maximum-rrset.example. 5M IN A 10.0.11.33 +a-maximum-rrset.example. 5M IN A 10.0.11.34 +a-maximum-rrset.example. 5M IN A 10.0.11.35 +a-maximum-rrset.example. 5M IN A 10.0.11.36 +a-maximum-rrset.example. 5M IN A 10.0.11.37 +a-maximum-rrset.example. 5M IN A 10.0.11.38 +a-maximum-rrset.example. 5M IN A 10.0.11.39 +a-maximum-rrset.example. 5M IN A 10.0.11.40 +a-maximum-rrset.example. 5M IN A 10.0.11.41 +a-maximum-rrset.example. 5M IN A 10.0.11.42 +a-maximum-rrset.example. 5M IN A 10.0.11.43 +a-maximum-rrset.example. 5M IN A 10.0.11.44 +a-maximum-rrset.example. 5M IN A 10.0.11.45 +a-maximum-rrset.example. 5M IN A 10.0.11.46 +a-maximum-rrset.example. 5M IN A 10.0.11.47 +a-maximum-rrset.example. 5M IN A 10.0.11.48 +a-maximum-rrset.example. 5M IN A 10.0.11.49 +a-maximum-rrset.example. 5M IN A 10.0.11.50 +a-maximum-rrset.example. 5M IN A 10.0.11.51 +a-maximum-rrset.example. 5M IN A 10.0.11.52 +a-maximum-rrset.example. 5M IN A 10.0.11.53 +a-maximum-rrset.example. 5M IN A 10.0.11.54 +a-maximum-rrset.example. 5M IN A 10.0.11.55 +a-maximum-rrset.example. 5M IN A 10.0.11.56 +a-maximum-rrset.example. 5M IN A 10.0.11.57 +a-maximum-rrset.example. 5M IN A 10.0.11.58 +a-maximum-rrset.example. 5M IN A 10.0.11.59 +a-maximum-rrset.example. 5M IN A 10.0.11.60 +a-maximum-rrset.example. 5M IN A 10.0.11.61 +a-maximum-rrset.example. 5M IN A 10.0.11.62 +a-maximum-rrset.example. 5M IN A 10.0.11.63 +a-maximum-rrset.example. 5M IN A 10.0.11.64 +a-maximum-rrset.example. 5M IN A 10.0.11.65 +a-maximum-rrset.example. 5M IN A 10.0.11.66 +a-maximum-rrset.example. 5M IN A 10.0.11.67 +a-maximum-rrset.example. 5M IN A 10.0.11.68 +a-maximum-rrset.example. 5M IN A 10.0.11.69 +a-maximum-rrset.example. 5M IN A 10.0.11.70 +a-maximum-rrset.example. 5M IN A 10.0.11.71 +a-maximum-rrset.example. 5M IN A 10.0.11.72 +a-maximum-rrset.example. 5M IN A 10.0.11.73 +a-maximum-rrset.example. 5M IN A 10.0.11.74 +a-maximum-rrset.example. 5M IN A 10.0.11.75 +a-maximum-rrset.example. 5M IN A 10.0.11.76 +a-maximum-rrset.example. 5M IN A 10.0.11.77 +a-maximum-rrset.example. 5M IN A 10.0.11.78 +a-maximum-rrset.example. 5M IN A 10.0.11.79 +a-maximum-rrset.example. 5M IN A 10.0.11.80 +a-maximum-rrset.example. 5M IN A 10.0.11.81 +a-maximum-rrset.example. 5M IN A 10.0.11.82 +a-maximum-rrset.example. 5M IN A 10.0.11.83 +a-maximum-rrset.example. 5M IN A 10.0.11.84 +a-maximum-rrset.example. 5M IN A 10.0.11.85 +a-maximum-rrset.example. 5M IN A 10.0.11.86 +a-maximum-rrset.example. 5M IN A 10.0.11.87 +a-maximum-rrset.example. 5M IN A 10.0.11.88 +a-maximum-rrset.example. 5M IN A 10.0.11.89 +a-maximum-rrset.example. 5M IN A 10.0.11.90 +a-maximum-rrset.example. 5M IN A 10.0.11.91 +a-maximum-rrset.example. 5M IN A 10.0.11.92 +a-maximum-rrset.example. 5M IN A 10.0.11.93 +a-maximum-rrset.example. 5M IN A 10.0.11.94 +a-maximum-rrset.example. 5M IN A 10.0.11.95 +a-maximum-rrset.example. 5M IN A 10.0.11.96 +a-maximum-rrset.example. 5M IN A 10.0.11.97 +a-maximum-rrset.example. 5M IN A 10.0.11.98 +a-maximum-rrset.example. 5M IN A 10.0.11.99 +a-maximum-rrset.example. 5M IN A 10.0.11.100 +a-maximum-rrset.example. 5M IN A 10.0.11.101 +a-maximum-rrset.example. 5M IN A 10.0.11.102 +a-maximum-rrset.example. 5M IN A 10.0.11.103 +a-maximum-rrset.example. 5M IN A 10.0.11.104 +a-maximum-rrset.example. 5M IN A 10.0.11.105 +a-maximum-rrset.example. 5M IN A 10.0.11.106 +a-maximum-rrset.example. 5M IN A 10.0.11.107 +a-maximum-rrset.example. 5M IN A 10.0.11.108 +a-maximum-rrset.example. 5M IN A 10.0.11.109 +a-maximum-rrset.example. 5M IN A 10.0.11.110 +a-maximum-rrset.example. 5M IN A 10.0.11.111 +a-maximum-rrset.example. 5M IN A 10.0.11.112 +a-maximum-rrset.example. 5M IN A 10.0.11.113 +a-maximum-rrset.example. 5M IN A 10.0.11.114 +a-maximum-rrset.example. 5M IN A 10.0.11.115 +a-maximum-rrset.example. 5M IN A 10.0.11.116 +a-maximum-rrset.example. 5M IN A 10.0.11.117 +a-maximum-rrset.example. 5M IN A 10.0.11.118 +a-maximum-rrset.example. 5M IN A 10.0.11.119 +a-maximum-rrset.example. 5M IN A 10.0.11.120 +a-maximum-rrset.example. 5M IN A 10.0.11.121 +a-maximum-rrset.example. 5M IN A 10.0.11.122 +a-maximum-rrset.example. 5M IN A 10.0.11.123 +a-maximum-rrset.example. 5M IN A 10.0.11.124 +a-maximum-rrset.example. 5M IN A 10.0.11.125 +a-maximum-rrset.example. 5M IN A 10.0.11.126 +a-maximum-rrset.example. 5M IN A 10.0.11.127 +a-maximum-rrset.example. 5M IN A 10.0.11.128 +a-maximum-rrset.example. 5M IN A 10.0.11.129 +a-maximum-rrset.example. 5M IN A 10.0.11.130 +a-maximum-rrset.example. 5M IN A 10.0.11.131 +a-maximum-rrset.example. 5M IN A 10.0.11.132 +a-maximum-rrset.example. 5M IN A 10.0.11.133 +a-maximum-rrset.example. 5M IN A 10.0.11.134 +a-maximum-rrset.example. 5M IN A 10.0.11.135 +a-maximum-rrset.example. 5M IN A 10.0.11.136 +a-maximum-rrset.example. 5M IN A 10.0.11.137 +a-maximum-rrset.example. 5M IN A 10.0.11.138 +a-maximum-rrset.example. 5M IN A 10.0.11.139 +a-maximum-rrset.example. 5M IN A 10.0.11.140 +a-maximum-rrset.example. 5M IN A 10.0.11.141 +a-maximum-rrset.example. 5M IN A 10.0.11.142 +a-maximum-rrset.example. 5M IN A 10.0.11.143 +a-maximum-rrset.example. 5M IN A 10.0.11.144 +a-maximum-rrset.example. 5M IN A 10.0.11.145 +a-maximum-rrset.example. 5M IN A 10.0.11.146 +a-maximum-rrset.example. 5M IN A 10.0.11.147 +a-maximum-rrset.example. 5M IN A 10.0.11.148 +a-maximum-rrset.example. 5M IN A 10.0.11.149 +a-maximum-rrset.example. 5M IN A 10.0.11.150 +a-maximum-rrset.example. 5M IN A 10.0.11.151 +a-maximum-rrset.example. 5M IN A 10.0.11.152 +a-maximum-rrset.example. 5M IN A 10.0.11.153 +a-maximum-rrset.example. 5M IN A 10.0.11.154 +a-maximum-rrset.example. 5M IN A 10.0.11.155 +a-maximum-rrset.example. 5M IN A 10.0.11.156 +a-maximum-rrset.example. 5M IN A 10.0.11.157 +a-maximum-rrset.example. 5M IN A 10.0.11.158 +a-maximum-rrset.example. 5M IN A 10.0.11.159 +a-maximum-rrset.example. 5M IN A 10.0.11.160 +a-maximum-rrset.example. 5M IN A 10.0.11.161 +a-maximum-rrset.example. 5M IN A 10.0.11.162 +a-maximum-rrset.example. 5M IN A 10.0.11.163 +a-maximum-rrset.example. 5M IN A 10.0.11.164 +a-maximum-rrset.example. 5M IN A 10.0.11.165 +a-maximum-rrset.example. 5M IN A 10.0.11.166 +a-maximum-rrset.example. 5M IN A 10.0.11.167 +a-maximum-rrset.example. 5M IN A 10.0.11.168 +a-maximum-rrset.example. 5M IN A 10.0.11.169 +a-maximum-rrset.example. 5M IN A 10.0.11.170 +a-maximum-rrset.example. 5M IN A 10.0.11.171 +a-maximum-rrset.example. 5M IN A 10.0.11.172 +a-maximum-rrset.example. 5M IN A 10.0.11.173 +a-maximum-rrset.example. 5M IN A 10.0.11.174 +a-maximum-rrset.example. 5M IN A 10.0.11.175 +a-maximum-rrset.example. 5M IN A 10.0.11.176 +a-maximum-rrset.example. 5M IN A 10.0.11.177 +a-maximum-rrset.example. 5M IN A 10.0.11.178 +a-maximum-rrset.example. 5M IN A 10.0.11.179 +a-maximum-rrset.example. 5M IN A 10.0.11.180 +a-maximum-rrset.example. 5M IN A 10.0.11.181 +a-maximum-rrset.example. 5M IN A 10.0.11.182 +a-maximum-rrset.example. 5M IN A 10.0.11.183 +a-maximum-rrset.example. 5M IN A 10.0.11.184 +a-maximum-rrset.example. 5M IN A 10.0.11.185 +a-maximum-rrset.example. 5M IN A 10.0.11.186 +a-maximum-rrset.example. 5M IN A 10.0.11.187 +a-maximum-rrset.example. 5M IN A 10.0.11.188 +a-maximum-rrset.example. 5M IN A 10.0.11.189 +a-maximum-rrset.example. 5M IN A 10.0.11.190 +a-maximum-rrset.example. 5M IN A 10.0.11.191 +a-maximum-rrset.example. 5M IN A 10.0.11.192 +a-maximum-rrset.example. 5M IN A 10.0.11.193 +a-maximum-rrset.example. 5M IN A 10.0.11.194 +a-maximum-rrset.example. 5M IN A 10.0.11.195 +a-maximum-rrset.example. 5M IN A 10.0.11.196 +a-maximum-rrset.example. 5M IN A 10.0.11.197 +a-maximum-rrset.example. 5M IN A 10.0.11.198 +a-maximum-rrset.example. 5M IN A 10.0.11.199 +a-maximum-rrset.example. 5M IN A 10.0.11.200 +a-maximum-rrset.example. 5M IN A 10.0.11.201 +a-maximum-rrset.example. 5M IN A 10.0.11.202 +a-maximum-rrset.example. 5M IN A 10.0.11.203 +a-maximum-rrset.example. 5M IN A 10.0.11.204 +a-maximum-rrset.example. 5M IN A 10.0.11.205 +a-maximum-rrset.example. 5M IN A 10.0.11.206 +a-maximum-rrset.example. 5M IN A 10.0.11.207 +a-maximum-rrset.example. 5M IN A 10.0.11.208 +a-maximum-rrset.example. 5M IN A 10.0.11.209 +a-maximum-rrset.example. 5M IN A 10.0.11.210 +a-maximum-rrset.example. 5M IN A 10.0.11.211 +a-maximum-rrset.example. 5M IN A 10.0.11.212 +a-maximum-rrset.example. 5M IN A 10.0.11.213 +a-maximum-rrset.example. 5M IN A 10.0.11.214 +a-maximum-rrset.example. 5M IN A 10.0.11.215 +a-maximum-rrset.example. 5M IN A 10.0.11.216 +a-maximum-rrset.example. 5M IN A 10.0.11.217 +a-maximum-rrset.example. 5M IN A 10.0.11.218 +a-maximum-rrset.example. 5M IN A 10.0.11.219 +a-maximum-rrset.example. 5M IN A 10.0.11.220 +a-maximum-rrset.example. 5M IN A 10.0.11.221 +a-maximum-rrset.example. 5M IN A 10.0.11.222 +a-maximum-rrset.example. 5M IN A 10.0.11.223 +a-maximum-rrset.example. 5M IN A 10.0.11.224 +a-maximum-rrset.example. 5M IN A 10.0.11.225 +a-maximum-rrset.example. 5M IN A 10.0.11.226 +a-maximum-rrset.example. 5M IN A 10.0.11.227 +a-maximum-rrset.example. 5M IN A 10.0.11.228 +a-maximum-rrset.example. 5M IN A 10.0.11.229 +a-maximum-rrset.example. 5M IN A 10.0.11.230 +a-maximum-rrset.example. 5M IN A 10.0.11.231 +a-maximum-rrset.example. 5M IN A 10.0.11.232 +a-maximum-rrset.example. 5M IN A 10.0.11.233 +a-maximum-rrset.example. 5M IN A 10.0.11.234 +a-maximum-rrset.example. 5M IN A 10.0.11.235 +a-maximum-rrset.example. 5M IN A 10.0.11.236 +a-maximum-rrset.example. 5M IN A 10.0.11.237 +a-maximum-rrset.example. 5M IN A 10.0.11.238 +a-maximum-rrset.example. 5M IN A 10.0.11.239 +a-maximum-rrset.example. 5M IN A 10.0.11.240 +a-maximum-rrset.example. 5M IN A 10.0.11.241 +a-maximum-rrset.example. 5M IN A 10.0.11.242 +a-maximum-rrset.example. 5M IN A 10.0.11.243 +a-maximum-rrset.example. 5M IN A 10.0.11.244 +a-maximum-rrset.example. 5M IN A 10.0.11.245 +a-maximum-rrset.example. 5M IN A 10.0.11.246 +a-maximum-rrset.example. 5M IN A 10.0.11.247 +a-maximum-rrset.example. 5M IN A 10.0.11.248 +a-maximum-rrset.example. 5M IN A 10.0.11.249 +a-maximum-rrset.example. 5M IN A 10.0.11.250 +a-maximum-rrset.example. 5M IN A 10.0.11.251 +a-maximum-rrset.example. 5M IN A 10.0.11.252 +a-maximum-rrset.example. 5M IN A 10.0.11.253 +a-maximum-rrset.example. 5M IN A 10.0.11.254 +a-maximum-rrset.example. 5M IN A 10.0.11.255 +a-maximum-rrset.example. 5M IN A 10.0.12.0 +a-maximum-rrset.example. 5M IN A 10.0.12.1 +a-maximum-rrset.example. 5M IN A 10.0.12.2 +a-maximum-rrset.example. 5M IN A 10.0.12.3 +a-maximum-rrset.example. 5M IN A 10.0.12.4 +a-maximum-rrset.example. 5M IN A 10.0.12.5 +a-maximum-rrset.example. 5M IN A 10.0.12.6 +a-maximum-rrset.example. 5M IN A 10.0.12.7 +a-maximum-rrset.example. 5M IN A 10.0.12.8 +a-maximum-rrset.example. 5M IN A 10.0.12.9 +a-maximum-rrset.example. 5M IN A 10.0.12.10 +a-maximum-rrset.example. 5M IN A 10.0.12.11 +a-maximum-rrset.example. 5M IN A 10.0.12.12 +a-maximum-rrset.example. 5M IN A 10.0.12.13 +a-maximum-rrset.example. 5M IN A 10.0.12.14 +a-maximum-rrset.example. 5M IN A 10.0.12.15 +a-maximum-rrset.example. 5M IN A 10.0.12.16 +a-maximum-rrset.example. 5M IN A 10.0.12.17 +a-maximum-rrset.example. 5M IN A 10.0.12.18 +a-maximum-rrset.example. 5M IN A 10.0.12.19 +a-maximum-rrset.example. 5M IN A 10.0.12.20 +a-maximum-rrset.example. 5M IN A 10.0.12.21 +a-maximum-rrset.example. 5M IN A 10.0.12.22 +a-maximum-rrset.example. 5M IN A 10.0.12.23 +a-maximum-rrset.example. 5M IN A 10.0.12.24 +a-maximum-rrset.example. 5M IN A 10.0.12.25 +a-maximum-rrset.example. 5M IN A 10.0.12.26 +a-maximum-rrset.example. 5M IN A 10.0.12.27 +a-maximum-rrset.example. 5M IN A 10.0.12.28 +a-maximum-rrset.example. 5M IN A 10.0.12.29 +a-maximum-rrset.example. 5M IN A 10.0.12.30 +a-maximum-rrset.example. 5M IN A 10.0.12.31 +a-maximum-rrset.example. 5M IN A 10.0.12.32 +a-maximum-rrset.example. 5M IN A 10.0.12.33 +a-maximum-rrset.example. 5M IN A 10.0.12.34 +a-maximum-rrset.example. 5M IN A 10.0.12.35 +a-maximum-rrset.example. 5M IN A 10.0.12.36 +a-maximum-rrset.example. 5M IN A 10.0.12.37 +a-maximum-rrset.example. 5M IN A 10.0.12.38 +a-maximum-rrset.example. 5M IN A 10.0.12.39 +a-maximum-rrset.example. 5M IN A 10.0.12.40 +a-maximum-rrset.example. 5M IN A 10.0.12.41 +a-maximum-rrset.example. 5M IN A 10.0.12.42 +a-maximum-rrset.example. 5M IN A 10.0.12.43 +a-maximum-rrset.example. 5M IN A 10.0.12.44 +a-maximum-rrset.example. 5M IN A 10.0.12.45 +a-maximum-rrset.example. 5M IN A 10.0.12.46 +a-maximum-rrset.example. 5M IN A 10.0.12.47 +a-maximum-rrset.example. 5M IN A 10.0.12.48 +a-maximum-rrset.example. 5M IN A 10.0.12.49 +a-maximum-rrset.example. 5M IN A 10.0.12.50 +a-maximum-rrset.example. 5M IN A 10.0.12.51 +a-maximum-rrset.example. 5M IN A 10.0.12.52 +a-maximum-rrset.example. 5M IN A 10.0.12.53 +a-maximum-rrset.example. 5M IN A 10.0.12.54 +a-maximum-rrset.example. 5M IN A 10.0.12.55 +a-maximum-rrset.example. 5M IN A 10.0.12.56 +a-maximum-rrset.example. 5M IN A 10.0.12.57 +a-maximum-rrset.example. 5M IN A 10.0.12.58 +a-maximum-rrset.example. 5M IN A 10.0.12.59 +a-maximum-rrset.example. 5M IN A 10.0.12.60 +a-maximum-rrset.example. 5M IN A 10.0.12.61 +a-maximum-rrset.example. 5M IN A 10.0.12.62 +a-maximum-rrset.example. 5M IN A 10.0.12.63 +a-maximum-rrset.example. 5M IN A 10.0.12.64 +a-maximum-rrset.example. 5M IN A 10.0.12.65 +a-maximum-rrset.example. 5M IN A 10.0.12.66 +a-maximum-rrset.example. 5M IN A 10.0.12.67 +a-maximum-rrset.example. 5M IN A 10.0.12.68 +a-maximum-rrset.example. 5M IN A 10.0.12.69 +a-maximum-rrset.example. 5M IN A 10.0.12.70 +a-maximum-rrset.example. 5M IN A 10.0.12.71 +a-maximum-rrset.example. 5M IN A 10.0.12.72 +a-maximum-rrset.example. 5M IN A 10.0.12.73 +a-maximum-rrset.example. 5M IN A 10.0.12.74 +a-maximum-rrset.example. 5M IN A 10.0.12.75 +a-maximum-rrset.example. 5M IN A 10.0.12.76 +a-maximum-rrset.example. 5M IN A 10.0.12.77 +a-maximum-rrset.example. 5M IN A 10.0.12.78 +a-maximum-rrset.example. 5M IN A 10.0.12.79 +a-maximum-rrset.example. 5M IN A 10.0.12.80 +a-maximum-rrset.example. 5M IN A 10.0.12.81 +a-maximum-rrset.example. 5M IN A 10.0.12.82 +a-maximum-rrset.example. 5M IN A 10.0.12.83 +a-maximum-rrset.example. 5M IN A 10.0.12.84 +a-maximum-rrset.example. 5M IN A 10.0.12.85 +a-maximum-rrset.example. 5M IN A 10.0.12.86 +a-maximum-rrset.example. 5M IN A 10.0.12.87 +a-maximum-rrset.example. 5M IN A 10.0.12.88 +a-maximum-rrset.example. 5M IN A 10.0.12.89 +a-maximum-rrset.example. 5M IN A 10.0.12.90 +a-maximum-rrset.example. 5M IN A 10.0.12.91 +a-maximum-rrset.example. 5M IN A 10.0.12.92 +a-maximum-rrset.example. 5M IN A 10.0.12.93 +a-maximum-rrset.example. 5M IN A 10.0.12.94 +a-maximum-rrset.example. 5M IN A 10.0.12.95 +a-maximum-rrset.example. 5M IN A 10.0.12.96 +a-maximum-rrset.example. 5M IN A 10.0.12.97 +a-maximum-rrset.example. 5M IN A 10.0.12.98 +a-maximum-rrset.example. 5M IN A 10.0.12.99 +a-maximum-rrset.example. 5M IN A 10.0.12.100 +a-maximum-rrset.example. 5M IN A 10.0.12.101 +a-maximum-rrset.example. 5M IN A 10.0.12.102 +a-maximum-rrset.example. 5M IN A 10.0.12.103 +a-maximum-rrset.example. 5M IN A 10.0.12.104 +a-maximum-rrset.example. 5M IN A 10.0.12.105 +a-maximum-rrset.example. 5M IN A 10.0.12.106 +a-maximum-rrset.example. 5M IN A 10.0.12.107 +a-maximum-rrset.example. 5M IN A 10.0.12.108 +a-maximum-rrset.example. 5M IN A 10.0.12.109 +a-maximum-rrset.example. 5M IN A 10.0.12.110 +a-maximum-rrset.example. 5M IN A 10.0.12.111 +a-maximum-rrset.example. 5M IN A 10.0.12.112 +a-maximum-rrset.example. 5M IN A 10.0.12.113 +a-maximum-rrset.example. 5M IN A 10.0.12.114 +a-maximum-rrset.example. 5M IN A 10.0.12.115 +a-maximum-rrset.example. 5M IN A 10.0.12.116 +a-maximum-rrset.example. 5M IN A 10.0.12.117 +a-maximum-rrset.example. 5M IN A 10.0.12.118 +a-maximum-rrset.example. 5M IN A 10.0.12.119 +a-maximum-rrset.example. 5M IN A 10.0.12.120 +a-maximum-rrset.example. 5M IN A 10.0.12.121 +a-maximum-rrset.example. 5M IN A 10.0.12.122 +a-maximum-rrset.example. 5M IN A 10.0.12.123 +a-maximum-rrset.example. 5M IN A 10.0.12.124 +a-maximum-rrset.example. 5M IN A 10.0.12.125 +a-maximum-rrset.example. 5M IN A 10.0.12.126 +a-maximum-rrset.example. 5M IN A 10.0.12.127 +a-maximum-rrset.example. 5M IN A 10.0.12.128 +a-maximum-rrset.example. 5M IN A 10.0.12.129 +a-maximum-rrset.example. 5M IN A 10.0.12.130 +a-maximum-rrset.example. 5M IN A 10.0.12.131 +a-maximum-rrset.example. 5M IN A 10.0.12.132 +a-maximum-rrset.example. 5M IN A 10.0.12.133 +a-maximum-rrset.example. 5M IN A 10.0.12.134 +a-maximum-rrset.example. 5M IN A 10.0.12.135 +a-maximum-rrset.example. 5M IN A 10.0.12.136 +a-maximum-rrset.example. 5M IN A 10.0.12.137 +a-maximum-rrset.example. 5M IN A 10.0.12.138 +a-maximum-rrset.example. 5M IN A 10.0.12.139 +a-maximum-rrset.example. 5M IN A 10.0.12.140 +a-maximum-rrset.example. 5M IN A 10.0.12.141 +a-maximum-rrset.example. 5M IN A 10.0.12.142 +a-maximum-rrset.example. 5M IN A 10.0.12.143 +a-maximum-rrset.example. 5M IN A 10.0.12.144 +a-maximum-rrset.example. 5M IN A 10.0.12.145 +a-maximum-rrset.example. 5M IN A 10.0.12.146 +a-maximum-rrset.example. 5M IN A 10.0.12.147 +a-maximum-rrset.example. 5M IN A 10.0.12.148 +a-maximum-rrset.example. 5M IN A 10.0.12.149 +a-maximum-rrset.example. 5M IN A 10.0.12.150 +a-maximum-rrset.example. 5M IN A 10.0.12.151 +a-maximum-rrset.example. 5M IN A 10.0.12.152 +a-maximum-rrset.example. 5M IN A 10.0.12.153 +a-maximum-rrset.example. 5M IN A 10.0.12.154 +a-maximum-rrset.example. 5M IN A 10.0.12.155 +a-maximum-rrset.example. 5M IN A 10.0.12.156 +a-maximum-rrset.example. 5M IN A 10.0.12.157 +a-maximum-rrset.example. 5M IN A 10.0.12.158 +a-maximum-rrset.example. 5M IN A 10.0.12.159 +a-maximum-rrset.example. 5M IN A 10.0.12.160 +a-maximum-rrset.example. 5M IN A 10.0.12.161 +a-maximum-rrset.example. 5M IN A 10.0.12.162 +a-maximum-rrset.example. 5M IN A 10.0.12.163 +a-maximum-rrset.example. 5M IN A 10.0.12.164 +a-maximum-rrset.example. 5M IN A 10.0.12.165 +a-maximum-rrset.example. 5M IN A 10.0.12.166 +a-maximum-rrset.example. 5M IN A 10.0.12.167 +a-maximum-rrset.example. 5M IN A 10.0.12.168 +a-maximum-rrset.example. 5M IN A 10.0.12.169 +a-maximum-rrset.example. 5M IN A 10.0.12.170 +a-maximum-rrset.example. 5M IN A 10.0.12.171 +a-maximum-rrset.example. 5M IN A 10.0.12.172 +a-maximum-rrset.example. 5M IN A 10.0.12.173 +a-maximum-rrset.example. 5M IN A 10.0.12.174 +a-maximum-rrset.example. 5M IN A 10.0.12.175 +a-maximum-rrset.example. 5M IN A 10.0.12.176 +a-maximum-rrset.example. 5M IN A 10.0.12.177 +a-maximum-rrset.example. 5M IN A 10.0.12.178 +a-maximum-rrset.example. 5M IN A 10.0.12.179 +a-maximum-rrset.example. 5M IN A 10.0.12.180 +a-maximum-rrset.example. 5M IN A 10.0.12.181 +a-maximum-rrset.example. 5M IN A 10.0.12.182 +a-maximum-rrset.example. 5M IN A 10.0.12.183 +a-maximum-rrset.example. 5M IN A 10.0.12.184 +a-maximum-rrset.example. 5M IN A 10.0.12.185 +a-maximum-rrset.example. 5M IN A 10.0.12.186 +a-maximum-rrset.example. 5M IN A 10.0.12.187 +a-maximum-rrset.example. 5M IN A 10.0.12.188 +a-maximum-rrset.example. 5M IN A 10.0.12.189 +a-maximum-rrset.example. 5M IN A 10.0.12.190 +a-maximum-rrset.example. 5M IN A 10.0.12.191 +a-maximum-rrset.example. 5M IN A 10.0.12.192 +a-maximum-rrset.example. 5M IN A 10.0.12.193 +a-maximum-rrset.example. 5M IN A 10.0.12.194 +a-maximum-rrset.example. 5M IN A 10.0.12.195 +a-maximum-rrset.example. 5M IN A 10.0.12.196 +a-maximum-rrset.example. 5M IN A 10.0.12.197 +a-maximum-rrset.example. 5M IN A 10.0.12.198 +a-maximum-rrset.example. 5M IN A 10.0.12.199 +a-maximum-rrset.example. 5M IN A 10.0.12.200 +a-maximum-rrset.example. 5M IN A 10.0.12.201 +a-maximum-rrset.example. 5M IN A 10.0.12.202 +a-maximum-rrset.example. 5M IN A 10.0.12.203 +a-maximum-rrset.example. 5M IN A 10.0.12.204 +a-maximum-rrset.example. 5M IN A 10.0.12.205 +a-maximum-rrset.example. 5M IN A 10.0.12.206 +a-maximum-rrset.example. 5M IN A 10.0.12.207 +a-maximum-rrset.example. 5M IN A 10.0.12.208 +a-maximum-rrset.example. 5M IN A 10.0.12.209 +a-maximum-rrset.example. 5M IN A 10.0.12.210 +a-maximum-rrset.example. 5M IN A 10.0.12.211 +a-maximum-rrset.example. 5M IN A 10.0.12.212 +a-maximum-rrset.example. 5M IN A 10.0.12.213 +a-maximum-rrset.example. 5M IN A 10.0.12.214 +a-maximum-rrset.example. 5M IN A 10.0.12.215 +a-maximum-rrset.example. 5M IN A 10.0.12.216 +a-maximum-rrset.example. 5M IN A 10.0.12.217 +a-maximum-rrset.example. 5M IN A 10.0.12.218 +a-maximum-rrset.example. 5M IN A 10.0.12.219 +a-maximum-rrset.example. 5M IN A 10.0.12.220 +a-maximum-rrset.example. 5M IN A 10.0.12.221 +a-maximum-rrset.example. 5M IN A 10.0.12.222 +a-maximum-rrset.example. 5M IN A 10.0.12.223 +a-maximum-rrset.example. 5M IN A 10.0.12.224 +a-maximum-rrset.example. 5M IN A 10.0.12.225 +a-maximum-rrset.example. 5M IN A 10.0.12.226 +a-maximum-rrset.example. 5M IN A 10.0.12.227 +a-maximum-rrset.example. 5M IN A 10.0.12.228 +a-maximum-rrset.example. 5M IN A 10.0.12.229 +a-maximum-rrset.example. 5M IN A 10.0.12.230 +a-maximum-rrset.example. 5M IN A 10.0.12.231 +a-maximum-rrset.example. 5M IN A 10.0.12.232 +a-maximum-rrset.example. 5M IN A 10.0.12.233 +a-maximum-rrset.example. 5M IN A 10.0.12.234 +a-maximum-rrset.example. 5M IN A 10.0.12.235 +a-maximum-rrset.example. 5M IN A 10.0.12.236 +a-maximum-rrset.example. 5M IN A 10.0.12.237 +a-maximum-rrset.example. 5M IN A 10.0.12.238 +a-maximum-rrset.example. 5M IN A 10.0.12.239 +a-maximum-rrset.example. 5M IN A 10.0.12.240 +a-maximum-rrset.example. 5M IN A 10.0.12.241 +a-maximum-rrset.example. 5M IN A 10.0.12.242 +a-maximum-rrset.example. 5M IN A 10.0.12.243 +a-maximum-rrset.example. 5M IN A 10.0.12.244 +a-maximum-rrset.example. 5M IN A 10.0.12.245 +a-maximum-rrset.example. 5M IN A 10.0.12.246 +a-maximum-rrset.example. 5M IN A 10.0.12.247 +a-maximum-rrset.example. 5M IN A 10.0.12.248 +a-maximum-rrset.example. 5M IN A 10.0.12.249 +a-maximum-rrset.example. 5M IN A 10.0.12.250 +a-maximum-rrset.example. 5M IN A 10.0.12.251 +a-maximum-rrset.example. 5M IN A 10.0.12.252 +a-maximum-rrset.example. 5M IN A 10.0.12.253 +a-maximum-rrset.example. 5M IN A 10.0.12.254 +a-maximum-rrset.example. 5M IN A 10.0.12.255 +a-maximum-rrset.example. 5M IN A 10.0.13.0 +a-maximum-rrset.example. 5M IN A 10.0.13.1 +a-maximum-rrset.example. 5M IN A 10.0.13.2 +a-maximum-rrset.example. 5M IN A 10.0.13.3 +a-maximum-rrset.example. 5M IN A 10.0.13.4 +a-maximum-rrset.example. 5M IN A 10.0.13.5 +a-maximum-rrset.example. 5M IN A 10.0.13.6 +a-maximum-rrset.example. 5M IN A 10.0.13.7 +a-maximum-rrset.example. 5M IN A 10.0.13.8 +a-maximum-rrset.example. 5M IN A 10.0.13.9 +a-maximum-rrset.example. 5M IN A 10.0.13.10 +a-maximum-rrset.example. 5M IN A 10.0.13.11 +a-maximum-rrset.example. 5M IN A 10.0.13.12 +a-maximum-rrset.example. 5M IN A 10.0.13.13 +a-maximum-rrset.example. 5M IN A 10.0.13.14 +a-maximum-rrset.example. 5M IN A 10.0.13.15 +a-maximum-rrset.example. 5M IN A 10.0.13.16 +a-maximum-rrset.example. 5M IN A 10.0.13.17 +a-maximum-rrset.example. 5M IN A 10.0.13.18 +a-maximum-rrset.example. 5M IN A 10.0.13.19 +a-maximum-rrset.example. 5M IN A 10.0.13.20 +a-maximum-rrset.example. 5M IN A 10.0.13.21 +a-maximum-rrset.example. 5M IN A 10.0.13.22 +a-maximum-rrset.example. 5M IN A 10.0.13.23 +a-maximum-rrset.example. 5M IN A 10.0.13.24 +a-maximum-rrset.example. 5M IN A 10.0.13.25 +a-maximum-rrset.example. 5M IN A 10.0.13.26 +a-maximum-rrset.example. 5M IN A 10.0.13.27 +a-maximum-rrset.example. 5M IN A 10.0.13.28 +a-maximum-rrset.example. 5M IN A 10.0.13.29 +a-maximum-rrset.example. 5M IN A 10.0.13.30 +a-maximum-rrset.example. 5M IN A 10.0.13.31 +a-maximum-rrset.example. 5M IN A 10.0.13.32 +a-maximum-rrset.example. 5M IN A 10.0.13.33 +a-maximum-rrset.example. 5M IN A 10.0.13.34 +a-maximum-rrset.example. 5M IN A 10.0.13.35 +a-maximum-rrset.example. 5M IN A 10.0.13.36 +a-maximum-rrset.example. 5M IN A 10.0.13.37 +a-maximum-rrset.example. 5M IN A 10.0.13.38 +a-maximum-rrset.example. 5M IN A 10.0.13.39 +a-maximum-rrset.example. 5M IN A 10.0.13.40 +a-maximum-rrset.example. 5M IN A 10.0.13.41 +a-maximum-rrset.example. 5M IN A 10.0.13.42 +a-maximum-rrset.example. 5M IN A 10.0.13.43 +a-maximum-rrset.example. 5M IN A 10.0.13.44 +a-maximum-rrset.example. 5M IN A 10.0.13.45 +a-maximum-rrset.example. 5M IN A 10.0.13.46 +a-maximum-rrset.example. 5M IN A 10.0.13.47 +a-maximum-rrset.example. 5M IN A 10.0.13.48 +a-maximum-rrset.example. 5M IN A 10.0.13.49 +a-maximum-rrset.example. 5M IN A 10.0.13.50 +a-maximum-rrset.example. 5M IN A 10.0.13.51 +a-maximum-rrset.example. 5M IN A 10.0.13.52 +a-maximum-rrset.example. 5M IN A 10.0.13.53 +a-maximum-rrset.example. 5M IN A 10.0.13.54 +a-maximum-rrset.example. 5M IN A 10.0.13.55 +a-maximum-rrset.example. 5M IN A 10.0.13.56 +a-maximum-rrset.example. 5M IN A 10.0.13.57 +a-maximum-rrset.example. 5M IN A 10.0.13.58 +a-maximum-rrset.example. 5M IN A 10.0.13.59 +a-maximum-rrset.example. 5M IN A 10.0.13.60 +a-maximum-rrset.example. 5M IN A 10.0.13.61 +a-maximum-rrset.example. 5M IN A 10.0.13.62 +a-maximum-rrset.example. 5M IN A 10.0.13.63 +a-maximum-rrset.example. 5M IN A 10.0.13.64 +a-maximum-rrset.example. 5M IN A 10.0.13.65 +a-maximum-rrset.example. 5M IN A 10.0.13.66 +a-maximum-rrset.example. 5M IN A 10.0.13.67 +a-maximum-rrset.example. 5M IN A 10.0.13.68 +a-maximum-rrset.example. 5M IN A 10.0.13.69 +a-maximum-rrset.example. 5M IN A 10.0.13.70 +a-maximum-rrset.example. 5M IN A 10.0.13.71 +a-maximum-rrset.example. 5M IN A 10.0.13.72 +a-maximum-rrset.example. 5M IN A 10.0.13.73 +a-maximum-rrset.example. 5M IN A 10.0.13.74 +a-maximum-rrset.example. 5M IN A 10.0.13.75 +a-maximum-rrset.example. 5M IN A 10.0.13.76 +a-maximum-rrset.example. 5M IN A 10.0.13.77 +a-maximum-rrset.example. 5M IN A 10.0.13.78 +a-maximum-rrset.example. 5M IN A 10.0.13.79 +a-maximum-rrset.example. 5M IN A 10.0.13.80 +a-maximum-rrset.example. 5M IN A 10.0.13.81 +a-maximum-rrset.example. 5M IN A 10.0.13.82 +a-maximum-rrset.example. 5M IN A 10.0.13.83 +a-maximum-rrset.example. 5M IN A 10.0.13.84 +a-maximum-rrset.example. 5M IN A 10.0.13.85 +a-maximum-rrset.example. 5M IN A 10.0.13.86 +a-maximum-rrset.example. 5M IN A 10.0.13.87 +a-maximum-rrset.example. 5M IN A 10.0.13.88 +a-maximum-rrset.example. 5M IN A 10.0.13.89 +a-maximum-rrset.example. 5M IN A 10.0.13.90 +a-maximum-rrset.example. 5M IN A 10.0.13.91 +a-maximum-rrset.example. 5M IN A 10.0.13.92 +a-maximum-rrset.example. 5M IN A 10.0.13.93 +a-maximum-rrset.example. 5M IN A 10.0.13.94 +a-maximum-rrset.example. 5M IN A 10.0.13.95 +a-maximum-rrset.example. 5M IN A 10.0.13.96 +a-maximum-rrset.example. 5M IN A 10.0.13.97 +a-maximum-rrset.example. 5M IN A 10.0.13.98 +a-maximum-rrset.example. 5M IN A 10.0.13.99 +a-maximum-rrset.example. 5M IN A 10.0.13.100 +a-maximum-rrset.example. 5M IN A 10.0.13.101 +a-maximum-rrset.example. 5M IN A 10.0.13.102 +a-maximum-rrset.example. 5M IN A 10.0.13.103 +a-maximum-rrset.example. 5M IN A 10.0.13.104 +a-maximum-rrset.example. 5M IN A 10.0.13.105 +a-maximum-rrset.example. 5M IN A 10.0.13.106 +a-maximum-rrset.example. 5M IN A 10.0.13.107 +a-maximum-rrset.example. 5M IN A 10.0.13.108 +a-maximum-rrset.example. 5M IN A 10.0.13.109 +a-maximum-rrset.example. 5M IN A 10.0.13.110 +a-maximum-rrset.example. 5M IN A 10.0.13.111 +a-maximum-rrset.example. 5M IN A 10.0.13.112 +a-maximum-rrset.example. 5M IN A 10.0.13.113 +a-maximum-rrset.example. 5M IN A 10.0.13.114 +a-maximum-rrset.example. 5M IN A 10.0.13.115 +a-maximum-rrset.example. 5M IN A 10.0.13.116 +a-maximum-rrset.example. 5M IN A 10.0.13.117 +a-maximum-rrset.example. 5M IN A 10.0.13.118 +a-maximum-rrset.example. 5M IN A 10.0.13.119 +a-maximum-rrset.example. 5M IN A 10.0.13.120 +a-maximum-rrset.example. 5M IN A 10.0.13.121 +a-maximum-rrset.example. 5M IN A 10.0.13.122 +a-maximum-rrset.example. 5M IN A 10.0.13.123 +a-maximum-rrset.example. 5M IN A 10.0.13.124 +a-maximum-rrset.example. 5M IN A 10.0.13.125 +a-maximum-rrset.example. 5M IN A 10.0.13.126 +a-maximum-rrset.example. 5M IN A 10.0.13.127 +a-maximum-rrset.example. 5M IN A 10.0.13.128 +a-maximum-rrset.example. 5M IN A 10.0.13.129 +a-maximum-rrset.example. 5M IN A 10.0.13.130 +a-maximum-rrset.example. 5M IN A 10.0.13.131 +a-maximum-rrset.example. 5M IN A 10.0.13.132 +a-maximum-rrset.example. 5M IN A 10.0.13.133 +a-maximum-rrset.example. 5M IN A 10.0.13.134 +a-maximum-rrset.example. 5M IN A 10.0.13.135 +a-maximum-rrset.example. 5M IN A 10.0.13.136 +a-maximum-rrset.example. 5M IN A 10.0.13.137 +a-maximum-rrset.example. 5M IN A 10.0.13.138 +a-maximum-rrset.example. 5M IN A 10.0.13.139 +a-maximum-rrset.example. 5M IN A 10.0.13.140 +a-maximum-rrset.example. 5M IN A 10.0.13.141 +a-maximum-rrset.example. 5M IN A 10.0.13.142 +a-maximum-rrset.example. 5M IN A 10.0.13.143 +a-maximum-rrset.example. 5M IN A 10.0.13.144 +a-maximum-rrset.example. 5M IN A 10.0.13.145 +a-maximum-rrset.example. 5M IN A 10.0.13.146 +a-maximum-rrset.example. 5M IN A 10.0.13.147 +a-maximum-rrset.example. 5M IN A 10.0.13.148 +a-maximum-rrset.example. 5M IN A 10.0.13.149 +a-maximum-rrset.example. 5M IN A 10.0.13.150 +a-maximum-rrset.example. 5M IN A 10.0.13.151 +a-maximum-rrset.example. 5M IN A 10.0.13.152 +a-maximum-rrset.example. 5M IN A 10.0.13.153 +a-maximum-rrset.example. 5M IN A 10.0.13.154 +a-maximum-rrset.example. 5M IN A 10.0.13.155 +a-maximum-rrset.example. 5M IN A 10.0.13.156 +a-maximum-rrset.example. 5M IN A 10.0.13.157 +a-maximum-rrset.example. 5M IN A 10.0.13.158 +a-maximum-rrset.example. 5M IN A 10.0.13.159 +a-maximum-rrset.example. 5M IN A 10.0.13.160 +a-maximum-rrset.example. 5M IN A 10.0.13.161 +a-maximum-rrset.example. 5M IN A 10.0.13.162 +a-maximum-rrset.example. 5M IN A 10.0.13.163 +a-maximum-rrset.example. 5M IN A 10.0.13.164 +a-maximum-rrset.example. 5M IN A 10.0.13.165 +a-maximum-rrset.example. 5M IN A 10.0.13.166 +a-maximum-rrset.example. 5M IN A 10.0.13.167 +a-maximum-rrset.example. 5M IN A 10.0.13.168 +a-maximum-rrset.example. 5M IN A 10.0.13.169 +a-maximum-rrset.example. 5M IN A 10.0.13.170 +a-maximum-rrset.example. 5M IN A 10.0.13.171 +a-maximum-rrset.example. 5M IN A 10.0.13.172 +a-maximum-rrset.example. 5M IN A 10.0.13.173 +a-maximum-rrset.example. 5M IN A 10.0.13.174 +a-maximum-rrset.example. 5M IN A 10.0.13.175 +a-maximum-rrset.example. 5M IN A 10.0.13.176 +a-maximum-rrset.example. 5M IN A 10.0.13.177 +a-maximum-rrset.example. 5M IN A 10.0.13.178 +a-maximum-rrset.example. 5M IN A 10.0.13.179 +a-maximum-rrset.example. 5M IN A 10.0.13.180 +a-maximum-rrset.example. 5M IN A 10.0.13.181 +a-maximum-rrset.example. 5M IN A 10.0.13.182 +a-maximum-rrset.example. 5M IN A 10.0.13.183 +a-maximum-rrset.example. 5M IN A 10.0.13.184 +a-maximum-rrset.example. 5M IN A 10.0.13.185 +a-maximum-rrset.example. 5M IN A 10.0.13.186 +a-maximum-rrset.example. 5M IN A 10.0.13.187 +a-maximum-rrset.example. 5M IN A 10.0.13.188 +a-maximum-rrset.example. 5M IN A 10.0.13.189 +a-maximum-rrset.example. 5M IN A 10.0.13.190 +a-maximum-rrset.example. 5M IN A 10.0.13.191 +a-maximum-rrset.example. 5M IN A 10.0.13.192 +a-maximum-rrset.example. 5M IN A 10.0.13.193 +a-maximum-rrset.example. 5M IN A 10.0.13.194 +a-maximum-rrset.example. 5M IN A 10.0.13.195 +a-maximum-rrset.example. 5M IN A 10.0.13.196 +a-maximum-rrset.example. 5M IN A 10.0.13.197 +a-maximum-rrset.example. 5M IN A 10.0.13.198 +a-maximum-rrset.example. 5M IN A 10.0.13.199 +a-maximum-rrset.example. 5M IN A 10.0.13.200 +a-maximum-rrset.example. 5M IN A 10.0.13.201 +a-maximum-rrset.example. 5M IN A 10.0.13.202 +a-maximum-rrset.example. 5M IN A 10.0.13.203 +a-maximum-rrset.example. 5M IN A 10.0.13.204 +a-maximum-rrset.example. 5M IN A 10.0.13.205 +a-maximum-rrset.example. 5M IN A 10.0.13.206 +a-maximum-rrset.example. 5M IN A 10.0.13.207 +a-maximum-rrset.example. 5M IN A 10.0.13.208 +a-maximum-rrset.example. 5M IN A 10.0.13.209 +a-maximum-rrset.example. 5M IN A 10.0.13.210 +a-maximum-rrset.example. 5M IN A 10.0.13.211 +a-maximum-rrset.example. 5M IN A 10.0.13.212 +a-maximum-rrset.example. 5M IN A 10.0.13.213 +a-maximum-rrset.example. 5M IN A 10.0.13.214 +a-maximum-rrset.example. 5M IN A 10.0.13.215 +a-maximum-rrset.example. 5M IN A 10.0.13.216 +a-maximum-rrset.example. 5M IN A 10.0.13.217 +a-maximum-rrset.example. 5M IN A 10.0.13.218 +a-maximum-rrset.example. 5M IN A 10.0.13.219 +a-maximum-rrset.example. 5M IN A 10.0.13.220 +a-maximum-rrset.example. 5M IN A 10.0.13.221 +a-maximum-rrset.example. 5M IN A 10.0.13.222 +a-maximum-rrset.example. 5M IN A 10.0.13.223 +a-maximum-rrset.example. 5M IN A 10.0.13.224 +a-maximum-rrset.example. 5M IN A 10.0.13.225 +a-maximum-rrset.example. 5M IN A 10.0.13.226 +a-maximum-rrset.example. 5M IN A 10.0.13.227 +a-maximum-rrset.example. 5M IN A 10.0.13.228 +a-maximum-rrset.example. 5M IN A 10.0.13.229 +a-maximum-rrset.example. 5M IN A 10.0.13.230 +a-maximum-rrset.example. 5M IN A 10.0.13.231 +a-maximum-rrset.example. 5M IN A 10.0.13.232 +a-maximum-rrset.example. 5M IN A 10.0.13.233 +a-maximum-rrset.example. 5M IN A 10.0.13.234 +a-maximum-rrset.example. 5M IN A 10.0.13.235 +a-maximum-rrset.example. 5M IN A 10.0.13.236 +a-maximum-rrset.example. 5M IN A 10.0.13.237 +a-maximum-rrset.example. 5M IN A 10.0.13.238 +a-maximum-rrset.example. 5M IN A 10.0.13.239 +a-maximum-rrset.example. 5M IN A 10.0.13.240 +a-maximum-rrset.example. 5M IN A 10.0.13.241 +a-maximum-rrset.example. 5M IN A 10.0.13.242 +a-maximum-rrset.example. 5M IN A 10.0.13.243 +a-maximum-rrset.example. 5M IN A 10.0.13.244 +a-maximum-rrset.example. 5M IN A 10.0.13.245 +a-maximum-rrset.example. 5M IN A 10.0.13.246 +a-maximum-rrset.example. 5M IN A 10.0.13.247 +a-maximum-rrset.example. 5M IN A 10.0.13.248 +a-maximum-rrset.example. 5M IN A 10.0.13.249 +a-maximum-rrset.example. 5M IN A 10.0.13.250 +a-maximum-rrset.example. 5M IN A 10.0.13.251 +a-maximum-rrset.example. 5M IN A 10.0.13.252 +a-maximum-rrset.example. 5M IN A 10.0.13.253 +a-maximum-rrset.example. 5M IN A 10.0.13.254 +a-maximum-rrset.example. 5M IN A 10.0.13.255 +a-maximum-rrset.example. 5M IN A 10.0.14.0 +a-maximum-rrset.example. 5M IN A 10.0.14.1 +a-maximum-rrset.example. 5M IN A 10.0.14.2 +a-maximum-rrset.example. 5M IN A 10.0.14.3 +a-maximum-rrset.example. 5M IN A 10.0.14.4 +a-maximum-rrset.example. 5M IN A 10.0.14.5 +a-maximum-rrset.example. 5M IN A 10.0.14.6 +a-maximum-rrset.example. 5M IN A 10.0.14.7 +a-maximum-rrset.example. 5M IN A 10.0.14.8 +a-maximum-rrset.example. 5M IN A 10.0.14.9 +a-maximum-rrset.example. 5M IN A 10.0.14.10 +a-maximum-rrset.example. 5M IN A 10.0.14.11 +a-maximum-rrset.example. 5M IN A 10.0.14.12 +a-maximum-rrset.example. 5M IN A 10.0.14.13 +a-maximum-rrset.example. 5M IN A 10.0.14.14 +a-maximum-rrset.example. 5M IN A 10.0.14.15 +a-maximum-rrset.example. 5M IN A 10.0.14.16 +a-maximum-rrset.example. 5M IN A 10.0.14.17 +a-maximum-rrset.example. 5M IN A 10.0.14.18 +a-maximum-rrset.example. 5M IN A 10.0.14.19 +a-maximum-rrset.example. 5M IN A 10.0.14.20 +a-maximum-rrset.example. 5M IN A 10.0.14.21 +a-maximum-rrset.example. 5M IN A 10.0.14.22 +a-maximum-rrset.example. 5M IN A 10.0.14.23 +a-maximum-rrset.example. 5M IN A 10.0.14.24 +a-maximum-rrset.example. 5M IN A 10.0.14.25 +a-maximum-rrset.example. 5M IN A 10.0.14.26 +a-maximum-rrset.example. 5M IN A 10.0.14.27 +a-maximum-rrset.example. 5M IN A 10.0.14.28 +a-maximum-rrset.example. 5M IN A 10.0.14.29 +a-maximum-rrset.example. 5M IN A 10.0.14.30 +a-maximum-rrset.example. 5M IN A 10.0.14.31 +a-maximum-rrset.example. 5M IN A 10.0.14.32 +a-maximum-rrset.example. 5M IN A 10.0.14.33 +a-maximum-rrset.example. 5M IN A 10.0.14.34 +a-maximum-rrset.example. 5M IN A 10.0.14.35 +a-maximum-rrset.example. 5M IN A 10.0.14.36 +a-maximum-rrset.example. 5M IN A 10.0.14.37 +a-maximum-rrset.example. 5M IN A 10.0.14.38 +a-maximum-rrset.example. 5M IN A 10.0.14.39 +a-maximum-rrset.example. 5M IN A 10.0.14.40 +a-maximum-rrset.example. 5M IN A 10.0.14.41 +a-maximum-rrset.example. 5M IN A 10.0.14.42 +a-maximum-rrset.example. 5M IN A 10.0.14.43 +a-maximum-rrset.example. 5M IN A 10.0.14.44 +a-maximum-rrset.example. 5M IN A 10.0.14.45 +a-maximum-rrset.example. 5M IN A 10.0.14.46 +a-maximum-rrset.example. 5M IN A 10.0.14.47 +a-maximum-rrset.example. 5M IN A 10.0.14.48 +a-maximum-rrset.example. 5M IN A 10.0.14.49 +a-maximum-rrset.example. 5M IN A 10.0.14.50 +a-maximum-rrset.example. 5M IN A 10.0.14.51 +a-maximum-rrset.example. 5M IN A 10.0.14.52 +a-maximum-rrset.example. 5M IN A 10.0.14.53 +a-maximum-rrset.example. 5M IN A 10.0.14.54 +a-maximum-rrset.example. 5M IN A 10.0.14.55 +a-maximum-rrset.example. 5M IN A 10.0.14.56 +a-maximum-rrset.example. 5M IN A 10.0.14.57 +a-maximum-rrset.example. 5M IN A 10.0.14.58 +a-maximum-rrset.example. 5M IN A 10.0.14.59 +a-maximum-rrset.example. 5M IN A 10.0.14.60 +a-maximum-rrset.example. 5M IN A 10.0.14.61 +a-maximum-rrset.example. 5M IN A 10.0.14.62 +a-maximum-rrset.example. 5M IN A 10.0.14.63 +a-maximum-rrset.example. 5M IN A 10.0.14.64 +a-maximum-rrset.example. 5M IN A 10.0.14.65 +a-maximum-rrset.example. 5M IN A 10.0.14.66 +a-maximum-rrset.example. 5M IN A 10.0.14.67 +a-maximum-rrset.example. 5M IN A 10.0.14.68 +a-maximum-rrset.example. 5M IN A 10.0.14.69 +a-maximum-rrset.example. 5M IN A 10.0.14.70 +a-maximum-rrset.example. 5M IN A 10.0.14.71 +a-maximum-rrset.example. 5M IN A 10.0.14.72 +a-maximum-rrset.example. 5M IN A 10.0.14.73 +a-maximum-rrset.example. 5M IN A 10.0.14.74 +a-maximum-rrset.example. 5M IN A 10.0.14.75 +a-maximum-rrset.example. 5M IN A 10.0.14.76 +a-maximum-rrset.example. 5M IN A 10.0.14.77 +a-maximum-rrset.example. 5M IN A 10.0.14.78 +a-maximum-rrset.example. 5M IN A 10.0.14.79 +a-maximum-rrset.example. 5M IN A 10.0.14.80 +a-maximum-rrset.example. 5M IN A 10.0.14.81 +a-maximum-rrset.example. 5M IN A 10.0.14.82 +a-maximum-rrset.example. 5M IN A 10.0.14.83 +a-maximum-rrset.example. 5M IN A 10.0.14.84 +a-maximum-rrset.example. 5M IN A 10.0.14.85 +a-maximum-rrset.example. 5M IN A 10.0.14.86 +a-maximum-rrset.example. 5M IN A 10.0.14.87 +a-maximum-rrset.example. 5M IN A 10.0.14.88 +a-maximum-rrset.example. 5M IN A 10.0.14.89 +a-maximum-rrset.example. 5M IN A 10.0.14.90 +a-maximum-rrset.example. 5M IN A 10.0.14.91 +a-maximum-rrset.example. 5M IN A 10.0.14.92 +a-maximum-rrset.example. 5M IN A 10.0.14.93 +a-maximum-rrset.example. 5M IN A 10.0.14.94 +a-maximum-rrset.example. 5M IN A 10.0.14.95 +a-maximum-rrset.example. 5M IN A 10.0.14.96 +a-maximum-rrset.example. 5M IN A 10.0.14.97 +a-maximum-rrset.example. 5M IN A 10.0.14.98 +a-maximum-rrset.example. 5M IN A 10.0.14.99 +a-maximum-rrset.example. 5M IN A 10.0.14.100 +a-maximum-rrset.example. 5M IN A 10.0.14.101 +a-maximum-rrset.example. 5M IN A 10.0.14.102 +a-maximum-rrset.example. 5M IN A 10.0.14.103 +a-maximum-rrset.example. 5M IN A 10.0.14.104 +a-maximum-rrset.example. 5M IN A 10.0.14.105 +a-maximum-rrset.example. 5M IN A 10.0.14.106 +a-maximum-rrset.example. 5M IN A 10.0.14.107 +a-maximum-rrset.example. 5M IN A 10.0.14.108 +a-maximum-rrset.example. 5M IN A 10.0.14.109 +a-maximum-rrset.example. 5M IN A 10.0.14.110 +a-maximum-rrset.example. 5M IN A 10.0.14.111 +a-maximum-rrset.example. 5M IN A 10.0.14.112 +a-maximum-rrset.example. 5M IN A 10.0.14.113 +a-maximum-rrset.example. 5M IN A 10.0.14.114 +a-maximum-rrset.example. 5M IN A 10.0.14.115 +a-maximum-rrset.example. 5M IN A 10.0.14.116 +a-maximum-rrset.example. 5M IN A 10.0.14.117 +a-maximum-rrset.example. 5M IN A 10.0.14.118 +a-maximum-rrset.example. 5M IN A 10.0.14.119 +a-maximum-rrset.example. 5M IN A 10.0.14.120 +a-maximum-rrset.example. 5M IN A 10.0.14.121 +a-maximum-rrset.example. 5M IN A 10.0.14.122 +a-maximum-rrset.example. 5M IN A 10.0.14.123 +a-maximum-rrset.example. 5M IN A 10.0.14.124 +a-maximum-rrset.example. 5M IN A 10.0.14.125 +a-maximum-rrset.example. 5M IN A 10.0.14.126 +a-maximum-rrset.example. 5M IN A 10.0.14.127 +a-maximum-rrset.example. 5M IN A 10.0.14.128 +a-maximum-rrset.example. 5M IN A 10.0.14.129 +a-maximum-rrset.example. 5M IN A 10.0.14.130 +a-maximum-rrset.example. 5M IN A 10.0.14.131 +a-maximum-rrset.example. 5M IN A 10.0.14.132 +a-maximum-rrset.example. 5M IN A 10.0.14.133 +a-maximum-rrset.example. 5M IN A 10.0.14.134 +a-maximum-rrset.example. 5M IN A 10.0.14.135 +a-maximum-rrset.example. 5M IN A 10.0.14.136 +a-maximum-rrset.example. 5M IN A 10.0.14.137 +a-maximum-rrset.example. 5M IN A 10.0.14.138 +a-maximum-rrset.example. 5M IN A 10.0.14.139 +a-maximum-rrset.example. 5M IN A 10.0.14.140 +a-maximum-rrset.example. 5M IN A 10.0.14.141 +a-maximum-rrset.example. 5M IN A 10.0.14.142 +a-maximum-rrset.example. 5M IN A 10.0.14.143 +a-maximum-rrset.example. 5M IN A 10.0.14.144 +a-maximum-rrset.example. 5M IN A 10.0.14.145 +a-maximum-rrset.example. 5M IN A 10.0.14.146 +a-maximum-rrset.example. 5M IN A 10.0.14.147 +a-maximum-rrset.example. 5M IN A 10.0.14.148 +a-maximum-rrset.example. 5M IN A 10.0.14.149 +a-maximum-rrset.example. 5M IN A 10.0.14.150 +a-maximum-rrset.example. 5M IN A 10.0.14.151 +a-maximum-rrset.example. 5M IN A 10.0.14.152 +a-maximum-rrset.example. 5M IN A 10.0.14.153 +a-maximum-rrset.example. 5M IN A 10.0.14.154 +a-maximum-rrset.example. 5M IN A 10.0.14.155 +a-maximum-rrset.example. 5M IN A 10.0.14.156 +a-maximum-rrset.example. 5M IN A 10.0.14.157 +a-maximum-rrset.example. 5M IN A 10.0.14.158 +a-maximum-rrset.example. 5M IN A 10.0.14.159 +a-maximum-rrset.example. 5M IN A 10.0.14.160 +a-maximum-rrset.example. 5M IN A 10.0.14.161 +a-maximum-rrset.example. 5M IN A 10.0.14.162 +a-maximum-rrset.example. 5M IN A 10.0.14.163 +a-maximum-rrset.example. 5M IN A 10.0.14.164 +a-maximum-rrset.example. 5M IN A 10.0.14.165 +a-maximum-rrset.example. 5M IN A 10.0.14.166 +a-maximum-rrset.example. 5M IN A 10.0.14.167 +a-maximum-rrset.example. 5M IN A 10.0.14.168 +a-maximum-rrset.example. 5M IN A 10.0.14.169 +a-maximum-rrset.example. 5M IN A 10.0.14.170 +a-maximum-rrset.example. 5M IN A 10.0.14.171 +a-maximum-rrset.example. 5M IN A 10.0.14.172 +a-maximum-rrset.example. 5M IN A 10.0.14.173 +a-maximum-rrset.example. 5M IN A 10.0.14.174 +a-maximum-rrset.example. 5M IN A 10.0.14.175 +a-maximum-rrset.example. 5M IN A 10.0.14.176 +a-maximum-rrset.example. 5M IN A 10.0.14.177 +a-maximum-rrset.example. 5M IN A 10.0.14.178 +a-maximum-rrset.example. 5M IN A 10.0.14.179 +a-maximum-rrset.example. 5M IN A 10.0.14.180 +a-maximum-rrset.example. 5M IN A 10.0.14.181 +a-maximum-rrset.example. 5M IN A 10.0.14.182 +a-maximum-rrset.example. 5M IN A 10.0.14.183 +a-maximum-rrset.example. 5M IN A 10.0.14.184 +a-maximum-rrset.example. 5M IN A 10.0.14.185 +a-maximum-rrset.example. 5M IN A 10.0.14.186 +a-maximum-rrset.example. 5M IN A 10.0.14.187 +a-maximum-rrset.example. 5M IN A 10.0.14.188 +a-maximum-rrset.example. 5M IN A 10.0.14.189 +a-maximum-rrset.example. 5M IN A 10.0.14.190 +a-maximum-rrset.example. 5M IN A 10.0.14.191 +a-maximum-rrset.example. 5M IN A 10.0.14.192 +a-maximum-rrset.example. 5M IN A 10.0.14.193 +a-maximum-rrset.example. 5M IN A 10.0.14.194 +a-maximum-rrset.example. 5M IN A 10.0.14.195 +a-maximum-rrset.example. 5M IN A 10.0.14.196 +a-maximum-rrset.example. 5M IN A 10.0.14.197 +a-maximum-rrset.example. 5M IN A 10.0.14.198 +a-maximum-rrset.example. 5M IN A 10.0.14.199 +a-maximum-rrset.example. 5M IN A 10.0.14.200 +a-maximum-rrset.example. 5M IN A 10.0.14.201 +a-maximum-rrset.example. 5M IN A 10.0.14.202 +a-maximum-rrset.example. 5M IN A 10.0.14.203 +a-maximum-rrset.example. 5M IN A 10.0.14.204 +a-maximum-rrset.example. 5M IN A 10.0.14.205 +a-maximum-rrset.example. 5M IN A 10.0.14.206 +a-maximum-rrset.example. 5M IN A 10.0.14.207 +a-maximum-rrset.example. 5M IN A 10.0.14.208 +a-maximum-rrset.example. 5M IN A 10.0.14.209 +a-maximum-rrset.example. 5M IN A 10.0.14.210 +a-maximum-rrset.example. 5M IN A 10.0.14.211 +a-maximum-rrset.example. 5M IN A 10.0.14.212 +a-maximum-rrset.example. 5M IN A 10.0.14.213 +a-maximum-rrset.example. 5M IN A 10.0.14.214 +a-maximum-rrset.example. 5M IN A 10.0.14.215 +a-maximum-rrset.example. 5M IN A 10.0.14.216 +a-maximum-rrset.example. 5M IN A 10.0.14.217 +a-maximum-rrset.example. 5M IN A 10.0.14.218 +a-maximum-rrset.example. 5M IN A 10.0.14.219 +a-maximum-rrset.example. 5M IN A 10.0.14.220 +a-maximum-rrset.example. 5M IN A 10.0.14.221 +a-maximum-rrset.example. 5M IN A 10.0.14.222 +a-maximum-rrset.example. 5M IN A 10.0.14.223 +a-maximum-rrset.example. 5M IN A 10.0.14.224 +a-maximum-rrset.example. 5M IN A 10.0.14.225 +a-maximum-rrset.example. 5M IN A 10.0.14.226 +a-maximum-rrset.example. 5M IN A 10.0.14.227 +a-maximum-rrset.example. 5M IN A 10.0.14.228 +a-maximum-rrset.example. 5M IN A 10.0.14.229 +a-maximum-rrset.example. 5M IN A 10.0.14.230 +a-maximum-rrset.example. 5M IN A 10.0.14.231 +a-maximum-rrset.example. 5M IN A 10.0.14.232 +a-maximum-rrset.example. 5M IN A 10.0.14.233 +a-maximum-rrset.example. 5M IN A 10.0.14.234 +a-maximum-rrset.example. 5M IN A 10.0.14.235 +a-maximum-rrset.example. 5M IN A 10.0.14.236 +a-maximum-rrset.example. 5M IN A 10.0.14.237 +a-maximum-rrset.example. 5M IN A 10.0.14.238 +a-maximum-rrset.example. 5M IN A 10.0.14.239 +a-maximum-rrset.example. 5M IN A 10.0.14.240 +a-maximum-rrset.example. 5M IN A 10.0.14.241 +a-maximum-rrset.example. 5M IN A 10.0.14.242 +a-maximum-rrset.example. 5M IN A 10.0.14.243 +a-maximum-rrset.example. 5M IN A 10.0.14.244 +a-maximum-rrset.example. 5M IN A 10.0.14.245 +a-maximum-rrset.example. 5M IN A 10.0.14.246 +a-maximum-rrset.example. 5M IN A 10.0.14.247 +a-maximum-rrset.example. 5M IN A 10.0.14.248 +a-maximum-rrset.example. 5M IN A 10.0.14.249 +a-maximum-rrset.example. 5M IN A 10.0.14.250 +a-maximum-rrset.example. 5M IN A 10.0.14.251 +a-maximum-rrset.example. 5M IN A 10.0.14.252 +a-maximum-rrset.example. 5M IN A 10.0.14.253 +a-maximum-rrset.example. 5M IN A 10.0.14.254 +a-maximum-rrset.example. 5M IN A 10.0.14.255 +a-maximum-rrset.example. 5M IN A 10.0.15.0 +a-maximum-rrset.example. 5M IN A 10.0.15.1 +a-maximum-rrset.example. 5M IN A 10.0.15.2 +a-maximum-rrset.example. 5M IN A 10.0.15.3 +a-maximum-rrset.example. 5M IN A 10.0.15.4 +a-maximum-rrset.example. 5M IN A 10.0.15.5 +a-maximum-rrset.example. 5M IN A 10.0.15.6 +a-maximum-rrset.example. 5M IN A 10.0.15.7 +a-maximum-rrset.example. 5M IN A 10.0.15.8 +a-maximum-rrset.example. 5M IN A 10.0.15.9 +a-maximum-rrset.example. 5M IN A 10.0.15.10 +a-maximum-rrset.example. 5M IN A 10.0.15.11 +a-maximum-rrset.example. 5M IN A 10.0.15.12 +a-maximum-rrset.example. 5M IN A 10.0.15.13 +a-maximum-rrset.example. 5M IN A 10.0.15.14 +a-maximum-rrset.example. 5M IN A 10.0.15.15 +a-maximum-rrset.example. 5M IN A 10.0.15.16 +a-maximum-rrset.example. 5M IN A 10.0.15.17 +a-maximum-rrset.example. 5M IN A 10.0.15.18 +a-maximum-rrset.example. 5M IN A 10.0.15.19 +a-maximum-rrset.example. 5M IN A 10.0.15.20 +a-maximum-rrset.example. 5M IN A 10.0.15.21 +a-maximum-rrset.example. 5M IN A 10.0.15.22 +a-maximum-rrset.example. 5M IN A 10.0.15.23 +a-maximum-rrset.example. 5M IN A 10.0.15.24 +a-maximum-rrset.example. 5M IN A 10.0.15.25 +a-maximum-rrset.example. 5M IN A 10.0.15.26 +a-maximum-rrset.example. 5M IN A 10.0.15.27 +a-maximum-rrset.example. 5M IN A 10.0.15.28 +a-maximum-rrset.example. 5M IN A 10.0.15.29 +a-maximum-rrset.example. 5M IN A 10.0.15.30 +a-maximum-rrset.example. 5M IN A 10.0.15.31 +a-maximum-rrset.example. 5M IN A 10.0.15.32 +a-maximum-rrset.example. 5M IN A 10.0.15.33 +a-maximum-rrset.example. 5M IN A 10.0.15.34 +a-maximum-rrset.example. 5M IN A 10.0.15.35 +a-maximum-rrset.example. 5M IN A 10.0.15.36 +a-maximum-rrset.example. 5M IN A 10.0.15.37 +a-maximum-rrset.example. 5M IN A 10.0.15.38 +a-maximum-rrset.example. 5M IN A 10.0.15.39 +a-maximum-rrset.example. 5M IN A 10.0.15.40 +a-maximum-rrset.example. 5M IN A 10.0.15.41 +a-maximum-rrset.example. 5M IN A 10.0.15.42 +a-maximum-rrset.example. 5M IN A 10.0.15.43 +a-maximum-rrset.example. 5M IN A 10.0.15.44 +a-maximum-rrset.example. 5M IN A 10.0.15.45 +a-maximum-rrset.example. 5M IN A 10.0.15.46 +a-maximum-rrset.example. 5M IN A 10.0.15.47 +a-maximum-rrset.example. 5M IN A 10.0.15.48 +a-maximum-rrset.example. 5M IN A 10.0.15.49 +a-maximum-rrset.example. 5M IN A 10.0.15.50 +a-maximum-rrset.example. 5M IN A 10.0.15.51 +a-maximum-rrset.example. 5M IN A 10.0.15.52 +a-maximum-rrset.example. 5M IN A 10.0.15.53 +a-maximum-rrset.example. 5M IN A 10.0.15.54 +a-maximum-rrset.example. 5M IN A 10.0.15.55 +a-maximum-rrset.example. 5M IN A 10.0.15.56 +a-maximum-rrset.example. 5M IN A 10.0.15.57 +a-maximum-rrset.example. 5M IN A 10.0.15.58 +a-maximum-rrset.example. 5M IN A 10.0.15.59 +a-maximum-rrset.example. 5M IN A 10.0.15.60 +a-maximum-rrset.example. 5M IN A 10.0.15.61 +a-maximum-rrset.example. 5M IN A 10.0.15.62 +a-maximum-rrset.example. 5M IN A 10.0.15.63 +a-maximum-rrset.example. 5M IN A 10.0.15.64 +a-maximum-rrset.example. 5M IN A 10.0.15.65 +a-maximum-rrset.example. 5M IN A 10.0.15.66 +a-maximum-rrset.example. 5M IN A 10.0.15.67 +a-maximum-rrset.example. 5M IN A 10.0.15.68 +a-maximum-rrset.example. 5M IN A 10.0.15.69 +a-maximum-rrset.example. 5M IN A 10.0.15.70 +a-maximum-rrset.example. 5M IN A 10.0.15.71 +a-maximum-rrset.example. 5M IN A 10.0.15.72 +a-maximum-rrset.example. 5M IN A 10.0.15.73 +a-maximum-rrset.example. 5M IN A 10.0.15.74 +a-maximum-rrset.example. 5M IN A 10.0.15.75 +a-maximum-rrset.example. 5M IN A 10.0.15.76 +a-maximum-rrset.example. 5M IN A 10.0.15.77 +a-maximum-rrset.example. 5M IN A 10.0.15.78 +a-maximum-rrset.example. 5M IN A 10.0.15.79 +a-maximum-rrset.example. 5M IN A 10.0.15.80 +a-maximum-rrset.example. 5M IN A 10.0.15.81 +a-maximum-rrset.example. 5M IN A 10.0.15.82 +a-maximum-rrset.example. 5M IN A 10.0.15.83 +a-maximum-rrset.example. 5M IN A 10.0.15.84 +a-maximum-rrset.example. 5M IN A 10.0.15.85 +a-maximum-rrset.example. 5M IN A 10.0.15.86 +a-maximum-rrset.example. 5M IN A 10.0.15.87 +a-maximum-rrset.example. 5M IN A 10.0.15.88 +a-maximum-rrset.example. 5M IN A 10.0.15.89 +a-maximum-rrset.example. 5M IN A 10.0.15.90 +a-maximum-rrset.example. 5M IN A 10.0.15.91 +a-maximum-rrset.example. 5M IN A 10.0.15.92 +a-maximum-rrset.example. 5M IN A 10.0.15.93 +a-maximum-rrset.example. 5M IN A 10.0.15.94 +a-maximum-rrset.example. 5M IN A 10.0.15.95 +a-maximum-rrset.example. 5M IN A 10.0.15.96 +a-maximum-rrset.example. 5M IN A 10.0.15.97 +a-maximum-rrset.example. 5M IN A 10.0.15.98 +a-maximum-rrset.example. 5M IN A 10.0.15.99 +a-maximum-rrset.example. 5M IN A 10.0.15.100 +a-maximum-rrset.example. 5M IN A 10.0.15.101 +a-maximum-rrset.example. 5M IN A 10.0.15.102 +a-maximum-rrset.example. 5M IN A 10.0.15.103 +a-maximum-rrset.example. 5M IN A 10.0.15.104 +a-maximum-rrset.example. 5M IN A 10.0.15.105 +a-maximum-rrset.example. 5M IN A 10.0.15.106 +a-maximum-rrset.example. 5M IN A 10.0.15.107 +a-maximum-rrset.example. 5M IN A 10.0.15.108 +a-maximum-rrset.example. 5M IN A 10.0.15.109 +a-maximum-rrset.example. 5M IN A 10.0.15.110 +a-maximum-rrset.example. 5M IN A 10.0.15.111 +a-maximum-rrset.example. 5M IN A 10.0.15.112 +a-maximum-rrset.example. 5M IN A 10.0.15.113 +a-maximum-rrset.example. 5M IN A 10.0.15.114 +a-maximum-rrset.example. 5M IN A 10.0.15.115 +a-maximum-rrset.example. 5M IN A 10.0.15.116 +a-maximum-rrset.example. 5M IN A 10.0.15.117 +a-maximum-rrset.example. 5M IN A 10.0.15.118 +a-maximum-rrset.example. 5M IN A 10.0.15.119 +a-maximum-rrset.example. 5M IN A 10.0.15.120 +a-maximum-rrset.example. 5M IN A 10.0.15.121 +a-maximum-rrset.example. 5M IN A 10.0.15.122 +a-maximum-rrset.example. 5M IN A 10.0.15.123 +a-maximum-rrset.example. 5M IN A 10.0.15.124 +a-maximum-rrset.example. 5M IN A 10.0.15.125 +a-maximum-rrset.example. 5M IN A 10.0.15.126 +a-maximum-rrset.example. 5M IN A 10.0.15.127 +a-maximum-rrset.example. 5M IN A 10.0.15.128 +a-maximum-rrset.example. 5M IN A 10.0.15.129 +a-maximum-rrset.example. 5M IN A 10.0.15.130 +a-maximum-rrset.example. 5M IN A 10.0.15.131 +a-maximum-rrset.example. 5M IN A 10.0.15.132 +a-maximum-rrset.example. 5M IN A 10.0.15.133 +a-maximum-rrset.example. 5M IN A 10.0.15.134 +a-maximum-rrset.example. 5M IN A 10.0.15.135 +a-maximum-rrset.example. 5M IN A 10.0.15.136 +a-maximum-rrset.example. 5M IN A 10.0.15.137 +a-maximum-rrset.example. 5M IN A 10.0.15.138 +a-maximum-rrset.example. 5M IN A 10.0.15.139 +a-maximum-rrset.example. 5M IN A 10.0.15.140 +a-maximum-rrset.example. 5M IN A 10.0.15.141 +a-maximum-rrset.example. 5M IN A 10.0.15.142 +a-maximum-rrset.example. 5M IN A 10.0.15.143 +a-maximum-rrset.example. 5M IN A 10.0.15.144 +a-maximum-rrset.example. 5M IN A 10.0.15.145 +a-maximum-rrset.example. 5M IN A 10.0.15.146 +a-maximum-rrset.example. 5M IN A 10.0.15.147 +a-maximum-rrset.example. 5M IN A 10.0.15.148 +a-maximum-rrset.example. 5M IN A 10.0.15.149 +a-maximum-rrset.example. 5M IN A 10.0.15.150 +a-maximum-rrset.example. 5M IN A 10.0.15.151 +a-maximum-rrset.example. 5M IN A 10.0.15.152 +a-maximum-rrset.example. 5M IN A 10.0.15.153 +a-maximum-rrset.example. 5M IN A 10.0.15.154 +a-maximum-rrset.example. 5M IN A 10.0.15.155 +a-maximum-rrset.example. 5M IN A 10.0.15.156 +a-maximum-rrset.example. 5M IN A 10.0.15.157 +a-maximum-rrset.example. 5M IN A 10.0.15.158 +a-maximum-rrset.example. 5M IN A 10.0.15.159 +a-maximum-rrset.example. 5M IN A 10.1.0.0 +a-maximum-rrset.example. 5M IN A 10.1.0.1 +a-maximum-rrset.example. 5M IN A 10.1.0.2 +a-maximum-rrset.example. 5M IN A 10.1.0.3 +a-maximum-rrset.example. 5M IN A 10.1.0.4 +a-maximum-rrset.example. 5M IN A 10.1.0.5 +a-maximum-rrset.example. 5M IN A 10.1.0.6 +a-maximum-rrset.example. 5M IN A 10.1.0.7 +a-maximum-rrset.example. 5M IN A 10.1.0.8 +a-maximum-rrset.example. 5M IN A 10.1.0.9 +a-maximum-rrset.example. 5M IN A 10.1.0.10 +a-maximum-rrset.example. 5M IN A 10.1.0.11 +a-maximum-rrset.example. 5M IN A 10.1.0.12 +a-maximum-rrset.example. 5M IN A 10.1.0.13 +a-maximum-rrset.example. 5M IN A 10.1.0.14 +a-maximum-rrset.example. 5M IN A 10.1.0.15 +a-maximum-rrset.example. 5M IN A 10.1.0.16 +a-maximum-rrset.example. 5M IN A 10.1.0.17 +a-maximum-rrset.example. 5M IN A 10.1.0.18 +a-maximum-rrset.example. 5M IN A 10.1.0.19 +a-maximum-rrset.example. 5M IN A 10.1.0.20 +a-maximum-rrset.example. 5M IN A 10.1.0.21 +a-maximum-rrset.example. 5M IN A 10.1.0.22 +a-maximum-rrset.example. 5M IN A 10.1.0.23 +a-maximum-rrset.example. 5M IN A 10.1.0.24 +a-maximum-rrset.example. 5M IN A 10.1.0.25 +a-maximum-rrset.example. 5M IN A 10.1.0.26 +a-maximum-rrset.example. 5M IN A 10.1.0.27 +a-maximum-rrset.example. 5M IN A 10.1.0.28 +a-maximum-rrset.example. 5M IN A 10.1.0.29 +a-maximum-rrset.example. 5M IN A 10.1.0.30 +a-maximum-rrset.example. 5M IN A 10.1.0.31 +a-maximum-rrset.example. 5M IN A 10.1.0.32 +a-maximum-rrset.example. 5M IN A 10.1.0.33 +a-maximum-rrset.example. 5M IN A 10.1.0.34 +a-maximum-rrset.example. 5M IN A 10.1.0.35 +a-maximum-rrset.example. 5M IN A 10.1.0.36 +a-maximum-rrset.example. 5M IN A 10.1.0.37 +a-maximum-rrset.example. 5M IN A 10.1.0.38 +a-maximum-rrset.example. 5M IN A 10.1.0.39 +a-maximum-rrset.example. 5M IN A 10.1.0.40 +a-maximum-rrset.example. 5M IN A 10.1.0.41 +a-maximum-rrset.example. 5M IN A 10.1.0.42 +a-maximum-rrset.example. 5M IN A 10.1.0.43 +a-maximum-rrset.example. 5M IN A 10.1.0.44 +a-maximum-rrset.example. 5M IN A 10.1.0.45 +a-maximum-rrset.example. 5M IN A 10.1.0.46 +a-maximum-rrset.example. 5M IN A 10.1.0.47 +a-maximum-rrset.example. 5M IN A 10.1.0.48 +a-maximum-rrset.example. 5M IN A 10.1.0.49 +a-maximum-rrset.example. 5M IN A 10.1.0.50 +a-maximum-rrset.example. 5M IN A 10.1.0.51 +a-maximum-rrset.example. 5M IN A 10.1.0.52 +a-maximum-rrset.example. 5M IN A 10.1.0.53 +a-maximum-rrset.example. 5M IN A 10.1.0.54 +a-maximum-rrset.example. 5M IN A 10.1.0.55 +a-maximum-rrset.example. 5M IN A 10.1.0.56 +a-maximum-rrset.example. 5M IN A 10.1.0.57 +a-maximum-rrset.example. 5M IN A 10.1.0.58 +a-maximum-rrset.example. 5M IN A 10.1.0.59 +a-maximum-rrset.example. 5M IN A 10.1.0.60 +a-maximum-rrset.example. 5M IN A 10.1.0.61 +a-maximum-rrset.example. 5M IN A 10.1.0.62 +a-maximum-rrset.example. 5M IN A 10.1.0.63 +a-maximum-rrset.example. 5M IN A 10.1.0.64 +a-maximum-rrset.example. 5M IN A 10.1.0.65 +a-maximum-rrset.example. 5M IN A 10.1.0.66 +a-maximum-rrset.example. 5M IN A 10.1.0.67 +a-maximum-rrset.example. 5M IN A 10.1.0.68 +a-maximum-rrset.example. 5M IN A 10.1.0.69 +a-maximum-rrset.example. 5M IN A 10.1.0.70 +a-maximum-rrset.example. 5M IN A 10.1.0.71 +a-maximum-rrset.example. 5M IN A 10.1.0.72 +a-maximum-rrset.example. 5M IN A 10.1.0.73 +a-maximum-rrset.example. 5M IN A 10.1.0.74 +a-maximum-rrset.example. 5M IN A 10.1.0.75 +a-maximum-rrset.example. 5M IN A 10.1.0.76 +a-maximum-rrset.example. 5M IN A 10.1.0.77 +a-maximum-rrset.example. 5M IN A 10.1.0.78 +a-maximum-rrset.example. 5M IN A 10.1.0.79 +a-maximum-rrset.example. 5M IN A 10.1.0.80 +a-maximum-rrset.example. 5M IN A 10.1.0.81 +a-maximum-rrset.example. 5M IN A 10.1.0.82 +a-maximum-rrset.example. 5M IN A 10.1.0.83 +a-maximum-rrset.example. 5M IN A 10.1.0.84 +a-maximum-rrset.example. 5M IN A 10.1.0.85 +a-maximum-rrset.example. 5M IN A 10.1.0.86 +a-maximum-rrset.example. 5M IN A 10.1.0.87 +a-maximum-rrset.example. 5M IN A 10.1.0.88 +a-maximum-rrset.example. 5M IN A 10.1.0.89 +a-maximum-rrset.example. 5M IN A 10.1.0.90 + +;; AUTHORITY SECTION: +example. 5M IN NS ns1.example. + +;; ADDITIONAL SECTION: +ns1.example. 5M IN A 10.53.0.1 + +;; Total query time: 308 msec +;; FROM: draco to SERVER: 10.53.0.1 +;; WHEN: Fri Jun 23 12:58:22 2000 +;; MSG SIZE sent: 41 rcvd: 65535 + diff --git a/bin/tests/system/limits/ns1/example.db b/bin/tests/system/limits/ns1/example.db new file mode 100644 index 0000000..836b766 --- /dev/null +++ b/bin/tests/system/limits/ns1/example.db @@ -0,0 +1,19118 @@ +; 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. + +; $Id: example.db,v 1.10 2007/06/19 23:47:03 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA ns1.example. hostmaster.example. ( + 2000042795 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) +@ NS ns1.example. +ns1 A 10.53.0.1 +1000 A 10.0.0.0 + A 10.0.0.1 + A 10.0.0.2 + A 10.0.0.3 + A 10.0.0.4 + A 10.0.0.5 + A 10.0.0.6 + A 10.0.0.7 + A 10.0.0.8 + A 10.0.0.9 + A 10.0.0.10 + A 10.0.0.11 + A 10.0.0.12 + A 10.0.0.13 + A 10.0.0.14 + A 10.0.0.15 + A 10.0.0.16 + A 10.0.0.17 + A 10.0.0.18 + A 10.0.0.19 + A 10.0.0.20 + A 10.0.0.21 + A 10.0.0.22 + A 10.0.0.23 + A 10.0.0.24 + A 10.0.0.25 + A 10.0.0.26 + A 10.0.0.27 + A 10.0.0.28 + A 10.0.0.29 + A 10.0.0.30 + A 10.0.0.31 + A 10.0.0.32 + A 10.0.0.33 + A 10.0.0.34 + A 10.0.0.35 + A 10.0.0.36 + A 10.0.0.37 + A 10.0.0.38 + A 10.0.0.39 + A 10.0.0.40 + A 10.0.0.41 + A 10.0.0.42 + A 10.0.0.43 + A 10.0.0.44 + A 10.0.0.45 + A 10.0.0.46 + A 10.0.0.47 + A 10.0.0.48 + A 10.0.0.49 + A 10.0.0.50 + A 10.0.0.51 + A 10.0.0.52 + A 10.0.0.53 + A 10.0.0.54 + A 10.0.0.55 + A 10.0.0.56 + A 10.0.0.57 + A 10.0.0.58 + A 10.0.0.59 + A 10.0.0.60 + A 10.0.0.61 + A 10.0.0.62 + A 10.0.0.63 + A 10.0.0.64 + A 10.0.0.65 + A 10.0.0.66 + A 10.0.0.67 + A 10.0.0.68 + A 10.0.0.69 + A 10.0.0.70 + A 10.0.0.71 + A 10.0.0.72 + A 10.0.0.73 + A 10.0.0.74 + A 10.0.0.75 + A 10.0.0.76 + A 10.0.0.77 + A 10.0.0.78 + A 10.0.0.79 + A 10.0.0.80 + A 10.0.0.81 + A 10.0.0.82 + A 10.0.0.83 + A 10.0.0.84 + A 10.0.0.85 + A 10.0.0.86 + A 10.0.0.87 + A 10.0.0.88 + A 10.0.0.89 + A 10.0.0.90 + A 10.0.0.91 + A 10.0.0.92 + A 10.0.0.93 + A 10.0.0.94 + A 10.0.0.95 + A 10.0.0.96 + A 10.0.0.97 + A 10.0.0.98 + A 10.0.0.99 + A 10.0.0.100 + A 10.0.0.101 + A 10.0.0.102 + A 10.0.0.103 + A 10.0.0.104 + A 10.0.0.105 + A 10.0.0.106 + A 10.0.0.107 + A 10.0.0.108 + A 10.0.0.109 + A 10.0.0.110 + A 10.0.0.111 + A 10.0.0.112 + A 10.0.0.113 + A 10.0.0.114 + A 10.0.0.115 + A 10.0.0.116 + A 10.0.0.117 + A 10.0.0.118 + A 10.0.0.119 + A 10.0.0.120 + A 10.0.0.121 + A 10.0.0.122 + A 10.0.0.123 + A 10.0.0.124 + A 10.0.0.125 + A 10.0.0.126 + A 10.0.0.127 + A 10.0.0.128 + A 10.0.0.129 + A 10.0.0.130 + A 10.0.0.131 + A 10.0.0.132 + A 10.0.0.133 + A 10.0.0.134 + A 10.0.0.135 + A 10.0.0.136 + A 10.0.0.137 + A 10.0.0.138 + A 10.0.0.139 + A 10.0.0.140 + A 10.0.0.141 + A 10.0.0.142 + A 10.0.0.143 + A 10.0.0.144 + A 10.0.0.145 + A 10.0.0.146 + A 10.0.0.147 + A 10.0.0.148 + A 10.0.0.149 + A 10.0.0.150 + A 10.0.0.151 + A 10.0.0.152 + A 10.0.0.153 + A 10.0.0.154 + A 10.0.0.155 + A 10.0.0.156 + A 10.0.0.157 + A 10.0.0.158 + A 10.0.0.159 + A 10.0.0.160 + A 10.0.0.161 + A 10.0.0.162 + A 10.0.0.163 + A 10.0.0.164 + A 10.0.0.165 + A 10.0.0.166 + A 10.0.0.167 + A 10.0.0.168 + A 10.0.0.169 + A 10.0.0.170 + A 10.0.0.171 + A 10.0.0.172 + A 10.0.0.173 + A 10.0.0.174 + A 10.0.0.175 + A 10.0.0.176 + A 10.0.0.177 + A 10.0.0.178 + A 10.0.0.179 + A 10.0.0.180 + A 10.0.0.181 + A 10.0.0.182 + A 10.0.0.183 + A 10.0.0.184 + A 10.0.0.185 + A 10.0.0.186 + A 10.0.0.187 + A 10.0.0.188 + A 10.0.0.189 + A 10.0.0.190 + A 10.0.0.191 + A 10.0.0.192 + A 10.0.0.193 + A 10.0.0.194 + A 10.0.0.195 + A 10.0.0.196 + A 10.0.0.197 + A 10.0.0.198 + A 10.0.0.199 + A 10.0.0.200 + A 10.0.0.201 + A 10.0.0.202 + A 10.0.0.203 + A 10.0.0.204 + A 10.0.0.205 + A 10.0.0.206 + A 10.0.0.207 + A 10.0.0.208 + A 10.0.0.209 + A 10.0.0.210 + A 10.0.0.211 + A 10.0.0.212 + A 10.0.0.213 + A 10.0.0.214 + A 10.0.0.215 + A 10.0.0.216 + A 10.0.0.217 + A 10.0.0.218 + A 10.0.0.219 + A 10.0.0.220 + A 10.0.0.221 + A 10.0.0.222 + A 10.0.0.223 + A 10.0.0.224 + A 10.0.0.225 + A 10.0.0.226 + A 10.0.0.227 + A 10.0.0.228 + A 10.0.0.229 + A 10.0.0.230 + A 10.0.0.231 + A 10.0.0.232 + A 10.0.0.233 + A 10.0.0.234 + A 10.0.0.235 + A 10.0.0.236 + A 10.0.0.237 + A 10.0.0.238 + A 10.0.0.239 + A 10.0.0.240 + A 10.0.0.241 + A 10.0.0.242 + A 10.0.0.243 + A 10.0.0.244 + A 10.0.0.245 + A 10.0.0.246 + A 10.0.0.247 + A 10.0.0.248 + A 10.0.0.249 + A 10.0.0.250 + A 10.0.0.251 + A 10.0.0.252 + A 10.0.0.253 + A 10.0.0.254 + A 10.0.0.255 + A 10.0.1.0 + A 10.0.1.1 + A 10.0.1.2 + A 10.0.1.3 + A 10.0.1.4 + A 10.0.1.5 + A 10.0.1.6 + A 10.0.1.7 + A 10.0.1.8 + A 10.0.1.9 + A 10.0.1.10 + A 10.0.1.11 + A 10.0.1.12 + A 10.0.1.13 + A 10.0.1.14 + A 10.0.1.15 + A 10.0.1.16 + A 10.0.1.17 + A 10.0.1.18 + A 10.0.1.19 + A 10.0.1.20 + A 10.0.1.21 + A 10.0.1.22 + A 10.0.1.23 + A 10.0.1.24 + A 10.0.1.25 + A 10.0.1.26 + A 10.0.1.27 + A 10.0.1.28 + A 10.0.1.29 + A 10.0.1.30 + A 10.0.1.31 + A 10.0.1.32 + A 10.0.1.33 + A 10.0.1.34 + A 10.0.1.35 + A 10.0.1.36 + A 10.0.1.37 + A 10.0.1.38 + A 10.0.1.39 + A 10.0.1.40 + A 10.0.1.41 + A 10.0.1.42 + A 10.0.1.43 + A 10.0.1.44 + A 10.0.1.45 + A 10.0.1.46 + A 10.0.1.47 + A 10.0.1.48 + A 10.0.1.49 + A 10.0.1.50 + A 10.0.1.51 + A 10.0.1.52 + A 10.0.1.53 + A 10.0.1.54 + A 10.0.1.55 + A 10.0.1.56 + A 10.0.1.57 + A 10.0.1.58 + A 10.0.1.59 + A 10.0.1.60 + A 10.0.1.61 + A 10.0.1.62 + A 10.0.1.63 + A 10.0.1.64 + A 10.0.1.65 + A 10.0.1.66 + A 10.0.1.67 + A 10.0.1.68 + A 10.0.1.69 + A 10.0.1.70 + A 10.0.1.71 + A 10.0.1.72 + A 10.0.1.73 + A 10.0.1.74 + A 10.0.1.75 + A 10.0.1.76 + A 10.0.1.77 + A 10.0.1.78 + A 10.0.1.79 + A 10.0.1.80 + A 10.0.1.81 + A 10.0.1.82 + A 10.0.1.83 + A 10.0.1.84 + A 10.0.1.85 + A 10.0.1.86 + A 10.0.1.87 + A 10.0.1.88 + A 10.0.1.89 + A 10.0.1.90 + A 10.0.1.91 + A 10.0.1.92 + A 10.0.1.93 + A 10.0.1.94 + A 10.0.1.95 + A 10.0.1.96 + A 10.0.1.97 + A 10.0.1.98 + A 10.0.1.99 + A 10.0.1.100 + A 10.0.1.101 + A 10.0.1.102 + A 10.0.1.103 + A 10.0.1.104 + A 10.0.1.105 + A 10.0.1.106 + A 10.0.1.107 + A 10.0.1.108 + A 10.0.1.109 + A 10.0.1.110 + A 10.0.1.111 + A 10.0.1.112 + A 10.0.1.113 + A 10.0.1.114 + A 10.0.1.115 + A 10.0.1.116 + A 10.0.1.117 + A 10.0.1.118 + A 10.0.1.119 + A 10.0.1.120 + A 10.0.1.121 + A 10.0.1.122 + A 10.0.1.123 + A 10.0.1.124 + A 10.0.1.125 + A 10.0.1.126 + A 10.0.1.127 + A 10.0.1.128 + A 10.0.1.129 + A 10.0.1.130 + A 10.0.1.131 + A 10.0.1.132 + A 10.0.1.133 + A 10.0.1.134 + A 10.0.1.135 + A 10.0.1.136 + A 10.0.1.137 + A 10.0.1.138 + A 10.0.1.139 + A 10.0.1.140 + A 10.0.1.141 + A 10.0.1.142 + A 10.0.1.143 + A 10.0.1.144 + A 10.0.1.145 + A 10.0.1.146 + A 10.0.1.147 + A 10.0.1.148 + A 10.0.1.149 + A 10.0.1.150 + A 10.0.1.151 + A 10.0.1.152 + A 10.0.1.153 + A 10.0.1.154 + A 10.0.1.155 + A 10.0.1.156 + A 10.0.1.157 + A 10.0.1.158 + A 10.0.1.159 + A 10.0.1.160 + A 10.0.1.161 + A 10.0.1.162 + A 10.0.1.163 + A 10.0.1.164 + A 10.0.1.165 + A 10.0.1.166 + A 10.0.1.167 + A 10.0.1.168 + A 10.0.1.169 + A 10.0.1.170 + A 10.0.1.171 + A 10.0.1.172 + A 10.0.1.173 + A 10.0.1.174 + A 10.0.1.175 + A 10.0.1.176 + A 10.0.1.177 + A 10.0.1.178 + A 10.0.1.179 + A 10.0.1.180 + A 10.0.1.181 + A 10.0.1.182 + A 10.0.1.183 + A 10.0.1.184 + A 10.0.1.185 + A 10.0.1.186 + A 10.0.1.187 + A 10.0.1.188 + A 10.0.1.189 + A 10.0.1.190 + A 10.0.1.191 + A 10.0.1.192 + A 10.0.1.193 + A 10.0.1.194 + A 10.0.1.195 + A 10.0.1.196 + A 10.0.1.197 + A 10.0.1.198 + A 10.0.1.199 + A 10.0.1.200 + A 10.0.1.201 + A 10.0.1.202 + A 10.0.1.203 + A 10.0.1.204 + A 10.0.1.205 + A 10.0.1.206 + A 10.0.1.207 + A 10.0.1.208 + A 10.0.1.209 + A 10.0.1.210 + A 10.0.1.211 + A 10.0.1.212 + A 10.0.1.213 + A 10.0.1.214 + A 10.0.1.215 + A 10.0.1.216 + A 10.0.1.217 + A 10.0.1.218 + A 10.0.1.219 + A 10.0.1.220 + A 10.0.1.221 + A 10.0.1.222 + A 10.0.1.223 + A 10.0.1.224 + A 10.0.1.225 + A 10.0.1.226 + A 10.0.1.227 + A 10.0.1.228 + A 10.0.1.229 + A 10.0.1.230 + A 10.0.1.231 + A 10.0.1.232 + A 10.0.1.233 + A 10.0.1.234 + A 10.0.1.235 + A 10.0.1.236 + A 10.0.1.237 + A 10.0.1.238 + A 10.0.1.239 + A 10.0.1.240 + A 10.0.1.241 + A 10.0.1.242 + A 10.0.1.243 + A 10.0.1.244 + A 10.0.1.245 + A 10.0.1.246 + A 10.0.1.247 + A 10.0.1.248 + A 10.0.1.249 + A 10.0.1.250 + A 10.0.1.251 + A 10.0.1.252 + A 10.0.1.253 + A 10.0.1.254 + A 10.0.1.255 + A 10.0.2.0 + A 10.0.2.1 + A 10.0.2.2 + A 10.0.2.3 + A 10.0.2.4 + A 10.0.2.5 + A 10.0.2.6 + A 10.0.2.7 + A 10.0.2.8 + A 10.0.2.9 + A 10.0.2.10 + A 10.0.2.11 + A 10.0.2.12 + A 10.0.2.13 + A 10.0.2.14 + A 10.0.2.15 + A 10.0.2.16 + A 10.0.2.17 + A 10.0.2.18 + A 10.0.2.19 + A 10.0.2.20 + A 10.0.2.21 + A 10.0.2.22 + A 10.0.2.23 + A 10.0.2.24 + A 10.0.2.25 + A 10.0.2.26 + A 10.0.2.27 + A 10.0.2.28 + A 10.0.2.29 + A 10.0.2.30 + A 10.0.2.31 + A 10.0.2.32 + A 10.0.2.33 + A 10.0.2.34 + A 10.0.2.35 + A 10.0.2.36 + A 10.0.2.37 + A 10.0.2.38 + A 10.0.2.39 + A 10.0.2.40 + A 10.0.2.41 + A 10.0.2.42 + A 10.0.2.43 + A 10.0.2.44 + A 10.0.2.45 + A 10.0.2.46 + A 10.0.2.47 + A 10.0.2.48 + A 10.0.2.49 + A 10.0.2.50 + A 10.0.2.51 + A 10.0.2.52 + A 10.0.2.53 + A 10.0.2.54 + A 10.0.2.55 + A 10.0.2.56 + A 10.0.2.57 + A 10.0.2.58 + A 10.0.2.59 + A 10.0.2.60 + A 10.0.2.61 + A 10.0.2.62 + A 10.0.2.63 + A 10.0.2.64 + A 10.0.2.65 + A 10.0.2.66 + A 10.0.2.67 + A 10.0.2.68 + A 10.0.2.69 + A 10.0.2.70 + A 10.0.2.71 + A 10.0.2.72 + A 10.0.2.73 + A 10.0.2.74 + A 10.0.2.75 + A 10.0.2.76 + A 10.0.2.77 + A 10.0.2.78 + A 10.0.2.79 + A 10.0.2.80 + A 10.0.2.81 + A 10.0.2.82 + A 10.0.2.83 + A 10.0.2.84 + A 10.0.2.85 + A 10.0.2.86 + A 10.0.2.87 + A 10.0.2.88 + A 10.0.2.89 + A 10.0.2.90 + A 10.0.2.91 + A 10.0.2.92 + A 10.0.2.93 + A 10.0.2.94 + A 10.0.2.95 + A 10.0.2.96 + A 10.0.2.97 + A 10.0.2.98 + A 10.0.2.99 + A 10.0.2.100 + A 10.0.2.101 + A 10.0.2.102 + A 10.0.2.103 + A 10.0.2.104 + A 10.0.2.105 + A 10.0.2.106 + A 10.0.2.107 + A 10.0.2.108 + A 10.0.2.109 + A 10.0.2.110 + A 10.0.2.111 + A 10.0.2.112 + A 10.0.2.113 + A 10.0.2.114 + A 10.0.2.115 + A 10.0.2.116 + A 10.0.2.117 + A 10.0.2.118 + A 10.0.2.119 + A 10.0.2.120 + A 10.0.2.121 + A 10.0.2.122 + A 10.0.2.123 + A 10.0.2.124 + A 10.0.2.125 + A 10.0.2.126 + A 10.0.2.127 + A 10.0.2.128 + A 10.0.2.129 + A 10.0.2.130 + A 10.0.2.131 + A 10.0.2.132 + A 10.0.2.133 + A 10.0.2.134 + A 10.0.2.135 + A 10.0.2.136 + A 10.0.2.137 + A 10.0.2.138 + A 10.0.2.139 + A 10.0.2.140 + A 10.0.2.141 + A 10.0.2.142 + A 10.0.2.143 + A 10.0.2.144 + A 10.0.2.145 + A 10.0.2.146 + A 10.0.2.147 + A 10.0.2.148 + A 10.0.2.149 + A 10.0.2.150 + A 10.0.2.151 + A 10.0.2.152 + A 10.0.2.153 + A 10.0.2.154 + A 10.0.2.155 + A 10.0.2.156 + A 10.0.2.157 + A 10.0.2.158 + A 10.0.2.159 + A 10.0.2.160 + A 10.0.2.161 + A 10.0.2.162 + A 10.0.2.163 + A 10.0.2.164 + A 10.0.2.165 + A 10.0.2.166 + A 10.0.2.167 + A 10.0.2.168 + A 10.0.2.169 + A 10.0.2.170 + A 10.0.2.171 + A 10.0.2.172 + A 10.0.2.173 + A 10.0.2.174 + A 10.0.2.175 + A 10.0.2.176 + A 10.0.2.177 + A 10.0.2.178 + A 10.0.2.179 + A 10.0.2.180 + A 10.0.2.181 + A 10.0.2.182 + A 10.0.2.183 + A 10.0.2.184 + A 10.0.2.185 + A 10.0.2.186 + A 10.0.2.187 + A 10.0.2.188 + A 10.0.2.189 + A 10.0.2.190 + A 10.0.2.191 + A 10.0.2.192 + A 10.0.2.193 + A 10.0.2.194 + A 10.0.2.195 + A 10.0.2.196 + A 10.0.2.197 + A 10.0.2.198 + A 10.0.2.199 + A 10.0.2.200 + A 10.0.2.201 + A 10.0.2.202 + A 10.0.2.203 + A 10.0.2.204 + A 10.0.2.205 + A 10.0.2.206 + A 10.0.2.207 + A 10.0.2.208 + A 10.0.2.209 + A 10.0.2.210 + A 10.0.2.211 + A 10.0.2.212 + A 10.0.2.213 + A 10.0.2.214 + A 10.0.2.215 + A 10.0.2.216 + A 10.0.2.217 + A 10.0.2.218 + A 10.0.2.219 + A 10.0.2.220 + A 10.0.2.221 + A 10.0.2.222 + A 10.0.2.223 + A 10.0.2.224 + A 10.0.2.225 + A 10.0.2.226 + A 10.0.2.227 + A 10.0.2.228 + A 10.0.2.229 + A 10.0.2.230 + A 10.0.2.231 + A 10.0.2.232 + A 10.0.2.233 + A 10.0.2.234 + A 10.0.2.235 + A 10.0.2.236 + A 10.0.2.237 + A 10.0.2.238 + A 10.0.2.239 + A 10.0.2.240 + A 10.0.2.241 + A 10.0.2.242 + A 10.0.2.243 + A 10.0.2.244 + A 10.0.2.245 + A 10.0.2.246 + A 10.0.2.247 + A 10.0.2.248 + A 10.0.2.249 + A 10.0.2.250 + A 10.0.2.251 + A 10.0.2.252 + A 10.0.2.253 + A 10.0.2.254 + A 10.0.2.255 + A 10.0.3.0 + A 10.0.3.1 + A 10.0.3.2 + A 10.0.3.3 + A 10.0.3.4 + A 10.0.3.5 + A 10.0.3.6 + A 10.0.3.7 + A 10.0.3.8 + A 10.0.3.9 + A 10.0.3.10 + A 10.0.3.11 + A 10.0.3.12 + A 10.0.3.13 + A 10.0.3.14 + A 10.0.3.15 + A 10.0.3.16 + A 10.0.3.17 + A 10.0.3.18 + A 10.0.3.19 + A 10.0.3.20 + A 10.0.3.21 + A 10.0.3.22 + A 10.0.3.23 + A 10.0.3.24 + A 10.0.3.25 + A 10.0.3.26 + A 10.0.3.27 + A 10.0.3.28 + A 10.0.3.29 + A 10.0.3.30 + A 10.0.3.31 + A 10.0.3.32 + A 10.0.3.33 + A 10.0.3.34 + A 10.0.3.35 + A 10.0.3.36 + A 10.0.3.37 + A 10.0.3.38 + A 10.0.3.39 + A 10.0.3.40 + A 10.0.3.41 + A 10.0.3.42 + A 10.0.3.43 + A 10.0.3.44 + A 10.0.3.45 + A 10.0.3.46 + A 10.0.3.47 + A 10.0.3.48 + A 10.0.3.49 + A 10.0.3.50 + A 10.0.3.51 + A 10.0.3.52 + A 10.0.3.53 + A 10.0.3.54 + A 10.0.3.55 + A 10.0.3.56 + A 10.0.3.57 + A 10.0.3.58 + A 10.0.3.59 + A 10.0.3.60 + A 10.0.3.61 + A 10.0.3.62 + A 10.0.3.63 + A 10.0.3.64 + A 10.0.3.65 + A 10.0.3.66 + A 10.0.3.67 + A 10.0.3.68 + A 10.0.3.69 + A 10.0.3.70 + A 10.0.3.71 + A 10.0.3.72 + A 10.0.3.73 + A 10.0.3.74 + A 10.0.3.75 + A 10.0.3.76 + A 10.0.3.77 + A 10.0.3.78 + A 10.0.3.79 + A 10.0.3.80 + A 10.0.3.81 + A 10.0.3.82 + A 10.0.3.83 + A 10.0.3.84 + A 10.0.3.85 + A 10.0.3.86 + A 10.0.3.87 + A 10.0.3.88 + A 10.0.3.89 + A 10.0.3.90 + A 10.0.3.91 + A 10.0.3.92 + A 10.0.3.93 + A 10.0.3.94 + A 10.0.3.95 + A 10.0.3.96 + A 10.0.3.97 + A 10.0.3.98 + A 10.0.3.99 + A 10.0.3.100 + A 10.0.3.101 + A 10.0.3.102 + A 10.0.3.103 + A 10.0.3.104 + A 10.0.3.105 + A 10.0.3.106 + A 10.0.3.107 + A 10.0.3.108 + A 10.0.3.109 + A 10.0.3.110 + A 10.0.3.111 + A 10.0.3.112 + A 10.0.3.113 + A 10.0.3.114 + A 10.0.3.115 + A 10.0.3.116 + A 10.0.3.117 + A 10.0.3.118 + A 10.0.3.119 + A 10.0.3.120 + A 10.0.3.121 + A 10.0.3.122 + A 10.0.3.123 + A 10.0.3.124 + A 10.0.3.125 + A 10.0.3.126 + A 10.0.3.127 + A 10.0.3.128 + A 10.0.3.129 + A 10.0.3.130 + A 10.0.3.131 + A 10.0.3.132 + A 10.0.3.133 + A 10.0.3.134 + A 10.0.3.135 + A 10.0.3.136 + A 10.0.3.137 + A 10.0.3.138 + A 10.0.3.139 + A 10.0.3.140 + A 10.0.3.141 + A 10.0.3.142 + A 10.0.3.143 + A 10.0.3.144 + A 10.0.3.145 + A 10.0.3.146 + A 10.0.3.147 + A 10.0.3.148 + A 10.0.3.149 + A 10.0.3.150 + A 10.0.3.151 + A 10.0.3.152 + A 10.0.3.153 + A 10.0.3.154 + A 10.0.3.155 + A 10.0.3.156 + A 10.0.3.157 + A 10.0.3.158 + A 10.0.3.159 + A 10.0.3.160 + A 10.0.3.161 + A 10.0.3.162 + A 10.0.3.163 + A 10.0.3.164 + A 10.0.3.165 + A 10.0.3.166 + A 10.0.3.167 + A 10.0.3.168 + A 10.0.3.169 + A 10.0.3.170 + A 10.0.3.171 + A 10.0.3.172 + A 10.0.3.173 + A 10.0.3.174 + A 10.0.3.175 + A 10.0.3.176 + A 10.0.3.177 + A 10.0.3.178 + A 10.0.3.179 + A 10.0.3.180 + A 10.0.3.181 + A 10.0.3.182 + A 10.0.3.183 + A 10.0.3.184 + A 10.0.3.185 + A 10.0.3.186 + A 10.0.3.187 + A 10.0.3.188 + A 10.0.3.189 + A 10.0.3.190 + A 10.0.3.191 + A 10.0.3.192 + A 10.0.3.193 + A 10.0.3.194 + A 10.0.3.195 + A 10.0.3.196 + A 10.0.3.197 + A 10.0.3.198 + A 10.0.3.199 + A 10.0.3.200 + A 10.0.3.201 + A 10.0.3.202 + A 10.0.3.203 + A 10.0.3.204 + A 10.0.3.205 + A 10.0.3.206 + A 10.0.3.207 + A 10.0.3.208 + A 10.0.3.209 + A 10.0.3.210 + A 10.0.3.211 + A 10.0.3.212 + A 10.0.3.213 + A 10.0.3.214 + A 10.0.3.215 + A 10.0.3.216 + A 10.0.3.217 + A 10.0.3.218 + A 10.0.3.219 + A 10.0.3.220 + A 10.0.3.221 + A 10.0.3.222 + A 10.0.3.223 + A 10.0.3.224 + A 10.0.3.225 + A 10.0.3.226 + A 10.0.3.227 + A 10.0.3.228 + A 10.0.3.229 + A 10.0.3.230 + A 10.0.3.231 +2000 A 10.0.0.0 + A 10.0.0.1 + A 10.0.0.2 + A 10.0.0.3 + A 10.0.0.4 + A 10.0.0.5 + A 10.0.0.6 + A 10.0.0.7 + A 10.0.0.8 + A 10.0.0.9 + A 10.0.0.10 + A 10.0.0.11 + A 10.0.0.12 + A 10.0.0.13 + A 10.0.0.14 + A 10.0.0.15 + A 10.0.0.16 + A 10.0.0.17 + A 10.0.0.18 + A 10.0.0.19 + A 10.0.0.20 + A 10.0.0.21 + A 10.0.0.22 + A 10.0.0.23 + A 10.0.0.24 + A 10.0.0.25 + A 10.0.0.26 + A 10.0.0.27 + A 10.0.0.28 + A 10.0.0.29 + A 10.0.0.30 + A 10.0.0.31 + A 10.0.0.32 + A 10.0.0.33 + A 10.0.0.34 + A 10.0.0.35 + A 10.0.0.36 + A 10.0.0.37 + A 10.0.0.38 + A 10.0.0.39 + A 10.0.0.40 + A 10.0.0.41 + A 10.0.0.42 + A 10.0.0.43 + A 10.0.0.44 + A 10.0.0.45 + A 10.0.0.46 + A 10.0.0.47 + A 10.0.0.48 + A 10.0.0.49 + A 10.0.0.50 + A 10.0.0.51 + A 10.0.0.52 + A 10.0.0.53 + A 10.0.0.54 + A 10.0.0.55 + A 10.0.0.56 + A 10.0.0.57 + A 10.0.0.58 + A 10.0.0.59 + A 10.0.0.60 + A 10.0.0.61 + A 10.0.0.62 + A 10.0.0.63 + A 10.0.0.64 + A 10.0.0.65 + A 10.0.0.66 + A 10.0.0.67 + A 10.0.0.68 + A 10.0.0.69 + A 10.0.0.70 + A 10.0.0.71 + A 10.0.0.72 + A 10.0.0.73 + A 10.0.0.74 + A 10.0.0.75 + A 10.0.0.76 + A 10.0.0.77 + A 10.0.0.78 + A 10.0.0.79 + A 10.0.0.80 + A 10.0.0.81 + A 10.0.0.82 + A 10.0.0.83 + A 10.0.0.84 + A 10.0.0.85 + A 10.0.0.86 + A 10.0.0.87 + A 10.0.0.88 + A 10.0.0.89 + A 10.0.0.90 + A 10.0.0.91 + A 10.0.0.92 + A 10.0.0.93 + A 10.0.0.94 + A 10.0.0.95 + A 10.0.0.96 + A 10.0.0.97 + A 10.0.0.98 + A 10.0.0.99 + A 10.0.0.100 + A 10.0.0.101 + A 10.0.0.102 + A 10.0.0.103 + A 10.0.0.104 + A 10.0.0.105 + A 10.0.0.106 + A 10.0.0.107 + A 10.0.0.108 + A 10.0.0.109 + A 10.0.0.110 + A 10.0.0.111 + A 10.0.0.112 + A 10.0.0.113 + A 10.0.0.114 + A 10.0.0.115 + A 10.0.0.116 + A 10.0.0.117 + A 10.0.0.118 + A 10.0.0.119 + A 10.0.0.120 + A 10.0.0.121 + A 10.0.0.122 + A 10.0.0.123 + A 10.0.0.124 + A 10.0.0.125 + A 10.0.0.126 + A 10.0.0.127 + A 10.0.0.128 + A 10.0.0.129 + A 10.0.0.130 + A 10.0.0.131 + A 10.0.0.132 + A 10.0.0.133 + A 10.0.0.134 + A 10.0.0.135 + A 10.0.0.136 + A 10.0.0.137 + A 10.0.0.138 + A 10.0.0.139 + A 10.0.0.140 + A 10.0.0.141 + A 10.0.0.142 + A 10.0.0.143 + A 10.0.0.144 + A 10.0.0.145 + A 10.0.0.146 + A 10.0.0.147 + A 10.0.0.148 + A 10.0.0.149 + A 10.0.0.150 + A 10.0.0.151 + A 10.0.0.152 + A 10.0.0.153 + A 10.0.0.154 + A 10.0.0.155 + A 10.0.0.156 + A 10.0.0.157 + A 10.0.0.158 + A 10.0.0.159 + A 10.0.0.160 + A 10.0.0.161 + A 10.0.0.162 + A 10.0.0.163 + A 10.0.0.164 + A 10.0.0.165 + A 10.0.0.166 + A 10.0.0.167 + A 10.0.0.168 + A 10.0.0.169 + A 10.0.0.170 + A 10.0.0.171 + A 10.0.0.172 + A 10.0.0.173 + A 10.0.0.174 + A 10.0.0.175 + A 10.0.0.176 + A 10.0.0.177 + A 10.0.0.178 + A 10.0.0.179 + A 10.0.0.180 + A 10.0.0.181 + A 10.0.0.182 + A 10.0.0.183 + A 10.0.0.184 + A 10.0.0.185 + A 10.0.0.186 + A 10.0.0.187 + A 10.0.0.188 + A 10.0.0.189 + A 10.0.0.190 + A 10.0.0.191 + A 10.0.0.192 + A 10.0.0.193 + A 10.0.0.194 + A 10.0.0.195 + A 10.0.0.196 + A 10.0.0.197 + A 10.0.0.198 + A 10.0.0.199 + A 10.0.0.200 + A 10.0.0.201 + A 10.0.0.202 + A 10.0.0.203 + A 10.0.0.204 + A 10.0.0.205 + A 10.0.0.206 + A 10.0.0.207 + A 10.0.0.208 + A 10.0.0.209 + A 10.0.0.210 + A 10.0.0.211 + A 10.0.0.212 + A 10.0.0.213 + A 10.0.0.214 + A 10.0.0.215 + A 10.0.0.216 + A 10.0.0.217 + A 10.0.0.218 + A 10.0.0.219 + A 10.0.0.220 + A 10.0.0.221 + A 10.0.0.222 + A 10.0.0.223 + A 10.0.0.224 + A 10.0.0.225 + A 10.0.0.226 + A 10.0.0.227 + A 10.0.0.228 + A 10.0.0.229 + A 10.0.0.230 + A 10.0.0.231 + A 10.0.0.232 + A 10.0.0.233 + A 10.0.0.234 + A 10.0.0.235 + A 10.0.0.236 + A 10.0.0.237 + A 10.0.0.238 + A 10.0.0.239 + A 10.0.0.240 + A 10.0.0.241 + A 10.0.0.242 + A 10.0.0.243 + A 10.0.0.244 + A 10.0.0.245 + A 10.0.0.246 + A 10.0.0.247 + A 10.0.0.248 + A 10.0.0.249 + A 10.0.0.250 + A 10.0.0.251 + A 10.0.0.252 + A 10.0.0.253 + A 10.0.0.254 + A 10.0.0.255 + A 10.0.1.0 + A 10.0.1.1 + A 10.0.1.2 + A 10.0.1.3 + A 10.0.1.4 + A 10.0.1.5 + A 10.0.1.6 + A 10.0.1.7 + A 10.0.1.8 + A 10.0.1.9 + A 10.0.1.10 + A 10.0.1.11 + A 10.0.1.12 + A 10.0.1.13 + A 10.0.1.14 + A 10.0.1.15 + A 10.0.1.16 + A 10.0.1.17 + A 10.0.1.18 + A 10.0.1.19 + A 10.0.1.20 + A 10.0.1.21 + A 10.0.1.22 + A 10.0.1.23 + A 10.0.1.24 + A 10.0.1.25 + A 10.0.1.26 + A 10.0.1.27 + A 10.0.1.28 + A 10.0.1.29 + A 10.0.1.30 + A 10.0.1.31 + A 10.0.1.32 + A 10.0.1.33 + A 10.0.1.34 + A 10.0.1.35 + A 10.0.1.36 + A 10.0.1.37 + A 10.0.1.38 + A 10.0.1.39 + A 10.0.1.40 + A 10.0.1.41 + A 10.0.1.42 + A 10.0.1.43 + A 10.0.1.44 + A 10.0.1.45 + A 10.0.1.46 + A 10.0.1.47 + A 10.0.1.48 + A 10.0.1.49 + A 10.0.1.50 + A 10.0.1.51 + A 10.0.1.52 + A 10.0.1.53 + A 10.0.1.54 + A 10.0.1.55 + A 10.0.1.56 + A 10.0.1.57 + A 10.0.1.58 + A 10.0.1.59 + A 10.0.1.60 + A 10.0.1.61 + A 10.0.1.62 + A 10.0.1.63 + A 10.0.1.64 + A 10.0.1.65 + A 10.0.1.66 + A 10.0.1.67 + A 10.0.1.68 + A 10.0.1.69 + A 10.0.1.70 + A 10.0.1.71 + A 10.0.1.72 + A 10.0.1.73 + A 10.0.1.74 + A 10.0.1.75 + A 10.0.1.76 + A 10.0.1.77 + A 10.0.1.78 + A 10.0.1.79 + A 10.0.1.80 + A 10.0.1.81 + A 10.0.1.82 + A 10.0.1.83 + A 10.0.1.84 + A 10.0.1.85 + A 10.0.1.86 + A 10.0.1.87 + A 10.0.1.88 + A 10.0.1.89 + A 10.0.1.90 + A 10.0.1.91 + A 10.0.1.92 + A 10.0.1.93 + A 10.0.1.94 + A 10.0.1.95 + A 10.0.1.96 + A 10.0.1.97 + A 10.0.1.98 + A 10.0.1.99 + A 10.0.1.100 + A 10.0.1.101 + A 10.0.1.102 + A 10.0.1.103 + A 10.0.1.104 + A 10.0.1.105 + A 10.0.1.106 + A 10.0.1.107 + A 10.0.1.108 + A 10.0.1.109 + A 10.0.1.110 + A 10.0.1.111 + A 10.0.1.112 + A 10.0.1.113 + A 10.0.1.114 + A 10.0.1.115 + A 10.0.1.116 + A 10.0.1.117 + A 10.0.1.118 + A 10.0.1.119 + A 10.0.1.120 + A 10.0.1.121 + A 10.0.1.122 + A 10.0.1.123 + A 10.0.1.124 + A 10.0.1.125 + A 10.0.1.126 + A 10.0.1.127 + A 10.0.1.128 + A 10.0.1.129 + A 10.0.1.130 + A 10.0.1.131 + A 10.0.1.132 + A 10.0.1.133 + A 10.0.1.134 + A 10.0.1.135 + A 10.0.1.136 + A 10.0.1.137 + A 10.0.1.138 + A 10.0.1.139 + A 10.0.1.140 + A 10.0.1.141 + A 10.0.1.142 + A 10.0.1.143 + A 10.0.1.144 + A 10.0.1.145 + A 10.0.1.146 + A 10.0.1.147 + A 10.0.1.148 + A 10.0.1.149 + A 10.0.1.150 + A 10.0.1.151 + A 10.0.1.152 + A 10.0.1.153 + A 10.0.1.154 + A 10.0.1.155 + A 10.0.1.156 + A 10.0.1.157 + A 10.0.1.158 + A 10.0.1.159 + A 10.0.1.160 + A 10.0.1.161 + A 10.0.1.162 + A 10.0.1.163 + A 10.0.1.164 + A 10.0.1.165 + A 10.0.1.166 + A 10.0.1.167 + A 10.0.1.168 + A 10.0.1.169 + A 10.0.1.170 + A 10.0.1.171 + A 10.0.1.172 + A 10.0.1.173 + A 10.0.1.174 + A 10.0.1.175 + A 10.0.1.176 + A 10.0.1.177 + A 10.0.1.178 + A 10.0.1.179 + A 10.0.1.180 + A 10.0.1.181 + A 10.0.1.182 + A 10.0.1.183 + A 10.0.1.184 + A 10.0.1.185 + A 10.0.1.186 + A 10.0.1.187 + A 10.0.1.188 + A 10.0.1.189 + A 10.0.1.190 + A 10.0.1.191 + A 10.0.1.192 + A 10.0.1.193 + A 10.0.1.194 + A 10.0.1.195 + A 10.0.1.196 + A 10.0.1.197 + A 10.0.1.198 + A 10.0.1.199 + A 10.0.1.200 + A 10.0.1.201 + A 10.0.1.202 + A 10.0.1.203 + A 10.0.1.204 + A 10.0.1.205 + A 10.0.1.206 + A 10.0.1.207 + A 10.0.1.208 + A 10.0.1.209 + A 10.0.1.210 + A 10.0.1.211 + A 10.0.1.212 + A 10.0.1.213 + A 10.0.1.214 + A 10.0.1.215 + A 10.0.1.216 + A 10.0.1.217 + A 10.0.1.218 + A 10.0.1.219 + A 10.0.1.220 + A 10.0.1.221 + A 10.0.1.222 + A 10.0.1.223 + A 10.0.1.224 + A 10.0.1.225 + A 10.0.1.226 + A 10.0.1.227 + A 10.0.1.228 + A 10.0.1.229 + A 10.0.1.230 + A 10.0.1.231 + A 10.0.1.232 + A 10.0.1.233 + A 10.0.1.234 + A 10.0.1.235 + A 10.0.1.236 + A 10.0.1.237 + A 10.0.1.238 + A 10.0.1.239 + A 10.0.1.240 + A 10.0.1.241 + A 10.0.1.242 + A 10.0.1.243 + A 10.0.1.244 + A 10.0.1.245 + A 10.0.1.246 + A 10.0.1.247 + A 10.0.1.248 + A 10.0.1.249 + A 10.0.1.250 + A 10.0.1.251 + A 10.0.1.252 + A 10.0.1.253 + A 10.0.1.254 + A 10.0.1.255 + A 10.0.2.0 + A 10.0.2.1 + A 10.0.2.2 + A 10.0.2.3 + A 10.0.2.4 + A 10.0.2.5 + A 10.0.2.6 + A 10.0.2.7 + A 10.0.2.8 + A 10.0.2.9 + A 10.0.2.10 + A 10.0.2.11 + A 10.0.2.12 + A 10.0.2.13 + A 10.0.2.14 + A 10.0.2.15 + A 10.0.2.16 + A 10.0.2.17 + A 10.0.2.18 + A 10.0.2.19 + A 10.0.2.20 + A 10.0.2.21 + A 10.0.2.22 + A 10.0.2.23 + A 10.0.2.24 + A 10.0.2.25 + A 10.0.2.26 + A 10.0.2.27 + A 10.0.2.28 + A 10.0.2.29 + A 10.0.2.30 + A 10.0.2.31 + A 10.0.2.32 + A 10.0.2.33 + A 10.0.2.34 + A 10.0.2.35 + A 10.0.2.36 + A 10.0.2.37 + A 10.0.2.38 + A 10.0.2.39 + A 10.0.2.40 + A 10.0.2.41 + A 10.0.2.42 + A 10.0.2.43 + A 10.0.2.44 + A 10.0.2.45 + A 10.0.2.46 + A 10.0.2.47 + A 10.0.2.48 + A 10.0.2.49 + A 10.0.2.50 + A 10.0.2.51 + A 10.0.2.52 + A 10.0.2.53 + A 10.0.2.54 + A 10.0.2.55 + A 10.0.2.56 + A 10.0.2.57 + A 10.0.2.58 + A 10.0.2.59 + A 10.0.2.60 + A 10.0.2.61 + A 10.0.2.62 + A 10.0.2.63 + A 10.0.2.64 + A 10.0.2.65 + A 10.0.2.66 + A 10.0.2.67 + A 10.0.2.68 + A 10.0.2.69 + A 10.0.2.70 + A 10.0.2.71 + A 10.0.2.72 + A 10.0.2.73 + A 10.0.2.74 + A 10.0.2.75 + A 10.0.2.76 + A 10.0.2.77 + A 10.0.2.78 + A 10.0.2.79 + A 10.0.2.80 + A 10.0.2.81 + A 10.0.2.82 + A 10.0.2.83 + A 10.0.2.84 + A 10.0.2.85 + A 10.0.2.86 + A 10.0.2.87 + A 10.0.2.88 + A 10.0.2.89 + A 10.0.2.90 + A 10.0.2.91 + A 10.0.2.92 + A 10.0.2.93 + A 10.0.2.94 + A 10.0.2.95 + A 10.0.2.96 + A 10.0.2.97 + A 10.0.2.98 + A 10.0.2.99 + A 10.0.2.100 + A 10.0.2.101 + A 10.0.2.102 + A 10.0.2.103 + A 10.0.2.104 + A 10.0.2.105 + A 10.0.2.106 + A 10.0.2.107 + A 10.0.2.108 + A 10.0.2.109 + A 10.0.2.110 + A 10.0.2.111 + A 10.0.2.112 + A 10.0.2.113 + A 10.0.2.114 + A 10.0.2.115 + A 10.0.2.116 + A 10.0.2.117 + A 10.0.2.118 + A 10.0.2.119 + A 10.0.2.120 + A 10.0.2.121 + A 10.0.2.122 + A 10.0.2.123 + A 10.0.2.124 + A 10.0.2.125 + A 10.0.2.126 + A 10.0.2.127 + A 10.0.2.128 + A 10.0.2.129 + A 10.0.2.130 + A 10.0.2.131 + A 10.0.2.132 + A 10.0.2.133 + A 10.0.2.134 + A 10.0.2.135 + A 10.0.2.136 + A 10.0.2.137 + A 10.0.2.138 + A 10.0.2.139 + A 10.0.2.140 + A 10.0.2.141 + A 10.0.2.142 + A 10.0.2.143 + A 10.0.2.144 + A 10.0.2.145 + A 10.0.2.146 + A 10.0.2.147 + A 10.0.2.148 + A 10.0.2.149 + A 10.0.2.150 + A 10.0.2.151 + A 10.0.2.152 + A 10.0.2.153 + A 10.0.2.154 + A 10.0.2.155 + A 10.0.2.156 + A 10.0.2.157 + A 10.0.2.158 + A 10.0.2.159 + A 10.0.2.160 + A 10.0.2.161 + A 10.0.2.162 + A 10.0.2.163 + A 10.0.2.164 + A 10.0.2.165 + A 10.0.2.166 + A 10.0.2.167 + A 10.0.2.168 + A 10.0.2.169 + A 10.0.2.170 + A 10.0.2.171 + A 10.0.2.172 + A 10.0.2.173 + A 10.0.2.174 + A 10.0.2.175 + A 10.0.2.176 + A 10.0.2.177 + A 10.0.2.178 + A 10.0.2.179 + A 10.0.2.180 + A 10.0.2.181 + A 10.0.2.182 + A 10.0.2.183 + A 10.0.2.184 + A 10.0.2.185 + A 10.0.2.186 + A 10.0.2.187 + A 10.0.2.188 + A 10.0.2.189 + A 10.0.2.190 + A 10.0.2.191 + A 10.0.2.192 + A 10.0.2.193 + A 10.0.2.194 + A 10.0.2.195 + A 10.0.2.196 + A 10.0.2.197 + A 10.0.2.198 + A 10.0.2.199 + A 10.0.2.200 + A 10.0.2.201 + A 10.0.2.202 + A 10.0.2.203 + A 10.0.2.204 + A 10.0.2.205 + A 10.0.2.206 + A 10.0.2.207 + A 10.0.2.208 + A 10.0.2.209 + A 10.0.2.210 + A 10.0.2.211 + A 10.0.2.212 + A 10.0.2.213 + A 10.0.2.214 + A 10.0.2.215 + A 10.0.2.216 + A 10.0.2.217 + A 10.0.2.218 + A 10.0.2.219 + A 10.0.2.220 + A 10.0.2.221 + A 10.0.2.222 + A 10.0.2.223 + A 10.0.2.224 + A 10.0.2.225 + A 10.0.2.226 + A 10.0.2.227 + A 10.0.2.228 + A 10.0.2.229 + A 10.0.2.230 + A 10.0.2.231 + A 10.0.2.232 + A 10.0.2.233 + A 10.0.2.234 + A 10.0.2.235 + A 10.0.2.236 + A 10.0.2.237 + A 10.0.2.238 + A 10.0.2.239 + A 10.0.2.240 + A 10.0.2.241 + A 10.0.2.242 + A 10.0.2.243 + A 10.0.2.244 + A 10.0.2.245 + A 10.0.2.246 + A 10.0.2.247 + A 10.0.2.248 + A 10.0.2.249 + A 10.0.2.250 + A 10.0.2.251 + A 10.0.2.252 + A 10.0.2.253 + A 10.0.2.254 + A 10.0.2.255 + A 10.0.3.0 + A 10.0.3.1 + A 10.0.3.2 + A 10.0.3.3 + A 10.0.3.4 + A 10.0.3.5 + A 10.0.3.6 + A 10.0.3.7 + A 10.0.3.8 + A 10.0.3.9 + A 10.0.3.10 + A 10.0.3.11 + A 10.0.3.12 + A 10.0.3.13 + A 10.0.3.14 + A 10.0.3.15 + A 10.0.3.16 + A 10.0.3.17 + A 10.0.3.18 + A 10.0.3.19 + A 10.0.3.20 + A 10.0.3.21 + A 10.0.3.22 + A 10.0.3.23 + A 10.0.3.24 + A 10.0.3.25 + A 10.0.3.26 + A 10.0.3.27 + A 10.0.3.28 + A 10.0.3.29 + A 10.0.3.30 + A 10.0.3.31 + A 10.0.3.32 + A 10.0.3.33 + A 10.0.3.34 + A 10.0.3.35 + A 10.0.3.36 + A 10.0.3.37 + A 10.0.3.38 + A 10.0.3.39 + A 10.0.3.40 + A 10.0.3.41 + A 10.0.3.42 + A 10.0.3.43 + A 10.0.3.44 + A 10.0.3.45 + A 10.0.3.46 + A 10.0.3.47 + A 10.0.3.48 + A 10.0.3.49 + A 10.0.3.50 + A 10.0.3.51 + A 10.0.3.52 + A 10.0.3.53 + A 10.0.3.54 + A 10.0.3.55 + A 10.0.3.56 + A 10.0.3.57 + A 10.0.3.58 + A 10.0.3.59 + A 10.0.3.60 + A 10.0.3.61 + A 10.0.3.62 + A 10.0.3.63 + A 10.0.3.64 + A 10.0.3.65 + A 10.0.3.66 + A 10.0.3.67 + A 10.0.3.68 + A 10.0.3.69 + A 10.0.3.70 + A 10.0.3.71 + A 10.0.3.72 + A 10.0.3.73 + A 10.0.3.74 + A 10.0.3.75 + A 10.0.3.76 + A 10.0.3.77 + A 10.0.3.78 + A 10.0.3.79 + A 10.0.3.80 + A 10.0.3.81 + A 10.0.3.82 + A 10.0.3.83 + A 10.0.3.84 + A 10.0.3.85 + A 10.0.3.86 + A 10.0.3.87 + A 10.0.3.88 + A 10.0.3.89 + A 10.0.3.90 + A 10.0.3.91 + A 10.0.3.92 + A 10.0.3.93 + A 10.0.3.94 + A 10.0.3.95 + A 10.0.3.96 + A 10.0.3.97 + A 10.0.3.98 + A 10.0.3.99 + A 10.0.3.100 + A 10.0.3.101 + A 10.0.3.102 + A 10.0.3.103 + A 10.0.3.104 + A 10.0.3.105 + A 10.0.3.106 + A 10.0.3.107 + A 10.0.3.108 + A 10.0.3.109 + A 10.0.3.110 + A 10.0.3.111 + A 10.0.3.112 + A 10.0.3.113 + A 10.0.3.114 + A 10.0.3.115 + A 10.0.3.116 + A 10.0.3.117 + A 10.0.3.118 + A 10.0.3.119 + A 10.0.3.120 + A 10.0.3.121 + A 10.0.3.122 + A 10.0.3.123 + A 10.0.3.124 + A 10.0.3.125 + A 10.0.3.126 + A 10.0.3.127 + A 10.0.3.128 + A 10.0.3.129 + A 10.0.3.130 + A 10.0.3.131 + A 10.0.3.132 + A 10.0.3.133 + A 10.0.3.134 + A 10.0.3.135 + A 10.0.3.136 + A 10.0.3.137 + A 10.0.3.138 + A 10.0.3.139 + A 10.0.3.140 + A 10.0.3.141 + A 10.0.3.142 + A 10.0.3.143 + A 10.0.3.144 + A 10.0.3.145 + A 10.0.3.146 + A 10.0.3.147 + A 10.0.3.148 + A 10.0.3.149 + A 10.0.3.150 + A 10.0.3.151 + A 10.0.3.152 + A 10.0.3.153 + A 10.0.3.154 + A 10.0.3.155 + A 10.0.3.156 + A 10.0.3.157 + A 10.0.3.158 + A 10.0.3.159 + A 10.0.3.160 + A 10.0.3.161 + A 10.0.3.162 + A 10.0.3.163 + A 10.0.3.164 + A 10.0.3.165 + A 10.0.3.166 + A 10.0.3.167 + A 10.0.3.168 + A 10.0.3.169 + A 10.0.3.170 + A 10.0.3.171 + A 10.0.3.172 + A 10.0.3.173 + A 10.0.3.174 + A 10.0.3.175 + A 10.0.3.176 + A 10.0.3.177 + A 10.0.3.178 + A 10.0.3.179 + A 10.0.3.180 + A 10.0.3.181 + A 10.0.3.182 + A 10.0.3.183 + A 10.0.3.184 + A 10.0.3.185 + A 10.0.3.186 + A 10.0.3.187 + A 10.0.3.188 + A 10.0.3.189 + A 10.0.3.190 + A 10.0.3.191 + A 10.0.3.192 + A 10.0.3.193 + A 10.0.3.194 + A 10.0.3.195 + A 10.0.3.196 + A 10.0.3.197 + A 10.0.3.198 + A 10.0.3.199 + A 10.0.3.200 + A 10.0.3.201 + A 10.0.3.202 + A 10.0.3.203 + A 10.0.3.204 + A 10.0.3.205 + A 10.0.3.206 + A 10.0.3.207 + A 10.0.3.208 + A 10.0.3.209 + A 10.0.3.210 + A 10.0.3.211 + A 10.0.3.212 + A 10.0.3.213 + A 10.0.3.214 + A 10.0.3.215 + A 10.0.3.216 + A 10.0.3.217 + A 10.0.3.218 + A 10.0.3.219 + A 10.0.3.220 + A 10.0.3.221 + A 10.0.3.222 + A 10.0.3.223 + A 10.0.3.224 + A 10.0.3.225 + A 10.0.3.226 + A 10.0.3.227 + A 10.0.3.228 + A 10.0.3.229 + A 10.0.3.230 + A 10.0.3.231 + A 10.0.3.232 + A 10.0.3.233 + A 10.0.3.234 + A 10.0.3.235 + A 10.0.3.236 + A 10.0.3.237 + A 10.0.3.238 + A 10.0.3.239 + A 10.0.3.240 + A 10.0.3.241 + A 10.0.3.242 + A 10.0.3.243 + A 10.0.3.244 + A 10.0.3.245 + A 10.0.3.246 + A 10.0.3.247 + A 10.0.3.248 + A 10.0.3.249 + A 10.0.3.250 + A 10.0.3.251 + A 10.0.3.252 + A 10.0.3.253 + A 10.0.3.254 + A 10.0.3.255 + A 10.0.4.0 + A 10.0.4.1 + A 10.0.4.2 + A 10.0.4.3 + A 10.0.4.4 + A 10.0.4.5 + A 10.0.4.6 + A 10.0.4.7 + A 10.0.4.8 + A 10.0.4.9 + A 10.0.4.10 + A 10.0.4.11 + A 10.0.4.12 + A 10.0.4.13 + A 10.0.4.14 + A 10.0.4.15 + A 10.0.4.16 + A 10.0.4.17 + A 10.0.4.18 + A 10.0.4.19 + A 10.0.4.20 + A 10.0.4.21 + A 10.0.4.22 + A 10.0.4.23 + A 10.0.4.24 + A 10.0.4.25 + A 10.0.4.26 + A 10.0.4.27 + A 10.0.4.28 + A 10.0.4.29 + A 10.0.4.30 + A 10.0.4.31 + A 10.0.4.32 + A 10.0.4.33 + A 10.0.4.34 + A 10.0.4.35 + A 10.0.4.36 + A 10.0.4.37 + A 10.0.4.38 + A 10.0.4.39 + A 10.0.4.40 + A 10.0.4.41 + A 10.0.4.42 + A 10.0.4.43 + A 10.0.4.44 + A 10.0.4.45 + A 10.0.4.46 + A 10.0.4.47 + A 10.0.4.48 + A 10.0.4.49 + A 10.0.4.50 + A 10.0.4.51 + A 10.0.4.52 + A 10.0.4.53 + A 10.0.4.54 + A 10.0.4.55 + A 10.0.4.56 + A 10.0.4.57 + A 10.0.4.58 + A 10.0.4.59 + A 10.0.4.60 + A 10.0.4.61 + A 10.0.4.62 + A 10.0.4.63 + A 10.0.4.64 + A 10.0.4.65 + A 10.0.4.66 + A 10.0.4.67 + A 10.0.4.68 + A 10.0.4.69 + A 10.0.4.70 + A 10.0.4.71 + A 10.0.4.72 + A 10.0.4.73 + A 10.0.4.74 + A 10.0.4.75 + A 10.0.4.76 + A 10.0.4.77 + A 10.0.4.78 + A 10.0.4.79 + A 10.0.4.80 + A 10.0.4.81 + A 10.0.4.82 + A 10.0.4.83 + A 10.0.4.84 + A 10.0.4.85 + A 10.0.4.86 + A 10.0.4.87 + A 10.0.4.88 + A 10.0.4.89 + A 10.0.4.90 + A 10.0.4.91 + A 10.0.4.92 + A 10.0.4.93 + A 10.0.4.94 + A 10.0.4.95 + A 10.0.4.96 + A 10.0.4.97 + A 10.0.4.98 + A 10.0.4.99 + A 10.0.4.100 + A 10.0.4.101 + A 10.0.4.102 + A 10.0.4.103 + A 10.0.4.104 + A 10.0.4.105 + A 10.0.4.106 + A 10.0.4.107 + A 10.0.4.108 + A 10.0.4.109 + A 10.0.4.110 + A 10.0.4.111 + A 10.0.4.112 + A 10.0.4.113 + A 10.0.4.114 + A 10.0.4.115 + A 10.0.4.116 + A 10.0.4.117 + A 10.0.4.118 + A 10.0.4.119 + A 10.0.4.120 + A 10.0.4.121 + A 10.0.4.122 + A 10.0.4.123 + A 10.0.4.124 + A 10.0.4.125 + A 10.0.4.126 + A 10.0.4.127 + A 10.0.4.128 + A 10.0.4.129 + A 10.0.4.130 + A 10.0.4.131 + A 10.0.4.132 + A 10.0.4.133 + A 10.0.4.134 + A 10.0.4.135 + A 10.0.4.136 + A 10.0.4.137 + A 10.0.4.138 + A 10.0.4.139 + A 10.0.4.140 + A 10.0.4.141 + A 10.0.4.142 + A 10.0.4.143 + A 10.0.4.144 + A 10.0.4.145 + A 10.0.4.146 + A 10.0.4.147 + A 10.0.4.148 + A 10.0.4.149 + A 10.0.4.150 + A 10.0.4.151 + A 10.0.4.152 + A 10.0.4.153 + A 10.0.4.154 + A 10.0.4.155 + A 10.0.4.156 + A 10.0.4.157 + A 10.0.4.158 + A 10.0.4.159 + A 10.0.4.160 + A 10.0.4.161 + A 10.0.4.162 + A 10.0.4.163 + A 10.0.4.164 + A 10.0.4.165 + A 10.0.4.166 + A 10.0.4.167 + A 10.0.4.168 + A 10.0.4.169 + A 10.0.4.170 + A 10.0.4.171 + A 10.0.4.172 + A 10.0.4.173 + A 10.0.4.174 + A 10.0.4.175 + A 10.0.4.176 + A 10.0.4.177 + A 10.0.4.178 + A 10.0.4.179 + A 10.0.4.180 + A 10.0.4.181 + A 10.0.4.182 + A 10.0.4.183 + A 10.0.4.184 + A 10.0.4.185 + A 10.0.4.186 + A 10.0.4.187 + A 10.0.4.188 + A 10.0.4.189 + A 10.0.4.190 + A 10.0.4.191 + A 10.0.4.192 + A 10.0.4.193 + A 10.0.4.194 + A 10.0.4.195 + A 10.0.4.196 + A 10.0.4.197 + A 10.0.4.198 + A 10.0.4.199 + A 10.0.4.200 + A 10.0.4.201 + A 10.0.4.202 + A 10.0.4.203 + A 10.0.4.204 + A 10.0.4.205 + A 10.0.4.206 + A 10.0.4.207 + A 10.0.4.208 + A 10.0.4.209 + A 10.0.4.210 + A 10.0.4.211 + A 10.0.4.212 + A 10.0.4.213 + A 10.0.4.214 + A 10.0.4.215 + A 10.0.4.216 + A 10.0.4.217 + A 10.0.4.218 + A 10.0.4.219 + A 10.0.4.220 + A 10.0.4.221 + A 10.0.4.222 + A 10.0.4.223 + A 10.0.4.224 + A 10.0.4.225 + A 10.0.4.226 + A 10.0.4.227 + A 10.0.4.228 + A 10.0.4.229 + A 10.0.4.230 + A 10.0.4.231 + A 10.0.4.232 + A 10.0.4.233 + A 10.0.4.234 + A 10.0.4.235 + A 10.0.4.236 + A 10.0.4.237 + A 10.0.4.238 + A 10.0.4.239 + A 10.0.4.240 + A 10.0.4.241 + A 10.0.4.242 + A 10.0.4.243 + A 10.0.4.244 + A 10.0.4.245 + A 10.0.4.246 + A 10.0.4.247 + A 10.0.4.248 + A 10.0.4.249 + A 10.0.4.250 + A 10.0.4.251 + A 10.0.4.252 + A 10.0.4.253 + A 10.0.4.254 + A 10.0.4.255 + A 10.0.5.0 + A 10.0.5.1 + A 10.0.5.2 + A 10.0.5.3 + A 10.0.5.4 + A 10.0.5.5 + A 10.0.5.6 + A 10.0.5.7 + A 10.0.5.8 + A 10.0.5.9 + A 10.0.5.10 + A 10.0.5.11 + A 10.0.5.12 + A 10.0.5.13 + A 10.0.5.14 + A 10.0.5.15 + A 10.0.5.16 + A 10.0.5.17 + A 10.0.5.18 + A 10.0.5.19 + A 10.0.5.20 + A 10.0.5.21 + A 10.0.5.22 + A 10.0.5.23 + A 10.0.5.24 + A 10.0.5.25 + A 10.0.5.26 + A 10.0.5.27 + A 10.0.5.28 + A 10.0.5.29 + A 10.0.5.30 + A 10.0.5.31 + A 10.0.5.32 + A 10.0.5.33 + A 10.0.5.34 + A 10.0.5.35 + A 10.0.5.36 + A 10.0.5.37 + A 10.0.5.38 + A 10.0.5.39 + A 10.0.5.40 + A 10.0.5.41 + A 10.0.5.42 + A 10.0.5.43 + A 10.0.5.44 + A 10.0.5.45 + A 10.0.5.46 + A 10.0.5.47 + A 10.0.5.48 + A 10.0.5.49 + A 10.0.5.50 + A 10.0.5.51 + A 10.0.5.52 + A 10.0.5.53 + A 10.0.5.54 + A 10.0.5.55 + A 10.0.5.56 + A 10.0.5.57 + A 10.0.5.58 + A 10.0.5.59 + A 10.0.5.60 + A 10.0.5.61 + A 10.0.5.62 + A 10.0.5.63 + A 10.0.5.64 + A 10.0.5.65 + A 10.0.5.66 + A 10.0.5.67 + A 10.0.5.68 + A 10.0.5.69 + A 10.0.5.70 + A 10.0.5.71 + A 10.0.5.72 + A 10.0.5.73 + A 10.0.5.74 + A 10.0.5.75 + A 10.0.5.76 + A 10.0.5.77 + A 10.0.5.78 + A 10.0.5.79 + A 10.0.5.80 + A 10.0.5.81 + A 10.0.5.82 + A 10.0.5.83 + A 10.0.5.84 + A 10.0.5.85 + A 10.0.5.86 + A 10.0.5.87 + A 10.0.5.88 + A 10.0.5.89 + A 10.0.5.90 + A 10.0.5.91 + A 10.0.5.92 + A 10.0.5.93 + A 10.0.5.94 + A 10.0.5.95 + A 10.0.5.96 + A 10.0.5.97 + A 10.0.5.98 + A 10.0.5.99 + A 10.0.5.100 + A 10.0.5.101 + A 10.0.5.102 + A 10.0.5.103 + A 10.0.5.104 + A 10.0.5.105 + A 10.0.5.106 + A 10.0.5.107 + A 10.0.5.108 + A 10.0.5.109 + A 10.0.5.110 + A 10.0.5.111 + A 10.0.5.112 + A 10.0.5.113 + A 10.0.5.114 + A 10.0.5.115 + A 10.0.5.116 + A 10.0.5.117 + A 10.0.5.118 + A 10.0.5.119 + A 10.0.5.120 + A 10.0.5.121 + A 10.0.5.122 + A 10.0.5.123 + A 10.0.5.124 + A 10.0.5.125 + A 10.0.5.126 + A 10.0.5.127 + A 10.0.5.128 + A 10.0.5.129 + A 10.0.5.130 + A 10.0.5.131 + A 10.0.5.132 + A 10.0.5.133 + A 10.0.5.134 + A 10.0.5.135 + A 10.0.5.136 + A 10.0.5.137 + A 10.0.5.138 + A 10.0.5.139 + A 10.0.5.140 + A 10.0.5.141 + A 10.0.5.142 + A 10.0.5.143 + A 10.0.5.144 + A 10.0.5.145 + A 10.0.5.146 + A 10.0.5.147 + A 10.0.5.148 + A 10.0.5.149 + A 10.0.5.150 + A 10.0.5.151 + A 10.0.5.152 + A 10.0.5.153 + A 10.0.5.154 + A 10.0.5.155 + A 10.0.5.156 + A 10.0.5.157 + A 10.0.5.158 + A 10.0.5.159 + A 10.0.5.160 + A 10.0.5.161 + A 10.0.5.162 + A 10.0.5.163 + A 10.0.5.164 + A 10.0.5.165 + A 10.0.5.166 + A 10.0.5.167 + A 10.0.5.168 + A 10.0.5.169 + A 10.0.5.170 + A 10.0.5.171 + A 10.0.5.172 + A 10.0.5.173 + A 10.0.5.174 + A 10.0.5.175 + A 10.0.5.176 + A 10.0.5.177 + A 10.0.5.178 + A 10.0.5.179 + A 10.0.5.180 + A 10.0.5.181 + A 10.0.5.182 + A 10.0.5.183 + A 10.0.5.184 + A 10.0.5.185 + A 10.0.5.186 + A 10.0.5.187 + A 10.0.5.188 + A 10.0.5.189 + A 10.0.5.190 + A 10.0.5.191 + A 10.0.5.192 + A 10.0.5.193 + A 10.0.5.194 + A 10.0.5.195 + A 10.0.5.196 + A 10.0.5.197 + A 10.0.5.198 + A 10.0.5.199 + A 10.0.5.200 + A 10.0.5.201 + A 10.0.5.202 + A 10.0.5.203 + A 10.0.5.204 + A 10.0.5.205 + A 10.0.5.206 + A 10.0.5.207 + A 10.0.5.208 + A 10.0.5.209 + A 10.0.5.210 + A 10.0.5.211 + A 10.0.5.212 + A 10.0.5.213 + A 10.0.5.214 + A 10.0.5.215 + A 10.0.5.216 + A 10.0.5.217 + A 10.0.5.218 + A 10.0.5.219 + A 10.0.5.220 + A 10.0.5.221 + A 10.0.5.222 + A 10.0.5.223 + A 10.0.5.224 + A 10.0.5.225 + A 10.0.5.226 + A 10.0.5.227 + A 10.0.5.228 + A 10.0.5.229 + A 10.0.5.230 + A 10.0.5.231 + A 10.0.5.232 + A 10.0.5.233 + A 10.0.5.234 + A 10.0.5.235 + A 10.0.5.236 + A 10.0.5.237 + A 10.0.5.238 + A 10.0.5.239 + A 10.0.5.240 + A 10.0.5.241 + A 10.0.5.242 + A 10.0.5.243 + A 10.0.5.244 + A 10.0.5.245 + A 10.0.5.246 + A 10.0.5.247 + A 10.0.5.248 + A 10.0.5.249 + A 10.0.5.250 + A 10.0.5.251 + A 10.0.5.252 + A 10.0.5.253 + A 10.0.5.254 + A 10.0.5.255 + A 10.0.6.0 + A 10.0.6.1 + A 10.0.6.2 + A 10.0.6.3 + A 10.0.6.4 + A 10.0.6.5 + A 10.0.6.6 + A 10.0.6.7 + A 10.0.6.8 + A 10.0.6.9 + A 10.0.6.10 + A 10.0.6.11 + A 10.0.6.12 + A 10.0.6.13 + A 10.0.6.14 + A 10.0.6.15 + A 10.0.6.16 + A 10.0.6.17 + A 10.0.6.18 + A 10.0.6.19 + A 10.0.6.20 + A 10.0.6.21 + A 10.0.6.22 + A 10.0.6.23 + A 10.0.6.24 + A 10.0.6.25 + A 10.0.6.26 + A 10.0.6.27 + A 10.0.6.28 + A 10.0.6.29 + A 10.0.6.30 + A 10.0.6.31 + A 10.0.6.32 + A 10.0.6.33 + A 10.0.6.34 + A 10.0.6.35 + A 10.0.6.36 + A 10.0.6.37 + A 10.0.6.38 + A 10.0.6.39 + A 10.0.6.40 + A 10.0.6.41 + A 10.0.6.42 + A 10.0.6.43 + A 10.0.6.44 + A 10.0.6.45 + A 10.0.6.46 + A 10.0.6.47 + A 10.0.6.48 + A 10.0.6.49 + A 10.0.6.50 + A 10.0.6.51 + A 10.0.6.52 + A 10.0.6.53 + A 10.0.6.54 + A 10.0.6.55 + A 10.0.6.56 + A 10.0.6.57 + A 10.0.6.58 + A 10.0.6.59 + A 10.0.6.60 + A 10.0.6.61 + A 10.0.6.62 + A 10.0.6.63 + A 10.0.6.64 + A 10.0.6.65 + A 10.0.6.66 + A 10.0.6.67 + A 10.0.6.68 + A 10.0.6.69 + A 10.0.6.70 + A 10.0.6.71 + A 10.0.6.72 + A 10.0.6.73 + A 10.0.6.74 + A 10.0.6.75 + A 10.0.6.76 + A 10.0.6.77 + A 10.0.6.78 + A 10.0.6.79 + A 10.0.6.80 + A 10.0.6.81 + A 10.0.6.82 + A 10.0.6.83 + A 10.0.6.84 + A 10.0.6.85 + A 10.0.6.86 + A 10.0.6.87 + A 10.0.6.88 + A 10.0.6.89 + A 10.0.6.90 + A 10.0.6.91 + A 10.0.6.92 + A 10.0.6.93 + A 10.0.6.94 + A 10.0.6.95 + A 10.0.6.96 + A 10.0.6.97 + A 10.0.6.98 + A 10.0.6.99 + A 10.0.6.100 + A 10.0.6.101 + A 10.0.6.102 + A 10.0.6.103 + A 10.0.6.104 + A 10.0.6.105 + A 10.0.6.106 + A 10.0.6.107 + A 10.0.6.108 + A 10.0.6.109 + A 10.0.6.110 + A 10.0.6.111 + A 10.0.6.112 + A 10.0.6.113 + A 10.0.6.114 + A 10.0.6.115 + A 10.0.6.116 + A 10.0.6.117 + A 10.0.6.118 + A 10.0.6.119 + A 10.0.6.120 + A 10.0.6.121 + A 10.0.6.122 + A 10.0.6.123 + A 10.0.6.124 + A 10.0.6.125 + A 10.0.6.126 + A 10.0.6.127 + A 10.0.6.128 + A 10.0.6.129 + A 10.0.6.130 + A 10.0.6.131 + A 10.0.6.132 + A 10.0.6.133 + A 10.0.6.134 + A 10.0.6.135 + A 10.0.6.136 + A 10.0.6.137 + A 10.0.6.138 + A 10.0.6.139 + A 10.0.6.140 + A 10.0.6.141 + A 10.0.6.142 + A 10.0.6.143 + A 10.0.6.144 + A 10.0.6.145 + A 10.0.6.146 + A 10.0.6.147 + A 10.0.6.148 + A 10.0.6.149 + A 10.0.6.150 + A 10.0.6.151 + A 10.0.6.152 + A 10.0.6.153 + A 10.0.6.154 + A 10.0.6.155 + A 10.0.6.156 + A 10.0.6.157 + A 10.0.6.158 + A 10.0.6.159 + A 10.0.6.160 + A 10.0.6.161 + A 10.0.6.162 + A 10.0.6.163 + A 10.0.6.164 + A 10.0.6.165 + A 10.0.6.166 + A 10.0.6.167 + A 10.0.6.168 + A 10.0.6.169 + A 10.0.6.170 + A 10.0.6.171 + A 10.0.6.172 + A 10.0.6.173 + A 10.0.6.174 + A 10.0.6.175 + A 10.0.6.176 + A 10.0.6.177 + A 10.0.6.178 + A 10.0.6.179 + A 10.0.6.180 + A 10.0.6.181 + A 10.0.6.182 + A 10.0.6.183 + A 10.0.6.184 + A 10.0.6.185 + A 10.0.6.186 + A 10.0.6.187 + A 10.0.6.188 + A 10.0.6.189 + A 10.0.6.190 + A 10.0.6.191 + A 10.0.6.192 + A 10.0.6.193 + A 10.0.6.194 + A 10.0.6.195 + A 10.0.6.196 + A 10.0.6.197 + A 10.0.6.198 + A 10.0.6.199 + A 10.0.6.200 + A 10.0.6.201 + A 10.0.6.202 + A 10.0.6.203 + A 10.0.6.204 + A 10.0.6.205 + A 10.0.6.206 + A 10.0.6.207 + A 10.0.6.208 + A 10.0.6.209 + A 10.0.6.210 + A 10.0.6.211 + A 10.0.6.212 + A 10.0.6.213 + A 10.0.6.214 + A 10.0.6.215 + A 10.0.6.216 + A 10.0.6.217 + A 10.0.6.218 + A 10.0.6.219 + A 10.0.6.220 + A 10.0.6.221 + A 10.0.6.222 + A 10.0.6.223 + A 10.0.6.224 + A 10.0.6.225 + A 10.0.6.226 + A 10.0.6.227 + A 10.0.6.228 + A 10.0.6.229 + A 10.0.6.230 + A 10.0.6.231 + A 10.0.6.232 + A 10.0.6.233 + A 10.0.6.234 + A 10.0.6.235 + A 10.0.6.236 + A 10.0.6.237 + A 10.0.6.238 + A 10.0.6.239 + A 10.0.6.240 + A 10.0.6.241 + A 10.0.6.242 + A 10.0.6.243 + A 10.0.6.244 + A 10.0.6.245 + A 10.0.6.246 + A 10.0.6.247 + A 10.0.6.248 + A 10.0.6.249 + A 10.0.6.250 + A 10.0.6.251 + A 10.0.6.252 + A 10.0.6.253 + A 10.0.6.254 + A 10.0.6.255 + A 10.0.7.0 + A 10.0.7.1 + A 10.0.7.2 + A 10.0.7.3 + A 10.0.7.4 + A 10.0.7.5 + A 10.0.7.6 + A 10.0.7.7 + A 10.0.7.8 + A 10.0.7.9 + A 10.0.7.10 + A 10.0.7.11 + A 10.0.7.12 + A 10.0.7.13 + A 10.0.7.14 + A 10.0.7.15 + A 10.0.7.16 + A 10.0.7.17 + A 10.0.7.18 + A 10.0.7.19 + A 10.0.7.20 + A 10.0.7.21 + A 10.0.7.22 + A 10.0.7.23 + A 10.0.7.24 + A 10.0.7.25 + A 10.0.7.26 + A 10.0.7.27 + A 10.0.7.28 + A 10.0.7.29 + A 10.0.7.30 + A 10.0.7.31 + A 10.0.7.32 + A 10.0.7.33 + A 10.0.7.34 + A 10.0.7.35 + A 10.0.7.36 + A 10.0.7.37 + A 10.0.7.38 + A 10.0.7.39 + A 10.0.7.40 + A 10.0.7.41 + A 10.0.7.42 + A 10.0.7.43 + A 10.0.7.44 + A 10.0.7.45 + A 10.0.7.46 + A 10.0.7.47 + A 10.0.7.48 + A 10.0.7.49 + A 10.0.7.50 + A 10.0.7.51 + A 10.0.7.52 + A 10.0.7.53 + A 10.0.7.54 + A 10.0.7.55 + A 10.0.7.56 + A 10.0.7.57 + A 10.0.7.58 + A 10.0.7.59 + A 10.0.7.60 + A 10.0.7.61 + A 10.0.7.62 + A 10.0.7.63 + A 10.0.7.64 + A 10.0.7.65 + A 10.0.7.66 + A 10.0.7.67 + A 10.0.7.68 + A 10.0.7.69 + A 10.0.7.70 + A 10.0.7.71 + A 10.0.7.72 + A 10.0.7.73 + A 10.0.7.74 + A 10.0.7.75 + A 10.0.7.76 + A 10.0.7.77 + A 10.0.7.78 + A 10.0.7.79 + A 10.0.7.80 + A 10.0.7.81 + A 10.0.7.82 + A 10.0.7.83 + A 10.0.7.84 + A 10.0.7.85 + A 10.0.7.86 + A 10.0.7.87 + A 10.0.7.88 + A 10.0.7.89 + A 10.0.7.90 + A 10.0.7.91 + A 10.0.7.92 + A 10.0.7.93 + A 10.0.7.94 + A 10.0.7.95 + A 10.0.7.96 + A 10.0.7.97 + A 10.0.7.98 + A 10.0.7.99 + A 10.0.7.100 + A 10.0.7.101 + A 10.0.7.102 + A 10.0.7.103 + A 10.0.7.104 + A 10.0.7.105 + A 10.0.7.106 + A 10.0.7.107 + A 10.0.7.108 + A 10.0.7.109 + A 10.0.7.110 + A 10.0.7.111 + A 10.0.7.112 + A 10.0.7.113 + A 10.0.7.114 + A 10.0.7.115 + A 10.0.7.116 + A 10.0.7.117 + A 10.0.7.118 + A 10.0.7.119 + A 10.0.7.120 + A 10.0.7.121 + A 10.0.7.122 + A 10.0.7.123 + A 10.0.7.124 + A 10.0.7.125 + A 10.0.7.126 + A 10.0.7.127 + A 10.0.7.128 + A 10.0.7.129 + A 10.0.7.130 + A 10.0.7.131 + A 10.0.7.132 + A 10.0.7.133 + A 10.0.7.134 + A 10.0.7.135 + A 10.0.7.136 + A 10.0.7.137 + A 10.0.7.138 + A 10.0.7.139 + A 10.0.7.140 + A 10.0.7.141 + A 10.0.7.142 + A 10.0.7.143 + A 10.0.7.144 + A 10.0.7.145 + A 10.0.7.146 + A 10.0.7.147 + A 10.0.7.148 + A 10.0.7.149 + A 10.0.7.150 + A 10.0.7.151 + A 10.0.7.152 + A 10.0.7.153 + A 10.0.7.154 + A 10.0.7.155 + A 10.0.7.156 + A 10.0.7.157 + A 10.0.7.158 + A 10.0.7.159 + A 10.0.7.160 + A 10.0.7.161 + A 10.0.7.162 + A 10.0.7.163 + A 10.0.7.164 + A 10.0.7.165 + A 10.0.7.166 + A 10.0.7.167 + A 10.0.7.168 + A 10.0.7.169 + A 10.0.7.170 + A 10.0.7.171 + A 10.0.7.172 + A 10.0.7.173 + A 10.0.7.174 + A 10.0.7.175 + A 10.0.7.176 + A 10.0.7.177 + A 10.0.7.178 + A 10.0.7.179 + A 10.0.7.180 + A 10.0.7.181 + A 10.0.7.182 + A 10.0.7.183 + A 10.0.7.184 + A 10.0.7.185 + A 10.0.7.186 + A 10.0.7.187 + A 10.0.7.188 + A 10.0.7.189 + A 10.0.7.190 + A 10.0.7.191 + A 10.0.7.192 + A 10.0.7.193 + A 10.0.7.194 + A 10.0.7.195 + A 10.0.7.196 + A 10.0.7.197 + A 10.0.7.198 + A 10.0.7.199 + A 10.0.7.200 + A 10.0.7.201 + A 10.0.7.202 + A 10.0.7.203 + A 10.0.7.204 + A 10.0.7.205 + A 10.0.7.206 + A 10.0.7.207 +3000 A 10.0.0.0 + A 10.0.0.1 + A 10.0.0.2 + A 10.0.0.3 + A 10.0.0.4 + A 10.0.0.5 + A 10.0.0.6 + A 10.0.0.7 + A 10.0.0.8 + A 10.0.0.9 + A 10.0.0.10 + A 10.0.0.11 + A 10.0.0.12 + A 10.0.0.13 + A 10.0.0.14 + A 10.0.0.15 + A 10.0.0.16 + A 10.0.0.17 + A 10.0.0.18 + A 10.0.0.19 + A 10.0.0.20 + A 10.0.0.21 + A 10.0.0.22 + A 10.0.0.23 + A 10.0.0.24 + A 10.0.0.25 + A 10.0.0.26 + A 10.0.0.27 + A 10.0.0.28 + A 10.0.0.29 + A 10.0.0.30 + A 10.0.0.31 + A 10.0.0.32 + A 10.0.0.33 + A 10.0.0.34 + A 10.0.0.35 + A 10.0.0.36 + A 10.0.0.37 + A 10.0.0.38 + A 10.0.0.39 + A 10.0.0.40 + A 10.0.0.41 + A 10.0.0.42 + A 10.0.0.43 + A 10.0.0.44 + A 10.0.0.45 + A 10.0.0.46 + A 10.0.0.47 + A 10.0.0.48 + A 10.0.0.49 + A 10.0.0.50 + A 10.0.0.51 + A 10.0.0.52 + A 10.0.0.53 + A 10.0.0.54 + A 10.0.0.55 + A 10.0.0.56 + A 10.0.0.57 + A 10.0.0.58 + A 10.0.0.59 + A 10.0.0.60 + A 10.0.0.61 + A 10.0.0.62 + A 10.0.0.63 + A 10.0.0.64 + A 10.0.0.65 + A 10.0.0.66 + A 10.0.0.67 + A 10.0.0.68 + A 10.0.0.69 + A 10.0.0.70 + A 10.0.0.71 + A 10.0.0.72 + A 10.0.0.73 + A 10.0.0.74 + A 10.0.0.75 + A 10.0.0.76 + A 10.0.0.77 + A 10.0.0.78 + A 10.0.0.79 + A 10.0.0.80 + A 10.0.0.81 + A 10.0.0.82 + A 10.0.0.83 + A 10.0.0.84 + A 10.0.0.85 + A 10.0.0.86 + A 10.0.0.87 + A 10.0.0.88 + A 10.0.0.89 + A 10.0.0.90 + A 10.0.0.91 + A 10.0.0.92 + A 10.0.0.93 + A 10.0.0.94 + A 10.0.0.95 + A 10.0.0.96 + A 10.0.0.97 + A 10.0.0.98 + A 10.0.0.99 + A 10.0.0.100 + A 10.0.0.101 + A 10.0.0.102 + A 10.0.0.103 + A 10.0.0.104 + A 10.0.0.105 + A 10.0.0.106 + A 10.0.0.107 + A 10.0.0.108 + A 10.0.0.109 + A 10.0.0.110 + A 10.0.0.111 + A 10.0.0.112 + A 10.0.0.113 + A 10.0.0.114 + A 10.0.0.115 + A 10.0.0.116 + A 10.0.0.117 + A 10.0.0.118 + A 10.0.0.119 + A 10.0.0.120 + A 10.0.0.121 + A 10.0.0.122 + A 10.0.0.123 + A 10.0.0.124 + A 10.0.0.125 + A 10.0.0.126 + A 10.0.0.127 + A 10.0.0.128 + A 10.0.0.129 + A 10.0.0.130 + A 10.0.0.131 + A 10.0.0.132 + A 10.0.0.133 + A 10.0.0.134 + A 10.0.0.135 + A 10.0.0.136 + A 10.0.0.137 + A 10.0.0.138 + A 10.0.0.139 + A 10.0.0.140 + A 10.0.0.141 + A 10.0.0.142 + A 10.0.0.143 + A 10.0.0.144 + A 10.0.0.145 + A 10.0.0.146 + A 10.0.0.147 + A 10.0.0.148 + A 10.0.0.149 + A 10.0.0.150 + A 10.0.0.151 + A 10.0.0.152 + A 10.0.0.153 + A 10.0.0.154 + A 10.0.0.155 + A 10.0.0.156 + A 10.0.0.157 + A 10.0.0.158 + A 10.0.0.159 + A 10.0.0.160 + A 10.0.0.161 + A 10.0.0.162 + A 10.0.0.163 + A 10.0.0.164 + A 10.0.0.165 + A 10.0.0.166 + A 10.0.0.167 + A 10.0.0.168 + A 10.0.0.169 + A 10.0.0.170 + A 10.0.0.171 + A 10.0.0.172 + A 10.0.0.173 + A 10.0.0.174 + A 10.0.0.175 + A 10.0.0.176 + A 10.0.0.177 + A 10.0.0.178 + A 10.0.0.179 + A 10.0.0.180 + A 10.0.0.181 + A 10.0.0.182 + A 10.0.0.183 + A 10.0.0.184 + A 10.0.0.185 + A 10.0.0.186 + A 10.0.0.187 + A 10.0.0.188 + A 10.0.0.189 + A 10.0.0.190 + A 10.0.0.191 + A 10.0.0.192 + A 10.0.0.193 + A 10.0.0.194 + A 10.0.0.195 + A 10.0.0.196 + A 10.0.0.197 + A 10.0.0.198 + A 10.0.0.199 + A 10.0.0.200 + A 10.0.0.201 + A 10.0.0.202 + A 10.0.0.203 + A 10.0.0.204 + A 10.0.0.205 + A 10.0.0.206 + A 10.0.0.207 + A 10.0.0.208 + A 10.0.0.209 + A 10.0.0.210 + A 10.0.0.211 + A 10.0.0.212 + A 10.0.0.213 + A 10.0.0.214 + A 10.0.0.215 + A 10.0.0.216 + A 10.0.0.217 + A 10.0.0.218 + A 10.0.0.219 + A 10.0.0.220 + A 10.0.0.221 + A 10.0.0.222 + A 10.0.0.223 + A 10.0.0.224 + A 10.0.0.225 + A 10.0.0.226 + A 10.0.0.227 + A 10.0.0.228 + A 10.0.0.229 + A 10.0.0.230 + A 10.0.0.231 + A 10.0.0.232 + A 10.0.0.233 + A 10.0.0.234 + A 10.0.0.235 + A 10.0.0.236 + A 10.0.0.237 + A 10.0.0.238 + A 10.0.0.239 + A 10.0.0.240 + A 10.0.0.241 + A 10.0.0.242 + A 10.0.0.243 + A 10.0.0.244 + A 10.0.0.245 + A 10.0.0.246 + A 10.0.0.247 + A 10.0.0.248 + A 10.0.0.249 + A 10.0.0.250 + A 10.0.0.251 + A 10.0.0.252 + A 10.0.0.253 + A 10.0.0.254 + A 10.0.0.255 + A 10.0.1.0 + A 10.0.1.1 + A 10.0.1.2 + A 10.0.1.3 + A 10.0.1.4 + A 10.0.1.5 + A 10.0.1.6 + A 10.0.1.7 + A 10.0.1.8 + A 10.0.1.9 + A 10.0.1.10 + A 10.0.1.11 + A 10.0.1.12 + A 10.0.1.13 + A 10.0.1.14 + A 10.0.1.15 + A 10.0.1.16 + A 10.0.1.17 + A 10.0.1.18 + A 10.0.1.19 + A 10.0.1.20 + A 10.0.1.21 + A 10.0.1.22 + A 10.0.1.23 + A 10.0.1.24 + A 10.0.1.25 + A 10.0.1.26 + A 10.0.1.27 + A 10.0.1.28 + A 10.0.1.29 + A 10.0.1.30 + A 10.0.1.31 + A 10.0.1.32 + A 10.0.1.33 + A 10.0.1.34 + A 10.0.1.35 + A 10.0.1.36 + A 10.0.1.37 + A 10.0.1.38 + A 10.0.1.39 + A 10.0.1.40 + A 10.0.1.41 + A 10.0.1.42 + A 10.0.1.43 + A 10.0.1.44 + A 10.0.1.45 + A 10.0.1.46 + A 10.0.1.47 + A 10.0.1.48 + A 10.0.1.49 + A 10.0.1.50 + A 10.0.1.51 + A 10.0.1.52 + A 10.0.1.53 + A 10.0.1.54 + A 10.0.1.55 + A 10.0.1.56 + A 10.0.1.57 + A 10.0.1.58 + A 10.0.1.59 + A 10.0.1.60 + A 10.0.1.61 + A 10.0.1.62 + A 10.0.1.63 + A 10.0.1.64 + A 10.0.1.65 + A 10.0.1.66 + A 10.0.1.67 + A 10.0.1.68 + A 10.0.1.69 + A 10.0.1.70 + A 10.0.1.71 + A 10.0.1.72 + A 10.0.1.73 + A 10.0.1.74 + A 10.0.1.75 + A 10.0.1.76 + A 10.0.1.77 + A 10.0.1.78 + A 10.0.1.79 + A 10.0.1.80 + A 10.0.1.81 + A 10.0.1.82 + A 10.0.1.83 + A 10.0.1.84 + A 10.0.1.85 + A 10.0.1.86 + A 10.0.1.87 + A 10.0.1.88 + A 10.0.1.89 + A 10.0.1.90 + A 10.0.1.91 + A 10.0.1.92 + A 10.0.1.93 + A 10.0.1.94 + A 10.0.1.95 + A 10.0.1.96 + A 10.0.1.97 + A 10.0.1.98 + A 10.0.1.99 + A 10.0.1.100 + A 10.0.1.101 + A 10.0.1.102 + A 10.0.1.103 + A 10.0.1.104 + A 10.0.1.105 + A 10.0.1.106 + A 10.0.1.107 + A 10.0.1.108 + A 10.0.1.109 + A 10.0.1.110 + A 10.0.1.111 + A 10.0.1.112 + A 10.0.1.113 + A 10.0.1.114 + A 10.0.1.115 + A 10.0.1.116 + A 10.0.1.117 + A 10.0.1.118 + A 10.0.1.119 + A 10.0.1.120 + A 10.0.1.121 + A 10.0.1.122 + A 10.0.1.123 + A 10.0.1.124 + A 10.0.1.125 + A 10.0.1.126 + A 10.0.1.127 + A 10.0.1.128 + A 10.0.1.129 + A 10.0.1.130 + A 10.0.1.131 + A 10.0.1.132 + A 10.0.1.133 + A 10.0.1.134 + A 10.0.1.135 + A 10.0.1.136 + A 10.0.1.137 + A 10.0.1.138 + A 10.0.1.139 + A 10.0.1.140 + A 10.0.1.141 + A 10.0.1.142 + A 10.0.1.143 + A 10.0.1.144 + A 10.0.1.145 + A 10.0.1.146 + A 10.0.1.147 + A 10.0.1.148 + A 10.0.1.149 + A 10.0.1.150 + A 10.0.1.151 + A 10.0.1.152 + A 10.0.1.153 + A 10.0.1.154 + A 10.0.1.155 + A 10.0.1.156 + A 10.0.1.157 + A 10.0.1.158 + A 10.0.1.159 + A 10.0.1.160 + A 10.0.1.161 + A 10.0.1.162 + A 10.0.1.163 + A 10.0.1.164 + A 10.0.1.165 + A 10.0.1.166 + A 10.0.1.167 + A 10.0.1.168 + A 10.0.1.169 + A 10.0.1.170 + A 10.0.1.171 + A 10.0.1.172 + A 10.0.1.173 + A 10.0.1.174 + A 10.0.1.175 + A 10.0.1.176 + A 10.0.1.177 + A 10.0.1.178 + A 10.0.1.179 + A 10.0.1.180 + A 10.0.1.181 + A 10.0.1.182 + A 10.0.1.183 + A 10.0.1.184 + A 10.0.1.185 + A 10.0.1.186 + A 10.0.1.187 + A 10.0.1.188 + A 10.0.1.189 + A 10.0.1.190 + A 10.0.1.191 + A 10.0.1.192 + A 10.0.1.193 + A 10.0.1.194 + A 10.0.1.195 + A 10.0.1.196 + A 10.0.1.197 + A 10.0.1.198 + A 10.0.1.199 + A 10.0.1.200 + A 10.0.1.201 + A 10.0.1.202 + A 10.0.1.203 + A 10.0.1.204 + A 10.0.1.205 + A 10.0.1.206 + A 10.0.1.207 + A 10.0.1.208 + A 10.0.1.209 + A 10.0.1.210 + A 10.0.1.211 + A 10.0.1.212 + A 10.0.1.213 + A 10.0.1.214 + A 10.0.1.215 + A 10.0.1.216 + A 10.0.1.217 + A 10.0.1.218 + A 10.0.1.219 + A 10.0.1.220 + A 10.0.1.221 + A 10.0.1.222 + A 10.0.1.223 + A 10.0.1.224 + A 10.0.1.225 + A 10.0.1.226 + A 10.0.1.227 + A 10.0.1.228 + A 10.0.1.229 + A 10.0.1.230 + A 10.0.1.231 + A 10.0.1.232 + A 10.0.1.233 + A 10.0.1.234 + A 10.0.1.235 + A 10.0.1.236 + A 10.0.1.237 + A 10.0.1.238 + A 10.0.1.239 + A 10.0.1.240 + A 10.0.1.241 + A 10.0.1.242 + A 10.0.1.243 + A 10.0.1.244 + A 10.0.1.245 + A 10.0.1.246 + A 10.0.1.247 + A 10.0.1.248 + A 10.0.1.249 + A 10.0.1.250 + A 10.0.1.251 + A 10.0.1.252 + A 10.0.1.253 + A 10.0.1.254 + A 10.0.1.255 + A 10.0.2.0 + A 10.0.2.1 + A 10.0.2.2 + A 10.0.2.3 + A 10.0.2.4 + A 10.0.2.5 + A 10.0.2.6 + A 10.0.2.7 + A 10.0.2.8 + A 10.0.2.9 + A 10.0.2.10 + A 10.0.2.11 + A 10.0.2.12 + A 10.0.2.13 + A 10.0.2.14 + A 10.0.2.15 + A 10.0.2.16 + A 10.0.2.17 + A 10.0.2.18 + A 10.0.2.19 + A 10.0.2.20 + A 10.0.2.21 + A 10.0.2.22 + A 10.0.2.23 + A 10.0.2.24 + A 10.0.2.25 + A 10.0.2.26 + A 10.0.2.27 + A 10.0.2.28 + A 10.0.2.29 + A 10.0.2.30 + A 10.0.2.31 + A 10.0.2.32 + A 10.0.2.33 + A 10.0.2.34 + A 10.0.2.35 + A 10.0.2.36 + A 10.0.2.37 + A 10.0.2.38 + A 10.0.2.39 + A 10.0.2.40 + A 10.0.2.41 + A 10.0.2.42 + A 10.0.2.43 + A 10.0.2.44 + A 10.0.2.45 + A 10.0.2.46 + A 10.0.2.47 + A 10.0.2.48 + A 10.0.2.49 + A 10.0.2.50 + A 10.0.2.51 + A 10.0.2.52 + A 10.0.2.53 + A 10.0.2.54 + A 10.0.2.55 + A 10.0.2.56 + A 10.0.2.57 + A 10.0.2.58 + A 10.0.2.59 + A 10.0.2.60 + A 10.0.2.61 + A 10.0.2.62 + A 10.0.2.63 + A 10.0.2.64 + A 10.0.2.65 + A 10.0.2.66 + A 10.0.2.67 + A 10.0.2.68 + A 10.0.2.69 + A 10.0.2.70 + A 10.0.2.71 + A 10.0.2.72 + A 10.0.2.73 + A 10.0.2.74 + A 10.0.2.75 + A 10.0.2.76 + A 10.0.2.77 + A 10.0.2.78 + A 10.0.2.79 + A 10.0.2.80 + A 10.0.2.81 + A 10.0.2.82 + A 10.0.2.83 + A 10.0.2.84 + A 10.0.2.85 + A 10.0.2.86 + A 10.0.2.87 + A 10.0.2.88 + A 10.0.2.89 + A 10.0.2.90 + A 10.0.2.91 + A 10.0.2.92 + A 10.0.2.93 + A 10.0.2.94 + A 10.0.2.95 + A 10.0.2.96 + A 10.0.2.97 + A 10.0.2.98 + A 10.0.2.99 + A 10.0.2.100 + A 10.0.2.101 + A 10.0.2.102 + A 10.0.2.103 + A 10.0.2.104 + A 10.0.2.105 + A 10.0.2.106 + A 10.0.2.107 + A 10.0.2.108 + A 10.0.2.109 + A 10.0.2.110 + A 10.0.2.111 + A 10.0.2.112 + A 10.0.2.113 + A 10.0.2.114 + A 10.0.2.115 + A 10.0.2.116 + A 10.0.2.117 + A 10.0.2.118 + A 10.0.2.119 + A 10.0.2.120 + A 10.0.2.121 + A 10.0.2.122 + A 10.0.2.123 + A 10.0.2.124 + A 10.0.2.125 + A 10.0.2.126 + A 10.0.2.127 + A 10.0.2.128 + A 10.0.2.129 + A 10.0.2.130 + A 10.0.2.131 + A 10.0.2.132 + A 10.0.2.133 + A 10.0.2.134 + A 10.0.2.135 + A 10.0.2.136 + A 10.0.2.137 + A 10.0.2.138 + A 10.0.2.139 + A 10.0.2.140 + A 10.0.2.141 + A 10.0.2.142 + A 10.0.2.143 + A 10.0.2.144 + A 10.0.2.145 + A 10.0.2.146 + A 10.0.2.147 + A 10.0.2.148 + A 10.0.2.149 + A 10.0.2.150 + A 10.0.2.151 + A 10.0.2.152 + A 10.0.2.153 + A 10.0.2.154 + A 10.0.2.155 + A 10.0.2.156 + A 10.0.2.157 + A 10.0.2.158 + A 10.0.2.159 + A 10.0.2.160 + A 10.0.2.161 + A 10.0.2.162 + A 10.0.2.163 + A 10.0.2.164 + A 10.0.2.165 + A 10.0.2.166 + A 10.0.2.167 + A 10.0.2.168 + A 10.0.2.169 + A 10.0.2.170 + A 10.0.2.171 + A 10.0.2.172 + A 10.0.2.173 + A 10.0.2.174 + A 10.0.2.175 + A 10.0.2.176 + A 10.0.2.177 + A 10.0.2.178 + A 10.0.2.179 + A 10.0.2.180 + A 10.0.2.181 + A 10.0.2.182 + A 10.0.2.183 + A 10.0.2.184 + A 10.0.2.185 + A 10.0.2.186 + A 10.0.2.187 + A 10.0.2.188 + A 10.0.2.189 + A 10.0.2.190 + A 10.0.2.191 + A 10.0.2.192 + A 10.0.2.193 + A 10.0.2.194 + A 10.0.2.195 + A 10.0.2.196 + A 10.0.2.197 + A 10.0.2.198 + A 10.0.2.199 + A 10.0.2.200 + A 10.0.2.201 + A 10.0.2.202 + A 10.0.2.203 + A 10.0.2.204 + A 10.0.2.205 + A 10.0.2.206 + A 10.0.2.207 + A 10.0.2.208 + A 10.0.2.209 + A 10.0.2.210 + A 10.0.2.211 + A 10.0.2.212 + A 10.0.2.213 + A 10.0.2.214 + A 10.0.2.215 + A 10.0.2.216 + A 10.0.2.217 + A 10.0.2.218 + A 10.0.2.219 + A 10.0.2.220 + A 10.0.2.221 + A 10.0.2.222 + A 10.0.2.223 + A 10.0.2.224 + A 10.0.2.225 + A 10.0.2.226 + A 10.0.2.227 + A 10.0.2.228 + A 10.0.2.229 + A 10.0.2.230 + A 10.0.2.231 + A 10.0.2.232 + A 10.0.2.233 + A 10.0.2.234 + A 10.0.2.235 + A 10.0.2.236 + A 10.0.2.237 + A 10.0.2.238 + A 10.0.2.239 + A 10.0.2.240 + A 10.0.2.241 + A 10.0.2.242 + A 10.0.2.243 + A 10.0.2.244 + A 10.0.2.245 + A 10.0.2.246 + A 10.0.2.247 + A 10.0.2.248 + A 10.0.2.249 + A 10.0.2.250 + A 10.0.2.251 + A 10.0.2.252 + A 10.0.2.253 + A 10.0.2.254 + A 10.0.2.255 + A 10.0.3.0 + A 10.0.3.1 + A 10.0.3.2 + A 10.0.3.3 + A 10.0.3.4 + A 10.0.3.5 + A 10.0.3.6 + A 10.0.3.7 + A 10.0.3.8 + A 10.0.3.9 + A 10.0.3.10 + A 10.0.3.11 + A 10.0.3.12 + A 10.0.3.13 + A 10.0.3.14 + A 10.0.3.15 + A 10.0.3.16 + A 10.0.3.17 + A 10.0.3.18 + A 10.0.3.19 + A 10.0.3.20 + A 10.0.3.21 + A 10.0.3.22 + A 10.0.3.23 + A 10.0.3.24 + A 10.0.3.25 + A 10.0.3.26 + A 10.0.3.27 + A 10.0.3.28 + A 10.0.3.29 + A 10.0.3.30 + A 10.0.3.31 + A 10.0.3.32 + A 10.0.3.33 + A 10.0.3.34 + A 10.0.3.35 + A 10.0.3.36 + A 10.0.3.37 + A 10.0.3.38 + A 10.0.3.39 + A 10.0.3.40 + A 10.0.3.41 + A 10.0.3.42 + A 10.0.3.43 + A 10.0.3.44 + A 10.0.3.45 + A 10.0.3.46 + A 10.0.3.47 + A 10.0.3.48 + A 10.0.3.49 + A 10.0.3.50 + A 10.0.3.51 + A 10.0.3.52 + A 10.0.3.53 + A 10.0.3.54 + A 10.0.3.55 + A 10.0.3.56 + A 10.0.3.57 + A 10.0.3.58 + A 10.0.3.59 + A 10.0.3.60 + A 10.0.3.61 + A 10.0.3.62 + A 10.0.3.63 + A 10.0.3.64 + A 10.0.3.65 + A 10.0.3.66 + A 10.0.3.67 + A 10.0.3.68 + A 10.0.3.69 + A 10.0.3.70 + A 10.0.3.71 + A 10.0.3.72 + A 10.0.3.73 + A 10.0.3.74 + A 10.0.3.75 + A 10.0.3.76 + A 10.0.3.77 + A 10.0.3.78 + A 10.0.3.79 + A 10.0.3.80 + A 10.0.3.81 + A 10.0.3.82 + A 10.0.3.83 + A 10.0.3.84 + A 10.0.3.85 + A 10.0.3.86 + A 10.0.3.87 + A 10.0.3.88 + A 10.0.3.89 + A 10.0.3.90 + A 10.0.3.91 + A 10.0.3.92 + A 10.0.3.93 + A 10.0.3.94 + A 10.0.3.95 + A 10.0.3.96 + A 10.0.3.97 + A 10.0.3.98 + A 10.0.3.99 + A 10.0.3.100 + A 10.0.3.101 + A 10.0.3.102 + A 10.0.3.103 + A 10.0.3.104 + A 10.0.3.105 + A 10.0.3.106 + A 10.0.3.107 + A 10.0.3.108 + A 10.0.3.109 + A 10.0.3.110 + A 10.0.3.111 + A 10.0.3.112 + A 10.0.3.113 + A 10.0.3.114 + A 10.0.3.115 + A 10.0.3.116 + A 10.0.3.117 + A 10.0.3.118 + A 10.0.3.119 + A 10.0.3.120 + A 10.0.3.121 + A 10.0.3.122 + A 10.0.3.123 + A 10.0.3.124 + A 10.0.3.125 + A 10.0.3.126 + A 10.0.3.127 + A 10.0.3.128 + A 10.0.3.129 + A 10.0.3.130 + A 10.0.3.131 + A 10.0.3.132 + A 10.0.3.133 + A 10.0.3.134 + A 10.0.3.135 + A 10.0.3.136 + A 10.0.3.137 + A 10.0.3.138 + A 10.0.3.139 + A 10.0.3.140 + A 10.0.3.141 + A 10.0.3.142 + A 10.0.3.143 + A 10.0.3.144 + A 10.0.3.145 + A 10.0.3.146 + A 10.0.3.147 + A 10.0.3.148 + A 10.0.3.149 + A 10.0.3.150 + A 10.0.3.151 + A 10.0.3.152 + A 10.0.3.153 + A 10.0.3.154 + A 10.0.3.155 + A 10.0.3.156 + A 10.0.3.157 + A 10.0.3.158 + A 10.0.3.159 + A 10.0.3.160 + A 10.0.3.161 + A 10.0.3.162 + A 10.0.3.163 + A 10.0.3.164 + A 10.0.3.165 + A 10.0.3.166 + A 10.0.3.167 + A 10.0.3.168 + A 10.0.3.169 + A 10.0.3.170 + A 10.0.3.171 + A 10.0.3.172 + A 10.0.3.173 + A 10.0.3.174 + A 10.0.3.175 + A 10.0.3.176 + A 10.0.3.177 + A 10.0.3.178 + A 10.0.3.179 + A 10.0.3.180 + A 10.0.3.181 + A 10.0.3.182 + A 10.0.3.183 + A 10.0.3.184 + A 10.0.3.185 + A 10.0.3.186 + A 10.0.3.187 + A 10.0.3.188 + A 10.0.3.189 + A 10.0.3.190 + A 10.0.3.191 + A 10.0.3.192 + A 10.0.3.193 + A 10.0.3.194 + A 10.0.3.195 + A 10.0.3.196 + A 10.0.3.197 + A 10.0.3.198 + A 10.0.3.199 + A 10.0.3.200 + A 10.0.3.201 + A 10.0.3.202 + A 10.0.3.203 + A 10.0.3.204 + A 10.0.3.205 + A 10.0.3.206 + A 10.0.3.207 + A 10.0.3.208 + A 10.0.3.209 + A 10.0.3.210 + A 10.0.3.211 + A 10.0.3.212 + A 10.0.3.213 + A 10.0.3.214 + A 10.0.3.215 + A 10.0.3.216 + A 10.0.3.217 + A 10.0.3.218 + A 10.0.3.219 + A 10.0.3.220 + A 10.0.3.221 + A 10.0.3.222 + A 10.0.3.223 + A 10.0.3.224 + A 10.0.3.225 + A 10.0.3.226 + A 10.0.3.227 + A 10.0.3.228 + A 10.0.3.229 + A 10.0.3.230 + A 10.0.3.231 + A 10.0.3.232 + A 10.0.3.233 + A 10.0.3.234 + A 10.0.3.235 + A 10.0.3.236 + A 10.0.3.237 + A 10.0.3.238 + A 10.0.3.239 + A 10.0.3.240 + A 10.0.3.241 + A 10.0.3.242 + A 10.0.3.243 + A 10.0.3.244 + A 10.0.3.245 + A 10.0.3.246 + A 10.0.3.247 + A 10.0.3.248 + A 10.0.3.249 + A 10.0.3.250 + A 10.0.3.251 + A 10.0.3.252 + A 10.0.3.253 + A 10.0.3.254 + A 10.0.3.255 + A 10.0.4.0 + A 10.0.4.1 + A 10.0.4.2 + A 10.0.4.3 + A 10.0.4.4 + A 10.0.4.5 + A 10.0.4.6 + A 10.0.4.7 + A 10.0.4.8 + A 10.0.4.9 + A 10.0.4.10 + A 10.0.4.11 + A 10.0.4.12 + A 10.0.4.13 + A 10.0.4.14 + A 10.0.4.15 + A 10.0.4.16 + A 10.0.4.17 + A 10.0.4.18 + A 10.0.4.19 + A 10.0.4.20 + A 10.0.4.21 + A 10.0.4.22 + A 10.0.4.23 + A 10.0.4.24 + A 10.0.4.25 + A 10.0.4.26 + A 10.0.4.27 + A 10.0.4.28 + A 10.0.4.29 + A 10.0.4.30 + A 10.0.4.31 + A 10.0.4.32 + A 10.0.4.33 + A 10.0.4.34 + A 10.0.4.35 + A 10.0.4.36 + A 10.0.4.37 + A 10.0.4.38 + A 10.0.4.39 + A 10.0.4.40 + A 10.0.4.41 + A 10.0.4.42 + A 10.0.4.43 + A 10.0.4.44 + A 10.0.4.45 + A 10.0.4.46 + A 10.0.4.47 + A 10.0.4.48 + A 10.0.4.49 + A 10.0.4.50 + A 10.0.4.51 + A 10.0.4.52 + A 10.0.4.53 + A 10.0.4.54 + A 10.0.4.55 + A 10.0.4.56 + A 10.0.4.57 + A 10.0.4.58 + A 10.0.4.59 + A 10.0.4.60 + A 10.0.4.61 + A 10.0.4.62 + A 10.0.4.63 + A 10.0.4.64 + A 10.0.4.65 + A 10.0.4.66 + A 10.0.4.67 + A 10.0.4.68 + A 10.0.4.69 + A 10.0.4.70 + A 10.0.4.71 + A 10.0.4.72 + A 10.0.4.73 + A 10.0.4.74 + A 10.0.4.75 + A 10.0.4.76 + A 10.0.4.77 + A 10.0.4.78 + A 10.0.4.79 + A 10.0.4.80 + A 10.0.4.81 + A 10.0.4.82 + A 10.0.4.83 + A 10.0.4.84 + A 10.0.4.85 + A 10.0.4.86 + A 10.0.4.87 + A 10.0.4.88 + A 10.0.4.89 + A 10.0.4.90 + A 10.0.4.91 + A 10.0.4.92 + A 10.0.4.93 + A 10.0.4.94 + A 10.0.4.95 + A 10.0.4.96 + A 10.0.4.97 + A 10.0.4.98 + A 10.0.4.99 + A 10.0.4.100 + A 10.0.4.101 + A 10.0.4.102 + A 10.0.4.103 + A 10.0.4.104 + A 10.0.4.105 + A 10.0.4.106 + A 10.0.4.107 + A 10.0.4.108 + A 10.0.4.109 + A 10.0.4.110 + A 10.0.4.111 + A 10.0.4.112 + A 10.0.4.113 + A 10.0.4.114 + A 10.0.4.115 + A 10.0.4.116 + A 10.0.4.117 + A 10.0.4.118 + A 10.0.4.119 + A 10.0.4.120 + A 10.0.4.121 + A 10.0.4.122 + A 10.0.4.123 + A 10.0.4.124 + A 10.0.4.125 + A 10.0.4.126 + A 10.0.4.127 + A 10.0.4.128 + A 10.0.4.129 + A 10.0.4.130 + A 10.0.4.131 + A 10.0.4.132 + A 10.0.4.133 + A 10.0.4.134 + A 10.0.4.135 + A 10.0.4.136 + A 10.0.4.137 + A 10.0.4.138 + A 10.0.4.139 + A 10.0.4.140 + A 10.0.4.141 + A 10.0.4.142 + A 10.0.4.143 + A 10.0.4.144 + A 10.0.4.145 + A 10.0.4.146 + A 10.0.4.147 + A 10.0.4.148 + A 10.0.4.149 + A 10.0.4.150 + A 10.0.4.151 + A 10.0.4.152 + A 10.0.4.153 + A 10.0.4.154 + A 10.0.4.155 + A 10.0.4.156 + A 10.0.4.157 + A 10.0.4.158 + A 10.0.4.159 + A 10.0.4.160 + A 10.0.4.161 + A 10.0.4.162 + A 10.0.4.163 + A 10.0.4.164 + A 10.0.4.165 + A 10.0.4.166 + A 10.0.4.167 + A 10.0.4.168 + A 10.0.4.169 + A 10.0.4.170 + A 10.0.4.171 + A 10.0.4.172 + A 10.0.4.173 + A 10.0.4.174 + A 10.0.4.175 + A 10.0.4.176 + A 10.0.4.177 + A 10.0.4.178 + A 10.0.4.179 + A 10.0.4.180 + A 10.0.4.181 + A 10.0.4.182 + A 10.0.4.183 + A 10.0.4.184 + A 10.0.4.185 + A 10.0.4.186 + A 10.0.4.187 + A 10.0.4.188 + A 10.0.4.189 + A 10.0.4.190 + A 10.0.4.191 + A 10.0.4.192 + A 10.0.4.193 + A 10.0.4.194 + A 10.0.4.195 + A 10.0.4.196 + A 10.0.4.197 + A 10.0.4.198 + A 10.0.4.199 + A 10.0.4.200 + A 10.0.4.201 + A 10.0.4.202 + A 10.0.4.203 + A 10.0.4.204 + A 10.0.4.205 + A 10.0.4.206 + A 10.0.4.207 + A 10.0.4.208 + A 10.0.4.209 + A 10.0.4.210 + A 10.0.4.211 + A 10.0.4.212 + A 10.0.4.213 + A 10.0.4.214 + A 10.0.4.215 + A 10.0.4.216 + A 10.0.4.217 + A 10.0.4.218 + A 10.0.4.219 + A 10.0.4.220 + A 10.0.4.221 + A 10.0.4.222 + A 10.0.4.223 + A 10.0.4.224 + A 10.0.4.225 + A 10.0.4.226 + A 10.0.4.227 + A 10.0.4.228 + A 10.0.4.229 + A 10.0.4.230 + A 10.0.4.231 + A 10.0.4.232 + A 10.0.4.233 + A 10.0.4.234 + A 10.0.4.235 + A 10.0.4.236 + A 10.0.4.237 + A 10.0.4.238 + A 10.0.4.239 + A 10.0.4.240 + A 10.0.4.241 + A 10.0.4.242 + A 10.0.4.243 + A 10.0.4.244 + A 10.0.4.245 + A 10.0.4.246 + A 10.0.4.247 + A 10.0.4.248 + A 10.0.4.249 + A 10.0.4.250 + A 10.0.4.251 + A 10.0.4.252 + A 10.0.4.253 + A 10.0.4.254 + A 10.0.4.255 + A 10.0.5.0 + A 10.0.5.1 + A 10.0.5.2 + A 10.0.5.3 + A 10.0.5.4 + A 10.0.5.5 + A 10.0.5.6 + A 10.0.5.7 + A 10.0.5.8 + A 10.0.5.9 + A 10.0.5.10 + A 10.0.5.11 + A 10.0.5.12 + A 10.0.5.13 + A 10.0.5.14 + A 10.0.5.15 + A 10.0.5.16 + A 10.0.5.17 + A 10.0.5.18 + A 10.0.5.19 + A 10.0.5.20 + A 10.0.5.21 + A 10.0.5.22 + A 10.0.5.23 + A 10.0.5.24 + A 10.0.5.25 + A 10.0.5.26 + A 10.0.5.27 + A 10.0.5.28 + A 10.0.5.29 + A 10.0.5.30 + A 10.0.5.31 + A 10.0.5.32 + A 10.0.5.33 + A 10.0.5.34 + A 10.0.5.35 + A 10.0.5.36 + A 10.0.5.37 + A 10.0.5.38 + A 10.0.5.39 + A 10.0.5.40 + A 10.0.5.41 + A 10.0.5.42 + A 10.0.5.43 + A 10.0.5.44 + A 10.0.5.45 + A 10.0.5.46 + A 10.0.5.47 + A 10.0.5.48 + A 10.0.5.49 + A 10.0.5.50 + A 10.0.5.51 + A 10.0.5.52 + A 10.0.5.53 + A 10.0.5.54 + A 10.0.5.55 + A 10.0.5.56 + A 10.0.5.57 + A 10.0.5.58 + A 10.0.5.59 + A 10.0.5.60 + A 10.0.5.61 + A 10.0.5.62 + A 10.0.5.63 + A 10.0.5.64 + A 10.0.5.65 + A 10.0.5.66 + A 10.0.5.67 + A 10.0.5.68 + A 10.0.5.69 + A 10.0.5.70 + A 10.0.5.71 + A 10.0.5.72 + A 10.0.5.73 + A 10.0.5.74 + A 10.0.5.75 + A 10.0.5.76 + A 10.0.5.77 + A 10.0.5.78 + A 10.0.5.79 + A 10.0.5.80 + A 10.0.5.81 + A 10.0.5.82 + A 10.0.5.83 + A 10.0.5.84 + A 10.0.5.85 + A 10.0.5.86 + A 10.0.5.87 + A 10.0.5.88 + A 10.0.5.89 + A 10.0.5.90 + A 10.0.5.91 + A 10.0.5.92 + A 10.0.5.93 + A 10.0.5.94 + A 10.0.5.95 + A 10.0.5.96 + A 10.0.5.97 + A 10.0.5.98 + A 10.0.5.99 + A 10.0.5.100 + A 10.0.5.101 + A 10.0.5.102 + A 10.0.5.103 + A 10.0.5.104 + A 10.0.5.105 + A 10.0.5.106 + A 10.0.5.107 + A 10.0.5.108 + A 10.0.5.109 + A 10.0.5.110 + A 10.0.5.111 + A 10.0.5.112 + A 10.0.5.113 + A 10.0.5.114 + A 10.0.5.115 + A 10.0.5.116 + A 10.0.5.117 + A 10.0.5.118 + A 10.0.5.119 + A 10.0.5.120 + A 10.0.5.121 + A 10.0.5.122 + A 10.0.5.123 + A 10.0.5.124 + A 10.0.5.125 + A 10.0.5.126 + A 10.0.5.127 + A 10.0.5.128 + A 10.0.5.129 + A 10.0.5.130 + A 10.0.5.131 + A 10.0.5.132 + A 10.0.5.133 + A 10.0.5.134 + A 10.0.5.135 + A 10.0.5.136 + A 10.0.5.137 + A 10.0.5.138 + A 10.0.5.139 + A 10.0.5.140 + A 10.0.5.141 + A 10.0.5.142 + A 10.0.5.143 + A 10.0.5.144 + A 10.0.5.145 + A 10.0.5.146 + A 10.0.5.147 + A 10.0.5.148 + A 10.0.5.149 + A 10.0.5.150 + A 10.0.5.151 + A 10.0.5.152 + A 10.0.5.153 + A 10.0.5.154 + A 10.0.5.155 + A 10.0.5.156 + A 10.0.5.157 + A 10.0.5.158 + A 10.0.5.159 + A 10.0.5.160 + A 10.0.5.161 + A 10.0.5.162 + A 10.0.5.163 + A 10.0.5.164 + A 10.0.5.165 + A 10.0.5.166 + A 10.0.5.167 + A 10.0.5.168 + A 10.0.5.169 + A 10.0.5.170 + A 10.0.5.171 + A 10.0.5.172 + A 10.0.5.173 + A 10.0.5.174 + A 10.0.5.175 + A 10.0.5.176 + A 10.0.5.177 + A 10.0.5.178 + A 10.0.5.179 + A 10.0.5.180 + A 10.0.5.181 + A 10.0.5.182 + A 10.0.5.183 + A 10.0.5.184 + A 10.0.5.185 + A 10.0.5.186 + A 10.0.5.187 + A 10.0.5.188 + A 10.0.5.189 + A 10.0.5.190 + A 10.0.5.191 + A 10.0.5.192 + A 10.0.5.193 + A 10.0.5.194 + A 10.0.5.195 + A 10.0.5.196 + A 10.0.5.197 + A 10.0.5.198 + A 10.0.5.199 + A 10.0.5.200 + A 10.0.5.201 + A 10.0.5.202 + A 10.0.5.203 + A 10.0.5.204 + A 10.0.5.205 + A 10.0.5.206 + A 10.0.5.207 + A 10.0.5.208 + A 10.0.5.209 + A 10.0.5.210 + A 10.0.5.211 + A 10.0.5.212 + A 10.0.5.213 + A 10.0.5.214 + A 10.0.5.215 + A 10.0.5.216 + A 10.0.5.217 + A 10.0.5.218 + A 10.0.5.219 + A 10.0.5.220 + A 10.0.5.221 + A 10.0.5.222 + A 10.0.5.223 + A 10.0.5.224 + A 10.0.5.225 + A 10.0.5.226 + A 10.0.5.227 + A 10.0.5.228 + A 10.0.5.229 + A 10.0.5.230 + A 10.0.5.231 + A 10.0.5.232 + A 10.0.5.233 + A 10.0.5.234 + A 10.0.5.235 + A 10.0.5.236 + A 10.0.5.237 + A 10.0.5.238 + A 10.0.5.239 + A 10.0.5.240 + A 10.0.5.241 + A 10.0.5.242 + A 10.0.5.243 + A 10.0.5.244 + A 10.0.5.245 + A 10.0.5.246 + A 10.0.5.247 + A 10.0.5.248 + A 10.0.5.249 + A 10.0.5.250 + A 10.0.5.251 + A 10.0.5.252 + A 10.0.5.253 + A 10.0.5.254 + A 10.0.5.255 + A 10.0.6.0 + A 10.0.6.1 + A 10.0.6.2 + A 10.0.6.3 + A 10.0.6.4 + A 10.0.6.5 + A 10.0.6.6 + A 10.0.6.7 + A 10.0.6.8 + A 10.0.6.9 + A 10.0.6.10 + A 10.0.6.11 + A 10.0.6.12 + A 10.0.6.13 + A 10.0.6.14 + A 10.0.6.15 + A 10.0.6.16 + A 10.0.6.17 + A 10.0.6.18 + A 10.0.6.19 + A 10.0.6.20 + A 10.0.6.21 + A 10.0.6.22 + A 10.0.6.23 + A 10.0.6.24 + A 10.0.6.25 + A 10.0.6.26 + A 10.0.6.27 + A 10.0.6.28 + A 10.0.6.29 + A 10.0.6.30 + A 10.0.6.31 + A 10.0.6.32 + A 10.0.6.33 + A 10.0.6.34 + A 10.0.6.35 + A 10.0.6.36 + A 10.0.6.37 + A 10.0.6.38 + A 10.0.6.39 + A 10.0.6.40 + A 10.0.6.41 + A 10.0.6.42 + A 10.0.6.43 + A 10.0.6.44 + A 10.0.6.45 + A 10.0.6.46 + A 10.0.6.47 + A 10.0.6.48 + A 10.0.6.49 + A 10.0.6.50 + A 10.0.6.51 + A 10.0.6.52 + A 10.0.6.53 + A 10.0.6.54 + A 10.0.6.55 + A 10.0.6.56 + A 10.0.6.57 + A 10.0.6.58 + A 10.0.6.59 + A 10.0.6.60 + A 10.0.6.61 + A 10.0.6.62 + A 10.0.6.63 + A 10.0.6.64 + A 10.0.6.65 + A 10.0.6.66 + A 10.0.6.67 + A 10.0.6.68 + A 10.0.6.69 + A 10.0.6.70 + A 10.0.6.71 + A 10.0.6.72 + A 10.0.6.73 + A 10.0.6.74 + A 10.0.6.75 + A 10.0.6.76 + A 10.0.6.77 + A 10.0.6.78 + A 10.0.6.79 + A 10.0.6.80 + A 10.0.6.81 + A 10.0.6.82 + A 10.0.6.83 + A 10.0.6.84 + A 10.0.6.85 + A 10.0.6.86 + A 10.0.6.87 + A 10.0.6.88 + A 10.0.6.89 + A 10.0.6.90 + A 10.0.6.91 + A 10.0.6.92 + A 10.0.6.93 + A 10.0.6.94 + A 10.0.6.95 + A 10.0.6.96 + A 10.0.6.97 + A 10.0.6.98 + A 10.0.6.99 + A 10.0.6.100 + A 10.0.6.101 + A 10.0.6.102 + A 10.0.6.103 + A 10.0.6.104 + A 10.0.6.105 + A 10.0.6.106 + A 10.0.6.107 + A 10.0.6.108 + A 10.0.6.109 + A 10.0.6.110 + A 10.0.6.111 + A 10.0.6.112 + A 10.0.6.113 + A 10.0.6.114 + A 10.0.6.115 + A 10.0.6.116 + A 10.0.6.117 + A 10.0.6.118 + A 10.0.6.119 + A 10.0.6.120 + A 10.0.6.121 + A 10.0.6.122 + A 10.0.6.123 + A 10.0.6.124 + A 10.0.6.125 + A 10.0.6.126 + A 10.0.6.127 + A 10.0.6.128 + A 10.0.6.129 + A 10.0.6.130 + A 10.0.6.131 + A 10.0.6.132 + A 10.0.6.133 + A 10.0.6.134 + A 10.0.6.135 + A 10.0.6.136 + A 10.0.6.137 + A 10.0.6.138 + A 10.0.6.139 + A 10.0.6.140 + A 10.0.6.141 + A 10.0.6.142 + A 10.0.6.143 + A 10.0.6.144 + A 10.0.6.145 + A 10.0.6.146 + A 10.0.6.147 + A 10.0.6.148 + A 10.0.6.149 + A 10.0.6.150 + A 10.0.6.151 + A 10.0.6.152 + A 10.0.6.153 + A 10.0.6.154 + A 10.0.6.155 + A 10.0.6.156 + A 10.0.6.157 + A 10.0.6.158 + A 10.0.6.159 + A 10.0.6.160 + A 10.0.6.161 + A 10.0.6.162 + A 10.0.6.163 + A 10.0.6.164 + A 10.0.6.165 + A 10.0.6.166 + A 10.0.6.167 + A 10.0.6.168 + A 10.0.6.169 + A 10.0.6.170 + A 10.0.6.171 + A 10.0.6.172 + A 10.0.6.173 + A 10.0.6.174 + A 10.0.6.175 + A 10.0.6.176 + A 10.0.6.177 + A 10.0.6.178 + A 10.0.6.179 + A 10.0.6.180 + A 10.0.6.181 + A 10.0.6.182 + A 10.0.6.183 + A 10.0.6.184 + A 10.0.6.185 + A 10.0.6.186 + A 10.0.6.187 + A 10.0.6.188 + A 10.0.6.189 + A 10.0.6.190 + A 10.0.6.191 + A 10.0.6.192 + A 10.0.6.193 + A 10.0.6.194 + A 10.0.6.195 + A 10.0.6.196 + A 10.0.6.197 + A 10.0.6.198 + A 10.0.6.199 + A 10.0.6.200 + A 10.0.6.201 + A 10.0.6.202 + A 10.0.6.203 + A 10.0.6.204 + A 10.0.6.205 + A 10.0.6.206 + A 10.0.6.207 + A 10.0.6.208 + A 10.0.6.209 + A 10.0.6.210 + A 10.0.6.211 + A 10.0.6.212 + A 10.0.6.213 + A 10.0.6.214 + A 10.0.6.215 + A 10.0.6.216 + A 10.0.6.217 + A 10.0.6.218 + A 10.0.6.219 + A 10.0.6.220 + A 10.0.6.221 + A 10.0.6.222 + A 10.0.6.223 + A 10.0.6.224 + A 10.0.6.225 + A 10.0.6.226 + A 10.0.6.227 + A 10.0.6.228 + A 10.0.6.229 + A 10.0.6.230 + A 10.0.6.231 + A 10.0.6.232 + A 10.0.6.233 + A 10.0.6.234 + A 10.0.6.235 + A 10.0.6.236 + A 10.0.6.237 + A 10.0.6.238 + A 10.0.6.239 + A 10.0.6.240 + A 10.0.6.241 + A 10.0.6.242 + A 10.0.6.243 + A 10.0.6.244 + A 10.0.6.245 + A 10.0.6.246 + A 10.0.6.247 + A 10.0.6.248 + A 10.0.6.249 + A 10.0.6.250 + A 10.0.6.251 + A 10.0.6.252 + A 10.0.6.253 + A 10.0.6.254 + A 10.0.6.255 + A 10.0.7.0 + A 10.0.7.1 + A 10.0.7.2 + A 10.0.7.3 + A 10.0.7.4 + A 10.0.7.5 + A 10.0.7.6 + A 10.0.7.7 + A 10.0.7.8 + A 10.0.7.9 + A 10.0.7.10 + A 10.0.7.11 + A 10.0.7.12 + A 10.0.7.13 + A 10.0.7.14 + A 10.0.7.15 + A 10.0.7.16 + A 10.0.7.17 + A 10.0.7.18 + A 10.0.7.19 + A 10.0.7.20 + A 10.0.7.21 + A 10.0.7.22 + A 10.0.7.23 + A 10.0.7.24 + A 10.0.7.25 + A 10.0.7.26 + A 10.0.7.27 + A 10.0.7.28 + A 10.0.7.29 + A 10.0.7.30 + A 10.0.7.31 + A 10.0.7.32 + A 10.0.7.33 + A 10.0.7.34 + A 10.0.7.35 + A 10.0.7.36 + A 10.0.7.37 + A 10.0.7.38 + A 10.0.7.39 + A 10.0.7.40 + A 10.0.7.41 + A 10.0.7.42 + A 10.0.7.43 + A 10.0.7.44 + A 10.0.7.45 + A 10.0.7.46 + A 10.0.7.47 + A 10.0.7.48 + A 10.0.7.49 + A 10.0.7.50 + A 10.0.7.51 + A 10.0.7.52 + A 10.0.7.53 + A 10.0.7.54 + A 10.0.7.55 + A 10.0.7.56 + A 10.0.7.57 + A 10.0.7.58 + A 10.0.7.59 + A 10.0.7.60 + A 10.0.7.61 + A 10.0.7.62 + A 10.0.7.63 + A 10.0.7.64 + A 10.0.7.65 + A 10.0.7.66 + A 10.0.7.67 + A 10.0.7.68 + A 10.0.7.69 + A 10.0.7.70 + A 10.0.7.71 + A 10.0.7.72 + A 10.0.7.73 + A 10.0.7.74 + A 10.0.7.75 + A 10.0.7.76 + A 10.0.7.77 + A 10.0.7.78 + A 10.0.7.79 + A 10.0.7.80 + A 10.0.7.81 + A 10.0.7.82 + A 10.0.7.83 + A 10.0.7.84 + A 10.0.7.85 + A 10.0.7.86 + A 10.0.7.87 + A 10.0.7.88 + A 10.0.7.89 + A 10.0.7.90 + A 10.0.7.91 + A 10.0.7.92 + A 10.0.7.93 + A 10.0.7.94 + A 10.0.7.95 + A 10.0.7.96 + A 10.0.7.97 + A 10.0.7.98 + A 10.0.7.99 + A 10.0.7.100 + A 10.0.7.101 + A 10.0.7.102 + A 10.0.7.103 + A 10.0.7.104 + A 10.0.7.105 + A 10.0.7.106 + A 10.0.7.107 + A 10.0.7.108 + A 10.0.7.109 + A 10.0.7.110 + A 10.0.7.111 + A 10.0.7.112 + A 10.0.7.113 + A 10.0.7.114 + A 10.0.7.115 + A 10.0.7.116 + A 10.0.7.117 + A 10.0.7.118 + A 10.0.7.119 + A 10.0.7.120 + A 10.0.7.121 + A 10.0.7.122 + A 10.0.7.123 + A 10.0.7.124 + A 10.0.7.125 + A 10.0.7.126 + A 10.0.7.127 + A 10.0.7.128 + A 10.0.7.129 + A 10.0.7.130 + A 10.0.7.131 + A 10.0.7.132 + A 10.0.7.133 + A 10.0.7.134 + A 10.0.7.135 + A 10.0.7.136 + A 10.0.7.137 + A 10.0.7.138 + A 10.0.7.139 + A 10.0.7.140 + A 10.0.7.141 + A 10.0.7.142 + A 10.0.7.143 + A 10.0.7.144 + A 10.0.7.145 + A 10.0.7.146 + A 10.0.7.147 + A 10.0.7.148 + A 10.0.7.149 + A 10.0.7.150 + A 10.0.7.151 + A 10.0.7.152 + A 10.0.7.153 + A 10.0.7.154 + A 10.0.7.155 + A 10.0.7.156 + A 10.0.7.157 + A 10.0.7.158 + A 10.0.7.159 + A 10.0.7.160 + A 10.0.7.161 + A 10.0.7.162 + A 10.0.7.163 + A 10.0.7.164 + A 10.0.7.165 + A 10.0.7.166 + A 10.0.7.167 + A 10.0.7.168 + A 10.0.7.169 + A 10.0.7.170 + A 10.0.7.171 + A 10.0.7.172 + A 10.0.7.173 + A 10.0.7.174 + A 10.0.7.175 + A 10.0.7.176 + A 10.0.7.177 + A 10.0.7.178 + A 10.0.7.179 + A 10.0.7.180 + A 10.0.7.181 + A 10.0.7.182 + A 10.0.7.183 + A 10.0.7.184 + A 10.0.7.185 + A 10.0.7.186 + A 10.0.7.187 + A 10.0.7.188 + A 10.0.7.189 + A 10.0.7.190 + A 10.0.7.191 + A 10.0.7.192 + A 10.0.7.193 + A 10.0.7.194 + A 10.0.7.195 + A 10.0.7.196 + A 10.0.7.197 + A 10.0.7.198 + A 10.0.7.199 + A 10.0.7.200 + A 10.0.7.201 + A 10.0.7.202 + A 10.0.7.203 + A 10.0.7.204 + A 10.0.7.205 + A 10.0.7.206 + A 10.0.7.207 + A 10.0.7.208 + A 10.0.7.209 + A 10.0.7.210 + A 10.0.7.211 + A 10.0.7.212 + A 10.0.7.213 + A 10.0.7.214 + A 10.0.7.215 + A 10.0.7.216 + A 10.0.7.217 + A 10.0.7.218 + A 10.0.7.219 + A 10.0.7.220 + A 10.0.7.221 + A 10.0.7.222 + A 10.0.7.223 + A 10.0.7.224 + A 10.0.7.225 + A 10.0.7.226 + A 10.0.7.227 + A 10.0.7.228 + A 10.0.7.229 + A 10.0.7.230 + A 10.0.7.231 + A 10.0.7.232 + A 10.0.7.233 + A 10.0.7.234 + A 10.0.7.235 + A 10.0.7.236 + A 10.0.7.237 + A 10.0.7.238 + A 10.0.7.239 + A 10.0.7.240 + A 10.0.7.241 + A 10.0.7.242 + A 10.0.7.243 + A 10.0.7.244 + A 10.0.7.245 + A 10.0.7.246 + A 10.0.7.247 + A 10.0.7.248 + A 10.0.7.249 + A 10.0.7.250 + A 10.0.7.251 + A 10.0.7.252 + A 10.0.7.253 + A 10.0.7.254 + A 10.0.7.255 + A 10.0.8.0 + A 10.0.8.1 + A 10.0.8.2 + A 10.0.8.3 + A 10.0.8.4 + A 10.0.8.5 + A 10.0.8.6 + A 10.0.8.7 + A 10.0.8.8 + A 10.0.8.9 + A 10.0.8.10 + A 10.0.8.11 + A 10.0.8.12 + A 10.0.8.13 + A 10.0.8.14 + A 10.0.8.15 + A 10.0.8.16 + A 10.0.8.17 + A 10.0.8.18 + A 10.0.8.19 + A 10.0.8.20 + A 10.0.8.21 + A 10.0.8.22 + A 10.0.8.23 + A 10.0.8.24 + A 10.0.8.25 + A 10.0.8.26 + A 10.0.8.27 + A 10.0.8.28 + A 10.0.8.29 + A 10.0.8.30 + A 10.0.8.31 + A 10.0.8.32 + A 10.0.8.33 + A 10.0.8.34 + A 10.0.8.35 + A 10.0.8.36 + A 10.0.8.37 + A 10.0.8.38 + A 10.0.8.39 + A 10.0.8.40 + A 10.0.8.41 + A 10.0.8.42 + A 10.0.8.43 + A 10.0.8.44 + A 10.0.8.45 + A 10.0.8.46 + A 10.0.8.47 + A 10.0.8.48 + A 10.0.8.49 + A 10.0.8.50 + A 10.0.8.51 + A 10.0.8.52 + A 10.0.8.53 + A 10.0.8.54 + A 10.0.8.55 + A 10.0.8.56 + A 10.0.8.57 + A 10.0.8.58 + A 10.0.8.59 + A 10.0.8.60 + A 10.0.8.61 + A 10.0.8.62 + A 10.0.8.63 + A 10.0.8.64 + A 10.0.8.65 + A 10.0.8.66 + A 10.0.8.67 + A 10.0.8.68 + A 10.0.8.69 + A 10.0.8.70 + A 10.0.8.71 + A 10.0.8.72 + A 10.0.8.73 + A 10.0.8.74 + A 10.0.8.75 + A 10.0.8.76 + A 10.0.8.77 + A 10.0.8.78 + A 10.0.8.79 + A 10.0.8.80 + A 10.0.8.81 + A 10.0.8.82 + A 10.0.8.83 + A 10.0.8.84 + A 10.0.8.85 + A 10.0.8.86 + A 10.0.8.87 + A 10.0.8.88 + A 10.0.8.89 + A 10.0.8.90 + A 10.0.8.91 + A 10.0.8.92 + A 10.0.8.93 + A 10.0.8.94 + A 10.0.8.95 + A 10.0.8.96 + A 10.0.8.97 + A 10.0.8.98 + A 10.0.8.99 + A 10.0.8.100 + A 10.0.8.101 + A 10.0.8.102 + A 10.0.8.103 + A 10.0.8.104 + A 10.0.8.105 + A 10.0.8.106 + A 10.0.8.107 + A 10.0.8.108 + A 10.0.8.109 + A 10.0.8.110 + A 10.0.8.111 + A 10.0.8.112 + A 10.0.8.113 + A 10.0.8.114 + A 10.0.8.115 + A 10.0.8.116 + A 10.0.8.117 + A 10.0.8.118 + A 10.0.8.119 + A 10.0.8.120 + A 10.0.8.121 + A 10.0.8.122 + A 10.0.8.123 + A 10.0.8.124 + A 10.0.8.125 + A 10.0.8.126 + A 10.0.8.127 + A 10.0.8.128 + A 10.0.8.129 + A 10.0.8.130 + A 10.0.8.131 + A 10.0.8.132 + A 10.0.8.133 + A 10.0.8.134 + A 10.0.8.135 + A 10.0.8.136 + A 10.0.8.137 + A 10.0.8.138 + A 10.0.8.139 + A 10.0.8.140 + A 10.0.8.141 + A 10.0.8.142 + A 10.0.8.143 + A 10.0.8.144 + A 10.0.8.145 + A 10.0.8.146 + A 10.0.8.147 + A 10.0.8.148 + A 10.0.8.149 + A 10.0.8.150 + A 10.0.8.151 + A 10.0.8.152 + A 10.0.8.153 + A 10.0.8.154 + A 10.0.8.155 + A 10.0.8.156 + A 10.0.8.157 + A 10.0.8.158 + A 10.0.8.159 + A 10.0.8.160 + A 10.0.8.161 + A 10.0.8.162 + A 10.0.8.163 + A 10.0.8.164 + A 10.0.8.165 + A 10.0.8.166 + A 10.0.8.167 + A 10.0.8.168 + A 10.0.8.169 + A 10.0.8.170 + A 10.0.8.171 + A 10.0.8.172 + A 10.0.8.173 + A 10.0.8.174 + A 10.0.8.175 + A 10.0.8.176 + A 10.0.8.177 + A 10.0.8.178 + A 10.0.8.179 + A 10.0.8.180 + A 10.0.8.181 + A 10.0.8.182 + A 10.0.8.183 + A 10.0.8.184 + A 10.0.8.185 + A 10.0.8.186 + A 10.0.8.187 + A 10.0.8.188 + A 10.0.8.189 + A 10.0.8.190 + A 10.0.8.191 + A 10.0.8.192 + A 10.0.8.193 + A 10.0.8.194 + A 10.0.8.195 + A 10.0.8.196 + A 10.0.8.197 + A 10.0.8.198 + A 10.0.8.199 + A 10.0.8.200 + A 10.0.8.201 + A 10.0.8.202 + A 10.0.8.203 + A 10.0.8.204 + A 10.0.8.205 + A 10.0.8.206 + A 10.0.8.207 + A 10.0.8.208 + A 10.0.8.209 + A 10.0.8.210 + A 10.0.8.211 + A 10.0.8.212 + A 10.0.8.213 + A 10.0.8.214 + A 10.0.8.215 + A 10.0.8.216 + A 10.0.8.217 + A 10.0.8.218 + A 10.0.8.219 + A 10.0.8.220 + A 10.0.8.221 + A 10.0.8.222 + A 10.0.8.223 + A 10.0.8.224 + A 10.0.8.225 + A 10.0.8.226 + A 10.0.8.227 + A 10.0.8.228 + A 10.0.8.229 + A 10.0.8.230 + A 10.0.8.231 + A 10.0.8.232 + A 10.0.8.233 + A 10.0.8.234 + A 10.0.8.235 + A 10.0.8.236 + A 10.0.8.237 + A 10.0.8.238 + A 10.0.8.239 + A 10.0.8.240 + A 10.0.8.241 + A 10.0.8.242 + A 10.0.8.243 + A 10.0.8.244 + A 10.0.8.245 + A 10.0.8.246 + A 10.0.8.247 + A 10.0.8.248 + A 10.0.8.249 + A 10.0.8.250 + A 10.0.8.251 + A 10.0.8.252 + A 10.0.8.253 + A 10.0.8.254 + A 10.0.8.255 + A 10.0.9.0 + A 10.0.9.1 + A 10.0.9.2 + A 10.0.9.3 + A 10.0.9.4 + A 10.0.9.5 + A 10.0.9.6 + A 10.0.9.7 + A 10.0.9.8 + A 10.0.9.9 + A 10.0.9.10 + A 10.0.9.11 + A 10.0.9.12 + A 10.0.9.13 + A 10.0.9.14 + A 10.0.9.15 + A 10.0.9.16 + A 10.0.9.17 + A 10.0.9.18 + A 10.0.9.19 + A 10.0.9.20 + A 10.0.9.21 + A 10.0.9.22 + A 10.0.9.23 + A 10.0.9.24 + A 10.0.9.25 + A 10.0.9.26 + A 10.0.9.27 + A 10.0.9.28 + A 10.0.9.29 + A 10.0.9.30 + A 10.0.9.31 + A 10.0.9.32 + A 10.0.9.33 + A 10.0.9.34 + A 10.0.9.35 + A 10.0.9.36 + A 10.0.9.37 + A 10.0.9.38 + A 10.0.9.39 + A 10.0.9.40 + A 10.0.9.41 + A 10.0.9.42 + A 10.0.9.43 + A 10.0.9.44 + A 10.0.9.45 + A 10.0.9.46 + A 10.0.9.47 + A 10.0.9.48 + A 10.0.9.49 + A 10.0.9.50 + A 10.0.9.51 + A 10.0.9.52 + A 10.0.9.53 + A 10.0.9.54 + A 10.0.9.55 + A 10.0.9.56 + A 10.0.9.57 + A 10.0.9.58 + A 10.0.9.59 + A 10.0.9.60 + A 10.0.9.61 + A 10.0.9.62 + A 10.0.9.63 + A 10.0.9.64 + A 10.0.9.65 + A 10.0.9.66 + A 10.0.9.67 + A 10.0.9.68 + A 10.0.9.69 + A 10.0.9.70 + A 10.0.9.71 + A 10.0.9.72 + A 10.0.9.73 + A 10.0.9.74 + A 10.0.9.75 + A 10.0.9.76 + A 10.0.9.77 + A 10.0.9.78 + A 10.0.9.79 + A 10.0.9.80 + A 10.0.9.81 + A 10.0.9.82 + A 10.0.9.83 + A 10.0.9.84 + A 10.0.9.85 + A 10.0.9.86 + A 10.0.9.87 + A 10.0.9.88 + A 10.0.9.89 + A 10.0.9.90 + A 10.0.9.91 + A 10.0.9.92 + A 10.0.9.93 + A 10.0.9.94 + A 10.0.9.95 + A 10.0.9.96 + A 10.0.9.97 + A 10.0.9.98 + A 10.0.9.99 + A 10.0.9.100 + A 10.0.9.101 + A 10.0.9.102 + A 10.0.9.103 + A 10.0.9.104 + A 10.0.9.105 + A 10.0.9.106 + A 10.0.9.107 + A 10.0.9.108 + A 10.0.9.109 + A 10.0.9.110 + A 10.0.9.111 + A 10.0.9.112 + A 10.0.9.113 + A 10.0.9.114 + A 10.0.9.115 + A 10.0.9.116 + A 10.0.9.117 + A 10.0.9.118 + A 10.0.9.119 + A 10.0.9.120 + A 10.0.9.121 + A 10.0.9.122 + A 10.0.9.123 + A 10.0.9.124 + A 10.0.9.125 + A 10.0.9.126 + A 10.0.9.127 + A 10.0.9.128 + A 10.0.9.129 + A 10.0.9.130 + A 10.0.9.131 + A 10.0.9.132 + A 10.0.9.133 + A 10.0.9.134 + A 10.0.9.135 + A 10.0.9.136 + A 10.0.9.137 + A 10.0.9.138 + A 10.0.9.139 + A 10.0.9.140 + A 10.0.9.141 + A 10.0.9.142 + A 10.0.9.143 + A 10.0.9.144 + A 10.0.9.145 + A 10.0.9.146 + A 10.0.9.147 + A 10.0.9.148 + A 10.0.9.149 + A 10.0.9.150 + A 10.0.9.151 + A 10.0.9.152 + A 10.0.9.153 + A 10.0.9.154 + A 10.0.9.155 + A 10.0.9.156 + A 10.0.9.157 + A 10.0.9.158 + A 10.0.9.159 + A 10.0.9.160 + A 10.0.9.161 + A 10.0.9.162 + A 10.0.9.163 + A 10.0.9.164 + A 10.0.9.165 + A 10.0.9.166 + A 10.0.9.167 + A 10.0.9.168 + A 10.0.9.169 + A 10.0.9.170 + A 10.0.9.171 + A 10.0.9.172 + A 10.0.9.173 + A 10.0.9.174 + A 10.0.9.175 + A 10.0.9.176 + A 10.0.9.177 + A 10.0.9.178 + A 10.0.9.179 + A 10.0.9.180 + A 10.0.9.181 + A 10.0.9.182 + A 10.0.9.183 + A 10.0.9.184 + A 10.0.9.185 + A 10.0.9.186 + A 10.0.9.187 + A 10.0.9.188 + A 10.0.9.189 + A 10.0.9.190 + A 10.0.9.191 + A 10.0.9.192 + A 10.0.9.193 + A 10.0.9.194 + A 10.0.9.195 + A 10.0.9.196 + A 10.0.9.197 + A 10.0.9.198 + A 10.0.9.199 + A 10.0.9.200 + A 10.0.9.201 + A 10.0.9.202 + A 10.0.9.203 + A 10.0.9.204 + A 10.0.9.205 + A 10.0.9.206 + A 10.0.9.207 + A 10.0.9.208 + A 10.0.9.209 + A 10.0.9.210 + A 10.0.9.211 + A 10.0.9.212 + A 10.0.9.213 + A 10.0.9.214 + A 10.0.9.215 + A 10.0.9.216 + A 10.0.9.217 + A 10.0.9.218 + A 10.0.9.219 + A 10.0.9.220 + A 10.0.9.221 + A 10.0.9.222 + A 10.0.9.223 + A 10.0.9.224 + A 10.0.9.225 + A 10.0.9.226 + A 10.0.9.227 + A 10.0.9.228 + A 10.0.9.229 + A 10.0.9.230 + A 10.0.9.231 + A 10.0.9.232 + A 10.0.9.233 + A 10.0.9.234 + A 10.0.9.235 + A 10.0.9.236 + A 10.0.9.237 + A 10.0.9.238 + A 10.0.9.239 + A 10.0.9.240 + A 10.0.9.241 + A 10.0.9.242 + A 10.0.9.243 + A 10.0.9.244 + A 10.0.9.245 + A 10.0.9.246 + A 10.0.9.247 + A 10.0.9.248 + A 10.0.9.249 + A 10.0.9.250 + A 10.0.9.251 + A 10.0.9.252 + A 10.0.9.253 + A 10.0.9.254 + A 10.0.9.255 + A 10.0.10.0 + A 10.0.10.1 + A 10.0.10.2 + A 10.0.10.3 + A 10.0.10.4 + A 10.0.10.5 + A 10.0.10.6 + A 10.0.10.7 + A 10.0.10.8 + A 10.0.10.9 + A 10.0.10.10 + A 10.0.10.11 + A 10.0.10.12 + A 10.0.10.13 + A 10.0.10.14 + A 10.0.10.15 + A 10.0.10.16 + A 10.0.10.17 + A 10.0.10.18 + A 10.0.10.19 + A 10.0.10.20 + A 10.0.10.21 + A 10.0.10.22 + A 10.0.10.23 + A 10.0.10.24 + A 10.0.10.25 + A 10.0.10.26 + A 10.0.10.27 + A 10.0.10.28 + A 10.0.10.29 + A 10.0.10.30 + A 10.0.10.31 + A 10.0.10.32 + A 10.0.10.33 + A 10.0.10.34 + A 10.0.10.35 + A 10.0.10.36 + A 10.0.10.37 + A 10.0.10.38 + A 10.0.10.39 + A 10.0.10.40 + A 10.0.10.41 + A 10.0.10.42 + A 10.0.10.43 + A 10.0.10.44 + A 10.0.10.45 + A 10.0.10.46 + A 10.0.10.47 + A 10.0.10.48 + A 10.0.10.49 + A 10.0.10.50 + A 10.0.10.51 + A 10.0.10.52 + A 10.0.10.53 + A 10.0.10.54 + A 10.0.10.55 + A 10.0.10.56 + A 10.0.10.57 + A 10.0.10.58 + A 10.0.10.59 + A 10.0.10.60 + A 10.0.10.61 + A 10.0.10.62 + A 10.0.10.63 + A 10.0.10.64 + A 10.0.10.65 + A 10.0.10.66 + A 10.0.10.67 + A 10.0.10.68 + A 10.0.10.69 + A 10.0.10.70 + A 10.0.10.71 + A 10.0.10.72 + A 10.0.10.73 + A 10.0.10.74 + A 10.0.10.75 + A 10.0.10.76 + A 10.0.10.77 + A 10.0.10.78 + A 10.0.10.79 + A 10.0.10.80 + A 10.0.10.81 + A 10.0.10.82 + A 10.0.10.83 + A 10.0.10.84 + A 10.0.10.85 + A 10.0.10.86 + A 10.0.10.87 + A 10.0.10.88 + A 10.0.10.89 + A 10.0.10.90 + A 10.0.10.91 + A 10.0.10.92 + A 10.0.10.93 + A 10.0.10.94 + A 10.0.10.95 + A 10.0.10.96 + A 10.0.10.97 + A 10.0.10.98 + A 10.0.10.99 + A 10.0.10.100 + A 10.0.10.101 + A 10.0.10.102 + A 10.0.10.103 + A 10.0.10.104 + A 10.0.10.105 + A 10.0.10.106 + A 10.0.10.107 + A 10.0.10.108 + A 10.0.10.109 + A 10.0.10.110 + A 10.0.10.111 + A 10.0.10.112 + A 10.0.10.113 + A 10.0.10.114 + A 10.0.10.115 + A 10.0.10.116 + A 10.0.10.117 + A 10.0.10.118 + A 10.0.10.119 + A 10.0.10.120 + A 10.0.10.121 + A 10.0.10.122 + A 10.0.10.123 + A 10.0.10.124 + A 10.0.10.125 + A 10.0.10.126 + A 10.0.10.127 + A 10.0.10.128 + A 10.0.10.129 + A 10.0.10.130 + A 10.0.10.131 + A 10.0.10.132 + A 10.0.10.133 + A 10.0.10.134 + A 10.0.10.135 + A 10.0.10.136 + A 10.0.10.137 + A 10.0.10.138 + A 10.0.10.139 + A 10.0.10.140 + A 10.0.10.141 + A 10.0.10.142 + A 10.0.10.143 + A 10.0.10.144 + A 10.0.10.145 + A 10.0.10.146 + A 10.0.10.147 + A 10.0.10.148 + A 10.0.10.149 + A 10.0.10.150 + A 10.0.10.151 + A 10.0.10.152 + A 10.0.10.153 + A 10.0.10.154 + A 10.0.10.155 + A 10.0.10.156 + A 10.0.10.157 + A 10.0.10.158 + A 10.0.10.159 + A 10.0.10.160 + A 10.0.10.161 + A 10.0.10.162 + A 10.0.10.163 + A 10.0.10.164 + A 10.0.10.165 + A 10.0.10.166 + A 10.0.10.167 + A 10.0.10.168 + A 10.0.10.169 + A 10.0.10.170 + A 10.0.10.171 + A 10.0.10.172 + A 10.0.10.173 + A 10.0.10.174 + A 10.0.10.175 + A 10.0.10.176 + A 10.0.10.177 + A 10.0.10.178 + A 10.0.10.179 + A 10.0.10.180 + A 10.0.10.181 + A 10.0.10.182 + A 10.0.10.183 + A 10.0.10.184 + A 10.0.10.185 + A 10.0.10.186 + A 10.0.10.187 + A 10.0.10.188 + A 10.0.10.189 + A 10.0.10.190 + A 10.0.10.191 + A 10.0.10.192 + A 10.0.10.193 + A 10.0.10.194 + A 10.0.10.195 + A 10.0.10.196 + A 10.0.10.197 + A 10.0.10.198 + A 10.0.10.199 + A 10.0.10.200 + A 10.0.10.201 + A 10.0.10.202 + A 10.0.10.203 + A 10.0.10.204 + A 10.0.10.205 + A 10.0.10.206 + A 10.0.10.207 + A 10.0.10.208 + A 10.0.10.209 + A 10.0.10.210 + A 10.0.10.211 + A 10.0.10.212 + A 10.0.10.213 + A 10.0.10.214 + A 10.0.10.215 + A 10.0.10.216 + A 10.0.10.217 + A 10.0.10.218 + A 10.0.10.219 + A 10.0.10.220 + A 10.0.10.221 + A 10.0.10.222 + A 10.0.10.223 + A 10.0.10.224 + A 10.0.10.225 + A 10.0.10.226 + A 10.0.10.227 + A 10.0.10.228 + A 10.0.10.229 + A 10.0.10.230 + A 10.0.10.231 + A 10.0.10.232 + A 10.0.10.233 + A 10.0.10.234 + A 10.0.10.235 + A 10.0.10.236 + A 10.0.10.237 + A 10.0.10.238 + A 10.0.10.239 + A 10.0.10.240 + A 10.0.10.241 + A 10.0.10.242 + A 10.0.10.243 + A 10.0.10.244 + A 10.0.10.245 + A 10.0.10.246 + A 10.0.10.247 + A 10.0.10.248 + A 10.0.10.249 + A 10.0.10.250 + A 10.0.10.251 + A 10.0.10.252 + A 10.0.10.253 + A 10.0.10.254 + A 10.0.10.255 + A 10.0.11.0 + A 10.0.11.1 + A 10.0.11.2 + A 10.0.11.3 + A 10.0.11.4 + A 10.0.11.5 + A 10.0.11.6 + A 10.0.11.7 + A 10.0.11.8 + A 10.0.11.9 + A 10.0.11.10 + A 10.0.11.11 + A 10.0.11.12 + A 10.0.11.13 + A 10.0.11.14 + A 10.0.11.15 + A 10.0.11.16 + A 10.0.11.17 + A 10.0.11.18 + A 10.0.11.19 + A 10.0.11.20 + A 10.0.11.21 + A 10.0.11.22 + A 10.0.11.23 + A 10.0.11.24 + A 10.0.11.25 + A 10.0.11.26 + A 10.0.11.27 + A 10.0.11.28 + A 10.0.11.29 + A 10.0.11.30 + A 10.0.11.31 + A 10.0.11.32 + A 10.0.11.33 + A 10.0.11.34 + A 10.0.11.35 + A 10.0.11.36 + A 10.0.11.37 + A 10.0.11.38 + A 10.0.11.39 + A 10.0.11.40 + A 10.0.11.41 + A 10.0.11.42 + A 10.0.11.43 + A 10.0.11.44 + A 10.0.11.45 + A 10.0.11.46 + A 10.0.11.47 + A 10.0.11.48 + A 10.0.11.49 + A 10.0.11.50 + A 10.0.11.51 + A 10.0.11.52 + A 10.0.11.53 + A 10.0.11.54 + A 10.0.11.55 + A 10.0.11.56 + A 10.0.11.57 + A 10.0.11.58 + A 10.0.11.59 + A 10.0.11.60 + A 10.0.11.61 + A 10.0.11.62 + A 10.0.11.63 + A 10.0.11.64 + A 10.0.11.65 + A 10.0.11.66 + A 10.0.11.67 + A 10.0.11.68 + A 10.0.11.69 + A 10.0.11.70 + A 10.0.11.71 + A 10.0.11.72 + A 10.0.11.73 + A 10.0.11.74 + A 10.0.11.75 + A 10.0.11.76 + A 10.0.11.77 + A 10.0.11.78 + A 10.0.11.79 + A 10.0.11.80 + A 10.0.11.81 + A 10.0.11.82 + A 10.0.11.83 + A 10.0.11.84 + A 10.0.11.85 + A 10.0.11.86 + A 10.0.11.87 + A 10.0.11.88 + A 10.0.11.89 + A 10.0.11.90 + A 10.0.11.91 + A 10.0.11.92 + A 10.0.11.93 + A 10.0.11.94 + A 10.0.11.95 + A 10.0.11.96 + A 10.0.11.97 + A 10.0.11.98 + A 10.0.11.99 + A 10.0.11.100 + A 10.0.11.101 + A 10.0.11.102 + A 10.0.11.103 + A 10.0.11.104 + A 10.0.11.105 + A 10.0.11.106 + A 10.0.11.107 + A 10.0.11.108 + A 10.0.11.109 + A 10.0.11.110 + A 10.0.11.111 + A 10.0.11.112 + A 10.0.11.113 + A 10.0.11.114 + A 10.0.11.115 + A 10.0.11.116 + A 10.0.11.117 + A 10.0.11.118 + A 10.0.11.119 + A 10.0.11.120 + A 10.0.11.121 + A 10.0.11.122 + A 10.0.11.123 + A 10.0.11.124 + A 10.0.11.125 + A 10.0.11.126 + A 10.0.11.127 + A 10.0.11.128 + A 10.0.11.129 + A 10.0.11.130 + A 10.0.11.131 + A 10.0.11.132 + A 10.0.11.133 + A 10.0.11.134 + A 10.0.11.135 + A 10.0.11.136 + A 10.0.11.137 + A 10.0.11.138 + A 10.0.11.139 + A 10.0.11.140 + A 10.0.11.141 + A 10.0.11.142 + A 10.0.11.143 + A 10.0.11.144 + A 10.0.11.145 + A 10.0.11.146 + A 10.0.11.147 + A 10.0.11.148 + A 10.0.11.149 + A 10.0.11.150 + A 10.0.11.151 + A 10.0.11.152 + A 10.0.11.153 + A 10.0.11.154 + A 10.0.11.155 + A 10.0.11.156 + A 10.0.11.157 + A 10.0.11.158 + A 10.0.11.159 + A 10.0.11.160 + A 10.0.11.161 + A 10.0.11.162 + A 10.0.11.163 + A 10.0.11.164 + A 10.0.11.165 + A 10.0.11.166 + A 10.0.11.167 + A 10.0.11.168 + A 10.0.11.169 + A 10.0.11.170 + A 10.0.11.171 + A 10.0.11.172 + A 10.0.11.173 + A 10.0.11.174 + A 10.0.11.175 + A 10.0.11.176 + A 10.0.11.177 + A 10.0.11.178 + A 10.0.11.179 + A 10.0.11.180 + A 10.0.11.181 + A 10.0.11.182 + A 10.0.11.183 +4000 A 10.0.0.0 + A 10.0.0.1 + A 10.0.0.2 + A 10.0.0.3 + A 10.0.0.4 + A 10.0.0.5 + A 10.0.0.6 + A 10.0.0.7 + A 10.0.0.8 + A 10.0.0.9 + A 10.0.0.10 + A 10.0.0.11 + A 10.0.0.12 + A 10.0.0.13 + A 10.0.0.14 + A 10.0.0.15 + A 10.0.0.16 + A 10.0.0.17 + A 10.0.0.18 + A 10.0.0.19 + A 10.0.0.20 + A 10.0.0.21 + A 10.0.0.22 + A 10.0.0.23 + A 10.0.0.24 + A 10.0.0.25 + A 10.0.0.26 + A 10.0.0.27 + A 10.0.0.28 + A 10.0.0.29 + A 10.0.0.30 + A 10.0.0.31 + A 10.0.0.32 + A 10.0.0.33 + A 10.0.0.34 + A 10.0.0.35 + A 10.0.0.36 + A 10.0.0.37 + A 10.0.0.38 + A 10.0.0.39 + A 10.0.0.40 + A 10.0.0.41 + A 10.0.0.42 + A 10.0.0.43 + A 10.0.0.44 + A 10.0.0.45 + A 10.0.0.46 + A 10.0.0.47 + A 10.0.0.48 + A 10.0.0.49 + A 10.0.0.50 + A 10.0.0.51 + A 10.0.0.52 + A 10.0.0.53 + A 10.0.0.54 + A 10.0.0.55 + A 10.0.0.56 + A 10.0.0.57 + A 10.0.0.58 + A 10.0.0.59 + A 10.0.0.60 + A 10.0.0.61 + A 10.0.0.62 + A 10.0.0.63 + A 10.0.0.64 + A 10.0.0.65 + A 10.0.0.66 + A 10.0.0.67 + A 10.0.0.68 + A 10.0.0.69 + A 10.0.0.70 + A 10.0.0.71 + A 10.0.0.72 + A 10.0.0.73 + A 10.0.0.74 + A 10.0.0.75 + A 10.0.0.76 + A 10.0.0.77 + A 10.0.0.78 + A 10.0.0.79 + A 10.0.0.80 + A 10.0.0.81 + A 10.0.0.82 + A 10.0.0.83 + A 10.0.0.84 + A 10.0.0.85 + A 10.0.0.86 + A 10.0.0.87 + A 10.0.0.88 + A 10.0.0.89 + A 10.0.0.90 + A 10.0.0.91 + A 10.0.0.92 + A 10.0.0.93 + A 10.0.0.94 + A 10.0.0.95 + A 10.0.0.96 + A 10.0.0.97 + A 10.0.0.98 + A 10.0.0.99 + A 10.0.0.100 + A 10.0.0.101 + A 10.0.0.102 + A 10.0.0.103 + A 10.0.0.104 + A 10.0.0.105 + A 10.0.0.106 + A 10.0.0.107 + A 10.0.0.108 + A 10.0.0.109 + A 10.0.0.110 + A 10.0.0.111 + A 10.0.0.112 + A 10.0.0.113 + A 10.0.0.114 + A 10.0.0.115 + A 10.0.0.116 + A 10.0.0.117 + A 10.0.0.118 + A 10.0.0.119 + A 10.0.0.120 + A 10.0.0.121 + A 10.0.0.122 + A 10.0.0.123 + A 10.0.0.124 + A 10.0.0.125 + A 10.0.0.126 + A 10.0.0.127 + A 10.0.0.128 + A 10.0.0.129 + A 10.0.0.130 + A 10.0.0.131 + A 10.0.0.132 + A 10.0.0.133 + A 10.0.0.134 + A 10.0.0.135 + A 10.0.0.136 + A 10.0.0.137 + A 10.0.0.138 + A 10.0.0.139 + A 10.0.0.140 + A 10.0.0.141 + A 10.0.0.142 + A 10.0.0.143 + A 10.0.0.144 + A 10.0.0.145 + A 10.0.0.146 + A 10.0.0.147 + A 10.0.0.148 + A 10.0.0.149 + A 10.0.0.150 + A 10.0.0.151 + A 10.0.0.152 + A 10.0.0.153 + A 10.0.0.154 + A 10.0.0.155 + A 10.0.0.156 + A 10.0.0.157 + A 10.0.0.158 + A 10.0.0.159 + A 10.0.0.160 + A 10.0.0.161 + A 10.0.0.162 + A 10.0.0.163 + A 10.0.0.164 + A 10.0.0.165 + A 10.0.0.166 + A 10.0.0.167 + A 10.0.0.168 + A 10.0.0.169 + A 10.0.0.170 + A 10.0.0.171 + A 10.0.0.172 + A 10.0.0.173 + A 10.0.0.174 + A 10.0.0.175 + A 10.0.0.176 + A 10.0.0.177 + A 10.0.0.178 + A 10.0.0.179 + A 10.0.0.180 + A 10.0.0.181 + A 10.0.0.182 + A 10.0.0.183 + A 10.0.0.184 + A 10.0.0.185 + A 10.0.0.186 + A 10.0.0.187 + A 10.0.0.188 + A 10.0.0.189 + A 10.0.0.190 + A 10.0.0.191 + A 10.0.0.192 + A 10.0.0.193 + A 10.0.0.194 + A 10.0.0.195 + A 10.0.0.196 + A 10.0.0.197 + A 10.0.0.198 + A 10.0.0.199 + A 10.0.0.200 + A 10.0.0.201 + A 10.0.0.202 + A 10.0.0.203 + A 10.0.0.204 + A 10.0.0.205 + A 10.0.0.206 + A 10.0.0.207 + A 10.0.0.208 + A 10.0.0.209 + A 10.0.0.210 + A 10.0.0.211 + A 10.0.0.212 + A 10.0.0.213 + A 10.0.0.214 + A 10.0.0.215 + A 10.0.0.216 + A 10.0.0.217 + A 10.0.0.218 + A 10.0.0.219 + A 10.0.0.220 + A 10.0.0.221 + A 10.0.0.222 + A 10.0.0.223 + A 10.0.0.224 + A 10.0.0.225 + A 10.0.0.226 + A 10.0.0.227 + A 10.0.0.228 + A 10.0.0.229 + A 10.0.0.230 + A 10.0.0.231 + A 10.0.0.232 + A 10.0.0.233 + A 10.0.0.234 + A 10.0.0.235 + A 10.0.0.236 + A 10.0.0.237 + A 10.0.0.238 + A 10.0.0.239 + A 10.0.0.240 + A 10.0.0.241 + A 10.0.0.242 + A 10.0.0.243 + A 10.0.0.244 + A 10.0.0.245 + A 10.0.0.246 + A 10.0.0.247 + A 10.0.0.248 + A 10.0.0.249 + A 10.0.0.250 + A 10.0.0.251 + A 10.0.0.252 + A 10.0.0.253 + A 10.0.0.254 + A 10.0.0.255 + A 10.0.1.0 + A 10.0.1.1 + A 10.0.1.2 + A 10.0.1.3 + A 10.0.1.4 + A 10.0.1.5 + A 10.0.1.6 + A 10.0.1.7 + A 10.0.1.8 + A 10.0.1.9 + A 10.0.1.10 + A 10.0.1.11 + A 10.0.1.12 + A 10.0.1.13 + A 10.0.1.14 + A 10.0.1.15 + A 10.0.1.16 + A 10.0.1.17 + A 10.0.1.18 + A 10.0.1.19 + A 10.0.1.20 + A 10.0.1.21 + A 10.0.1.22 + A 10.0.1.23 + A 10.0.1.24 + A 10.0.1.25 + A 10.0.1.26 + A 10.0.1.27 + A 10.0.1.28 + A 10.0.1.29 + A 10.0.1.30 + A 10.0.1.31 + A 10.0.1.32 + A 10.0.1.33 + A 10.0.1.34 + A 10.0.1.35 + A 10.0.1.36 + A 10.0.1.37 + A 10.0.1.38 + A 10.0.1.39 + A 10.0.1.40 + A 10.0.1.41 + A 10.0.1.42 + A 10.0.1.43 + A 10.0.1.44 + A 10.0.1.45 + A 10.0.1.46 + A 10.0.1.47 + A 10.0.1.48 + A 10.0.1.49 + A 10.0.1.50 + A 10.0.1.51 + A 10.0.1.52 + A 10.0.1.53 + A 10.0.1.54 + A 10.0.1.55 + A 10.0.1.56 + A 10.0.1.57 + A 10.0.1.58 + A 10.0.1.59 + A 10.0.1.60 + A 10.0.1.61 + A 10.0.1.62 + A 10.0.1.63 + A 10.0.1.64 + A 10.0.1.65 + A 10.0.1.66 + A 10.0.1.67 + A 10.0.1.68 + A 10.0.1.69 + A 10.0.1.70 + A 10.0.1.71 + A 10.0.1.72 + A 10.0.1.73 + A 10.0.1.74 + A 10.0.1.75 + A 10.0.1.76 + A 10.0.1.77 + A 10.0.1.78 + A 10.0.1.79 + A 10.0.1.80 + A 10.0.1.81 + A 10.0.1.82 + A 10.0.1.83 + A 10.0.1.84 + A 10.0.1.85 + A 10.0.1.86 + A 10.0.1.87 + A 10.0.1.88 + A 10.0.1.89 + A 10.0.1.90 + A 10.0.1.91 + A 10.0.1.92 + A 10.0.1.93 + A 10.0.1.94 + A 10.0.1.95 + A 10.0.1.96 + A 10.0.1.97 + A 10.0.1.98 + A 10.0.1.99 + A 10.0.1.100 + A 10.0.1.101 + A 10.0.1.102 + A 10.0.1.103 + A 10.0.1.104 + A 10.0.1.105 + A 10.0.1.106 + A 10.0.1.107 + A 10.0.1.108 + A 10.0.1.109 + A 10.0.1.110 + A 10.0.1.111 + A 10.0.1.112 + A 10.0.1.113 + A 10.0.1.114 + A 10.0.1.115 + A 10.0.1.116 + A 10.0.1.117 + A 10.0.1.118 + A 10.0.1.119 + A 10.0.1.120 + A 10.0.1.121 + A 10.0.1.122 + A 10.0.1.123 + A 10.0.1.124 + A 10.0.1.125 + A 10.0.1.126 + A 10.0.1.127 + A 10.0.1.128 + A 10.0.1.129 + A 10.0.1.130 + A 10.0.1.131 + A 10.0.1.132 + A 10.0.1.133 + A 10.0.1.134 + A 10.0.1.135 + A 10.0.1.136 + A 10.0.1.137 + A 10.0.1.138 + A 10.0.1.139 + A 10.0.1.140 + A 10.0.1.141 + A 10.0.1.142 + A 10.0.1.143 + A 10.0.1.144 + A 10.0.1.145 + A 10.0.1.146 + A 10.0.1.147 + A 10.0.1.148 + A 10.0.1.149 + A 10.0.1.150 + A 10.0.1.151 + A 10.0.1.152 + A 10.0.1.153 + A 10.0.1.154 + A 10.0.1.155 + A 10.0.1.156 + A 10.0.1.157 + A 10.0.1.158 + A 10.0.1.159 + A 10.0.1.160 + A 10.0.1.161 + A 10.0.1.162 + A 10.0.1.163 + A 10.0.1.164 + A 10.0.1.165 + A 10.0.1.166 + A 10.0.1.167 + A 10.0.1.168 + A 10.0.1.169 + A 10.0.1.170 + A 10.0.1.171 + A 10.0.1.172 + A 10.0.1.173 + A 10.0.1.174 + A 10.0.1.175 + A 10.0.1.176 + A 10.0.1.177 + A 10.0.1.178 + A 10.0.1.179 + A 10.0.1.180 + A 10.0.1.181 + A 10.0.1.182 + A 10.0.1.183 + A 10.0.1.184 + A 10.0.1.185 + A 10.0.1.186 + A 10.0.1.187 + A 10.0.1.188 + A 10.0.1.189 + A 10.0.1.190 + A 10.0.1.191 + A 10.0.1.192 + A 10.0.1.193 + A 10.0.1.194 + A 10.0.1.195 + A 10.0.1.196 + A 10.0.1.197 + A 10.0.1.198 + A 10.0.1.199 + A 10.0.1.200 + A 10.0.1.201 + A 10.0.1.202 + A 10.0.1.203 + A 10.0.1.204 + A 10.0.1.205 + A 10.0.1.206 + A 10.0.1.207 + A 10.0.1.208 + A 10.0.1.209 + A 10.0.1.210 + A 10.0.1.211 + A 10.0.1.212 + A 10.0.1.213 + A 10.0.1.214 + A 10.0.1.215 + A 10.0.1.216 + A 10.0.1.217 + A 10.0.1.218 + A 10.0.1.219 + A 10.0.1.220 + A 10.0.1.221 + A 10.0.1.222 + A 10.0.1.223 + A 10.0.1.224 + A 10.0.1.225 + A 10.0.1.226 + A 10.0.1.227 + A 10.0.1.228 + A 10.0.1.229 + A 10.0.1.230 + A 10.0.1.231 + A 10.0.1.232 + A 10.0.1.233 + A 10.0.1.234 + A 10.0.1.235 + A 10.0.1.236 + A 10.0.1.237 + A 10.0.1.238 + A 10.0.1.239 + A 10.0.1.240 + A 10.0.1.241 + A 10.0.1.242 + A 10.0.1.243 + A 10.0.1.244 + A 10.0.1.245 + A 10.0.1.246 + A 10.0.1.247 + A 10.0.1.248 + A 10.0.1.249 + A 10.0.1.250 + A 10.0.1.251 + A 10.0.1.252 + A 10.0.1.253 + A 10.0.1.254 + A 10.0.1.255 + A 10.0.2.0 + A 10.0.2.1 + A 10.0.2.2 + A 10.0.2.3 + A 10.0.2.4 + A 10.0.2.5 + A 10.0.2.6 + A 10.0.2.7 + A 10.0.2.8 + A 10.0.2.9 + A 10.0.2.10 + A 10.0.2.11 + A 10.0.2.12 + A 10.0.2.13 + A 10.0.2.14 + A 10.0.2.15 + A 10.0.2.16 + A 10.0.2.17 + A 10.0.2.18 + A 10.0.2.19 + A 10.0.2.20 + A 10.0.2.21 + A 10.0.2.22 + A 10.0.2.23 + A 10.0.2.24 + A 10.0.2.25 + A 10.0.2.26 + A 10.0.2.27 + A 10.0.2.28 + A 10.0.2.29 + A 10.0.2.30 + A 10.0.2.31 + A 10.0.2.32 + A 10.0.2.33 + A 10.0.2.34 + A 10.0.2.35 + A 10.0.2.36 + A 10.0.2.37 + A 10.0.2.38 + A 10.0.2.39 + A 10.0.2.40 + A 10.0.2.41 + A 10.0.2.42 + A 10.0.2.43 + A 10.0.2.44 + A 10.0.2.45 + A 10.0.2.46 + A 10.0.2.47 + A 10.0.2.48 + A 10.0.2.49 + A 10.0.2.50 + A 10.0.2.51 + A 10.0.2.52 + A 10.0.2.53 + A 10.0.2.54 + A 10.0.2.55 + A 10.0.2.56 + A 10.0.2.57 + A 10.0.2.58 + A 10.0.2.59 + A 10.0.2.60 + A 10.0.2.61 + A 10.0.2.62 + A 10.0.2.63 + A 10.0.2.64 + A 10.0.2.65 + A 10.0.2.66 + A 10.0.2.67 + A 10.0.2.68 + A 10.0.2.69 + A 10.0.2.70 + A 10.0.2.71 + A 10.0.2.72 + A 10.0.2.73 + A 10.0.2.74 + A 10.0.2.75 + A 10.0.2.76 + A 10.0.2.77 + A 10.0.2.78 + A 10.0.2.79 + A 10.0.2.80 + A 10.0.2.81 + A 10.0.2.82 + A 10.0.2.83 + A 10.0.2.84 + A 10.0.2.85 + A 10.0.2.86 + A 10.0.2.87 + A 10.0.2.88 + A 10.0.2.89 + A 10.0.2.90 + A 10.0.2.91 + A 10.0.2.92 + A 10.0.2.93 + A 10.0.2.94 + A 10.0.2.95 + A 10.0.2.96 + A 10.0.2.97 + A 10.0.2.98 + A 10.0.2.99 + A 10.0.2.100 + A 10.0.2.101 + A 10.0.2.102 + A 10.0.2.103 + A 10.0.2.104 + A 10.0.2.105 + A 10.0.2.106 + A 10.0.2.107 + A 10.0.2.108 + A 10.0.2.109 + A 10.0.2.110 + A 10.0.2.111 + A 10.0.2.112 + A 10.0.2.113 + A 10.0.2.114 + A 10.0.2.115 + A 10.0.2.116 + A 10.0.2.117 + A 10.0.2.118 + A 10.0.2.119 + A 10.0.2.120 + A 10.0.2.121 + A 10.0.2.122 + A 10.0.2.123 + A 10.0.2.124 + A 10.0.2.125 + A 10.0.2.126 + A 10.0.2.127 + A 10.0.2.128 + A 10.0.2.129 + A 10.0.2.130 + A 10.0.2.131 + A 10.0.2.132 + A 10.0.2.133 + A 10.0.2.134 + A 10.0.2.135 + A 10.0.2.136 + A 10.0.2.137 + A 10.0.2.138 + A 10.0.2.139 + A 10.0.2.140 + A 10.0.2.141 + A 10.0.2.142 + A 10.0.2.143 + A 10.0.2.144 + A 10.0.2.145 + A 10.0.2.146 + A 10.0.2.147 + A 10.0.2.148 + A 10.0.2.149 + A 10.0.2.150 + A 10.0.2.151 + A 10.0.2.152 + A 10.0.2.153 + A 10.0.2.154 + A 10.0.2.155 + A 10.0.2.156 + A 10.0.2.157 + A 10.0.2.158 + A 10.0.2.159 + A 10.0.2.160 + A 10.0.2.161 + A 10.0.2.162 + A 10.0.2.163 + A 10.0.2.164 + A 10.0.2.165 + A 10.0.2.166 + A 10.0.2.167 + A 10.0.2.168 + A 10.0.2.169 + A 10.0.2.170 + A 10.0.2.171 + A 10.0.2.172 + A 10.0.2.173 + A 10.0.2.174 + A 10.0.2.175 + A 10.0.2.176 + A 10.0.2.177 + A 10.0.2.178 + A 10.0.2.179 + A 10.0.2.180 + A 10.0.2.181 + A 10.0.2.182 + A 10.0.2.183 + A 10.0.2.184 + A 10.0.2.185 + A 10.0.2.186 + A 10.0.2.187 + A 10.0.2.188 + A 10.0.2.189 + A 10.0.2.190 + A 10.0.2.191 + A 10.0.2.192 + A 10.0.2.193 + A 10.0.2.194 + A 10.0.2.195 + A 10.0.2.196 + A 10.0.2.197 + A 10.0.2.198 + A 10.0.2.199 + A 10.0.2.200 + A 10.0.2.201 + A 10.0.2.202 + A 10.0.2.203 + A 10.0.2.204 + A 10.0.2.205 + A 10.0.2.206 + A 10.0.2.207 + A 10.0.2.208 + A 10.0.2.209 + A 10.0.2.210 + A 10.0.2.211 + A 10.0.2.212 + A 10.0.2.213 + A 10.0.2.214 + A 10.0.2.215 + A 10.0.2.216 + A 10.0.2.217 + A 10.0.2.218 + A 10.0.2.219 + A 10.0.2.220 + A 10.0.2.221 + A 10.0.2.222 + A 10.0.2.223 + A 10.0.2.224 + A 10.0.2.225 + A 10.0.2.226 + A 10.0.2.227 + A 10.0.2.228 + A 10.0.2.229 + A 10.0.2.230 + A 10.0.2.231 + A 10.0.2.232 + A 10.0.2.233 + A 10.0.2.234 + A 10.0.2.235 + A 10.0.2.236 + A 10.0.2.237 + A 10.0.2.238 + A 10.0.2.239 + A 10.0.2.240 + A 10.0.2.241 + A 10.0.2.242 + A 10.0.2.243 + A 10.0.2.244 + A 10.0.2.245 + A 10.0.2.246 + A 10.0.2.247 + A 10.0.2.248 + A 10.0.2.249 + A 10.0.2.250 + A 10.0.2.251 + A 10.0.2.252 + A 10.0.2.253 + A 10.0.2.254 + A 10.0.2.255 + A 10.0.3.0 + A 10.0.3.1 + A 10.0.3.2 + A 10.0.3.3 + A 10.0.3.4 + A 10.0.3.5 + A 10.0.3.6 + A 10.0.3.7 + A 10.0.3.8 + A 10.0.3.9 + A 10.0.3.10 + A 10.0.3.11 + A 10.0.3.12 + A 10.0.3.13 + A 10.0.3.14 + A 10.0.3.15 + A 10.0.3.16 + A 10.0.3.17 + A 10.0.3.18 + A 10.0.3.19 + A 10.0.3.20 + A 10.0.3.21 + A 10.0.3.22 + A 10.0.3.23 + A 10.0.3.24 + A 10.0.3.25 + A 10.0.3.26 + A 10.0.3.27 + A 10.0.3.28 + A 10.0.3.29 + A 10.0.3.30 + A 10.0.3.31 + A 10.0.3.32 + A 10.0.3.33 + A 10.0.3.34 + A 10.0.3.35 + A 10.0.3.36 + A 10.0.3.37 + A 10.0.3.38 + A 10.0.3.39 + A 10.0.3.40 + A 10.0.3.41 + A 10.0.3.42 + A 10.0.3.43 + A 10.0.3.44 + A 10.0.3.45 + A 10.0.3.46 + A 10.0.3.47 + A 10.0.3.48 + A 10.0.3.49 + A 10.0.3.50 + A 10.0.3.51 + A 10.0.3.52 + A 10.0.3.53 + A 10.0.3.54 + A 10.0.3.55 + A 10.0.3.56 + A 10.0.3.57 + A 10.0.3.58 + A 10.0.3.59 + A 10.0.3.60 + A 10.0.3.61 + A 10.0.3.62 + A 10.0.3.63 + A 10.0.3.64 + A 10.0.3.65 + A 10.0.3.66 + A 10.0.3.67 + A 10.0.3.68 + A 10.0.3.69 + A 10.0.3.70 + A 10.0.3.71 + A 10.0.3.72 + A 10.0.3.73 + A 10.0.3.74 + A 10.0.3.75 + A 10.0.3.76 + A 10.0.3.77 + A 10.0.3.78 + A 10.0.3.79 + A 10.0.3.80 + A 10.0.3.81 + A 10.0.3.82 + A 10.0.3.83 + A 10.0.3.84 + A 10.0.3.85 + A 10.0.3.86 + A 10.0.3.87 + A 10.0.3.88 + A 10.0.3.89 + A 10.0.3.90 + A 10.0.3.91 + A 10.0.3.92 + A 10.0.3.93 + A 10.0.3.94 + A 10.0.3.95 + A 10.0.3.96 + A 10.0.3.97 + A 10.0.3.98 + A 10.0.3.99 + A 10.0.3.100 + A 10.0.3.101 + A 10.0.3.102 + A 10.0.3.103 + A 10.0.3.104 + A 10.0.3.105 + A 10.0.3.106 + A 10.0.3.107 + A 10.0.3.108 + A 10.0.3.109 + A 10.0.3.110 + A 10.0.3.111 + A 10.0.3.112 + A 10.0.3.113 + A 10.0.3.114 + A 10.0.3.115 + A 10.0.3.116 + A 10.0.3.117 + A 10.0.3.118 + A 10.0.3.119 + A 10.0.3.120 + A 10.0.3.121 + A 10.0.3.122 + A 10.0.3.123 + A 10.0.3.124 + A 10.0.3.125 + A 10.0.3.126 + A 10.0.3.127 + A 10.0.3.128 + A 10.0.3.129 + A 10.0.3.130 + A 10.0.3.131 + A 10.0.3.132 + A 10.0.3.133 + A 10.0.3.134 + A 10.0.3.135 + A 10.0.3.136 + A 10.0.3.137 + A 10.0.3.138 + A 10.0.3.139 + A 10.0.3.140 + A 10.0.3.141 + A 10.0.3.142 + A 10.0.3.143 + A 10.0.3.144 + A 10.0.3.145 + A 10.0.3.146 + A 10.0.3.147 + A 10.0.3.148 + A 10.0.3.149 + A 10.0.3.150 + A 10.0.3.151 + A 10.0.3.152 + A 10.0.3.153 + A 10.0.3.154 + A 10.0.3.155 + A 10.0.3.156 + A 10.0.3.157 + A 10.0.3.158 + A 10.0.3.159 + A 10.0.3.160 + A 10.0.3.161 + A 10.0.3.162 + A 10.0.3.163 + A 10.0.3.164 + A 10.0.3.165 + A 10.0.3.166 + A 10.0.3.167 + A 10.0.3.168 + A 10.0.3.169 + A 10.0.3.170 + A 10.0.3.171 + A 10.0.3.172 + A 10.0.3.173 + A 10.0.3.174 + A 10.0.3.175 + A 10.0.3.176 + A 10.0.3.177 + A 10.0.3.178 + A 10.0.3.179 + A 10.0.3.180 + A 10.0.3.181 + A 10.0.3.182 + A 10.0.3.183 + A 10.0.3.184 + A 10.0.3.185 + A 10.0.3.186 + A 10.0.3.187 + A 10.0.3.188 + A 10.0.3.189 + A 10.0.3.190 + A 10.0.3.191 + A 10.0.3.192 + A 10.0.3.193 + A 10.0.3.194 + A 10.0.3.195 + A 10.0.3.196 + A 10.0.3.197 + A 10.0.3.198 + A 10.0.3.199 + A 10.0.3.200 + A 10.0.3.201 + A 10.0.3.202 + A 10.0.3.203 + A 10.0.3.204 + A 10.0.3.205 + A 10.0.3.206 + A 10.0.3.207 + A 10.0.3.208 + A 10.0.3.209 + A 10.0.3.210 + A 10.0.3.211 + A 10.0.3.212 + A 10.0.3.213 + A 10.0.3.214 + A 10.0.3.215 + A 10.0.3.216 + A 10.0.3.217 + A 10.0.3.218 + A 10.0.3.219 + A 10.0.3.220 + A 10.0.3.221 + A 10.0.3.222 + A 10.0.3.223 + A 10.0.3.224 + A 10.0.3.225 + A 10.0.3.226 + A 10.0.3.227 + A 10.0.3.228 + A 10.0.3.229 + A 10.0.3.230 + A 10.0.3.231 + A 10.0.3.232 + A 10.0.3.233 + A 10.0.3.234 + A 10.0.3.235 + A 10.0.3.236 + A 10.0.3.237 + A 10.0.3.238 + A 10.0.3.239 + A 10.0.3.240 + A 10.0.3.241 + A 10.0.3.242 + A 10.0.3.243 + A 10.0.3.244 + A 10.0.3.245 + A 10.0.3.246 + A 10.0.3.247 + A 10.0.3.248 + A 10.0.3.249 + A 10.0.3.250 + A 10.0.3.251 + A 10.0.3.252 + A 10.0.3.253 + A 10.0.3.254 + A 10.0.3.255 + A 10.0.4.0 + A 10.0.4.1 + A 10.0.4.2 + A 10.0.4.3 + A 10.0.4.4 + A 10.0.4.5 + A 10.0.4.6 + A 10.0.4.7 + A 10.0.4.8 + A 10.0.4.9 + A 10.0.4.10 + A 10.0.4.11 + A 10.0.4.12 + A 10.0.4.13 + A 10.0.4.14 + A 10.0.4.15 + A 10.0.4.16 + A 10.0.4.17 + A 10.0.4.18 + A 10.0.4.19 + A 10.0.4.20 + A 10.0.4.21 + A 10.0.4.22 + A 10.0.4.23 + A 10.0.4.24 + A 10.0.4.25 + A 10.0.4.26 + A 10.0.4.27 + A 10.0.4.28 + A 10.0.4.29 + A 10.0.4.30 + A 10.0.4.31 + A 10.0.4.32 + A 10.0.4.33 + A 10.0.4.34 + A 10.0.4.35 + A 10.0.4.36 + A 10.0.4.37 + A 10.0.4.38 + A 10.0.4.39 + A 10.0.4.40 + A 10.0.4.41 + A 10.0.4.42 + A 10.0.4.43 + A 10.0.4.44 + A 10.0.4.45 + A 10.0.4.46 + A 10.0.4.47 + A 10.0.4.48 + A 10.0.4.49 + A 10.0.4.50 + A 10.0.4.51 + A 10.0.4.52 + A 10.0.4.53 + A 10.0.4.54 + A 10.0.4.55 + A 10.0.4.56 + A 10.0.4.57 + A 10.0.4.58 + A 10.0.4.59 + A 10.0.4.60 + A 10.0.4.61 + A 10.0.4.62 + A 10.0.4.63 + A 10.0.4.64 + A 10.0.4.65 + A 10.0.4.66 + A 10.0.4.67 + A 10.0.4.68 + A 10.0.4.69 + A 10.0.4.70 + A 10.0.4.71 + A 10.0.4.72 + A 10.0.4.73 + A 10.0.4.74 + A 10.0.4.75 + A 10.0.4.76 + A 10.0.4.77 + A 10.0.4.78 + A 10.0.4.79 + A 10.0.4.80 + A 10.0.4.81 + A 10.0.4.82 + A 10.0.4.83 + A 10.0.4.84 + A 10.0.4.85 + A 10.0.4.86 + A 10.0.4.87 + A 10.0.4.88 + A 10.0.4.89 + A 10.0.4.90 + A 10.0.4.91 + A 10.0.4.92 + A 10.0.4.93 + A 10.0.4.94 + A 10.0.4.95 + A 10.0.4.96 + A 10.0.4.97 + A 10.0.4.98 + A 10.0.4.99 + A 10.0.4.100 + A 10.0.4.101 + A 10.0.4.102 + A 10.0.4.103 + A 10.0.4.104 + A 10.0.4.105 + A 10.0.4.106 + A 10.0.4.107 + A 10.0.4.108 + A 10.0.4.109 + A 10.0.4.110 + A 10.0.4.111 + A 10.0.4.112 + A 10.0.4.113 + A 10.0.4.114 + A 10.0.4.115 + A 10.0.4.116 + A 10.0.4.117 + A 10.0.4.118 + A 10.0.4.119 + A 10.0.4.120 + A 10.0.4.121 + A 10.0.4.122 + A 10.0.4.123 + A 10.0.4.124 + A 10.0.4.125 + A 10.0.4.126 + A 10.0.4.127 + A 10.0.4.128 + A 10.0.4.129 + A 10.0.4.130 + A 10.0.4.131 + A 10.0.4.132 + A 10.0.4.133 + A 10.0.4.134 + A 10.0.4.135 + A 10.0.4.136 + A 10.0.4.137 + A 10.0.4.138 + A 10.0.4.139 + A 10.0.4.140 + A 10.0.4.141 + A 10.0.4.142 + A 10.0.4.143 + A 10.0.4.144 + A 10.0.4.145 + A 10.0.4.146 + A 10.0.4.147 + A 10.0.4.148 + A 10.0.4.149 + A 10.0.4.150 + A 10.0.4.151 + A 10.0.4.152 + A 10.0.4.153 + A 10.0.4.154 + A 10.0.4.155 + A 10.0.4.156 + A 10.0.4.157 + A 10.0.4.158 + A 10.0.4.159 + A 10.0.4.160 + A 10.0.4.161 + A 10.0.4.162 + A 10.0.4.163 + A 10.0.4.164 + A 10.0.4.165 + A 10.0.4.166 + A 10.0.4.167 + A 10.0.4.168 + A 10.0.4.169 + A 10.0.4.170 + A 10.0.4.171 + A 10.0.4.172 + A 10.0.4.173 + A 10.0.4.174 + A 10.0.4.175 + A 10.0.4.176 + A 10.0.4.177 + A 10.0.4.178 + A 10.0.4.179 + A 10.0.4.180 + A 10.0.4.181 + A 10.0.4.182 + A 10.0.4.183 + A 10.0.4.184 + A 10.0.4.185 + A 10.0.4.186 + A 10.0.4.187 + A 10.0.4.188 + A 10.0.4.189 + A 10.0.4.190 + A 10.0.4.191 + A 10.0.4.192 + A 10.0.4.193 + A 10.0.4.194 + A 10.0.4.195 + A 10.0.4.196 + A 10.0.4.197 + A 10.0.4.198 + A 10.0.4.199 + A 10.0.4.200 + A 10.0.4.201 + A 10.0.4.202 + A 10.0.4.203 + A 10.0.4.204 + A 10.0.4.205 + A 10.0.4.206 + A 10.0.4.207 + A 10.0.4.208 + A 10.0.4.209 + A 10.0.4.210 + A 10.0.4.211 + A 10.0.4.212 + A 10.0.4.213 + A 10.0.4.214 + A 10.0.4.215 + A 10.0.4.216 + A 10.0.4.217 + A 10.0.4.218 + A 10.0.4.219 + A 10.0.4.220 + A 10.0.4.221 + A 10.0.4.222 + A 10.0.4.223 + A 10.0.4.224 + A 10.0.4.225 + A 10.0.4.226 + A 10.0.4.227 + A 10.0.4.228 + A 10.0.4.229 + A 10.0.4.230 + A 10.0.4.231 + A 10.0.4.232 + A 10.0.4.233 + A 10.0.4.234 + A 10.0.4.235 + A 10.0.4.236 + A 10.0.4.237 + A 10.0.4.238 + A 10.0.4.239 + A 10.0.4.240 + A 10.0.4.241 + A 10.0.4.242 + A 10.0.4.243 + A 10.0.4.244 + A 10.0.4.245 + A 10.0.4.246 + A 10.0.4.247 + A 10.0.4.248 + A 10.0.4.249 + A 10.0.4.250 + A 10.0.4.251 + A 10.0.4.252 + A 10.0.4.253 + A 10.0.4.254 + A 10.0.4.255 + A 10.0.5.0 + A 10.0.5.1 + A 10.0.5.2 + A 10.0.5.3 + A 10.0.5.4 + A 10.0.5.5 + A 10.0.5.6 + A 10.0.5.7 + A 10.0.5.8 + A 10.0.5.9 + A 10.0.5.10 + A 10.0.5.11 + A 10.0.5.12 + A 10.0.5.13 + A 10.0.5.14 + A 10.0.5.15 + A 10.0.5.16 + A 10.0.5.17 + A 10.0.5.18 + A 10.0.5.19 + A 10.0.5.20 + A 10.0.5.21 + A 10.0.5.22 + A 10.0.5.23 + A 10.0.5.24 + A 10.0.5.25 + A 10.0.5.26 + A 10.0.5.27 + A 10.0.5.28 + A 10.0.5.29 + A 10.0.5.30 + A 10.0.5.31 + A 10.0.5.32 + A 10.0.5.33 + A 10.0.5.34 + A 10.0.5.35 + A 10.0.5.36 + A 10.0.5.37 + A 10.0.5.38 + A 10.0.5.39 + A 10.0.5.40 + A 10.0.5.41 + A 10.0.5.42 + A 10.0.5.43 + A 10.0.5.44 + A 10.0.5.45 + A 10.0.5.46 + A 10.0.5.47 + A 10.0.5.48 + A 10.0.5.49 + A 10.0.5.50 + A 10.0.5.51 + A 10.0.5.52 + A 10.0.5.53 + A 10.0.5.54 + A 10.0.5.55 + A 10.0.5.56 + A 10.0.5.57 + A 10.0.5.58 + A 10.0.5.59 + A 10.0.5.60 + A 10.0.5.61 + A 10.0.5.62 + A 10.0.5.63 + A 10.0.5.64 + A 10.0.5.65 + A 10.0.5.66 + A 10.0.5.67 + A 10.0.5.68 + A 10.0.5.69 + A 10.0.5.70 + A 10.0.5.71 + A 10.0.5.72 + A 10.0.5.73 + A 10.0.5.74 + A 10.0.5.75 + A 10.0.5.76 + A 10.0.5.77 + A 10.0.5.78 + A 10.0.5.79 + A 10.0.5.80 + A 10.0.5.81 + A 10.0.5.82 + A 10.0.5.83 + A 10.0.5.84 + A 10.0.5.85 + A 10.0.5.86 + A 10.0.5.87 + A 10.0.5.88 + A 10.0.5.89 + A 10.0.5.90 + A 10.0.5.91 + A 10.0.5.92 + A 10.0.5.93 + A 10.0.5.94 + A 10.0.5.95 + A 10.0.5.96 + A 10.0.5.97 + A 10.0.5.98 + A 10.0.5.99 + A 10.0.5.100 + A 10.0.5.101 + A 10.0.5.102 + A 10.0.5.103 + A 10.0.5.104 + A 10.0.5.105 + A 10.0.5.106 + A 10.0.5.107 + A 10.0.5.108 + A 10.0.5.109 + A 10.0.5.110 + A 10.0.5.111 + A 10.0.5.112 + A 10.0.5.113 + A 10.0.5.114 + A 10.0.5.115 + A 10.0.5.116 + A 10.0.5.117 + A 10.0.5.118 + A 10.0.5.119 + A 10.0.5.120 + A 10.0.5.121 + A 10.0.5.122 + A 10.0.5.123 + A 10.0.5.124 + A 10.0.5.125 + A 10.0.5.126 + A 10.0.5.127 + A 10.0.5.128 + A 10.0.5.129 + A 10.0.5.130 + A 10.0.5.131 + A 10.0.5.132 + A 10.0.5.133 + A 10.0.5.134 + A 10.0.5.135 + A 10.0.5.136 + A 10.0.5.137 + A 10.0.5.138 + A 10.0.5.139 + A 10.0.5.140 + A 10.0.5.141 + A 10.0.5.142 + A 10.0.5.143 + A 10.0.5.144 + A 10.0.5.145 + A 10.0.5.146 + A 10.0.5.147 + A 10.0.5.148 + A 10.0.5.149 + A 10.0.5.150 + A 10.0.5.151 + A 10.0.5.152 + A 10.0.5.153 + A 10.0.5.154 + A 10.0.5.155 + A 10.0.5.156 + A 10.0.5.157 + A 10.0.5.158 + A 10.0.5.159 + A 10.0.5.160 + A 10.0.5.161 + A 10.0.5.162 + A 10.0.5.163 + A 10.0.5.164 + A 10.0.5.165 + A 10.0.5.166 + A 10.0.5.167 + A 10.0.5.168 + A 10.0.5.169 + A 10.0.5.170 + A 10.0.5.171 + A 10.0.5.172 + A 10.0.5.173 + A 10.0.5.174 + A 10.0.5.175 + A 10.0.5.176 + A 10.0.5.177 + A 10.0.5.178 + A 10.0.5.179 + A 10.0.5.180 + A 10.0.5.181 + A 10.0.5.182 + A 10.0.5.183 + A 10.0.5.184 + A 10.0.5.185 + A 10.0.5.186 + A 10.0.5.187 + A 10.0.5.188 + A 10.0.5.189 + A 10.0.5.190 + A 10.0.5.191 + A 10.0.5.192 + A 10.0.5.193 + A 10.0.5.194 + A 10.0.5.195 + A 10.0.5.196 + A 10.0.5.197 + A 10.0.5.198 + A 10.0.5.199 + A 10.0.5.200 + A 10.0.5.201 + A 10.0.5.202 + A 10.0.5.203 + A 10.0.5.204 + A 10.0.5.205 + A 10.0.5.206 + A 10.0.5.207 + A 10.0.5.208 + A 10.0.5.209 + A 10.0.5.210 + A 10.0.5.211 + A 10.0.5.212 + A 10.0.5.213 + A 10.0.5.214 + A 10.0.5.215 + A 10.0.5.216 + A 10.0.5.217 + A 10.0.5.218 + A 10.0.5.219 + A 10.0.5.220 + A 10.0.5.221 + A 10.0.5.222 + A 10.0.5.223 + A 10.0.5.224 + A 10.0.5.225 + A 10.0.5.226 + A 10.0.5.227 + A 10.0.5.228 + A 10.0.5.229 + A 10.0.5.230 + A 10.0.5.231 + A 10.0.5.232 + A 10.0.5.233 + A 10.0.5.234 + A 10.0.5.235 + A 10.0.5.236 + A 10.0.5.237 + A 10.0.5.238 + A 10.0.5.239 + A 10.0.5.240 + A 10.0.5.241 + A 10.0.5.242 + A 10.0.5.243 + A 10.0.5.244 + A 10.0.5.245 + A 10.0.5.246 + A 10.0.5.247 + A 10.0.5.248 + A 10.0.5.249 + A 10.0.5.250 + A 10.0.5.251 + A 10.0.5.252 + A 10.0.5.253 + A 10.0.5.254 + A 10.0.5.255 + A 10.0.6.0 + A 10.0.6.1 + A 10.0.6.2 + A 10.0.6.3 + A 10.0.6.4 + A 10.0.6.5 + A 10.0.6.6 + A 10.0.6.7 + A 10.0.6.8 + A 10.0.6.9 + A 10.0.6.10 + A 10.0.6.11 + A 10.0.6.12 + A 10.0.6.13 + A 10.0.6.14 + A 10.0.6.15 + A 10.0.6.16 + A 10.0.6.17 + A 10.0.6.18 + A 10.0.6.19 + A 10.0.6.20 + A 10.0.6.21 + A 10.0.6.22 + A 10.0.6.23 + A 10.0.6.24 + A 10.0.6.25 + A 10.0.6.26 + A 10.0.6.27 + A 10.0.6.28 + A 10.0.6.29 + A 10.0.6.30 + A 10.0.6.31 + A 10.0.6.32 + A 10.0.6.33 + A 10.0.6.34 + A 10.0.6.35 + A 10.0.6.36 + A 10.0.6.37 + A 10.0.6.38 + A 10.0.6.39 + A 10.0.6.40 + A 10.0.6.41 + A 10.0.6.42 + A 10.0.6.43 + A 10.0.6.44 + A 10.0.6.45 + A 10.0.6.46 + A 10.0.6.47 + A 10.0.6.48 + A 10.0.6.49 + A 10.0.6.50 + A 10.0.6.51 + A 10.0.6.52 + A 10.0.6.53 + A 10.0.6.54 + A 10.0.6.55 + A 10.0.6.56 + A 10.0.6.57 + A 10.0.6.58 + A 10.0.6.59 + A 10.0.6.60 + A 10.0.6.61 + A 10.0.6.62 + A 10.0.6.63 + A 10.0.6.64 + A 10.0.6.65 + A 10.0.6.66 + A 10.0.6.67 + A 10.0.6.68 + A 10.0.6.69 + A 10.0.6.70 + A 10.0.6.71 + A 10.0.6.72 + A 10.0.6.73 + A 10.0.6.74 + A 10.0.6.75 + A 10.0.6.76 + A 10.0.6.77 + A 10.0.6.78 + A 10.0.6.79 + A 10.0.6.80 + A 10.0.6.81 + A 10.0.6.82 + A 10.0.6.83 + A 10.0.6.84 + A 10.0.6.85 + A 10.0.6.86 + A 10.0.6.87 + A 10.0.6.88 + A 10.0.6.89 + A 10.0.6.90 + A 10.0.6.91 + A 10.0.6.92 + A 10.0.6.93 + A 10.0.6.94 + A 10.0.6.95 + A 10.0.6.96 + A 10.0.6.97 + A 10.0.6.98 + A 10.0.6.99 + A 10.0.6.100 + A 10.0.6.101 + A 10.0.6.102 + A 10.0.6.103 + A 10.0.6.104 + A 10.0.6.105 + A 10.0.6.106 + A 10.0.6.107 + A 10.0.6.108 + A 10.0.6.109 + A 10.0.6.110 + A 10.0.6.111 + A 10.0.6.112 + A 10.0.6.113 + A 10.0.6.114 + A 10.0.6.115 + A 10.0.6.116 + A 10.0.6.117 + A 10.0.6.118 + A 10.0.6.119 + A 10.0.6.120 + A 10.0.6.121 + A 10.0.6.122 + A 10.0.6.123 + A 10.0.6.124 + A 10.0.6.125 + A 10.0.6.126 + A 10.0.6.127 + A 10.0.6.128 + A 10.0.6.129 + A 10.0.6.130 + A 10.0.6.131 + A 10.0.6.132 + A 10.0.6.133 + A 10.0.6.134 + A 10.0.6.135 + A 10.0.6.136 + A 10.0.6.137 + A 10.0.6.138 + A 10.0.6.139 + A 10.0.6.140 + A 10.0.6.141 + A 10.0.6.142 + A 10.0.6.143 + A 10.0.6.144 + A 10.0.6.145 + A 10.0.6.146 + A 10.0.6.147 + A 10.0.6.148 + A 10.0.6.149 + A 10.0.6.150 + A 10.0.6.151 + A 10.0.6.152 + A 10.0.6.153 + A 10.0.6.154 + A 10.0.6.155 + A 10.0.6.156 + A 10.0.6.157 + A 10.0.6.158 + A 10.0.6.159 + A 10.0.6.160 + A 10.0.6.161 + A 10.0.6.162 + A 10.0.6.163 + A 10.0.6.164 + A 10.0.6.165 + A 10.0.6.166 + A 10.0.6.167 + A 10.0.6.168 + A 10.0.6.169 + A 10.0.6.170 + A 10.0.6.171 + A 10.0.6.172 + A 10.0.6.173 + A 10.0.6.174 + A 10.0.6.175 + A 10.0.6.176 + A 10.0.6.177 + A 10.0.6.178 + A 10.0.6.179 + A 10.0.6.180 + A 10.0.6.181 + A 10.0.6.182 + A 10.0.6.183 + A 10.0.6.184 + A 10.0.6.185 + A 10.0.6.186 + A 10.0.6.187 + A 10.0.6.188 + A 10.0.6.189 + A 10.0.6.190 + A 10.0.6.191 + A 10.0.6.192 + A 10.0.6.193 + A 10.0.6.194 + A 10.0.6.195 + A 10.0.6.196 + A 10.0.6.197 + A 10.0.6.198 + A 10.0.6.199 + A 10.0.6.200 + A 10.0.6.201 + A 10.0.6.202 + A 10.0.6.203 + A 10.0.6.204 + A 10.0.6.205 + A 10.0.6.206 + A 10.0.6.207 + A 10.0.6.208 + A 10.0.6.209 + A 10.0.6.210 + A 10.0.6.211 + A 10.0.6.212 + A 10.0.6.213 + A 10.0.6.214 + A 10.0.6.215 + A 10.0.6.216 + A 10.0.6.217 + A 10.0.6.218 + A 10.0.6.219 + A 10.0.6.220 + A 10.0.6.221 + A 10.0.6.222 + A 10.0.6.223 + A 10.0.6.224 + A 10.0.6.225 + A 10.0.6.226 + A 10.0.6.227 + A 10.0.6.228 + A 10.0.6.229 + A 10.0.6.230 + A 10.0.6.231 + A 10.0.6.232 + A 10.0.6.233 + A 10.0.6.234 + A 10.0.6.235 + A 10.0.6.236 + A 10.0.6.237 + A 10.0.6.238 + A 10.0.6.239 + A 10.0.6.240 + A 10.0.6.241 + A 10.0.6.242 + A 10.0.6.243 + A 10.0.6.244 + A 10.0.6.245 + A 10.0.6.246 + A 10.0.6.247 + A 10.0.6.248 + A 10.0.6.249 + A 10.0.6.250 + A 10.0.6.251 + A 10.0.6.252 + A 10.0.6.253 + A 10.0.6.254 + A 10.0.6.255 + A 10.0.7.0 + A 10.0.7.1 + A 10.0.7.2 + A 10.0.7.3 + A 10.0.7.4 + A 10.0.7.5 + A 10.0.7.6 + A 10.0.7.7 + A 10.0.7.8 + A 10.0.7.9 + A 10.0.7.10 + A 10.0.7.11 + A 10.0.7.12 + A 10.0.7.13 + A 10.0.7.14 + A 10.0.7.15 + A 10.0.7.16 + A 10.0.7.17 + A 10.0.7.18 + A 10.0.7.19 + A 10.0.7.20 + A 10.0.7.21 + A 10.0.7.22 + A 10.0.7.23 + A 10.0.7.24 + A 10.0.7.25 + A 10.0.7.26 + A 10.0.7.27 + A 10.0.7.28 + A 10.0.7.29 + A 10.0.7.30 + A 10.0.7.31 + A 10.0.7.32 + A 10.0.7.33 + A 10.0.7.34 + A 10.0.7.35 + A 10.0.7.36 + A 10.0.7.37 + A 10.0.7.38 + A 10.0.7.39 + A 10.0.7.40 + A 10.0.7.41 + A 10.0.7.42 + A 10.0.7.43 + A 10.0.7.44 + A 10.0.7.45 + A 10.0.7.46 + A 10.0.7.47 + A 10.0.7.48 + A 10.0.7.49 + A 10.0.7.50 + A 10.0.7.51 + A 10.0.7.52 + A 10.0.7.53 + A 10.0.7.54 + A 10.0.7.55 + A 10.0.7.56 + A 10.0.7.57 + A 10.0.7.58 + A 10.0.7.59 + A 10.0.7.60 + A 10.0.7.61 + A 10.0.7.62 + A 10.0.7.63 + A 10.0.7.64 + A 10.0.7.65 + A 10.0.7.66 + A 10.0.7.67 + A 10.0.7.68 + A 10.0.7.69 + A 10.0.7.70 + A 10.0.7.71 + A 10.0.7.72 + A 10.0.7.73 + A 10.0.7.74 + A 10.0.7.75 + A 10.0.7.76 + A 10.0.7.77 + A 10.0.7.78 + A 10.0.7.79 + A 10.0.7.80 + A 10.0.7.81 + A 10.0.7.82 + A 10.0.7.83 + A 10.0.7.84 + A 10.0.7.85 + A 10.0.7.86 + A 10.0.7.87 + A 10.0.7.88 + A 10.0.7.89 + A 10.0.7.90 + A 10.0.7.91 + A 10.0.7.92 + A 10.0.7.93 + A 10.0.7.94 + A 10.0.7.95 + A 10.0.7.96 + A 10.0.7.97 + A 10.0.7.98 + A 10.0.7.99 + A 10.0.7.100 + A 10.0.7.101 + A 10.0.7.102 + A 10.0.7.103 + A 10.0.7.104 + A 10.0.7.105 + A 10.0.7.106 + A 10.0.7.107 + A 10.0.7.108 + A 10.0.7.109 + A 10.0.7.110 + A 10.0.7.111 + A 10.0.7.112 + A 10.0.7.113 + A 10.0.7.114 + A 10.0.7.115 + A 10.0.7.116 + A 10.0.7.117 + A 10.0.7.118 + A 10.0.7.119 + A 10.0.7.120 + A 10.0.7.121 + A 10.0.7.122 + A 10.0.7.123 + A 10.0.7.124 + A 10.0.7.125 + A 10.0.7.126 + A 10.0.7.127 + A 10.0.7.128 + A 10.0.7.129 + A 10.0.7.130 + A 10.0.7.131 + A 10.0.7.132 + A 10.0.7.133 + A 10.0.7.134 + A 10.0.7.135 + A 10.0.7.136 + A 10.0.7.137 + A 10.0.7.138 + A 10.0.7.139 + A 10.0.7.140 + A 10.0.7.141 + A 10.0.7.142 + A 10.0.7.143 + A 10.0.7.144 + A 10.0.7.145 + A 10.0.7.146 + A 10.0.7.147 + A 10.0.7.148 + A 10.0.7.149 + A 10.0.7.150 + A 10.0.7.151 + A 10.0.7.152 + A 10.0.7.153 + A 10.0.7.154 + A 10.0.7.155 + A 10.0.7.156 + A 10.0.7.157 + A 10.0.7.158 + A 10.0.7.159 + A 10.0.7.160 + A 10.0.7.161 + A 10.0.7.162 + A 10.0.7.163 + A 10.0.7.164 + A 10.0.7.165 + A 10.0.7.166 + A 10.0.7.167 + A 10.0.7.168 + A 10.0.7.169 + A 10.0.7.170 + A 10.0.7.171 + A 10.0.7.172 + A 10.0.7.173 + A 10.0.7.174 + A 10.0.7.175 + A 10.0.7.176 + A 10.0.7.177 + A 10.0.7.178 + A 10.0.7.179 + A 10.0.7.180 + A 10.0.7.181 + A 10.0.7.182 + A 10.0.7.183 + A 10.0.7.184 + A 10.0.7.185 + A 10.0.7.186 + A 10.0.7.187 + A 10.0.7.188 + A 10.0.7.189 + A 10.0.7.190 + A 10.0.7.191 + A 10.0.7.192 + A 10.0.7.193 + A 10.0.7.194 + A 10.0.7.195 + A 10.0.7.196 + A 10.0.7.197 + A 10.0.7.198 + A 10.0.7.199 + A 10.0.7.200 + A 10.0.7.201 + A 10.0.7.202 + A 10.0.7.203 + A 10.0.7.204 + A 10.0.7.205 + A 10.0.7.206 + A 10.0.7.207 + A 10.0.7.208 + A 10.0.7.209 + A 10.0.7.210 + A 10.0.7.211 + A 10.0.7.212 + A 10.0.7.213 + A 10.0.7.214 + A 10.0.7.215 + A 10.0.7.216 + A 10.0.7.217 + A 10.0.7.218 + A 10.0.7.219 + A 10.0.7.220 + A 10.0.7.221 + A 10.0.7.222 + A 10.0.7.223 + A 10.0.7.224 + A 10.0.7.225 + A 10.0.7.226 + A 10.0.7.227 + A 10.0.7.228 + A 10.0.7.229 + A 10.0.7.230 + A 10.0.7.231 + A 10.0.7.232 + A 10.0.7.233 + A 10.0.7.234 + A 10.0.7.235 + A 10.0.7.236 + A 10.0.7.237 + A 10.0.7.238 + A 10.0.7.239 + A 10.0.7.240 + A 10.0.7.241 + A 10.0.7.242 + A 10.0.7.243 + A 10.0.7.244 + A 10.0.7.245 + A 10.0.7.246 + A 10.0.7.247 + A 10.0.7.248 + A 10.0.7.249 + A 10.0.7.250 + A 10.0.7.251 + A 10.0.7.252 + A 10.0.7.253 + A 10.0.7.254 + A 10.0.7.255 + A 10.0.8.0 + A 10.0.8.1 + A 10.0.8.2 + A 10.0.8.3 + A 10.0.8.4 + A 10.0.8.5 + A 10.0.8.6 + A 10.0.8.7 + A 10.0.8.8 + A 10.0.8.9 + A 10.0.8.10 + A 10.0.8.11 + A 10.0.8.12 + A 10.0.8.13 + A 10.0.8.14 + A 10.0.8.15 + A 10.0.8.16 + A 10.0.8.17 + A 10.0.8.18 + A 10.0.8.19 + A 10.0.8.20 + A 10.0.8.21 + A 10.0.8.22 + A 10.0.8.23 + A 10.0.8.24 + A 10.0.8.25 + A 10.0.8.26 + A 10.0.8.27 + A 10.0.8.28 + A 10.0.8.29 + A 10.0.8.30 + A 10.0.8.31 + A 10.0.8.32 + A 10.0.8.33 + A 10.0.8.34 + A 10.0.8.35 + A 10.0.8.36 + A 10.0.8.37 + A 10.0.8.38 + A 10.0.8.39 + A 10.0.8.40 + A 10.0.8.41 + A 10.0.8.42 + A 10.0.8.43 + A 10.0.8.44 + A 10.0.8.45 + A 10.0.8.46 + A 10.0.8.47 + A 10.0.8.48 + A 10.0.8.49 + A 10.0.8.50 + A 10.0.8.51 + A 10.0.8.52 + A 10.0.8.53 + A 10.0.8.54 + A 10.0.8.55 + A 10.0.8.56 + A 10.0.8.57 + A 10.0.8.58 + A 10.0.8.59 + A 10.0.8.60 + A 10.0.8.61 + A 10.0.8.62 + A 10.0.8.63 + A 10.0.8.64 + A 10.0.8.65 + A 10.0.8.66 + A 10.0.8.67 + A 10.0.8.68 + A 10.0.8.69 + A 10.0.8.70 + A 10.0.8.71 + A 10.0.8.72 + A 10.0.8.73 + A 10.0.8.74 + A 10.0.8.75 + A 10.0.8.76 + A 10.0.8.77 + A 10.0.8.78 + A 10.0.8.79 + A 10.0.8.80 + A 10.0.8.81 + A 10.0.8.82 + A 10.0.8.83 + A 10.0.8.84 + A 10.0.8.85 + A 10.0.8.86 + A 10.0.8.87 + A 10.0.8.88 + A 10.0.8.89 + A 10.0.8.90 + A 10.0.8.91 + A 10.0.8.92 + A 10.0.8.93 + A 10.0.8.94 + A 10.0.8.95 + A 10.0.8.96 + A 10.0.8.97 + A 10.0.8.98 + A 10.0.8.99 + A 10.0.8.100 + A 10.0.8.101 + A 10.0.8.102 + A 10.0.8.103 + A 10.0.8.104 + A 10.0.8.105 + A 10.0.8.106 + A 10.0.8.107 + A 10.0.8.108 + A 10.0.8.109 + A 10.0.8.110 + A 10.0.8.111 + A 10.0.8.112 + A 10.0.8.113 + A 10.0.8.114 + A 10.0.8.115 + A 10.0.8.116 + A 10.0.8.117 + A 10.0.8.118 + A 10.0.8.119 + A 10.0.8.120 + A 10.0.8.121 + A 10.0.8.122 + A 10.0.8.123 + A 10.0.8.124 + A 10.0.8.125 + A 10.0.8.126 + A 10.0.8.127 + A 10.0.8.128 + A 10.0.8.129 + A 10.0.8.130 + A 10.0.8.131 + A 10.0.8.132 + A 10.0.8.133 + A 10.0.8.134 + A 10.0.8.135 + A 10.0.8.136 + A 10.0.8.137 + A 10.0.8.138 + A 10.0.8.139 + A 10.0.8.140 + A 10.0.8.141 + A 10.0.8.142 + A 10.0.8.143 + A 10.0.8.144 + A 10.0.8.145 + A 10.0.8.146 + A 10.0.8.147 + A 10.0.8.148 + A 10.0.8.149 + A 10.0.8.150 + A 10.0.8.151 + A 10.0.8.152 + A 10.0.8.153 + A 10.0.8.154 + A 10.0.8.155 + A 10.0.8.156 + A 10.0.8.157 + A 10.0.8.158 + A 10.0.8.159 + A 10.0.8.160 + A 10.0.8.161 + A 10.0.8.162 + A 10.0.8.163 + A 10.0.8.164 + A 10.0.8.165 + A 10.0.8.166 + A 10.0.8.167 + A 10.0.8.168 + A 10.0.8.169 + A 10.0.8.170 + A 10.0.8.171 + A 10.0.8.172 + A 10.0.8.173 + A 10.0.8.174 + A 10.0.8.175 + A 10.0.8.176 + A 10.0.8.177 + A 10.0.8.178 + A 10.0.8.179 + A 10.0.8.180 + A 10.0.8.181 + A 10.0.8.182 + A 10.0.8.183 + A 10.0.8.184 + A 10.0.8.185 + A 10.0.8.186 + A 10.0.8.187 + A 10.0.8.188 + A 10.0.8.189 + A 10.0.8.190 + A 10.0.8.191 + A 10.0.8.192 + A 10.0.8.193 + A 10.0.8.194 + A 10.0.8.195 + A 10.0.8.196 + A 10.0.8.197 + A 10.0.8.198 + A 10.0.8.199 + A 10.0.8.200 + A 10.0.8.201 + A 10.0.8.202 + A 10.0.8.203 + A 10.0.8.204 + A 10.0.8.205 + A 10.0.8.206 + A 10.0.8.207 + A 10.0.8.208 + A 10.0.8.209 + A 10.0.8.210 + A 10.0.8.211 + A 10.0.8.212 + A 10.0.8.213 + A 10.0.8.214 + A 10.0.8.215 + A 10.0.8.216 + A 10.0.8.217 + A 10.0.8.218 + A 10.0.8.219 + A 10.0.8.220 + A 10.0.8.221 + A 10.0.8.222 + A 10.0.8.223 + A 10.0.8.224 + A 10.0.8.225 + A 10.0.8.226 + A 10.0.8.227 + A 10.0.8.228 + A 10.0.8.229 + A 10.0.8.230 + A 10.0.8.231 + A 10.0.8.232 + A 10.0.8.233 + A 10.0.8.234 + A 10.0.8.235 + A 10.0.8.236 + A 10.0.8.237 + A 10.0.8.238 + A 10.0.8.239 + A 10.0.8.240 + A 10.0.8.241 + A 10.0.8.242 + A 10.0.8.243 + A 10.0.8.244 + A 10.0.8.245 + A 10.0.8.246 + A 10.0.8.247 + A 10.0.8.248 + A 10.0.8.249 + A 10.0.8.250 + A 10.0.8.251 + A 10.0.8.252 + A 10.0.8.253 + A 10.0.8.254 + A 10.0.8.255 + A 10.0.9.0 + A 10.0.9.1 + A 10.0.9.2 + A 10.0.9.3 + A 10.0.9.4 + A 10.0.9.5 + A 10.0.9.6 + A 10.0.9.7 + A 10.0.9.8 + A 10.0.9.9 + A 10.0.9.10 + A 10.0.9.11 + A 10.0.9.12 + A 10.0.9.13 + A 10.0.9.14 + A 10.0.9.15 + A 10.0.9.16 + A 10.0.9.17 + A 10.0.9.18 + A 10.0.9.19 + A 10.0.9.20 + A 10.0.9.21 + A 10.0.9.22 + A 10.0.9.23 + A 10.0.9.24 + A 10.0.9.25 + A 10.0.9.26 + A 10.0.9.27 + A 10.0.9.28 + A 10.0.9.29 + A 10.0.9.30 + A 10.0.9.31 + A 10.0.9.32 + A 10.0.9.33 + A 10.0.9.34 + A 10.0.9.35 + A 10.0.9.36 + A 10.0.9.37 + A 10.0.9.38 + A 10.0.9.39 + A 10.0.9.40 + A 10.0.9.41 + A 10.0.9.42 + A 10.0.9.43 + A 10.0.9.44 + A 10.0.9.45 + A 10.0.9.46 + A 10.0.9.47 + A 10.0.9.48 + A 10.0.9.49 + A 10.0.9.50 + A 10.0.9.51 + A 10.0.9.52 + A 10.0.9.53 + A 10.0.9.54 + A 10.0.9.55 + A 10.0.9.56 + A 10.0.9.57 + A 10.0.9.58 + A 10.0.9.59 + A 10.0.9.60 + A 10.0.9.61 + A 10.0.9.62 + A 10.0.9.63 + A 10.0.9.64 + A 10.0.9.65 + A 10.0.9.66 + A 10.0.9.67 + A 10.0.9.68 + A 10.0.9.69 + A 10.0.9.70 + A 10.0.9.71 + A 10.0.9.72 + A 10.0.9.73 + A 10.0.9.74 + A 10.0.9.75 + A 10.0.9.76 + A 10.0.9.77 + A 10.0.9.78 + A 10.0.9.79 + A 10.0.9.80 + A 10.0.9.81 + A 10.0.9.82 + A 10.0.9.83 + A 10.0.9.84 + A 10.0.9.85 + A 10.0.9.86 + A 10.0.9.87 + A 10.0.9.88 + A 10.0.9.89 + A 10.0.9.90 + A 10.0.9.91 + A 10.0.9.92 + A 10.0.9.93 + A 10.0.9.94 + A 10.0.9.95 + A 10.0.9.96 + A 10.0.9.97 + A 10.0.9.98 + A 10.0.9.99 + A 10.0.9.100 + A 10.0.9.101 + A 10.0.9.102 + A 10.0.9.103 + A 10.0.9.104 + A 10.0.9.105 + A 10.0.9.106 + A 10.0.9.107 + A 10.0.9.108 + A 10.0.9.109 + A 10.0.9.110 + A 10.0.9.111 + A 10.0.9.112 + A 10.0.9.113 + A 10.0.9.114 + A 10.0.9.115 + A 10.0.9.116 + A 10.0.9.117 + A 10.0.9.118 + A 10.0.9.119 + A 10.0.9.120 + A 10.0.9.121 + A 10.0.9.122 + A 10.0.9.123 + A 10.0.9.124 + A 10.0.9.125 + A 10.0.9.126 + A 10.0.9.127 + A 10.0.9.128 + A 10.0.9.129 + A 10.0.9.130 + A 10.0.9.131 + A 10.0.9.132 + A 10.0.9.133 + A 10.0.9.134 + A 10.0.9.135 + A 10.0.9.136 + A 10.0.9.137 + A 10.0.9.138 + A 10.0.9.139 + A 10.0.9.140 + A 10.0.9.141 + A 10.0.9.142 + A 10.0.9.143 + A 10.0.9.144 + A 10.0.9.145 + A 10.0.9.146 + A 10.0.9.147 + A 10.0.9.148 + A 10.0.9.149 + A 10.0.9.150 + A 10.0.9.151 + A 10.0.9.152 + A 10.0.9.153 + A 10.0.9.154 + A 10.0.9.155 + A 10.0.9.156 + A 10.0.9.157 + A 10.0.9.158 + A 10.0.9.159 + A 10.0.9.160 + A 10.0.9.161 + A 10.0.9.162 + A 10.0.9.163 + A 10.0.9.164 + A 10.0.9.165 + A 10.0.9.166 + A 10.0.9.167 + A 10.0.9.168 + A 10.0.9.169 + A 10.0.9.170 + A 10.0.9.171 + A 10.0.9.172 + A 10.0.9.173 + A 10.0.9.174 + A 10.0.9.175 + A 10.0.9.176 + A 10.0.9.177 + A 10.0.9.178 + A 10.0.9.179 + A 10.0.9.180 + A 10.0.9.181 + A 10.0.9.182 + A 10.0.9.183 + A 10.0.9.184 + A 10.0.9.185 + A 10.0.9.186 + A 10.0.9.187 + A 10.0.9.188 + A 10.0.9.189 + A 10.0.9.190 + A 10.0.9.191 + A 10.0.9.192 + A 10.0.9.193 + A 10.0.9.194 + A 10.0.9.195 + A 10.0.9.196 + A 10.0.9.197 + A 10.0.9.198 + A 10.0.9.199 + A 10.0.9.200 + A 10.0.9.201 + A 10.0.9.202 + A 10.0.9.203 + A 10.0.9.204 + A 10.0.9.205 + A 10.0.9.206 + A 10.0.9.207 + A 10.0.9.208 + A 10.0.9.209 + A 10.0.9.210 + A 10.0.9.211 + A 10.0.9.212 + A 10.0.9.213 + A 10.0.9.214 + A 10.0.9.215 + A 10.0.9.216 + A 10.0.9.217 + A 10.0.9.218 + A 10.0.9.219 + A 10.0.9.220 + A 10.0.9.221 + A 10.0.9.222 + A 10.0.9.223 + A 10.0.9.224 + A 10.0.9.225 + A 10.0.9.226 + A 10.0.9.227 + A 10.0.9.228 + A 10.0.9.229 + A 10.0.9.230 + A 10.0.9.231 + A 10.0.9.232 + A 10.0.9.233 + A 10.0.9.234 + A 10.0.9.235 + A 10.0.9.236 + A 10.0.9.237 + A 10.0.9.238 + A 10.0.9.239 + A 10.0.9.240 + A 10.0.9.241 + A 10.0.9.242 + A 10.0.9.243 + A 10.0.9.244 + A 10.0.9.245 + A 10.0.9.246 + A 10.0.9.247 + A 10.0.9.248 + A 10.0.9.249 + A 10.0.9.250 + A 10.0.9.251 + A 10.0.9.252 + A 10.0.9.253 + A 10.0.9.254 + A 10.0.9.255 + A 10.0.10.0 + A 10.0.10.1 + A 10.0.10.2 + A 10.0.10.3 + A 10.0.10.4 + A 10.0.10.5 + A 10.0.10.6 + A 10.0.10.7 + A 10.0.10.8 + A 10.0.10.9 + A 10.0.10.10 + A 10.0.10.11 + A 10.0.10.12 + A 10.0.10.13 + A 10.0.10.14 + A 10.0.10.15 + A 10.0.10.16 + A 10.0.10.17 + A 10.0.10.18 + A 10.0.10.19 + A 10.0.10.20 + A 10.0.10.21 + A 10.0.10.22 + A 10.0.10.23 + A 10.0.10.24 + A 10.0.10.25 + A 10.0.10.26 + A 10.0.10.27 + A 10.0.10.28 + A 10.0.10.29 + A 10.0.10.30 + A 10.0.10.31 + A 10.0.10.32 + A 10.0.10.33 + A 10.0.10.34 + A 10.0.10.35 + A 10.0.10.36 + A 10.0.10.37 + A 10.0.10.38 + A 10.0.10.39 + A 10.0.10.40 + A 10.0.10.41 + A 10.0.10.42 + A 10.0.10.43 + A 10.0.10.44 + A 10.0.10.45 + A 10.0.10.46 + A 10.0.10.47 + A 10.0.10.48 + A 10.0.10.49 + A 10.0.10.50 + A 10.0.10.51 + A 10.0.10.52 + A 10.0.10.53 + A 10.0.10.54 + A 10.0.10.55 + A 10.0.10.56 + A 10.0.10.57 + A 10.0.10.58 + A 10.0.10.59 + A 10.0.10.60 + A 10.0.10.61 + A 10.0.10.62 + A 10.0.10.63 + A 10.0.10.64 + A 10.0.10.65 + A 10.0.10.66 + A 10.0.10.67 + A 10.0.10.68 + A 10.0.10.69 + A 10.0.10.70 + A 10.0.10.71 + A 10.0.10.72 + A 10.0.10.73 + A 10.0.10.74 + A 10.0.10.75 + A 10.0.10.76 + A 10.0.10.77 + A 10.0.10.78 + A 10.0.10.79 + A 10.0.10.80 + A 10.0.10.81 + A 10.0.10.82 + A 10.0.10.83 + A 10.0.10.84 + A 10.0.10.85 + A 10.0.10.86 + A 10.0.10.87 + A 10.0.10.88 + A 10.0.10.89 + A 10.0.10.90 + A 10.0.10.91 + A 10.0.10.92 + A 10.0.10.93 + A 10.0.10.94 + A 10.0.10.95 + A 10.0.10.96 + A 10.0.10.97 + A 10.0.10.98 + A 10.0.10.99 + A 10.0.10.100 + A 10.0.10.101 + A 10.0.10.102 + A 10.0.10.103 + A 10.0.10.104 + A 10.0.10.105 + A 10.0.10.106 + A 10.0.10.107 + A 10.0.10.108 + A 10.0.10.109 + A 10.0.10.110 + A 10.0.10.111 + A 10.0.10.112 + A 10.0.10.113 + A 10.0.10.114 + A 10.0.10.115 + A 10.0.10.116 + A 10.0.10.117 + A 10.0.10.118 + A 10.0.10.119 + A 10.0.10.120 + A 10.0.10.121 + A 10.0.10.122 + A 10.0.10.123 + A 10.0.10.124 + A 10.0.10.125 + A 10.0.10.126 + A 10.0.10.127 + A 10.0.10.128 + A 10.0.10.129 + A 10.0.10.130 + A 10.0.10.131 + A 10.0.10.132 + A 10.0.10.133 + A 10.0.10.134 + A 10.0.10.135 + A 10.0.10.136 + A 10.0.10.137 + A 10.0.10.138 + A 10.0.10.139 + A 10.0.10.140 + A 10.0.10.141 + A 10.0.10.142 + A 10.0.10.143 + A 10.0.10.144 + A 10.0.10.145 + A 10.0.10.146 + A 10.0.10.147 + A 10.0.10.148 + A 10.0.10.149 + A 10.0.10.150 + A 10.0.10.151 + A 10.0.10.152 + A 10.0.10.153 + A 10.0.10.154 + A 10.0.10.155 + A 10.0.10.156 + A 10.0.10.157 + A 10.0.10.158 + A 10.0.10.159 + A 10.0.10.160 + A 10.0.10.161 + A 10.0.10.162 + A 10.0.10.163 + A 10.0.10.164 + A 10.0.10.165 + A 10.0.10.166 + A 10.0.10.167 + A 10.0.10.168 + A 10.0.10.169 + A 10.0.10.170 + A 10.0.10.171 + A 10.0.10.172 + A 10.0.10.173 + A 10.0.10.174 + A 10.0.10.175 + A 10.0.10.176 + A 10.0.10.177 + A 10.0.10.178 + A 10.0.10.179 + A 10.0.10.180 + A 10.0.10.181 + A 10.0.10.182 + A 10.0.10.183 + A 10.0.10.184 + A 10.0.10.185 + A 10.0.10.186 + A 10.0.10.187 + A 10.0.10.188 + A 10.0.10.189 + A 10.0.10.190 + A 10.0.10.191 + A 10.0.10.192 + A 10.0.10.193 + A 10.0.10.194 + A 10.0.10.195 + A 10.0.10.196 + A 10.0.10.197 + A 10.0.10.198 + A 10.0.10.199 + A 10.0.10.200 + A 10.0.10.201 + A 10.0.10.202 + A 10.0.10.203 + A 10.0.10.204 + A 10.0.10.205 + A 10.0.10.206 + A 10.0.10.207 + A 10.0.10.208 + A 10.0.10.209 + A 10.0.10.210 + A 10.0.10.211 + A 10.0.10.212 + A 10.0.10.213 + A 10.0.10.214 + A 10.0.10.215 + A 10.0.10.216 + A 10.0.10.217 + A 10.0.10.218 + A 10.0.10.219 + A 10.0.10.220 + A 10.0.10.221 + A 10.0.10.222 + A 10.0.10.223 + A 10.0.10.224 + A 10.0.10.225 + A 10.0.10.226 + A 10.0.10.227 + A 10.0.10.228 + A 10.0.10.229 + A 10.0.10.230 + A 10.0.10.231 + A 10.0.10.232 + A 10.0.10.233 + A 10.0.10.234 + A 10.0.10.235 + A 10.0.10.236 + A 10.0.10.237 + A 10.0.10.238 + A 10.0.10.239 + A 10.0.10.240 + A 10.0.10.241 + A 10.0.10.242 + A 10.0.10.243 + A 10.0.10.244 + A 10.0.10.245 + A 10.0.10.246 + A 10.0.10.247 + A 10.0.10.248 + A 10.0.10.249 + A 10.0.10.250 + A 10.0.10.251 + A 10.0.10.252 + A 10.0.10.253 + A 10.0.10.254 + A 10.0.10.255 + A 10.0.11.0 + A 10.0.11.1 + A 10.0.11.2 + A 10.0.11.3 + A 10.0.11.4 + A 10.0.11.5 + A 10.0.11.6 + A 10.0.11.7 + A 10.0.11.8 + A 10.0.11.9 + A 10.0.11.10 + A 10.0.11.11 + A 10.0.11.12 + A 10.0.11.13 + A 10.0.11.14 + A 10.0.11.15 + A 10.0.11.16 + A 10.0.11.17 + A 10.0.11.18 + A 10.0.11.19 + A 10.0.11.20 + A 10.0.11.21 + A 10.0.11.22 + A 10.0.11.23 + A 10.0.11.24 + A 10.0.11.25 + A 10.0.11.26 + A 10.0.11.27 + A 10.0.11.28 + A 10.0.11.29 + A 10.0.11.30 + A 10.0.11.31 + A 10.0.11.32 + A 10.0.11.33 + A 10.0.11.34 + A 10.0.11.35 + A 10.0.11.36 + A 10.0.11.37 + A 10.0.11.38 + A 10.0.11.39 + A 10.0.11.40 + A 10.0.11.41 + A 10.0.11.42 + A 10.0.11.43 + A 10.0.11.44 + A 10.0.11.45 + A 10.0.11.46 + A 10.0.11.47 + A 10.0.11.48 + A 10.0.11.49 + A 10.0.11.50 + A 10.0.11.51 + A 10.0.11.52 + A 10.0.11.53 + A 10.0.11.54 + A 10.0.11.55 + A 10.0.11.56 + A 10.0.11.57 + A 10.0.11.58 + A 10.0.11.59 + A 10.0.11.60 + A 10.0.11.61 + A 10.0.11.62 + A 10.0.11.63 + A 10.0.11.64 + A 10.0.11.65 + A 10.0.11.66 + A 10.0.11.67 + A 10.0.11.68 + A 10.0.11.69 + A 10.0.11.70 + A 10.0.11.71 + A 10.0.11.72 + A 10.0.11.73 + A 10.0.11.74 + A 10.0.11.75 + A 10.0.11.76 + A 10.0.11.77 + A 10.0.11.78 + A 10.0.11.79 + A 10.0.11.80 + A 10.0.11.81 + A 10.0.11.82 + A 10.0.11.83 + A 10.0.11.84 + A 10.0.11.85 + A 10.0.11.86 + A 10.0.11.87 + A 10.0.11.88 + A 10.0.11.89 + A 10.0.11.90 + A 10.0.11.91 + A 10.0.11.92 + A 10.0.11.93 + A 10.0.11.94 + A 10.0.11.95 + A 10.0.11.96 + A 10.0.11.97 + A 10.0.11.98 + A 10.0.11.99 + A 10.0.11.100 + A 10.0.11.101 + A 10.0.11.102 + A 10.0.11.103 + A 10.0.11.104 + A 10.0.11.105 + A 10.0.11.106 + A 10.0.11.107 + A 10.0.11.108 + A 10.0.11.109 + A 10.0.11.110 + A 10.0.11.111 + A 10.0.11.112 + A 10.0.11.113 + A 10.0.11.114 + A 10.0.11.115 + A 10.0.11.116 + A 10.0.11.117 + A 10.0.11.118 + A 10.0.11.119 + A 10.0.11.120 + A 10.0.11.121 + A 10.0.11.122 + A 10.0.11.123 + A 10.0.11.124 + A 10.0.11.125 + A 10.0.11.126 + A 10.0.11.127 + A 10.0.11.128 + A 10.0.11.129 + A 10.0.11.130 + A 10.0.11.131 + A 10.0.11.132 + A 10.0.11.133 + A 10.0.11.134 + A 10.0.11.135 + A 10.0.11.136 + A 10.0.11.137 + A 10.0.11.138 + A 10.0.11.139 + A 10.0.11.140 + A 10.0.11.141 + A 10.0.11.142 + A 10.0.11.143 + A 10.0.11.144 + A 10.0.11.145 + A 10.0.11.146 + A 10.0.11.147 + A 10.0.11.148 + A 10.0.11.149 + A 10.0.11.150 + A 10.0.11.151 + A 10.0.11.152 + A 10.0.11.153 + A 10.0.11.154 + A 10.0.11.155 + A 10.0.11.156 + A 10.0.11.157 + A 10.0.11.158 + A 10.0.11.159 + A 10.0.11.160 + A 10.0.11.161 + A 10.0.11.162 + A 10.0.11.163 + A 10.0.11.164 + A 10.0.11.165 + A 10.0.11.166 + A 10.0.11.167 + A 10.0.11.168 + A 10.0.11.169 + A 10.0.11.170 + A 10.0.11.171 + A 10.0.11.172 + A 10.0.11.173 + A 10.0.11.174 + A 10.0.11.175 + A 10.0.11.176 + A 10.0.11.177 + A 10.0.11.178 + A 10.0.11.179 + A 10.0.11.180 + A 10.0.11.181 + A 10.0.11.182 + A 10.0.11.183 + A 10.0.11.184 + A 10.0.11.185 + A 10.0.11.186 + A 10.0.11.187 + A 10.0.11.188 + A 10.0.11.189 + A 10.0.11.190 + A 10.0.11.191 + A 10.0.11.192 + A 10.0.11.193 + A 10.0.11.194 + A 10.0.11.195 + A 10.0.11.196 + A 10.0.11.197 + A 10.0.11.198 + A 10.0.11.199 + A 10.0.11.200 + A 10.0.11.201 + A 10.0.11.202 + A 10.0.11.203 + A 10.0.11.204 + A 10.0.11.205 + A 10.0.11.206 + A 10.0.11.207 + A 10.0.11.208 + A 10.0.11.209 + A 10.0.11.210 + A 10.0.11.211 + A 10.0.11.212 + A 10.0.11.213 + A 10.0.11.214 + A 10.0.11.215 + A 10.0.11.216 + A 10.0.11.217 + A 10.0.11.218 + A 10.0.11.219 + A 10.0.11.220 + A 10.0.11.221 + A 10.0.11.222 + A 10.0.11.223 + A 10.0.11.224 + A 10.0.11.225 + A 10.0.11.226 + A 10.0.11.227 + A 10.0.11.228 + A 10.0.11.229 + A 10.0.11.230 + A 10.0.11.231 + A 10.0.11.232 + A 10.0.11.233 + A 10.0.11.234 + A 10.0.11.235 + A 10.0.11.236 + A 10.0.11.237 + A 10.0.11.238 + A 10.0.11.239 + A 10.0.11.240 + A 10.0.11.241 + A 10.0.11.242 + A 10.0.11.243 + A 10.0.11.244 + A 10.0.11.245 + A 10.0.11.246 + A 10.0.11.247 + A 10.0.11.248 + A 10.0.11.249 + A 10.0.11.250 + A 10.0.11.251 + A 10.0.11.252 + A 10.0.11.253 + A 10.0.11.254 + A 10.0.11.255 + A 10.0.12.0 + A 10.0.12.1 + A 10.0.12.2 + A 10.0.12.3 + A 10.0.12.4 + A 10.0.12.5 + A 10.0.12.6 + A 10.0.12.7 + A 10.0.12.8 + A 10.0.12.9 + A 10.0.12.10 + A 10.0.12.11 + A 10.0.12.12 + A 10.0.12.13 + A 10.0.12.14 + A 10.0.12.15 + A 10.0.12.16 + A 10.0.12.17 + A 10.0.12.18 + A 10.0.12.19 + A 10.0.12.20 + A 10.0.12.21 + A 10.0.12.22 + A 10.0.12.23 + A 10.0.12.24 + A 10.0.12.25 + A 10.0.12.26 + A 10.0.12.27 + A 10.0.12.28 + A 10.0.12.29 + A 10.0.12.30 + A 10.0.12.31 + A 10.0.12.32 + A 10.0.12.33 + A 10.0.12.34 + A 10.0.12.35 + A 10.0.12.36 + A 10.0.12.37 + A 10.0.12.38 + A 10.0.12.39 + A 10.0.12.40 + A 10.0.12.41 + A 10.0.12.42 + A 10.0.12.43 + A 10.0.12.44 + A 10.0.12.45 + A 10.0.12.46 + A 10.0.12.47 + A 10.0.12.48 + A 10.0.12.49 + A 10.0.12.50 + A 10.0.12.51 + A 10.0.12.52 + A 10.0.12.53 + A 10.0.12.54 + A 10.0.12.55 + A 10.0.12.56 + A 10.0.12.57 + A 10.0.12.58 + A 10.0.12.59 + A 10.0.12.60 + A 10.0.12.61 + A 10.0.12.62 + A 10.0.12.63 + A 10.0.12.64 + A 10.0.12.65 + A 10.0.12.66 + A 10.0.12.67 + A 10.0.12.68 + A 10.0.12.69 + A 10.0.12.70 + A 10.0.12.71 + A 10.0.12.72 + A 10.0.12.73 + A 10.0.12.74 + A 10.0.12.75 + A 10.0.12.76 + A 10.0.12.77 + A 10.0.12.78 + A 10.0.12.79 + A 10.0.12.80 + A 10.0.12.81 + A 10.0.12.82 + A 10.0.12.83 + A 10.0.12.84 + A 10.0.12.85 + A 10.0.12.86 + A 10.0.12.87 + A 10.0.12.88 + A 10.0.12.89 + A 10.0.12.90 + A 10.0.12.91 + A 10.0.12.92 + A 10.0.12.93 + A 10.0.12.94 + A 10.0.12.95 + A 10.0.12.96 + A 10.0.12.97 + A 10.0.12.98 + A 10.0.12.99 + A 10.0.12.100 + A 10.0.12.101 + A 10.0.12.102 + A 10.0.12.103 + A 10.0.12.104 + A 10.0.12.105 + A 10.0.12.106 + A 10.0.12.107 + A 10.0.12.108 + A 10.0.12.109 + A 10.0.12.110 + A 10.0.12.111 + A 10.0.12.112 + A 10.0.12.113 + A 10.0.12.114 + A 10.0.12.115 + A 10.0.12.116 + A 10.0.12.117 + A 10.0.12.118 + A 10.0.12.119 + A 10.0.12.120 + A 10.0.12.121 + A 10.0.12.122 + A 10.0.12.123 + A 10.0.12.124 + A 10.0.12.125 + A 10.0.12.126 + A 10.0.12.127 + A 10.0.12.128 + A 10.0.12.129 + A 10.0.12.130 + A 10.0.12.131 + A 10.0.12.132 + A 10.0.12.133 + A 10.0.12.134 + A 10.0.12.135 + A 10.0.12.136 + A 10.0.12.137 + A 10.0.12.138 + A 10.0.12.139 + A 10.0.12.140 + A 10.0.12.141 + A 10.0.12.142 + A 10.0.12.143 + A 10.0.12.144 + A 10.0.12.145 + A 10.0.12.146 + A 10.0.12.147 + A 10.0.12.148 + A 10.0.12.149 + A 10.0.12.150 + A 10.0.12.151 + A 10.0.12.152 + A 10.0.12.153 + A 10.0.12.154 + A 10.0.12.155 + A 10.0.12.156 + A 10.0.12.157 + A 10.0.12.158 + A 10.0.12.159 + A 10.0.12.160 + A 10.0.12.161 + A 10.0.12.162 + A 10.0.12.163 + A 10.0.12.164 + A 10.0.12.165 + A 10.0.12.166 + A 10.0.12.167 + A 10.0.12.168 + A 10.0.12.169 + A 10.0.12.170 + A 10.0.12.171 + A 10.0.12.172 + A 10.0.12.173 + A 10.0.12.174 + A 10.0.12.175 + A 10.0.12.176 + A 10.0.12.177 + A 10.0.12.178 + A 10.0.12.179 + A 10.0.12.180 + A 10.0.12.181 + A 10.0.12.182 + A 10.0.12.183 + A 10.0.12.184 + A 10.0.12.185 + A 10.0.12.186 + A 10.0.12.187 + A 10.0.12.188 + A 10.0.12.189 + A 10.0.12.190 + A 10.0.12.191 + A 10.0.12.192 + A 10.0.12.193 + A 10.0.12.194 + A 10.0.12.195 + A 10.0.12.196 + A 10.0.12.197 + A 10.0.12.198 + A 10.0.12.199 + A 10.0.12.200 + A 10.0.12.201 + A 10.0.12.202 + A 10.0.12.203 + A 10.0.12.204 + A 10.0.12.205 + A 10.0.12.206 + A 10.0.12.207 + A 10.0.12.208 + A 10.0.12.209 + A 10.0.12.210 + A 10.0.12.211 + A 10.0.12.212 + A 10.0.12.213 + A 10.0.12.214 + A 10.0.12.215 + A 10.0.12.216 + A 10.0.12.217 + A 10.0.12.218 + A 10.0.12.219 + A 10.0.12.220 + A 10.0.12.221 + A 10.0.12.222 + A 10.0.12.223 + A 10.0.12.224 + A 10.0.12.225 + A 10.0.12.226 + A 10.0.12.227 + A 10.0.12.228 + A 10.0.12.229 + A 10.0.12.230 + A 10.0.12.231 + A 10.0.12.232 + A 10.0.12.233 + A 10.0.12.234 + A 10.0.12.235 + A 10.0.12.236 + A 10.0.12.237 + A 10.0.12.238 + A 10.0.12.239 + A 10.0.12.240 + A 10.0.12.241 + A 10.0.12.242 + A 10.0.12.243 + A 10.0.12.244 + A 10.0.12.245 + A 10.0.12.246 + A 10.0.12.247 + A 10.0.12.248 + A 10.0.12.249 + A 10.0.12.250 + A 10.0.12.251 + A 10.0.12.252 + A 10.0.12.253 + A 10.0.12.254 + A 10.0.12.255 + A 10.0.13.0 + A 10.0.13.1 + A 10.0.13.2 + A 10.0.13.3 + A 10.0.13.4 + A 10.0.13.5 + A 10.0.13.6 + A 10.0.13.7 + A 10.0.13.8 + A 10.0.13.9 + A 10.0.13.10 + A 10.0.13.11 + A 10.0.13.12 + A 10.0.13.13 + A 10.0.13.14 + A 10.0.13.15 + A 10.0.13.16 + A 10.0.13.17 + A 10.0.13.18 + A 10.0.13.19 + A 10.0.13.20 + A 10.0.13.21 + A 10.0.13.22 + A 10.0.13.23 + A 10.0.13.24 + A 10.0.13.25 + A 10.0.13.26 + A 10.0.13.27 + A 10.0.13.28 + A 10.0.13.29 + A 10.0.13.30 + A 10.0.13.31 + A 10.0.13.32 + A 10.0.13.33 + A 10.0.13.34 + A 10.0.13.35 + A 10.0.13.36 + A 10.0.13.37 + A 10.0.13.38 + A 10.0.13.39 + A 10.0.13.40 + A 10.0.13.41 + A 10.0.13.42 + A 10.0.13.43 + A 10.0.13.44 + A 10.0.13.45 + A 10.0.13.46 + A 10.0.13.47 + A 10.0.13.48 + A 10.0.13.49 + A 10.0.13.50 + A 10.0.13.51 + A 10.0.13.52 + A 10.0.13.53 + A 10.0.13.54 + A 10.0.13.55 + A 10.0.13.56 + A 10.0.13.57 + A 10.0.13.58 + A 10.0.13.59 + A 10.0.13.60 + A 10.0.13.61 + A 10.0.13.62 + A 10.0.13.63 + A 10.0.13.64 + A 10.0.13.65 + A 10.0.13.66 + A 10.0.13.67 + A 10.0.13.68 + A 10.0.13.69 + A 10.0.13.70 + A 10.0.13.71 + A 10.0.13.72 + A 10.0.13.73 + A 10.0.13.74 + A 10.0.13.75 + A 10.0.13.76 + A 10.0.13.77 + A 10.0.13.78 + A 10.0.13.79 + A 10.0.13.80 + A 10.0.13.81 + A 10.0.13.82 + A 10.0.13.83 + A 10.0.13.84 + A 10.0.13.85 + A 10.0.13.86 + A 10.0.13.87 + A 10.0.13.88 + A 10.0.13.89 + A 10.0.13.90 + A 10.0.13.91 + A 10.0.13.92 + A 10.0.13.93 + A 10.0.13.94 + A 10.0.13.95 + A 10.0.13.96 + A 10.0.13.97 + A 10.0.13.98 + A 10.0.13.99 + A 10.0.13.100 + A 10.0.13.101 + A 10.0.13.102 + A 10.0.13.103 + A 10.0.13.104 + A 10.0.13.105 + A 10.0.13.106 + A 10.0.13.107 + A 10.0.13.108 + A 10.0.13.109 + A 10.0.13.110 + A 10.0.13.111 + A 10.0.13.112 + A 10.0.13.113 + A 10.0.13.114 + A 10.0.13.115 + A 10.0.13.116 + A 10.0.13.117 + A 10.0.13.118 + A 10.0.13.119 + A 10.0.13.120 + A 10.0.13.121 + A 10.0.13.122 + A 10.0.13.123 + A 10.0.13.124 + A 10.0.13.125 + A 10.0.13.126 + A 10.0.13.127 + A 10.0.13.128 + A 10.0.13.129 + A 10.0.13.130 + A 10.0.13.131 + A 10.0.13.132 + A 10.0.13.133 + A 10.0.13.134 + A 10.0.13.135 + A 10.0.13.136 + A 10.0.13.137 + A 10.0.13.138 + A 10.0.13.139 + A 10.0.13.140 + A 10.0.13.141 + A 10.0.13.142 + A 10.0.13.143 + A 10.0.13.144 + A 10.0.13.145 + A 10.0.13.146 + A 10.0.13.147 + A 10.0.13.148 + A 10.0.13.149 + A 10.0.13.150 + A 10.0.13.151 + A 10.0.13.152 + A 10.0.13.153 + A 10.0.13.154 + A 10.0.13.155 + A 10.0.13.156 + A 10.0.13.157 + A 10.0.13.158 + A 10.0.13.159 + A 10.0.13.160 + A 10.0.13.161 + A 10.0.13.162 + A 10.0.13.163 + A 10.0.13.164 + A 10.0.13.165 + A 10.0.13.166 + A 10.0.13.167 + A 10.0.13.168 + A 10.0.13.169 + A 10.0.13.170 + A 10.0.13.171 + A 10.0.13.172 + A 10.0.13.173 + A 10.0.13.174 + A 10.0.13.175 + A 10.0.13.176 + A 10.0.13.177 + A 10.0.13.178 + A 10.0.13.179 + A 10.0.13.180 + A 10.0.13.181 + A 10.0.13.182 + A 10.0.13.183 + A 10.0.13.184 + A 10.0.13.185 + A 10.0.13.186 + A 10.0.13.187 + A 10.0.13.188 + A 10.0.13.189 + A 10.0.13.190 + A 10.0.13.191 + A 10.0.13.192 + A 10.0.13.193 + A 10.0.13.194 + A 10.0.13.195 + A 10.0.13.196 + A 10.0.13.197 + A 10.0.13.198 + A 10.0.13.199 + A 10.0.13.200 + A 10.0.13.201 + A 10.0.13.202 + A 10.0.13.203 + A 10.0.13.204 + A 10.0.13.205 + A 10.0.13.206 + A 10.0.13.207 + A 10.0.13.208 + A 10.0.13.209 + A 10.0.13.210 + A 10.0.13.211 + A 10.0.13.212 + A 10.0.13.213 + A 10.0.13.214 + A 10.0.13.215 + A 10.0.13.216 + A 10.0.13.217 + A 10.0.13.218 + A 10.0.13.219 + A 10.0.13.220 + A 10.0.13.221 + A 10.0.13.222 + A 10.0.13.223 + A 10.0.13.224 + A 10.0.13.225 + A 10.0.13.226 + A 10.0.13.227 + A 10.0.13.228 + A 10.0.13.229 + A 10.0.13.230 + A 10.0.13.231 + A 10.0.13.232 + A 10.0.13.233 + A 10.0.13.234 + A 10.0.13.235 + A 10.0.13.236 + A 10.0.13.237 + A 10.0.13.238 + A 10.0.13.239 + A 10.0.13.240 + A 10.0.13.241 + A 10.0.13.242 + A 10.0.13.243 + A 10.0.13.244 + A 10.0.13.245 + A 10.0.13.246 + A 10.0.13.247 + A 10.0.13.248 + A 10.0.13.249 + A 10.0.13.250 + A 10.0.13.251 + A 10.0.13.252 + A 10.0.13.253 + A 10.0.13.254 + A 10.0.13.255 + A 10.0.14.0 + A 10.0.14.1 + A 10.0.14.2 + A 10.0.14.3 + A 10.0.14.4 + A 10.0.14.5 + A 10.0.14.6 + A 10.0.14.7 + A 10.0.14.8 + A 10.0.14.9 + A 10.0.14.10 + A 10.0.14.11 + A 10.0.14.12 + A 10.0.14.13 + A 10.0.14.14 + A 10.0.14.15 + A 10.0.14.16 + A 10.0.14.17 + A 10.0.14.18 + A 10.0.14.19 + A 10.0.14.20 + A 10.0.14.21 + A 10.0.14.22 + A 10.0.14.23 + A 10.0.14.24 + A 10.0.14.25 + A 10.0.14.26 + A 10.0.14.27 + A 10.0.14.28 + A 10.0.14.29 + A 10.0.14.30 + A 10.0.14.31 + A 10.0.14.32 + A 10.0.14.33 + A 10.0.14.34 + A 10.0.14.35 + A 10.0.14.36 + A 10.0.14.37 + A 10.0.14.38 + A 10.0.14.39 + A 10.0.14.40 + A 10.0.14.41 + A 10.0.14.42 + A 10.0.14.43 + A 10.0.14.44 + A 10.0.14.45 + A 10.0.14.46 + A 10.0.14.47 + A 10.0.14.48 + A 10.0.14.49 + A 10.0.14.50 + A 10.0.14.51 + A 10.0.14.52 + A 10.0.14.53 + A 10.0.14.54 + A 10.0.14.55 + A 10.0.14.56 + A 10.0.14.57 + A 10.0.14.58 + A 10.0.14.59 + A 10.0.14.60 + A 10.0.14.61 + A 10.0.14.62 + A 10.0.14.63 + A 10.0.14.64 + A 10.0.14.65 + A 10.0.14.66 + A 10.0.14.67 + A 10.0.14.68 + A 10.0.14.69 + A 10.0.14.70 + A 10.0.14.71 + A 10.0.14.72 + A 10.0.14.73 + A 10.0.14.74 + A 10.0.14.75 + A 10.0.14.76 + A 10.0.14.77 + A 10.0.14.78 + A 10.0.14.79 + A 10.0.14.80 + A 10.0.14.81 + A 10.0.14.82 + A 10.0.14.83 + A 10.0.14.84 + A 10.0.14.85 + A 10.0.14.86 + A 10.0.14.87 + A 10.0.14.88 + A 10.0.14.89 + A 10.0.14.90 + A 10.0.14.91 + A 10.0.14.92 + A 10.0.14.93 + A 10.0.14.94 + A 10.0.14.95 + A 10.0.14.96 + A 10.0.14.97 + A 10.0.14.98 + A 10.0.14.99 + A 10.0.14.100 + A 10.0.14.101 + A 10.0.14.102 + A 10.0.14.103 + A 10.0.14.104 + A 10.0.14.105 + A 10.0.14.106 + A 10.0.14.107 + A 10.0.14.108 + A 10.0.14.109 + A 10.0.14.110 + A 10.0.14.111 + A 10.0.14.112 + A 10.0.14.113 + A 10.0.14.114 + A 10.0.14.115 + A 10.0.14.116 + A 10.0.14.117 + A 10.0.14.118 + A 10.0.14.119 + A 10.0.14.120 + A 10.0.14.121 + A 10.0.14.122 + A 10.0.14.123 + A 10.0.14.124 + A 10.0.14.125 + A 10.0.14.126 + A 10.0.14.127 + A 10.0.14.128 + A 10.0.14.129 + A 10.0.14.130 + A 10.0.14.131 + A 10.0.14.132 + A 10.0.14.133 + A 10.0.14.134 + A 10.0.14.135 + A 10.0.14.136 + A 10.0.14.137 + A 10.0.14.138 + A 10.0.14.139 + A 10.0.14.140 + A 10.0.14.141 + A 10.0.14.142 + A 10.0.14.143 + A 10.0.14.144 + A 10.0.14.145 + A 10.0.14.146 + A 10.0.14.147 + A 10.0.14.148 + A 10.0.14.149 + A 10.0.14.150 + A 10.0.14.151 + A 10.0.14.152 + A 10.0.14.153 + A 10.0.14.154 + A 10.0.14.155 + A 10.0.14.156 + A 10.0.14.157 + A 10.0.14.158 + A 10.0.14.159 + A 10.0.14.160 + A 10.0.14.161 + A 10.0.14.162 + A 10.0.14.163 + A 10.0.14.164 + A 10.0.14.165 + A 10.0.14.166 + A 10.0.14.167 + A 10.0.14.168 + A 10.0.14.169 + A 10.0.14.170 + A 10.0.14.171 + A 10.0.14.172 + A 10.0.14.173 + A 10.0.14.174 + A 10.0.14.175 + A 10.0.14.176 + A 10.0.14.177 + A 10.0.14.178 + A 10.0.14.179 + A 10.0.14.180 + A 10.0.14.181 + A 10.0.14.182 + A 10.0.14.183 + A 10.0.14.184 + A 10.0.14.185 + A 10.0.14.186 + A 10.0.14.187 + A 10.0.14.188 + A 10.0.14.189 + A 10.0.14.190 + A 10.0.14.191 + A 10.0.14.192 + A 10.0.14.193 + A 10.0.14.194 + A 10.0.14.195 + A 10.0.14.196 + A 10.0.14.197 + A 10.0.14.198 + A 10.0.14.199 + A 10.0.14.200 + A 10.0.14.201 + A 10.0.14.202 + A 10.0.14.203 + A 10.0.14.204 + A 10.0.14.205 + A 10.0.14.206 + A 10.0.14.207 + A 10.0.14.208 + A 10.0.14.209 + A 10.0.14.210 + A 10.0.14.211 + A 10.0.14.212 + A 10.0.14.213 + A 10.0.14.214 + A 10.0.14.215 + A 10.0.14.216 + A 10.0.14.217 + A 10.0.14.218 + A 10.0.14.219 + A 10.0.14.220 + A 10.0.14.221 + A 10.0.14.222 + A 10.0.14.223 + A 10.0.14.224 + A 10.0.14.225 + A 10.0.14.226 + A 10.0.14.227 + A 10.0.14.228 + A 10.0.14.229 + A 10.0.14.230 + A 10.0.14.231 + A 10.0.14.232 + A 10.0.14.233 + A 10.0.14.234 + A 10.0.14.235 + A 10.0.14.236 + A 10.0.14.237 + A 10.0.14.238 + A 10.0.14.239 + A 10.0.14.240 + A 10.0.14.241 + A 10.0.14.242 + A 10.0.14.243 + A 10.0.14.244 + A 10.0.14.245 + A 10.0.14.246 + A 10.0.14.247 + A 10.0.14.248 + A 10.0.14.249 + A 10.0.14.250 + A 10.0.14.251 + A 10.0.14.252 + A 10.0.14.253 + A 10.0.14.254 + A 10.0.14.255 + A 10.0.15.0 + A 10.0.15.1 + A 10.0.15.2 + A 10.0.15.3 + A 10.0.15.4 + A 10.0.15.5 + A 10.0.15.6 + A 10.0.15.7 + A 10.0.15.8 + A 10.0.15.9 + A 10.0.15.10 + A 10.0.15.11 + A 10.0.15.12 + A 10.0.15.13 + A 10.0.15.14 + A 10.0.15.15 + A 10.0.15.16 + A 10.0.15.17 + A 10.0.15.18 + A 10.0.15.19 + A 10.0.15.20 + A 10.0.15.21 + A 10.0.15.22 + A 10.0.15.23 + A 10.0.15.24 + A 10.0.15.25 + A 10.0.15.26 + A 10.0.15.27 + A 10.0.15.28 + A 10.0.15.29 + A 10.0.15.30 + A 10.0.15.31 + A 10.0.15.32 + A 10.0.15.33 + A 10.0.15.34 + A 10.0.15.35 + A 10.0.15.36 + A 10.0.15.37 + A 10.0.15.38 + A 10.0.15.39 + A 10.0.15.40 + A 10.0.15.41 + A 10.0.15.42 + A 10.0.15.43 + A 10.0.15.44 + A 10.0.15.45 + A 10.0.15.46 + A 10.0.15.47 + A 10.0.15.48 + A 10.0.15.49 + A 10.0.15.50 + A 10.0.15.51 + A 10.0.15.52 + A 10.0.15.53 + A 10.0.15.54 + A 10.0.15.55 + A 10.0.15.56 + A 10.0.15.57 + A 10.0.15.58 + A 10.0.15.59 + A 10.0.15.60 + A 10.0.15.61 + A 10.0.15.62 + A 10.0.15.63 + A 10.0.15.64 + A 10.0.15.65 + A 10.0.15.66 + A 10.0.15.67 + A 10.0.15.68 + A 10.0.15.69 + A 10.0.15.70 + A 10.0.15.71 + A 10.0.15.72 + A 10.0.15.73 + A 10.0.15.74 + A 10.0.15.75 + A 10.0.15.76 + A 10.0.15.77 + A 10.0.15.78 + A 10.0.15.79 + A 10.0.15.80 + A 10.0.15.81 + A 10.0.15.82 + A 10.0.15.83 + A 10.0.15.84 + A 10.0.15.85 + A 10.0.15.86 + A 10.0.15.87 + A 10.0.15.88 + A 10.0.15.89 + A 10.0.15.90 + A 10.0.15.91 + A 10.0.15.92 + A 10.0.15.93 + A 10.0.15.94 + A 10.0.15.95 + A 10.0.15.96 + A 10.0.15.97 + A 10.0.15.98 + A 10.0.15.99 + A 10.0.15.100 + A 10.0.15.101 + A 10.0.15.102 + A 10.0.15.103 + A 10.0.15.104 + A 10.0.15.105 + A 10.0.15.106 + A 10.0.15.107 + A 10.0.15.108 + A 10.0.15.109 + A 10.0.15.110 + A 10.0.15.111 + A 10.0.15.112 + A 10.0.15.113 + A 10.0.15.114 + A 10.0.15.115 + A 10.0.15.116 + A 10.0.15.117 + A 10.0.15.118 + A 10.0.15.119 + A 10.0.15.120 + A 10.0.15.121 + A 10.0.15.122 + A 10.0.15.123 + A 10.0.15.124 + A 10.0.15.125 + A 10.0.15.126 + A 10.0.15.127 + A 10.0.15.128 + A 10.0.15.129 + A 10.0.15.130 + A 10.0.15.131 + A 10.0.15.132 + A 10.0.15.133 + A 10.0.15.134 + A 10.0.15.135 + A 10.0.15.136 + A 10.0.15.137 + A 10.0.15.138 + A 10.0.15.139 + A 10.0.15.140 + A 10.0.15.141 + A 10.0.15.142 + A 10.0.15.143 + A 10.0.15.144 + A 10.0.15.145 + A 10.0.15.146 + A 10.0.15.147 + A 10.0.15.148 + A 10.0.15.149 + A 10.0.15.150 + A 10.0.15.151 + A 10.0.15.152 + A 10.0.15.153 + A 10.0.15.154 + A 10.0.15.155 + A 10.0.15.156 + A 10.0.15.157 + A 10.0.15.158 + A 10.0.15.159 +5000 A 10.0.0.0 + A 10.0.0.1 + A 10.0.0.2 + A 10.0.0.3 + A 10.0.0.4 + A 10.0.0.5 + A 10.0.0.6 + A 10.0.0.7 + A 10.0.0.8 + A 10.0.0.9 + A 10.0.0.10 + A 10.0.0.11 + A 10.0.0.12 + A 10.0.0.13 + A 10.0.0.14 + A 10.0.0.15 + A 10.0.0.16 + A 10.0.0.17 + A 10.0.0.18 + A 10.0.0.19 + A 10.0.0.20 + A 10.0.0.21 + A 10.0.0.22 + A 10.0.0.23 + A 10.0.0.24 + A 10.0.0.25 + A 10.0.0.26 + A 10.0.0.27 + A 10.0.0.28 + A 10.0.0.29 + A 10.0.0.30 + A 10.0.0.31 + A 10.0.0.32 + A 10.0.0.33 + A 10.0.0.34 + A 10.0.0.35 + A 10.0.0.36 + A 10.0.0.37 + A 10.0.0.38 + A 10.0.0.39 + A 10.0.0.40 + A 10.0.0.41 + A 10.0.0.42 + A 10.0.0.43 + A 10.0.0.44 + A 10.0.0.45 + A 10.0.0.46 + A 10.0.0.47 + A 10.0.0.48 + A 10.0.0.49 + A 10.0.0.50 + A 10.0.0.51 + A 10.0.0.52 + A 10.0.0.53 + A 10.0.0.54 + A 10.0.0.55 + A 10.0.0.56 + A 10.0.0.57 + A 10.0.0.58 + A 10.0.0.59 + A 10.0.0.60 + A 10.0.0.61 + A 10.0.0.62 + A 10.0.0.63 + A 10.0.0.64 + A 10.0.0.65 + A 10.0.0.66 + A 10.0.0.67 + A 10.0.0.68 + A 10.0.0.69 + A 10.0.0.70 + A 10.0.0.71 + A 10.0.0.72 + A 10.0.0.73 + A 10.0.0.74 + A 10.0.0.75 + A 10.0.0.76 + A 10.0.0.77 + A 10.0.0.78 + A 10.0.0.79 + A 10.0.0.80 + A 10.0.0.81 + A 10.0.0.82 + A 10.0.0.83 + A 10.0.0.84 + A 10.0.0.85 + A 10.0.0.86 + A 10.0.0.87 + A 10.0.0.88 + A 10.0.0.89 + A 10.0.0.90 + A 10.0.0.91 + A 10.0.0.92 + A 10.0.0.93 + A 10.0.0.94 + A 10.0.0.95 + A 10.0.0.96 + A 10.0.0.97 + A 10.0.0.98 + A 10.0.0.99 + A 10.0.0.100 + A 10.0.0.101 + A 10.0.0.102 + A 10.0.0.103 + A 10.0.0.104 + A 10.0.0.105 + A 10.0.0.106 + A 10.0.0.107 + A 10.0.0.108 + A 10.0.0.109 + A 10.0.0.110 + A 10.0.0.111 + A 10.0.0.112 + A 10.0.0.113 + A 10.0.0.114 + A 10.0.0.115 + A 10.0.0.116 + A 10.0.0.117 + A 10.0.0.118 + A 10.0.0.119 + A 10.0.0.120 + A 10.0.0.121 + A 10.0.0.122 + A 10.0.0.123 + A 10.0.0.124 + A 10.0.0.125 + A 10.0.0.126 + A 10.0.0.127 + A 10.0.0.128 + A 10.0.0.129 + A 10.0.0.130 + A 10.0.0.131 + A 10.0.0.132 + A 10.0.0.133 + A 10.0.0.134 + A 10.0.0.135 + A 10.0.0.136 + A 10.0.0.137 + A 10.0.0.138 + A 10.0.0.139 + A 10.0.0.140 + A 10.0.0.141 + A 10.0.0.142 + A 10.0.0.143 + A 10.0.0.144 + A 10.0.0.145 + A 10.0.0.146 + A 10.0.0.147 + A 10.0.0.148 + A 10.0.0.149 + A 10.0.0.150 + A 10.0.0.151 + A 10.0.0.152 + A 10.0.0.153 + A 10.0.0.154 + A 10.0.0.155 + A 10.0.0.156 + A 10.0.0.157 + A 10.0.0.158 + A 10.0.0.159 + A 10.0.0.160 + A 10.0.0.161 + A 10.0.0.162 + A 10.0.0.163 + A 10.0.0.164 + A 10.0.0.165 + A 10.0.0.166 + A 10.0.0.167 + A 10.0.0.168 + A 10.0.0.169 + A 10.0.0.170 + A 10.0.0.171 + A 10.0.0.172 + A 10.0.0.173 + A 10.0.0.174 + A 10.0.0.175 + A 10.0.0.176 + A 10.0.0.177 + A 10.0.0.178 + A 10.0.0.179 + A 10.0.0.180 + A 10.0.0.181 + A 10.0.0.182 + A 10.0.0.183 + A 10.0.0.184 + A 10.0.0.185 + A 10.0.0.186 + A 10.0.0.187 + A 10.0.0.188 + A 10.0.0.189 + A 10.0.0.190 + A 10.0.0.191 + A 10.0.0.192 + A 10.0.0.193 + A 10.0.0.194 + A 10.0.0.195 + A 10.0.0.196 + A 10.0.0.197 + A 10.0.0.198 + A 10.0.0.199 + A 10.0.0.200 + A 10.0.0.201 + A 10.0.0.202 + A 10.0.0.203 + A 10.0.0.204 + A 10.0.0.205 + A 10.0.0.206 + A 10.0.0.207 + A 10.0.0.208 + A 10.0.0.209 + A 10.0.0.210 + A 10.0.0.211 + A 10.0.0.212 + A 10.0.0.213 + A 10.0.0.214 + A 10.0.0.215 + A 10.0.0.216 + A 10.0.0.217 + A 10.0.0.218 + A 10.0.0.219 + A 10.0.0.220 + A 10.0.0.221 + A 10.0.0.222 + A 10.0.0.223 + A 10.0.0.224 + A 10.0.0.225 + A 10.0.0.226 + A 10.0.0.227 + A 10.0.0.228 + A 10.0.0.229 + A 10.0.0.230 + A 10.0.0.231 + A 10.0.0.232 + A 10.0.0.233 + A 10.0.0.234 + A 10.0.0.235 + A 10.0.0.236 + A 10.0.0.237 + A 10.0.0.238 + A 10.0.0.239 + A 10.0.0.240 + A 10.0.0.241 + A 10.0.0.242 + A 10.0.0.243 + A 10.0.0.244 + A 10.0.0.245 + A 10.0.0.246 + A 10.0.0.247 + A 10.0.0.248 + A 10.0.0.249 + A 10.0.0.250 + A 10.0.0.251 + A 10.0.0.252 + A 10.0.0.253 + A 10.0.0.254 + A 10.0.0.255 + A 10.0.1.0 + A 10.0.1.1 + A 10.0.1.2 + A 10.0.1.3 + A 10.0.1.4 + A 10.0.1.5 + A 10.0.1.6 + A 10.0.1.7 + A 10.0.1.8 + A 10.0.1.9 + A 10.0.1.10 + A 10.0.1.11 + A 10.0.1.12 + A 10.0.1.13 + A 10.0.1.14 + A 10.0.1.15 + A 10.0.1.16 + A 10.0.1.17 + A 10.0.1.18 + A 10.0.1.19 + A 10.0.1.20 + A 10.0.1.21 + A 10.0.1.22 + A 10.0.1.23 + A 10.0.1.24 + A 10.0.1.25 + A 10.0.1.26 + A 10.0.1.27 + A 10.0.1.28 + A 10.0.1.29 + A 10.0.1.30 + A 10.0.1.31 + A 10.0.1.32 + A 10.0.1.33 + A 10.0.1.34 + A 10.0.1.35 + A 10.0.1.36 + A 10.0.1.37 + A 10.0.1.38 + A 10.0.1.39 + A 10.0.1.40 + A 10.0.1.41 + A 10.0.1.42 + A 10.0.1.43 + A 10.0.1.44 + A 10.0.1.45 + A 10.0.1.46 + A 10.0.1.47 + A 10.0.1.48 + A 10.0.1.49 + A 10.0.1.50 + A 10.0.1.51 + A 10.0.1.52 + A 10.0.1.53 + A 10.0.1.54 + A 10.0.1.55 + A 10.0.1.56 + A 10.0.1.57 + A 10.0.1.58 + A 10.0.1.59 + A 10.0.1.60 + A 10.0.1.61 + A 10.0.1.62 + A 10.0.1.63 + A 10.0.1.64 + A 10.0.1.65 + A 10.0.1.66 + A 10.0.1.67 + A 10.0.1.68 + A 10.0.1.69 + A 10.0.1.70 + A 10.0.1.71 + A 10.0.1.72 + A 10.0.1.73 + A 10.0.1.74 + A 10.0.1.75 + A 10.0.1.76 + A 10.0.1.77 + A 10.0.1.78 + A 10.0.1.79 + A 10.0.1.80 + A 10.0.1.81 + A 10.0.1.82 + A 10.0.1.83 + A 10.0.1.84 + A 10.0.1.85 + A 10.0.1.86 + A 10.0.1.87 + A 10.0.1.88 + A 10.0.1.89 + A 10.0.1.90 + A 10.0.1.91 + A 10.0.1.92 + A 10.0.1.93 + A 10.0.1.94 + A 10.0.1.95 + A 10.0.1.96 + A 10.0.1.97 + A 10.0.1.98 + A 10.0.1.99 + A 10.0.1.100 + A 10.0.1.101 + A 10.0.1.102 + A 10.0.1.103 + A 10.0.1.104 + A 10.0.1.105 + A 10.0.1.106 + A 10.0.1.107 + A 10.0.1.108 + A 10.0.1.109 + A 10.0.1.110 + A 10.0.1.111 + A 10.0.1.112 + A 10.0.1.113 + A 10.0.1.114 + A 10.0.1.115 + A 10.0.1.116 + A 10.0.1.117 + A 10.0.1.118 + A 10.0.1.119 + A 10.0.1.120 + A 10.0.1.121 + A 10.0.1.122 + A 10.0.1.123 + A 10.0.1.124 + A 10.0.1.125 + A 10.0.1.126 + A 10.0.1.127 + A 10.0.1.128 + A 10.0.1.129 + A 10.0.1.130 + A 10.0.1.131 + A 10.0.1.132 + A 10.0.1.133 + A 10.0.1.134 + A 10.0.1.135 + A 10.0.1.136 + A 10.0.1.137 + A 10.0.1.138 + A 10.0.1.139 + A 10.0.1.140 + A 10.0.1.141 + A 10.0.1.142 + A 10.0.1.143 + A 10.0.1.144 + A 10.0.1.145 + A 10.0.1.146 + A 10.0.1.147 + A 10.0.1.148 + A 10.0.1.149 + A 10.0.1.150 + A 10.0.1.151 + A 10.0.1.152 + A 10.0.1.153 + A 10.0.1.154 + A 10.0.1.155 + A 10.0.1.156 + A 10.0.1.157 + A 10.0.1.158 + A 10.0.1.159 + A 10.0.1.160 + A 10.0.1.161 + A 10.0.1.162 + A 10.0.1.163 + A 10.0.1.164 + A 10.0.1.165 + A 10.0.1.166 + A 10.0.1.167 + A 10.0.1.168 + A 10.0.1.169 + A 10.0.1.170 + A 10.0.1.171 + A 10.0.1.172 + A 10.0.1.173 + A 10.0.1.174 + A 10.0.1.175 + A 10.0.1.176 + A 10.0.1.177 + A 10.0.1.178 + A 10.0.1.179 + A 10.0.1.180 + A 10.0.1.181 + A 10.0.1.182 + A 10.0.1.183 + A 10.0.1.184 + A 10.0.1.185 + A 10.0.1.186 + A 10.0.1.187 + A 10.0.1.188 + A 10.0.1.189 + A 10.0.1.190 + A 10.0.1.191 + A 10.0.1.192 + A 10.0.1.193 + A 10.0.1.194 + A 10.0.1.195 + A 10.0.1.196 + A 10.0.1.197 + A 10.0.1.198 + A 10.0.1.199 + A 10.0.1.200 + A 10.0.1.201 + A 10.0.1.202 + A 10.0.1.203 + A 10.0.1.204 + A 10.0.1.205 + A 10.0.1.206 + A 10.0.1.207 + A 10.0.1.208 + A 10.0.1.209 + A 10.0.1.210 + A 10.0.1.211 + A 10.0.1.212 + A 10.0.1.213 + A 10.0.1.214 + A 10.0.1.215 + A 10.0.1.216 + A 10.0.1.217 + A 10.0.1.218 + A 10.0.1.219 + A 10.0.1.220 + A 10.0.1.221 + A 10.0.1.222 + A 10.0.1.223 + A 10.0.1.224 + A 10.0.1.225 + A 10.0.1.226 + A 10.0.1.227 + A 10.0.1.228 + A 10.0.1.229 + A 10.0.1.230 + A 10.0.1.231 + A 10.0.1.232 + A 10.0.1.233 + A 10.0.1.234 + A 10.0.1.235 + A 10.0.1.236 + A 10.0.1.237 + A 10.0.1.238 + A 10.0.1.239 + A 10.0.1.240 + A 10.0.1.241 + A 10.0.1.242 + A 10.0.1.243 + A 10.0.1.244 + A 10.0.1.245 + A 10.0.1.246 + A 10.0.1.247 + A 10.0.1.248 + A 10.0.1.249 + A 10.0.1.250 + A 10.0.1.251 + A 10.0.1.252 + A 10.0.1.253 + A 10.0.1.254 + A 10.0.1.255 + A 10.0.2.0 + A 10.0.2.1 + A 10.0.2.2 + A 10.0.2.3 + A 10.0.2.4 + A 10.0.2.5 + A 10.0.2.6 + A 10.0.2.7 + A 10.0.2.8 + A 10.0.2.9 + A 10.0.2.10 + A 10.0.2.11 + A 10.0.2.12 + A 10.0.2.13 + A 10.0.2.14 + A 10.0.2.15 + A 10.0.2.16 + A 10.0.2.17 + A 10.0.2.18 + A 10.0.2.19 + A 10.0.2.20 + A 10.0.2.21 + A 10.0.2.22 + A 10.0.2.23 + A 10.0.2.24 + A 10.0.2.25 + A 10.0.2.26 + A 10.0.2.27 + A 10.0.2.28 + A 10.0.2.29 + A 10.0.2.30 + A 10.0.2.31 + A 10.0.2.32 + A 10.0.2.33 + A 10.0.2.34 + A 10.0.2.35 + A 10.0.2.36 + A 10.0.2.37 + A 10.0.2.38 + A 10.0.2.39 + A 10.0.2.40 + A 10.0.2.41 + A 10.0.2.42 + A 10.0.2.43 + A 10.0.2.44 + A 10.0.2.45 + A 10.0.2.46 + A 10.0.2.47 + A 10.0.2.48 + A 10.0.2.49 + A 10.0.2.50 + A 10.0.2.51 + A 10.0.2.52 + A 10.0.2.53 + A 10.0.2.54 + A 10.0.2.55 + A 10.0.2.56 + A 10.0.2.57 + A 10.0.2.58 + A 10.0.2.59 + A 10.0.2.60 + A 10.0.2.61 + A 10.0.2.62 + A 10.0.2.63 + A 10.0.2.64 + A 10.0.2.65 + A 10.0.2.66 + A 10.0.2.67 + A 10.0.2.68 + A 10.0.2.69 + A 10.0.2.70 + A 10.0.2.71 + A 10.0.2.72 + A 10.0.2.73 + A 10.0.2.74 + A 10.0.2.75 + A 10.0.2.76 + A 10.0.2.77 + A 10.0.2.78 + A 10.0.2.79 + A 10.0.2.80 + A 10.0.2.81 + A 10.0.2.82 + A 10.0.2.83 + A 10.0.2.84 + A 10.0.2.85 + A 10.0.2.86 + A 10.0.2.87 + A 10.0.2.88 + A 10.0.2.89 + A 10.0.2.90 + A 10.0.2.91 + A 10.0.2.92 + A 10.0.2.93 + A 10.0.2.94 + A 10.0.2.95 + A 10.0.2.96 + A 10.0.2.97 + A 10.0.2.98 + A 10.0.2.99 + A 10.0.2.100 + A 10.0.2.101 + A 10.0.2.102 + A 10.0.2.103 + A 10.0.2.104 + A 10.0.2.105 + A 10.0.2.106 + A 10.0.2.107 + A 10.0.2.108 + A 10.0.2.109 + A 10.0.2.110 + A 10.0.2.111 + A 10.0.2.112 + A 10.0.2.113 + A 10.0.2.114 + A 10.0.2.115 + A 10.0.2.116 + A 10.0.2.117 + A 10.0.2.118 + A 10.0.2.119 + A 10.0.2.120 + A 10.0.2.121 + A 10.0.2.122 + A 10.0.2.123 + A 10.0.2.124 + A 10.0.2.125 + A 10.0.2.126 + A 10.0.2.127 + A 10.0.2.128 + A 10.0.2.129 + A 10.0.2.130 + A 10.0.2.131 + A 10.0.2.132 + A 10.0.2.133 + A 10.0.2.134 + A 10.0.2.135 + A 10.0.2.136 + A 10.0.2.137 + A 10.0.2.138 + A 10.0.2.139 + A 10.0.2.140 + A 10.0.2.141 + A 10.0.2.142 + A 10.0.2.143 + A 10.0.2.144 + A 10.0.2.145 + A 10.0.2.146 + A 10.0.2.147 + A 10.0.2.148 + A 10.0.2.149 + A 10.0.2.150 + A 10.0.2.151 + A 10.0.2.152 + A 10.0.2.153 + A 10.0.2.154 + A 10.0.2.155 + A 10.0.2.156 + A 10.0.2.157 + A 10.0.2.158 + A 10.0.2.159 + A 10.0.2.160 + A 10.0.2.161 + A 10.0.2.162 + A 10.0.2.163 + A 10.0.2.164 + A 10.0.2.165 + A 10.0.2.166 + A 10.0.2.167 + A 10.0.2.168 + A 10.0.2.169 + A 10.0.2.170 + A 10.0.2.171 + A 10.0.2.172 + A 10.0.2.173 + A 10.0.2.174 + A 10.0.2.175 + A 10.0.2.176 + A 10.0.2.177 + A 10.0.2.178 + A 10.0.2.179 + A 10.0.2.180 + A 10.0.2.181 + A 10.0.2.182 + A 10.0.2.183 + A 10.0.2.184 + A 10.0.2.185 + A 10.0.2.186 + A 10.0.2.187 + A 10.0.2.188 + A 10.0.2.189 + A 10.0.2.190 + A 10.0.2.191 + A 10.0.2.192 + A 10.0.2.193 + A 10.0.2.194 + A 10.0.2.195 + A 10.0.2.196 + A 10.0.2.197 + A 10.0.2.198 + A 10.0.2.199 + A 10.0.2.200 + A 10.0.2.201 + A 10.0.2.202 + A 10.0.2.203 + A 10.0.2.204 + A 10.0.2.205 + A 10.0.2.206 + A 10.0.2.207 + A 10.0.2.208 + A 10.0.2.209 + A 10.0.2.210 + A 10.0.2.211 + A 10.0.2.212 + A 10.0.2.213 + A 10.0.2.214 + A 10.0.2.215 + A 10.0.2.216 + A 10.0.2.217 + A 10.0.2.218 + A 10.0.2.219 + A 10.0.2.220 + A 10.0.2.221 + A 10.0.2.222 + A 10.0.2.223 + A 10.0.2.224 + A 10.0.2.225 + A 10.0.2.226 + A 10.0.2.227 + A 10.0.2.228 + A 10.0.2.229 + A 10.0.2.230 + A 10.0.2.231 + A 10.0.2.232 + A 10.0.2.233 + A 10.0.2.234 + A 10.0.2.235 + A 10.0.2.236 + A 10.0.2.237 + A 10.0.2.238 + A 10.0.2.239 + A 10.0.2.240 + A 10.0.2.241 + A 10.0.2.242 + A 10.0.2.243 + A 10.0.2.244 + A 10.0.2.245 + A 10.0.2.246 + A 10.0.2.247 + A 10.0.2.248 + A 10.0.2.249 + A 10.0.2.250 + A 10.0.2.251 + A 10.0.2.252 + A 10.0.2.253 + A 10.0.2.254 + A 10.0.2.255 + A 10.0.3.0 + A 10.0.3.1 + A 10.0.3.2 + A 10.0.3.3 + A 10.0.3.4 + A 10.0.3.5 + A 10.0.3.6 + A 10.0.3.7 + A 10.0.3.8 + A 10.0.3.9 + A 10.0.3.10 + A 10.0.3.11 + A 10.0.3.12 + A 10.0.3.13 + A 10.0.3.14 + A 10.0.3.15 + A 10.0.3.16 + A 10.0.3.17 + A 10.0.3.18 + A 10.0.3.19 + A 10.0.3.20 + A 10.0.3.21 + A 10.0.3.22 + A 10.0.3.23 + A 10.0.3.24 + A 10.0.3.25 + A 10.0.3.26 + A 10.0.3.27 + A 10.0.3.28 + A 10.0.3.29 + A 10.0.3.30 + A 10.0.3.31 + A 10.0.3.32 + A 10.0.3.33 + A 10.0.3.34 + A 10.0.3.35 + A 10.0.3.36 + A 10.0.3.37 + A 10.0.3.38 + A 10.0.3.39 + A 10.0.3.40 + A 10.0.3.41 + A 10.0.3.42 + A 10.0.3.43 + A 10.0.3.44 + A 10.0.3.45 + A 10.0.3.46 + A 10.0.3.47 + A 10.0.3.48 + A 10.0.3.49 + A 10.0.3.50 + A 10.0.3.51 + A 10.0.3.52 + A 10.0.3.53 + A 10.0.3.54 + A 10.0.3.55 + A 10.0.3.56 + A 10.0.3.57 + A 10.0.3.58 + A 10.0.3.59 + A 10.0.3.60 + A 10.0.3.61 + A 10.0.3.62 + A 10.0.3.63 + A 10.0.3.64 + A 10.0.3.65 + A 10.0.3.66 + A 10.0.3.67 + A 10.0.3.68 + A 10.0.3.69 + A 10.0.3.70 + A 10.0.3.71 + A 10.0.3.72 + A 10.0.3.73 + A 10.0.3.74 + A 10.0.3.75 + A 10.0.3.76 + A 10.0.3.77 + A 10.0.3.78 + A 10.0.3.79 + A 10.0.3.80 + A 10.0.3.81 + A 10.0.3.82 + A 10.0.3.83 + A 10.0.3.84 + A 10.0.3.85 + A 10.0.3.86 + A 10.0.3.87 + A 10.0.3.88 + A 10.0.3.89 + A 10.0.3.90 + A 10.0.3.91 + A 10.0.3.92 + A 10.0.3.93 + A 10.0.3.94 + A 10.0.3.95 + A 10.0.3.96 + A 10.0.3.97 + A 10.0.3.98 + A 10.0.3.99 + A 10.0.3.100 + A 10.0.3.101 + A 10.0.3.102 + A 10.0.3.103 + A 10.0.3.104 + A 10.0.3.105 + A 10.0.3.106 + A 10.0.3.107 + A 10.0.3.108 + A 10.0.3.109 + A 10.0.3.110 + A 10.0.3.111 + A 10.0.3.112 + A 10.0.3.113 + A 10.0.3.114 + A 10.0.3.115 + A 10.0.3.116 + A 10.0.3.117 + A 10.0.3.118 + A 10.0.3.119 + A 10.0.3.120 + A 10.0.3.121 + A 10.0.3.122 + A 10.0.3.123 + A 10.0.3.124 + A 10.0.3.125 + A 10.0.3.126 + A 10.0.3.127 + A 10.0.3.128 + A 10.0.3.129 + A 10.0.3.130 + A 10.0.3.131 + A 10.0.3.132 + A 10.0.3.133 + A 10.0.3.134 + A 10.0.3.135 + A 10.0.3.136 + A 10.0.3.137 + A 10.0.3.138 + A 10.0.3.139 + A 10.0.3.140 + A 10.0.3.141 + A 10.0.3.142 + A 10.0.3.143 + A 10.0.3.144 + A 10.0.3.145 + A 10.0.3.146 + A 10.0.3.147 + A 10.0.3.148 + A 10.0.3.149 + A 10.0.3.150 + A 10.0.3.151 + A 10.0.3.152 + A 10.0.3.153 + A 10.0.3.154 + A 10.0.3.155 + A 10.0.3.156 + A 10.0.3.157 + A 10.0.3.158 + A 10.0.3.159 + A 10.0.3.160 + A 10.0.3.161 + A 10.0.3.162 + A 10.0.3.163 + A 10.0.3.164 + A 10.0.3.165 + A 10.0.3.166 + A 10.0.3.167 + A 10.0.3.168 + A 10.0.3.169 + A 10.0.3.170 + A 10.0.3.171 + A 10.0.3.172 + A 10.0.3.173 + A 10.0.3.174 + A 10.0.3.175 + A 10.0.3.176 + A 10.0.3.177 + A 10.0.3.178 + A 10.0.3.179 + A 10.0.3.180 + A 10.0.3.181 + A 10.0.3.182 + A 10.0.3.183 + A 10.0.3.184 + A 10.0.3.185 + A 10.0.3.186 + A 10.0.3.187 + A 10.0.3.188 + A 10.0.3.189 + A 10.0.3.190 + A 10.0.3.191 + A 10.0.3.192 + A 10.0.3.193 + A 10.0.3.194 + A 10.0.3.195 + A 10.0.3.196 + A 10.0.3.197 + A 10.0.3.198 + A 10.0.3.199 + A 10.0.3.200 + A 10.0.3.201 + A 10.0.3.202 + A 10.0.3.203 + A 10.0.3.204 + A 10.0.3.205 + A 10.0.3.206 + A 10.0.3.207 + A 10.0.3.208 + A 10.0.3.209 + A 10.0.3.210 + A 10.0.3.211 + A 10.0.3.212 + A 10.0.3.213 + A 10.0.3.214 + A 10.0.3.215 + A 10.0.3.216 + A 10.0.3.217 + A 10.0.3.218 + A 10.0.3.219 + A 10.0.3.220 + A 10.0.3.221 + A 10.0.3.222 + A 10.0.3.223 + A 10.0.3.224 + A 10.0.3.225 + A 10.0.3.226 + A 10.0.3.227 + A 10.0.3.228 + A 10.0.3.229 + A 10.0.3.230 + A 10.0.3.231 + A 10.0.3.232 + A 10.0.3.233 + A 10.0.3.234 + A 10.0.3.235 + A 10.0.3.236 + A 10.0.3.237 + A 10.0.3.238 + A 10.0.3.239 + A 10.0.3.240 + A 10.0.3.241 + A 10.0.3.242 + A 10.0.3.243 + A 10.0.3.244 + A 10.0.3.245 + A 10.0.3.246 + A 10.0.3.247 + A 10.0.3.248 + A 10.0.3.249 + A 10.0.3.250 + A 10.0.3.251 + A 10.0.3.252 + A 10.0.3.253 + A 10.0.3.254 + A 10.0.3.255 + A 10.0.4.0 + A 10.0.4.1 + A 10.0.4.2 + A 10.0.4.3 + A 10.0.4.4 + A 10.0.4.5 + A 10.0.4.6 + A 10.0.4.7 + A 10.0.4.8 + A 10.0.4.9 + A 10.0.4.10 + A 10.0.4.11 + A 10.0.4.12 + A 10.0.4.13 + A 10.0.4.14 + A 10.0.4.15 + A 10.0.4.16 + A 10.0.4.17 + A 10.0.4.18 + A 10.0.4.19 + A 10.0.4.20 + A 10.0.4.21 + A 10.0.4.22 + A 10.0.4.23 + A 10.0.4.24 + A 10.0.4.25 + A 10.0.4.26 + A 10.0.4.27 + A 10.0.4.28 + A 10.0.4.29 + A 10.0.4.30 + A 10.0.4.31 + A 10.0.4.32 + A 10.0.4.33 + A 10.0.4.34 + A 10.0.4.35 + A 10.0.4.36 + A 10.0.4.37 + A 10.0.4.38 + A 10.0.4.39 + A 10.0.4.40 + A 10.0.4.41 + A 10.0.4.42 + A 10.0.4.43 + A 10.0.4.44 + A 10.0.4.45 + A 10.0.4.46 + A 10.0.4.47 + A 10.0.4.48 + A 10.0.4.49 + A 10.0.4.50 + A 10.0.4.51 + A 10.0.4.52 + A 10.0.4.53 + A 10.0.4.54 + A 10.0.4.55 + A 10.0.4.56 + A 10.0.4.57 + A 10.0.4.58 + A 10.0.4.59 + A 10.0.4.60 + A 10.0.4.61 + A 10.0.4.62 + A 10.0.4.63 + A 10.0.4.64 + A 10.0.4.65 + A 10.0.4.66 + A 10.0.4.67 + A 10.0.4.68 + A 10.0.4.69 + A 10.0.4.70 + A 10.0.4.71 + A 10.0.4.72 + A 10.0.4.73 + A 10.0.4.74 + A 10.0.4.75 + A 10.0.4.76 + A 10.0.4.77 + A 10.0.4.78 + A 10.0.4.79 + A 10.0.4.80 + A 10.0.4.81 + A 10.0.4.82 + A 10.0.4.83 + A 10.0.4.84 + A 10.0.4.85 + A 10.0.4.86 + A 10.0.4.87 + A 10.0.4.88 + A 10.0.4.89 + A 10.0.4.90 + A 10.0.4.91 + A 10.0.4.92 + A 10.0.4.93 + A 10.0.4.94 + A 10.0.4.95 + A 10.0.4.96 + A 10.0.4.97 + A 10.0.4.98 + A 10.0.4.99 + A 10.0.4.100 + A 10.0.4.101 + A 10.0.4.102 + A 10.0.4.103 + A 10.0.4.104 + A 10.0.4.105 + A 10.0.4.106 + A 10.0.4.107 + A 10.0.4.108 + A 10.0.4.109 + A 10.0.4.110 + A 10.0.4.111 + A 10.0.4.112 + A 10.0.4.113 + A 10.0.4.114 + A 10.0.4.115 + A 10.0.4.116 + A 10.0.4.117 + A 10.0.4.118 + A 10.0.4.119 + A 10.0.4.120 + A 10.0.4.121 + A 10.0.4.122 + A 10.0.4.123 + A 10.0.4.124 + A 10.0.4.125 + A 10.0.4.126 + A 10.0.4.127 + A 10.0.4.128 + A 10.0.4.129 + A 10.0.4.130 + A 10.0.4.131 + A 10.0.4.132 + A 10.0.4.133 + A 10.0.4.134 + A 10.0.4.135 + A 10.0.4.136 + A 10.0.4.137 + A 10.0.4.138 + A 10.0.4.139 + A 10.0.4.140 + A 10.0.4.141 + A 10.0.4.142 + A 10.0.4.143 + A 10.0.4.144 + A 10.0.4.145 + A 10.0.4.146 + A 10.0.4.147 + A 10.0.4.148 + A 10.0.4.149 + A 10.0.4.150 + A 10.0.4.151 + A 10.0.4.152 + A 10.0.4.153 + A 10.0.4.154 + A 10.0.4.155 + A 10.0.4.156 + A 10.0.4.157 + A 10.0.4.158 + A 10.0.4.159 + A 10.0.4.160 + A 10.0.4.161 + A 10.0.4.162 + A 10.0.4.163 + A 10.0.4.164 + A 10.0.4.165 + A 10.0.4.166 + A 10.0.4.167 + A 10.0.4.168 + A 10.0.4.169 + A 10.0.4.170 + A 10.0.4.171 + A 10.0.4.172 + A 10.0.4.173 + A 10.0.4.174 + A 10.0.4.175 + A 10.0.4.176 + A 10.0.4.177 + A 10.0.4.178 + A 10.0.4.179 + A 10.0.4.180 + A 10.0.4.181 + A 10.0.4.182 + A 10.0.4.183 + A 10.0.4.184 + A 10.0.4.185 + A 10.0.4.186 + A 10.0.4.187 + A 10.0.4.188 + A 10.0.4.189 + A 10.0.4.190 + A 10.0.4.191 + A 10.0.4.192 + A 10.0.4.193 + A 10.0.4.194 + A 10.0.4.195 + A 10.0.4.196 + A 10.0.4.197 + A 10.0.4.198 + A 10.0.4.199 + A 10.0.4.200 + A 10.0.4.201 + A 10.0.4.202 + A 10.0.4.203 + A 10.0.4.204 + A 10.0.4.205 + A 10.0.4.206 + A 10.0.4.207 + A 10.0.4.208 + A 10.0.4.209 + A 10.0.4.210 + A 10.0.4.211 + A 10.0.4.212 + A 10.0.4.213 + A 10.0.4.214 + A 10.0.4.215 + A 10.0.4.216 + A 10.0.4.217 + A 10.0.4.218 + A 10.0.4.219 + A 10.0.4.220 + A 10.0.4.221 + A 10.0.4.222 + A 10.0.4.223 + A 10.0.4.224 + A 10.0.4.225 + A 10.0.4.226 + A 10.0.4.227 + A 10.0.4.228 + A 10.0.4.229 + A 10.0.4.230 + A 10.0.4.231 + A 10.0.4.232 + A 10.0.4.233 + A 10.0.4.234 + A 10.0.4.235 + A 10.0.4.236 + A 10.0.4.237 + A 10.0.4.238 + A 10.0.4.239 + A 10.0.4.240 + A 10.0.4.241 + A 10.0.4.242 + A 10.0.4.243 + A 10.0.4.244 + A 10.0.4.245 + A 10.0.4.246 + A 10.0.4.247 + A 10.0.4.248 + A 10.0.4.249 + A 10.0.4.250 + A 10.0.4.251 + A 10.0.4.252 + A 10.0.4.253 + A 10.0.4.254 + A 10.0.4.255 + A 10.0.5.0 + A 10.0.5.1 + A 10.0.5.2 + A 10.0.5.3 + A 10.0.5.4 + A 10.0.5.5 + A 10.0.5.6 + A 10.0.5.7 + A 10.0.5.8 + A 10.0.5.9 + A 10.0.5.10 + A 10.0.5.11 + A 10.0.5.12 + A 10.0.5.13 + A 10.0.5.14 + A 10.0.5.15 + A 10.0.5.16 + A 10.0.5.17 + A 10.0.5.18 + A 10.0.5.19 + A 10.0.5.20 + A 10.0.5.21 + A 10.0.5.22 + A 10.0.5.23 + A 10.0.5.24 + A 10.0.5.25 + A 10.0.5.26 + A 10.0.5.27 + A 10.0.5.28 + A 10.0.5.29 + A 10.0.5.30 + A 10.0.5.31 + A 10.0.5.32 + A 10.0.5.33 + A 10.0.5.34 + A 10.0.5.35 + A 10.0.5.36 + A 10.0.5.37 + A 10.0.5.38 + A 10.0.5.39 + A 10.0.5.40 + A 10.0.5.41 + A 10.0.5.42 + A 10.0.5.43 + A 10.0.5.44 + A 10.0.5.45 + A 10.0.5.46 + A 10.0.5.47 + A 10.0.5.48 + A 10.0.5.49 + A 10.0.5.50 + A 10.0.5.51 + A 10.0.5.52 + A 10.0.5.53 + A 10.0.5.54 + A 10.0.5.55 + A 10.0.5.56 + A 10.0.5.57 + A 10.0.5.58 + A 10.0.5.59 + A 10.0.5.60 + A 10.0.5.61 + A 10.0.5.62 + A 10.0.5.63 + A 10.0.5.64 + A 10.0.5.65 + A 10.0.5.66 + A 10.0.5.67 + A 10.0.5.68 + A 10.0.5.69 + A 10.0.5.70 + A 10.0.5.71 + A 10.0.5.72 + A 10.0.5.73 + A 10.0.5.74 + A 10.0.5.75 + A 10.0.5.76 + A 10.0.5.77 + A 10.0.5.78 + A 10.0.5.79 + A 10.0.5.80 + A 10.0.5.81 + A 10.0.5.82 + A 10.0.5.83 + A 10.0.5.84 + A 10.0.5.85 + A 10.0.5.86 + A 10.0.5.87 + A 10.0.5.88 + A 10.0.5.89 + A 10.0.5.90 + A 10.0.5.91 + A 10.0.5.92 + A 10.0.5.93 + A 10.0.5.94 + A 10.0.5.95 + A 10.0.5.96 + A 10.0.5.97 + A 10.0.5.98 + A 10.0.5.99 + A 10.0.5.100 + A 10.0.5.101 + A 10.0.5.102 + A 10.0.5.103 + A 10.0.5.104 + A 10.0.5.105 + A 10.0.5.106 + A 10.0.5.107 + A 10.0.5.108 + A 10.0.5.109 + A 10.0.5.110 + A 10.0.5.111 + A 10.0.5.112 + A 10.0.5.113 + A 10.0.5.114 + A 10.0.5.115 + A 10.0.5.116 + A 10.0.5.117 + A 10.0.5.118 + A 10.0.5.119 + A 10.0.5.120 + A 10.0.5.121 + A 10.0.5.122 + A 10.0.5.123 + A 10.0.5.124 + A 10.0.5.125 + A 10.0.5.126 + A 10.0.5.127 + A 10.0.5.128 + A 10.0.5.129 + A 10.0.5.130 + A 10.0.5.131 + A 10.0.5.132 + A 10.0.5.133 + A 10.0.5.134 + A 10.0.5.135 + A 10.0.5.136 + A 10.0.5.137 + A 10.0.5.138 + A 10.0.5.139 + A 10.0.5.140 + A 10.0.5.141 + A 10.0.5.142 + A 10.0.5.143 + A 10.0.5.144 + A 10.0.5.145 + A 10.0.5.146 + A 10.0.5.147 + A 10.0.5.148 + A 10.0.5.149 + A 10.0.5.150 + A 10.0.5.151 + A 10.0.5.152 + A 10.0.5.153 + A 10.0.5.154 + A 10.0.5.155 + A 10.0.5.156 + A 10.0.5.157 + A 10.0.5.158 + A 10.0.5.159 + A 10.0.5.160 + A 10.0.5.161 + A 10.0.5.162 + A 10.0.5.163 + A 10.0.5.164 + A 10.0.5.165 + A 10.0.5.166 + A 10.0.5.167 + A 10.0.5.168 + A 10.0.5.169 + A 10.0.5.170 + A 10.0.5.171 + A 10.0.5.172 + A 10.0.5.173 + A 10.0.5.174 + A 10.0.5.175 + A 10.0.5.176 + A 10.0.5.177 + A 10.0.5.178 + A 10.0.5.179 + A 10.0.5.180 + A 10.0.5.181 + A 10.0.5.182 + A 10.0.5.183 + A 10.0.5.184 + A 10.0.5.185 + A 10.0.5.186 + A 10.0.5.187 + A 10.0.5.188 + A 10.0.5.189 + A 10.0.5.190 + A 10.0.5.191 + A 10.0.5.192 + A 10.0.5.193 + A 10.0.5.194 + A 10.0.5.195 + A 10.0.5.196 + A 10.0.5.197 + A 10.0.5.198 + A 10.0.5.199 + A 10.0.5.200 + A 10.0.5.201 + A 10.0.5.202 + A 10.0.5.203 + A 10.0.5.204 + A 10.0.5.205 + A 10.0.5.206 + A 10.0.5.207 + A 10.0.5.208 + A 10.0.5.209 + A 10.0.5.210 + A 10.0.5.211 + A 10.0.5.212 + A 10.0.5.213 + A 10.0.5.214 + A 10.0.5.215 + A 10.0.5.216 + A 10.0.5.217 + A 10.0.5.218 + A 10.0.5.219 + A 10.0.5.220 + A 10.0.5.221 + A 10.0.5.222 + A 10.0.5.223 + A 10.0.5.224 + A 10.0.5.225 + A 10.0.5.226 + A 10.0.5.227 + A 10.0.5.228 + A 10.0.5.229 + A 10.0.5.230 + A 10.0.5.231 + A 10.0.5.232 + A 10.0.5.233 + A 10.0.5.234 + A 10.0.5.235 + A 10.0.5.236 + A 10.0.5.237 + A 10.0.5.238 + A 10.0.5.239 + A 10.0.5.240 + A 10.0.5.241 + A 10.0.5.242 + A 10.0.5.243 + A 10.0.5.244 + A 10.0.5.245 + A 10.0.5.246 + A 10.0.5.247 + A 10.0.5.248 + A 10.0.5.249 + A 10.0.5.250 + A 10.0.5.251 + A 10.0.5.252 + A 10.0.5.253 + A 10.0.5.254 + A 10.0.5.255 + A 10.0.6.0 + A 10.0.6.1 + A 10.0.6.2 + A 10.0.6.3 + A 10.0.6.4 + A 10.0.6.5 + A 10.0.6.6 + A 10.0.6.7 + A 10.0.6.8 + A 10.0.6.9 + A 10.0.6.10 + A 10.0.6.11 + A 10.0.6.12 + A 10.0.6.13 + A 10.0.6.14 + A 10.0.6.15 + A 10.0.6.16 + A 10.0.6.17 + A 10.0.6.18 + A 10.0.6.19 + A 10.0.6.20 + A 10.0.6.21 + A 10.0.6.22 + A 10.0.6.23 + A 10.0.6.24 + A 10.0.6.25 + A 10.0.6.26 + A 10.0.6.27 + A 10.0.6.28 + A 10.0.6.29 + A 10.0.6.30 + A 10.0.6.31 + A 10.0.6.32 + A 10.0.6.33 + A 10.0.6.34 + A 10.0.6.35 + A 10.0.6.36 + A 10.0.6.37 + A 10.0.6.38 + A 10.0.6.39 + A 10.0.6.40 + A 10.0.6.41 + A 10.0.6.42 + A 10.0.6.43 + A 10.0.6.44 + A 10.0.6.45 + A 10.0.6.46 + A 10.0.6.47 + A 10.0.6.48 + A 10.0.6.49 + A 10.0.6.50 + A 10.0.6.51 + A 10.0.6.52 + A 10.0.6.53 + A 10.0.6.54 + A 10.0.6.55 + A 10.0.6.56 + A 10.0.6.57 + A 10.0.6.58 + A 10.0.6.59 + A 10.0.6.60 + A 10.0.6.61 + A 10.0.6.62 + A 10.0.6.63 + A 10.0.6.64 + A 10.0.6.65 + A 10.0.6.66 + A 10.0.6.67 + A 10.0.6.68 + A 10.0.6.69 + A 10.0.6.70 + A 10.0.6.71 + A 10.0.6.72 + A 10.0.6.73 + A 10.0.6.74 + A 10.0.6.75 + A 10.0.6.76 + A 10.0.6.77 + A 10.0.6.78 + A 10.0.6.79 + A 10.0.6.80 + A 10.0.6.81 + A 10.0.6.82 + A 10.0.6.83 + A 10.0.6.84 + A 10.0.6.85 + A 10.0.6.86 + A 10.0.6.87 + A 10.0.6.88 + A 10.0.6.89 + A 10.0.6.90 + A 10.0.6.91 + A 10.0.6.92 + A 10.0.6.93 + A 10.0.6.94 + A 10.0.6.95 + A 10.0.6.96 + A 10.0.6.97 + A 10.0.6.98 + A 10.0.6.99 + A 10.0.6.100 + A 10.0.6.101 + A 10.0.6.102 + A 10.0.6.103 + A 10.0.6.104 + A 10.0.6.105 + A 10.0.6.106 + A 10.0.6.107 + A 10.0.6.108 + A 10.0.6.109 + A 10.0.6.110 + A 10.0.6.111 + A 10.0.6.112 + A 10.0.6.113 + A 10.0.6.114 + A 10.0.6.115 + A 10.0.6.116 + A 10.0.6.117 + A 10.0.6.118 + A 10.0.6.119 + A 10.0.6.120 + A 10.0.6.121 + A 10.0.6.122 + A 10.0.6.123 + A 10.0.6.124 + A 10.0.6.125 + A 10.0.6.126 + A 10.0.6.127 + A 10.0.6.128 + A 10.0.6.129 + A 10.0.6.130 + A 10.0.6.131 + A 10.0.6.132 + A 10.0.6.133 + A 10.0.6.134 + A 10.0.6.135 + A 10.0.6.136 + A 10.0.6.137 + A 10.0.6.138 + A 10.0.6.139 + A 10.0.6.140 + A 10.0.6.141 + A 10.0.6.142 + A 10.0.6.143 + A 10.0.6.144 + A 10.0.6.145 + A 10.0.6.146 + A 10.0.6.147 + A 10.0.6.148 + A 10.0.6.149 + A 10.0.6.150 + A 10.0.6.151 + A 10.0.6.152 + A 10.0.6.153 + A 10.0.6.154 + A 10.0.6.155 + A 10.0.6.156 + A 10.0.6.157 + A 10.0.6.158 + A 10.0.6.159 + A 10.0.6.160 + A 10.0.6.161 + A 10.0.6.162 + A 10.0.6.163 + A 10.0.6.164 + A 10.0.6.165 + A 10.0.6.166 + A 10.0.6.167 + A 10.0.6.168 + A 10.0.6.169 + A 10.0.6.170 + A 10.0.6.171 + A 10.0.6.172 + A 10.0.6.173 + A 10.0.6.174 + A 10.0.6.175 + A 10.0.6.176 + A 10.0.6.177 + A 10.0.6.178 + A 10.0.6.179 + A 10.0.6.180 + A 10.0.6.181 + A 10.0.6.182 + A 10.0.6.183 + A 10.0.6.184 + A 10.0.6.185 + A 10.0.6.186 + A 10.0.6.187 + A 10.0.6.188 + A 10.0.6.189 + A 10.0.6.190 + A 10.0.6.191 + A 10.0.6.192 + A 10.0.6.193 + A 10.0.6.194 + A 10.0.6.195 + A 10.0.6.196 + A 10.0.6.197 + A 10.0.6.198 + A 10.0.6.199 + A 10.0.6.200 + A 10.0.6.201 + A 10.0.6.202 + A 10.0.6.203 + A 10.0.6.204 + A 10.0.6.205 + A 10.0.6.206 + A 10.0.6.207 + A 10.0.6.208 + A 10.0.6.209 + A 10.0.6.210 + A 10.0.6.211 + A 10.0.6.212 + A 10.0.6.213 + A 10.0.6.214 + A 10.0.6.215 + A 10.0.6.216 + A 10.0.6.217 + A 10.0.6.218 + A 10.0.6.219 + A 10.0.6.220 + A 10.0.6.221 + A 10.0.6.222 + A 10.0.6.223 + A 10.0.6.224 + A 10.0.6.225 + A 10.0.6.226 + A 10.0.6.227 + A 10.0.6.228 + A 10.0.6.229 + A 10.0.6.230 + A 10.0.6.231 + A 10.0.6.232 + A 10.0.6.233 + A 10.0.6.234 + A 10.0.6.235 + A 10.0.6.236 + A 10.0.6.237 + A 10.0.6.238 + A 10.0.6.239 + A 10.0.6.240 + A 10.0.6.241 + A 10.0.6.242 + A 10.0.6.243 + A 10.0.6.244 + A 10.0.6.245 + A 10.0.6.246 + A 10.0.6.247 + A 10.0.6.248 + A 10.0.6.249 + A 10.0.6.250 + A 10.0.6.251 + A 10.0.6.252 + A 10.0.6.253 + A 10.0.6.254 + A 10.0.6.255 + A 10.0.7.0 + A 10.0.7.1 + A 10.0.7.2 + A 10.0.7.3 + A 10.0.7.4 + A 10.0.7.5 + A 10.0.7.6 + A 10.0.7.7 + A 10.0.7.8 + A 10.0.7.9 + A 10.0.7.10 + A 10.0.7.11 + A 10.0.7.12 + A 10.0.7.13 + A 10.0.7.14 + A 10.0.7.15 + A 10.0.7.16 + A 10.0.7.17 + A 10.0.7.18 + A 10.0.7.19 + A 10.0.7.20 + A 10.0.7.21 + A 10.0.7.22 + A 10.0.7.23 + A 10.0.7.24 + A 10.0.7.25 + A 10.0.7.26 + A 10.0.7.27 + A 10.0.7.28 + A 10.0.7.29 + A 10.0.7.30 + A 10.0.7.31 + A 10.0.7.32 + A 10.0.7.33 + A 10.0.7.34 + A 10.0.7.35 + A 10.0.7.36 + A 10.0.7.37 + A 10.0.7.38 + A 10.0.7.39 + A 10.0.7.40 + A 10.0.7.41 + A 10.0.7.42 + A 10.0.7.43 + A 10.0.7.44 + A 10.0.7.45 + A 10.0.7.46 + A 10.0.7.47 + A 10.0.7.48 + A 10.0.7.49 + A 10.0.7.50 + A 10.0.7.51 + A 10.0.7.52 + A 10.0.7.53 + A 10.0.7.54 + A 10.0.7.55 + A 10.0.7.56 + A 10.0.7.57 + A 10.0.7.58 + A 10.0.7.59 + A 10.0.7.60 + A 10.0.7.61 + A 10.0.7.62 + A 10.0.7.63 + A 10.0.7.64 + A 10.0.7.65 + A 10.0.7.66 + A 10.0.7.67 + A 10.0.7.68 + A 10.0.7.69 + A 10.0.7.70 + A 10.0.7.71 + A 10.0.7.72 + A 10.0.7.73 + A 10.0.7.74 + A 10.0.7.75 + A 10.0.7.76 + A 10.0.7.77 + A 10.0.7.78 + A 10.0.7.79 + A 10.0.7.80 + A 10.0.7.81 + A 10.0.7.82 + A 10.0.7.83 + A 10.0.7.84 + A 10.0.7.85 + A 10.0.7.86 + A 10.0.7.87 + A 10.0.7.88 + A 10.0.7.89 + A 10.0.7.90 + A 10.0.7.91 + A 10.0.7.92 + A 10.0.7.93 + A 10.0.7.94 + A 10.0.7.95 + A 10.0.7.96 + A 10.0.7.97 + A 10.0.7.98 + A 10.0.7.99 + A 10.0.7.100 + A 10.0.7.101 + A 10.0.7.102 + A 10.0.7.103 + A 10.0.7.104 + A 10.0.7.105 + A 10.0.7.106 + A 10.0.7.107 + A 10.0.7.108 + A 10.0.7.109 + A 10.0.7.110 + A 10.0.7.111 + A 10.0.7.112 + A 10.0.7.113 + A 10.0.7.114 + A 10.0.7.115 + A 10.0.7.116 + A 10.0.7.117 + A 10.0.7.118 + A 10.0.7.119 + A 10.0.7.120 + A 10.0.7.121 + A 10.0.7.122 + A 10.0.7.123 + A 10.0.7.124 + A 10.0.7.125 + A 10.0.7.126 + A 10.0.7.127 + A 10.0.7.128 + A 10.0.7.129 + A 10.0.7.130 + A 10.0.7.131 + A 10.0.7.132 + A 10.0.7.133 + A 10.0.7.134 + A 10.0.7.135 + A 10.0.7.136 + A 10.0.7.137 + A 10.0.7.138 + A 10.0.7.139 + A 10.0.7.140 + A 10.0.7.141 + A 10.0.7.142 + A 10.0.7.143 + A 10.0.7.144 + A 10.0.7.145 + A 10.0.7.146 + A 10.0.7.147 + A 10.0.7.148 + A 10.0.7.149 + A 10.0.7.150 + A 10.0.7.151 + A 10.0.7.152 + A 10.0.7.153 + A 10.0.7.154 + A 10.0.7.155 + A 10.0.7.156 + A 10.0.7.157 + A 10.0.7.158 + A 10.0.7.159 + A 10.0.7.160 + A 10.0.7.161 + A 10.0.7.162 + A 10.0.7.163 + A 10.0.7.164 + A 10.0.7.165 + A 10.0.7.166 + A 10.0.7.167 + A 10.0.7.168 + A 10.0.7.169 + A 10.0.7.170 + A 10.0.7.171 + A 10.0.7.172 + A 10.0.7.173 + A 10.0.7.174 + A 10.0.7.175 + A 10.0.7.176 + A 10.0.7.177 + A 10.0.7.178 + A 10.0.7.179 + A 10.0.7.180 + A 10.0.7.181 + A 10.0.7.182 + A 10.0.7.183 + A 10.0.7.184 + A 10.0.7.185 + A 10.0.7.186 + A 10.0.7.187 + A 10.0.7.188 + A 10.0.7.189 + A 10.0.7.190 + A 10.0.7.191 + A 10.0.7.192 + A 10.0.7.193 + A 10.0.7.194 + A 10.0.7.195 + A 10.0.7.196 + A 10.0.7.197 + A 10.0.7.198 + A 10.0.7.199 + A 10.0.7.200 + A 10.0.7.201 + A 10.0.7.202 + A 10.0.7.203 + A 10.0.7.204 + A 10.0.7.205 + A 10.0.7.206 + A 10.0.7.207 + A 10.0.7.208 + A 10.0.7.209 + A 10.0.7.210 + A 10.0.7.211 + A 10.0.7.212 + A 10.0.7.213 + A 10.0.7.214 + A 10.0.7.215 + A 10.0.7.216 + A 10.0.7.217 + A 10.0.7.218 + A 10.0.7.219 + A 10.0.7.220 + A 10.0.7.221 + A 10.0.7.222 + A 10.0.7.223 + A 10.0.7.224 + A 10.0.7.225 + A 10.0.7.226 + A 10.0.7.227 + A 10.0.7.228 + A 10.0.7.229 + A 10.0.7.230 + A 10.0.7.231 + A 10.0.7.232 + A 10.0.7.233 + A 10.0.7.234 + A 10.0.7.235 + A 10.0.7.236 + A 10.0.7.237 + A 10.0.7.238 + A 10.0.7.239 + A 10.0.7.240 + A 10.0.7.241 + A 10.0.7.242 + A 10.0.7.243 + A 10.0.7.244 + A 10.0.7.245 + A 10.0.7.246 + A 10.0.7.247 + A 10.0.7.248 + A 10.0.7.249 + A 10.0.7.250 + A 10.0.7.251 + A 10.0.7.252 + A 10.0.7.253 + A 10.0.7.254 + A 10.0.7.255 + A 10.0.8.0 + A 10.0.8.1 + A 10.0.8.2 + A 10.0.8.3 + A 10.0.8.4 + A 10.0.8.5 + A 10.0.8.6 + A 10.0.8.7 + A 10.0.8.8 + A 10.0.8.9 + A 10.0.8.10 + A 10.0.8.11 + A 10.0.8.12 + A 10.0.8.13 + A 10.0.8.14 + A 10.0.8.15 + A 10.0.8.16 + A 10.0.8.17 + A 10.0.8.18 + A 10.0.8.19 + A 10.0.8.20 + A 10.0.8.21 + A 10.0.8.22 + A 10.0.8.23 + A 10.0.8.24 + A 10.0.8.25 + A 10.0.8.26 + A 10.0.8.27 + A 10.0.8.28 + A 10.0.8.29 + A 10.0.8.30 + A 10.0.8.31 + A 10.0.8.32 + A 10.0.8.33 + A 10.0.8.34 + A 10.0.8.35 + A 10.0.8.36 + A 10.0.8.37 + A 10.0.8.38 + A 10.0.8.39 + A 10.0.8.40 + A 10.0.8.41 + A 10.0.8.42 + A 10.0.8.43 + A 10.0.8.44 + A 10.0.8.45 + A 10.0.8.46 + A 10.0.8.47 + A 10.0.8.48 + A 10.0.8.49 + A 10.0.8.50 + A 10.0.8.51 + A 10.0.8.52 + A 10.0.8.53 + A 10.0.8.54 + A 10.0.8.55 + A 10.0.8.56 + A 10.0.8.57 + A 10.0.8.58 + A 10.0.8.59 + A 10.0.8.60 + A 10.0.8.61 + A 10.0.8.62 + A 10.0.8.63 + A 10.0.8.64 + A 10.0.8.65 + A 10.0.8.66 + A 10.0.8.67 + A 10.0.8.68 + A 10.0.8.69 + A 10.0.8.70 + A 10.0.8.71 + A 10.0.8.72 + A 10.0.8.73 + A 10.0.8.74 + A 10.0.8.75 + A 10.0.8.76 + A 10.0.8.77 + A 10.0.8.78 + A 10.0.8.79 + A 10.0.8.80 + A 10.0.8.81 + A 10.0.8.82 + A 10.0.8.83 + A 10.0.8.84 + A 10.0.8.85 + A 10.0.8.86 + A 10.0.8.87 + A 10.0.8.88 + A 10.0.8.89 + A 10.0.8.90 + A 10.0.8.91 + A 10.0.8.92 + A 10.0.8.93 + A 10.0.8.94 + A 10.0.8.95 + A 10.0.8.96 + A 10.0.8.97 + A 10.0.8.98 + A 10.0.8.99 + A 10.0.8.100 + A 10.0.8.101 + A 10.0.8.102 + A 10.0.8.103 + A 10.0.8.104 + A 10.0.8.105 + A 10.0.8.106 + A 10.0.8.107 + A 10.0.8.108 + A 10.0.8.109 + A 10.0.8.110 + A 10.0.8.111 + A 10.0.8.112 + A 10.0.8.113 + A 10.0.8.114 + A 10.0.8.115 + A 10.0.8.116 + A 10.0.8.117 + A 10.0.8.118 + A 10.0.8.119 + A 10.0.8.120 + A 10.0.8.121 + A 10.0.8.122 + A 10.0.8.123 + A 10.0.8.124 + A 10.0.8.125 + A 10.0.8.126 + A 10.0.8.127 + A 10.0.8.128 + A 10.0.8.129 + A 10.0.8.130 + A 10.0.8.131 + A 10.0.8.132 + A 10.0.8.133 + A 10.0.8.134 + A 10.0.8.135 + A 10.0.8.136 + A 10.0.8.137 + A 10.0.8.138 + A 10.0.8.139 + A 10.0.8.140 + A 10.0.8.141 + A 10.0.8.142 + A 10.0.8.143 + A 10.0.8.144 + A 10.0.8.145 + A 10.0.8.146 + A 10.0.8.147 + A 10.0.8.148 + A 10.0.8.149 + A 10.0.8.150 + A 10.0.8.151 + A 10.0.8.152 + A 10.0.8.153 + A 10.0.8.154 + A 10.0.8.155 + A 10.0.8.156 + A 10.0.8.157 + A 10.0.8.158 + A 10.0.8.159 + A 10.0.8.160 + A 10.0.8.161 + A 10.0.8.162 + A 10.0.8.163 + A 10.0.8.164 + A 10.0.8.165 + A 10.0.8.166 + A 10.0.8.167 + A 10.0.8.168 + A 10.0.8.169 + A 10.0.8.170 + A 10.0.8.171 + A 10.0.8.172 + A 10.0.8.173 + A 10.0.8.174 + A 10.0.8.175 + A 10.0.8.176 + A 10.0.8.177 + A 10.0.8.178 + A 10.0.8.179 + A 10.0.8.180 + A 10.0.8.181 + A 10.0.8.182 + A 10.0.8.183 + A 10.0.8.184 + A 10.0.8.185 + A 10.0.8.186 + A 10.0.8.187 + A 10.0.8.188 + A 10.0.8.189 + A 10.0.8.190 + A 10.0.8.191 + A 10.0.8.192 + A 10.0.8.193 + A 10.0.8.194 + A 10.0.8.195 + A 10.0.8.196 + A 10.0.8.197 + A 10.0.8.198 + A 10.0.8.199 + A 10.0.8.200 + A 10.0.8.201 + A 10.0.8.202 + A 10.0.8.203 + A 10.0.8.204 + A 10.0.8.205 + A 10.0.8.206 + A 10.0.8.207 + A 10.0.8.208 + A 10.0.8.209 + A 10.0.8.210 + A 10.0.8.211 + A 10.0.8.212 + A 10.0.8.213 + A 10.0.8.214 + A 10.0.8.215 + A 10.0.8.216 + A 10.0.8.217 + A 10.0.8.218 + A 10.0.8.219 + A 10.0.8.220 + A 10.0.8.221 + A 10.0.8.222 + A 10.0.8.223 + A 10.0.8.224 + A 10.0.8.225 + A 10.0.8.226 + A 10.0.8.227 + A 10.0.8.228 + A 10.0.8.229 + A 10.0.8.230 + A 10.0.8.231 + A 10.0.8.232 + A 10.0.8.233 + A 10.0.8.234 + A 10.0.8.235 + A 10.0.8.236 + A 10.0.8.237 + A 10.0.8.238 + A 10.0.8.239 + A 10.0.8.240 + A 10.0.8.241 + A 10.0.8.242 + A 10.0.8.243 + A 10.0.8.244 + A 10.0.8.245 + A 10.0.8.246 + A 10.0.8.247 + A 10.0.8.248 + A 10.0.8.249 + A 10.0.8.250 + A 10.0.8.251 + A 10.0.8.252 + A 10.0.8.253 + A 10.0.8.254 + A 10.0.8.255 + A 10.0.9.0 + A 10.0.9.1 + A 10.0.9.2 + A 10.0.9.3 + A 10.0.9.4 + A 10.0.9.5 + A 10.0.9.6 + A 10.0.9.7 + A 10.0.9.8 + A 10.0.9.9 + A 10.0.9.10 + A 10.0.9.11 + A 10.0.9.12 + A 10.0.9.13 + A 10.0.9.14 + A 10.0.9.15 + A 10.0.9.16 + A 10.0.9.17 + A 10.0.9.18 + A 10.0.9.19 + A 10.0.9.20 + A 10.0.9.21 + A 10.0.9.22 + A 10.0.9.23 + A 10.0.9.24 + A 10.0.9.25 + A 10.0.9.26 + A 10.0.9.27 + A 10.0.9.28 + A 10.0.9.29 + A 10.0.9.30 + A 10.0.9.31 + A 10.0.9.32 + A 10.0.9.33 + A 10.0.9.34 + A 10.0.9.35 + A 10.0.9.36 + A 10.0.9.37 + A 10.0.9.38 + A 10.0.9.39 + A 10.0.9.40 + A 10.0.9.41 + A 10.0.9.42 + A 10.0.9.43 + A 10.0.9.44 + A 10.0.9.45 + A 10.0.9.46 + A 10.0.9.47 + A 10.0.9.48 + A 10.0.9.49 + A 10.0.9.50 + A 10.0.9.51 + A 10.0.9.52 + A 10.0.9.53 + A 10.0.9.54 + A 10.0.9.55 + A 10.0.9.56 + A 10.0.9.57 + A 10.0.9.58 + A 10.0.9.59 + A 10.0.9.60 + A 10.0.9.61 + A 10.0.9.62 + A 10.0.9.63 + A 10.0.9.64 + A 10.0.9.65 + A 10.0.9.66 + A 10.0.9.67 + A 10.0.9.68 + A 10.0.9.69 + A 10.0.9.70 + A 10.0.9.71 + A 10.0.9.72 + A 10.0.9.73 + A 10.0.9.74 + A 10.0.9.75 + A 10.0.9.76 + A 10.0.9.77 + A 10.0.9.78 + A 10.0.9.79 + A 10.0.9.80 + A 10.0.9.81 + A 10.0.9.82 + A 10.0.9.83 + A 10.0.9.84 + A 10.0.9.85 + A 10.0.9.86 + A 10.0.9.87 + A 10.0.9.88 + A 10.0.9.89 + A 10.0.9.90 + A 10.0.9.91 + A 10.0.9.92 + A 10.0.9.93 + A 10.0.9.94 + A 10.0.9.95 + A 10.0.9.96 + A 10.0.9.97 + A 10.0.9.98 + A 10.0.9.99 + A 10.0.9.100 + A 10.0.9.101 + A 10.0.9.102 + A 10.0.9.103 + A 10.0.9.104 + A 10.0.9.105 + A 10.0.9.106 + A 10.0.9.107 + A 10.0.9.108 + A 10.0.9.109 + A 10.0.9.110 + A 10.0.9.111 + A 10.0.9.112 + A 10.0.9.113 + A 10.0.9.114 + A 10.0.9.115 + A 10.0.9.116 + A 10.0.9.117 + A 10.0.9.118 + A 10.0.9.119 + A 10.0.9.120 + A 10.0.9.121 + A 10.0.9.122 + A 10.0.9.123 + A 10.0.9.124 + A 10.0.9.125 + A 10.0.9.126 + A 10.0.9.127 + A 10.0.9.128 + A 10.0.9.129 + A 10.0.9.130 + A 10.0.9.131 + A 10.0.9.132 + A 10.0.9.133 + A 10.0.9.134 + A 10.0.9.135 + A 10.0.9.136 + A 10.0.9.137 + A 10.0.9.138 + A 10.0.9.139 + A 10.0.9.140 + A 10.0.9.141 + A 10.0.9.142 + A 10.0.9.143 + A 10.0.9.144 + A 10.0.9.145 + A 10.0.9.146 + A 10.0.9.147 + A 10.0.9.148 + A 10.0.9.149 + A 10.0.9.150 + A 10.0.9.151 + A 10.0.9.152 + A 10.0.9.153 + A 10.0.9.154 + A 10.0.9.155 + A 10.0.9.156 + A 10.0.9.157 + A 10.0.9.158 + A 10.0.9.159 + A 10.0.9.160 + A 10.0.9.161 + A 10.0.9.162 + A 10.0.9.163 + A 10.0.9.164 + A 10.0.9.165 + A 10.0.9.166 + A 10.0.9.167 + A 10.0.9.168 + A 10.0.9.169 + A 10.0.9.170 + A 10.0.9.171 + A 10.0.9.172 + A 10.0.9.173 + A 10.0.9.174 + A 10.0.9.175 + A 10.0.9.176 + A 10.0.9.177 + A 10.0.9.178 + A 10.0.9.179 + A 10.0.9.180 + A 10.0.9.181 + A 10.0.9.182 + A 10.0.9.183 + A 10.0.9.184 + A 10.0.9.185 + A 10.0.9.186 + A 10.0.9.187 + A 10.0.9.188 + A 10.0.9.189 + A 10.0.9.190 + A 10.0.9.191 + A 10.0.9.192 + A 10.0.9.193 + A 10.0.9.194 + A 10.0.9.195 + A 10.0.9.196 + A 10.0.9.197 + A 10.0.9.198 + A 10.0.9.199 + A 10.0.9.200 + A 10.0.9.201 + A 10.0.9.202 + A 10.0.9.203 + A 10.0.9.204 + A 10.0.9.205 + A 10.0.9.206 + A 10.0.9.207 + A 10.0.9.208 + A 10.0.9.209 + A 10.0.9.210 + A 10.0.9.211 + A 10.0.9.212 + A 10.0.9.213 + A 10.0.9.214 + A 10.0.9.215 + A 10.0.9.216 + A 10.0.9.217 + A 10.0.9.218 + A 10.0.9.219 + A 10.0.9.220 + A 10.0.9.221 + A 10.0.9.222 + A 10.0.9.223 + A 10.0.9.224 + A 10.0.9.225 + A 10.0.9.226 + A 10.0.9.227 + A 10.0.9.228 + A 10.0.9.229 + A 10.0.9.230 + A 10.0.9.231 + A 10.0.9.232 + A 10.0.9.233 + A 10.0.9.234 + A 10.0.9.235 + A 10.0.9.236 + A 10.0.9.237 + A 10.0.9.238 + A 10.0.9.239 + A 10.0.9.240 + A 10.0.9.241 + A 10.0.9.242 + A 10.0.9.243 + A 10.0.9.244 + A 10.0.9.245 + A 10.0.9.246 + A 10.0.9.247 + A 10.0.9.248 + A 10.0.9.249 + A 10.0.9.250 + A 10.0.9.251 + A 10.0.9.252 + A 10.0.9.253 + A 10.0.9.254 + A 10.0.9.255 + A 10.0.10.0 + A 10.0.10.1 + A 10.0.10.2 + A 10.0.10.3 + A 10.0.10.4 + A 10.0.10.5 + A 10.0.10.6 + A 10.0.10.7 + A 10.0.10.8 + A 10.0.10.9 + A 10.0.10.10 + A 10.0.10.11 + A 10.0.10.12 + A 10.0.10.13 + A 10.0.10.14 + A 10.0.10.15 + A 10.0.10.16 + A 10.0.10.17 + A 10.0.10.18 + A 10.0.10.19 + A 10.0.10.20 + A 10.0.10.21 + A 10.0.10.22 + A 10.0.10.23 + A 10.0.10.24 + A 10.0.10.25 + A 10.0.10.26 + A 10.0.10.27 + A 10.0.10.28 + A 10.0.10.29 + A 10.0.10.30 + A 10.0.10.31 + A 10.0.10.32 + A 10.0.10.33 + A 10.0.10.34 + A 10.0.10.35 + A 10.0.10.36 + A 10.0.10.37 + A 10.0.10.38 + A 10.0.10.39 + A 10.0.10.40 + A 10.0.10.41 + A 10.0.10.42 + A 10.0.10.43 + A 10.0.10.44 + A 10.0.10.45 + A 10.0.10.46 + A 10.0.10.47 + A 10.0.10.48 + A 10.0.10.49 + A 10.0.10.50 + A 10.0.10.51 + A 10.0.10.52 + A 10.0.10.53 + A 10.0.10.54 + A 10.0.10.55 + A 10.0.10.56 + A 10.0.10.57 + A 10.0.10.58 + A 10.0.10.59 + A 10.0.10.60 + A 10.0.10.61 + A 10.0.10.62 + A 10.0.10.63 + A 10.0.10.64 + A 10.0.10.65 + A 10.0.10.66 + A 10.0.10.67 + A 10.0.10.68 + A 10.0.10.69 + A 10.0.10.70 + A 10.0.10.71 + A 10.0.10.72 + A 10.0.10.73 + A 10.0.10.74 + A 10.0.10.75 + A 10.0.10.76 + A 10.0.10.77 + A 10.0.10.78 + A 10.0.10.79 + A 10.0.10.80 + A 10.0.10.81 + A 10.0.10.82 + A 10.0.10.83 + A 10.0.10.84 + A 10.0.10.85 + A 10.0.10.86 + A 10.0.10.87 + A 10.0.10.88 + A 10.0.10.89 + A 10.0.10.90 + A 10.0.10.91 + A 10.0.10.92 + A 10.0.10.93 + A 10.0.10.94 + A 10.0.10.95 + A 10.0.10.96 + A 10.0.10.97 + A 10.0.10.98 + A 10.0.10.99 + A 10.0.10.100 + A 10.0.10.101 + A 10.0.10.102 + A 10.0.10.103 + A 10.0.10.104 + A 10.0.10.105 + A 10.0.10.106 + A 10.0.10.107 + A 10.0.10.108 + A 10.0.10.109 + A 10.0.10.110 + A 10.0.10.111 + A 10.0.10.112 + A 10.0.10.113 + A 10.0.10.114 + A 10.0.10.115 + A 10.0.10.116 + A 10.0.10.117 + A 10.0.10.118 + A 10.0.10.119 + A 10.0.10.120 + A 10.0.10.121 + A 10.0.10.122 + A 10.0.10.123 + A 10.0.10.124 + A 10.0.10.125 + A 10.0.10.126 + A 10.0.10.127 + A 10.0.10.128 + A 10.0.10.129 + A 10.0.10.130 + A 10.0.10.131 + A 10.0.10.132 + A 10.0.10.133 + A 10.0.10.134 + A 10.0.10.135 + A 10.0.10.136 + A 10.0.10.137 + A 10.0.10.138 + A 10.0.10.139 + A 10.0.10.140 + A 10.0.10.141 + A 10.0.10.142 + A 10.0.10.143 + A 10.0.10.144 + A 10.0.10.145 + A 10.0.10.146 + A 10.0.10.147 + A 10.0.10.148 + A 10.0.10.149 + A 10.0.10.150 + A 10.0.10.151 + A 10.0.10.152 + A 10.0.10.153 + A 10.0.10.154 + A 10.0.10.155 + A 10.0.10.156 + A 10.0.10.157 + A 10.0.10.158 + A 10.0.10.159 + A 10.0.10.160 + A 10.0.10.161 + A 10.0.10.162 + A 10.0.10.163 + A 10.0.10.164 + A 10.0.10.165 + A 10.0.10.166 + A 10.0.10.167 + A 10.0.10.168 + A 10.0.10.169 + A 10.0.10.170 + A 10.0.10.171 + A 10.0.10.172 + A 10.0.10.173 + A 10.0.10.174 + A 10.0.10.175 + A 10.0.10.176 + A 10.0.10.177 + A 10.0.10.178 + A 10.0.10.179 + A 10.0.10.180 + A 10.0.10.181 + A 10.0.10.182 + A 10.0.10.183 + A 10.0.10.184 + A 10.0.10.185 + A 10.0.10.186 + A 10.0.10.187 + A 10.0.10.188 + A 10.0.10.189 + A 10.0.10.190 + A 10.0.10.191 + A 10.0.10.192 + A 10.0.10.193 + A 10.0.10.194 + A 10.0.10.195 + A 10.0.10.196 + A 10.0.10.197 + A 10.0.10.198 + A 10.0.10.199 + A 10.0.10.200 + A 10.0.10.201 + A 10.0.10.202 + A 10.0.10.203 + A 10.0.10.204 + A 10.0.10.205 + A 10.0.10.206 + A 10.0.10.207 + A 10.0.10.208 + A 10.0.10.209 + A 10.0.10.210 + A 10.0.10.211 + A 10.0.10.212 + A 10.0.10.213 + A 10.0.10.214 + A 10.0.10.215 + A 10.0.10.216 + A 10.0.10.217 + A 10.0.10.218 + A 10.0.10.219 + A 10.0.10.220 + A 10.0.10.221 + A 10.0.10.222 + A 10.0.10.223 + A 10.0.10.224 + A 10.0.10.225 + A 10.0.10.226 + A 10.0.10.227 + A 10.0.10.228 + A 10.0.10.229 + A 10.0.10.230 + A 10.0.10.231 + A 10.0.10.232 + A 10.0.10.233 + A 10.0.10.234 + A 10.0.10.235 + A 10.0.10.236 + A 10.0.10.237 + A 10.0.10.238 + A 10.0.10.239 + A 10.0.10.240 + A 10.0.10.241 + A 10.0.10.242 + A 10.0.10.243 + A 10.0.10.244 + A 10.0.10.245 + A 10.0.10.246 + A 10.0.10.247 + A 10.0.10.248 + A 10.0.10.249 + A 10.0.10.250 + A 10.0.10.251 + A 10.0.10.252 + A 10.0.10.253 + A 10.0.10.254 + A 10.0.10.255 + A 10.0.11.0 + A 10.0.11.1 + A 10.0.11.2 + A 10.0.11.3 + A 10.0.11.4 + A 10.0.11.5 + A 10.0.11.6 + A 10.0.11.7 + A 10.0.11.8 + A 10.0.11.9 + A 10.0.11.10 + A 10.0.11.11 + A 10.0.11.12 + A 10.0.11.13 + A 10.0.11.14 + A 10.0.11.15 + A 10.0.11.16 + A 10.0.11.17 + A 10.0.11.18 + A 10.0.11.19 + A 10.0.11.20 + A 10.0.11.21 + A 10.0.11.22 + A 10.0.11.23 + A 10.0.11.24 + A 10.0.11.25 + A 10.0.11.26 + A 10.0.11.27 + A 10.0.11.28 + A 10.0.11.29 + A 10.0.11.30 + A 10.0.11.31 + A 10.0.11.32 + A 10.0.11.33 + A 10.0.11.34 + A 10.0.11.35 + A 10.0.11.36 + A 10.0.11.37 + A 10.0.11.38 + A 10.0.11.39 + A 10.0.11.40 + A 10.0.11.41 + A 10.0.11.42 + A 10.0.11.43 + A 10.0.11.44 + A 10.0.11.45 + A 10.0.11.46 + A 10.0.11.47 + A 10.0.11.48 + A 10.0.11.49 + A 10.0.11.50 + A 10.0.11.51 + A 10.0.11.52 + A 10.0.11.53 + A 10.0.11.54 + A 10.0.11.55 + A 10.0.11.56 + A 10.0.11.57 + A 10.0.11.58 + A 10.0.11.59 + A 10.0.11.60 + A 10.0.11.61 + A 10.0.11.62 + A 10.0.11.63 + A 10.0.11.64 + A 10.0.11.65 + A 10.0.11.66 + A 10.0.11.67 + A 10.0.11.68 + A 10.0.11.69 + A 10.0.11.70 + A 10.0.11.71 + A 10.0.11.72 + A 10.0.11.73 + A 10.0.11.74 + A 10.0.11.75 + A 10.0.11.76 + A 10.0.11.77 + A 10.0.11.78 + A 10.0.11.79 + A 10.0.11.80 + A 10.0.11.81 + A 10.0.11.82 + A 10.0.11.83 + A 10.0.11.84 + A 10.0.11.85 + A 10.0.11.86 + A 10.0.11.87 + A 10.0.11.88 + A 10.0.11.89 + A 10.0.11.90 + A 10.0.11.91 + A 10.0.11.92 + A 10.0.11.93 + A 10.0.11.94 + A 10.0.11.95 + A 10.0.11.96 + A 10.0.11.97 + A 10.0.11.98 + A 10.0.11.99 + A 10.0.11.100 + A 10.0.11.101 + A 10.0.11.102 + A 10.0.11.103 + A 10.0.11.104 + A 10.0.11.105 + A 10.0.11.106 + A 10.0.11.107 + A 10.0.11.108 + A 10.0.11.109 + A 10.0.11.110 + A 10.0.11.111 + A 10.0.11.112 + A 10.0.11.113 + A 10.0.11.114 + A 10.0.11.115 + A 10.0.11.116 + A 10.0.11.117 + A 10.0.11.118 + A 10.0.11.119 + A 10.0.11.120 + A 10.0.11.121 + A 10.0.11.122 + A 10.0.11.123 + A 10.0.11.124 + A 10.0.11.125 + A 10.0.11.126 + A 10.0.11.127 + A 10.0.11.128 + A 10.0.11.129 + A 10.0.11.130 + A 10.0.11.131 + A 10.0.11.132 + A 10.0.11.133 + A 10.0.11.134 + A 10.0.11.135 + A 10.0.11.136 + A 10.0.11.137 + A 10.0.11.138 + A 10.0.11.139 + A 10.0.11.140 + A 10.0.11.141 + A 10.0.11.142 + A 10.0.11.143 + A 10.0.11.144 + A 10.0.11.145 + A 10.0.11.146 + A 10.0.11.147 + A 10.0.11.148 + A 10.0.11.149 + A 10.0.11.150 + A 10.0.11.151 + A 10.0.11.152 + A 10.0.11.153 + A 10.0.11.154 + A 10.0.11.155 + A 10.0.11.156 + A 10.0.11.157 + A 10.0.11.158 + A 10.0.11.159 + A 10.0.11.160 + A 10.0.11.161 + A 10.0.11.162 + A 10.0.11.163 + A 10.0.11.164 + A 10.0.11.165 + A 10.0.11.166 + A 10.0.11.167 + A 10.0.11.168 + A 10.0.11.169 + A 10.0.11.170 + A 10.0.11.171 + A 10.0.11.172 + A 10.0.11.173 + A 10.0.11.174 + A 10.0.11.175 + A 10.0.11.176 + A 10.0.11.177 + A 10.0.11.178 + A 10.0.11.179 + A 10.0.11.180 + A 10.0.11.181 + A 10.0.11.182 + A 10.0.11.183 + A 10.0.11.184 + A 10.0.11.185 + A 10.0.11.186 + A 10.0.11.187 + A 10.0.11.188 + A 10.0.11.189 + A 10.0.11.190 + A 10.0.11.191 + A 10.0.11.192 + A 10.0.11.193 + A 10.0.11.194 + A 10.0.11.195 + A 10.0.11.196 + A 10.0.11.197 + A 10.0.11.198 + A 10.0.11.199 + A 10.0.11.200 + A 10.0.11.201 + A 10.0.11.202 + A 10.0.11.203 + A 10.0.11.204 + A 10.0.11.205 + A 10.0.11.206 + A 10.0.11.207 + A 10.0.11.208 + A 10.0.11.209 + A 10.0.11.210 + A 10.0.11.211 + A 10.0.11.212 + A 10.0.11.213 + A 10.0.11.214 + A 10.0.11.215 + A 10.0.11.216 + A 10.0.11.217 + A 10.0.11.218 + A 10.0.11.219 + A 10.0.11.220 + A 10.0.11.221 + A 10.0.11.222 + A 10.0.11.223 + A 10.0.11.224 + A 10.0.11.225 + A 10.0.11.226 + A 10.0.11.227 + A 10.0.11.228 + A 10.0.11.229 + A 10.0.11.230 + A 10.0.11.231 + A 10.0.11.232 + A 10.0.11.233 + A 10.0.11.234 + A 10.0.11.235 + A 10.0.11.236 + A 10.0.11.237 + A 10.0.11.238 + A 10.0.11.239 + A 10.0.11.240 + A 10.0.11.241 + A 10.0.11.242 + A 10.0.11.243 + A 10.0.11.244 + A 10.0.11.245 + A 10.0.11.246 + A 10.0.11.247 + A 10.0.11.248 + A 10.0.11.249 + A 10.0.11.250 + A 10.0.11.251 + A 10.0.11.252 + A 10.0.11.253 + A 10.0.11.254 + A 10.0.11.255 + A 10.0.12.0 + A 10.0.12.1 + A 10.0.12.2 + A 10.0.12.3 + A 10.0.12.4 + A 10.0.12.5 + A 10.0.12.6 + A 10.0.12.7 + A 10.0.12.8 + A 10.0.12.9 + A 10.0.12.10 + A 10.0.12.11 + A 10.0.12.12 + A 10.0.12.13 + A 10.0.12.14 + A 10.0.12.15 + A 10.0.12.16 + A 10.0.12.17 + A 10.0.12.18 + A 10.0.12.19 + A 10.0.12.20 + A 10.0.12.21 + A 10.0.12.22 + A 10.0.12.23 + A 10.0.12.24 + A 10.0.12.25 + A 10.0.12.26 + A 10.0.12.27 + A 10.0.12.28 + A 10.0.12.29 + A 10.0.12.30 + A 10.0.12.31 + A 10.0.12.32 + A 10.0.12.33 + A 10.0.12.34 + A 10.0.12.35 + A 10.0.12.36 + A 10.0.12.37 + A 10.0.12.38 + A 10.0.12.39 + A 10.0.12.40 + A 10.0.12.41 + A 10.0.12.42 + A 10.0.12.43 + A 10.0.12.44 + A 10.0.12.45 + A 10.0.12.46 + A 10.0.12.47 + A 10.0.12.48 + A 10.0.12.49 + A 10.0.12.50 + A 10.0.12.51 + A 10.0.12.52 + A 10.0.12.53 + A 10.0.12.54 + A 10.0.12.55 + A 10.0.12.56 + A 10.0.12.57 + A 10.0.12.58 + A 10.0.12.59 + A 10.0.12.60 + A 10.0.12.61 + A 10.0.12.62 + A 10.0.12.63 + A 10.0.12.64 + A 10.0.12.65 + A 10.0.12.66 + A 10.0.12.67 + A 10.0.12.68 + A 10.0.12.69 + A 10.0.12.70 + A 10.0.12.71 + A 10.0.12.72 + A 10.0.12.73 + A 10.0.12.74 + A 10.0.12.75 + A 10.0.12.76 + A 10.0.12.77 + A 10.0.12.78 + A 10.0.12.79 + A 10.0.12.80 + A 10.0.12.81 + A 10.0.12.82 + A 10.0.12.83 + A 10.0.12.84 + A 10.0.12.85 + A 10.0.12.86 + A 10.0.12.87 + A 10.0.12.88 + A 10.0.12.89 + A 10.0.12.90 + A 10.0.12.91 + A 10.0.12.92 + A 10.0.12.93 + A 10.0.12.94 + A 10.0.12.95 + A 10.0.12.96 + A 10.0.12.97 + A 10.0.12.98 + A 10.0.12.99 + A 10.0.12.100 + A 10.0.12.101 + A 10.0.12.102 + A 10.0.12.103 + A 10.0.12.104 + A 10.0.12.105 + A 10.0.12.106 + A 10.0.12.107 + A 10.0.12.108 + A 10.0.12.109 + A 10.0.12.110 + A 10.0.12.111 + A 10.0.12.112 + A 10.0.12.113 + A 10.0.12.114 + A 10.0.12.115 + A 10.0.12.116 + A 10.0.12.117 + A 10.0.12.118 + A 10.0.12.119 + A 10.0.12.120 + A 10.0.12.121 + A 10.0.12.122 + A 10.0.12.123 + A 10.0.12.124 + A 10.0.12.125 + A 10.0.12.126 + A 10.0.12.127 + A 10.0.12.128 + A 10.0.12.129 + A 10.0.12.130 + A 10.0.12.131 + A 10.0.12.132 + A 10.0.12.133 + A 10.0.12.134 + A 10.0.12.135 + A 10.0.12.136 + A 10.0.12.137 + A 10.0.12.138 + A 10.0.12.139 + A 10.0.12.140 + A 10.0.12.141 + A 10.0.12.142 + A 10.0.12.143 + A 10.0.12.144 + A 10.0.12.145 + A 10.0.12.146 + A 10.0.12.147 + A 10.0.12.148 + A 10.0.12.149 + A 10.0.12.150 + A 10.0.12.151 + A 10.0.12.152 + A 10.0.12.153 + A 10.0.12.154 + A 10.0.12.155 + A 10.0.12.156 + A 10.0.12.157 + A 10.0.12.158 + A 10.0.12.159 + A 10.0.12.160 + A 10.0.12.161 + A 10.0.12.162 + A 10.0.12.163 + A 10.0.12.164 + A 10.0.12.165 + A 10.0.12.166 + A 10.0.12.167 + A 10.0.12.168 + A 10.0.12.169 + A 10.0.12.170 + A 10.0.12.171 + A 10.0.12.172 + A 10.0.12.173 + A 10.0.12.174 + A 10.0.12.175 + A 10.0.12.176 + A 10.0.12.177 + A 10.0.12.178 + A 10.0.12.179 + A 10.0.12.180 + A 10.0.12.181 + A 10.0.12.182 + A 10.0.12.183 + A 10.0.12.184 + A 10.0.12.185 + A 10.0.12.186 + A 10.0.12.187 + A 10.0.12.188 + A 10.0.12.189 + A 10.0.12.190 + A 10.0.12.191 + A 10.0.12.192 + A 10.0.12.193 + A 10.0.12.194 + A 10.0.12.195 + A 10.0.12.196 + A 10.0.12.197 + A 10.0.12.198 + A 10.0.12.199 + A 10.0.12.200 + A 10.0.12.201 + A 10.0.12.202 + A 10.0.12.203 + A 10.0.12.204 + A 10.0.12.205 + A 10.0.12.206 + A 10.0.12.207 + A 10.0.12.208 + A 10.0.12.209 + A 10.0.12.210 + A 10.0.12.211 + A 10.0.12.212 + A 10.0.12.213 + A 10.0.12.214 + A 10.0.12.215 + A 10.0.12.216 + A 10.0.12.217 + A 10.0.12.218 + A 10.0.12.219 + A 10.0.12.220 + A 10.0.12.221 + A 10.0.12.222 + A 10.0.12.223 + A 10.0.12.224 + A 10.0.12.225 + A 10.0.12.226 + A 10.0.12.227 + A 10.0.12.228 + A 10.0.12.229 + A 10.0.12.230 + A 10.0.12.231 + A 10.0.12.232 + A 10.0.12.233 + A 10.0.12.234 + A 10.0.12.235 + A 10.0.12.236 + A 10.0.12.237 + A 10.0.12.238 + A 10.0.12.239 + A 10.0.12.240 + A 10.0.12.241 + A 10.0.12.242 + A 10.0.12.243 + A 10.0.12.244 + A 10.0.12.245 + A 10.0.12.246 + A 10.0.12.247 + A 10.0.12.248 + A 10.0.12.249 + A 10.0.12.250 + A 10.0.12.251 + A 10.0.12.252 + A 10.0.12.253 + A 10.0.12.254 + A 10.0.12.255 + A 10.0.13.0 + A 10.0.13.1 + A 10.0.13.2 + A 10.0.13.3 + A 10.0.13.4 + A 10.0.13.5 + A 10.0.13.6 + A 10.0.13.7 + A 10.0.13.8 + A 10.0.13.9 + A 10.0.13.10 + A 10.0.13.11 + A 10.0.13.12 + A 10.0.13.13 + A 10.0.13.14 + A 10.0.13.15 + A 10.0.13.16 + A 10.0.13.17 + A 10.0.13.18 + A 10.0.13.19 + A 10.0.13.20 + A 10.0.13.21 + A 10.0.13.22 + A 10.0.13.23 + A 10.0.13.24 + A 10.0.13.25 + A 10.0.13.26 + A 10.0.13.27 + A 10.0.13.28 + A 10.0.13.29 + A 10.0.13.30 + A 10.0.13.31 + A 10.0.13.32 + A 10.0.13.33 + A 10.0.13.34 + A 10.0.13.35 + A 10.0.13.36 + A 10.0.13.37 + A 10.0.13.38 + A 10.0.13.39 + A 10.0.13.40 + A 10.0.13.41 + A 10.0.13.42 + A 10.0.13.43 + A 10.0.13.44 + A 10.0.13.45 + A 10.0.13.46 + A 10.0.13.47 + A 10.0.13.48 + A 10.0.13.49 + A 10.0.13.50 + A 10.0.13.51 + A 10.0.13.52 + A 10.0.13.53 + A 10.0.13.54 + A 10.0.13.55 + A 10.0.13.56 + A 10.0.13.57 + A 10.0.13.58 + A 10.0.13.59 + A 10.0.13.60 + A 10.0.13.61 + A 10.0.13.62 + A 10.0.13.63 + A 10.0.13.64 + A 10.0.13.65 + A 10.0.13.66 + A 10.0.13.67 + A 10.0.13.68 + A 10.0.13.69 + A 10.0.13.70 + A 10.0.13.71 + A 10.0.13.72 + A 10.0.13.73 + A 10.0.13.74 + A 10.0.13.75 + A 10.0.13.76 + A 10.0.13.77 + A 10.0.13.78 + A 10.0.13.79 + A 10.0.13.80 + A 10.0.13.81 + A 10.0.13.82 + A 10.0.13.83 + A 10.0.13.84 + A 10.0.13.85 + A 10.0.13.86 + A 10.0.13.87 + A 10.0.13.88 + A 10.0.13.89 + A 10.0.13.90 + A 10.0.13.91 + A 10.0.13.92 + A 10.0.13.93 + A 10.0.13.94 + A 10.0.13.95 + A 10.0.13.96 + A 10.0.13.97 + A 10.0.13.98 + A 10.0.13.99 + A 10.0.13.100 + A 10.0.13.101 + A 10.0.13.102 + A 10.0.13.103 + A 10.0.13.104 + A 10.0.13.105 + A 10.0.13.106 + A 10.0.13.107 + A 10.0.13.108 + A 10.0.13.109 + A 10.0.13.110 + A 10.0.13.111 + A 10.0.13.112 + A 10.0.13.113 + A 10.0.13.114 + A 10.0.13.115 + A 10.0.13.116 + A 10.0.13.117 + A 10.0.13.118 + A 10.0.13.119 + A 10.0.13.120 + A 10.0.13.121 + A 10.0.13.122 + A 10.0.13.123 + A 10.0.13.124 + A 10.0.13.125 + A 10.0.13.126 + A 10.0.13.127 + A 10.0.13.128 + A 10.0.13.129 + A 10.0.13.130 + A 10.0.13.131 + A 10.0.13.132 + A 10.0.13.133 + A 10.0.13.134 + A 10.0.13.135 + A 10.0.13.136 + A 10.0.13.137 + A 10.0.13.138 + A 10.0.13.139 + A 10.0.13.140 + A 10.0.13.141 + A 10.0.13.142 + A 10.0.13.143 + A 10.0.13.144 + A 10.0.13.145 + A 10.0.13.146 + A 10.0.13.147 + A 10.0.13.148 + A 10.0.13.149 + A 10.0.13.150 + A 10.0.13.151 + A 10.0.13.152 + A 10.0.13.153 + A 10.0.13.154 + A 10.0.13.155 + A 10.0.13.156 + A 10.0.13.157 + A 10.0.13.158 + A 10.0.13.159 + A 10.0.13.160 + A 10.0.13.161 + A 10.0.13.162 + A 10.0.13.163 + A 10.0.13.164 + A 10.0.13.165 + A 10.0.13.166 + A 10.0.13.167 + A 10.0.13.168 + A 10.0.13.169 + A 10.0.13.170 + A 10.0.13.171 + A 10.0.13.172 + A 10.0.13.173 + A 10.0.13.174 + A 10.0.13.175 + A 10.0.13.176 + A 10.0.13.177 + A 10.0.13.178 + A 10.0.13.179 + A 10.0.13.180 + A 10.0.13.181 + A 10.0.13.182 + A 10.0.13.183 + A 10.0.13.184 + A 10.0.13.185 + A 10.0.13.186 + A 10.0.13.187 + A 10.0.13.188 + A 10.0.13.189 + A 10.0.13.190 + A 10.0.13.191 + A 10.0.13.192 + A 10.0.13.193 + A 10.0.13.194 + A 10.0.13.195 + A 10.0.13.196 + A 10.0.13.197 + A 10.0.13.198 + A 10.0.13.199 + A 10.0.13.200 + A 10.0.13.201 + A 10.0.13.202 + A 10.0.13.203 + A 10.0.13.204 + A 10.0.13.205 + A 10.0.13.206 + A 10.0.13.207 + A 10.0.13.208 + A 10.0.13.209 + A 10.0.13.210 + A 10.0.13.211 + A 10.0.13.212 + A 10.0.13.213 + A 10.0.13.214 + A 10.0.13.215 + A 10.0.13.216 + A 10.0.13.217 + A 10.0.13.218 + A 10.0.13.219 + A 10.0.13.220 + A 10.0.13.221 + A 10.0.13.222 + A 10.0.13.223 + A 10.0.13.224 + A 10.0.13.225 + A 10.0.13.226 + A 10.0.13.227 + A 10.0.13.228 + A 10.0.13.229 + A 10.0.13.230 + A 10.0.13.231 + A 10.0.13.232 + A 10.0.13.233 + A 10.0.13.234 + A 10.0.13.235 + A 10.0.13.236 + A 10.0.13.237 + A 10.0.13.238 + A 10.0.13.239 + A 10.0.13.240 + A 10.0.13.241 + A 10.0.13.242 + A 10.0.13.243 + A 10.0.13.244 + A 10.0.13.245 + A 10.0.13.246 + A 10.0.13.247 + A 10.0.13.248 + A 10.0.13.249 + A 10.0.13.250 + A 10.0.13.251 + A 10.0.13.252 + A 10.0.13.253 + A 10.0.13.254 + A 10.0.13.255 + A 10.0.14.0 + A 10.0.14.1 + A 10.0.14.2 + A 10.0.14.3 + A 10.0.14.4 + A 10.0.14.5 + A 10.0.14.6 + A 10.0.14.7 + A 10.0.14.8 + A 10.0.14.9 + A 10.0.14.10 + A 10.0.14.11 + A 10.0.14.12 + A 10.0.14.13 + A 10.0.14.14 + A 10.0.14.15 + A 10.0.14.16 + A 10.0.14.17 + A 10.0.14.18 + A 10.0.14.19 + A 10.0.14.20 + A 10.0.14.21 + A 10.0.14.22 + A 10.0.14.23 + A 10.0.14.24 + A 10.0.14.25 + A 10.0.14.26 + A 10.0.14.27 + A 10.0.14.28 + A 10.0.14.29 + A 10.0.14.30 + A 10.0.14.31 + A 10.0.14.32 + A 10.0.14.33 + A 10.0.14.34 + A 10.0.14.35 + A 10.0.14.36 + A 10.0.14.37 + A 10.0.14.38 + A 10.0.14.39 + A 10.0.14.40 + A 10.0.14.41 + A 10.0.14.42 + A 10.0.14.43 + A 10.0.14.44 + A 10.0.14.45 + A 10.0.14.46 + A 10.0.14.47 + A 10.0.14.48 + A 10.0.14.49 + A 10.0.14.50 + A 10.0.14.51 + A 10.0.14.52 + A 10.0.14.53 + A 10.0.14.54 + A 10.0.14.55 + A 10.0.14.56 + A 10.0.14.57 + A 10.0.14.58 + A 10.0.14.59 + A 10.0.14.60 + A 10.0.14.61 + A 10.0.14.62 + A 10.0.14.63 + A 10.0.14.64 + A 10.0.14.65 + A 10.0.14.66 + A 10.0.14.67 + A 10.0.14.68 + A 10.0.14.69 + A 10.0.14.70 + A 10.0.14.71 + A 10.0.14.72 + A 10.0.14.73 + A 10.0.14.74 + A 10.0.14.75 + A 10.0.14.76 + A 10.0.14.77 + A 10.0.14.78 + A 10.0.14.79 + A 10.0.14.80 + A 10.0.14.81 + A 10.0.14.82 + A 10.0.14.83 + A 10.0.14.84 + A 10.0.14.85 + A 10.0.14.86 + A 10.0.14.87 + A 10.0.14.88 + A 10.0.14.89 + A 10.0.14.90 + A 10.0.14.91 + A 10.0.14.92 + A 10.0.14.93 + A 10.0.14.94 + A 10.0.14.95 + A 10.0.14.96 + A 10.0.14.97 + A 10.0.14.98 + A 10.0.14.99 + A 10.0.14.100 + A 10.0.14.101 + A 10.0.14.102 + A 10.0.14.103 + A 10.0.14.104 + A 10.0.14.105 + A 10.0.14.106 + A 10.0.14.107 + A 10.0.14.108 + A 10.0.14.109 + A 10.0.14.110 + A 10.0.14.111 + A 10.0.14.112 + A 10.0.14.113 + A 10.0.14.114 + A 10.0.14.115 + A 10.0.14.116 + A 10.0.14.117 + A 10.0.14.118 + A 10.0.14.119 + A 10.0.14.120 + A 10.0.14.121 + A 10.0.14.122 + A 10.0.14.123 + A 10.0.14.124 + A 10.0.14.125 + A 10.0.14.126 + A 10.0.14.127 + A 10.0.14.128 + A 10.0.14.129 + A 10.0.14.130 + A 10.0.14.131 + A 10.0.14.132 + A 10.0.14.133 + A 10.0.14.134 + A 10.0.14.135 + A 10.0.14.136 + A 10.0.14.137 + A 10.0.14.138 + A 10.0.14.139 + A 10.0.14.140 + A 10.0.14.141 + A 10.0.14.142 + A 10.0.14.143 + A 10.0.14.144 + A 10.0.14.145 + A 10.0.14.146 + A 10.0.14.147 + A 10.0.14.148 + A 10.0.14.149 + A 10.0.14.150 + A 10.0.14.151 + A 10.0.14.152 + A 10.0.14.153 + A 10.0.14.154 + A 10.0.14.155 + A 10.0.14.156 + A 10.0.14.157 + A 10.0.14.158 + A 10.0.14.159 + A 10.0.14.160 + A 10.0.14.161 + A 10.0.14.162 + A 10.0.14.163 + A 10.0.14.164 + A 10.0.14.165 + A 10.0.14.166 + A 10.0.14.167 + A 10.0.14.168 + A 10.0.14.169 + A 10.0.14.170 + A 10.0.14.171 + A 10.0.14.172 + A 10.0.14.173 + A 10.0.14.174 + A 10.0.14.175 + A 10.0.14.176 + A 10.0.14.177 + A 10.0.14.178 + A 10.0.14.179 + A 10.0.14.180 + A 10.0.14.181 + A 10.0.14.182 + A 10.0.14.183 + A 10.0.14.184 + A 10.0.14.185 + A 10.0.14.186 + A 10.0.14.187 + A 10.0.14.188 + A 10.0.14.189 + A 10.0.14.190 + A 10.0.14.191 + A 10.0.14.192 + A 10.0.14.193 + A 10.0.14.194 + A 10.0.14.195 + A 10.0.14.196 + A 10.0.14.197 + A 10.0.14.198 + A 10.0.14.199 + A 10.0.14.200 + A 10.0.14.201 + A 10.0.14.202 + A 10.0.14.203 + A 10.0.14.204 + A 10.0.14.205 + A 10.0.14.206 + A 10.0.14.207 + A 10.0.14.208 + A 10.0.14.209 + A 10.0.14.210 + A 10.0.14.211 + A 10.0.14.212 + A 10.0.14.213 + A 10.0.14.214 + A 10.0.14.215 + A 10.0.14.216 + A 10.0.14.217 + A 10.0.14.218 + A 10.0.14.219 + A 10.0.14.220 + A 10.0.14.221 + A 10.0.14.222 + A 10.0.14.223 + A 10.0.14.224 + A 10.0.14.225 + A 10.0.14.226 + A 10.0.14.227 + A 10.0.14.228 + A 10.0.14.229 + A 10.0.14.230 + A 10.0.14.231 + A 10.0.14.232 + A 10.0.14.233 + A 10.0.14.234 + A 10.0.14.235 + A 10.0.14.236 + A 10.0.14.237 + A 10.0.14.238 + A 10.0.14.239 + A 10.0.14.240 + A 10.0.14.241 + A 10.0.14.242 + A 10.0.14.243 + A 10.0.14.244 + A 10.0.14.245 + A 10.0.14.246 + A 10.0.14.247 + A 10.0.14.248 + A 10.0.14.249 + A 10.0.14.250 + A 10.0.14.251 + A 10.0.14.252 + A 10.0.14.253 + A 10.0.14.254 + A 10.0.14.255 + A 10.0.15.0 + A 10.0.15.1 + A 10.0.15.2 + A 10.0.15.3 + A 10.0.15.4 + A 10.0.15.5 + A 10.0.15.6 + A 10.0.15.7 + A 10.0.15.8 + A 10.0.15.9 + A 10.0.15.10 + A 10.0.15.11 + A 10.0.15.12 + A 10.0.15.13 + A 10.0.15.14 + A 10.0.15.15 + A 10.0.15.16 + A 10.0.15.17 + A 10.0.15.18 + A 10.0.15.19 + A 10.0.15.20 + A 10.0.15.21 + A 10.0.15.22 + A 10.0.15.23 + A 10.0.15.24 + A 10.0.15.25 + A 10.0.15.26 + A 10.0.15.27 + A 10.0.15.28 + A 10.0.15.29 + A 10.0.15.30 + A 10.0.15.31 + A 10.0.15.32 + A 10.0.15.33 + A 10.0.15.34 + A 10.0.15.35 + A 10.0.15.36 + A 10.0.15.37 + A 10.0.15.38 + A 10.0.15.39 + A 10.0.15.40 + A 10.0.15.41 + A 10.0.15.42 + A 10.0.15.43 + A 10.0.15.44 + A 10.0.15.45 + A 10.0.15.46 + A 10.0.15.47 + A 10.0.15.48 + A 10.0.15.49 + A 10.0.15.50 + A 10.0.15.51 + A 10.0.15.52 + A 10.0.15.53 + A 10.0.15.54 + A 10.0.15.55 + A 10.0.15.56 + A 10.0.15.57 + A 10.0.15.58 + A 10.0.15.59 + A 10.0.15.60 + A 10.0.15.61 + A 10.0.15.62 + A 10.0.15.63 + A 10.0.15.64 + A 10.0.15.65 + A 10.0.15.66 + A 10.0.15.67 + A 10.0.15.68 + A 10.0.15.69 + A 10.0.15.70 + A 10.0.15.71 + A 10.0.15.72 + A 10.0.15.73 + A 10.0.15.74 + A 10.0.15.75 + A 10.0.15.76 + A 10.0.15.77 + A 10.0.15.78 + A 10.0.15.79 + A 10.0.15.80 + A 10.0.15.81 + A 10.0.15.82 + A 10.0.15.83 + A 10.0.15.84 + A 10.0.15.85 + A 10.0.15.86 + A 10.0.15.87 + A 10.0.15.88 + A 10.0.15.89 + A 10.0.15.90 + A 10.0.15.91 + A 10.0.15.92 + A 10.0.15.93 + A 10.0.15.94 + A 10.0.15.95 + A 10.0.15.96 + A 10.0.15.97 + A 10.0.15.98 + A 10.0.15.99 + A 10.0.15.100 + A 10.0.15.101 + A 10.0.15.102 + A 10.0.15.103 + A 10.0.15.104 + A 10.0.15.105 + A 10.0.15.106 + A 10.0.15.107 + A 10.0.15.108 + A 10.0.15.109 + A 10.0.15.110 + A 10.0.15.111 + A 10.0.15.112 + A 10.0.15.113 + A 10.0.15.114 + A 10.0.15.115 + A 10.0.15.116 + A 10.0.15.117 + A 10.0.15.118 + A 10.0.15.119 + A 10.0.15.120 + A 10.0.15.121 + A 10.0.15.122 + A 10.0.15.123 + A 10.0.15.124 + A 10.0.15.125 + A 10.0.15.126 + A 10.0.15.127 + A 10.0.15.128 + A 10.0.15.129 + A 10.0.15.130 + A 10.0.15.131 + A 10.0.15.132 + A 10.0.15.133 + A 10.0.15.134 + A 10.0.15.135 + A 10.0.15.136 + A 10.0.15.137 + A 10.0.15.138 + A 10.0.15.139 + A 10.0.15.140 + A 10.0.15.141 + A 10.0.15.142 + A 10.0.15.143 + A 10.0.15.144 + A 10.0.15.145 + A 10.0.15.146 + A 10.0.15.147 + A 10.0.15.148 + A 10.0.15.149 + A 10.0.15.150 + A 10.0.15.151 + A 10.0.15.152 + A 10.0.15.153 + A 10.0.15.154 + A 10.0.15.155 + A 10.0.15.156 + A 10.0.15.157 + A 10.0.15.158 + A 10.0.15.159 + A 10.0.15.160 + A 10.0.15.161 + A 10.0.15.162 + A 10.0.15.163 + A 10.0.15.164 + A 10.0.15.165 + A 10.0.15.166 + A 10.0.15.167 + A 10.0.15.168 + A 10.0.15.169 + A 10.0.15.170 + A 10.0.15.171 + A 10.0.15.172 + A 10.0.15.173 + A 10.0.15.174 + A 10.0.15.175 + A 10.0.15.176 + A 10.0.15.177 + A 10.0.15.178 + A 10.0.15.179 + A 10.0.15.180 + A 10.0.15.181 + A 10.0.15.182 + A 10.0.15.183 + A 10.0.15.184 + A 10.0.15.185 + A 10.0.15.186 + A 10.0.15.187 + A 10.0.15.188 + A 10.0.15.189 + A 10.0.15.190 + A 10.0.15.191 + A 10.0.15.192 + A 10.0.15.193 + A 10.0.15.194 + A 10.0.15.195 + A 10.0.15.196 + A 10.0.15.197 + A 10.0.15.198 + A 10.0.15.199 + A 10.0.15.200 + A 10.0.15.201 + A 10.0.15.202 + A 10.0.15.203 + A 10.0.15.204 + A 10.0.15.205 + A 10.0.15.206 + A 10.0.15.207 + A 10.0.15.208 + A 10.0.15.209 + A 10.0.15.210 + A 10.0.15.211 + A 10.0.15.212 + A 10.0.15.213 + A 10.0.15.214 + A 10.0.15.215 + A 10.0.15.216 + A 10.0.15.217 + A 10.0.15.218 + A 10.0.15.219 + A 10.0.15.220 + A 10.0.15.221 + A 10.0.15.222 + A 10.0.15.223 + A 10.0.15.224 + A 10.0.15.225 + A 10.0.15.226 + A 10.0.15.227 + A 10.0.15.228 + A 10.0.15.229 + A 10.0.15.230 + A 10.0.15.231 + A 10.0.15.232 + A 10.0.15.233 + A 10.0.15.234 + A 10.0.15.235 + A 10.0.15.236 + A 10.0.15.237 + A 10.0.15.238 + A 10.0.15.239 + A 10.0.15.240 + A 10.0.15.241 + A 10.0.15.242 + A 10.0.15.243 + A 10.0.15.244 + A 10.0.15.245 + A 10.0.15.246 + A 10.0.15.247 + A 10.0.15.248 + A 10.0.15.249 + A 10.0.15.250 + A 10.0.15.251 + A 10.0.15.252 + A 10.0.15.253 + A 10.0.15.254 + A 10.0.15.255 + A 10.0.16.0 + A 10.0.16.1 + A 10.0.16.2 + A 10.0.16.3 + A 10.0.16.4 + A 10.0.16.5 + A 10.0.16.6 + A 10.0.16.7 + A 10.0.16.8 + A 10.0.16.9 + A 10.0.16.10 + A 10.0.16.11 + A 10.0.16.12 + A 10.0.16.13 + A 10.0.16.14 + A 10.0.16.15 + A 10.0.16.16 + A 10.0.16.17 + A 10.0.16.18 + A 10.0.16.19 + A 10.0.16.20 + A 10.0.16.21 + A 10.0.16.22 + A 10.0.16.23 + A 10.0.16.24 + A 10.0.16.25 + A 10.0.16.26 + A 10.0.16.27 + A 10.0.16.28 + A 10.0.16.29 + A 10.0.16.30 + A 10.0.16.31 + A 10.0.16.32 + A 10.0.16.33 + A 10.0.16.34 + A 10.0.16.35 + A 10.0.16.36 + A 10.0.16.37 + A 10.0.16.38 + A 10.0.16.39 + A 10.0.16.40 + A 10.0.16.41 + A 10.0.16.42 + A 10.0.16.43 + A 10.0.16.44 + A 10.0.16.45 + A 10.0.16.46 + A 10.0.16.47 + A 10.0.16.48 + A 10.0.16.49 + A 10.0.16.50 + A 10.0.16.51 + A 10.0.16.52 + A 10.0.16.53 + A 10.0.16.54 + A 10.0.16.55 + A 10.0.16.56 + A 10.0.16.57 + A 10.0.16.58 + A 10.0.16.59 + A 10.0.16.60 + A 10.0.16.61 + A 10.0.16.62 + A 10.0.16.63 + A 10.0.16.64 + A 10.0.16.65 + A 10.0.16.66 + A 10.0.16.67 + A 10.0.16.68 + A 10.0.16.69 + A 10.0.16.70 + A 10.0.16.71 + A 10.0.16.72 + A 10.0.16.73 + A 10.0.16.74 + A 10.0.16.75 + A 10.0.16.76 + A 10.0.16.77 + A 10.0.16.78 + A 10.0.16.79 + A 10.0.16.80 + A 10.0.16.81 + A 10.0.16.82 + A 10.0.16.83 + A 10.0.16.84 + A 10.0.16.85 + A 10.0.16.86 + A 10.0.16.87 + A 10.0.16.88 + A 10.0.16.89 + A 10.0.16.90 + A 10.0.16.91 + A 10.0.16.92 + A 10.0.16.93 + A 10.0.16.94 + A 10.0.16.95 + A 10.0.16.96 + A 10.0.16.97 + A 10.0.16.98 + A 10.0.16.99 + A 10.0.16.100 + A 10.0.16.101 + A 10.0.16.102 + A 10.0.16.103 + A 10.0.16.104 + A 10.0.16.105 + A 10.0.16.106 + A 10.0.16.107 + A 10.0.16.108 + A 10.0.16.109 + A 10.0.16.110 + A 10.0.16.111 + A 10.0.16.112 + A 10.0.16.113 + A 10.0.16.114 + A 10.0.16.115 + A 10.0.16.116 + A 10.0.16.117 + A 10.0.16.118 + A 10.0.16.119 + A 10.0.16.120 + A 10.0.16.121 + A 10.0.16.122 + A 10.0.16.123 + A 10.0.16.124 + A 10.0.16.125 + A 10.0.16.126 + A 10.0.16.127 + A 10.0.16.128 + A 10.0.16.129 + A 10.0.16.130 + A 10.0.16.131 + A 10.0.16.132 + A 10.0.16.133 + A 10.0.16.134 + A 10.0.16.135 + A 10.0.16.136 + A 10.0.16.137 + A 10.0.16.138 + A 10.0.16.139 + A 10.0.16.140 + A 10.0.16.141 + A 10.0.16.142 + A 10.0.16.143 + A 10.0.16.144 + A 10.0.16.145 + A 10.0.16.146 + A 10.0.16.147 + A 10.0.16.148 + A 10.0.16.149 + A 10.0.16.150 + A 10.0.16.151 + A 10.0.16.152 + A 10.0.16.153 + A 10.0.16.154 + A 10.0.16.155 + A 10.0.16.156 + A 10.0.16.157 + A 10.0.16.158 + A 10.0.16.159 + A 10.0.16.160 + A 10.0.16.161 + A 10.0.16.162 + A 10.0.16.163 + A 10.0.16.164 + A 10.0.16.165 + A 10.0.16.166 + A 10.0.16.167 + A 10.0.16.168 + A 10.0.16.169 + A 10.0.16.170 + A 10.0.16.171 + A 10.0.16.172 + A 10.0.16.173 + A 10.0.16.174 + A 10.0.16.175 + A 10.0.16.176 + A 10.0.16.177 + A 10.0.16.178 + A 10.0.16.179 + A 10.0.16.180 + A 10.0.16.181 + A 10.0.16.182 + A 10.0.16.183 + A 10.0.16.184 + A 10.0.16.185 + A 10.0.16.186 + A 10.0.16.187 + A 10.0.16.188 + A 10.0.16.189 + A 10.0.16.190 + A 10.0.16.191 + A 10.0.16.192 + A 10.0.16.193 + A 10.0.16.194 + A 10.0.16.195 + A 10.0.16.196 + A 10.0.16.197 + A 10.0.16.198 + A 10.0.16.199 + A 10.0.16.200 + A 10.0.16.201 + A 10.0.16.202 + A 10.0.16.203 + A 10.0.16.204 + A 10.0.16.205 + A 10.0.16.206 + A 10.0.16.207 + A 10.0.16.208 + A 10.0.16.209 + A 10.0.16.210 + A 10.0.16.211 + A 10.0.16.212 + A 10.0.16.213 + A 10.0.16.214 + A 10.0.16.215 + A 10.0.16.216 + A 10.0.16.217 + A 10.0.16.218 + A 10.0.16.219 + A 10.0.16.220 + A 10.0.16.221 + A 10.0.16.222 + A 10.0.16.223 + A 10.0.16.224 + A 10.0.16.225 + A 10.0.16.226 + A 10.0.16.227 + A 10.0.16.228 + A 10.0.16.229 + A 10.0.16.230 + A 10.0.16.231 + A 10.0.16.232 + A 10.0.16.233 + A 10.0.16.234 + A 10.0.16.235 + A 10.0.16.236 + A 10.0.16.237 + A 10.0.16.238 + A 10.0.16.239 + A 10.0.16.240 + A 10.0.16.241 + A 10.0.16.242 + A 10.0.16.243 + A 10.0.16.244 + A 10.0.16.245 + A 10.0.16.246 + A 10.0.16.247 + A 10.0.16.248 + A 10.0.16.249 + A 10.0.16.250 + A 10.0.16.251 + A 10.0.16.252 + A 10.0.16.253 + A 10.0.16.254 + A 10.0.16.255 + A 10.0.17.0 + A 10.0.17.1 + A 10.0.17.2 + A 10.0.17.3 + A 10.0.17.4 + A 10.0.17.5 + A 10.0.17.6 + A 10.0.17.7 + A 10.0.17.8 + A 10.0.17.9 + A 10.0.17.10 + A 10.0.17.11 + A 10.0.17.12 + A 10.0.17.13 + A 10.0.17.14 + A 10.0.17.15 + A 10.0.17.16 + A 10.0.17.17 + A 10.0.17.18 + A 10.0.17.19 + A 10.0.17.20 + A 10.0.17.21 + A 10.0.17.22 + A 10.0.17.23 + A 10.0.17.24 + A 10.0.17.25 + A 10.0.17.26 + A 10.0.17.27 + A 10.0.17.28 + A 10.0.17.29 + A 10.0.17.30 + A 10.0.17.31 + A 10.0.17.32 + A 10.0.17.33 + A 10.0.17.34 + A 10.0.17.35 + A 10.0.17.36 + A 10.0.17.37 + A 10.0.17.38 + A 10.0.17.39 + A 10.0.17.40 + A 10.0.17.41 + A 10.0.17.42 + A 10.0.17.43 + A 10.0.17.44 + A 10.0.17.45 + A 10.0.17.46 + A 10.0.17.47 + A 10.0.17.48 + A 10.0.17.49 + A 10.0.17.50 + A 10.0.17.51 + A 10.0.17.52 + A 10.0.17.53 + A 10.0.17.54 + A 10.0.17.55 + A 10.0.17.56 + A 10.0.17.57 + A 10.0.17.58 + A 10.0.17.59 + A 10.0.17.60 + A 10.0.17.61 + A 10.0.17.62 + A 10.0.17.63 + A 10.0.17.64 + A 10.0.17.65 + A 10.0.17.66 + A 10.0.17.67 + A 10.0.17.68 + A 10.0.17.69 + A 10.0.17.70 + A 10.0.17.71 + A 10.0.17.72 + A 10.0.17.73 + A 10.0.17.74 + A 10.0.17.75 + A 10.0.17.76 + A 10.0.17.77 + A 10.0.17.78 + A 10.0.17.79 + A 10.0.17.80 + A 10.0.17.81 + A 10.0.17.82 + A 10.0.17.83 + A 10.0.17.84 + A 10.0.17.85 + A 10.0.17.86 + A 10.0.17.87 + A 10.0.17.88 + A 10.0.17.89 + A 10.0.17.90 + A 10.0.17.91 + A 10.0.17.92 + A 10.0.17.93 + A 10.0.17.94 + A 10.0.17.95 + A 10.0.17.96 + A 10.0.17.97 + A 10.0.17.98 + A 10.0.17.99 + A 10.0.17.100 + A 10.0.17.101 + A 10.0.17.102 + A 10.0.17.103 + A 10.0.17.104 + A 10.0.17.105 + A 10.0.17.106 + A 10.0.17.107 + A 10.0.17.108 + A 10.0.17.109 + A 10.0.17.110 + A 10.0.17.111 + A 10.0.17.112 + A 10.0.17.113 + A 10.0.17.114 + A 10.0.17.115 + A 10.0.17.116 + A 10.0.17.117 + A 10.0.17.118 + A 10.0.17.119 + A 10.0.17.120 + A 10.0.17.121 + A 10.0.17.122 + A 10.0.17.123 + A 10.0.17.124 + A 10.0.17.125 + A 10.0.17.126 + A 10.0.17.127 + A 10.0.17.128 + A 10.0.17.129 + A 10.0.17.130 + A 10.0.17.131 + A 10.0.17.132 + A 10.0.17.133 + A 10.0.17.134 + A 10.0.17.135 + A 10.0.17.136 + A 10.0.17.137 + A 10.0.17.138 + A 10.0.17.139 + A 10.0.17.140 + A 10.0.17.141 + A 10.0.17.142 + A 10.0.17.143 + A 10.0.17.144 + A 10.0.17.145 + A 10.0.17.146 + A 10.0.17.147 + A 10.0.17.148 + A 10.0.17.149 + A 10.0.17.150 + A 10.0.17.151 + A 10.0.17.152 + A 10.0.17.153 + A 10.0.17.154 + A 10.0.17.155 + A 10.0.17.156 + A 10.0.17.157 + A 10.0.17.158 + A 10.0.17.159 + A 10.0.17.160 + A 10.0.17.161 + A 10.0.17.162 + A 10.0.17.163 + A 10.0.17.164 + A 10.0.17.165 + A 10.0.17.166 + A 10.0.17.167 + A 10.0.17.168 + A 10.0.17.169 + A 10.0.17.170 + A 10.0.17.171 + A 10.0.17.172 + A 10.0.17.173 + A 10.0.17.174 + A 10.0.17.175 + A 10.0.17.176 + A 10.0.17.177 + A 10.0.17.178 + A 10.0.17.179 + A 10.0.17.180 + A 10.0.17.181 + A 10.0.17.182 + A 10.0.17.183 + A 10.0.17.184 + A 10.0.17.185 + A 10.0.17.186 + A 10.0.17.187 + A 10.0.17.188 + A 10.0.17.189 + A 10.0.17.190 + A 10.0.17.191 + A 10.0.17.192 + A 10.0.17.193 + A 10.0.17.194 + A 10.0.17.195 + A 10.0.17.196 + A 10.0.17.197 + A 10.0.17.198 + A 10.0.17.199 + A 10.0.17.200 + A 10.0.17.201 + A 10.0.17.202 + A 10.0.17.203 + A 10.0.17.204 + A 10.0.17.205 + A 10.0.17.206 + A 10.0.17.207 + A 10.0.17.208 + A 10.0.17.209 + A 10.0.17.210 + A 10.0.17.211 + A 10.0.17.212 + A 10.0.17.213 + A 10.0.17.214 + A 10.0.17.215 + A 10.0.17.216 + A 10.0.17.217 + A 10.0.17.218 + A 10.0.17.219 + A 10.0.17.220 + A 10.0.17.221 + A 10.0.17.222 + A 10.0.17.223 + A 10.0.17.224 + A 10.0.17.225 + A 10.0.17.226 + A 10.0.17.227 + A 10.0.17.228 + A 10.0.17.229 + A 10.0.17.230 + A 10.0.17.231 + A 10.0.17.232 + A 10.0.17.233 + A 10.0.17.234 + A 10.0.17.235 + A 10.0.17.236 + A 10.0.17.237 + A 10.0.17.238 + A 10.0.17.239 + A 10.0.17.240 + A 10.0.17.241 + A 10.0.17.242 + A 10.0.17.243 + A 10.0.17.244 + A 10.0.17.245 + A 10.0.17.246 + A 10.0.17.247 + A 10.0.17.248 + A 10.0.17.249 + A 10.0.17.250 + A 10.0.17.251 + A 10.0.17.252 + A 10.0.17.253 + A 10.0.17.254 + A 10.0.17.255 + A 10.0.18.0 + A 10.0.18.1 + A 10.0.18.2 + A 10.0.18.3 + A 10.0.18.4 + A 10.0.18.5 + A 10.0.18.6 + A 10.0.18.7 + A 10.0.18.8 + A 10.0.18.9 + A 10.0.18.10 + A 10.0.18.11 + A 10.0.18.12 + A 10.0.18.13 + A 10.0.18.14 + A 10.0.18.15 + A 10.0.18.16 + A 10.0.18.17 + A 10.0.18.18 + A 10.0.18.19 + A 10.0.18.20 + A 10.0.18.21 + A 10.0.18.22 + A 10.0.18.23 + A 10.0.18.24 + A 10.0.18.25 + A 10.0.18.26 + A 10.0.18.27 + A 10.0.18.28 + A 10.0.18.29 + A 10.0.18.30 + A 10.0.18.31 + A 10.0.18.32 + A 10.0.18.33 + A 10.0.18.34 + A 10.0.18.35 + A 10.0.18.36 + A 10.0.18.37 + A 10.0.18.38 + A 10.0.18.39 + A 10.0.18.40 + A 10.0.18.41 + A 10.0.18.42 + A 10.0.18.43 + A 10.0.18.44 + A 10.0.18.45 + A 10.0.18.46 + A 10.0.18.47 + A 10.0.18.48 + A 10.0.18.49 + A 10.0.18.50 + A 10.0.18.51 + A 10.0.18.52 + A 10.0.18.53 + A 10.0.18.54 + A 10.0.18.55 + A 10.0.18.56 + A 10.0.18.57 + A 10.0.18.58 + A 10.0.18.59 + A 10.0.18.60 + A 10.0.18.61 + A 10.0.18.62 + A 10.0.18.63 + A 10.0.18.64 + A 10.0.18.65 + A 10.0.18.66 + A 10.0.18.67 + A 10.0.18.68 + A 10.0.18.69 + A 10.0.18.70 + A 10.0.18.71 + A 10.0.18.72 + A 10.0.18.73 + A 10.0.18.74 + A 10.0.18.75 + A 10.0.18.76 + A 10.0.18.77 + A 10.0.18.78 + A 10.0.18.79 + A 10.0.18.80 + A 10.0.18.81 + A 10.0.18.82 + A 10.0.18.83 + A 10.0.18.84 + A 10.0.18.85 + A 10.0.18.86 + A 10.0.18.87 + A 10.0.18.88 + A 10.0.18.89 + A 10.0.18.90 + A 10.0.18.91 + A 10.0.18.92 + A 10.0.18.93 + A 10.0.18.94 + A 10.0.18.95 + A 10.0.18.96 + A 10.0.18.97 + A 10.0.18.98 + A 10.0.18.99 + A 10.0.18.100 + A 10.0.18.101 + A 10.0.18.102 + A 10.0.18.103 + A 10.0.18.104 + A 10.0.18.105 + A 10.0.18.106 + A 10.0.18.107 + A 10.0.18.108 + A 10.0.18.109 + A 10.0.18.110 + A 10.0.18.111 + A 10.0.18.112 + A 10.0.18.113 + A 10.0.18.114 + A 10.0.18.115 + A 10.0.18.116 + A 10.0.18.117 + A 10.0.18.118 + A 10.0.18.119 + A 10.0.18.120 + A 10.0.18.121 + A 10.0.18.122 + A 10.0.18.123 + A 10.0.18.124 + A 10.0.18.125 + A 10.0.18.126 + A 10.0.18.127 + A 10.0.18.128 + A 10.0.18.129 + A 10.0.18.130 + A 10.0.18.131 + A 10.0.18.132 + A 10.0.18.133 + A 10.0.18.134 + A 10.0.18.135 + A 10.0.18.136 + A 10.0.18.137 + A 10.0.18.138 + A 10.0.18.139 + A 10.0.18.140 + A 10.0.18.141 + A 10.0.18.142 + A 10.0.18.143 + A 10.0.18.144 + A 10.0.18.145 + A 10.0.18.146 + A 10.0.18.147 + A 10.0.18.148 + A 10.0.18.149 + A 10.0.18.150 + A 10.0.18.151 + A 10.0.18.152 + A 10.0.18.153 + A 10.0.18.154 + A 10.0.18.155 + A 10.0.18.156 + A 10.0.18.157 + A 10.0.18.158 + A 10.0.18.159 + A 10.0.18.160 + A 10.0.18.161 + A 10.0.18.162 + A 10.0.18.163 + A 10.0.18.164 + A 10.0.18.165 + A 10.0.18.166 + A 10.0.18.167 + A 10.0.18.168 + A 10.0.18.169 + A 10.0.18.170 + A 10.0.18.171 + A 10.0.18.172 + A 10.0.18.173 + A 10.0.18.174 + A 10.0.18.175 + A 10.0.18.176 + A 10.0.18.177 + A 10.0.18.178 + A 10.0.18.179 + A 10.0.18.180 + A 10.0.18.181 + A 10.0.18.182 + A 10.0.18.183 + A 10.0.18.184 + A 10.0.18.185 + A 10.0.18.186 + A 10.0.18.187 + A 10.0.18.188 + A 10.0.18.189 + A 10.0.18.190 + A 10.0.18.191 + A 10.0.18.192 + A 10.0.18.193 + A 10.0.18.194 + A 10.0.18.195 + A 10.0.18.196 + A 10.0.18.197 + A 10.0.18.198 + A 10.0.18.199 + A 10.0.18.200 + A 10.0.18.201 + A 10.0.18.202 + A 10.0.18.203 + A 10.0.18.204 + A 10.0.18.205 + A 10.0.18.206 + A 10.0.18.207 + A 10.0.18.208 + A 10.0.18.209 + A 10.0.18.210 + A 10.0.18.211 + A 10.0.18.212 + A 10.0.18.213 + A 10.0.18.214 + A 10.0.18.215 + A 10.0.18.216 + A 10.0.18.217 + A 10.0.18.218 + A 10.0.18.219 + A 10.0.18.220 + A 10.0.18.221 + A 10.0.18.222 + A 10.0.18.223 + A 10.0.18.224 + A 10.0.18.225 + A 10.0.18.226 + A 10.0.18.227 + A 10.0.18.228 + A 10.0.18.229 + A 10.0.18.230 + A 10.0.18.231 + A 10.0.18.232 + A 10.0.18.233 + A 10.0.18.234 + A 10.0.18.235 + A 10.0.18.236 + A 10.0.18.237 + A 10.0.18.238 + A 10.0.18.239 + A 10.0.18.240 + A 10.0.18.241 + A 10.0.18.242 + A 10.0.18.243 + A 10.0.18.244 + A 10.0.18.245 + A 10.0.18.246 + A 10.0.18.247 + A 10.0.18.248 + A 10.0.18.249 + A 10.0.18.250 + A 10.0.18.251 + A 10.0.18.252 + A 10.0.18.253 + A 10.0.18.254 + A 10.0.18.255 + A 10.0.19.0 + A 10.0.19.1 + A 10.0.19.2 + A 10.0.19.3 + A 10.0.19.4 + A 10.0.19.5 + A 10.0.19.6 + A 10.0.19.7 + A 10.0.19.8 + A 10.0.19.9 + A 10.0.19.10 + A 10.0.19.11 + A 10.0.19.12 + A 10.0.19.13 + A 10.0.19.14 + A 10.0.19.15 + A 10.0.19.16 + A 10.0.19.17 + A 10.0.19.18 + A 10.0.19.19 + A 10.0.19.20 + A 10.0.19.21 + A 10.0.19.22 + A 10.0.19.23 + A 10.0.19.24 + A 10.0.19.25 + A 10.0.19.26 + A 10.0.19.27 + A 10.0.19.28 + A 10.0.19.29 + A 10.0.19.30 + A 10.0.19.31 + A 10.0.19.32 + A 10.0.19.33 + A 10.0.19.34 + A 10.0.19.35 + A 10.0.19.36 + A 10.0.19.37 + A 10.0.19.38 + A 10.0.19.39 + A 10.0.19.40 + A 10.0.19.41 + A 10.0.19.42 + A 10.0.19.43 + A 10.0.19.44 + A 10.0.19.45 + A 10.0.19.46 + A 10.0.19.47 + A 10.0.19.48 + A 10.0.19.49 + A 10.0.19.50 + A 10.0.19.51 + A 10.0.19.52 + A 10.0.19.53 + A 10.0.19.54 + A 10.0.19.55 + A 10.0.19.56 + A 10.0.19.57 + A 10.0.19.58 + A 10.0.19.59 + A 10.0.19.60 + A 10.0.19.61 + A 10.0.19.62 + A 10.0.19.63 + A 10.0.19.64 + A 10.0.19.65 + A 10.0.19.66 + A 10.0.19.67 + A 10.0.19.68 + A 10.0.19.69 + A 10.0.19.70 + A 10.0.19.71 + A 10.0.19.72 + A 10.0.19.73 + A 10.0.19.74 + A 10.0.19.75 + A 10.0.19.76 + A 10.0.19.77 + A 10.0.19.78 + A 10.0.19.79 + A 10.0.19.80 + A 10.0.19.81 + A 10.0.19.82 + A 10.0.19.83 + A 10.0.19.84 + A 10.0.19.85 + A 10.0.19.86 + A 10.0.19.87 + A 10.0.19.88 + A 10.0.19.89 + A 10.0.19.90 + A 10.0.19.91 + A 10.0.19.92 + A 10.0.19.93 + A 10.0.19.94 + A 10.0.19.95 + A 10.0.19.96 + A 10.0.19.97 + A 10.0.19.98 + A 10.0.19.99 + A 10.0.19.100 + A 10.0.19.101 + A 10.0.19.102 + A 10.0.19.103 + A 10.0.19.104 + A 10.0.19.105 + A 10.0.19.106 + A 10.0.19.107 + A 10.0.19.108 + A 10.0.19.109 + A 10.0.19.110 + A 10.0.19.111 + A 10.0.19.112 + A 10.0.19.113 + A 10.0.19.114 + A 10.0.19.115 + A 10.0.19.116 + A 10.0.19.117 + A 10.0.19.118 + A 10.0.19.119 + A 10.0.19.120 + A 10.0.19.121 + A 10.0.19.122 + A 10.0.19.123 + A 10.0.19.124 + A 10.0.19.125 + A 10.0.19.126 + A 10.0.19.127 + A 10.0.19.128 + A 10.0.19.129 + A 10.0.19.130 + A 10.0.19.131 + A 10.0.19.132 + A 10.0.19.133 + A 10.0.19.134 + A 10.0.19.135 +a-maximum-rrset A 10.0.0.0 + A 10.0.0.1 + A 10.0.0.2 + A 10.0.0.3 + A 10.0.0.4 + A 10.0.0.5 + A 10.0.0.6 + A 10.0.0.7 + A 10.0.0.8 + A 10.0.0.9 + A 10.0.0.10 + A 10.0.0.11 + A 10.0.0.12 + A 10.0.0.13 + A 10.0.0.14 + A 10.0.0.15 + A 10.0.0.16 + A 10.0.0.17 + A 10.0.0.18 + A 10.0.0.19 + A 10.0.0.20 + A 10.0.0.21 + A 10.0.0.22 + A 10.0.0.23 + A 10.0.0.24 + A 10.0.0.25 + A 10.0.0.26 + A 10.0.0.27 + A 10.0.0.28 + A 10.0.0.29 + A 10.0.0.30 + A 10.0.0.31 + A 10.0.0.32 + A 10.0.0.33 + A 10.0.0.34 + A 10.0.0.35 + A 10.0.0.36 + A 10.0.0.37 + A 10.0.0.38 + A 10.0.0.39 + A 10.0.0.40 + A 10.0.0.41 + A 10.0.0.42 + A 10.0.0.43 + A 10.0.0.44 + A 10.0.0.45 + A 10.0.0.46 + A 10.0.0.47 + A 10.0.0.48 + A 10.0.0.49 + A 10.0.0.50 + A 10.0.0.51 + A 10.0.0.52 + A 10.0.0.53 + A 10.0.0.54 + A 10.0.0.55 + A 10.0.0.56 + A 10.0.0.57 + A 10.0.0.58 + A 10.0.0.59 + A 10.0.0.60 + A 10.0.0.61 + A 10.0.0.62 + A 10.0.0.63 + A 10.0.0.64 + A 10.0.0.65 + A 10.0.0.66 + A 10.0.0.67 + A 10.0.0.68 + A 10.0.0.69 + A 10.0.0.70 + A 10.0.0.71 + A 10.0.0.72 + A 10.0.0.73 + A 10.0.0.74 + A 10.0.0.75 + A 10.0.0.76 + A 10.0.0.77 + A 10.0.0.78 + A 10.0.0.79 + A 10.0.0.80 + A 10.0.0.81 + A 10.0.0.82 + A 10.0.0.83 + A 10.0.0.84 + A 10.0.0.85 + A 10.0.0.86 + A 10.0.0.87 + A 10.0.0.88 + A 10.0.0.89 + A 10.0.0.90 + A 10.0.0.91 + A 10.0.0.92 + A 10.0.0.93 + A 10.0.0.94 + A 10.0.0.95 + A 10.0.0.96 + A 10.0.0.97 + A 10.0.0.98 + A 10.0.0.99 + A 10.0.0.100 + A 10.0.0.101 + A 10.0.0.102 + A 10.0.0.103 + A 10.0.0.104 + A 10.0.0.105 + A 10.0.0.106 + A 10.0.0.107 + A 10.0.0.108 + A 10.0.0.109 + A 10.0.0.110 + A 10.0.0.111 + A 10.0.0.112 + A 10.0.0.113 + A 10.0.0.114 + A 10.0.0.115 + A 10.0.0.116 + A 10.0.0.117 + A 10.0.0.118 + A 10.0.0.119 + A 10.0.0.120 + A 10.0.0.121 + A 10.0.0.122 + A 10.0.0.123 + A 10.0.0.124 + A 10.0.0.125 + A 10.0.0.126 + A 10.0.0.127 + A 10.0.0.128 + A 10.0.0.129 + A 10.0.0.130 + A 10.0.0.131 + A 10.0.0.132 + A 10.0.0.133 + A 10.0.0.134 + A 10.0.0.135 + A 10.0.0.136 + A 10.0.0.137 + A 10.0.0.138 + A 10.0.0.139 + A 10.0.0.140 + A 10.0.0.141 + A 10.0.0.142 + A 10.0.0.143 + A 10.0.0.144 + A 10.0.0.145 + A 10.0.0.146 + A 10.0.0.147 + A 10.0.0.148 + A 10.0.0.149 + A 10.0.0.150 + A 10.0.0.151 + A 10.0.0.152 + A 10.0.0.153 + A 10.0.0.154 + A 10.0.0.155 + A 10.0.0.156 + A 10.0.0.157 + A 10.0.0.158 + A 10.0.0.159 + A 10.0.0.160 + A 10.0.0.161 + A 10.0.0.162 + A 10.0.0.163 + A 10.0.0.164 + A 10.0.0.165 + A 10.0.0.166 + A 10.0.0.167 + A 10.0.0.168 + A 10.0.0.169 + A 10.0.0.170 + A 10.0.0.171 + A 10.0.0.172 + A 10.0.0.173 + A 10.0.0.174 + A 10.0.0.175 + A 10.0.0.176 + A 10.0.0.177 + A 10.0.0.178 + A 10.0.0.179 + A 10.0.0.180 + A 10.0.0.181 + A 10.0.0.182 + A 10.0.0.183 + A 10.0.0.184 + A 10.0.0.185 + A 10.0.0.186 + A 10.0.0.187 + A 10.0.0.188 + A 10.0.0.189 + A 10.0.0.190 + A 10.0.0.191 + A 10.0.0.192 + A 10.0.0.193 + A 10.0.0.194 + A 10.0.0.195 + A 10.0.0.196 + A 10.0.0.197 + A 10.0.0.198 + A 10.0.0.199 + A 10.0.0.200 + A 10.0.0.201 + A 10.0.0.202 + A 10.0.0.203 + A 10.0.0.204 + A 10.0.0.205 + A 10.0.0.206 + A 10.0.0.207 + A 10.0.0.208 + A 10.0.0.209 + A 10.0.0.210 + A 10.0.0.211 + A 10.0.0.212 + A 10.0.0.213 + A 10.0.0.214 + A 10.0.0.215 + A 10.0.0.216 + A 10.0.0.217 + A 10.0.0.218 + A 10.0.0.219 + A 10.0.0.220 + A 10.0.0.221 + A 10.0.0.222 + A 10.0.0.223 + A 10.0.0.224 + A 10.0.0.225 + A 10.0.0.226 + A 10.0.0.227 + A 10.0.0.228 + A 10.0.0.229 + A 10.0.0.230 + A 10.0.0.231 + A 10.0.0.232 + A 10.0.0.233 + A 10.0.0.234 + A 10.0.0.235 + A 10.0.0.236 + A 10.0.0.237 + A 10.0.0.238 + A 10.0.0.239 + A 10.0.0.240 + A 10.0.0.241 + A 10.0.0.242 + A 10.0.0.243 + A 10.0.0.244 + A 10.0.0.245 + A 10.0.0.246 + A 10.0.0.247 + A 10.0.0.248 + A 10.0.0.249 + A 10.0.0.250 + A 10.0.0.251 + A 10.0.0.252 + A 10.0.0.253 + A 10.0.0.254 + A 10.0.0.255 + A 10.0.1.0 + A 10.0.1.1 + A 10.0.1.2 + A 10.0.1.3 + A 10.0.1.4 + A 10.0.1.5 + A 10.0.1.6 + A 10.0.1.7 + A 10.0.1.8 + A 10.0.1.9 + A 10.0.1.10 + A 10.0.1.11 + A 10.0.1.12 + A 10.0.1.13 + A 10.0.1.14 + A 10.0.1.15 + A 10.0.1.16 + A 10.0.1.17 + A 10.0.1.18 + A 10.0.1.19 + A 10.0.1.20 + A 10.0.1.21 + A 10.0.1.22 + A 10.0.1.23 + A 10.0.1.24 + A 10.0.1.25 + A 10.0.1.26 + A 10.0.1.27 + A 10.0.1.28 + A 10.0.1.29 + A 10.0.1.30 + A 10.0.1.31 + A 10.0.1.32 + A 10.0.1.33 + A 10.0.1.34 + A 10.0.1.35 + A 10.0.1.36 + A 10.0.1.37 + A 10.0.1.38 + A 10.0.1.39 + A 10.0.1.40 + A 10.0.1.41 + A 10.0.1.42 + A 10.0.1.43 + A 10.0.1.44 + A 10.0.1.45 + A 10.0.1.46 + A 10.0.1.47 + A 10.0.1.48 + A 10.0.1.49 + A 10.0.1.50 + A 10.0.1.51 + A 10.0.1.52 + A 10.0.1.53 + A 10.0.1.54 + A 10.0.1.55 + A 10.0.1.56 + A 10.0.1.57 + A 10.0.1.58 + A 10.0.1.59 + A 10.0.1.60 + A 10.0.1.61 + A 10.0.1.62 + A 10.0.1.63 + A 10.0.1.64 + A 10.0.1.65 + A 10.0.1.66 + A 10.0.1.67 + A 10.0.1.68 + A 10.0.1.69 + A 10.0.1.70 + A 10.0.1.71 + A 10.0.1.72 + A 10.0.1.73 + A 10.0.1.74 + A 10.0.1.75 + A 10.0.1.76 + A 10.0.1.77 + A 10.0.1.78 + A 10.0.1.79 + A 10.0.1.80 + A 10.0.1.81 + A 10.0.1.82 + A 10.0.1.83 + A 10.0.1.84 + A 10.0.1.85 + A 10.0.1.86 + A 10.0.1.87 + A 10.0.1.88 + A 10.0.1.89 + A 10.0.1.90 + A 10.0.1.91 + A 10.0.1.92 + A 10.0.1.93 + A 10.0.1.94 + A 10.0.1.95 + A 10.0.1.96 + A 10.0.1.97 + A 10.0.1.98 + A 10.0.1.99 + A 10.0.1.100 + A 10.0.1.101 + A 10.0.1.102 + A 10.0.1.103 + A 10.0.1.104 + A 10.0.1.105 + A 10.0.1.106 + A 10.0.1.107 + A 10.0.1.108 + A 10.0.1.109 + A 10.0.1.110 + A 10.0.1.111 + A 10.0.1.112 + A 10.0.1.113 + A 10.0.1.114 + A 10.0.1.115 + A 10.0.1.116 + A 10.0.1.117 + A 10.0.1.118 + A 10.0.1.119 + A 10.0.1.120 + A 10.0.1.121 + A 10.0.1.122 + A 10.0.1.123 + A 10.0.1.124 + A 10.0.1.125 + A 10.0.1.126 + A 10.0.1.127 + A 10.0.1.128 + A 10.0.1.129 + A 10.0.1.130 + A 10.0.1.131 + A 10.0.1.132 + A 10.0.1.133 + A 10.0.1.134 + A 10.0.1.135 + A 10.0.1.136 + A 10.0.1.137 + A 10.0.1.138 + A 10.0.1.139 + A 10.0.1.140 + A 10.0.1.141 + A 10.0.1.142 + A 10.0.1.143 + A 10.0.1.144 + A 10.0.1.145 + A 10.0.1.146 + A 10.0.1.147 + A 10.0.1.148 + A 10.0.1.149 + A 10.0.1.150 + A 10.0.1.151 + A 10.0.1.152 + A 10.0.1.153 + A 10.0.1.154 + A 10.0.1.155 + A 10.0.1.156 + A 10.0.1.157 + A 10.0.1.158 + A 10.0.1.159 + A 10.0.1.160 + A 10.0.1.161 + A 10.0.1.162 + A 10.0.1.163 + A 10.0.1.164 + A 10.0.1.165 + A 10.0.1.166 + A 10.0.1.167 + A 10.0.1.168 + A 10.0.1.169 + A 10.0.1.170 + A 10.0.1.171 + A 10.0.1.172 + A 10.0.1.173 + A 10.0.1.174 + A 10.0.1.175 + A 10.0.1.176 + A 10.0.1.177 + A 10.0.1.178 + A 10.0.1.179 + A 10.0.1.180 + A 10.0.1.181 + A 10.0.1.182 + A 10.0.1.183 + A 10.0.1.184 + A 10.0.1.185 + A 10.0.1.186 + A 10.0.1.187 + A 10.0.1.188 + A 10.0.1.189 + A 10.0.1.190 + A 10.0.1.191 + A 10.0.1.192 + A 10.0.1.193 + A 10.0.1.194 + A 10.0.1.195 + A 10.0.1.196 + A 10.0.1.197 + A 10.0.1.198 + A 10.0.1.199 + A 10.0.1.200 + A 10.0.1.201 + A 10.0.1.202 + A 10.0.1.203 + A 10.0.1.204 + A 10.0.1.205 + A 10.0.1.206 + A 10.0.1.207 + A 10.0.1.208 + A 10.0.1.209 + A 10.0.1.210 + A 10.0.1.211 + A 10.0.1.212 + A 10.0.1.213 + A 10.0.1.214 + A 10.0.1.215 + A 10.0.1.216 + A 10.0.1.217 + A 10.0.1.218 + A 10.0.1.219 + A 10.0.1.220 + A 10.0.1.221 + A 10.0.1.222 + A 10.0.1.223 + A 10.0.1.224 + A 10.0.1.225 + A 10.0.1.226 + A 10.0.1.227 + A 10.0.1.228 + A 10.0.1.229 + A 10.0.1.230 + A 10.0.1.231 + A 10.0.1.232 + A 10.0.1.233 + A 10.0.1.234 + A 10.0.1.235 + A 10.0.1.236 + A 10.0.1.237 + A 10.0.1.238 + A 10.0.1.239 + A 10.0.1.240 + A 10.0.1.241 + A 10.0.1.242 + A 10.0.1.243 + A 10.0.1.244 + A 10.0.1.245 + A 10.0.1.246 + A 10.0.1.247 + A 10.0.1.248 + A 10.0.1.249 + A 10.0.1.250 + A 10.0.1.251 + A 10.0.1.252 + A 10.0.1.253 + A 10.0.1.254 + A 10.0.1.255 + A 10.0.2.0 + A 10.0.2.1 + A 10.0.2.2 + A 10.0.2.3 + A 10.0.2.4 + A 10.0.2.5 + A 10.0.2.6 + A 10.0.2.7 + A 10.0.2.8 + A 10.0.2.9 + A 10.0.2.10 + A 10.0.2.11 + A 10.0.2.12 + A 10.0.2.13 + A 10.0.2.14 + A 10.0.2.15 + A 10.0.2.16 + A 10.0.2.17 + A 10.0.2.18 + A 10.0.2.19 + A 10.0.2.20 + A 10.0.2.21 + A 10.0.2.22 + A 10.0.2.23 + A 10.0.2.24 + A 10.0.2.25 + A 10.0.2.26 + A 10.0.2.27 + A 10.0.2.28 + A 10.0.2.29 + A 10.0.2.30 + A 10.0.2.31 + A 10.0.2.32 + A 10.0.2.33 + A 10.0.2.34 + A 10.0.2.35 + A 10.0.2.36 + A 10.0.2.37 + A 10.0.2.38 + A 10.0.2.39 + A 10.0.2.40 + A 10.0.2.41 + A 10.0.2.42 + A 10.0.2.43 + A 10.0.2.44 + A 10.0.2.45 + A 10.0.2.46 + A 10.0.2.47 + A 10.0.2.48 + A 10.0.2.49 + A 10.0.2.50 + A 10.0.2.51 + A 10.0.2.52 + A 10.0.2.53 + A 10.0.2.54 + A 10.0.2.55 + A 10.0.2.56 + A 10.0.2.57 + A 10.0.2.58 + A 10.0.2.59 + A 10.0.2.60 + A 10.0.2.61 + A 10.0.2.62 + A 10.0.2.63 + A 10.0.2.64 + A 10.0.2.65 + A 10.0.2.66 + A 10.0.2.67 + A 10.0.2.68 + A 10.0.2.69 + A 10.0.2.70 + A 10.0.2.71 + A 10.0.2.72 + A 10.0.2.73 + A 10.0.2.74 + A 10.0.2.75 + A 10.0.2.76 + A 10.0.2.77 + A 10.0.2.78 + A 10.0.2.79 + A 10.0.2.80 + A 10.0.2.81 + A 10.0.2.82 + A 10.0.2.83 + A 10.0.2.84 + A 10.0.2.85 + A 10.0.2.86 + A 10.0.2.87 + A 10.0.2.88 + A 10.0.2.89 + A 10.0.2.90 + A 10.0.2.91 + A 10.0.2.92 + A 10.0.2.93 + A 10.0.2.94 + A 10.0.2.95 + A 10.0.2.96 + A 10.0.2.97 + A 10.0.2.98 + A 10.0.2.99 + A 10.0.2.100 + A 10.0.2.101 + A 10.0.2.102 + A 10.0.2.103 + A 10.0.2.104 + A 10.0.2.105 + A 10.0.2.106 + A 10.0.2.107 + A 10.0.2.108 + A 10.0.2.109 + A 10.0.2.110 + A 10.0.2.111 + A 10.0.2.112 + A 10.0.2.113 + A 10.0.2.114 + A 10.0.2.115 + A 10.0.2.116 + A 10.0.2.117 + A 10.0.2.118 + A 10.0.2.119 + A 10.0.2.120 + A 10.0.2.121 + A 10.0.2.122 + A 10.0.2.123 + A 10.0.2.124 + A 10.0.2.125 + A 10.0.2.126 + A 10.0.2.127 + A 10.0.2.128 + A 10.0.2.129 + A 10.0.2.130 + A 10.0.2.131 + A 10.0.2.132 + A 10.0.2.133 + A 10.0.2.134 + A 10.0.2.135 + A 10.0.2.136 + A 10.0.2.137 + A 10.0.2.138 + A 10.0.2.139 + A 10.0.2.140 + A 10.0.2.141 + A 10.0.2.142 + A 10.0.2.143 + A 10.0.2.144 + A 10.0.2.145 + A 10.0.2.146 + A 10.0.2.147 + A 10.0.2.148 + A 10.0.2.149 + A 10.0.2.150 + A 10.0.2.151 + A 10.0.2.152 + A 10.0.2.153 + A 10.0.2.154 + A 10.0.2.155 + A 10.0.2.156 + A 10.0.2.157 + A 10.0.2.158 + A 10.0.2.159 + A 10.0.2.160 + A 10.0.2.161 + A 10.0.2.162 + A 10.0.2.163 + A 10.0.2.164 + A 10.0.2.165 + A 10.0.2.166 + A 10.0.2.167 + A 10.0.2.168 + A 10.0.2.169 + A 10.0.2.170 + A 10.0.2.171 + A 10.0.2.172 + A 10.0.2.173 + A 10.0.2.174 + A 10.0.2.175 + A 10.0.2.176 + A 10.0.2.177 + A 10.0.2.178 + A 10.0.2.179 + A 10.0.2.180 + A 10.0.2.181 + A 10.0.2.182 + A 10.0.2.183 + A 10.0.2.184 + A 10.0.2.185 + A 10.0.2.186 + A 10.0.2.187 + A 10.0.2.188 + A 10.0.2.189 + A 10.0.2.190 + A 10.0.2.191 + A 10.0.2.192 + A 10.0.2.193 + A 10.0.2.194 + A 10.0.2.195 + A 10.0.2.196 + A 10.0.2.197 + A 10.0.2.198 + A 10.0.2.199 + A 10.0.2.200 + A 10.0.2.201 + A 10.0.2.202 + A 10.0.2.203 + A 10.0.2.204 + A 10.0.2.205 + A 10.0.2.206 + A 10.0.2.207 + A 10.0.2.208 + A 10.0.2.209 + A 10.0.2.210 + A 10.0.2.211 + A 10.0.2.212 + A 10.0.2.213 + A 10.0.2.214 + A 10.0.2.215 + A 10.0.2.216 + A 10.0.2.217 + A 10.0.2.218 + A 10.0.2.219 + A 10.0.2.220 + A 10.0.2.221 + A 10.0.2.222 + A 10.0.2.223 + A 10.0.2.224 + A 10.0.2.225 + A 10.0.2.226 + A 10.0.2.227 + A 10.0.2.228 + A 10.0.2.229 + A 10.0.2.230 + A 10.0.2.231 + A 10.0.2.232 + A 10.0.2.233 + A 10.0.2.234 + A 10.0.2.235 + A 10.0.2.236 + A 10.0.2.237 + A 10.0.2.238 + A 10.0.2.239 + A 10.0.2.240 + A 10.0.2.241 + A 10.0.2.242 + A 10.0.2.243 + A 10.0.2.244 + A 10.0.2.245 + A 10.0.2.246 + A 10.0.2.247 + A 10.0.2.248 + A 10.0.2.249 + A 10.0.2.250 + A 10.0.2.251 + A 10.0.2.252 + A 10.0.2.253 + A 10.0.2.254 + A 10.0.2.255 + A 10.0.3.0 + A 10.0.3.1 + A 10.0.3.2 + A 10.0.3.3 + A 10.0.3.4 + A 10.0.3.5 + A 10.0.3.6 + A 10.0.3.7 + A 10.0.3.8 + A 10.0.3.9 + A 10.0.3.10 + A 10.0.3.11 + A 10.0.3.12 + A 10.0.3.13 + A 10.0.3.14 + A 10.0.3.15 + A 10.0.3.16 + A 10.0.3.17 + A 10.0.3.18 + A 10.0.3.19 + A 10.0.3.20 + A 10.0.3.21 + A 10.0.3.22 + A 10.0.3.23 + A 10.0.3.24 + A 10.0.3.25 + A 10.0.3.26 + A 10.0.3.27 + A 10.0.3.28 + A 10.0.3.29 + A 10.0.3.30 + A 10.0.3.31 + A 10.0.3.32 + A 10.0.3.33 + A 10.0.3.34 + A 10.0.3.35 + A 10.0.3.36 + A 10.0.3.37 + A 10.0.3.38 + A 10.0.3.39 + A 10.0.3.40 + A 10.0.3.41 + A 10.0.3.42 + A 10.0.3.43 + A 10.0.3.44 + A 10.0.3.45 + A 10.0.3.46 + A 10.0.3.47 + A 10.0.3.48 + A 10.0.3.49 + A 10.0.3.50 + A 10.0.3.51 + A 10.0.3.52 + A 10.0.3.53 + A 10.0.3.54 + A 10.0.3.55 + A 10.0.3.56 + A 10.0.3.57 + A 10.0.3.58 + A 10.0.3.59 + A 10.0.3.60 + A 10.0.3.61 + A 10.0.3.62 + A 10.0.3.63 + A 10.0.3.64 + A 10.0.3.65 + A 10.0.3.66 + A 10.0.3.67 + A 10.0.3.68 + A 10.0.3.69 + A 10.0.3.70 + A 10.0.3.71 + A 10.0.3.72 + A 10.0.3.73 + A 10.0.3.74 + A 10.0.3.75 + A 10.0.3.76 + A 10.0.3.77 + A 10.0.3.78 + A 10.0.3.79 + A 10.0.3.80 + A 10.0.3.81 + A 10.0.3.82 + A 10.0.3.83 + A 10.0.3.84 + A 10.0.3.85 + A 10.0.3.86 + A 10.0.3.87 + A 10.0.3.88 + A 10.0.3.89 + A 10.0.3.90 + A 10.0.3.91 + A 10.0.3.92 + A 10.0.3.93 + A 10.0.3.94 + A 10.0.3.95 + A 10.0.3.96 + A 10.0.3.97 + A 10.0.3.98 + A 10.0.3.99 + A 10.0.3.100 + A 10.0.3.101 + A 10.0.3.102 + A 10.0.3.103 + A 10.0.3.104 + A 10.0.3.105 + A 10.0.3.106 + A 10.0.3.107 + A 10.0.3.108 + A 10.0.3.109 + A 10.0.3.110 + A 10.0.3.111 + A 10.0.3.112 + A 10.0.3.113 + A 10.0.3.114 + A 10.0.3.115 + A 10.0.3.116 + A 10.0.3.117 + A 10.0.3.118 + A 10.0.3.119 + A 10.0.3.120 + A 10.0.3.121 + A 10.0.3.122 + A 10.0.3.123 + A 10.0.3.124 + A 10.0.3.125 + A 10.0.3.126 + A 10.0.3.127 + A 10.0.3.128 + A 10.0.3.129 + A 10.0.3.130 + A 10.0.3.131 + A 10.0.3.132 + A 10.0.3.133 + A 10.0.3.134 + A 10.0.3.135 + A 10.0.3.136 + A 10.0.3.137 + A 10.0.3.138 + A 10.0.3.139 + A 10.0.3.140 + A 10.0.3.141 + A 10.0.3.142 + A 10.0.3.143 + A 10.0.3.144 + A 10.0.3.145 + A 10.0.3.146 + A 10.0.3.147 + A 10.0.3.148 + A 10.0.3.149 + A 10.0.3.150 + A 10.0.3.151 + A 10.0.3.152 + A 10.0.3.153 + A 10.0.3.154 + A 10.0.3.155 + A 10.0.3.156 + A 10.0.3.157 + A 10.0.3.158 + A 10.0.3.159 + A 10.0.3.160 + A 10.0.3.161 + A 10.0.3.162 + A 10.0.3.163 + A 10.0.3.164 + A 10.0.3.165 + A 10.0.3.166 + A 10.0.3.167 + A 10.0.3.168 + A 10.0.3.169 + A 10.0.3.170 + A 10.0.3.171 + A 10.0.3.172 + A 10.0.3.173 + A 10.0.3.174 + A 10.0.3.175 + A 10.0.3.176 + A 10.0.3.177 + A 10.0.3.178 + A 10.0.3.179 + A 10.0.3.180 + A 10.0.3.181 + A 10.0.3.182 + A 10.0.3.183 + A 10.0.3.184 + A 10.0.3.185 + A 10.0.3.186 + A 10.0.3.187 + A 10.0.3.188 + A 10.0.3.189 + A 10.0.3.190 + A 10.0.3.191 + A 10.0.3.192 + A 10.0.3.193 + A 10.0.3.194 + A 10.0.3.195 + A 10.0.3.196 + A 10.0.3.197 + A 10.0.3.198 + A 10.0.3.199 + A 10.0.3.200 + A 10.0.3.201 + A 10.0.3.202 + A 10.0.3.203 + A 10.0.3.204 + A 10.0.3.205 + A 10.0.3.206 + A 10.0.3.207 + A 10.0.3.208 + A 10.0.3.209 + A 10.0.3.210 + A 10.0.3.211 + A 10.0.3.212 + A 10.0.3.213 + A 10.0.3.214 + A 10.0.3.215 + A 10.0.3.216 + A 10.0.3.217 + A 10.0.3.218 + A 10.0.3.219 + A 10.0.3.220 + A 10.0.3.221 + A 10.0.3.222 + A 10.0.3.223 + A 10.0.3.224 + A 10.0.3.225 + A 10.0.3.226 + A 10.0.3.227 + A 10.0.3.228 + A 10.0.3.229 + A 10.0.3.230 + A 10.0.3.231 + A 10.0.3.232 + A 10.0.3.233 + A 10.0.3.234 + A 10.0.3.235 + A 10.0.3.236 + A 10.0.3.237 + A 10.0.3.238 + A 10.0.3.239 + A 10.0.3.240 + A 10.0.3.241 + A 10.0.3.242 + A 10.0.3.243 + A 10.0.3.244 + A 10.0.3.245 + A 10.0.3.246 + A 10.0.3.247 + A 10.0.3.248 + A 10.0.3.249 + A 10.0.3.250 + A 10.0.3.251 + A 10.0.3.252 + A 10.0.3.253 + A 10.0.3.254 + A 10.0.3.255 + A 10.0.4.0 + A 10.0.4.1 + A 10.0.4.2 + A 10.0.4.3 + A 10.0.4.4 + A 10.0.4.5 + A 10.0.4.6 + A 10.0.4.7 + A 10.0.4.8 + A 10.0.4.9 + A 10.0.4.10 + A 10.0.4.11 + A 10.0.4.12 + A 10.0.4.13 + A 10.0.4.14 + A 10.0.4.15 + A 10.0.4.16 + A 10.0.4.17 + A 10.0.4.18 + A 10.0.4.19 + A 10.0.4.20 + A 10.0.4.21 + A 10.0.4.22 + A 10.0.4.23 + A 10.0.4.24 + A 10.0.4.25 + A 10.0.4.26 + A 10.0.4.27 + A 10.0.4.28 + A 10.0.4.29 + A 10.0.4.30 + A 10.0.4.31 + A 10.0.4.32 + A 10.0.4.33 + A 10.0.4.34 + A 10.0.4.35 + A 10.0.4.36 + A 10.0.4.37 + A 10.0.4.38 + A 10.0.4.39 + A 10.0.4.40 + A 10.0.4.41 + A 10.0.4.42 + A 10.0.4.43 + A 10.0.4.44 + A 10.0.4.45 + A 10.0.4.46 + A 10.0.4.47 + A 10.0.4.48 + A 10.0.4.49 + A 10.0.4.50 + A 10.0.4.51 + A 10.0.4.52 + A 10.0.4.53 + A 10.0.4.54 + A 10.0.4.55 + A 10.0.4.56 + A 10.0.4.57 + A 10.0.4.58 + A 10.0.4.59 + A 10.0.4.60 + A 10.0.4.61 + A 10.0.4.62 + A 10.0.4.63 + A 10.0.4.64 + A 10.0.4.65 + A 10.0.4.66 + A 10.0.4.67 + A 10.0.4.68 + A 10.0.4.69 + A 10.0.4.70 + A 10.0.4.71 + A 10.0.4.72 + A 10.0.4.73 + A 10.0.4.74 + A 10.0.4.75 + A 10.0.4.76 + A 10.0.4.77 + A 10.0.4.78 + A 10.0.4.79 + A 10.0.4.80 + A 10.0.4.81 + A 10.0.4.82 + A 10.0.4.83 + A 10.0.4.84 + A 10.0.4.85 + A 10.0.4.86 + A 10.0.4.87 + A 10.0.4.88 + A 10.0.4.89 + A 10.0.4.90 + A 10.0.4.91 + A 10.0.4.92 + A 10.0.4.93 + A 10.0.4.94 + A 10.0.4.95 + A 10.0.4.96 + A 10.0.4.97 + A 10.0.4.98 + A 10.0.4.99 + A 10.0.4.100 + A 10.0.4.101 + A 10.0.4.102 + A 10.0.4.103 + A 10.0.4.104 + A 10.0.4.105 + A 10.0.4.106 + A 10.0.4.107 + A 10.0.4.108 + A 10.0.4.109 + A 10.0.4.110 + A 10.0.4.111 + A 10.0.4.112 + A 10.0.4.113 + A 10.0.4.114 + A 10.0.4.115 + A 10.0.4.116 + A 10.0.4.117 + A 10.0.4.118 + A 10.0.4.119 + A 10.0.4.120 + A 10.0.4.121 + A 10.0.4.122 + A 10.0.4.123 + A 10.0.4.124 + A 10.0.4.125 + A 10.0.4.126 + A 10.0.4.127 + A 10.0.4.128 + A 10.0.4.129 + A 10.0.4.130 + A 10.0.4.131 + A 10.0.4.132 + A 10.0.4.133 + A 10.0.4.134 + A 10.0.4.135 + A 10.0.4.136 + A 10.0.4.137 + A 10.0.4.138 + A 10.0.4.139 + A 10.0.4.140 + A 10.0.4.141 + A 10.0.4.142 + A 10.0.4.143 + A 10.0.4.144 + A 10.0.4.145 + A 10.0.4.146 + A 10.0.4.147 + A 10.0.4.148 + A 10.0.4.149 + A 10.0.4.150 + A 10.0.4.151 + A 10.0.4.152 + A 10.0.4.153 + A 10.0.4.154 + A 10.0.4.155 + A 10.0.4.156 + A 10.0.4.157 + A 10.0.4.158 + A 10.0.4.159 + A 10.0.4.160 + A 10.0.4.161 + A 10.0.4.162 + A 10.0.4.163 + A 10.0.4.164 + A 10.0.4.165 + A 10.0.4.166 + A 10.0.4.167 + A 10.0.4.168 + A 10.0.4.169 + A 10.0.4.170 + A 10.0.4.171 + A 10.0.4.172 + A 10.0.4.173 + A 10.0.4.174 + A 10.0.4.175 + A 10.0.4.176 + A 10.0.4.177 + A 10.0.4.178 + A 10.0.4.179 + A 10.0.4.180 + A 10.0.4.181 + A 10.0.4.182 + A 10.0.4.183 + A 10.0.4.184 + A 10.0.4.185 + A 10.0.4.186 + A 10.0.4.187 + A 10.0.4.188 + A 10.0.4.189 + A 10.0.4.190 + A 10.0.4.191 + A 10.0.4.192 + A 10.0.4.193 + A 10.0.4.194 + A 10.0.4.195 + A 10.0.4.196 + A 10.0.4.197 + A 10.0.4.198 + A 10.0.4.199 + A 10.0.4.200 + A 10.0.4.201 + A 10.0.4.202 + A 10.0.4.203 + A 10.0.4.204 + A 10.0.4.205 + A 10.0.4.206 + A 10.0.4.207 + A 10.0.4.208 + A 10.0.4.209 + A 10.0.4.210 + A 10.0.4.211 + A 10.0.4.212 + A 10.0.4.213 + A 10.0.4.214 + A 10.0.4.215 + A 10.0.4.216 + A 10.0.4.217 + A 10.0.4.218 + A 10.0.4.219 + A 10.0.4.220 + A 10.0.4.221 + A 10.0.4.222 + A 10.0.4.223 + A 10.0.4.224 + A 10.0.4.225 + A 10.0.4.226 + A 10.0.4.227 + A 10.0.4.228 + A 10.0.4.229 + A 10.0.4.230 + A 10.0.4.231 + A 10.0.4.232 + A 10.0.4.233 + A 10.0.4.234 + A 10.0.4.235 + A 10.0.4.236 + A 10.0.4.237 + A 10.0.4.238 + A 10.0.4.239 + A 10.0.4.240 + A 10.0.4.241 + A 10.0.4.242 + A 10.0.4.243 + A 10.0.4.244 + A 10.0.4.245 + A 10.0.4.246 + A 10.0.4.247 + A 10.0.4.248 + A 10.0.4.249 + A 10.0.4.250 + A 10.0.4.251 + A 10.0.4.252 + A 10.0.4.253 + A 10.0.4.254 + A 10.0.4.255 + A 10.0.5.0 + A 10.0.5.1 + A 10.0.5.2 + A 10.0.5.3 + A 10.0.5.4 + A 10.0.5.5 + A 10.0.5.6 + A 10.0.5.7 + A 10.0.5.8 + A 10.0.5.9 + A 10.0.5.10 + A 10.0.5.11 + A 10.0.5.12 + A 10.0.5.13 + A 10.0.5.14 + A 10.0.5.15 + A 10.0.5.16 + A 10.0.5.17 + A 10.0.5.18 + A 10.0.5.19 + A 10.0.5.20 + A 10.0.5.21 + A 10.0.5.22 + A 10.0.5.23 + A 10.0.5.24 + A 10.0.5.25 + A 10.0.5.26 + A 10.0.5.27 + A 10.0.5.28 + A 10.0.5.29 + A 10.0.5.30 + A 10.0.5.31 + A 10.0.5.32 + A 10.0.5.33 + A 10.0.5.34 + A 10.0.5.35 + A 10.0.5.36 + A 10.0.5.37 + A 10.0.5.38 + A 10.0.5.39 + A 10.0.5.40 + A 10.0.5.41 + A 10.0.5.42 + A 10.0.5.43 + A 10.0.5.44 + A 10.0.5.45 + A 10.0.5.46 + A 10.0.5.47 + A 10.0.5.48 + A 10.0.5.49 + A 10.0.5.50 + A 10.0.5.51 + A 10.0.5.52 + A 10.0.5.53 + A 10.0.5.54 + A 10.0.5.55 + A 10.0.5.56 + A 10.0.5.57 + A 10.0.5.58 + A 10.0.5.59 + A 10.0.5.60 + A 10.0.5.61 + A 10.0.5.62 + A 10.0.5.63 + A 10.0.5.64 + A 10.0.5.65 + A 10.0.5.66 + A 10.0.5.67 + A 10.0.5.68 + A 10.0.5.69 + A 10.0.5.70 + A 10.0.5.71 + A 10.0.5.72 + A 10.0.5.73 + A 10.0.5.74 + A 10.0.5.75 + A 10.0.5.76 + A 10.0.5.77 + A 10.0.5.78 + A 10.0.5.79 + A 10.0.5.80 + A 10.0.5.81 + A 10.0.5.82 + A 10.0.5.83 + A 10.0.5.84 + A 10.0.5.85 + A 10.0.5.86 + A 10.0.5.87 + A 10.0.5.88 + A 10.0.5.89 + A 10.0.5.90 + A 10.0.5.91 + A 10.0.5.92 + A 10.0.5.93 + A 10.0.5.94 + A 10.0.5.95 + A 10.0.5.96 + A 10.0.5.97 + A 10.0.5.98 + A 10.0.5.99 + A 10.0.5.100 + A 10.0.5.101 + A 10.0.5.102 + A 10.0.5.103 + A 10.0.5.104 + A 10.0.5.105 + A 10.0.5.106 + A 10.0.5.107 + A 10.0.5.108 + A 10.0.5.109 + A 10.0.5.110 + A 10.0.5.111 + A 10.0.5.112 + A 10.0.5.113 + A 10.0.5.114 + A 10.0.5.115 + A 10.0.5.116 + A 10.0.5.117 + A 10.0.5.118 + A 10.0.5.119 + A 10.0.5.120 + A 10.0.5.121 + A 10.0.5.122 + A 10.0.5.123 + A 10.0.5.124 + A 10.0.5.125 + A 10.0.5.126 + A 10.0.5.127 + A 10.0.5.128 + A 10.0.5.129 + A 10.0.5.130 + A 10.0.5.131 + A 10.0.5.132 + A 10.0.5.133 + A 10.0.5.134 + A 10.0.5.135 + A 10.0.5.136 + A 10.0.5.137 + A 10.0.5.138 + A 10.0.5.139 + A 10.0.5.140 + A 10.0.5.141 + A 10.0.5.142 + A 10.0.5.143 + A 10.0.5.144 + A 10.0.5.145 + A 10.0.5.146 + A 10.0.5.147 + A 10.0.5.148 + A 10.0.5.149 + A 10.0.5.150 + A 10.0.5.151 + A 10.0.5.152 + A 10.0.5.153 + A 10.0.5.154 + A 10.0.5.155 + A 10.0.5.156 + A 10.0.5.157 + A 10.0.5.158 + A 10.0.5.159 + A 10.0.5.160 + A 10.0.5.161 + A 10.0.5.162 + A 10.0.5.163 + A 10.0.5.164 + A 10.0.5.165 + A 10.0.5.166 + A 10.0.5.167 + A 10.0.5.168 + A 10.0.5.169 + A 10.0.5.170 + A 10.0.5.171 + A 10.0.5.172 + A 10.0.5.173 + A 10.0.5.174 + A 10.0.5.175 + A 10.0.5.176 + A 10.0.5.177 + A 10.0.5.178 + A 10.0.5.179 + A 10.0.5.180 + A 10.0.5.181 + A 10.0.5.182 + A 10.0.5.183 + A 10.0.5.184 + A 10.0.5.185 + A 10.0.5.186 + A 10.0.5.187 + A 10.0.5.188 + A 10.0.5.189 + A 10.0.5.190 + A 10.0.5.191 + A 10.0.5.192 + A 10.0.5.193 + A 10.0.5.194 + A 10.0.5.195 + A 10.0.5.196 + A 10.0.5.197 + A 10.0.5.198 + A 10.0.5.199 + A 10.0.5.200 + A 10.0.5.201 + A 10.0.5.202 + A 10.0.5.203 + A 10.0.5.204 + A 10.0.5.205 + A 10.0.5.206 + A 10.0.5.207 + A 10.0.5.208 + A 10.0.5.209 + A 10.0.5.210 + A 10.0.5.211 + A 10.0.5.212 + A 10.0.5.213 + A 10.0.5.214 + A 10.0.5.215 + A 10.0.5.216 + A 10.0.5.217 + A 10.0.5.218 + A 10.0.5.219 + A 10.0.5.220 + A 10.0.5.221 + A 10.0.5.222 + A 10.0.5.223 + A 10.0.5.224 + A 10.0.5.225 + A 10.0.5.226 + A 10.0.5.227 + A 10.0.5.228 + A 10.0.5.229 + A 10.0.5.230 + A 10.0.5.231 + A 10.0.5.232 + A 10.0.5.233 + A 10.0.5.234 + A 10.0.5.235 + A 10.0.5.236 + A 10.0.5.237 + A 10.0.5.238 + A 10.0.5.239 + A 10.0.5.240 + A 10.0.5.241 + A 10.0.5.242 + A 10.0.5.243 + A 10.0.5.244 + A 10.0.5.245 + A 10.0.5.246 + A 10.0.5.247 + A 10.0.5.248 + A 10.0.5.249 + A 10.0.5.250 + A 10.0.5.251 + A 10.0.5.252 + A 10.0.5.253 + A 10.0.5.254 + A 10.0.5.255 + A 10.0.6.0 + A 10.0.6.1 + A 10.0.6.2 + A 10.0.6.3 + A 10.0.6.4 + A 10.0.6.5 + A 10.0.6.6 + A 10.0.6.7 + A 10.0.6.8 + A 10.0.6.9 + A 10.0.6.10 + A 10.0.6.11 + A 10.0.6.12 + A 10.0.6.13 + A 10.0.6.14 + A 10.0.6.15 + A 10.0.6.16 + A 10.0.6.17 + A 10.0.6.18 + A 10.0.6.19 + A 10.0.6.20 + A 10.0.6.21 + A 10.0.6.22 + A 10.0.6.23 + A 10.0.6.24 + A 10.0.6.25 + A 10.0.6.26 + A 10.0.6.27 + A 10.0.6.28 + A 10.0.6.29 + A 10.0.6.30 + A 10.0.6.31 + A 10.0.6.32 + A 10.0.6.33 + A 10.0.6.34 + A 10.0.6.35 + A 10.0.6.36 + A 10.0.6.37 + A 10.0.6.38 + A 10.0.6.39 + A 10.0.6.40 + A 10.0.6.41 + A 10.0.6.42 + A 10.0.6.43 + A 10.0.6.44 + A 10.0.6.45 + A 10.0.6.46 + A 10.0.6.47 + A 10.0.6.48 + A 10.0.6.49 + A 10.0.6.50 + A 10.0.6.51 + A 10.0.6.52 + A 10.0.6.53 + A 10.0.6.54 + A 10.0.6.55 + A 10.0.6.56 + A 10.0.6.57 + A 10.0.6.58 + A 10.0.6.59 + A 10.0.6.60 + A 10.0.6.61 + A 10.0.6.62 + A 10.0.6.63 + A 10.0.6.64 + A 10.0.6.65 + A 10.0.6.66 + A 10.0.6.67 + A 10.0.6.68 + A 10.0.6.69 + A 10.0.6.70 + A 10.0.6.71 + A 10.0.6.72 + A 10.0.6.73 + A 10.0.6.74 + A 10.0.6.75 + A 10.0.6.76 + A 10.0.6.77 + A 10.0.6.78 + A 10.0.6.79 + A 10.0.6.80 + A 10.0.6.81 + A 10.0.6.82 + A 10.0.6.83 + A 10.0.6.84 + A 10.0.6.85 + A 10.0.6.86 + A 10.0.6.87 + A 10.0.6.88 + A 10.0.6.89 + A 10.0.6.90 + A 10.0.6.91 + A 10.0.6.92 + A 10.0.6.93 + A 10.0.6.94 + A 10.0.6.95 + A 10.0.6.96 + A 10.0.6.97 + A 10.0.6.98 + A 10.0.6.99 + A 10.0.6.100 + A 10.0.6.101 + A 10.0.6.102 + A 10.0.6.103 + A 10.0.6.104 + A 10.0.6.105 + A 10.0.6.106 + A 10.0.6.107 + A 10.0.6.108 + A 10.0.6.109 + A 10.0.6.110 + A 10.0.6.111 + A 10.0.6.112 + A 10.0.6.113 + A 10.0.6.114 + A 10.0.6.115 + A 10.0.6.116 + A 10.0.6.117 + A 10.0.6.118 + A 10.0.6.119 + A 10.0.6.120 + A 10.0.6.121 + A 10.0.6.122 + A 10.0.6.123 + A 10.0.6.124 + A 10.0.6.125 + A 10.0.6.126 + A 10.0.6.127 + A 10.0.6.128 + A 10.0.6.129 + A 10.0.6.130 + A 10.0.6.131 + A 10.0.6.132 + A 10.0.6.133 + A 10.0.6.134 + A 10.0.6.135 + A 10.0.6.136 + A 10.0.6.137 + A 10.0.6.138 + A 10.0.6.139 + A 10.0.6.140 + A 10.0.6.141 + A 10.0.6.142 + A 10.0.6.143 + A 10.0.6.144 + A 10.0.6.145 + A 10.0.6.146 + A 10.0.6.147 + A 10.0.6.148 + A 10.0.6.149 + A 10.0.6.150 + A 10.0.6.151 + A 10.0.6.152 + A 10.0.6.153 + A 10.0.6.154 + A 10.0.6.155 + A 10.0.6.156 + A 10.0.6.157 + A 10.0.6.158 + A 10.0.6.159 + A 10.0.6.160 + A 10.0.6.161 + A 10.0.6.162 + A 10.0.6.163 + A 10.0.6.164 + A 10.0.6.165 + A 10.0.6.166 + A 10.0.6.167 + A 10.0.6.168 + A 10.0.6.169 + A 10.0.6.170 + A 10.0.6.171 + A 10.0.6.172 + A 10.0.6.173 + A 10.0.6.174 + A 10.0.6.175 + A 10.0.6.176 + A 10.0.6.177 + A 10.0.6.178 + A 10.0.6.179 + A 10.0.6.180 + A 10.0.6.181 + A 10.0.6.182 + A 10.0.6.183 + A 10.0.6.184 + A 10.0.6.185 + A 10.0.6.186 + A 10.0.6.187 + A 10.0.6.188 + A 10.0.6.189 + A 10.0.6.190 + A 10.0.6.191 + A 10.0.6.192 + A 10.0.6.193 + A 10.0.6.194 + A 10.0.6.195 + A 10.0.6.196 + A 10.0.6.197 + A 10.0.6.198 + A 10.0.6.199 + A 10.0.6.200 + A 10.0.6.201 + A 10.0.6.202 + A 10.0.6.203 + A 10.0.6.204 + A 10.0.6.205 + A 10.0.6.206 + A 10.0.6.207 + A 10.0.6.208 + A 10.0.6.209 + A 10.0.6.210 + A 10.0.6.211 + A 10.0.6.212 + A 10.0.6.213 + A 10.0.6.214 + A 10.0.6.215 + A 10.0.6.216 + A 10.0.6.217 + A 10.0.6.218 + A 10.0.6.219 + A 10.0.6.220 + A 10.0.6.221 + A 10.0.6.222 + A 10.0.6.223 + A 10.0.6.224 + A 10.0.6.225 + A 10.0.6.226 + A 10.0.6.227 + A 10.0.6.228 + A 10.0.6.229 + A 10.0.6.230 + A 10.0.6.231 + A 10.0.6.232 + A 10.0.6.233 + A 10.0.6.234 + A 10.0.6.235 + A 10.0.6.236 + A 10.0.6.237 + A 10.0.6.238 + A 10.0.6.239 + A 10.0.6.240 + A 10.0.6.241 + A 10.0.6.242 + A 10.0.6.243 + A 10.0.6.244 + A 10.0.6.245 + A 10.0.6.246 + A 10.0.6.247 + A 10.0.6.248 + A 10.0.6.249 + A 10.0.6.250 + A 10.0.6.251 + A 10.0.6.252 + A 10.0.6.253 + A 10.0.6.254 + A 10.0.6.255 + A 10.0.7.0 + A 10.0.7.1 + A 10.0.7.2 + A 10.0.7.3 + A 10.0.7.4 + A 10.0.7.5 + A 10.0.7.6 + A 10.0.7.7 + A 10.0.7.8 + A 10.0.7.9 + A 10.0.7.10 + A 10.0.7.11 + A 10.0.7.12 + A 10.0.7.13 + A 10.0.7.14 + A 10.0.7.15 + A 10.0.7.16 + A 10.0.7.17 + A 10.0.7.18 + A 10.0.7.19 + A 10.0.7.20 + A 10.0.7.21 + A 10.0.7.22 + A 10.0.7.23 + A 10.0.7.24 + A 10.0.7.25 + A 10.0.7.26 + A 10.0.7.27 + A 10.0.7.28 + A 10.0.7.29 + A 10.0.7.30 + A 10.0.7.31 + A 10.0.7.32 + A 10.0.7.33 + A 10.0.7.34 + A 10.0.7.35 + A 10.0.7.36 + A 10.0.7.37 + A 10.0.7.38 + A 10.0.7.39 + A 10.0.7.40 + A 10.0.7.41 + A 10.0.7.42 + A 10.0.7.43 + A 10.0.7.44 + A 10.0.7.45 + A 10.0.7.46 + A 10.0.7.47 + A 10.0.7.48 + A 10.0.7.49 + A 10.0.7.50 + A 10.0.7.51 + A 10.0.7.52 + A 10.0.7.53 + A 10.0.7.54 + A 10.0.7.55 + A 10.0.7.56 + A 10.0.7.57 + A 10.0.7.58 + A 10.0.7.59 + A 10.0.7.60 + A 10.0.7.61 + A 10.0.7.62 + A 10.0.7.63 + A 10.0.7.64 + A 10.0.7.65 + A 10.0.7.66 + A 10.0.7.67 + A 10.0.7.68 + A 10.0.7.69 + A 10.0.7.70 + A 10.0.7.71 + A 10.0.7.72 + A 10.0.7.73 + A 10.0.7.74 + A 10.0.7.75 + A 10.0.7.76 + A 10.0.7.77 + A 10.0.7.78 + A 10.0.7.79 + A 10.0.7.80 + A 10.0.7.81 + A 10.0.7.82 + A 10.0.7.83 + A 10.0.7.84 + A 10.0.7.85 + A 10.0.7.86 + A 10.0.7.87 + A 10.0.7.88 + A 10.0.7.89 + A 10.0.7.90 + A 10.0.7.91 + A 10.0.7.92 + A 10.0.7.93 + A 10.0.7.94 + A 10.0.7.95 + A 10.0.7.96 + A 10.0.7.97 + A 10.0.7.98 + A 10.0.7.99 + A 10.0.7.100 + A 10.0.7.101 + A 10.0.7.102 + A 10.0.7.103 + A 10.0.7.104 + A 10.0.7.105 + A 10.0.7.106 + A 10.0.7.107 + A 10.0.7.108 + A 10.0.7.109 + A 10.0.7.110 + A 10.0.7.111 + A 10.0.7.112 + A 10.0.7.113 + A 10.0.7.114 + A 10.0.7.115 + A 10.0.7.116 + A 10.0.7.117 + A 10.0.7.118 + A 10.0.7.119 + A 10.0.7.120 + A 10.0.7.121 + A 10.0.7.122 + A 10.0.7.123 + A 10.0.7.124 + A 10.0.7.125 + A 10.0.7.126 + A 10.0.7.127 + A 10.0.7.128 + A 10.0.7.129 + A 10.0.7.130 + A 10.0.7.131 + A 10.0.7.132 + A 10.0.7.133 + A 10.0.7.134 + A 10.0.7.135 + A 10.0.7.136 + A 10.0.7.137 + A 10.0.7.138 + A 10.0.7.139 + A 10.0.7.140 + A 10.0.7.141 + A 10.0.7.142 + A 10.0.7.143 + A 10.0.7.144 + A 10.0.7.145 + A 10.0.7.146 + A 10.0.7.147 + A 10.0.7.148 + A 10.0.7.149 + A 10.0.7.150 + A 10.0.7.151 + A 10.0.7.152 + A 10.0.7.153 + A 10.0.7.154 + A 10.0.7.155 + A 10.0.7.156 + A 10.0.7.157 + A 10.0.7.158 + A 10.0.7.159 + A 10.0.7.160 + A 10.0.7.161 + A 10.0.7.162 + A 10.0.7.163 + A 10.0.7.164 + A 10.0.7.165 + A 10.0.7.166 + A 10.0.7.167 + A 10.0.7.168 + A 10.0.7.169 + A 10.0.7.170 + A 10.0.7.171 + A 10.0.7.172 + A 10.0.7.173 + A 10.0.7.174 + A 10.0.7.175 + A 10.0.7.176 + A 10.0.7.177 + A 10.0.7.178 + A 10.0.7.179 + A 10.0.7.180 + A 10.0.7.181 + A 10.0.7.182 + A 10.0.7.183 + A 10.0.7.184 + A 10.0.7.185 + A 10.0.7.186 + A 10.0.7.187 + A 10.0.7.188 + A 10.0.7.189 + A 10.0.7.190 + A 10.0.7.191 + A 10.0.7.192 + A 10.0.7.193 + A 10.0.7.194 + A 10.0.7.195 + A 10.0.7.196 + A 10.0.7.197 + A 10.0.7.198 + A 10.0.7.199 + A 10.0.7.200 + A 10.0.7.201 + A 10.0.7.202 + A 10.0.7.203 + A 10.0.7.204 + A 10.0.7.205 + A 10.0.7.206 + A 10.0.7.207 + A 10.0.7.208 + A 10.0.7.209 + A 10.0.7.210 + A 10.0.7.211 + A 10.0.7.212 + A 10.0.7.213 + A 10.0.7.214 + A 10.0.7.215 + A 10.0.7.216 + A 10.0.7.217 + A 10.0.7.218 + A 10.0.7.219 + A 10.0.7.220 + A 10.0.7.221 + A 10.0.7.222 + A 10.0.7.223 + A 10.0.7.224 + A 10.0.7.225 + A 10.0.7.226 + A 10.0.7.227 + A 10.0.7.228 + A 10.0.7.229 + A 10.0.7.230 + A 10.0.7.231 + A 10.0.7.232 + A 10.0.7.233 + A 10.0.7.234 + A 10.0.7.235 + A 10.0.7.236 + A 10.0.7.237 + A 10.0.7.238 + A 10.0.7.239 + A 10.0.7.240 + A 10.0.7.241 + A 10.0.7.242 + A 10.0.7.243 + A 10.0.7.244 + A 10.0.7.245 + A 10.0.7.246 + A 10.0.7.247 + A 10.0.7.248 + A 10.0.7.249 + A 10.0.7.250 + A 10.0.7.251 + A 10.0.7.252 + A 10.0.7.253 + A 10.0.7.254 + A 10.0.7.255 + A 10.0.8.0 + A 10.0.8.1 + A 10.0.8.2 + A 10.0.8.3 + A 10.0.8.4 + A 10.0.8.5 + A 10.0.8.6 + A 10.0.8.7 + A 10.0.8.8 + A 10.0.8.9 + A 10.0.8.10 + A 10.0.8.11 + A 10.0.8.12 + A 10.0.8.13 + A 10.0.8.14 + A 10.0.8.15 + A 10.0.8.16 + A 10.0.8.17 + A 10.0.8.18 + A 10.0.8.19 + A 10.0.8.20 + A 10.0.8.21 + A 10.0.8.22 + A 10.0.8.23 + A 10.0.8.24 + A 10.0.8.25 + A 10.0.8.26 + A 10.0.8.27 + A 10.0.8.28 + A 10.0.8.29 + A 10.0.8.30 + A 10.0.8.31 + A 10.0.8.32 + A 10.0.8.33 + A 10.0.8.34 + A 10.0.8.35 + A 10.0.8.36 + A 10.0.8.37 + A 10.0.8.38 + A 10.0.8.39 + A 10.0.8.40 + A 10.0.8.41 + A 10.0.8.42 + A 10.0.8.43 + A 10.0.8.44 + A 10.0.8.45 + A 10.0.8.46 + A 10.0.8.47 + A 10.0.8.48 + A 10.0.8.49 + A 10.0.8.50 + A 10.0.8.51 + A 10.0.8.52 + A 10.0.8.53 + A 10.0.8.54 + A 10.0.8.55 + A 10.0.8.56 + A 10.0.8.57 + A 10.0.8.58 + A 10.0.8.59 + A 10.0.8.60 + A 10.0.8.61 + A 10.0.8.62 + A 10.0.8.63 + A 10.0.8.64 + A 10.0.8.65 + A 10.0.8.66 + A 10.0.8.67 + A 10.0.8.68 + A 10.0.8.69 + A 10.0.8.70 + A 10.0.8.71 + A 10.0.8.72 + A 10.0.8.73 + A 10.0.8.74 + A 10.0.8.75 + A 10.0.8.76 + A 10.0.8.77 + A 10.0.8.78 + A 10.0.8.79 + A 10.0.8.80 + A 10.0.8.81 + A 10.0.8.82 + A 10.0.8.83 + A 10.0.8.84 + A 10.0.8.85 + A 10.0.8.86 + A 10.0.8.87 + A 10.0.8.88 + A 10.0.8.89 + A 10.0.8.90 + A 10.0.8.91 + A 10.0.8.92 + A 10.0.8.93 + A 10.0.8.94 + A 10.0.8.95 + A 10.0.8.96 + A 10.0.8.97 + A 10.0.8.98 + A 10.0.8.99 + A 10.0.8.100 + A 10.0.8.101 + A 10.0.8.102 + A 10.0.8.103 + A 10.0.8.104 + A 10.0.8.105 + A 10.0.8.106 + A 10.0.8.107 + A 10.0.8.108 + A 10.0.8.109 + A 10.0.8.110 + A 10.0.8.111 + A 10.0.8.112 + A 10.0.8.113 + A 10.0.8.114 + A 10.0.8.115 + A 10.0.8.116 + A 10.0.8.117 + A 10.0.8.118 + A 10.0.8.119 + A 10.0.8.120 + A 10.0.8.121 + A 10.0.8.122 + A 10.0.8.123 + A 10.0.8.124 + A 10.0.8.125 + A 10.0.8.126 + A 10.0.8.127 + A 10.0.8.128 + A 10.0.8.129 + A 10.0.8.130 + A 10.0.8.131 + A 10.0.8.132 + A 10.0.8.133 + A 10.0.8.134 + A 10.0.8.135 + A 10.0.8.136 + A 10.0.8.137 + A 10.0.8.138 + A 10.0.8.139 + A 10.0.8.140 + A 10.0.8.141 + A 10.0.8.142 + A 10.0.8.143 + A 10.0.8.144 + A 10.0.8.145 + A 10.0.8.146 + A 10.0.8.147 + A 10.0.8.148 + A 10.0.8.149 + A 10.0.8.150 + A 10.0.8.151 + A 10.0.8.152 + A 10.0.8.153 + A 10.0.8.154 + A 10.0.8.155 + A 10.0.8.156 + A 10.0.8.157 + A 10.0.8.158 + A 10.0.8.159 + A 10.0.8.160 + A 10.0.8.161 + A 10.0.8.162 + A 10.0.8.163 + A 10.0.8.164 + A 10.0.8.165 + A 10.0.8.166 + A 10.0.8.167 + A 10.0.8.168 + A 10.0.8.169 + A 10.0.8.170 + A 10.0.8.171 + A 10.0.8.172 + A 10.0.8.173 + A 10.0.8.174 + A 10.0.8.175 + A 10.0.8.176 + A 10.0.8.177 + A 10.0.8.178 + A 10.0.8.179 + A 10.0.8.180 + A 10.0.8.181 + A 10.0.8.182 + A 10.0.8.183 + A 10.0.8.184 + A 10.0.8.185 + A 10.0.8.186 + A 10.0.8.187 + A 10.0.8.188 + A 10.0.8.189 + A 10.0.8.190 + A 10.0.8.191 + A 10.0.8.192 + A 10.0.8.193 + A 10.0.8.194 + A 10.0.8.195 + A 10.0.8.196 + A 10.0.8.197 + A 10.0.8.198 + A 10.0.8.199 + A 10.0.8.200 + A 10.0.8.201 + A 10.0.8.202 + A 10.0.8.203 + A 10.0.8.204 + A 10.0.8.205 + A 10.0.8.206 + A 10.0.8.207 + A 10.0.8.208 + A 10.0.8.209 + A 10.0.8.210 + A 10.0.8.211 + A 10.0.8.212 + A 10.0.8.213 + A 10.0.8.214 + A 10.0.8.215 + A 10.0.8.216 + A 10.0.8.217 + A 10.0.8.218 + A 10.0.8.219 + A 10.0.8.220 + A 10.0.8.221 + A 10.0.8.222 + A 10.0.8.223 + A 10.0.8.224 + A 10.0.8.225 + A 10.0.8.226 + A 10.0.8.227 + A 10.0.8.228 + A 10.0.8.229 + A 10.0.8.230 + A 10.0.8.231 + A 10.0.8.232 + A 10.0.8.233 + A 10.0.8.234 + A 10.0.8.235 + A 10.0.8.236 + A 10.0.8.237 + A 10.0.8.238 + A 10.0.8.239 + A 10.0.8.240 + A 10.0.8.241 + A 10.0.8.242 + A 10.0.8.243 + A 10.0.8.244 + A 10.0.8.245 + A 10.0.8.246 + A 10.0.8.247 + A 10.0.8.248 + A 10.0.8.249 + A 10.0.8.250 + A 10.0.8.251 + A 10.0.8.252 + A 10.0.8.253 + A 10.0.8.254 + A 10.0.8.255 + A 10.0.9.0 + A 10.0.9.1 + A 10.0.9.2 + A 10.0.9.3 + A 10.0.9.4 + A 10.0.9.5 + A 10.0.9.6 + A 10.0.9.7 + A 10.0.9.8 + A 10.0.9.9 + A 10.0.9.10 + A 10.0.9.11 + A 10.0.9.12 + A 10.0.9.13 + A 10.0.9.14 + A 10.0.9.15 + A 10.0.9.16 + A 10.0.9.17 + A 10.0.9.18 + A 10.0.9.19 + A 10.0.9.20 + A 10.0.9.21 + A 10.0.9.22 + A 10.0.9.23 + A 10.0.9.24 + A 10.0.9.25 + A 10.0.9.26 + A 10.0.9.27 + A 10.0.9.28 + A 10.0.9.29 + A 10.0.9.30 + A 10.0.9.31 + A 10.0.9.32 + A 10.0.9.33 + A 10.0.9.34 + A 10.0.9.35 + A 10.0.9.36 + A 10.0.9.37 + A 10.0.9.38 + A 10.0.9.39 + A 10.0.9.40 + A 10.0.9.41 + A 10.0.9.42 + A 10.0.9.43 + A 10.0.9.44 + A 10.0.9.45 + A 10.0.9.46 + A 10.0.9.47 + A 10.0.9.48 + A 10.0.9.49 + A 10.0.9.50 + A 10.0.9.51 + A 10.0.9.52 + A 10.0.9.53 + A 10.0.9.54 + A 10.0.9.55 + A 10.0.9.56 + A 10.0.9.57 + A 10.0.9.58 + A 10.0.9.59 + A 10.0.9.60 + A 10.0.9.61 + A 10.0.9.62 + A 10.0.9.63 + A 10.0.9.64 + A 10.0.9.65 + A 10.0.9.66 + A 10.0.9.67 + A 10.0.9.68 + A 10.0.9.69 + A 10.0.9.70 + A 10.0.9.71 + A 10.0.9.72 + A 10.0.9.73 + A 10.0.9.74 + A 10.0.9.75 + A 10.0.9.76 + A 10.0.9.77 + A 10.0.9.78 + A 10.0.9.79 + A 10.0.9.80 + A 10.0.9.81 + A 10.0.9.82 + A 10.0.9.83 + A 10.0.9.84 + A 10.0.9.85 + A 10.0.9.86 + A 10.0.9.87 + A 10.0.9.88 + A 10.0.9.89 + A 10.0.9.90 + A 10.0.9.91 + A 10.0.9.92 + A 10.0.9.93 + A 10.0.9.94 + A 10.0.9.95 + A 10.0.9.96 + A 10.0.9.97 + A 10.0.9.98 + A 10.0.9.99 + A 10.0.9.100 + A 10.0.9.101 + A 10.0.9.102 + A 10.0.9.103 + A 10.0.9.104 + A 10.0.9.105 + A 10.0.9.106 + A 10.0.9.107 + A 10.0.9.108 + A 10.0.9.109 + A 10.0.9.110 + A 10.0.9.111 + A 10.0.9.112 + A 10.0.9.113 + A 10.0.9.114 + A 10.0.9.115 + A 10.0.9.116 + A 10.0.9.117 + A 10.0.9.118 + A 10.0.9.119 + A 10.0.9.120 + A 10.0.9.121 + A 10.0.9.122 + A 10.0.9.123 + A 10.0.9.124 + A 10.0.9.125 + A 10.0.9.126 + A 10.0.9.127 + A 10.0.9.128 + A 10.0.9.129 + A 10.0.9.130 + A 10.0.9.131 + A 10.0.9.132 + A 10.0.9.133 + A 10.0.9.134 + A 10.0.9.135 + A 10.0.9.136 + A 10.0.9.137 + A 10.0.9.138 + A 10.0.9.139 + A 10.0.9.140 + A 10.0.9.141 + A 10.0.9.142 + A 10.0.9.143 + A 10.0.9.144 + A 10.0.9.145 + A 10.0.9.146 + A 10.0.9.147 + A 10.0.9.148 + A 10.0.9.149 + A 10.0.9.150 + A 10.0.9.151 + A 10.0.9.152 + A 10.0.9.153 + A 10.0.9.154 + A 10.0.9.155 + A 10.0.9.156 + A 10.0.9.157 + A 10.0.9.158 + A 10.0.9.159 + A 10.0.9.160 + A 10.0.9.161 + A 10.0.9.162 + A 10.0.9.163 + A 10.0.9.164 + A 10.0.9.165 + A 10.0.9.166 + A 10.0.9.167 + A 10.0.9.168 + A 10.0.9.169 + A 10.0.9.170 + A 10.0.9.171 + A 10.0.9.172 + A 10.0.9.173 + A 10.0.9.174 + A 10.0.9.175 + A 10.0.9.176 + A 10.0.9.177 + A 10.0.9.178 + A 10.0.9.179 + A 10.0.9.180 + A 10.0.9.181 + A 10.0.9.182 + A 10.0.9.183 + A 10.0.9.184 + A 10.0.9.185 + A 10.0.9.186 + A 10.0.9.187 + A 10.0.9.188 + A 10.0.9.189 + A 10.0.9.190 + A 10.0.9.191 + A 10.0.9.192 + A 10.0.9.193 + A 10.0.9.194 + A 10.0.9.195 + A 10.0.9.196 + A 10.0.9.197 + A 10.0.9.198 + A 10.0.9.199 + A 10.0.9.200 + A 10.0.9.201 + A 10.0.9.202 + A 10.0.9.203 + A 10.0.9.204 + A 10.0.9.205 + A 10.0.9.206 + A 10.0.9.207 + A 10.0.9.208 + A 10.0.9.209 + A 10.0.9.210 + A 10.0.9.211 + A 10.0.9.212 + A 10.0.9.213 + A 10.0.9.214 + A 10.0.9.215 + A 10.0.9.216 + A 10.0.9.217 + A 10.0.9.218 + A 10.0.9.219 + A 10.0.9.220 + A 10.0.9.221 + A 10.0.9.222 + A 10.0.9.223 + A 10.0.9.224 + A 10.0.9.225 + A 10.0.9.226 + A 10.0.9.227 + A 10.0.9.228 + A 10.0.9.229 + A 10.0.9.230 + A 10.0.9.231 + A 10.0.9.232 + A 10.0.9.233 + A 10.0.9.234 + A 10.0.9.235 + A 10.0.9.236 + A 10.0.9.237 + A 10.0.9.238 + A 10.0.9.239 + A 10.0.9.240 + A 10.0.9.241 + A 10.0.9.242 + A 10.0.9.243 + A 10.0.9.244 + A 10.0.9.245 + A 10.0.9.246 + A 10.0.9.247 + A 10.0.9.248 + A 10.0.9.249 + A 10.0.9.250 + A 10.0.9.251 + A 10.0.9.252 + A 10.0.9.253 + A 10.0.9.254 + A 10.0.9.255 + A 10.0.10.0 + A 10.0.10.1 + A 10.0.10.2 + A 10.0.10.3 + A 10.0.10.4 + A 10.0.10.5 + A 10.0.10.6 + A 10.0.10.7 + A 10.0.10.8 + A 10.0.10.9 + A 10.0.10.10 + A 10.0.10.11 + A 10.0.10.12 + A 10.0.10.13 + A 10.0.10.14 + A 10.0.10.15 + A 10.0.10.16 + A 10.0.10.17 + A 10.0.10.18 + A 10.0.10.19 + A 10.0.10.20 + A 10.0.10.21 + A 10.0.10.22 + A 10.0.10.23 + A 10.0.10.24 + A 10.0.10.25 + A 10.0.10.26 + A 10.0.10.27 + A 10.0.10.28 + A 10.0.10.29 + A 10.0.10.30 + A 10.0.10.31 + A 10.0.10.32 + A 10.0.10.33 + A 10.0.10.34 + A 10.0.10.35 + A 10.0.10.36 + A 10.0.10.37 + A 10.0.10.38 + A 10.0.10.39 + A 10.0.10.40 + A 10.0.10.41 + A 10.0.10.42 + A 10.0.10.43 + A 10.0.10.44 + A 10.0.10.45 + A 10.0.10.46 + A 10.0.10.47 + A 10.0.10.48 + A 10.0.10.49 + A 10.0.10.50 + A 10.0.10.51 + A 10.0.10.52 + A 10.0.10.53 + A 10.0.10.54 + A 10.0.10.55 + A 10.0.10.56 + A 10.0.10.57 + A 10.0.10.58 + A 10.0.10.59 + A 10.0.10.60 + A 10.0.10.61 + A 10.0.10.62 + A 10.0.10.63 + A 10.0.10.64 + A 10.0.10.65 + A 10.0.10.66 + A 10.0.10.67 + A 10.0.10.68 + A 10.0.10.69 + A 10.0.10.70 + A 10.0.10.71 + A 10.0.10.72 + A 10.0.10.73 + A 10.0.10.74 + A 10.0.10.75 + A 10.0.10.76 + A 10.0.10.77 + A 10.0.10.78 + A 10.0.10.79 + A 10.0.10.80 + A 10.0.10.81 + A 10.0.10.82 + A 10.0.10.83 + A 10.0.10.84 + A 10.0.10.85 + A 10.0.10.86 + A 10.0.10.87 + A 10.0.10.88 + A 10.0.10.89 + A 10.0.10.90 + A 10.0.10.91 + A 10.0.10.92 + A 10.0.10.93 + A 10.0.10.94 + A 10.0.10.95 + A 10.0.10.96 + A 10.0.10.97 + A 10.0.10.98 + A 10.0.10.99 + A 10.0.10.100 + A 10.0.10.101 + A 10.0.10.102 + A 10.0.10.103 + A 10.0.10.104 + A 10.0.10.105 + A 10.0.10.106 + A 10.0.10.107 + A 10.0.10.108 + A 10.0.10.109 + A 10.0.10.110 + A 10.0.10.111 + A 10.0.10.112 + A 10.0.10.113 + A 10.0.10.114 + A 10.0.10.115 + A 10.0.10.116 + A 10.0.10.117 + A 10.0.10.118 + A 10.0.10.119 + A 10.0.10.120 + A 10.0.10.121 + A 10.0.10.122 + A 10.0.10.123 + A 10.0.10.124 + A 10.0.10.125 + A 10.0.10.126 + A 10.0.10.127 + A 10.0.10.128 + A 10.0.10.129 + A 10.0.10.130 + A 10.0.10.131 + A 10.0.10.132 + A 10.0.10.133 + A 10.0.10.134 + A 10.0.10.135 + A 10.0.10.136 + A 10.0.10.137 + A 10.0.10.138 + A 10.0.10.139 + A 10.0.10.140 + A 10.0.10.141 + A 10.0.10.142 + A 10.0.10.143 + A 10.0.10.144 + A 10.0.10.145 + A 10.0.10.146 + A 10.0.10.147 + A 10.0.10.148 + A 10.0.10.149 + A 10.0.10.150 + A 10.0.10.151 + A 10.0.10.152 + A 10.0.10.153 + A 10.0.10.154 + A 10.0.10.155 + A 10.0.10.156 + A 10.0.10.157 + A 10.0.10.158 + A 10.0.10.159 + A 10.0.10.160 + A 10.0.10.161 + A 10.0.10.162 + A 10.0.10.163 + A 10.0.10.164 + A 10.0.10.165 + A 10.0.10.166 + A 10.0.10.167 + A 10.0.10.168 + A 10.0.10.169 + A 10.0.10.170 + A 10.0.10.171 + A 10.0.10.172 + A 10.0.10.173 + A 10.0.10.174 + A 10.0.10.175 + A 10.0.10.176 + A 10.0.10.177 + A 10.0.10.178 + A 10.0.10.179 + A 10.0.10.180 + A 10.0.10.181 + A 10.0.10.182 + A 10.0.10.183 + A 10.0.10.184 + A 10.0.10.185 + A 10.0.10.186 + A 10.0.10.187 + A 10.0.10.188 + A 10.0.10.189 + A 10.0.10.190 + A 10.0.10.191 + A 10.0.10.192 + A 10.0.10.193 + A 10.0.10.194 + A 10.0.10.195 + A 10.0.10.196 + A 10.0.10.197 + A 10.0.10.198 + A 10.0.10.199 + A 10.0.10.200 + A 10.0.10.201 + A 10.0.10.202 + A 10.0.10.203 + A 10.0.10.204 + A 10.0.10.205 + A 10.0.10.206 + A 10.0.10.207 + A 10.0.10.208 + A 10.0.10.209 + A 10.0.10.210 + A 10.0.10.211 + A 10.0.10.212 + A 10.0.10.213 + A 10.0.10.214 + A 10.0.10.215 + A 10.0.10.216 + A 10.0.10.217 + A 10.0.10.218 + A 10.0.10.219 + A 10.0.10.220 + A 10.0.10.221 + A 10.0.10.222 + A 10.0.10.223 + A 10.0.10.224 + A 10.0.10.225 + A 10.0.10.226 + A 10.0.10.227 + A 10.0.10.228 + A 10.0.10.229 + A 10.0.10.230 + A 10.0.10.231 + A 10.0.10.232 + A 10.0.10.233 + A 10.0.10.234 + A 10.0.10.235 + A 10.0.10.236 + A 10.0.10.237 + A 10.0.10.238 + A 10.0.10.239 + A 10.0.10.240 + A 10.0.10.241 + A 10.0.10.242 + A 10.0.10.243 + A 10.0.10.244 + A 10.0.10.245 + A 10.0.10.246 + A 10.0.10.247 + A 10.0.10.248 + A 10.0.10.249 + A 10.0.10.250 + A 10.0.10.251 + A 10.0.10.252 + A 10.0.10.253 + A 10.0.10.254 + A 10.0.10.255 + A 10.0.11.0 + A 10.0.11.1 + A 10.0.11.2 + A 10.0.11.3 + A 10.0.11.4 + A 10.0.11.5 + A 10.0.11.6 + A 10.0.11.7 + A 10.0.11.8 + A 10.0.11.9 + A 10.0.11.10 + A 10.0.11.11 + A 10.0.11.12 + A 10.0.11.13 + A 10.0.11.14 + A 10.0.11.15 + A 10.0.11.16 + A 10.0.11.17 + A 10.0.11.18 + A 10.0.11.19 + A 10.0.11.20 + A 10.0.11.21 + A 10.0.11.22 + A 10.0.11.23 + A 10.0.11.24 + A 10.0.11.25 + A 10.0.11.26 + A 10.0.11.27 + A 10.0.11.28 + A 10.0.11.29 + A 10.0.11.30 + A 10.0.11.31 + A 10.0.11.32 + A 10.0.11.33 + A 10.0.11.34 + A 10.0.11.35 + A 10.0.11.36 + A 10.0.11.37 + A 10.0.11.38 + A 10.0.11.39 + A 10.0.11.40 + A 10.0.11.41 + A 10.0.11.42 + A 10.0.11.43 + A 10.0.11.44 + A 10.0.11.45 + A 10.0.11.46 + A 10.0.11.47 + A 10.0.11.48 + A 10.0.11.49 + A 10.0.11.50 + A 10.0.11.51 + A 10.0.11.52 + A 10.0.11.53 + A 10.0.11.54 + A 10.0.11.55 + A 10.0.11.56 + A 10.0.11.57 + A 10.0.11.58 + A 10.0.11.59 + A 10.0.11.60 + A 10.0.11.61 + A 10.0.11.62 + A 10.0.11.63 + A 10.0.11.64 + A 10.0.11.65 + A 10.0.11.66 + A 10.0.11.67 + A 10.0.11.68 + A 10.0.11.69 + A 10.0.11.70 + A 10.0.11.71 + A 10.0.11.72 + A 10.0.11.73 + A 10.0.11.74 + A 10.0.11.75 + A 10.0.11.76 + A 10.0.11.77 + A 10.0.11.78 + A 10.0.11.79 + A 10.0.11.80 + A 10.0.11.81 + A 10.0.11.82 + A 10.0.11.83 + A 10.0.11.84 + A 10.0.11.85 + A 10.0.11.86 + A 10.0.11.87 + A 10.0.11.88 + A 10.0.11.89 + A 10.0.11.90 + A 10.0.11.91 + A 10.0.11.92 + A 10.0.11.93 + A 10.0.11.94 + A 10.0.11.95 + A 10.0.11.96 + A 10.0.11.97 + A 10.0.11.98 + A 10.0.11.99 + A 10.0.11.100 + A 10.0.11.101 + A 10.0.11.102 + A 10.0.11.103 + A 10.0.11.104 + A 10.0.11.105 + A 10.0.11.106 + A 10.0.11.107 + A 10.0.11.108 + A 10.0.11.109 + A 10.0.11.110 + A 10.0.11.111 + A 10.0.11.112 + A 10.0.11.113 + A 10.0.11.114 + A 10.0.11.115 + A 10.0.11.116 + A 10.0.11.117 + A 10.0.11.118 + A 10.0.11.119 + A 10.0.11.120 + A 10.0.11.121 + A 10.0.11.122 + A 10.0.11.123 + A 10.0.11.124 + A 10.0.11.125 + A 10.0.11.126 + A 10.0.11.127 + A 10.0.11.128 + A 10.0.11.129 + A 10.0.11.130 + A 10.0.11.131 + A 10.0.11.132 + A 10.0.11.133 + A 10.0.11.134 + A 10.0.11.135 + A 10.0.11.136 + A 10.0.11.137 + A 10.0.11.138 + A 10.0.11.139 + A 10.0.11.140 + A 10.0.11.141 + A 10.0.11.142 + A 10.0.11.143 + A 10.0.11.144 + A 10.0.11.145 + A 10.0.11.146 + A 10.0.11.147 + A 10.0.11.148 + A 10.0.11.149 + A 10.0.11.150 + A 10.0.11.151 + A 10.0.11.152 + A 10.0.11.153 + A 10.0.11.154 + A 10.0.11.155 + A 10.0.11.156 + A 10.0.11.157 + A 10.0.11.158 + A 10.0.11.159 + A 10.0.11.160 + A 10.0.11.161 + A 10.0.11.162 + A 10.0.11.163 + A 10.0.11.164 + A 10.0.11.165 + A 10.0.11.166 + A 10.0.11.167 + A 10.0.11.168 + A 10.0.11.169 + A 10.0.11.170 + A 10.0.11.171 + A 10.0.11.172 + A 10.0.11.173 + A 10.0.11.174 + A 10.0.11.175 + A 10.0.11.176 + A 10.0.11.177 + A 10.0.11.178 + A 10.0.11.179 + A 10.0.11.180 + A 10.0.11.181 + A 10.0.11.182 + A 10.0.11.183 + A 10.0.11.184 + A 10.0.11.185 + A 10.0.11.186 + A 10.0.11.187 + A 10.0.11.188 + A 10.0.11.189 + A 10.0.11.190 + A 10.0.11.191 + A 10.0.11.192 + A 10.0.11.193 + A 10.0.11.194 + A 10.0.11.195 + A 10.0.11.196 + A 10.0.11.197 + A 10.0.11.198 + A 10.0.11.199 + A 10.0.11.200 + A 10.0.11.201 + A 10.0.11.202 + A 10.0.11.203 + A 10.0.11.204 + A 10.0.11.205 + A 10.0.11.206 + A 10.0.11.207 + A 10.0.11.208 + A 10.0.11.209 + A 10.0.11.210 + A 10.0.11.211 + A 10.0.11.212 + A 10.0.11.213 + A 10.0.11.214 + A 10.0.11.215 + A 10.0.11.216 + A 10.0.11.217 + A 10.0.11.218 + A 10.0.11.219 + A 10.0.11.220 + A 10.0.11.221 + A 10.0.11.222 + A 10.0.11.223 + A 10.0.11.224 + A 10.0.11.225 + A 10.0.11.226 + A 10.0.11.227 + A 10.0.11.228 + A 10.0.11.229 + A 10.0.11.230 + A 10.0.11.231 + A 10.0.11.232 + A 10.0.11.233 + A 10.0.11.234 + A 10.0.11.235 + A 10.0.11.236 + A 10.0.11.237 + A 10.0.11.238 + A 10.0.11.239 + A 10.0.11.240 + A 10.0.11.241 + A 10.0.11.242 + A 10.0.11.243 + A 10.0.11.244 + A 10.0.11.245 + A 10.0.11.246 + A 10.0.11.247 + A 10.0.11.248 + A 10.0.11.249 + A 10.0.11.250 + A 10.0.11.251 + A 10.0.11.252 + A 10.0.11.253 + A 10.0.11.254 + A 10.0.11.255 + A 10.0.12.0 + A 10.0.12.1 + A 10.0.12.2 + A 10.0.12.3 + A 10.0.12.4 + A 10.0.12.5 + A 10.0.12.6 + A 10.0.12.7 + A 10.0.12.8 + A 10.0.12.9 + A 10.0.12.10 + A 10.0.12.11 + A 10.0.12.12 + A 10.0.12.13 + A 10.0.12.14 + A 10.0.12.15 + A 10.0.12.16 + A 10.0.12.17 + A 10.0.12.18 + A 10.0.12.19 + A 10.0.12.20 + A 10.0.12.21 + A 10.0.12.22 + A 10.0.12.23 + A 10.0.12.24 + A 10.0.12.25 + A 10.0.12.26 + A 10.0.12.27 + A 10.0.12.28 + A 10.0.12.29 + A 10.0.12.30 + A 10.0.12.31 + A 10.0.12.32 + A 10.0.12.33 + A 10.0.12.34 + A 10.0.12.35 + A 10.0.12.36 + A 10.0.12.37 + A 10.0.12.38 + A 10.0.12.39 + A 10.0.12.40 + A 10.0.12.41 + A 10.0.12.42 + A 10.0.12.43 + A 10.0.12.44 + A 10.0.12.45 + A 10.0.12.46 + A 10.0.12.47 + A 10.0.12.48 + A 10.0.12.49 + A 10.0.12.50 + A 10.0.12.51 + A 10.0.12.52 + A 10.0.12.53 + A 10.0.12.54 + A 10.0.12.55 + A 10.0.12.56 + A 10.0.12.57 + A 10.0.12.58 + A 10.0.12.59 + A 10.0.12.60 + A 10.0.12.61 + A 10.0.12.62 + A 10.0.12.63 + A 10.0.12.64 + A 10.0.12.65 + A 10.0.12.66 + A 10.0.12.67 + A 10.0.12.68 + A 10.0.12.69 + A 10.0.12.70 + A 10.0.12.71 + A 10.0.12.72 + A 10.0.12.73 + A 10.0.12.74 + A 10.0.12.75 + A 10.0.12.76 + A 10.0.12.77 + A 10.0.12.78 + A 10.0.12.79 + A 10.0.12.80 + A 10.0.12.81 + A 10.0.12.82 + A 10.0.12.83 + A 10.0.12.84 + A 10.0.12.85 + A 10.0.12.86 + A 10.0.12.87 + A 10.0.12.88 + A 10.0.12.89 + A 10.0.12.90 + A 10.0.12.91 + A 10.0.12.92 + A 10.0.12.93 + A 10.0.12.94 + A 10.0.12.95 + A 10.0.12.96 + A 10.0.12.97 + A 10.0.12.98 + A 10.0.12.99 + A 10.0.12.100 + A 10.0.12.101 + A 10.0.12.102 + A 10.0.12.103 + A 10.0.12.104 + A 10.0.12.105 + A 10.0.12.106 + A 10.0.12.107 + A 10.0.12.108 + A 10.0.12.109 + A 10.0.12.110 + A 10.0.12.111 + A 10.0.12.112 + A 10.0.12.113 + A 10.0.12.114 + A 10.0.12.115 + A 10.0.12.116 + A 10.0.12.117 + A 10.0.12.118 + A 10.0.12.119 + A 10.0.12.120 + A 10.0.12.121 + A 10.0.12.122 + A 10.0.12.123 + A 10.0.12.124 + A 10.0.12.125 + A 10.0.12.126 + A 10.0.12.127 + A 10.0.12.128 + A 10.0.12.129 + A 10.0.12.130 + A 10.0.12.131 + A 10.0.12.132 + A 10.0.12.133 + A 10.0.12.134 + A 10.0.12.135 + A 10.0.12.136 + A 10.0.12.137 + A 10.0.12.138 + A 10.0.12.139 + A 10.0.12.140 + A 10.0.12.141 + A 10.0.12.142 + A 10.0.12.143 + A 10.0.12.144 + A 10.0.12.145 + A 10.0.12.146 + A 10.0.12.147 + A 10.0.12.148 + A 10.0.12.149 + A 10.0.12.150 + A 10.0.12.151 + A 10.0.12.152 + A 10.0.12.153 + A 10.0.12.154 + A 10.0.12.155 + A 10.0.12.156 + A 10.0.12.157 + A 10.0.12.158 + A 10.0.12.159 + A 10.0.12.160 + A 10.0.12.161 + A 10.0.12.162 + A 10.0.12.163 + A 10.0.12.164 + A 10.0.12.165 + A 10.0.12.166 + A 10.0.12.167 + A 10.0.12.168 + A 10.0.12.169 + A 10.0.12.170 + A 10.0.12.171 + A 10.0.12.172 + A 10.0.12.173 + A 10.0.12.174 + A 10.0.12.175 + A 10.0.12.176 + A 10.0.12.177 + A 10.0.12.178 + A 10.0.12.179 + A 10.0.12.180 + A 10.0.12.181 + A 10.0.12.182 + A 10.0.12.183 + A 10.0.12.184 + A 10.0.12.185 + A 10.0.12.186 + A 10.0.12.187 + A 10.0.12.188 + A 10.0.12.189 + A 10.0.12.190 + A 10.0.12.191 + A 10.0.12.192 + A 10.0.12.193 + A 10.0.12.194 + A 10.0.12.195 + A 10.0.12.196 + A 10.0.12.197 + A 10.0.12.198 + A 10.0.12.199 + A 10.0.12.200 + A 10.0.12.201 + A 10.0.12.202 + A 10.0.12.203 + A 10.0.12.204 + A 10.0.12.205 + A 10.0.12.206 + A 10.0.12.207 + A 10.0.12.208 + A 10.0.12.209 + A 10.0.12.210 + A 10.0.12.211 + A 10.0.12.212 + A 10.0.12.213 + A 10.0.12.214 + A 10.0.12.215 + A 10.0.12.216 + A 10.0.12.217 + A 10.0.12.218 + A 10.0.12.219 + A 10.0.12.220 + A 10.0.12.221 + A 10.0.12.222 + A 10.0.12.223 + A 10.0.12.224 + A 10.0.12.225 + A 10.0.12.226 + A 10.0.12.227 + A 10.0.12.228 + A 10.0.12.229 + A 10.0.12.230 + A 10.0.12.231 + A 10.0.12.232 + A 10.0.12.233 + A 10.0.12.234 + A 10.0.12.235 + A 10.0.12.236 + A 10.0.12.237 + A 10.0.12.238 + A 10.0.12.239 + A 10.0.12.240 + A 10.0.12.241 + A 10.0.12.242 + A 10.0.12.243 + A 10.0.12.244 + A 10.0.12.245 + A 10.0.12.246 + A 10.0.12.247 + A 10.0.12.248 + A 10.0.12.249 + A 10.0.12.250 + A 10.0.12.251 + A 10.0.12.252 + A 10.0.12.253 + A 10.0.12.254 + A 10.0.12.255 + A 10.0.13.0 + A 10.0.13.1 + A 10.0.13.2 + A 10.0.13.3 + A 10.0.13.4 + A 10.0.13.5 + A 10.0.13.6 + A 10.0.13.7 + A 10.0.13.8 + A 10.0.13.9 + A 10.0.13.10 + A 10.0.13.11 + A 10.0.13.12 + A 10.0.13.13 + A 10.0.13.14 + A 10.0.13.15 + A 10.0.13.16 + A 10.0.13.17 + A 10.0.13.18 + A 10.0.13.19 + A 10.0.13.20 + A 10.0.13.21 + A 10.0.13.22 + A 10.0.13.23 + A 10.0.13.24 + A 10.0.13.25 + A 10.0.13.26 + A 10.0.13.27 + A 10.0.13.28 + A 10.0.13.29 + A 10.0.13.30 + A 10.0.13.31 + A 10.0.13.32 + A 10.0.13.33 + A 10.0.13.34 + A 10.0.13.35 + A 10.0.13.36 + A 10.0.13.37 + A 10.0.13.38 + A 10.0.13.39 + A 10.0.13.40 + A 10.0.13.41 + A 10.0.13.42 + A 10.0.13.43 + A 10.0.13.44 + A 10.0.13.45 + A 10.0.13.46 + A 10.0.13.47 + A 10.0.13.48 + A 10.0.13.49 + A 10.0.13.50 + A 10.0.13.51 + A 10.0.13.52 + A 10.0.13.53 + A 10.0.13.54 + A 10.0.13.55 + A 10.0.13.56 + A 10.0.13.57 + A 10.0.13.58 + A 10.0.13.59 + A 10.0.13.60 + A 10.0.13.61 + A 10.0.13.62 + A 10.0.13.63 + A 10.0.13.64 + A 10.0.13.65 + A 10.0.13.66 + A 10.0.13.67 + A 10.0.13.68 + A 10.0.13.69 + A 10.0.13.70 + A 10.0.13.71 + A 10.0.13.72 + A 10.0.13.73 + A 10.0.13.74 + A 10.0.13.75 + A 10.0.13.76 + A 10.0.13.77 + A 10.0.13.78 + A 10.0.13.79 + A 10.0.13.80 + A 10.0.13.81 + A 10.0.13.82 + A 10.0.13.83 + A 10.0.13.84 + A 10.0.13.85 + A 10.0.13.86 + A 10.0.13.87 + A 10.0.13.88 + A 10.0.13.89 + A 10.0.13.90 + A 10.0.13.91 + A 10.0.13.92 + A 10.0.13.93 + A 10.0.13.94 + A 10.0.13.95 + A 10.0.13.96 + A 10.0.13.97 + A 10.0.13.98 + A 10.0.13.99 + A 10.0.13.100 + A 10.0.13.101 + A 10.0.13.102 + A 10.0.13.103 + A 10.0.13.104 + A 10.0.13.105 + A 10.0.13.106 + A 10.0.13.107 + A 10.0.13.108 + A 10.0.13.109 + A 10.0.13.110 + A 10.0.13.111 + A 10.0.13.112 + A 10.0.13.113 + A 10.0.13.114 + A 10.0.13.115 + A 10.0.13.116 + A 10.0.13.117 + A 10.0.13.118 + A 10.0.13.119 + A 10.0.13.120 + A 10.0.13.121 + A 10.0.13.122 + A 10.0.13.123 + A 10.0.13.124 + A 10.0.13.125 + A 10.0.13.126 + A 10.0.13.127 + A 10.0.13.128 + A 10.0.13.129 + A 10.0.13.130 + A 10.0.13.131 + A 10.0.13.132 + A 10.0.13.133 + A 10.0.13.134 + A 10.0.13.135 + A 10.0.13.136 + A 10.0.13.137 + A 10.0.13.138 + A 10.0.13.139 + A 10.0.13.140 + A 10.0.13.141 + A 10.0.13.142 + A 10.0.13.143 + A 10.0.13.144 + A 10.0.13.145 + A 10.0.13.146 + A 10.0.13.147 + A 10.0.13.148 + A 10.0.13.149 + A 10.0.13.150 + A 10.0.13.151 + A 10.0.13.152 + A 10.0.13.153 + A 10.0.13.154 + A 10.0.13.155 + A 10.0.13.156 + A 10.0.13.157 + A 10.0.13.158 + A 10.0.13.159 + A 10.0.13.160 + A 10.0.13.161 + A 10.0.13.162 + A 10.0.13.163 + A 10.0.13.164 + A 10.0.13.165 + A 10.0.13.166 + A 10.0.13.167 + A 10.0.13.168 + A 10.0.13.169 + A 10.0.13.170 + A 10.0.13.171 + A 10.0.13.172 + A 10.0.13.173 + A 10.0.13.174 + A 10.0.13.175 + A 10.0.13.176 + A 10.0.13.177 + A 10.0.13.178 + A 10.0.13.179 + A 10.0.13.180 + A 10.0.13.181 + A 10.0.13.182 + A 10.0.13.183 + A 10.0.13.184 + A 10.0.13.185 + A 10.0.13.186 + A 10.0.13.187 + A 10.0.13.188 + A 10.0.13.189 + A 10.0.13.190 + A 10.0.13.191 + A 10.0.13.192 + A 10.0.13.193 + A 10.0.13.194 + A 10.0.13.195 + A 10.0.13.196 + A 10.0.13.197 + A 10.0.13.198 + A 10.0.13.199 + A 10.0.13.200 + A 10.0.13.201 + A 10.0.13.202 + A 10.0.13.203 + A 10.0.13.204 + A 10.0.13.205 + A 10.0.13.206 + A 10.0.13.207 + A 10.0.13.208 + A 10.0.13.209 + A 10.0.13.210 + A 10.0.13.211 + A 10.0.13.212 + A 10.0.13.213 + A 10.0.13.214 + A 10.0.13.215 + A 10.0.13.216 + A 10.0.13.217 + A 10.0.13.218 + A 10.0.13.219 + A 10.0.13.220 + A 10.0.13.221 + A 10.0.13.222 + A 10.0.13.223 + A 10.0.13.224 + A 10.0.13.225 + A 10.0.13.226 + A 10.0.13.227 + A 10.0.13.228 + A 10.0.13.229 + A 10.0.13.230 + A 10.0.13.231 + A 10.0.13.232 + A 10.0.13.233 + A 10.0.13.234 + A 10.0.13.235 + A 10.0.13.236 + A 10.0.13.237 + A 10.0.13.238 + A 10.0.13.239 + A 10.0.13.240 + A 10.0.13.241 + A 10.0.13.242 + A 10.0.13.243 + A 10.0.13.244 + A 10.0.13.245 + A 10.0.13.246 + A 10.0.13.247 + A 10.0.13.248 + A 10.0.13.249 + A 10.0.13.250 + A 10.0.13.251 + A 10.0.13.252 + A 10.0.13.253 + A 10.0.13.254 + A 10.0.13.255 + A 10.0.14.0 + A 10.0.14.1 + A 10.0.14.2 + A 10.0.14.3 + A 10.0.14.4 + A 10.0.14.5 + A 10.0.14.6 + A 10.0.14.7 + A 10.0.14.8 + A 10.0.14.9 + A 10.0.14.10 + A 10.0.14.11 + A 10.0.14.12 + A 10.0.14.13 + A 10.0.14.14 + A 10.0.14.15 + A 10.0.14.16 + A 10.0.14.17 + A 10.0.14.18 + A 10.0.14.19 + A 10.0.14.20 + A 10.0.14.21 + A 10.0.14.22 + A 10.0.14.23 + A 10.0.14.24 + A 10.0.14.25 + A 10.0.14.26 + A 10.0.14.27 + A 10.0.14.28 + A 10.0.14.29 + A 10.0.14.30 + A 10.0.14.31 + A 10.0.14.32 + A 10.0.14.33 + A 10.0.14.34 + A 10.0.14.35 + A 10.0.14.36 + A 10.0.14.37 + A 10.0.14.38 + A 10.0.14.39 + A 10.0.14.40 + A 10.0.14.41 + A 10.0.14.42 + A 10.0.14.43 + A 10.0.14.44 + A 10.0.14.45 + A 10.0.14.46 + A 10.0.14.47 + A 10.0.14.48 + A 10.0.14.49 + A 10.0.14.50 + A 10.0.14.51 + A 10.0.14.52 + A 10.0.14.53 + A 10.0.14.54 + A 10.0.14.55 + A 10.0.14.56 + A 10.0.14.57 + A 10.0.14.58 + A 10.0.14.59 + A 10.0.14.60 + A 10.0.14.61 + A 10.0.14.62 + A 10.0.14.63 + A 10.0.14.64 + A 10.0.14.65 + A 10.0.14.66 + A 10.0.14.67 + A 10.0.14.68 + A 10.0.14.69 + A 10.0.14.70 + A 10.0.14.71 + A 10.0.14.72 + A 10.0.14.73 + A 10.0.14.74 + A 10.0.14.75 + A 10.0.14.76 + A 10.0.14.77 + A 10.0.14.78 + A 10.0.14.79 + A 10.0.14.80 + A 10.0.14.81 + A 10.0.14.82 + A 10.0.14.83 + A 10.0.14.84 + A 10.0.14.85 + A 10.0.14.86 + A 10.0.14.87 + A 10.0.14.88 + A 10.0.14.89 + A 10.0.14.90 + A 10.0.14.91 + A 10.0.14.92 + A 10.0.14.93 + A 10.0.14.94 + A 10.0.14.95 + A 10.0.14.96 + A 10.0.14.97 + A 10.0.14.98 + A 10.0.14.99 + A 10.0.14.100 + A 10.0.14.101 + A 10.0.14.102 + A 10.0.14.103 + A 10.0.14.104 + A 10.0.14.105 + A 10.0.14.106 + A 10.0.14.107 + A 10.0.14.108 + A 10.0.14.109 + A 10.0.14.110 + A 10.0.14.111 + A 10.0.14.112 + A 10.0.14.113 + A 10.0.14.114 + A 10.0.14.115 + A 10.0.14.116 + A 10.0.14.117 + A 10.0.14.118 + A 10.0.14.119 + A 10.0.14.120 + A 10.0.14.121 + A 10.0.14.122 + A 10.0.14.123 + A 10.0.14.124 + A 10.0.14.125 + A 10.0.14.126 + A 10.0.14.127 + A 10.0.14.128 + A 10.0.14.129 + A 10.0.14.130 + A 10.0.14.131 + A 10.0.14.132 + A 10.0.14.133 + A 10.0.14.134 + A 10.0.14.135 + A 10.0.14.136 + A 10.0.14.137 + A 10.0.14.138 + A 10.0.14.139 + A 10.0.14.140 + A 10.0.14.141 + A 10.0.14.142 + A 10.0.14.143 + A 10.0.14.144 + A 10.0.14.145 + A 10.0.14.146 + A 10.0.14.147 + A 10.0.14.148 + A 10.0.14.149 + A 10.0.14.150 + A 10.0.14.151 + A 10.0.14.152 + A 10.0.14.153 + A 10.0.14.154 + A 10.0.14.155 + A 10.0.14.156 + A 10.0.14.157 + A 10.0.14.158 + A 10.0.14.159 + A 10.0.14.160 + A 10.0.14.161 + A 10.0.14.162 + A 10.0.14.163 + A 10.0.14.164 + A 10.0.14.165 + A 10.0.14.166 + A 10.0.14.167 + A 10.0.14.168 + A 10.0.14.169 + A 10.0.14.170 + A 10.0.14.171 + A 10.0.14.172 + A 10.0.14.173 + A 10.0.14.174 + A 10.0.14.175 + A 10.0.14.176 + A 10.0.14.177 + A 10.0.14.178 + A 10.0.14.179 + A 10.0.14.180 + A 10.0.14.181 + A 10.0.14.182 + A 10.0.14.183 + A 10.0.14.184 + A 10.0.14.185 + A 10.0.14.186 + A 10.0.14.187 + A 10.0.14.188 + A 10.0.14.189 + A 10.0.14.190 + A 10.0.14.191 + A 10.0.14.192 + A 10.0.14.193 + A 10.0.14.194 + A 10.0.14.195 + A 10.0.14.196 + A 10.0.14.197 + A 10.0.14.198 + A 10.0.14.199 + A 10.0.14.200 + A 10.0.14.201 + A 10.0.14.202 + A 10.0.14.203 + A 10.0.14.204 + A 10.0.14.205 + A 10.0.14.206 + A 10.0.14.207 + A 10.0.14.208 + A 10.0.14.209 + A 10.0.14.210 + A 10.0.14.211 + A 10.0.14.212 + A 10.0.14.213 + A 10.0.14.214 + A 10.0.14.215 + A 10.0.14.216 + A 10.0.14.217 + A 10.0.14.218 + A 10.0.14.219 + A 10.0.14.220 + A 10.0.14.221 + A 10.0.14.222 + A 10.0.14.223 + A 10.0.14.224 + A 10.0.14.225 + A 10.0.14.226 + A 10.0.14.227 + A 10.0.14.228 + A 10.0.14.229 + A 10.0.14.230 + A 10.0.14.231 + A 10.0.14.232 + A 10.0.14.233 + A 10.0.14.234 + A 10.0.14.235 + A 10.0.14.236 + A 10.0.14.237 + A 10.0.14.238 + A 10.0.14.239 + A 10.0.14.240 + A 10.0.14.241 + A 10.0.14.242 + A 10.0.14.243 + A 10.0.14.244 + A 10.0.14.245 + A 10.0.14.246 + A 10.0.14.247 + A 10.0.14.248 + A 10.0.14.249 + A 10.0.14.250 + A 10.0.14.251 + A 10.0.14.252 + A 10.0.14.253 + A 10.0.14.254 + A 10.0.14.255 + A 10.0.15.0 + A 10.0.15.1 + A 10.0.15.2 + A 10.0.15.3 + A 10.0.15.4 + A 10.0.15.5 + A 10.0.15.6 + A 10.0.15.7 + A 10.0.15.8 + A 10.0.15.9 + A 10.0.15.10 + A 10.0.15.11 + A 10.0.15.12 + A 10.0.15.13 + A 10.0.15.14 + A 10.0.15.15 + A 10.0.15.16 + A 10.0.15.17 + A 10.0.15.18 + A 10.0.15.19 + A 10.0.15.20 + A 10.0.15.21 + A 10.0.15.22 + A 10.0.15.23 + A 10.0.15.24 + A 10.0.15.25 + A 10.0.15.26 + A 10.0.15.27 + A 10.0.15.28 + A 10.0.15.29 + A 10.0.15.30 + A 10.0.15.31 + A 10.0.15.32 + A 10.0.15.33 + A 10.0.15.34 + A 10.0.15.35 + A 10.0.15.36 + A 10.0.15.37 + A 10.0.15.38 + A 10.0.15.39 + A 10.0.15.40 + A 10.0.15.41 + A 10.0.15.42 + A 10.0.15.43 + A 10.0.15.44 + A 10.0.15.45 + A 10.0.15.46 + A 10.0.15.47 + A 10.0.15.48 + A 10.0.15.49 + A 10.0.15.50 + A 10.0.15.51 + A 10.0.15.52 + A 10.0.15.53 + A 10.0.15.54 + A 10.0.15.55 + A 10.0.15.56 + A 10.0.15.57 + A 10.0.15.58 + A 10.0.15.59 + A 10.0.15.60 + A 10.0.15.61 + A 10.0.15.62 + A 10.0.15.63 + A 10.0.15.64 + A 10.0.15.65 + A 10.0.15.66 + A 10.0.15.67 + A 10.0.15.68 + A 10.0.15.69 + A 10.0.15.70 + A 10.0.15.71 + A 10.0.15.72 + A 10.0.15.73 + A 10.0.15.74 + A 10.0.15.75 + A 10.0.15.76 + A 10.0.15.77 + A 10.0.15.78 + A 10.0.15.79 + A 10.0.15.80 + A 10.0.15.81 + A 10.0.15.82 + A 10.0.15.83 + A 10.0.15.84 + A 10.0.15.85 + A 10.0.15.86 + A 10.0.15.87 + A 10.0.15.88 + A 10.0.15.89 + A 10.0.15.90 + A 10.0.15.91 + A 10.0.15.92 + A 10.0.15.93 + A 10.0.15.94 + A 10.0.15.95 + A 10.0.15.96 + A 10.0.15.97 + A 10.0.15.98 + A 10.0.15.99 + A 10.0.15.100 + A 10.0.15.101 + A 10.0.15.102 + A 10.0.15.103 + A 10.0.15.104 + A 10.0.15.105 + A 10.0.15.106 + A 10.0.15.107 + A 10.0.15.108 + A 10.0.15.109 + A 10.0.15.110 + A 10.0.15.111 + A 10.0.15.112 + A 10.0.15.113 + A 10.0.15.114 + A 10.0.15.115 + A 10.0.15.116 + A 10.0.15.117 + A 10.0.15.118 + A 10.0.15.119 + A 10.0.15.120 + A 10.0.15.121 + A 10.0.15.122 + A 10.0.15.123 + A 10.0.15.124 + A 10.0.15.125 + A 10.0.15.126 + A 10.0.15.127 + A 10.0.15.128 + A 10.0.15.129 + A 10.0.15.130 + A 10.0.15.131 + A 10.0.15.132 + A 10.0.15.133 + A 10.0.15.134 + A 10.0.15.135 + A 10.0.15.136 + A 10.0.15.137 + A 10.0.15.138 + A 10.0.15.139 + A 10.0.15.140 + A 10.0.15.141 + A 10.0.15.142 + A 10.0.15.143 + A 10.0.15.144 + A 10.0.15.145 + A 10.0.15.146 + A 10.0.15.147 + A 10.0.15.148 + A 10.0.15.149 + A 10.0.15.150 + A 10.0.15.151 + A 10.0.15.152 + A 10.0.15.153 + A 10.0.15.154 + A 10.0.15.155 + A 10.0.15.156 + A 10.0.15.157 + A 10.0.15.158 + A 10.0.15.159 + A 10.1.0.0 + A 10.1.0.1 + A 10.1.0.2 + A 10.1.0.3 + A 10.1.0.4 + A 10.1.0.5 + A 10.1.0.6 + A 10.1.0.7 + A 10.1.0.8 + A 10.1.0.9 + A 10.1.0.10 + A 10.1.0.11 + A 10.1.0.12 + A 10.1.0.13 + A 10.1.0.14 + A 10.1.0.15 + A 10.1.0.16 + A 10.1.0.17 + A 10.1.0.18 + A 10.1.0.19 + A 10.1.0.20 + A 10.1.0.21 + A 10.1.0.22 + A 10.1.0.23 + A 10.1.0.24 + A 10.1.0.25 + A 10.1.0.26 + A 10.1.0.27 + A 10.1.0.28 + A 10.1.0.29 + A 10.1.0.30 + A 10.1.0.31 + A 10.1.0.32 + A 10.1.0.33 + A 10.1.0.34 + A 10.1.0.35 + A 10.1.0.36 + A 10.1.0.37 + A 10.1.0.38 + A 10.1.0.39 + A 10.1.0.40 + A 10.1.0.41 + A 10.1.0.42 + A 10.1.0.43 + A 10.1.0.44 + A 10.1.0.45 + A 10.1.0.46 + A 10.1.0.47 + A 10.1.0.48 + A 10.1.0.49 + A 10.1.0.50 + A 10.1.0.51 + A 10.1.0.52 + A 10.1.0.53 + A 10.1.0.54 + A 10.1.0.55 + A 10.1.0.56 + A 10.1.0.57 + A 10.1.0.58 + A 10.1.0.59 + A 10.1.0.60 + A 10.1.0.61 + A 10.1.0.62 + A 10.1.0.63 + A 10.1.0.64 + A 10.1.0.65 + A 10.1.0.66 + A 10.1.0.67 + A 10.1.0.68 + A 10.1.0.69 + A 10.1.0.70 + A 10.1.0.71 + A 10.1.0.72 + A 10.1.0.73 + A 10.1.0.74 + A 10.1.0.75 + A 10.1.0.76 + A 10.1.0.77 + A 10.1.0.78 + A 10.1.0.79 + A 10.1.0.80 + A 10.1.0.81 + A 10.1.0.82 + A 10.1.0.83 + A 10.1.0.84 + A 10.1.0.85 + A 10.1.0.86 + A 10.1.0.87 + A 10.1.0.88 + A 10.1.0.89 + A 10.1.0.90 diff --git a/bin/tests/system/limits/ns1/named.conf b/bin/tests/system/limits/ns1/named.conf new file mode 100644 index 0000000..e8e439e --- /dev/null +++ b/bin/tests/system/limits/ns1/named.conf @@ -0,0 +1,42 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.14 2007/06/19 23:47:03 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify yes; +}; + +zone "." { + type master; + file "root.db"; +}; + +zone "example" { + type master; + file "example.db"; +}; diff --git a/bin/tests/system/limits/ns1/root.db b/bin/tests/system/limits/ns1/root.db new file mode 100644 index 0000000..635dfce --- /dev/null +++ b/bin/tests/system/limits/ns1/root.db @@ -0,0 +1,30 @@ +; 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. + +; $Id: root.db,v 1.9 2007/06/19 23:47:03 tbox Exp $ + +$TTL 300 +. IN SOA gson.nominum.com. a.root.servers.nil. ( + 2000042100 ; serial + 600 ; refresh + 600 ; retry + 1200 ; expire + 600 ; minimum + ) +. NS a.root-servers.nil. +a.root-servers.nil. A 10.53.0.1 + +example. NS ns1.example. +ns1.example. A 10.53.0.1 diff --git a/bin/tests/system/limits/tests.sh b/bin/tests/system/limits/tests.sh new file mode 100644 index 0000000..f2728d2 --- /dev/null +++ b/bin/tests/system/limits/tests.sh @@ -0,0 +1,60 @@ +#!/bin/sh +# +# 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. + +# $Id: tests.sh,v 1.17 2007/06/19 23:47:03 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +status=0 + +echo "I:1000 A records" +$DIG +tcp +norec 1000.example. @10.53.0.1 a -p 5300 > dig.out.1000 || status=1 +#dig 1000.example. @10.53.0.1 a -p 5300 > knowngood.dig.out.1000 +$PERL ../digcomp.pl knowngood.dig.out.1000 dig.out.1000 || status=1 + +echo "I:2000 A records" +$DIG +tcp +norec 2000.example. @10.53.0.1 a -p 5300 > dig.out.2000 || status=1 +#dig 2000.example. @10.53.0.1 a -p 5300 > knowngood.dig.out.2000 +$PERL ../digcomp.pl knowngood.dig.out.2000 dig.out.2000 || status=1 + +echo "I:3000 A records" +$DIG +tcp +norec 3000.example. @10.53.0.1 a -p 5300 > dig.out.3000 || status=1 +#dig 3000.example. @10.53.0.1 a -p 5300 > knowngood.dig.out.3000 +$PERL ../digcomp.pl knowngood.dig.out.3000 dig.out.3000 || status=1 + +echo "I:4000 A records" +$DIG +tcp +norec 4000.example. @10.53.0.1 a -p 5300 > dig.out.4000 || status=1 +#dig 4000.example. @10.53.0.1 a -p 5300 > knowngood.dig.out.4000 +$PERL ../digcomp.pl knowngood.dig.out.4000 dig.out.4000 || status=1 + +echo "I:exactly maximum rrset" +$DIG +tcp +norec a-maximum-rrset.example. @10.53.0.1 a -p 5300 > dig.out.a-maximum-rrset \ + || status=1 +#dig a-maximum-rrset.example. @10.53.0.1 a -p 5300 > knowngood.dig.out.a-maximum-rrset +$PERL ../digcomp.pl knowngood.dig.out.a-maximum-rrset dig.out.a-maximum-rrset || status=1 + +echo "I:exceed maximum rrset (5000 A records)" +$DIG +tcp +norec 5000.example. @10.53.0.1 a -p 5300 > dig.out.exceed || status=1 +# Look for truncation bit (tc). +grep 'flags: .*tc.*;' dig.out.exceed > /dev/null || { + echo "I:TC bit was not set" + status=1 +} + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/lwresd/Makefile.in b/bin/tests/system/lwresd/Makefile.in new file mode 100644 index 0000000..807349d --- /dev/null +++ b/bin/tests/system/lwresd/Makefile.in @@ -0,0 +1,56 @@ +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2000-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. + +# $Id: Makefile.in,v 1.19 2007/06/19 23:47:03 tbox Exp $ + +srcdir = @srcdir@ +VPATH = @srcdir@ +top_srcdir = @top_srcdir@ + +@BIND9_VERSION@ + +@BIND9_MAKE_INCLUDES@ + +CINCLUDES = ${LWRES_INCLUDES} ${ISC_INCLUDES} + +CDEFINES = +CWARNINGS = + +LWRESLIBS = ../../../../lib/lwres/liblwres.@A@ +ISCLIBS = ../../../../lib/isc/libisc.@A@ + +LWRESDEPLIBS = ../../../../lib/lwres/liblwres.@A@ +ISCDEPLIBS = ../../../../lib/isc/libisc.@A@ + +DEPLIBS = ${LWRESDEPLIBS} ${ISCDEPLIBS} + +LIBS = ${LWRESLIBS} ${ISCLIBS} @LIBS@ + +TARGETS = lwtest@EXEEXT@ + +OBJS = lwtest.@O@ + +SRCS = lwtest.c + +@BIND9_MAKE_RULES@ + +all: lwtest@EXEEXT@ + +lwtest@EXEEXT@: ${OBJS} ${DEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ ${OBJS} ${LIBS} + +clean distclean:: + rm -f ${TARGETS} + diff --git a/bin/tests/system/lwresd/clean.sh b/bin/tests/system/lwresd/clean.sh new file mode 100644 index 0000000..107a020 --- /dev/null +++ b/bin/tests/system/lwresd/clean.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# +# Copyright (C) 2008 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: clean.sh,v 1.1 2008/07/17 01:14:16 marka Exp $ + +# +# Clean up after lwresd tests. +# +rm -f */named.memstats diff --git a/bin/tests/system/lwresd/lwresd1/lwresd.conf b/bin/tests/system/lwresd/lwresd1/lwresd.conf new file mode 100644 index 0000000..272cab6 --- /dev/null +++ b/bin/tests/system/lwresd/lwresd1/lwresd.conf @@ -0,0 +1,34 @@ +/* + * 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. + */ + +/* $Id: lwresd.conf,v 1.8 2007/06/19 23:47:04 tbox Exp $ */ + +controls { /* empty */ }; + +options { + port 5300; + pid-file "lwresd.pid"; + forwarders {10.53.0.1;}; + forward only; +}; + +lwres { + listen-on {10.53.0.1 port 9210;}; + view "_default"; + search {example1.;}; + ndots 1; +}; diff --git a/bin/tests/system/lwresd/lwresd1/resolv.conf b/bin/tests/system/lwresd/lwresd1/resolv.conf new file mode 100644 index 0000000..1aa88c9 --- /dev/null +++ b/bin/tests/system/lwresd/lwresd1/resolv.conf @@ -0,0 +1,21 @@ +# 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. + +# $Id: resolv.conf,v 1.11 2007/06/19 23:47:04 tbox Exp $ + +nameserver 10.53.0.1 +lwserver 10.53.0.1 +search example1. +ndots 1 diff --git a/bin/tests/system/lwresd/lwtest.c b/bin/tests/system/lwresd/lwtest.c new file mode 100644 index 0000000..534e999 --- /dev/null +++ b/bin/tests/system/lwresd/lwtest.c @@ -0,0 +1,773 @@ +/* + * Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2000-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. + */ + +/* $Id: lwtest.c,v 1.32 2008/04/02 02:37:42 marka Exp $ */ + +#include <config.h> + +#include <assert.h> +#include <stdlib.h> + +#include <isc/net.h> +#include <isc/string.h> + +#include <lwres/lwres.h> +#include <lwres/netdb.h> +#include <lwres/net.h> + +/* + * XXX getnameinfo errors, which don't appear to be standard. + */ +#define ENI_NOSERVNAME 1 +#define ENI_NOHOSTNAME 2 +#define ENI_MEMORY 3 +#define ENI_SYSTEM 4 +#define ENI_FAMILY 5 +#define ENI_SALEN 6 +#define ENI_NOSOCKET 7 + +static int fails = 0; + +static void +CHECK(lwres_result_t val, const char *msg) { + if (val != 0) { + printf("I:%s returned %d\n", msg, val); + exit(1); + } +} + +static unsigned char TESTSTRING[] = + "This is a test. This is only a test. !!!"; + +static lwres_context_t *ctx; + +static void +test_noop(void) { + lwres_result_t ret; + lwres_lwpacket_t pkt, pkt2; + lwres_nooprequest_t nooprequest, *nooprequest2; + lwres_noopresponse_t noopresponse, *noopresponse2; + lwres_buffer_t b; + + pkt.pktflags = 0; + pkt.serial = 0x11223344; + pkt.recvlength = 0x55667788; + pkt.result = 0; + + nooprequest.datalength = strlen((char *)TESTSTRING); + nooprequest.data = TESTSTRING; + ret = lwres_nooprequest_render(ctx, &nooprequest, &pkt, &b); + CHECK(ret, "lwres_nooprequest_render"); + + /* + * Now, parse it into a new structure. + */ + lwres_buffer_first(&b); + ret = lwres_lwpacket_parseheader(&b, &pkt2); + CHECK(ret, "lwres_lwpacket_parseheader"); + + nooprequest2 = NULL; + ret = lwres_nooprequest_parse(ctx, &b, &pkt2, &nooprequest2); + CHECK(ret, "lwres_nooprequest_parse"); + + assert(nooprequest.datalength == nooprequest2->datalength); + assert(memcmp(nooprequest.data, nooprequest2->data, + nooprequest.datalength) == 0); + + lwres_nooprequest_free(ctx, &nooprequest2); + + lwres_context_freemem(ctx, b.base, b.length); + b.base = NULL; + b.length = 0; + + pkt.pktflags = 0; + pkt.serial = 0x11223344; + pkt.recvlength = 0x55667788; + pkt.result = 0xdeadbeef; + + noopresponse.datalength = strlen((char *)TESTSTRING); + noopresponse.data = TESTSTRING; + ret = lwres_noopresponse_render(ctx, &noopresponse, &pkt, &b); + CHECK(ret, "lwres_noopresponse_render"); + + /* + * Now, parse it into a new structure. + */ + lwres_buffer_first(&b); + ret = lwres_lwpacket_parseheader(&b, &pkt2); + CHECK(ret, "lwres_lwpacket_parseheader"); + + noopresponse2 = NULL; + ret = lwres_noopresponse_parse(ctx, &b, &pkt2, &noopresponse2); + CHECK(ret, "lwres_noopresponse_parse"); + + assert(noopresponse.datalength == noopresponse2->datalength); + assert(memcmp(noopresponse.data, noopresponse2->data, + noopresponse.datalength) == 0); + + lwres_noopresponse_free(ctx, &noopresponse2); + + lwres_context_freemem(ctx, b.base, b.length); + b.base = NULL; + b.length = 0; +} + +static void +test_gabn(const char *target, lwres_result_t expected, const char *address, + lwres_uint32_t af) +{ + lwres_gabnresponse_t *res; + unsigned char addrbuf[16]; + lwres_addr_t *addr; + char outbuf[64]; + unsigned int len; + lwres_result_t ret; + + res = NULL; + ret = lwres_getaddrsbyname(ctx, target, + LWRES_ADDRTYPE_V4 | LWRES_ADDRTYPE_V6, + &res); + if (ret != expected) { + printf("I:gabn(%s) failed: %d\n", target, ret); + if (res != NULL) + lwres_gabnresponse_free(ctx, &res); + fails++; + return; + } + if (ret == LWRES_R_SUCCESS) { + if (af == LWRES_ADDRTYPE_V4) { + len = 4; + ret = inet_pton(AF_INET, address, addrbuf); + assert(ret == 1); + } else { + len = 16; + ret = inet_pton(AF_INET6, address, addrbuf); + assert(ret == 1); + } + addr = LWRES_LIST_HEAD(res->addrs); + if (addr == NULL) { + printf("I:gabn(%s) returned empty list\n", target); + fails++; + return; + } + while (addr != NULL) { + if (addr->family != af || addr->length != len || + memcmp(addr->address, addrbuf, len) == 0) + break; + addr = LWRES_LIST_NEXT(addr, link); + } + if (addr == NULL) { + addr = LWRES_LIST_HEAD(res->addrs); + if (addr->family == LWRES_ADDRTYPE_V4) + (void)inet_ntop(AF_INET, addr->address, + outbuf, sizeof(outbuf)); + else + (void)inet_ntop(AF_INET6, addr->address, + outbuf, sizeof(outbuf)); + printf("I:gabn(%s) returned %s, expected %s\n", + target, outbuf, address); + fails++; + return; + } + } + if (res != NULL) + lwres_gabnresponse_free(ctx, &res); +} + +static void +test_gnba(const char *target, lwres_uint32_t af, lwres_result_t expected, + const char *name) +{ + lwres_gnbaresponse_t *res; + lwres_result_t ret; + unsigned char addrbuf[16]; + unsigned int len; + + if (af == LWRES_ADDRTYPE_V4) { + len = 4; + ret = inet_pton(AF_INET, target, addrbuf); + assert(ret == 1); + } else { + len = 16; + ret = inet_pton(AF_INET6, target, addrbuf); + assert(ret == 1); + } + + res = NULL; + ret = lwres_getnamebyaddr(ctx, af, len, addrbuf, &res); + if (ret != expected) { + printf("I:gnba(%s) failed: %d\n", target, ret); + if (res != NULL) + lwres_gnbaresponse_free(ctx, &res); + fails++; + return; + } + if (ret == LWRES_R_SUCCESS && strcasecmp(res->realname, name) != 0) { + printf("I:gnba(%s) returned %s, expected %s\n", + target, res->realname, name); + fails++; + return; + } + if (res != NULL) + lwres_gnbaresponse_free(ctx, &res); +} + +static void +test_gethostbyname(const char *name, const char *address) { + struct hostent *hp; + unsigned char addrbuf[16]; + int ret; + + hp = gethostbyname(name); + if (hp == NULL) { + if (address == NULL && h_errno == HOST_NOT_FOUND) + return; + else if (h_errno != HOST_NOT_FOUND) { + printf("I:gethostbyname(%s) failed: %s\n", + name, hstrerror(h_errno)); + fails++; + return; + } else { + printf("I:gethostbyname(%s) returned not found\n", + name); + fails++; + return; + } + } else { + ret = inet_pton(AF_INET, address, addrbuf); + assert(ret == 1); + if (memcmp(hp->h_addr_list[0], addrbuf, hp->h_length) != 0) { + char outbuf[16]; + (void)inet_ntop(AF_INET, hp->h_addr_list[0], + outbuf, sizeof(outbuf)); + printf("I:gethostbyname(%s) returned %s, " + "expected %s\n", name, outbuf, address); + fails++; + return; + } + } +} + +static void +test_gethostbyname2(const char *name, const char *address, int af) { + struct hostent *hp; + unsigned char addrbuf[16]; + int len, ret; + + hp = gethostbyname2(name, af); + if (hp == NULL) { + if (address == NULL && h_errno == HOST_NOT_FOUND) + return; + else if (h_errno != HOST_NOT_FOUND) { + printf("I:gethostbyname(%s) failed: %s\n", + name, hstrerror(h_errno)); + fails++; + return; + } else { + printf("I:gethostbyname(%s) returned not found\n", + name); + fails++; + return; + } + } else { + if (af == AF_INET) + len = 4; + else + len = 16; + ret = inet_pton(af, address, addrbuf); + assert(ret == 1); + if (hp->h_addrtype != af) { + printf("I:gethostbyname(%s) returned wrong family\n", + name); + fails++; + return; + } + if (len != (int)hp->h_length || + memcmp(hp->h_addr_list[0], addrbuf, hp->h_length) != 0) + { + char outbuf[16]; + (void)inet_ntop(af, hp->h_addr_list[0], + outbuf, sizeof(outbuf)); + printf("I:gethostbyname(%s) returned %s, " + "expected %s\n", name, outbuf, address); + fails++; + return; + } + } +} + +static void +test_getipnodebyname(const char *name, const char *address, int af, + int v4map, int all) +{ + struct hostent *hp; + unsigned char addrbuf[16]; + int len, ret; + int error_num; + int flags = 0; + + if (v4map) + flags |= AI_V4MAPPED; + if (all) + flags |= AI_ALL; + + hp = getipnodebyname(name, af, flags, &error_num); + if (hp == NULL) { + if (address == NULL && error_num == HOST_NOT_FOUND) + return; + else if (error_num != HOST_NOT_FOUND) { + printf("I:getipnodebyname(%s) failed: %d\n", + name, error_num); + fails++; + return; + } else { + printf("I:getipnodebyname(%s) returned not found\n", + name); + fails++; + return; + } + } else { + if (af == AF_INET) + len = 4; + else + len = 16; + ret = inet_pton(af, address, addrbuf); + assert(ret == 1); + if (hp->h_addrtype != af) { + printf("I:getipnodebyname(%s) returned wrong family\n", + name); + freehostent(hp); + fails++; + return; + } + if (len != (int)hp->h_length || + memcmp(hp->h_addr_list[0], addrbuf, hp->h_length) != 0) + { + char outbuf[16]; + (void)inet_ntop(af, hp->h_addr_list[0], + outbuf, sizeof(outbuf)); + printf("I:getipnodebyname(%s) returned %s, " + "expected %s\n", name, outbuf, address); + freehostent(hp); + fails++; + return; + } + freehostent(hp); + } +} + +static void +test_gethostbyaddr(const char *address, int af, const char *name) { + struct hostent *hp; + char addrbuf[16]; + int len, ret; + + if (af == AF_INET) + len = 4; + else + len = 16; + ret = inet_pton(af, address, addrbuf); + assert(ret == 1); + + hp = gethostbyaddr(addrbuf, len, af); + + if (hp == NULL) { + if (name == NULL && h_errno == HOST_NOT_FOUND) + return; + else if (h_errno != HOST_NOT_FOUND) { + printf("I:gethostbyaddr(%s) failed: %s\n", + address, hstrerror(h_errno)); + fails++; + return; + } else { + printf("I:gethostbyaddr(%s) returned not found\n", + address); + fails++; + return; + } + } else { + if (strcmp(hp->h_name, name) != 0) { + printf("I:gethostbyname(%s) returned %s, " + "expected %s\n", address, hp->h_name, name); + fails++; + return; + } + } +} + +static void +test_getipnodebyaddr(const char *address, int af, const char *name) { + struct hostent *hp; + char addrbuf[16]; + int len, ret; + int error_num; + + if (af == AF_INET) + len = 4; + else + len = 16; + ret = inet_pton(af, address, addrbuf); + assert(ret == 1); + + hp = getipnodebyaddr(addrbuf, len, af, &error_num); + + if (hp == NULL) { + if (name == NULL && error_num == HOST_NOT_FOUND) + return; + else if (error_num != HOST_NOT_FOUND) { + printf("I:getipnodebyaddr(%s) failed: %d\n", + address, error_num); + fails++; + return; + } else { + printf("I:getipnodebyaddr(%s) returned not found\n", + address); + fails++; + return; + } + } else { + if (strcmp(hp->h_name, name) != 0) { + printf("I:getipnodebyaddr(%s) returned %s, " + "expected %s\n", address, hp->h_name, name); + freehostent(hp); + fails++; + return; + } + freehostent(hp); + } +} + +static void +test_getaddrinfo(const char *name, int af, int v4ok, int v6ok, + const char *address) +{ + unsigned int len; + int ret; + struct addrinfo *ai; + struct addrinfo hint; + unsigned char addrbuf[16]; + + if (v4ok == 1 && v6ok== 1) { + ret = getaddrinfo(name, NULL, NULL, &ai); + } else { + memset(&hint, 0, sizeof(hint)); + if (v4ok) + hint.ai_family = AF_INET; + else + hint.ai_family = AF_INET6; + ret = getaddrinfo(name, NULL, &hint, &ai); + } + if (ret != 0) { + if (address == NULL && ret == EAI_NODATA) + return; + else if (ret != EAI_NODATA) { + printf("I:getaddrinfo(%s,%d,%d) failed: %s\n", + name, v4ok, v6ok, gai_strerror(ret)); + fails++; + return; + } else { + printf("I:getaddrinfo(%s,%d,%d) returned not found\n", + name, v4ok, v6ok); + fails++; + return; + } + } else { + if (af == AF_INET) + len = sizeof(struct sockaddr_in); + else + len = sizeof(struct sockaddr_in6); + ret = inet_pton(af, address, addrbuf); + assert(ret == 1); + if (ai->ai_family != af) { + printf("I:getaddrinfo(%s) returned wrong family\n", + name); + fails++; + freeaddrinfo(ai); + return; + } + if (len != (unsigned int) ai->ai_addrlen) { + char outbuf[16]; + (void)inet_ntop(af, ai->ai_addr, + outbuf, sizeof(outbuf)); + printf("I:getaddrinfo(%s) returned %lub, " + "expected %ub\n", name, + (unsigned long)ai->ai_addrlen, len); + fails++; + freeaddrinfo(ai); + return; + } else if (af == AF_INET) { + struct sockaddr_in *sin; + sin = (struct sockaddr_in *) ai->ai_addr; + if (memcmp(&sin->sin_addr.s_addr, addrbuf, 4) != 0) { + char outbuf[16]; + (void)inet_ntop(af, &sin->sin_addr.s_addr, + outbuf, sizeof(outbuf)); + printf("I:getaddrinfo(%s) returned %s, " + "expected %s\n", name, outbuf, address); + fails++; + freeaddrinfo(ai); + return; + } + } else { + struct sockaddr_in6 *sin6; + sin6 = (struct sockaddr_in6 *) ai->ai_addr; + if (memcmp(sin6->sin6_addr.s6_addr, addrbuf, 16) != 0) + { + char outbuf[16]; + (void)inet_ntop(af, &sin6->sin6_addr.s6_addr, + outbuf, sizeof(outbuf)); + printf("I:getaddrinfo(%s) returned %s, " + "expected %s\n", name, outbuf, address); + fails++; + freeaddrinfo(ai); + return; + } + } + freeaddrinfo(ai); + } +} + +static void +test_getnameinfo(const char *address, int af, const char *name) { + int ret; + struct sockaddr_in sin; + struct sockaddr_in6 sin6; + struct sockaddr *sa; + int salen; + char host[1025]; + + if (af == AF_INET) { + memset(&sin, 0, sizeof(sin)); + ret = inet_pton(AF_INET, address, &sin.sin_addr.s_addr); + assert(ret == 1); + sin.sin_family = AF_INET; +#ifdef LWRES_PLATFORM_HAVESALEN + sin.sin_len = sizeof(sin); +#endif + sa = (struct sockaddr *) &sin; + salen = sizeof(sin); + } else { + memset(&sin6, 0, sizeof(sin6)); + ret = inet_pton(AF_INET6, address, sin6.sin6_addr.s6_addr); + assert(ret == 1); + sin6.sin6_family = AF_INET6; +#ifdef LWRES_PLATFORM_HAVESALEN + sin6.sin6_len = sizeof(sin6); +#endif + sa = (struct sockaddr *) &sin6; + salen = sizeof(sin6); + } + sa->sa_family = af; + + ret = getnameinfo(sa, salen, host, sizeof(host), NULL, 0, NI_NAMEREQD); + + if (ret != 0) { + if (name == NULL && ret == ENI_NOHOSTNAME) + return; + else if (ret != ENI_NOHOSTNAME) { + printf("I:getnameinfo(%s) failed: %d\n", + address, ret); + fails++; + return; + } else { + printf("I:getnameinfo(%s) returned not found\n", + address); + fails++; + return; + } + } else { + if (name == NULL) { + printf("I:getnameinfo(%s) returned %s, " + "expected NULL\n", address, host); + fails++; + return; + } else if (strcmp(host, name) != 0) { + printf("I:getnameinfo(%s) returned %s, expected %s\n", + address, host, name); + fails++; + return; + } + } +} + +static void +test_getrrsetbyname(const char *name, int rdclass, int rdtype, + unsigned int nrdatas, unsigned int nsigs, + int should_pass) +{ + int ret; + struct rrsetinfo *rrinfo = NULL; + ret = getrrsetbyname(name, rdclass, rdtype, 0, &rrinfo); + if (ret != 0 && should_pass == 1) { + printf("I:getrrsetbyname(%s, %d) failed\n", name, rdtype); + fails++; + return; + } else if (ret == 0 && should_pass == 0) { + printf("I:getrrsetbyname(%s, %d) unexpectedly succeeded\n", + name, rdtype); + fails++; + freerrset(rrinfo); + return; + } else if (ret != 0) + return; + if (rrinfo->rri_nrdatas != nrdatas) { + printf("I:getrrsetbyname(%s, %d): got %d rr, expected %d\n", + name, rdtype, rrinfo->rri_nrdatas, nrdatas); + fails++; + } + if (rrinfo->rri_nsigs != nsigs) { + printf("I:getrrsetbyname(%s, %d): got %d sig, expected %d\n", + name, rdtype, rrinfo->rri_nsigs, nsigs); + fails++; + } + freerrset(rrinfo); + return; +} + +int +main(void) { + lwres_result_t ret; + + lwres_udp_port = 9210; + lwres_resolv_conf = "resolv.conf"; + + ret = lwres_context_create(&ctx, NULL, NULL, NULL, 0); + CHECK(ret, "lwres_context_create"); + + ret = lwres_conf_parse(ctx, "resolv.conf"); + CHECK(ret, "lwres_conf_parse"); + + test_noop(); + + test_gabn("a.example1", LWRES_R_SUCCESS, "10.0.1.1", + LWRES_ADDRTYPE_V4); + test_gabn("a.example1.", LWRES_R_SUCCESS, "10.0.1.1", + LWRES_ADDRTYPE_V4); + test_gabn("a.example2", LWRES_R_SUCCESS, "10.0.2.1", + LWRES_ADDRTYPE_V4); + test_gabn("a.example2.", LWRES_R_SUCCESS, "10.0.2.1", + LWRES_ADDRTYPE_V4); + test_gabn("a.example3", LWRES_R_NOTFOUND, NULL, LWRES_ADDRTYPE_V4); + test_gabn("a.example3.", LWRES_R_NOTFOUND, NULL, LWRES_ADDRTYPE_V4); + test_gabn("a", LWRES_R_SUCCESS, "10.0.1.1", LWRES_ADDRTYPE_V4); + test_gabn("a.", LWRES_R_NOTFOUND, NULL, LWRES_ADDRTYPE_V4); + + test_gabn("a2", LWRES_R_SUCCESS, "10.0.1.1", LWRES_ADDRTYPE_V4); + test_gabn("a3", LWRES_R_NOTFOUND, NULL, LWRES_ADDRTYPE_V4); + + test_gabn("b.example1", LWRES_R_SUCCESS, + "eeee:eeee:eeee:eeee:ffff:ffff:ffff:ffff", + LWRES_ADDRTYPE_V6); + test_gabn("b.example1.", LWRES_R_SUCCESS, + "eeee:eeee:eeee:eeee:ffff:ffff:ffff:ffff", + LWRES_ADDRTYPE_V6); + test_gabn("b.example2", LWRES_R_SUCCESS, + "eeee:eeee:eeee:eeee:ffff:ffff:ffff:ffff", + LWRES_ADDRTYPE_V6); + test_gabn("b.example2.", LWRES_R_SUCCESS, + "eeee:eeee:eeee:eeee:ffff:ffff:ffff:ffff", + LWRES_ADDRTYPE_V6); + test_gabn("b.example3", LWRES_R_NOTFOUND, NULL, LWRES_ADDRTYPE_V6); + test_gabn("b.example3.", LWRES_R_NOTFOUND, NULL, LWRES_ADDRTYPE_V6); + test_gabn("b", LWRES_R_SUCCESS, + "eeee:eeee:eeee:eeee:ffff:ffff:ffff:ffff", + LWRES_ADDRTYPE_V6); + test_gabn("b.", LWRES_R_NOTFOUND, NULL, LWRES_ADDRTYPE_V6); + + test_gabn("d.example1", LWRES_R_NOTFOUND, NULL, LWRES_ADDRTYPE_V6); + + test_gabn("x", LWRES_R_SUCCESS, "10.1.10.1", LWRES_ADDRTYPE_V4); + test_gabn("x.", LWRES_R_SUCCESS, "10.1.10.1", LWRES_ADDRTYPE_V4); + + test_gnba("10.10.10.1", LWRES_ADDRTYPE_V4, LWRES_R_SUCCESS, + "ipv4.example"); + test_gnba("10.10.10.17", LWRES_ADDRTYPE_V4, LWRES_R_NOTFOUND, + NULL); + test_gnba("0123:4567:89ab:cdef:0123:4567:89ab:cdef", + LWRES_ADDRTYPE_V6, LWRES_R_SUCCESS, "ip6.int.example"); + test_gnba("0123:4567:89ab:cdef:0123:4567:89ab:cde0", + LWRES_ADDRTYPE_V6, LWRES_R_NOTFOUND, NULL); + test_gnba("1123:4567:89ab:cdef:0123:4567:89ab:cdef", + LWRES_ADDRTYPE_V6, LWRES_R_SUCCESS, "ip6.arpa.example"); + test_gnba("1123:4567:89ab:cdef:0123:4567:89ab:cde0", + LWRES_ADDRTYPE_V6, LWRES_R_NOTFOUND, NULL); + + test_gethostbyname("a.example1.", "10.0.1.1"); + test_gethostbyname("q.example1.", NULL); + + test_gethostbyname2("a.example1.", "10.0.1.1", AF_INET); + test_gethostbyname2("b.example1.", + "eeee:eeee:eeee:eeee:ffff:ffff:ffff:ffff", + AF_INET6); + test_gethostbyname2("q.example1.", NULL, AF_INET); + + test_getipnodebyname("a.example1.", "10.0.1.1", AF_INET, 0, 0); + test_getipnodebyname("b.example1.", + "eeee:eeee:eeee:eeee:ffff:ffff:ffff:ffff", + AF_INET6, 0, 0); + test_getipnodebyname("a.example1.", + "::ffff:10.0.1.1", AF_INET6, 1, 0); + test_getipnodebyname("a.example1.", + "::ffff:10.0.1.1", AF_INET6, 1, 1); + test_getipnodebyname("b.example1.", + "eeee:eeee:eeee:eeee:ffff:ffff:ffff:ffff", + AF_INET6, 1, 1); + test_getipnodebyname("q.example1.", NULL, AF_INET, 0, 0); + + test_gethostbyaddr("10.10.10.1", AF_INET, "ipv4.example"); + test_gethostbyaddr("10.10.10.17", AF_INET, NULL); + test_gethostbyaddr("0123:4567:89ab:cdef:0123:4567:89ab:cdef", + AF_INET6, "ip6.int.example"); + test_gethostbyaddr("1123:4567:89ab:cdef:0123:4567:89ab:cdef", + AF_INET6, "ip6.arpa.example"); + + test_getipnodebyaddr("10.10.10.1", AF_INET, "ipv4.example"); + test_getipnodebyaddr("10.10.10.17", AF_INET, NULL); + test_getipnodebyaddr("0123:4567:89ab:cdef:0123:4567:89ab:cdef", + AF_INET6, "ip6.int.example"); + test_getipnodebyaddr("1123:4567:89ab:cdef:0123:4567:89ab:cdef", + AF_INET6, "ip6.arpa.example"); + + test_getaddrinfo("a.example1.", AF_INET, 1, 1, "10.0.1.1"); + test_getaddrinfo("a.example1.", AF_INET, 1, 0, "10.0.1.1"); + test_getaddrinfo("a.example1.", AF_INET, 0, 1, NULL); + test_getaddrinfo("b.example1.", AF_INET6, 1, 1, + "eeee:eeee:eeee:eeee:ffff:ffff:ffff:ffff"); + test_getaddrinfo("b.example1.", AF_INET6, 1, 0, NULL); + test_getaddrinfo("b.example1.", AF_INET6, 0, 1, + "eeee:eeee:eeee:eeee:ffff:ffff:ffff:ffff"); + + test_getnameinfo("10.10.10.1", AF_INET, "ipv4.example"); + test_getnameinfo("10.10.10.17", AF_INET, NULL); + test_getnameinfo("0123:4567:89ab:cdef:0123:4567:89ab:cdef", + AF_INET6, "ip6.int.example"); + test_getnameinfo("1123:4567:89ab:cdef:0123:4567:89ab:cdef", + AF_INET6, "ip6.arpa.example"); + test_getnameinfo("1122:3344:5566:7788:99aa:bbcc:ddee:ff00", + AF_INET6, "dname.example1"); + + test_getrrsetbyname("a", 1, 1, 1, 0, 1); + test_getrrsetbyname("a.example1.", 1, 1, 1, 0, 1); + test_getrrsetbyname("e.example1.", 1, 1, 1, 1, 1); + test_getrrsetbyname("e.example1.", 1, 255, 1, 1, 0); + test_getrrsetbyname("e.example1.", 1, 46, 2, 0, 1); + test_getrrsetbyname("", 1, 1, 0, 0, 0); + + if (fails == 0) + printf("I:ok\n"); + return (fails); +} diff --git a/bin/tests/system/lwresd/ns1/10.10.10.in-addr.arpa.db b/bin/tests/system/lwresd/ns1/10.10.10.in-addr.arpa.db new file mode 100644 index 0000000..8c8adca --- /dev/null +++ b/bin/tests/system/lwresd/ns1/10.10.10.in-addr.arpa.db @@ -0,0 +1,29 @@ +; 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. + +; $Id: 10.10.10.in-addr.arpa.db,v 1.10 2007/06/19 23:47:04 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000062001 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.1 + +1 PTR ipv4.example. diff --git a/bin/tests/system/lwresd/ns1/e.example1.db b/bin/tests/system/lwresd/ns1/e.example1.db new file mode 100644 index 0000000..2d9587c --- /dev/null +++ b/bin/tests/system/lwresd/ns1/e.example1.db @@ -0,0 +1,54 @@ +; File written on Wed Mar 5 10:20:40 2008 +; dnssec_signzone version 9.3.4-P1 +e.example1. 300 IN SOA mname1. . ( + 2002082210 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + 300 RRSIG SOA 5 2 300 20010101000000 ( + 20000101000000 14043 e.example1. + KtYwrnKM7Tu53BNf8XuTix53r9kDdCneJ1X7 + xklFbp4YjRKC3NhwVK9PFe0jdHOkIDMtrwxn + n7/Rp07xIyURqw== ) + 300 NS ns.e.example1. + 300 RRSIG NS 5 2 300 20010101000000 ( + 20000101000000 14043 e.example1. + KBPx3XmNl4swVPdwuUEFuzZedMSfsyK2a0Fu + o2wBnbCuS7G7DtfW9690lP/eTyixLOIwlFLQ + MrjN3+XgpkdgIw== ) + 300 A 10.0.1.1 + 300 RRSIG A 5 2 300 20010101000000 ( + 20000101000000 14043 e.example1. + KYlxMQUvv8DQtVgS23lNL5tFYmRppJ7vTgH3 + btvgKbyHxW/04ewRsgCa82iu3iJipdEhKM11 + ALkRNhqL7frnig== ) + 3600 NSEC ns.e.example1. A NS SOA RRSIG NSEC DNSKEY + 3600 RRSIG NSEC 5 2 3600 20010101000000 ( + 20000101000000 14043 e.example1. + azSgagb7bldM06qSZg8nDZWOY2FbqeZY0/T8 + nC+6VhCs7YTfNvXynLWmvmpqL7gVT6/O+Yi2 + 2lmdntld7GORrQ== ) + 300 DNSKEY 256 3 5 ( + AwEAAcvAUMfH7wA0z077fJaF7RMrxAFyvo0/ + 7aAL4d2/yA5TqTaUCVnJtE+XgGO34kH9mwae + we+Nyv2kRWDeLl6nhGk= + ) ; key id = 14043 + 300 RRSIG DNSKEY 5 2 300 20010101000000 ( + 20000101000000 14043 e.example1. + BQFWOHopXuBNdzcopkdl1YVKGF0QvIaYpywM + fcpG5gi+sy9EoTofQ1UGsLOjU3nFXCvJFG4K + 1gUhzEEti440/g== ) +ns.e.example1. 300 IN A 10.53.0.1 + 300 RRSIG A 5 3 300 20010101000000 ( + 20000101000000 14043 e.example1. + cYPzsWNQ/eL4h2lihKRjKT2jhGpOqV9woGJA + /Jstx2iethOAvYtgY22CsAbCUr/6E4bSgBZR + TMoC604cNdFzIw== ) + 3600 NSEC e.example1. A RRSIG NSEC + 3600 RRSIG NSEC 5 3 3600 20010101000000 ( + 20000101000000 14043 e.example1. + J8Md544zDLP4GjyAtkjH/rSFvpzXY/7bgJRS + YDoARwFQRmlrJvavXEjqElb2fTQqlNNz1cal + QROz/WJ3GLwOWw== ) diff --git a/bin/tests/system/lwresd/ns1/example1.db b/bin/tests/system/lwresd/ns1/example1.db new file mode 100644 index 0000000..16a53f4 --- /dev/null +++ b/bin/tests/system/lwresd/ns1/example1.db @@ -0,0 +1,35 @@ +; Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") +; Copyright (C) 2000-2003 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. + +; $Id: example1.db,v 1.19 2008/04/02 23:46:57 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2002082210 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.1 + +a A 10.0.1.1 +a2 CNAME a +a3 CNAME nowhere +b AAAA eeee:eeee:eeee:eeee:ffff:ffff:ffff:ffff +8.8.7.7 DNAME net +0.0.f.f.e.e.d.d.c.c.b.b.a.a.9.9.net PTR dname +e NS ns.e diff --git a/bin/tests/system/lwresd/ns1/example2.db b/bin/tests/system/lwresd/ns1/example2.db new file mode 100644 index 0000000..495f2f6 --- /dev/null +++ b/bin/tests/system/lwresd/ns1/example2.db @@ -0,0 +1,30 @@ +; Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +; Copyright (C) 2000-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. + +; $Id: example2.db,v 1.10 2007/06/19 23:47:04 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000062001 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.1 + +a A 10.0.2.1 +b AAAA eeee:eeee:eeee:eeee:ffff:ffff:ffff:ffff diff --git a/bin/tests/system/lwresd/ns1/ip6.arpa.db b/bin/tests/system/lwresd/ns1/ip6.arpa.db new file mode 100644 index 0000000..d2a1965 --- /dev/null +++ b/bin/tests/system/lwresd/ns1/ip6.arpa.db @@ -0,0 +1,30 @@ +; Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +; Copyright (C) 2000-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. + +; $Id: ip6.arpa.db,v 1.11 2007/06/19 23:47:04 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2002082300 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.1 + +f.e.d.c.b.a.9.8.7.6.5.4.3.2.1.0.f.e.d.c.b.a.9.8.7.6.5.4.3.2.1.1 PTR ip6.arpa.example. +6.6.5.5.4.4.3.3.2.2.1.1 DNAME example1. diff --git a/bin/tests/system/lwresd/ns1/ip6.int.db b/bin/tests/system/lwresd/ns1/ip6.int.db new file mode 100644 index 0000000..8085426 --- /dev/null +++ b/bin/tests/system/lwresd/ns1/ip6.int.db @@ -0,0 +1,29 @@ +; Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +; Copyright (C) 2000-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. + +; $Id: ip6.int.db,v 1.11 2007/06/19 23:47:04 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2002082300 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.1 + +f.e.d.c.b.a.9.8.7.6.5.4.3.2.1.0.f.e.d.c.b.a.9.8.7.6.5.4.3.2.1.0 PTR ip6.int.example. diff --git a/bin/tests/system/lwresd/ns1/named.conf b/bin/tests/system/lwresd/ns1/named.conf new file mode 100644 index 0000000..2d649c7 --- /dev/null +++ b/bin/tests/system/lwresd/ns1/named.conf @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2004, 2006-2008 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. + */ + +/* $Id: named.conf,v 1.21 2008/04/02 23:46:57 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify no; + dnssec-enable yes; + dnssec-validation yes; +}; + +zone "." { + type master; + file "root.db"; +}; + +zone "example1." { + type master; + file "example1.db"; +}; + +zone "e.example1." { + type master; + file "e.example1.db"; +}; + +zone "example2." { + type master; + file "example2.db"; +}; + +zone "10.10.10.in-addr.arpa." { + type master; + file "10.10.10.in-addr.arpa.db"; +}; + +zone "ip6.int." { + type master; + file "ip6.int.db"; +}; + +zone "ip6.arpa." { + type master; + file "ip6.arpa.db"; +}; diff --git a/bin/tests/system/lwresd/ns1/root.db b/bin/tests/system/lwresd/ns1/root.db new file mode 100644 index 0000000..9cd0a16 --- /dev/null +++ b/bin/tests/system/lwresd/ns1/root.db @@ -0,0 +1,33 @@ +; 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. + +; $Id: root.db,v 1.9 2007/06/19 23:47:04 tbox Exp $ + +$TTL 300 +. IN SOA gson.nominum.com. a.root.servers.nil. ( + 2000042100 ; serial + 600 ; refresh + 600 ; retry + 1200 ; expire + 600 ; minimum + ) +. NS a.root-servers.nil. +a.root-servers.nil. A 10.53.0.1 + +example1. NS ns.example1. +ns.example1. A 10.53.0.2 +example2. NS ns.example2. +ns.example2. A 10.53.0.2 +x A 10.1.10.1 diff --git a/bin/tests/system/lwresd/resolv.conf b/bin/tests/system/lwresd/resolv.conf new file mode 100644 index 0000000..1aa88c9 --- /dev/null +++ b/bin/tests/system/lwresd/resolv.conf @@ -0,0 +1,21 @@ +# 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. + +# $Id: resolv.conf,v 1.11 2007/06/19 23:47:04 tbox Exp $ + +nameserver 10.53.0.1 +lwserver 10.53.0.1 +search example1. +ndots 1 diff --git a/bin/tests/system/lwresd/tests.sh b/bin/tests/system/lwresd/tests.sh new file mode 100644 index 0000000..c425410 --- /dev/null +++ b/bin/tests/system/lwresd/tests.sh @@ -0,0 +1,46 @@ +#!/bin/sh +# +# 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. + +# $Id: tests.sh,v 1.18 2007/06/18 23:47:29 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +status=0 + +echo "I:using resolv.conf" +ret=0 +./lwtest || ret=1 +if [ $ret != 0 ]; then + echo "I:failed" +fi +status=`expr $status + $ret` + +$PERL $SYSTEMTESTTOP/stop.pl . lwresd1 + +$PERL $SYSTEMTESTTOP/start.pl . lwresd1 -- "-m record,size,mctx -c lwresd.conf -d 99 -g" + +echo "I:using lwresd.conf" +ret=0 +./lwtest || ret=1 +if [ $ret != 0 ]; then + echo "I:failed" +fi +status=`expr $status + $ret` + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/masterfile/clean.sh b/bin/tests/system/masterfile/clean.sh new file mode 100644 index 0000000..d90a65d --- /dev/null +++ b/bin/tests/system/masterfile/clean.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 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. + +# $Id: clean.sh,v 1.5 2007/09/26 03:22:44 marka Exp $ + +rm -f dig.out +rm -f */named.memstats diff --git a/bin/tests/system/masterfile/knowngood.dig.out b/bin/tests/system/masterfile/knowngood.dig.out new file mode 100644 index 0000000..56de555 --- /dev/null +++ b/bin/tests/system/masterfile/knowngood.dig.out @@ -0,0 +1,33 @@ +include. 300 IN SOA ns.include. hostmaster.include. 1 3600 1800 1814400 3600 +include. 300 IN NS ns.include. +a.include. 300 IN A 10.0.0.1 +a.include. 300 IN A 10.0.0.99 +a.a.include. 300 IN A 10.0.1.1 +b.foo.a.include. 300 IN A 10.0.2.2 +b.include. 300 IN A 10.0.0.2 +b.include. 300 IN A 10.0.0.99 +a.b.include. 300 IN A 10.0.1.1 +c.b.include. 300 IN A 10.0.0.3 +b.foo.b.include. 300 IN A 10.0.2.2 +ns.include. 300 IN A 127.0.0.1 +include. 300 IN SOA ns.include. hostmaster.include. 1 3600 1800 1814400 3600 +ttl2. 1 IN SOA ns.ttl2. hostmaster.ttl2. 1 3600 1800 1814400 3 +ttl2. 1 IN NS ns.ttl2. +a.ttl2. 1 IN TXT "inherited ttl 1" +b.ttl2. 2 IN TXT "explicit ttl 2" +c.ttl2. 2 IN TXT "inherited ttl 2" +d.ttl2. 3 IN TXT "default ttl 3" +e.ttl2. 2 IN TXT "explicit ttl 2" +f.ttl2. 3 IN TXT "default ttl 3" +ns.ttl2. 1 IN A 10.53.0.1 +ttl2. 1 IN SOA ns.ttl2. hostmaster.ttl2. 1 3600 1800 1814400 3 +ttl2. 1 IN SOA ns.ttl2. hostmaster.ttl2. 1 3600 1800 1814400 3 +ttl2. 1 IN NS ns.ttl2. +a.ttl2. 1 IN TXT "inherited ttl 1" +b.ttl2. 2 IN TXT "explicit ttl 2" +c.ttl2. 2 IN TXT "inherited ttl 2" +d.ttl2. 3 IN TXT "default ttl 3" +e.ttl2. 2 IN TXT "explicit ttl 2" +f.ttl2. 3 IN TXT "default ttl 3" +ns.ttl2. 1 IN A 10.53.0.1 +ttl2. 1 IN SOA ns.ttl2. hostmaster.ttl2. 1 3600 1800 1814400 3 diff --git a/bin/tests/system/masterfile/ns1/include.db b/bin/tests/system/masterfile/ns1/include.db new file mode 100644 index 0000000..47c985f --- /dev/null +++ b/bin/tests/system/masterfile/ns1/include.db @@ -0,0 +1,41 @@ +; Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +; Copyright (C) 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. + +; $Id: include.db,v 1.5 2007/06/19 23:47:04 tbox Exp $ + +; Test $INCLUDE current domain name and origin semantics + +$TTL 300 +@ IN SOA ns hostmaster ( + 1 ; serial + 3600 + 1800 + 1814400 + 3600 + ) + NS ns + +ns A 127.0.0.1 + +a A 10.0.0.1 +$INCLUDE sub.db a +; use the current domain name + A 10.0.0.99 +b A 10.0.0.2 +$ORIGIN b +$INCLUDE sub.db +; use the current domain name + A 10.0.0.99 +c A 10.0.0.3 diff --git a/bin/tests/system/masterfile/ns1/named.conf b/bin/tests/system/masterfile/ns1/named.conf new file mode 100644 index 0000000..1669f94 --- /dev/null +++ b/bin/tests/system/masterfile/ns1/named.conf @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 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. + */ + +/* $Id: named.conf,v 1.6 2007/06/19 23:47:04 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify yes; +}; + +zone "include" { + type master; + file "include.db"; +}; + +zone "ttl1" { + type master; + file "ttl1.db"; +}; + +zone "ttl2" { + type master; + file "ttl2.db"; +}; diff --git a/bin/tests/system/masterfile/ns1/sub.db b/bin/tests/system/masterfile/ns1/sub.db new file mode 100644 index 0000000..d6186f1 --- /dev/null +++ b/bin/tests/system/masterfile/ns1/sub.db @@ -0,0 +1,21 @@ +; Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +; Copyright (C) 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. + +; $Id: sub.db,v 1.5 2007/06/19 23:47:04 tbox Exp $ + +a A 10.0.1.1 +$ORIGIN foo +b A 10.0.2.2 + diff --git a/bin/tests/system/masterfile/ns1/ttl1.db b/bin/tests/system/masterfile/ns1/ttl1.db new file mode 100644 index 0000000..c575cec --- /dev/null +++ b/bin/tests/system/masterfile/ns1/ttl1.db @@ -0,0 +1,33 @@ +; Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +; Copyright (C) 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. + +; $Id: ttl1.db,v 1.6 2007/06/19 23:47:04 tbox Exp $ + +@ IN SOA ns hostmaster ( + 1 ; serial + 3600 + 1800 + 1814400 + 3 + ) + NS ns +ns A 10.53.0.1 +a TXT "soa minttl 3" +b 2 TXT "explicit ttl 2" +c TXT "soa minttl 3" +$TTL 1 +d TXT "default ttl 1" +e 4 TXT "explicit ttl 4" +f TXT "default ttl 1" diff --git a/bin/tests/system/masterfile/ns1/ttl2.db b/bin/tests/system/masterfile/ns1/ttl2.db new file mode 100644 index 0000000..2a01123 --- /dev/null +++ b/bin/tests/system/masterfile/ns1/ttl2.db @@ -0,0 +1,36 @@ +; Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +; Copyright (C) 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. + +; $Id: ttl2.db,v 1.6 2007/06/19 23:47:04 tbox Exp $ + +@ 1 IN SOA ns hostmaster ( + 1 ; serial + 3600 + 1800 + 1814400 + 3 + ) + NS ns +ns A 10.53.0.1 +a TXT "inherited ttl 1" +b 2 TXT "explicit ttl 2" +c TXT "inherited ttl 2" +$TTL 3 +d TXT "default ttl 3" +e 2 TXT "explicit ttl 2" +f TXT "default ttl 3" + + + diff --git a/bin/tests/system/masterfile/tests.sh b/bin/tests/system/masterfile/tests.sh new file mode 100644 index 0000000..beebcdc --- /dev/null +++ b/bin/tests/system/masterfile/tests.sh @@ -0,0 +1,37 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 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. + +# $Id: tests.sh,v 1.5 2007/06/19 23:47:04 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +status=0 + +echo "I:test master file \$INCLUDE semantics" +$DIG +nostats +nocmd include. axfr @10.53.0.1 -p 5300 >dig.out + +echo "I:test master file BIND 8 compatibility TTL and \$TTL semantics" +$DIG +nostats +nocmd ttl2. axfr @10.53.0.1 -p 5300 >>dig.out + +echo "I:test of master file RFC1035 TTL and \$TTL semantics" +$DIG +nostats +nocmd ttl2. axfr @10.53.0.1 -p 5300 >>dig.out + +diff dig.out knowngood.dig.out || status=1 + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/masterformat/clean.sh b/bin/tests/system/masterformat/clean.sh new file mode 100755 index 0000000..1909dc2 --- /dev/null +++ b/bin/tests/system/masterformat/clean.sh @@ -0,0 +1,23 @@ +#!/bin/sh +# +# Copyright (C) 2005, 2007 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: clean.sh,v 1.5 2007/09/26 03:22:44 marka Exp $ + +rm -f named-compilezone +rm -f ns1/example.db.raw +rm -f ns2/example.db +rm -f dig.out.* +rm -f */named.memstats diff --git a/bin/tests/system/masterformat/ns1/compile.sh b/bin/tests/system/masterformat/ns1/compile.sh new file mode 100755 index 0000000..551a01f --- /dev/null +++ b/bin/tests/system/masterformat/ns1/compile.sh @@ -0,0 +1,17 @@ +# Copyright (C) 2005-2007 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: compile.sh,v 1.6 2007/06/19 23:47:04 tbox Exp $ + +../named-compilezone -D -F raw -o example.db.raw example example.db diff --git a/bin/tests/system/masterformat/ns1/example.db b/bin/tests/system/masterformat/ns1/example.db new file mode 100644 index 0000000..c216706 --- /dev/null +++ b/bin/tests/system/masterformat/ns1/example.db @@ -0,0 +1,54 @@ +; Copyright (C) 2005, 2007 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: example.db,v 1.5 2007/06/19 23:47:04 tbox Exp $ + +$TTL 1D + +@ IN SOA ns hostmaster ( + 1 + 3600 + 1800 + 1814400 + 3 + ) + NS ns +ns A 10.53.0.1 +mx MX 10 mail +a A 10.53.0.1 + A 10.53.0.2 +aaaa AAAA 2001:db8::53 +cname CNAME cname-target +dname DNAME dname-target +txt TXT "this is text" + +;; +;; we are not testing DNSSEC behavior, so we don't care about the semantics +;; of the following records. +dnskey 300 DNSKEY 256 3 1 ( + AQPTpWyReB/e9Ii6mVGnakS8hX2zkh/iUYAg + +Ge4noWROpTWOIBvm76zeJPWs4Zfqa1IsswD + Ix5Mqeg0zwclz59uecKsKyx5w9IhtZ8plc4R + b9VIE5x7KNHAYTvTO5d4S8M= + ) +ds 300 DS 30795 1 1 ( + 310D27F4D82C1FC2400704EA9939FE6E1CEA + A3B9 ) +nsec 600 NSEC nsecnext NS DS RRSIG NSEC +rrsig 300 RRSIG SOA 1 0 300 20050714214747 ( + 20050614214747 30795 . + yi/RRPAQmn6rnjDQaCqVValBa+ICF00ZldKf + ZSDaoew5mMUh83DlrrPPNeAxrzMSNzDGlJ6P + fdyIFgzPn/CvthF4kjBUAiJTp4r2zhlaUJQ+ + QFo+drYXYgVJo6aA36fj ) diff --git a/bin/tests/system/masterformat/ns1/named.conf b/bin/tests/system/masterformat/ns1/named.conf new file mode 100644 index 0000000..a2971f5 --- /dev/null +++ b/bin/tests/system/masterformat/ns1/named.conf @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2005, 2007 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: named.conf,v 1.4 2007/06/19 23:47:04 tbox Exp $ */ + +// NS1 + +controls { /* empty */ }; + +options { + pid-file "named.pid"; + listen-on port 5300 { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify no; + dnssec-enable yes; +}; + +zone "example" { + type master; + masterfile-format raw; + file "example.db.raw"; +}; diff --git a/bin/tests/system/masterformat/ns2/named.conf b/bin/tests/system/masterformat/ns2/named.conf new file mode 100644 index 0000000..3cda00e --- /dev/null +++ b/bin/tests/system/masterformat/ns2/named.conf @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2005, 2007 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: named.conf,v 1.4 2007/06/19 23:47:04 tbox Exp $ */ + +// NS2 + +controls { /* empty */ }; + +options { + pid-file "named.pid"; + listen-on port 5300 { 10.53.0.2; }; + listen-on-v6 { none; }; + recursion no; + notify no; + dnssec-enable yes; +}; + +zone "example" { + type master; + file "example.db"; +}; diff --git a/bin/tests/system/masterformat/setup.sh b/bin/tests/system/masterformat/setup.sh new file mode 100755 index 0000000..4c85ab7 --- /dev/null +++ b/bin/tests/system/masterformat/setup.sh @@ -0,0 +1,20 @@ +# Copyright (C) 2005-2007 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: setup.sh,v 1.6 2007/06/19 23:47:04 tbox Exp $ + +ln -s $CHECKZONE named-compilezone +rm -f ns1/example.db.raw +cp ns1/example.db ns2/ +cd ns1 && sh compile.sh diff --git a/bin/tests/system/masterformat/tests.sh b/bin/tests/system/masterformat/tests.sh new file mode 100755 index 0000000..71c115d --- /dev/null +++ b/bin/tests/system/masterformat/tests.sh @@ -0,0 +1,80 @@ +#!/bin/sh +# +# Copyright (C) 2005, 2007 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: tests.sh,v 1.4 2007/06/19 23:47:04 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +DIGOPTS="+tcp +noauth +noadd +nosea +nostat +noquest +nocomm +nocmd" + +status=0 + +echo "I:checking that master file in the raw format worked" + +for server in 1 2 +do + for name in ns mx a aaaa cname dname txt rrsig nsec dnskey ds + do + $DIG $DIGOPTS $name.example. $name @10.53.0.$server -p 5300 + echo + done > dig.out.$server +done + +diff dig.out.1 dig.out.2 || status=1 + +echo "I:exit status: $status" +exit $status +#!/bin/sh +# +# Copyright (C) 2005 Internet Systems Consortium, Inc. ("ISC") +# +# 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 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: tests.sh,v 1.4 2007/06/19 23:47:04 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +DIGOPTS="+tcp +noauth +noadd +nosea +nostat +noquest +nocomm +nocmd" + +status=0 + +echo "I:checking that master file in the raw format worked" + +for server in 1 2 +do + for name in ns mx a aaaa cname dname txt rrsig nsec dnskey ds + do + $DIG $DIGOPTS $name.example. $name @10.53.0.$server -p 5300 + echo + done > dig.out.$server +done + +diff dig.out.1 dig.out.2 || status=1 + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/notify/clean.sh b/bin/tests/system/notify/clean.sh new file mode 100644 index 0000000..6a08bab --- /dev/null +++ b/bin/tests/system/notify/clean.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# +# 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. + +# $Id: clean.sh,v 1.12 2007/09/26 03:22:44 marka Exp $ + +# +# Clean up after zone transfer tests. +# + +rm -f ns3/example.bk dig.out.ns2 dig.out.ns3 +rm -f ns2/example.db +rm -f */named.memstats diff --git a/bin/tests/system/notify/ns1/named.conf b/bin/tests/system/notify/ns1/named.conf new file mode 100644 index 0000000..29b22e5 --- /dev/null +++ b/bin/tests/system/notify/ns1/named.conf @@ -0,0 +1,37 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.18 2007/06/19 23:47:04 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify yes; +}; + +zone "." { + type master; + file "root.db"; +}; diff --git a/bin/tests/system/notify/ns1/root.db b/bin/tests/system/notify/ns1/root.db new file mode 100644 index 0000000..cff7b81 --- /dev/null +++ b/bin/tests/system/notify/ns1/root.db @@ -0,0 +1,30 @@ +; 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. + +; $Id: root.db,v 1.9 2007/06/19 23:47:04 tbox Exp $ + +$TTL 300 +. IN SOA gson.nominum.com. a.root.servers.nil. ( + 2000042100 ; serial + 600 ; refresh + 600 ; retry + 1200 ; expire + 600 ; minimum + ) +. NS a.root-servers.nil. +a.root-servers.nil. A 10.53.0.1 + +example. NS ns2.example. +ns2.example. A 10.53.0.2 diff --git a/bin/tests/system/notify/ns2/example1.db b/bin/tests/system/notify/ns2/example1.db new file mode 100644 index 0000000..f081693 --- /dev/null +++ b/bin/tests/system/notify/ns2/example1.db @@ -0,0 +1,150 @@ +; Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +; Copyright (C) 2000-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. + +; $Id: example1.db,v 1.12 2007/06/19 23:47:04 tbox Exp $ + +$ORIGIN . +$TTL 300 ; 5 minutes +example IN SOA mname1. . ( + 1 ; serial + 300 ; refresh (300 seconds) + 300 ; retry (300 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) +example. NS ns2.example. +ns2.example. A 10.53.0.2 +example. NS ns3.example. +ns3.example. A 10.53.0.3 + +$ORIGIN example. +a A 10.0.0.1 +$TTL 3600 ; 1 hour +a01 A 0.0.0.0 +a02 A 255.255.255.255 +a601 AAAA ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff +afsdb01 AFSDB 0 hostname +afsdb02 AFSDB 65535 . +$TTL 300 ; 5 minutes +b CNAME foo.net. +c A 73.80.65.49 +$TTL 3600 ; 1 hour +cert01 CERT 65534 65535 PRIVATEOID ( + MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgi + WCn/GxHhai6VAuHAoNUz4YoU1tVfSCSqQYn6//11U6Nl + d80jEeC8aTrO+KKmCaY= ) +cname01 CNAME cname-target. +cname02 CNAME cname-target +cname03 CNAME . +$TTL 300 ; 5 minutes +d A 73.80.65.49 +$TTL 3600 ; 1 hour +dname01 DNAME dname-target. +dname02 DNAME dname-target +dname03 DNAME . +$TTL 300 ; 5 minutes +e MX 10 mail + TXT "one" + TXT "three" + TXT "two" + A 73.80.65.49 + A 73.80.65.50 + A 73.80.65.52 + A 73.80.65.51 +f A 73.80.65.52 +$TTL 3600 ; 1 hour +gpos01 GPOS "-22.6882" "116.8652" "250.0" +gpos02 GPOS "" "" "" +hinfo01 HINFO "Generic PC clone" "NetBSD-1.4" +hinfo02 HINFO "PC" "NetBSD" +isdn01 ISDN "isdn-address" +isdn02 ISDN "isdn-address" "subaddress" +isdn03 ISDN "isdn-address" +isdn04 ISDN "isdn-address" "subaddress" +key01 KEY 512 255 1 ( + AQMFD5raczCJHViKtLYhWGz8hMY9UGRuniJDBzC7w0aR + yzWZriO6i2odGWWQVucZqKVsENW91IOW4vqudngPZsY3 + GvQ/xVA8/7pyFj6b7Esga60zyGW6LFe9r8n6paHrlG5o + jqf0BaqHT+8= ) +kx01 KX 10 kdc +kx02 KX 10 . +loc01 LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m +loc02 LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m +mb01 MG madname +mb02 MG . +mg01 MG mgmname +mg02 MG . +minfo01 MINFO rmailbx emailbx +minfo02 MINFO . . +mr01 MR mrname +mr02 MR . +mx01 MX 10 mail +mx02 MX 10 . +naptr01 NAPTR 0 0 "" "" "" . +naptr02 NAPTR 65535 65535 "blurgh" "blorf" "blegh" foo. +nsap-ptr01 NSAP-PTR foo. + NSAP-PTR . +nsap01 NSAP 0x47000580005a0000000001e133ffffff00016100 +nsap02 NSAP 0x47000580005a0000000001e133ffffff00016100 +nxt01 NXT a.secure ( NS SOA MX SIG KEY LOC NXT ) +nxt02 NXT . ( NSAP-PTR NXT ) +nxt03 NXT . ( A ) +nxt04 NXT . ( 127 ) +ptr01 PTR example. +px01 PX 65535 foo. bar. +px02 PX 65535 . . +rp01 RP mbox-dname txt-dname +rp02 RP . . +rt01 RT 0 intermediate-host +rt02 RT 65535 . +$TTL 300 ; 5 minutes +s NS ns.s +$ORIGIN s.example. +ns A 73.80.65.49 +$ORIGIN example. +$TTL 3600 ; 1 hour +sig01 SIG NXT 1 3 3600 20000102030405 ( + 19961211100908 2143 foo + MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgi + WCn/GxHhai6VAuHAoNUz4YoU1tVfSCSqQYn6//11U6Nl + d80jEeC8aTrO+KKmCaY= ) +srv01 SRV 0 0 0 . +srv02 SRV 65535 65535 65535 old-slow-box.example.com. +$TTL 301 ; 5 minutes 1 second +t A 73.80.65.49 +$TTL 3600 ; 1 hour +txt01 TXT "foo" +txt02 TXT "foo" "bar" +txt03 TXT "foo" +txt04 TXT "foo" "bar" +txt05 TXT "foo bar" +txt06 TXT "foo bar" +txt07 TXT "foo bar" +txt08 TXT "foo\010bar" +txt09 TXT "foo\010bar" +txt10 TXT "foo bar" +txt11 TXT "\"foo\"" +txt12 TXT "\"foo\"" +$TTL 300 ; 5 minutes +u TXT "txt-not-in-nxt" +$ORIGIN u.example. +a A 73.80.65.49 +b A 73.80.65.49 +$ORIGIN example. +$TTL 3600 ; 1 hour +wks01 WKS 10.0.0.1 6 ( 0 1 2 21 23 ) +wks02 WKS 10.0.0.1 17 ( 0 1 2 53 ) +wks03 WKS 10.0.0.2 6 ( 65535 ) +x2501 X25 "123456789" diff --git a/bin/tests/system/notify/ns2/example2.db b/bin/tests/system/notify/ns2/example2.db new file mode 100644 index 0000000..93ae040 --- /dev/null +++ b/bin/tests/system/notify/ns2/example2.db @@ -0,0 +1,150 @@ +; Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +; Copyright (C) 2000-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. + +; $Id: example2.db,v 1.12 2007/06/19 23:47:04 tbox Exp $ + +$ORIGIN . +$TTL 300 ; 5 minutes +example IN SOA mname1. . ( + 2 ; serial + 300 ; refresh (300 seconds) + 300 ; retry (300 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) +example. NS ns2.example. +ns2.example. A 10.53.0.2 +example. NS ns3.example. +ns3.example. A 10.53.0.3 + +$ORIGIN example. +a A 10.0.0.2 +$TTL 3600 ; 1 hour +a01 A 0.0.0.0 +a02 A 255.255.255.255 +a601 AAAA ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff +afsdb01 AFSDB 0 hostname +afsdb02 AFSDB 65535 . +$TTL 300 ; 5 minutes +b CNAME foo.net. +c A 73.80.65.49 +$TTL 3600 ; 1 hour +cert01 CERT 65534 65535 PRIVATEOID ( + MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgi + WCn/GxHhai6VAuHAoNUz4YoU1tVfSCSqQYn6//11U6Nl + d80jEeC8aTrO+KKmCaY= ) +cname01 CNAME cname-target. +cname02 CNAME cname-target +cname03 CNAME . +$TTL 300 ; 5 minutes +d A 73.80.65.49 +$TTL 3600 ; 1 hour +dname01 DNAME dname-target. +dname02 DNAME dname-target +dname03 DNAME . +$TTL 300 ; 5 minutes +e MX 10 mail + TXT "one" + TXT "three" + TXT "two" + A 73.80.65.49 + A 73.80.65.50 + A 73.80.65.52 + A 73.80.65.51 +f A 73.80.65.52 +$TTL 3600 ; 1 hour +gpos01 GPOS "-22.6882" "116.8652" "250.0" +gpos02 GPOS "" "" "" +hinfo01 HINFO "Generic PC clone" "NetBSD-1.4" +hinfo02 HINFO "PC" "NetBSD" +isdn01 ISDN "isdn-address" +isdn02 ISDN "isdn-address" "subaddress" +isdn03 ISDN "isdn-address" +isdn04 ISDN "isdn-address" "subaddress" +key01 KEY 512 255 1 ( + AQMFD5raczCJHViKtLYhWGz8hMY9UGRuniJDBzC7w0aR + yzWZriO6i2odGWWQVucZqKVsENW91IOW4vqudngPZsY3 + GvQ/xVA8/7pyFj6b7Esga60zyGW6LFe9r8n6paHrlG5o + jqf0BaqHT+8= ) +kx01 KX 10 kdc +kx02 KX 10 . +loc01 LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m +loc02 LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m +mb01 MG madname +mb02 MG . +mg01 MG mgmname +mg02 MG . +minfo01 MINFO rmailbx emailbx +minfo02 MINFO . . +mr01 MR mrname +mr02 MR . +mx01 MX 10 mail +mx02 MX 10 . +naptr01 NAPTR 0 0 "" "" "" . +naptr02 NAPTR 65535 65535 "blurgh" "blorf" "blegh" foo. +nsap-ptr01 NSAP-PTR foo. + NSAP-PTR . +nsap01 NSAP 0x47000580005a0000000001e133ffffff00016100 +nsap02 NSAP 0x47000580005a0000000001e133ffffff00016100 +nxt01 NXT a.secure ( NS SOA MX SIG KEY LOC NXT ) +nxt02 NXT . ( NSAP-PTR NXT ) +nxt03 NXT . ( A ) +nxt04 NXT . ( 127 ) +ptr01 PTR example. +px01 PX 65535 foo. bar. +px02 PX 65535 . . +rp01 RP mbox-dname txt-dname +rp02 RP . . +rt01 RT 0 intermediate-host +rt02 RT 65535 . +$TTL 300 ; 5 minutes +s NS ns.s +$ORIGIN s.example. +ns A 73.80.65.49 +$ORIGIN example. +$TTL 3600 ; 1 hour +sig01 SIG NXT 1 3 3600 20000102030405 ( + 19961211100908 2143 foo + MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgi + WCn/GxHhai6VAuHAoNUz4YoU1tVfSCSqQYn6//11U6Nl + d80jEeC8aTrO+KKmCaY= ) +srv01 SRV 0 0 0 . +srv02 SRV 65535 65535 65535 old-slow-box.example.com. +$TTL 301 ; 5 minutes 1 second +t A 73.80.65.49 +$TTL 3600 ; 1 hour +txt01 TXT "foo" +txt02 TXT "foo" "bar" +txt03 TXT "foo" +txt04 TXT "foo" "bar" +txt05 TXT "foo bar" +txt06 TXT "foo bar" +txt07 TXT "foo bar" +txt08 TXT "foo\010bar" +txt09 TXT "foo\010bar" +txt10 TXT "foo bar" +txt11 TXT "\"foo\"" +txt12 TXT "\"foo\"" +$TTL 300 ; 5 minutes +u TXT "txt-not-in-nxt" +$ORIGIN u.example. +a A 73.80.65.49 +b A 73.80.65.49 +$ORIGIN example. +$TTL 3600 ; 1 hour +wks01 WKS 10.0.0.1 6 ( 0 1 2 21 23 ) +wks02 WKS 10.0.0.1 17 ( 0 1 2 53 ) +wks03 WKS 10.0.0.2 6 ( 65535 ) +x2501 X25 "123456789" diff --git a/bin/tests/system/notify/ns2/example3.db b/bin/tests/system/notify/ns2/example3.db new file mode 100644 index 0000000..3afbaa6 --- /dev/null +++ b/bin/tests/system/notify/ns2/example3.db @@ -0,0 +1,150 @@ +; Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +; Copyright (C) 2000-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. + +; $Id: example3.db,v 1.12 2007/06/19 23:47:04 tbox Exp $ + +$ORIGIN . +$TTL 300 ; 5 minutes +example IN SOA mname1. . ( + 3 ; serial + 300 ; refresh (300 seconds) + 300 ; retry (300 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) +example. NS ns2.example. +ns2.example. A 10.53.0.2 +example. NS ns3.example. +ns3.example. A 10.53.0.3 + +$ORIGIN example. +a A 10.0.0.3 +$TTL 3600 ; 1 hour +a01 A 0.0.0.0 +a02 A 255.255.255.255 +a601 AAAA ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff +afsdb01 AFSDB 0 hostname +afsdb02 AFSDB 65535 . +$TTL 300 ; 5 minutes +b CNAME foo.net. +c A 73.80.65.49 +$TTL 3600 ; 1 hour +cert01 CERT 65534 65535 PRIVATEOID ( + MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgi + WCn/GxHhai6VAuHAoNUz4YoU1tVfSCSqQYn6//11U6Nl + d80jEeC8aTrO+KKmCaY= ) +cname01 CNAME cname-target. +cname02 CNAME cname-target +cname03 CNAME . +$TTL 300 ; 5 minutes +d A 73.80.65.49 +$TTL 3600 ; 1 hour +dname01 DNAME dname-target. +dname02 DNAME dname-target +dname03 DNAME . +$TTL 300 ; 5 minutes +e MX 10 mail + TXT "one" + TXT "three" + TXT "two" + A 73.80.65.49 + A 73.80.65.50 + A 73.80.65.52 + A 73.80.65.51 +f A 73.80.65.52 +$TTL 3600 ; 1 hour +gpos01 GPOS "-22.6882" "116.8652" "250.0" +gpos02 GPOS "" "" "" +hinfo01 HINFO "Generic PC clone" "NetBSD-1.4" +hinfo02 HINFO "PC" "NetBSD" +isdn01 ISDN "isdn-address" +isdn02 ISDN "isdn-address" "subaddress" +isdn03 ISDN "isdn-address" +isdn04 ISDN "isdn-address" "subaddress" +key01 KEY 512 255 1 ( + AQMFD5raczCJHViKtLYhWGz8hMY9UGRuniJDBzC7w0aR + yzWZriO6i2odGWWQVucZqKVsENW91IOW4vqudngPZsY3 + GvQ/xVA8/7pyFj6b7Esga60zyGW6LFe9r8n6paHrlG5o + jqf0BaqHT+8= ) +kx01 KX 10 kdc +kx02 KX 10 . +loc01 LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m +loc02 LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m +mb01 MG madname +mb02 MG . +mg01 MG mgmname +mg02 MG . +minfo01 MINFO rmailbx emailbx +minfo02 MINFO . . +mr01 MR mrname +mr02 MR . +mx01 MX 10 mail +mx02 MX 10 . +naptr01 NAPTR 0 0 "" "" "" . +naptr02 NAPTR 65535 65535 "blurgh" "blorf" "blegh" foo. +nsap-ptr01 NSAP-PTR foo. + NSAP-PTR . +nsap01 NSAP 0x47000580005a0000000001e133ffffff00016100 +nsap02 NSAP 0x47000580005a0000000001e133ffffff00016100 +nxt01 NXT a.secure ( NS SOA MX SIG KEY LOC NXT ) +nxt02 NXT . ( NSAP-PTR NXT ) +nxt03 NXT . ( A ) +nxt04 NXT . ( 127 ) +ptr01 PTR example. +px01 PX 65535 foo. bar. +px02 PX 65535 . . +rp01 RP mbox-dname txt-dname +rp02 RP . . +rt01 RT 0 intermediate-host +rt02 RT 65535 . +$TTL 300 ; 5 minutes +s NS ns.s +$ORIGIN s.example. +ns A 73.80.65.49 +$ORIGIN example. +$TTL 3600 ; 1 hour +sig01 SIG NXT 1 3 3600 20000102030405 ( + 19961211100908 2143 foo + MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgi + WCn/GxHhai6VAuHAoNUz4YoU1tVfSCSqQYn6//11U6Nl + d80jEeC8aTrO+KKmCaY= ) +srv01 SRV 0 0 0 . +srv02 SRV 65535 65535 65535 old-slow-box.example.com. +$TTL 301 ; 5 minutes 1 second +t A 73.80.65.49 +$TTL 3600 ; 1 hour +txt01 TXT "foo" +txt02 TXT "foo" "bar" +txt03 TXT "foo" +txt04 TXT "foo" "bar" +txt05 TXT "foo bar" +txt06 TXT "foo bar" +txt07 TXT "foo bar" +txt08 TXT "foo\010bar" +txt09 TXT "foo\010bar" +txt10 TXT "foo bar" +txt11 TXT "\"foo\"" +txt12 TXT "\"foo\"" +$TTL 300 ; 5 minutes +u TXT "txt-not-in-nxt" +$ORIGIN u.example. +a A 73.80.65.49 +b A 73.80.65.49 +$ORIGIN example. +$TTL 3600 ; 1 hour +wks01 WKS 10.0.0.1 6 ( 0 1 2 21 23 ) +wks02 WKS 10.0.0.1 17 ( 0 1 2 53 ) +wks03 WKS 10.0.0.2 6 ( 65535 ) +x2501 X25 "123456789" diff --git a/bin/tests/system/notify/ns2/example4.db b/bin/tests/system/notify/ns2/example4.db new file mode 100644 index 0000000..8c18a37 --- /dev/null +++ b/bin/tests/system/notify/ns2/example4.db @@ -0,0 +1,150 @@ +; Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +; Copyright (C) 2000-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. + +; $Id: example4.db,v 1.12 2007/06/19 23:47:04 tbox Exp $ + +$ORIGIN . +$TTL 300 ; 5 minutes +example IN SOA mname1. . ( + 4 ; serial + 300 ; refresh (300 seconds) + 300 ; retry (300 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) +example. NS ns2.example. +ns2.example. A 10.53.0.2 +example. NS ns3.example. +ns3.example. A 10.53.0.3 + +$ORIGIN example. +a A 10.0.0.4 +$TTL 3600 ; 1 hour +a01 A 0.0.0.0 +a02 A 255.255.255.255 +a601 AAAA ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff +afsdb01 AFSDB 0 hostname +afsdb02 AFSDB 65535 . +$TTL 300 ; 5 minutes +b CNAME foo.net. +c A 73.80.65.49 +$TTL 3600 ; 1 hour +cert01 CERT 65534 65535 PRIVATEOID ( + MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgi + WCn/GxHhai6VAuHAoNUz4YoU1tVfSCSqQYn6//11U6Nl + d80jEeC8aTrO+KKmCaY= ) +cname01 CNAME cname-target. +cname02 CNAME cname-target +cname03 CNAME . +$TTL 300 ; 5 minutes +d A 73.80.65.49 +$TTL 3600 ; 1 hour +dname01 DNAME dname-target. +dname02 DNAME dname-target +dname03 DNAME . +$TTL 300 ; 5 minutes +e MX 10 mail + TXT "one" + TXT "three" + TXT "two" + A 73.80.65.49 + A 73.80.65.50 + A 73.80.65.52 + A 73.80.65.51 +f A 73.80.65.52 +$TTL 3600 ; 1 hour +gpos01 GPOS "-22.6882" "116.8652" "250.0" +gpos02 GPOS "" "" "" +hinfo01 HINFO "Generic PC clone" "NetBSD-1.4" +hinfo02 HINFO "PC" "NetBSD" +isdn01 ISDN "isdn-address" +isdn02 ISDN "isdn-address" "subaddress" +isdn03 ISDN "isdn-address" +isdn04 ISDN "isdn-address" "subaddress" +key01 KEY 512 255 1 ( + AQMFD5raczCJHViKtLYhWGz8hMY9UGRuniJDBzC7w0aR + yzWZriO6i2odGWWQVucZqKVsENW91IOW4vqudngPZsY3 + GvQ/xVA8/7pyFj6b7Esga60zyGW6LFe9r8n6paHrlG5o + jqf0BaqHT+8= ) +kx01 KX 10 kdc +kx02 KX 10 . +loc01 LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m +loc02 LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m +mb01 MG madname +mb02 MG . +mg01 MG mgmname +mg02 MG . +minfo01 MINFO rmailbx emailbx +minfo02 MINFO . . +mr01 MR mrname +mr02 MR . +mx01 MX 10 mail +mx02 MX 10 . +naptr01 NAPTR 0 0 "" "" "" . +naptr02 NAPTR 65535 65535 "blurgh" "blorf" "blegh" foo. +nsap-ptr01 NSAP-PTR foo. + NSAP-PTR . +nsap01 NSAP 0x47000580005a0000000001e133ffffff00016100 +nsap02 NSAP 0x47000580005a0000000001e133ffffff00016100 +nxt01 NXT a.secure ( NS SOA MX SIG KEY LOC NXT ) +nxt02 NXT . ( NSAP-PTR NXT ) +nxt03 NXT . ( A ) +nxt04 NXT . ( 127 ) +ptr01 PTR example. +px01 PX 65535 foo. bar. +px02 PX 65535 . . +rp01 RP mbox-dname txt-dname +rp02 RP . . +rt01 RT 0 intermediate-host +rt02 RT 65535 . +$TTL 300 ; 5 minutes +s NS ns.s +$ORIGIN s.example. +ns A 73.80.65.49 +$ORIGIN example. +$TTL 3600 ; 1 hour +sig01 SIG NXT 1 3 3600 20000102030405 ( + 19961211100908 2143 foo + MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgi + WCn/GxHhai6VAuHAoNUz4YoU1tVfSCSqQYn6//11U6Nl + d80jEeC8aTrO+KKmCaY= ) +srv01 SRV 0 0 0 . +srv02 SRV 65535 65535 65535 old-slow-box.example.com. +$TTL 301 ; 5 minutes 1 second +t A 73.80.65.49 +$TTL 3600 ; 1 hour +txt01 TXT "foo" +txt02 TXT "foo" "bar" +txt03 TXT "foo" +txt04 TXT "foo" "bar" +txt05 TXT "foo bar" +txt06 TXT "foo bar" +txt07 TXT "foo bar" +txt08 TXT "foo\010bar" +txt09 TXT "foo\010bar" +txt10 TXT "foo bar" +txt11 TXT "\"foo\"" +txt12 TXT "\"foo\"" +$TTL 300 ; 5 minutes +u TXT "txt-not-in-nxt" +$ORIGIN u.example. +a A 73.80.65.49 +b A 73.80.65.49 +$ORIGIN example. +$TTL 3600 ; 1 hour +wks01 WKS 10.0.0.1 6 ( 0 1 2 21 23 ) +wks02 WKS 10.0.0.1 17 ( 0 1 2 53 ) +wks03 WKS 10.0.0.2 6 ( 65535 ) +x2501 X25 "123456789" diff --git a/bin/tests/system/notify/ns2/named.conf b/bin/tests/system/notify/ns2/named.conf new file mode 100644 index 0000000..f57a107 --- /dev/null +++ b/bin/tests/system/notify/ns2/named.conf @@ -0,0 +1,43 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.20 2007/06/19 23:47:04 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.2; + notify-source 10.53.0.2; + transfer-source 10.53.0.2; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.2; }; + listen-on-v6 { none; }; + recursion no; + notify yes; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +zone "example" { + type master; + file "example.db"; + allow-update { any; }; +}; diff --git a/bin/tests/system/notify/ns3/named.conf b/bin/tests/system/notify/ns3/named.conf new file mode 100644 index 0000000..5316957 --- /dev/null +++ b/bin/tests/system/notify/ns3/named.conf @@ -0,0 +1,46 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.24 2007/06/18 23:47:29 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.3; + notify-source 10.53.0.3; + transfer-source 10.53.0.3; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.3; }; + listen-on-v6 { none; }; + recursion yes; + acache-enable yes; + notify yes; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +zone "example" { + type slave; + masters { 10.53.0.2; }; + file "example.bk"; +}; + + diff --git a/bin/tests/system/notify/setup.sh b/bin/tests/system/notify/setup.sh new file mode 100644 index 0000000..eebcbf1 --- /dev/null +++ b/bin/tests/system/notify/setup.sh @@ -0,0 +1,20 @@ +#!/bin/sh +# +# 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. + +# $Id: setup.sh,v 1.10 2007/06/19 23:47:04 tbox Exp $ + +cp -f ns2/example1.db ns2/example.db diff --git a/bin/tests/system/notify/tests.sh b/bin/tests/system/notify/tests.sh new file mode 100644 index 0000000..0f14240 --- /dev/null +++ b/bin/tests/system/notify/tests.sh @@ -0,0 +1,92 @@ +#!/bin/sh +# +# 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. + +# $Id: tests.sh,v 1.33 2007/06/19 23:47:04 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +status=0 + +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd a.example.\ + @10.53.0.2 a -p 5300 > dig.out.ns2 || status=1 +grep ";" dig.out.ns2 + +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd a.example.\ + @10.53.0.3 a -p 5300 > dig.out.ns3 || status=1 +grep ";" dig.out.ns3 + +$PERL ../digcomp.pl dig.out.ns2 dig.out.ns3 || status=1 + +rm -f ns2/example.db +cp -f ns2/example2.db ns2/example.db +kill -HUP `cat ns2/named.pid` +sleep 45 + +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd a.example.\ + @10.53.0.2 a -p 5300 > dig.out.ns2 || status=1 +grep ";" dig.out.ns2 + +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd a.example.\ + @10.53.0.3 a -p 5300 > dig.out.ns3 || status=1 +grep ";" dig.out.ns3 + +$PERL ../digcomp.pl dig.out.ns2 dig.out.ns3 || status=1 + +### +# Why does not doing the stop not cause problems with the start further on? +### +$PERL $SYSTEMTESTTOP/stop.pl . ns3 + +rm -f ns2/example.db +cp -f ns2/example3.db ns2/example.db +kill -HUP `cat ns2/named.pid` +sleep 45 + +$PERL $SYSTEMTESTTOP/start.pl . ns3 + +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd a.example.\ + @10.53.0.2 a -p 5300 > dig.out.ns2 || status=1 +grep ";" dig.out.ns2 + +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd a.example.\ + @10.53.0.3 a -p 5300 > dig.out.ns3 || status=1 +grep ";" dig.out.ns3 + +$PERL ../digcomp.pl dig.out.ns2 dig.out.ns3 || status=1 + +$PERL $SYSTEMTESTTOP/stop.pl . ns2 + +rm -f ns2/example.db +cp -f ns2/example4.db ns2/example.db + +$PERL $SYSTEMTESTTOP/start.pl . ns2 + +sleep 45 + +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd a.example.\ + @10.53.0.2 a -p 5300 > dig.out.ns2 || status=1 +grep ";" dig.out.ns2 + +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd a.example.\ + @10.53.0.3 a -p 5300 > dig.out.ns3 || status=1 +grep ";" dig.out.ns3 + +$PERL ../digcomp.pl dig.out.ns2 dig.out.ns3 || status=1 + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/nsupdate/clean.sh b/bin/tests/system/nsupdate/clean.sh new file mode 100644 index 0000000..565c97b --- /dev/null +++ b/bin/tests/system/nsupdate/clean.sh @@ -0,0 +1,28 @@ +#!/bin/sh +# +# 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. + +# $Id: clean.sh,v 1.12 2007/09/26 03:22:44 marka Exp $ + +# +# Clean up after zone transfer tests. +# + +rm -f dig.out.ns1 dig.out.ns2 dig.out.ns1.after ns1/*.jnl ns2/*.jnl \ + ns1/example.db ns1/update.db +rm -f ns2/example.bk +rm -f ns2/update.bk +rm -f */named.memstats diff --git a/bin/tests/system/nsupdate/knowngood.ns1.after b/bin/tests/system/nsupdate/knowngood.ns1.after new file mode 100644 index 0000000..32e1c8d --- /dev/null +++ b/bin/tests/system/nsupdate/knowngood.ns1.after @@ -0,0 +1,99 @@ +example.nil. 300 IN SOA ns1.example.nil. hostmaster.example.nil. 2 2000 2000 1814400 3600 +example.nil. 300 IN NS ns1.example.nil. +example.nil. 300 IN NS ns2.example.nil. +*.example.nil. 300 IN MX 10 mail.example.nil. +a.example.nil. 300 IN TXT "foo foo foo" +a.example.nil. 300 IN PTR foo.net. +a01.example.nil. 3600 IN A 0.0.0.0 +a02.example.nil. 3600 IN A 255.255.255.255 +a601.example.nil. 3600 IN AAAA ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff +afsdb01.example.nil. 3600 IN AFSDB 0 hostname.example.nil. +afsdb02.example.nil. 3600 IN AFSDB 65535 . +b.example.nil. 300 IN CNAME foo.net. +c.example.nil. 300 IN A 73.80.65.49 +cert01.example.nil. 3600 IN CERT 65534 65535 PRIVATEOID MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgiWCn/GxHhai6V AuHAoNUz4YoU1tVfSCSqQYn6//11U6Nld80jEeC8aTrO+KKmCaY= +cname01.example.nil. 3600 IN CNAME cname-target. +cname02.example.nil. 3600 IN CNAME cname-target.example.nil. +cname03.example.nil. 3600 IN CNAME . +d.example.nil. 300 IN A 73.80.65.49 +dname01.example.nil. 3600 IN DNAME dname-target. +dname02.example.nil. 3600 IN DNAME dname-target.example.nil. +dname03.example.nil. 3600 IN DNAME . +e.example.nil. 300 IN MX 10 mail.example.nil. +e.example.nil. 300 IN TXT "one" +e.example.nil. 300 IN TXT "two" +e.example.nil. 300 IN TXT "three" +e.example.nil. 300 IN A 73.80.65.49 +e.example.nil. 300 IN A 73.80.65.50 +e.example.nil. 300 IN A 73.80.65.51 +e.example.nil. 300 IN A 73.80.65.52 +f.example.nil. 300 IN A 73.80.65.52 +gpos01.example.nil. 3600 IN GPOS "-22.6882" "116.8652" "250.0" +gpos02.example.nil. 3600 IN GPOS "" "" "" +hinfo01.example.nil. 3600 IN HINFO "Generic PC clone" "NetBSD-1.4" +hinfo02.example.nil. 3600 IN HINFO "PC" "NetBSD" +isdn01.example.nil. 3600 IN ISDN "isdn-address" +isdn02.example.nil. 3600 IN ISDN "isdn-address" "subaddress" +isdn03.example.nil. 3600 IN ISDN "isdn-address" +isdn04.example.nil. 3600 IN ISDN "isdn-address" "subaddress" +key01.example.nil. 3600 IN KEY 512 255 1 AQMFD5raczCJHViKtLYhWGz8hMY9UGRuniJDBzC7w0aRyzWZriO6i2od GWWQVucZqKVsENW91IOW4vqudngPZsY3GvQ/xVA8/7pyFj6b7Esga60z yGW6LFe9r8n6paHrlG5ojqf0BaqHT+8= +kx01.example.nil. 3600 IN KX 10 kdc.example.nil. +kx02.example.nil. 3600 IN KX 10 . +loc01.example.nil. 3600 IN LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m +loc02.example.nil. 3600 IN LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m +mb01.example.nil. 3600 IN MG madname.example.nil. +mb02.example.nil. 3600 IN MG . +mg01.example.nil. 3600 IN MG mgmname.example.nil. +mg02.example.nil. 3600 IN MG . +minfo01.example.nil. 3600 IN MINFO rmailbx.example.nil. emailbx.example.nil. +minfo02.example.nil. 3600 IN MINFO . . +mr01.example.nil. 3600 IN MR mrname.example.nil. +mr02.example.nil. 3600 IN MR . +mx01.example.nil. 3600 IN MX 10 mail.example.nil. +mx02.example.nil. 3600 IN MX 10 . +naptr01.example.nil. 3600 IN NAPTR 0 0 "" "" "" . +naptr02.example.nil. 3600 IN NAPTR 65535 65535 "blurgh" "blorf" "blegh" foo. +ns1.example.nil. 300 IN A 10.53.0.1 +ns2.example.nil. 300 IN A 10.53.0.2 +nsap-ptr01.example.nil. 3600 IN NSAP-PTR . +nsap-ptr01.example.nil. 3600 IN NSAP-PTR foo. +nsap01.example.nil. 3600 IN NSAP 0x47000580005a0000000001e133ffffff00016100 +nsap02.example.nil. 3600 IN NSAP 0x47000580005a0000000001e133ffffff00016100 +nxt01.example.nil. 3600 IN NXT a.secure.example.nil. NS SOA MX SIG KEY LOC NXT +nxt02.example.nil. 3600 IN NXT . NSAP-PTR NXT +nxt03.example.nil. 3600 IN NXT . A +nxt04.example.nil. 3600 IN NXT . 127 +ptr01.example.nil. 3600 IN PTR example.nil. +px01.example.nil. 3600 IN PX 65535 foo. bar. +px02.example.nil. 3600 IN PX 65535 . . +rp01.example.nil. 3600 IN RP mbox-dname.example.nil. txt-dname.example.nil. +rp02.example.nil. 3600 IN RP . . +rt01.example.nil. 3600 IN RT 0 intermediate-host.example.nil. +rt02.example.nil. 3600 IN RT 65535 . +s.example.nil. 300 IN NS ns.s.example.nil. +ns.s.example.nil. 300 IN A 73.80.65.49 +sig01.example.nil. 3600 IN SIG NXT 1 3 3600 20000102030405 19961211100908 2143 foo.example.nil. MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgiWCn/GxHhai6V AuHAoNUz4YoU1tVfSCSqQYn6//11U6Nld80jEeC8aTrO+KKmCaY= +srv01.example.nil. 3600 IN SRV 0 0 0 . +srv02.example.nil. 3600 IN SRV 65535 65535 65535 old-slow-box.example.com. +txt01.example.nil. 3600 IN TXT "foo" +txt02.example.nil. 3600 IN TXT "foo" "bar" +txt03.example.nil. 3600 IN TXT "foo" +txt04.example.nil. 3600 IN TXT "foo" "bar" +txt05.example.nil. 3600 IN TXT "foo bar" +txt06.example.nil. 3600 IN TXT "foo bar" +txt07.example.nil. 3600 IN TXT "foo bar" +txt08.example.nil. 3600 IN TXT "foo\010bar" +txt09.example.nil. 3600 IN TXT "foo\010bar" +txt10.example.nil. 3600 IN TXT "foo bar" +txt11.example.nil. 3600 IN TXT "\"foo\"" +txt12.example.nil. 3600 IN TXT "\"foo\"" +u.example.nil. 300 IN TXT "txt-not-in-nxt" +a.u.example.nil. 300 IN A 73.80.65.49 +b.u.example.nil. 300 IN A 73.80.65.49 +updated.example.nil. 600 IN TXT "Foo" +updated.example.nil. 600 IN A 10.10.10.1 +wks01.example.nil. 3600 IN WKS 10.0.0.1 6 0 1 2 21 23 +wks02.example.nil. 3600 IN WKS 10.0.0.1 17 0 1 2 53 +wks03.example.nil. 3600 IN WKS 10.0.0.2 6 65535 +x2501.example.nil. 3600 IN X25 "123456789" +example.nil. 300 IN SOA ns1.example.nil. hostmaster.example.nil. 2 2000 2000 1814400 3600 diff --git a/bin/tests/system/nsupdate/knowngood.ns1.afterstop b/bin/tests/system/nsupdate/knowngood.ns1.afterstop new file mode 100644 index 0000000..e871d4c --- /dev/null +++ b/bin/tests/system/nsupdate/knowngood.ns1.afterstop @@ -0,0 +1,3 @@ +updated4.example.nil. 600 IN A 10.10.10.3 +example.nil. 300 IN NS ns1.example.nil. +example.nil. 300 IN NS ns2.example.nil. diff --git a/bin/tests/system/nsupdate/knowngood.ns1.before b/bin/tests/system/nsupdate/knowngood.ns1.before new file mode 100644 index 0000000..e108c2a --- /dev/null +++ b/bin/tests/system/nsupdate/knowngood.ns1.before @@ -0,0 +1,98 @@ +example.nil. 300 IN SOA ns1.example.nil. hostmaster.example.nil. 1 2000 2000 1814400 3600 +example.nil. 300 IN NS ns1.example.nil. +example.nil. 300 IN NS ns2.example.nil. +*.example.nil. 300 IN MX 10 mail.example.nil. +a.example.nil. 300 IN TXT "foo foo foo" +a.example.nil. 300 IN PTR foo.net. +a01.example.nil. 3600 IN A 0.0.0.0 +a02.example.nil. 3600 IN A 255.255.255.255 +a601.example.nil. 3600 IN AAAA ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff +afsdb01.example.nil. 3600 IN AFSDB 0 hostname.example.nil. +afsdb02.example.nil. 3600 IN AFSDB 65535 . +b.example.nil. 300 IN CNAME foo.net. +c.example.nil. 300 IN A 73.80.65.49 +cert01.example.nil. 3600 IN CERT 65534 65535 PRIVATEOID MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgiWCn/GxHhai6V AuHAoNUz4YoU1tVfSCSqQYn6//11U6Nld80jEeC8aTrO+KKmCaY= +cname01.example.nil. 3600 IN CNAME cname-target. +cname02.example.nil. 3600 IN CNAME cname-target.example.nil. +cname03.example.nil. 3600 IN CNAME . +d.example.nil. 300 IN A 73.80.65.49 +dname01.example.nil. 3600 IN DNAME dname-target. +dname02.example.nil. 3600 IN DNAME dname-target.example.nil. +dname03.example.nil. 3600 IN DNAME . +e.example.nil. 300 IN MX 10 mail.example.nil. +e.example.nil. 300 IN TXT "one" +e.example.nil. 300 IN TXT "two" +e.example.nil. 300 IN TXT "three" +e.example.nil. 300 IN A 73.80.65.49 +e.example.nil. 300 IN A 73.80.65.50 +e.example.nil. 300 IN A 73.80.65.51 +e.example.nil. 300 IN A 73.80.65.52 +f.example.nil. 300 IN A 73.80.65.52 +gpos01.example.nil. 3600 IN GPOS "-22.6882" "116.8652" "250.0" +gpos02.example.nil. 3600 IN GPOS "" "" "" +hinfo01.example.nil. 3600 IN HINFO "Generic PC clone" "NetBSD-1.4" +hinfo02.example.nil. 3600 IN HINFO "PC" "NetBSD" +isdn01.example.nil. 3600 IN ISDN "isdn-address" +isdn02.example.nil. 3600 IN ISDN "isdn-address" "subaddress" +isdn03.example.nil. 3600 IN ISDN "isdn-address" +isdn04.example.nil. 3600 IN ISDN "isdn-address" "subaddress" +key01.example.nil. 3600 IN KEY 512 255 1 AQMFD5raczCJHViKtLYhWGz8hMY9UGRuniJDBzC7w0aRyzWZriO6i2od GWWQVucZqKVsENW91IOW4vqudngPZsY3GvQ/xVA8/7pyFj6b7Esga60z yGW6LFe9r8n6paHrlG5ojqf0BaqHT+8= +kx01.example.nil. 3600 IN KX 10 kdc.example.nil. +kx02.example.nil. 3600 IN KX 10 . +loc01.example.nil. 3600 IN LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m +loc02.example.nil. 3600 IN LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m +mb01.example.nil. 3600 IN MG madname.example.nil. +mb02.example.nil. 3600 IN MG . +mg01.example.nil. 3600 IN MG mgmname.example.nil. +mg02.example.nil. 3600 IN MG . +minfo01.example.nil. 3600 IN MINFO rmailbx.example.nil. emailbx.example.nil. +minfo02.example.nil. 3600 IN MINFO . . +mr01.example.nil. 3600 IN MR mrname.example.nil. +mr02.example.nil. 3600 IN MR . +mx01.example.nil. 3600 IN MX 10 mail.example.nil. +mx02.example.nil. 3600 IN MX 10 . +naptr01.example.nil. 3600 IN NAPTR 0 0 "" "" "" . +naptr02.example.nil. 3600 IN NAPTR 65535 65535 "blurgh" "blorf" "blegh" foo. +ns1.example.nil. 300 IN A 10.53.0.1 +ns2.example.nil. 300 IN A 10.53.0.2 +nsap-ptr01.example.nil. 3600 IN NSAP-PTR . +nsap-ptr01.example.nil. 3600 IN NSAP-PTR foo. +nsap01.example.nil. 3600 IN NSAP 0x47000580005a0000000001e133ffffff00016100 +nsap02.example.nil. 3600 IN NSAP 0x47000580005a0000000001e133ffffff00016100 +nxt01.example.nil. 3600 IN NXT a.secure.example.nil. NS SOA MX SIG KEY LOC NXT +nxt02.example.nil. 3600 IN NXT . NSAP-PTR NXT +nxt03.example.nil. 3600 IN NXT . A +nxt04.example.nil. 3600 IN NXT . 127 +ptr01.example.nil. 3600 IN PTR example.nil. +px01.example.nil. 3600 IN PX 65535 foo. bar. +px02.example.nil. 3600 IN PX 65535 . . +rp01.example.nil. 3600 IN RP mbox-dname.example.nil. txt-dname.example.nil. +rp02.example.nil. 3600 IN RP . . +rt01.example.nil. 3600 IN RT 0 intermediate-host.example.nil. +rt02.example.nil. 3600 IN RT 65535 . +s.example.nil. 300 IN NS ns.s.example.nil. +ns.s.example.nil. 300 IN A 73.80.65.49 +sig01.example.nil. 3600 IN SIG NXT 1 3 3600 20000102030405 19961211100908 2143 foo.example.nil. MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgiWCn/GxHhai6V AuHAoNUz4YoU1tVfSCSqQYn6//11U6Nld80jEeC8aTrO+KKmCaY= +srv01.example.nil. 3600 IN SRV 0 0 0 . +srv02.example.nil. 3600 IN SRV 65535 65535 65535 old-slow-box.example.com. +t.example.nil. 301 IN A 73.80.65.49 +txt01.example.nil. 3600 IN TXT "foo" +txt02.example.nil. 3600 IN TXT "foo" "bar" +txt03.example.nil. 3600 IN TXT "foo" +txt04.example.nil. 3600 IN TXT "foo" "bar" +txt05.example.nil. 3600 IN TXT "foo bar" +txt06.example.nil. 3600 IN TXT "foo bar" +txt07.example.nil. 3600 IN TXT "foo bar" +txt08.example.nil. 3600 IN TXT "foo\010bar" +txt09.example.nil. 3600 IN TXT "foo\010bar" +txt10.example.nil. 3600 IN TXT "foo bar" +txt11.example.nil. 3600 IN TXT "\"foo\"" +txt12.example.nil. 3600 IN TXT "\"foo\"" +u.example.nil. 300 IN TXT "txt-not-in-nxt" +a.u.example.nil. 300 IN A 73.80.65.49 +b.u.example.nil. 300 IN A 73.80.65.49 +wks01.example.nil. 3600 IN WKS 10.0.0.1 6 0 1 2 21 23 +wks02.example.nil. 3600 IN WKS 10.0.0.1 17 0 1 2 53 +wks03.example.nil. 3600 IN WKS 10.0.0.2 6 65535 +x2501.example.nil. 3600 IN X25 "123456789" +example.nil. 300 IN SOA ns1.example.nil. hostmaster.example.nil. 1 2000 2000 1814400 3600 diff --git a/bin/tests/system/nsupdate/ns1/example1.db b/bin/tests/system/nsupdate/ns1/example1.db new file mode 100644 index 0000000..e8856fe --- /dev/null +++ b/bin/tests/system/nsupdate/ns1/example1.db @@ -0,0 +1,152 @@ +; Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +; Copyright (C) 2000-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. + +; $Id: example1.db,v 1.8 2007/06/19 23:47:04 tbox Exp $ + +$ORIGIN . +$TTL 300 ; 5 minutes +example.nil IN SOA ns1.example.nil. hostmaster.example.nil. ( + 1 ; serial + 2000 ; refresh (2000 seconds) + 2000 ; retry (2000 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) +example.nil. NS ns1.example.nil. +ns1.example.nil. A 10.53.0.1 +example.nil. NS ns2.example.nil. +ns2.example.nil. A 10.53.0.2 + +$ORIGIN example.nil. +* MX 10 mail +a TXT "foo foo foo" + PTR foo.net. +$TTL 3600 ; 1 hour +a01 A 0.0.0.0 +a02 A 255.255.255.255 +a601 AAAA ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff +afsdb01 AFSDB 0 hostname +afsdb02 AFSDB 65535 . +$TTL 300 ; 5 minutes +b CNAME foo.net. +c A 73.80.65.49 +$TTL 3600 ; 1 hour +cert01 CERT 65534 65535 PRIVATEOID ( + MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgi + WCn/GxHhai6VAuHAoNUz4YoU1tVfSCSqQYn6//11U6Nl + d80jEeC8aTrO+KKmCaY= ) +cname01 CNAME cname-target. +cname02 CNAME cname-target +cname03 CNAME . +$TTL 300 ; 5 minutes +d A 73.80.65.49 +$TTL 3600 ; 1 hour +dname01 DNAME dname-target. +dname02 DNAME dname-target +dname03 DNAME . +$TTL 300 ; 5 minutes +e MX 10 mail + TXT "one" + TXT "three" + TXT "two" + A 73.80.65.49 + A 73.80.65.50 + A 73.80.65.52 + A 73.80.65.51 +f A 73.80.65.52 +$TTL 3600 ; 1 hour +gpos01 GPOS "-22.6882" "116.8652" "250.0" +gpos02 GPOS "" "" "" +hinfo01 HINFO "Generic PC clone" "NetBSD-1.4" +hinfo02 HINFO "PC" "NetBSD" +isdn01 ISDN "isdn-address" +isdn02 ISDN "isdn-address" "subaddress" +isdn03 ISDN "isdn-address" +isdn04 ISDN "isdn-address" "subaddress" +key01 KEY 512 255 1 ( + AQMFD5raczCJHViKtLYhWGz8hMY9UGRuniJDBzC7w0aR + yzWZriO6i2odGWWQVucZqKVsENW91IOW4vqudngPZsY3 + GvQ/xVA8/7pyFj6b7Esga60zyGW6LFe9r8n6paHrlG5o + jqf0BaqHT+8= ) +kx01 KX 10 kdc +kx02 KX 10 . +loc01 LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m +loc02 LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m +mb01 MG madname +mb02 MG . +mg01 MG mgmname +mg02 MG . +minfo01 MINFO rmailbx emailbx +minfo02 MINFO . . +mr01 MR mrname +mr02 MR . +mx01 MX 10 mail +mx02 MX 10 . +naptr01 NAPTR 0 0 "" "" "" . +naptr02 NAPTR 65535 65535 "blurgh" "blorf" "blegh" foo. +nsap-ptr01 NSAP-PTR foo. + NSAP-PTR . +nsap01 NSAP 0x47000580005a0000000001e133ffffff00016100 +nsap02 NSAP 0x47000580005a0000000001e133ffffff00016100 +nxt01 NXT a.secure ( NS SOA MX SIG KEY LOC NXT ) +nxt02 NXT . ( NSAP-PTR NXT ) +nxt03 NXT . ( A ) +nxt04 NXT . ( 127 ) +ptr01 PTR example.nil. +px01 PX 65535 foo. bar. +px02 PX 65535 . . +rp01 RP mbox-dname txt-dname +rp02 RP . . +rt01 RT 0 intermediate-host +rt02 RT 65535 . +$TTL 300 ; 5 minutes +s NS ns.s +$ORIGIN s.example.nil. +ns A 73.80.65.49 +$ORIGIN example.nil. +$TTL 3600 ; 1 hour +sig01 SIG NXT 1 3 3600 20000102030405 ( + 19961211100908 2143 foo + MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgi + WCn/GxHhai6VAuHAoNUz4YoU1tVfSCSqQYn6//11U6Nl + d80jEeC8aTrO+KKmCaY= ) +srv01 SRV 0 0 0 . +srv02 SRV 65535 65535 65535 old-slow-box.example.com. +$TTL 301 ; 5 minutes 1 second +t A 73.80.65.49 +$TTL 3600 ; 1 hour +txt01 TXT "foo" +txt02 TXT "foo" "bar" +txt03 TXT "foo" +txt04 TXT "foo" "bar" +txt05 TXT "foo bar" +txt06 TXT "foo bar" +txt07 TXT "foo bar" +txt08 TXT "foo\010bar" +txt09 TXT "foo\010bar" +txt10 TXT "foo bar" +txt11 TXT "\"foo\"" +txt12 TXT "\"foo\"" +$TTL 300 ; 5 minutes +u TXT "txt-not-in-nxt" +$ORIGIN u.example.nil. +a A 73.80.65.49 +b A 73.80.65.49 +$ORIGIN example.nil. +$TTL 3600 ; 1 hour +wks01 WKS 10.0.0.1 6 ( 0 1 2 21 23 ) +wks02 WKS 10.0.0.1 17 ( 0 1 2 53 ) +wks03 WKS 10.0.0.2 6 ( 65535 ) +x2501 X25 "123456789" diff --git a/bin/tests/system/nsupdate/ns1/named.conf b/bin/tests/system/nsupdate/ns1/named.conf new file mode 100644 index 0000000..0c0e8ff --- /dev/null +++ b/bin/tests/system/nsupdate/ns1/named.conf @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2004, 2005, 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. + */ + +/* $Id: named.conf,v 1.17 2007/06/19 23:47:04 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify yes; +}; + +key rndc_key { + secret "1234abcd8765"; + algorithm hmac-md5; +}; + +controls { + inet 10.53.0.1 port 9953 allow { any; } keys { rndc_key; }; +}; + +zone "example.nil" { + type master; + file "example.db"; + check-integrity no; + allow-update { any; }; + allow-transfer { any; }; +}; + +zone "update.nil" { + type master; + file "update.db"; + check-integrity no; + allow-update { any; }; + allow-transfer { any; }; + also-notify { 10.53.0.2; }; +}; diff --git a/bin/tests/system/nsupdate/ns2/named.conf b/bin/tests/system/nsupdate/ns2/named.conf new file mode 100644 index 0000000..77e4013 --- /dev/null +++ b/bin/tests/system/nsupdate/ns2/named.conf @@ -0,0 +1,49 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.14 2007/06/18 23:47:30 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.2; + notify-source 10.53.0.2; + transfer-source 10.53.0.2; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.2; }; + listen-on-v6 { none; }; + recursion yes; + acache-enable yes; + notify yes; +}; + +zone "example.nil" { + type slave; + masters { 10.53.0.1; }; + file "example.bk"; + allow-transfer { any; }; +}; + +zone "update.nil" { + type slave; + masters { 10.53.0.1; }; + file "update.bk"; + allow-transfer { any; }; +}; + + diff --git a/bin/tests/system/nsupdate/setup.sh b/bin/tests/system/nsupdate/setup.sh new file mode 100644 index 0000000..2d9d51b --- /dev/null +++ b/bin/tests/system/nsupdate/setup.sh @@ -0,0 +1,42 @@ +#!/bin/sh +# +# 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. + +# $Id: setup.sh,v 1.10 2007/06/19 23:47:04 tbox Exp $ + +# +# jnl and database files MUST be removed before we start +# + +rm -f ns1/*.jnl ns1/example.db ns2/*.jnl ns2/example.bk + +cp -f ns1/example1.db ns1/example.db + +# update_test.pl has its own zone file because it +# requires a specific NS record set. +cat <<\EOF >ns1/update.db +$ORIGIN . +$TTL 300 ; 5 minutes +update.nil IN SOA ns1.example.nil. hostmaster.example.nil. ( + 1 ; serial + 2000 ; refresh (2000 seconds) + 2000 ; retry (2000 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) +update.nil. NS ns1.update.nil. +ns1.update.nil. A 10.53.0.2 +EOF diff --git a/bin/tests/system/nsupdate/tests.sh b/bin/tests/system/nsupdate/tests.sh new file mode 100644 index 0000000..c6a26bb --- /dev/null +++ b/bin/tests/system/nsupdate/tests.sh @@ -0,0 +1,161 @@ +#!/bin/sh +# +# 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. + +# $Id: tests.sh,v 1.25 2007/06/19 23:47:04 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +status=0 + +echo "I:fetching first copy of zone before update" +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + @10.53.0.1 axfr -p 5300 > dig.out.ns1 || status=1 + +echo "I:fetching second copy of zone before update" +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + @10.53.0.1 axfr -p 5300 > dig.out.ns2 || status=1 + +echo "I:comparing pre-update copies to known good data" +$PERL ../digcomp.pl knowngood.ns1.before dig.out.ns1 || status=1 +$PERL ../digcomp.pl knowngood.ns1.before dig.out.ns2 || status=1 + +echo "I:updating zone" +# nsupdate will print a ">" prompt to stdout as it gets each input line. +$NSUPDATE <<END > /dev/null || status=1 +server 10.53.0.1 5300 +update add updated.example.nil. 600 A 10.10.10.1 +update add updated.example.nil. 600 TXT Foo +update delete t.example.nil. + +END +echo "I:sleeping 15 seconds for server to incorporate changes" +sleep 15 + +echo "I:fetching first copy of zone after update" +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + @10.53.0.1 axfr -p 5300 > dig.out.ns1 || status=1 + +echo "I:fetching second copy of zone after update" +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + @10.53.0.2 axfr -p 5300 > dig.out.ns2 || status=1 + +echo "I:comparing post-update copies to known good data" +$PERL ../digcomp.pl knowngood.ns1.after dig.out.ns1 || status=1 +$PERL ../digcomp.pl knowngood.ns1.after dig.out.ns2 || status=1 + +if $PERL -e 'use Net::DNS;' 2>/dev/null +then + echo "I:running update.pl test" + $PERL update_test.pl -s 10.53.0.1 -p 5300 update.nil. || status=1 +else + echo "I:The second part of this test requires the Net::DNS library." >&2 +fi + +echo "I:fetching first copy of test zone" +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + @10.53.0.1 axfr -p 5300 > dig.out.ns1 || status=1 + +echo "I:fetching second copy of test zone" +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + @10.53.0.2 axfr -p 5300 > dig.out.ns2 || status=1 + +echo "I:comparing zones" +$PERL ../digcomp.pl dig.out.ns1 dig.out.ns2 || status=1 + +echo "I:SIGKILL and restart server ns1" +cd ns1 +kill -KILL `cat named.pid` +rm named.pid +cd .. +sleep 10 +if + $PERL $SYSTEMTESTTOP/start.pl --noclean . ns1 +then + echo "I:restarted server ns1" +else + echo "I:could not restart server ns1" + exit 1 +fi +sleep 10 + +echo "I:fetching ns1 after hard restart" +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + @10.53.0.1 axfr -p 5300 > dig.out.ns1.after || status=1 + +echo "I:comparing zones" +$PERL ../digcomp.pl dig.out.ns1 dig.out.ns1.after || status=1 + +echo "I:begin RT #482 regression test" + +echo "I:update master" +$NSUPDATE <<END > /dev/null || status=1 +server 10.53.0.1 5300 +update add updated2.example.nil. 600 A 10.10.10.2 +update add updated2.example.nil. 600 TXT Bar +update delete c.example.nil. +send +END + +sleep 5 + +echo "I:SIGHUP slave" +kill -HUP `cat ns2/named.pid` + +sleep 5 + +echo "I:update master again" +$NSUPDATE <<END > /dev/null || status=1 +server 10.53.0.1 5300 +update add updated3.example.nil. 600 A 10.10.10.3 +update add updated3.example.nil. 600 TXT Zap +update delete d.example.nil. +send +END + +sleep 5 + +echo "I:SIGHUP slave again" +kill -HUP `cat ns2/named.pid` + +sleep 5 + +if grep "out of sync" ns2/named.run +then + status=1 +fi + +echo "I:end RT #482 regression test" + +echo "I:testing that rndc stop updates the master file" +$NSUPDATE <<END > /dev/null || status=1 +server 10.53.0.1 5300 +update add updated4.example.nil. 600 A 10.10.10.3 +send +END +$PERL $SYSTEMTESTTOP/stop.pl --use-rndc . ns1 +# Removing the journal file and restarting the server means +# that the data served by the new server process are exactly +# those dumped to the master file by "rndc stop". +rm -f ns1/*jnl +$PERL $SYSTEMTESTTOP/start.pl --noclean . ns1 +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd updated4.example.nil.\ + @10.53.0.1 a -p 5300 > dig.out.ns1 || status=1 +$PERL ../digcomp.pl knowngood.ns1.afterstop dig.out.ns1 || status=1 + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/nsupdate/update_test.pl b/bin/tests/system/nsupdate/update_test.pl new file mode 100644 index 0000000..ef41b00 --- /dev/null +++ b/bin/tests/system/nsupdate/update_test.pl @@ -0,0 +1,426 @@ +#!/usr/bin/perl +# +# 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. + +# +# Dynamic update test suite. +# +# Usage: +# +# perl update_test.pl [-s server] [-p port] zone +# +# The server defaults to 127.0.0.1. +# The port defaults to 53. +# +# The "Special NS rules" tests will only work correctly if the +# zone has no NS records to begin with, or alternatively has a +# single NS record pointing at the name "ns1" (relative to +# the zone name). +# +# Installation notes: +# +# This program uses the Net::DNS::Resolver module. +# You can install it by saying +# +# perl -MCPAN -e "install Net::DNS" +# +# $Id: update_test.pl,v 1.10 2007/06/19 23:47:04 tbox Exp $ +# + +use Getopt::Std; +use Net::DNS; +use Net::DNS::Update; +use Net::DNS::Resolver; + +$opt_s = "127.0.0.1"; +$opt_p = 53; + +getopt('s:p:'); + +$res = new Net::DNS::Resolver; +$res->nameservers($opt_s); +$res->port($opt_p); +$res->defnames(0); # Do not append default domain. + +@ARGV == 1 or die + "usage: perl update_test.pl [-s server] [-p port] zone\n"; + +$zone = shift @ARGV; + +my $failures = 0; + +sub assert { + my ($cond, $explanation) = @_; + if (!$cond) { + print "I:Test Failed: $explanation ***\n"; + $failures++ + } +} + +sub test { + my ($expected, @records) = @_; + + my $update = new Net::DNS::Update("$zone"); + + foreach $rec (@records) { + $update->push(@$rec); + } + + $reply = $res->send($update); + + # Did it work? + if (defined $reply) { + my $rcode = $reply->header->rcode; + assert($rcode eq $expected, "expected $expected, got $rcode"); + } else { + print "I:Update failed: ", $res->errorstring, "\n"; + } +} + +sub section { + my ($msg) = @_; + print "I:$msg\n"; +} + +section("Delete any leftovers from previous tests"); +test("NOERROR", ["update", rr_del("a.$zone")]); +test("NOERROR", ["update", rr_del("b.$zone")]); +test("NOERROR", ["update", rr_del("c.$zone")]); +test("NOERROR", ["update", rr_del("d.$zone")]); +test("NOERROR", ["update", rr_del("e.$zone")]); +test("NOERROR", ["update", rr_del("f.$zone")]); +test("NOERROR", ["update", rr_del("ns.s.$zone")]); +test("NOERROR", ["update", rr_del("s.$zone")]); +test("NOERROR", ["update", rr_del("t.$zone")]); +test("NOERROR", ["update", rr_del("*.$zone")]); +test("NOERROR", ["update", rr_del("u.$zone")]); +test("NOERROR", ["update", rr_del("a.u.$zone")]); +test("NOERROR", ["update", rr_del("b.u.$zone")]); + +section("Simple prerequisites in the absence of data"); +# Name is in Use +test("NXDOMAIN", ["pre", yxdomain("a.$zone")]); +# RRset exists (value independent) +test("NXRRSET", ["pre", yxrrset("a.$zone A")]); +# Name is not in use +test("NOERROR", ["pre", nxdomain("a.$zone")]); +# RRset does not exist +test("NOERROR", ["pre", nxrrset("a.$zone A")]); +# RRset exists (value dependent) +test("NXRRSET", ["pre", yxrrset("a.$zone 300 A 73.80.65.49")]); + + +section ("Simple creation of data"); +test("NOERROR", ["update", rr_add("a.$zone 300 A 73.80.65.49")]); + +section ("Simple prerequisites in the presence of data"); +# Name is in use +test("NOERROR", ["pre", yxdomain("a.$zone")]); +# RRset exists (value independent) +test("NOERROR", ["pre", yxrrset("a.$zone A")]); +# Name is not in use +test("YXDOMAIN", ["pre", nxdomain("a.$zone")]); +# RRset does not exist +test("YXRRSET", ["pre", nxrrset("a.$zone A")]); +# RRset exists (value dependent) +test("NOERROR", ["pre", yxrrset("a.$zone 300 A 73.80.65.49")]); + +# +# Merging of RRsets +# +test("NOERROR", ["update", rr_add("a.$zone 300 A 73.80.65.50")]); + +section("Detailed tests of \"RRset exists (value dependent)\" prerequisites"); +test("NOERROR", ["pre", + yxrrset("a.$zone 300 A 73.80.65.49"), + yxrrset("a.$zone 300 A 73.80.65.50")]); +test("NOERROR", ["pre", + yxrrset("a.$zone 300 A 73.80.65.50"), + yxrrset("a.$zone 300 A 73.80.65.49")]); +test("NXRRSET", ["pre", yxrrset("a.$zone 300 A 73.80.65.49")]); +test("NXRRSET", ["pre", yxrrset("a.$zone 300 A 73.80.65.50")]); +test("NXRRSET", ["pre", + yxrrset("a.$zone 300 A 73.80.65.49"), + yxrrset("a.$zone 300 A 73.80.65.50"), + yxrrset("a.$zone 300 A 73.80.65.51")]); + + +section("Torture test of \"RRset exists (value dependent)\" prerequisites."); + +test("NOERROR", ["update", + rr_add("e.$zone 300 A 73.80.65.49"), + rr_add("e.$zone 300 TXT 'one'"), + rr_add("e.$zone 300 A 73.80.65.50")]); +test("NOERROR", ["update", + rr_add("e.$zone 300 A 73.80.65.52"), + rr_add("f.$zone 300 A 73.80.65.52"), + rr_add("e.$zone 300 A 73.80.65.51")]); +test("NOERROR", ["update", + rr_add("e.$zone 300 TXT 'three'"), + rr_add("e.$zone 300 TXT 'two'")]); +test("NOERROR", ["update", + rr_add("e.$zone 300 MX 10 mail.$zone")]); + +test("NOERROR", ["pre", + yxrrset("e.$zone 300 A 73.80.65.52"), + yxrrset("e.$zone 300 TXT 'two'"), + yxrrset("e.$zone 300 A 73.80.65.51"), + yxrrset("e.$zone 300 TXT 'three'"), + yxrrset("e.$zone 300 A 73.80.65.50"), + yxrrset("f.$zone 300 A 73.80.65.52"), + yxrrset("e.$zone 300 A 73.80.65.49"), + yxrrset("e.$zone 300 TXT 'one'")]); + + +section("Subtraction of RRsets"); +test("NOERROR", ["update", rr_del("a.$zone 300 A 73.80.65.49")]); +test("NOERROR", ["pre", + yxrrset("a.$zone 300 A 73.80.65.50")]); + +test("NOERROR", ["update", rr_del("a.$zone 300 A 73.80.65.50")]); +test("NOERROR", ["pre", nxrrset("a.$zone 300 A")]); +test("NOERROR", ["pre", nxdomain("a.$zone")]); + +section("Other forms of deletion"); +test("NOERROR", ["update", rr_add("a.$zone 300 A 73.80.65.49")]); +test("NOERROR", ["update", rr_add("a.$zone 300 A 73.80.65.50")]); +test("NOERROR", ["update", rr_add("a.$zone 300 MX 10 mail.$zone")]); +test("NOERROR", ["update", rr_del("a.$zone 300 A")]); +test("NOERROR", ["pre", nxrrset("a.$zone 300 A")]); +test("NOERROR", ["update", rr_add("a.$zone 300 A 73.80.65.49")]); +test("NOERROR", ["update", rr_add("a.$zone 300 A 73.80.65.50")]); +test("NOERROR", ["update", rr_del("a.$zone")]); +test("NOERROR", ["pre", nxdomain("a.$zone")]); + +section("Case insensitivity"); +test("NOERROR", ["update", rr_add("a.$zone 300 PTR foo.net.")]); +test("NOERROR", ["pre", yxrrset("A.$zone 300 PTR fOo.NeT.")]); + +section("Special CNAME rules"); +test("NOERROR", ["update", rr_add("b.$zone 300 CNAME foo.net.")]); +test("NOERROR", ["update", rr_add("b.$zone 300 A 73.80.65.49")]); +test("NOERROR", ["pre", yxrrset("b.$zone 300 CNAME foo.net.")]); +test("NOERROR", ["pre", nxrrset("b.$zone A")]); + +test("NOERROR", ["update", rr_add("c.$zone 300 A 73.80.65.49")]); +test("NOERROR", ["update", rr_add("c.$zone 300 CNAME foo.net.")]); +test("NOERROR", ["pre", yxrrset("c.$zone A")]); +test("NOERROR", ["pre", nxrrset("c.$zone CNAME")]); + +# XXX should test with SIG, KEY, NXT, too. + +# +# Currently commented out because Net::DNS does not properly +# support WKS records. +# +#section("Special WKS rules"); +#test("NOERROR", ["update", rr_add("c.$zone 300 WKS 73.80.65.49 TCP telnet ftp")]); +#test("NOERROR", ["update", rr_add("c.$zone 300 WKS 73.80.65.49 UDP telnet ftp")]); +#test("NOERROR", ["update", rr_add("c.$zone 300 WKS 73.80.65.50 TCP telnet ftp")]); +#test("NOERROR", ["update", rr_add("c.$zone 300 WKS 73.80.65.49 TCP smtp")]); +#test("NOERROR", ["pre", +# yxrrset("c.$zone 300 WKS 73.80.65.49 TCP smtp"), +# yxrrset("c.$zone 300 WKS 73.80.65.49 UDP telnet ftp"), +# yxrrset("c.$zone 300 WKS 73.80.65.50 TCP telnet ftp")]); + + +section("Special NS rules"); + +# Deleting the last NS record using "Delete an RR from an RRset" +# should fail at the zone apex and work elsewhere. The pseudocode +# in RFC2136 says it should fail everywhere, but this is in conflict +# with the actual text. + +# Apex +test("NOERROR", ["update", + rr_add("$zone 300 NS ns1.$zone"), + rr_add("$zone 300 NS ns2.$zone")]); +test("NOERROR", ["update", rr_del("$zone 300 NS ns1.$zone")]); +test("NOERROR", ["update", rr_del("$zone 300 NS ns2.$zone")]); +test("NOERROR", ["pre", + yxrrset("$zone 300 NS ns2.$zone")]); + +# Non-apex +test("NOERROR", ["update", rr_add("n.$zone 300 NS ns1.$zone")]); +test("NOERROR", ["update", rr_del("n.$zone 300 NS ns1.$zone")]); +test("NOERROR", ["pre", nxrrset("n.$zone 300 NS")]); + +# Other ways of deleting NS records should also fail at the apex +# and work elsewhere. + +# Non-apex +test("NOERROR", ["update", rr_add("n.$zone 300 NS ns1.$zone")]); +test("NOERROR", ["update", rr_del("n.$zone 300 NS")]); +test("NOERROR", ["pre", nxrrset("n.$zone 300 NS")]); + +test("NOERROR", ["update", rr_add("n.$zone 300 NS ns1.$zone")]); +test("NOERROR", ["pre", yxrrset("n.$zone 300 NS")]); +test("NOERROR", ["update", rr_del("n.$zone")]); +test("NOERROR", ["pre", nxrrset("n.$zone 300 NS")]); + +# Apex +test("NOERROR", ["update", rr_del("$zone NS")]); +test("NOERROR", ["pre", + yxrrset("$zone 300 NS ns2.$zone")]); + +test("NOERROR", ["update", rr_del("$zone")]); +test("NOERROR", ["pre", + yxrrset("$zone 300 NS ns2.$zone")]); + +# They should not touch the SOA, either. + +test("NOERROR", ["update", rr_del("$zone SOA")]); +test("NOERROR", ["pre", yxrrset("$zone SOA")]); + + +section("Idempotency"); + +test("NOERROR", ["update", rr_add("d.$zone 300 A 73.80.65.49")]); +test("NOERROR", ["pre", yxrrset("d.$zone 300 A 73.80.65.49")]); +test("NOERROR", ["update", + rr_add("d.$zone 300 A 73.80.65.49"), + rr_del("d.$zone A")]); +test("NOERROR", ["pre", nxrrset("d.$zone 300 A 73.80.65.49")]); + +test("NOERROR", ["update", rr_del("d.$zone 300 A 73.80.65.49")]); +test("NOERROR", ["pre", nxrrset("d.$zone 300 A")]); +test("NOERROR", ["update", + rr_del("d.$zone 300 A"), + rr_add("d.$zone 300 A 73.80.65.49")]); + +test("NOERROR", ["pre", yxrrset("d.$zone 300 A")]); + +section("Out-of-zone prerequisites and updates"); +test("NOTZONE", ["pre", yxrrset("a.somewhere.else. 300 A 73.80.65.49")]); +test("NOTZONE", ["update", rr_add("a.somewhere.else. 300 A 73.80.65.49")]); + + +section("Glue"); +test("NOERROR", ["update", rr_add("s.$zone 300 NS ns.s.$zone")]); +test("NOERROR", ["update", rr_add("ns.s.$zone 300 A 73.80.65.49")]); +test("NOERROR", ["pre", yxrrset("ns.s.$zone 300 A 73.80.65.49")]); + +section("Wildcards"); +test("NOERROR", ["update", rr_add("*.$zone 300 MX 10 mail.$zone")]); +test("NOERROR", ["pre", yxrrset("*.$zone 300 MX 10 mail.$zone")]); +test("NXRRSET", ["pre", yxrrset("w.$zone 300 MX 10 mail.$zone")]); +test("NOERROR", ["pre", nxrrset("w.$zone MX")]); +test("NOERROR", ["pre", nxdomain("w.$zone")]); + + +section("SOA serial handling"); + +my $soatimers = "20 20 1814400 3600"; + +# Get the current SOA serial number. +my $query = $res->query($zone, "SOA"); +my ($old_soa) = $query->answer; + +my $old_serial = $old_soa->serial; + +# Increment it by 10. +my $new_serial = $old_serial + 10; +if ($new_serial > 0xFFFFFFFF) { + $new_serial -= 0x80000000; + $new_serial -= 0x80000000; +} + +# Replace the SOA with a new one. +test("NOERROR", ["update", rr_add("$zone 300 SOA mname1. . $new_serial $soatimers")]); + +# Check that the SOA really got replaced. +($db_soa) = $res->query($zone, "SOA")->answer; +assert($db_soa->mname eq "mname1"); + +# Check that attempts to decrement the serial number are ignored. +$new_serial = $old_serial - 10; +if ($new_serial < 0) { + $new_serial += 0x80000000; + $new_serial += 0x80000000; +} +test("NOERROR", ["update", rr_add("$zone 300 SOA mname2. . $new_serial $soatimers")]); +assert($db_soa->mname eq "mname1"); + +# Check that attempts to leave the serial number unchanged are ignored. +($old_soa) = $res->query($zone, "SOA")->answer; +$old_serial = $old_soa->serial; +test("NOERROR", ["update", rr_add("$zone 300 SOA mname3. . $old_serial " . + $soatimers)]); +($db_soa) = $res->query($zone, "SOA")->answer; +assert($db_soa->mname eq "mname1"); + +# +# Currently commented out because Net::DNS does not properly +# support multiple strings in TXT records. +# +#section("Big data"); +#test("NOERROR", ["update", rr_add("a.$zone 300 TXT aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")]); +#test("NOERROR", ["update", rr_del("a.$zone 300 TXT aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")]); +test("NOERROR", ["update", rr_add("a.$zone 300 TXT " . ("foo " x 3))]); + +section("Updating TTLs only"); + +test("NOERROR", ["update", rr_add("t.$zone 300 A 73.80.65.49")]); +($a) = $res->query("t.$zone", "A")->answer; +$ttl = $a->ttl; +assert($ttl == 300, "incorrect TTL value $ttl != 300"); +test("NOERROR", ["update", + rr_del("t.$zone 300 A 73.80.65.49"), + rr_add("t.$zone 301 A 73.80.65.49")]); +($a) = $res->query("t.$zone", "A")->answer; +$ttl = $a->ttl; +assert($ttl == 301, "incorrect TTL value $ttl != 301"); + +# Add an RR that is identical to an existing one except for the TTL. +# RFC2136 is not clear about what this should do; it says "duplicate RRs +# will be silently ignored" but is an RR differing only in TTL +# to be considered a duplicate or not? The test assumes that it +# should not be considered a duplicate. +test("NOERROR", ["update", rr_add("t.$zone 302 A 73.80.65.50")]); +($a) = $res->query("t.$zone", "A")->answer; +$ttl = $a->ttl; +assert($ttl == 302, "incorrect TTL value $ttl != 302"); + +section("TTL normalization"); + +# The desired behaviour is that the old RRs get their TTL +# changed to match the new one. RFC2136 does not explicitly +# specify this, but I think it makes more sense than the +# alternatives. + +test("NOERROR", ["update", rr_add("t.$zone 303 A 73.80.65.51")]); +(@answers) = $res->query("t.$zone", "A")->answer; +$nanswers = scalar @answers; +assert($nanswers == 3, "wrong number of answers $nanswers != 3"); +foreach $a (@answers) { + $ttl = $a->ttl; + assert($ttl == 303, "incorrect TTL value $ttl != 303"); +} + +section("Obscuring existing data by zone cut"); +test("NOERROR", ["update", rr_add("a.u.$zone 300 A 73.80.65.49")]); +test("NOERROR", ["update", rr_add("b.u.$zone 300 A 73.80.65.49")]); +test("NOERROR", ["update", rr_add("u.$zone 300 TXT txt-not-in-nxt")]); +test("NOERROR", ["update", rr_add("u.$zone 300 NS ns.u.$zone")]); + +test("NOERROR", ["update", rr_del("u.$zone 300 NS ns.u.$zone")]); + +if ($failures) { + print "I:$failures tests failed.\n"; +} else { + print "I:All tests successful.\n"; +} +exit $failures; diff --git a/bin/tests/system/resolver/ans2/ans.pl b/bin/tests/system/resolver/ans2/ans.pl new file mode 100644 index 0000000..b41f198 --- /dev/null +++ b/bin/tests/system/resolver/ans2/ans.pl @@ -0,0 +1,75 @@ +#!/usr/bin/perl +# +# 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. + +# $Id: ans.pl,v 1.10 2007/09/24 04:13:25 marka Exp $ + +# +# Ad hoc name server +# + +use IO::File; +use IO::Socket; +use Net::DNS; +use Net::DNS::Packet; + +my $sock = IO::Socket::INET->new(LocalAddr => "10.53.0.2", + LocalPort => 5300, Proto => "udp") or die "$!"; + +my $pidf = new IO::File "ans.pid", "w" or die "cannot open pid file: $!"; +print $pidf "$$\n" or die "cannot write pid file: $!"; +$pidf->close or die "cannot close pid file: $!"; +sub rmpid { unlink "ans.pid"; exit 1; }; + +$SIG{INT} = \&rmpid; +$SIG{TERM} = \&rmpid; + +for (;;) { + $sock->recv($buf, 512); + + print "**** request from " , $sock->peerhost, " port ", $sock->peerport, "\n"; + + my ($packet, $err) = new Net::DNS::Packet(\$buf, 0); + $err and die $err; + + print "REQUEST:\n"; + $packet->print; + + $packet->header->qr(1); + + my @questions = $packet->question; + my $qname = $questions[0]->qname; + + if ($qname eq "cname1.example.com") { + # Data for the "cname + other data / 1" test + $packet->push("answer", new Net::DNS::RR("cname1.example.com 300 CNAME cname1.example.com")); + $packet->push("answer", new Net::DNS::RR("cname1.example.com 300 A 1.2.3.4")); + } elsif ($qname eq "cname2.example.com") { + # Data for the "cname + other data / 2" test: same RRs in opposite order + $packet->push("answer", new Net::DNS::RR("cname2.example.com 300 A 1.2.3.4")); + $packet->push("answer", new Net::DNS::RR("cname2.example.com 300 CNAME cname2.example.com")); + } else { + # Data for the "bogus referrals" test + $packet->push("authority", new Net::DNS::RR("below.www.example.com 300 NS ns.below.www.example.com")); + $packet->push("additional", new Net::DNS::RR("ns.below.www.example.com 300 A 10.53.0.3")); + } + + $sock->send($packet->data); + + print "RESPONSE:\n"; + $packet->print; + print "\n"; +} diff --git a/bin/tests/system/resolver/ans3/ans.pl b/bin/tests/system/resolver/ans3/ans.pl new file mode 100644 index 0000000..3053b25 --- /dev/null +++ b/bin/tests/system/resolver/ans3/ans.pl @@ -0,0 +1,60 @@ +#!/usr/bin/perl +# +# 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. + +# $Id: ans.pl,v 1.9 2007/09/24 04:13:25 marka Exp $ + +# +# Ad hoc name server +# + +use IO::File; +use IO::Socket; +use Net::DNS; +use Net::DNS::Packet; + +my $sock = IO::Socket::INET->new(LocalAddr => "10.53.0.3", + LocalPort => 5300, Proto => "udp") or die "$!"; + +my $pidf = new IO::File "ans.pid", "w" or die "cannot open pid file: $!"; +print $pidf "$$\n" or die "cannot write pid file: $!"; +$pidf->close or die "cannot close pid file: $!"; +sub rmpid { unlink "ans.pid"; exit 1; }; + +$SIG{INT} = \&rmpid; +$SIG{TERM} = \&rmpid; + +for (;;) { + $sock->recv($buf, 512); + + print "**** request from " , $sock->peerhost, " port ", $sock->peerport, "\n"; + + my ($packet, $err) = new Net::DNS::Packet(\$buf, 0); + $err and die $err; + + print "REQUEST:\n"; + $packet->print; + + $packet->header->qr(1); + + $packet->push("answer", new Net::DNS::RR("www.example.com 300 A 1.2.3.4")); + + $sock->send($packet->data); + + print "RESPONSE:\n"; + $packet->print; + print "\n"; +} diff --git a/bin/tests/system/resolver/clean.sh b/bin/tests/system/resolver/clean.sh new file mode 100644 index 0000000..c79da92 --- /dev/null +++ b/bin/tests/system/resolver/clean.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# +# Copyright (C) 2008 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: clean.sh,v 1.1 2008/07/17 01:15:34 marka Exp $ + +# +# Clean up after resolver tests. +# +rm -f */named.memstats diff --git a/bin/tests/system/resolver/ns1/named.conf b/bin/tests/system/resolver/ns1/named.conf new file mode 100644 index 0000000..4b0c80a --- /dev/null +++ b/bin/tests/system/resolver/ns1/named.conf @@ -0,0 +1,38 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.13 2007/06/18 23:47:30 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion yes; + acache-enable yes; +}; + +zone "." { + type hint; + file "root.hint"; +}; + diff --git a/bin/tests/system/resolver/ns1/root.hint b/bin/tests/system/resolver/ns1/root.hint new file mode 100644 index 0000000..2fd180e --- /dev/null +++ b/bin/tests/system/resolver/ns1/root.hint @@ -0,0 +1,20 @@ +; 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. + +; $Id: root.hint,v 1.7 2007/06/19 23:47:05 tbox Exp $ + +$TTL 999999 +. IN NS a.root-servers.nil. +a.root-servers.nil. IN A 10.53.0.2 diff --git a/bin/tests/system/resolver/prereq.sh b/bin/tests/system/resolver/prereq.sh new file mode 100644 index 0000000..c0dbb7b --- /dev/null +++ b/bin/tests/system/resolver/prereq.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# +# 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. + +# $Id: prereq.sh,v 1.7 2007/06/19 23:47:05 tbox Exp $ + +if $PERL -e 'use Net::DNS;' 2>/dev/null +then + : +else + echo "I:This test requires the Net::DNS library." >&2 + exit 1 +fi diff --git a/bin/tests/system/resolver/tests.sh b/bin/tests/system/resolver/tests.sh new file mode 100644 index 0000000..585455c --- /dev/null +++ b/bin/tests/system/resolver/tests.sh @@ -0,0 +1,39 @@ +#!/bin/sh +# +# 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. + +# $Id: tests.sh,v 1.9 2007/06/19 23:47:05 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +status=0 + +echo "I:checking handling of bogus referrals" +# If the server has the "INSIST(!external)" bug, this query will kill it. +$DIG +tcp www.example.com. a @10.53.0.1 -p 5300 >/dev/null || status=1 + +echo "I:check handling of cname + other data / 1" +$DIG +tcp cname1.example.com. a @10.53.0.1 -p 5300 >/dev/null || status=1 + +echo "I:check handling of cname + other data / 2" +$DIG +tcp cname2.example.com. a @10.53.0.1 -p 5300 >/dev/null || status=1 + +echo "I:check that server is still running" +$DIG +tcp www.example.com. a @10.53.0.1 -p 5300 >/dev/null || status=1 + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/rrsetorder/clean.sh b/bin/tests/system/rrsetorder/clean.sh new file mode 100644 index 0000000..d5b245c --- /dev/null +++ b/bin/tests/system/rrsetorder/clean.sh @@ -0,0 +1,23 @@ +#!/bin/sh +# +# Copyright (C) 2006-2008 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: clean.sh,v 1.8 2008/04/24 23:46:59 tbox Exp $ + +rm -f dig.out.cyclic dig.out.fixed dig.out.random +rm -f dig.out.0 dig.out.1 dig.out.2 dig.out.3 +rm -f ns2/root.bk +rm -f ns?/named.run ns?/named.core +rm -f */named.memstats diff --git a/bin/tests/system/rrsetorder/dig.out.fixed.good b/bin/tests/system/rrsetorder/dig.out.fixed.good new file mode 100644 index 0000000..eaf9c63 --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.fixed.good @@ -0,0 +1,4 @@ +1.2.3.4 +1.2.3.3 +1.2.3.1 +1.2.3.2 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good1 b/bin/tests/system/rrsetorder/dig.out.random.good1 new file mode 100644 index 0000000..c272c75 --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good1 @@ -0,0 +1,4 @@ +1.2.3.1 +1.2.3.2 +1.2.3.3 +1.2.3.4 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good10 b/bin/tests/system/rrsetorder/dig.out.random.good10 new file mode 100644 index 0000000..6a39e3f --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good10 @@ -0,0 +1,4 @@ +1.2.3.2 +1.2.3.3 +1.2.3.4 +1.2.3.1 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good11 b/bin/tests/system/rrsetorder/dig.out.random.good11 new file mode 100644 index 0000000..efbc792 --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good11 @@ -0,0 +1,4 @@ +1.2.3.2 +1.2.3.4 +1.2.3.1 +1.2.3.3 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good12 b/bin/tests/system/rrsetorder/dig.out.random.good12 new file mode 100644 index 0000000..c859a2e --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good12 @@ -0,0 +1,4 @@ +1.2.3.2 +1.2.3.4 +1.2.3.3 +1.2.3.1 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good13 b/bin/tests/system/rrsetorder/dig.out.random.good13 new file mode 100644 index 0000000..49bf54b --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good13 @@ -0,0 +1,4 @@ +1.2.3.3 +1.2.3.1 +1.2.3.2 +1.2.3.4 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good14 b/bin/tests/system/rrsetorder/dig.out.random.good14 new file mode 100644 index 0000000..974aa89 --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good14 @@ -0,0 +1,4 @@ +1.2.3.3 +1.2.3.1 +1.2.3.4 +1.2.3.2 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good15 b/bin/tests/system/rrsetorder/dig.out.random.good15 new file mode 100644 index 0000000..e8deb67 --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good15 @@ -0,0 +1,4 @@ +1.2.3.3 +1.2.3.2 +1.2.3.1 +1.2.3.4 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good16 b/bin/tests/system/rrsetorder/dig.out.random.good16 new file mode 100644 index 0000000..f467087 --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good16 @@ -0,0 +1,4 @@ +1.2.3.3 +1.2.3.2 +1.2.3.4 +1.2.3.1 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good17 b/bin/tests/system/rrsetorder/dig.out.random.good17 new file mode 100644 index 0000000..6082a25 --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good17 @@ -0,0 +1,4 @@ +1.2.3.3 +1.2.3.4 +1.2.3.1 +1.2.3.2 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good18 b/bin/tests/system/rrsetorder/dig.out.random.good18 new file mode 100644 index 0000000..07eefa0 --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good18 @@ -0,0 +1,4 @@ +1.2.3.3 +1.2.3.4 +1.2.3.2 +1.2.3.1 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good19 b/bin/tests/system/rrsetorder/dig.out.random.good19 new file mode 100644 index 0000000..a5530c6 --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good19 @@ -0,0 +1,4 @@ +1.2.3.4 +1.2.3.1 +1.2.3.2 +1.2.3.3 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good2 b/bin/tests/system/rrsetorder/dig.out.random.good2 new file mode 100644 index 0000000..00da93a --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good2 @@ -0,0 +1,4 @@ +1.2.3.1 +1.2.3.2 +1.2.3.4 +1.2.3.3 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good20 b/bin/tests/system/rrsetorder/dig.out.random.good20 new file mode 100644 index 0000000..6dcf6da --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good20 @@ -0,0 +1,4 @@ +1.2.3.4 +1.2.3.1 +1.2.3.3 +1.2.3.2 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good21 b/bin/tests/system/rrsetorder/dig.out.random.good21 new file mode 100644 index 0000000..9dcc63f --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good21 @@ -0,0 +1,4 @@ +1.2.3.4 +1.2.3.2 +1.2.3.1 +1.2.3.3 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good22 b/bin/tests/system/rrsetorder/dig.out.random.good22 new file mode 100644 index 0000000..4c51aa6 --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good22 @@ -0,0 +1,4 @@ +1.2.3.4 +1.2.3.2 +1.2.3.3 +1.2.3.1 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good23 b/bin/tests/system/rrsetorder/dig.out.random.good23 new file mode 100644 index 0000000..eaf9c63 --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good23 @@ -0,0 +1,4 @@ +1.2.3.4 +1.2.3.3 +1.2.3.1 +1.2.3.2 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good24 b/bin/tests/system/rrsetorder/dig.out.random.good24 new file mode 100644 index 0000000..c25c756 --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good24 @@ -0,0 +1,4 @@ +1.2.3.4 +1.2.3.3 +1.2.3.2 +1.2.3.1 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good3 b/bin/tests/system/rrsetorder/dig.out.random.good3 new file mode 100644 index 0000000..4d50059 --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good3 @@ -0,0 +1,4 @@ +1.2.3.1 +1.2.3.3 +1.2.3.2 +1.2.3.4 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good4 b/bin/tests/system/rrsetorder/dig.out.random.good4 new file mode 100644 index 0000000..0b34afa --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good4 @@ -0,0 +1,4 @@ +1.2.3.1 +1.2.3.3 +1.2.3.4 +1.2.3.2 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good5 b/bin/tests/system/rrsetorder/dig.out.random.good5 new file mode 100644 index 0000000..efe0e25 --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good5 @@ -0,0 +1,4 @@ +1.2.3.1 +1.2.3.4 +1.2.3.2 +1.2.3.3 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good6 b/bin/tests/system/rrsetorder/dig.out.random.good6 new file mode 100644 index 0000000..d2ca6fc --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good6 @@ -0,0 +1,4 @@ +1.2.3.1 +1.2.3.4 +1.2.3.3 +1.2.3.2 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good7 b/bin/tests/system/rrsetorder/dig.out.random.good7 new file mode 100644 index 0000000..0d8312a --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good7 @@ -0,0 +1,4 @@ +1.2.3.2 +1.2.3.1 +1.2.3.3 +1.2.3.4 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good8 b/bin/tests/system/rrsetorder/dig.out.random.good8 new file mode 100644 index 0000000..3b27693 --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good8 @@ -0,0 +1,4 @@ +1.2.3.2 +1.2.3.1 +1.2.3.4 +1.2.3.3 diff --git a/bin/tests/system/rrsetorder/dig.out.random.good9 b/bin/tests/system/rrsetorder/dig.out.random.good9 new file mode 100644 index 0000000..61192af --- /dev/null +++ b/bin/tests/system/rrsetorder/dig.out.random.good9 @@ -0,0 +1,4 @@ +1.2.3.2 +1.2.3.3 +1.2.3.1 +1.2.3.4 diff --git a/bin/tests/system/rrsetorder/ns1/named.conf b/bin/tests/system/rrsetorder/ns1/named.conf new file mode 100644 index 0000000..f228a07 --- /dev/null +++ b/bin/tests/system/rrsetorder/ns1/named.conf @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2006, 2007 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: named.conf,v 1.4 2007/06/19 23:47:05 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify yes; + rrset-order { + name "fixed.example" order fixed; + name "random.example" order random; + name "cyclic.example" order cyclic; + type NS order random; + order cyclic; + }; +}; + +zone "." { + type master; + file "root.db"; +}; diff --git a/bin/tests/system/rrsetorder/ns1/root.db b/bin/tests/system/rrsetorder/ns1/root.db new file mode 100644 index 0000000..dd2f08f --- /dev/null +++ b/bin/tests/system/rrsetorder/ns1/root.db @@ -0,0 +1,40 @@ +; Copyright (C) 2006, 2007 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: root.db,v 1.4 2007/06/19 23:47:05 tbox Exp $ + +$TTL 3600 +. SOA hostmaster.isc.org. a.root-servers.nil. ( + 2000042100 + 600 + 600 + 1200 + 600 ) +. NS a.root-servers.nil. +a.root-servers.nil A 10.53.0.1 +; +fixed.example. A 1.2.3.4 +fixed.example. A 1.2.3.3 +fixed.example. A 1.2.3.1 +fixed.example. A 1.2.3.2 +; +random.example. A 1.2.3.1 +random.example. A 1.2.3.2 +random.example. A 1.2.3.3 +random.example. A 1.2.3.4 +; +cyclic.example. A 1.2.3.4 +cyclic.example. A 1.2.3.3 +cyclic.example. A 1.2.3.2 +cyclic.example. A 1.2.3.1 diff --git a/bin/tests/system/rrsetorder/ns2/named.conf b/bin/tests/system/rrsetorder/ns2/named.conf new file mode 100644 index 0000000..0a1e9b9 --- /dev/null +++ b/bin/tests/system/rrsetorder/ns2/named.conf @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2006, 2007 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: named.conf,v 1.4 2007/06/19 23:47:05 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.2; + notify-source 10.53.0.2; + transfer-source 10.53.0.2; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.2; }; + listen-on-v6 { none; }; + recursion no; + notify yes; + // flush-zones-on-shutdown yes; + rrset-order { + name "fixed.example" order fixed; + name "random.example" order random; + name "cyclic.example" order cyclic; + type NS order random; + order cyclic; + }; +}; + +zone "." { + type slave; + masters { 10.53.0.1; }; + file "root.bk"; +}; diff --git a/bin/tests/system/rrsetorder/ns3/named.conf b/bin/tests/system/rrsetorder/ns3/named.conf new file mode 100644 index 0000000..fa8bfc9 --- /dev/null +++ b/bin/tests/system/rrsetorder/ns3/named.conf @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2006, 2007 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: named.conf,v 1.5 2007/06/18 23:47:30 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.3; + notify-source 10.53.0.3; + transfer-source 10.53.0.3; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.3; }; + listen-on-v6 { none; }; + recursion yes; + acache-enable yes; + notify yes; + rrset-order { + name "fixed.example" order fixed; + name "random.example" order random; + name "cyclic.example" order cyclic; + type NS order random; + order cyclic; + }; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + diff --git a/bin/tests/system/rrsetorder/tests.sh b/bin/tests/system/rrsetorder/tests.sh new file mode 100644 index 0000000..a05e34f --- /dev/null +++ b/bin/tests/system/rrsetorder/tests.sh @@ -0,0 +1,332 @@ +#!/bin/sh +# +# Copyright (C) 2006-2008 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: tests.sh,v 1.8 2008/10/09 21:27:52 each Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +status=0 + +if grep "^#define DNS_RDATASET_FIXED" $TOP/config.h > /dev/null 2>&1 ; then + test_fixed=true +else + echo "I: Order 'fixed' disabled at compile time" + test_fixed=false +fi + +# +# +# +if $test_fixed; then + echo "I: Checking order fixed (master)" + ret=0 + for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + do + $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ + -p 5300 @10.53.0.1 fixed.example > dig.out.fixed || ret=1 + cmp -s dig.out.fixed dig.out.fixed.good || ret=1 + done + if [ $ret != 0 ]; then echo "I:failed"; fi + status=`expr $status + $ret` +fi + +# +# +# +echo "I: Checking order cyclic (master)" +ret=0 +matches=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 +do + j=`expr $i % 4` + $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ + -p 5300 @10.53.0.1 cyclic.example > dig.out.cyclic || ret=1 + if [ $i -le 4 ]; then + cp dig.out.cyclic dig.out.$j + else + cmp -s dig.out.cyclic dig.out.$j && matches=`expr $matches + 1` + fi +done +cmp -s dig.out.0 dig.out.1 && ret=1 +cmp -s dig.out.0 dig.out.2 && ret=1 +cmp -s dig.out.0 dig.out.3 && ret=1 +cmp -s dig.out.1 dig.out.2 && ret=1 +cmp -s dig.out.1 dig.out.3 && ret=1 +cmp -s dig.out.2 dig.out.3 && ret=1 +if [ $matches -ne 16 ]; then ret=1; fi +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I: Checking order random (master)" +ret=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 +do + eval match$i=0 +done +for i in a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 9 +do +$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ + -p 5300 @10.53.0.1 random.example > dig.out.random || ret=1 + match=0 + for j in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 + do + eval "cmp -s dig.out.random dig.out.random.good$j && match$j=1 match=1" + if [ $match -eq 1 ]; then break; fi + done + if [ $match -eq 0 ]; then ret=1; fi +done +match=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 +do + eval "match=\`expr \$match + \$match$i\`" +done +echo "I: Random selection return $match of 24 possible orders in 36 samples" +if [ $match -lt 8 ]; then echo ret=1; fi +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +# +# +# +if $test_fixed; then + echo "I: Checking order fixed (slave)" + ret=0 + for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + do + $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ + -p 5300 @10.53.0.2 fixed.example > dig.out.fixed || ret=1 + cmp -s dig.out.fixed dig.out.fixed.good || ret=1 + done + if [ $ret != 0 ]; then echo "I:failed"; fi + status=`expr $status + $ret` +fi + +# +# +# +echo "I: Checking order cyclic (slave)" +ret=0 +matches=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 +do + j=`expr $i % 4` + $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ + -p 5300 @10.53.0.2 cyclic.example > dig.out.cyclic || ret=1 + if [ $i -le 4 ]; then + cp dig.out.cyclic dig.out.$j + else + cmp -s dig.out.cyclic dig.out.$j && matches=`expr $matches + 1` + fi +done +cmp -s dig.out.0 dig.out.1 && ret=1 +cmp -s dig.out.0 dig.out.2 && ret=1 +cmp -s dig.out.0 dig.out.3 && ret=1 +cmp -s dig.out.1 dig.out.2 && ret=1 +cmp -s dig.out.1 dig.out.3 && ret=1 +cmp -s dig.out.2 dig.out.3 && ret=1 +if [ $matches -ne 16 ]; then ret=1; fi +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I: Checking order random (slave)" +ret=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 +do + eval match$i=0 +done +for i in a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 9 +do +$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ + -p 5300 @10.53.0.2 random.example > dig.out.random || ret=1 + match=0 + for j in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 + do + eval "cmp -s dig.out.random dig.out.random.good$j && match$j=1 match=1" + if [ $match -eq 1 ]; then break; fi + done + if [ $match -eq 0 ]; then ret=1; fi +done +match=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 +do +eval "match=\`expr \$match + \$match$i\`" +done +echo "I: Random selection return $match of 24 possible orders in 36 samples" +if [ $match -lt 8 ]; then echo ret=1; fi +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I: Shutting down slave" + +(cd ..; sh stop.sh rrsetorder ns2 ) + +echo "I: Checking for slave's on disk copy of zone" + +if [ ! -f ns2/root.bk ] +then + echo "I:failed"; + status=`expr $status + 1` +fi + +echo "I: Re-starting slave" + +(cd ..; sh start.sh --noclean rrsetorder ns2 ) + +# +# +# +if $test_fixed; then + echo "I: Checking order fixed (slave loaded from disk)" + ret=0 + for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + do + $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ + -p 5300 @10.53.0.2 fixed.example > dig.out.fixed || ret=1 + cmp -s dig.out.fixed dig.out.fixed.good || ret=1 + done + if [ $ret != 0 ]; then echo "I:failed"; fi + status=`expr $status + $ret` +fi + +# +# +# +echo "I: Checking order cyclic (slave loaded from disk)" +ret=0 +matches=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 +do + j=`expr $i % 4` + $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ + -p 5300 @10.53.0.2 cyclic.example > dig.out.cyclic || ret=1 + if [ $i -le 4 ]; then + cp dig.out.cyclic dig.out.$j + else + cmp -s dig.out.cyclic dig.out.$j && matches=`expr $matches + 1` + fi +done +cmp -s dig.out.0 dig.out.1 && ret=1 +cmp -s dig.out.0 dig.out.2 && ret=1 +cmp -s dig.out.0 dig.out.3 && ret=1 +cmp -s dig.out.1 dig.out.2 && ret=1 +cmp -s dig.out.1 dig.out.3 && ret=1 +cmp -s dig.out.2 dig.out.3 && ret=1 +if [ $matches -ne 16 ]; then ret=1; fi +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I: Checking order random (slave loaded from disk)" +ret=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 +do + eval match$i=0 +done +for i in a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 9 +do +$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ + -p 5300 @10.53.0.2 random.example > dig.out.random || ret=1 + match=0 + for j in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 + do + eval "cmp -s dig.out.random dig.out.random.good$j && match$j=1 match=1" + if [ $match -eq 1 ]; then break; fi + done + if [ $match -eq 0 ]; then ret=1; fi +done +match=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 +do +eval "match=\`expr \$match + \$match$i\`" +done +echo "I: Random selection return $match of 24 possible orders in 36 samples" +if [ $match -lt 8 ]; then echo ret=1; fi +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +# +# +# +if $test_fixed; then + echo "I: Checking order fixed (cache)" + ret=0 + for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + do + $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ + -p 5300 @10.53.0.3 fixed.example > dig.out.fixed || ret=1 + cmp -s dig.out.fixed dig.out.fixed.good || ret=1 + done + if [ $ret != 0 ]; then echo "I:failed"; fi + status=`expr $status + $ret` +fi + +# +# +# +echo "I: Checking order cyclic (cache)" +ret=0 +matches=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 +do + j=`expr $i % 4` + $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ + -p 5300 @10.53.0.3 cyclic.example > dig.out.cyclic || ret=1 + if [ $i -le 4 ]; then + cp dig.out.cyclic dig.out.$j + else + cmp -s dig.out.cyclic dig.out.$j && matches=`expr $matches + 1` + fi +done +cmp -s dig.out.0 dig.out.1 && ret=1 +cmp -s dig.out.0 dig.out.2 && ret=1 +cmp -s dig.out.0 dig.out.3 && ret=1 +cmp -s dig.out.1 dig.out.2 && ret=1 +cmp -s dig.out.1 dig.out.3 && ret=1 +cmp -s dig.out.2 dig.out.3 && ret=1 +if [ $matches -ne 16 ]; then ret=1; fi +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + +echo "I: Checking order random (cache)" +ret=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 +do + eval match$i=0 +done +for i in a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 9 +do +$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ + -p 5300 @10.53.0.3 random.example > dig.out.random || ret=1 + match=0 + for j in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 + do + eval "cmp -s dig.out.random dig.out.random.good$j && match$j=1 match=1" + if [ $match -eq 1 ]; then break; fi + done + if [ $match -eq 0 ]; then ret=1; fi +done +match=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 +do +eval "match=\`expr \$match + \$match$i\`" +done +echo "I: Random selection return $match of 24 possible orders in 36 samples" +if [ $match -lt 8 ]; then echo ret=1; fi +if [ $ret != 0 ]; then echo "I:failed"; fi + +status=`expr $status + $ret` +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/run.sh b/bin/tests/system/run.sh new file mode 100644 index 0000000..8d4a6ad --- /dev/null +++ b/bin/tests/system/run.sh @@ -0,0 +1,115 @@ +#!/bin/sh +# +# 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. + +# $Id: run.sh,v 1.42 2007/06/19 23:47:00 tbox Exp $ + +# +# 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.pl || { + 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. +if + test ! -f $test/prereq.sh || + ( cd $test && sh prereq.sh "$@" ) +then + : prereqs ok +else + echo "I:Prerequisites for $test missing, skipping test." >&2 + echo "R:UNTESTED" >&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/bin/tests/system/runall.sh b/bin/tests/system/runall.sh new file mode 100644 index 0000000..23ad53f --- /dev/null +++ b/bin/tests/system/runall.sh @@ -0,0 +1,46 @@ +#!/bin/sh +# +# 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. + +# $Id: runall.sh,v 1.8 2007/06/19 23:47:00 tbox Exp $ + +# +# Run all the system tests. +# + +SYSTEMTESTTOP=. +. $SYSTEMTESTTOP/conf.sh + +status=0 + +for d in $SUBDIRS +do + sh run.sh $d || status=1 +done + +$PERL testsock.pl || { + cat <<EOF >&2 +I: +I:NOTE: Many of the tests were skipped because they require that +I: the IP addresses 10.53.0.1 through 10.53.0.5 are configured +I: as alias addresses on the loopback interface. Please run +I: "bin/tests/system/ifconfig.sh up" as root to configure them +I: and rerun the tests. +EOF + exit 0; +} + +exit $status diff --git a/bin/tests/system/send.pl b/bin/tests/system/send.pl new file mode 100644 index 0000000..bda9b6d --- /dev/null +++ b/bin/tests/system/send.pl @@ -0,0 +1,39 @@ +#!/usr/bin/perl +# +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 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. + +# $Id: send.pl,v 1.5 2007/06/19 23:47:00 tbox Exp $ + +# +# Send a file to a given address and port using TCP. Used for +# configuring the test server in ixfr/ans2/ans.pl. +# + +use IO::File; +use IO::Socket; + +@ARGV == 2 or die "usage: send.pl host port [file ...]\n"; + +my $host = shift @ARGV; +my $port = shift @ARGV; + +my $sock = IO::Socket::INET->new(PeerAddr => $host, PeerPort => $port, + Proto => "tcp",) or die "$!"; +while (<>) { + $sock->syswrite($_, length $_); +} + +$sock->close; diff --git a/bin/tests/system/setup.sh b/bin/tests/system/setup.sh new file mode 100644 index 0000000..8418e2e --- /dev/null +++ b/bin/tests/system/setup.sh @@ -0,0 +1,40 @@ +#!/bin/sh +# +# 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. + +# $Id: setup.sh,v 1.11 2007/06/19 23:47:00 tbox Exp $ + +# +# Run a system test. +# + +SYSTEMTESTTOP=. +. $SYSTEMTESTTOP/conf.sh + +test $# -gt 0 || { echo "usage: $0 test-directory" >&2; exit 1; } + +test=$1 +shift + +test -d $test || { echo "$0: $test: no such test" >&2; exit 1; } + +# Set up any dynamically generated test data +if test -f $test/setup.sh +then + ( cd $test && sh setup.sh "$@" ) +fi + + diff --git a/bin/tests/system/sortlist/clean.sh b/bin/tests/system/sortlist/clean.sh new file mode 100644 index 0000000..bb71507 --- /dev/null +++ b/bin/tests/system/sortlist/clean.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# +# 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. + +# $Id: clean.sh,v 1.7 2007/09/26 03:22:44 marka Exp $ + +rm -f *.dig *.good +rm -f */named.memstats diff --git a/bin/tests/system/sortlist/ns1/example.db b/bin/tests/system/sortlist/ns1/example.db new file mode 100644 index 0000000..7e408db --- /dev/null +++ b/bin/tests/system/sortlist/ns1/example.db @@ -0,0 +1,43 @@ +; 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. + +; $Id: example.db,v 1.7 2007/06/19 23:47:05 tbox Exp $ + +$TTL 300 ; 5 minutes +@ IN SOA ns1.example. hostmaster.example. ( + 2000042795 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) +example. NS ns1.example. +ns1.example. A 10.53.0.1 + +; Let's see what the sortlist picks out of this... +a A 1.1.1.1 +a A 1.1.1.5 +a A 1.1.1.2 +a A 192.168.3.1 +a A 1.1.1.3 +a A 192.168.1.1 +a A 1.1.1.4 + +b A 10.53.0.1 +b A 10.53.0.2 +b A 10.53.0.3 +b A 10.53.0.4 +b A 10.53.0.5 + diff --git a/bin/tests/system/sortlist/ns1/named.conf b/bin/tests/system/sortlist/ns1/named.conf new file mode 100644 index 0000000..5d149ec --- /dev/null +++ b/bin/tests/system/sortlist/ns1/named.conf @@ -0,0 +1,53 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.10 2007/06/19 23:47:05 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify yes; + + sortlist { + { 10.53.0.1; // IF 10.53.0.1 + { + !1.1.1.4; !1.1.1.2; !1.1.1.3; !1.1.1.1; // sort these last, + 192.168.3/24; // this first + { 192.168.2/24; 192.168.1/24; }; }; }; // and these next + { { 10.53.0.2; 10.53.0.3; }; }; // Prefer self + 10.53.0.4; // BIND 8 compat + { 10.53.0.5; 10.53.0.5; }; // BIND 8 compat + }; +}; + +zone "." { + type master; + file "root.db"; +}; + +zone "example" { + type master; + file "example.db"; +}; diff --git a/bin/tests/system/sortlist/ns1/root.db b/bin/tests/system/sortlist/ns1/root.db new file mode 100644 index 0000000..f300adc --- /dev/null +++ b/bin/tests/system/sortlist/ns1/root.db @@ -0,0 +1,30 @@ +; 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. + +; $Id: root.db,v 1.5 2007/06/19 23:47:05 tbox Exp $ + +$TTL 300 +. IN SOA gson.nominum.com. a.root.servers.nil. ( + 2000042100 ; serial + 600 ; refresh + 600 ; retry + 1200 ; expire + 600 ; minimum + ) +. NS a.root-servers.nil. +a.root-servers.nil. A 10.53.0.1 + +example. NS ns2.example. +ns2.example. A 10.53.0.2 diff --git a/bin/tests/system/sortlist/tests.sh b/bin/tests/system/sortlist/tests.sh new file mode 100644 index 0000000..06f175a --- /dev/null +++ b/bin/tests/system/sortlist/tests.sh @@ -0,0 +1,60 @@ +#!/bin/sh +# +# 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. + +# $Id: tests.sh,v 1.9 2007/09/14 01:46:05 marka Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +status=0 + +echo "I:test 2-element sortlist statement" +cat <<EOF >test1.good +a.example. 300 IN A 192.168.3.1 +a.example. 300 IN A 192.168.1.1 +a.example. 300 IN A 1.1.1.5 +a.example. 300 IN A 1.1.1.1 +a.example. 300 IN A 1.1.1.3 +a.example. 300 IN A 1.1.1.2 +a.example. 300 IN A 1.1.1.4 +EOF +$DIG +tcp +noadd +nosea +nostat +noquest +noauth +nocomm +nocmd a.example. \ + @10.53.0.1 -b 10.53.0.1 -p 5300 >test1.dig +# Note that this can't use digcomp.pl because here, the ordering of the +# result RRs is significant. +diff test1.dig test1.good || status=1 + +echo "I:test 1-element sortlist statement and undocumented BIND 8 features" + cat <<EOF >test2.good +b.example. 300 IN A 10.53.0.$n +EOF + +$DIG +tcp +noadd +nosea +nostat +noquest +noauth +nocomm +nocmd \ + b.example. @10.53.0.1 -b 10.53.0.2 -p 5300 | sed 1q | \ + egrep '10.53.0.(2|3)$' > test2.out && +$DIG +tcp +noadd +nosea +nostat +noquest +noauth +nocomm +nocmd \ + b.example. @10.53.0.1 -b 10.53.0.3 -p 5300 | sed 1q | \ + egrep '10.53.0.(2|3)$' >> test2.out && +$DIG +tcp +noadd +nosea +nostat +noquest +noauth +nocomm +nocmd \ + b.example. @10.53.0.1 -b 10.53.0.4 -p 5300 | sed 1q | \ + egrep '10.53.0.4$' >> test2.out && +$DIG +tcp +noadd +nosea +nostat +noquest +noauth +nocomm +nocmd \ + b.example. @10.53.0.1 -b 10.53.0.5 -p 5300 | sed 1q | \ + egrep '10.53.0.5$' >> test2.out || status=1 + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/start.pl b/bin/tests/system/start.pl new file mode 100644 index 0000000..1f461b5 --- /dev/null +++ b/bin/tests/system/start.pl @@ -0,0 +1,209 @@ +#!/usr/bin/perl -w +# +# Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 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. + +# $Id: start.pl,v 1.13 2008/01/02 23:47:01 tbox Exp $ + +# Framework for starting test servers. +# Based on the type of server specified, check for port availability, remove +# temporary files, start the server, and verify that the server is running. +# If a server is specified, start it. Otherwise, start all servers for test. + +use strict; +use Cwd 'abs_path'; +use Getopt::Long; + +# Option handling +# --noclean test [server [options]] +# +# --noclean - Do not cleanup files in server directory +# test - name of the test directory +# server - name of the server directory +# options - alternate options for the server + +my $usage = "usage: $0 [--noclean] test-directory [server-directory [server-options]]"; +my $noclean; +GetOptions('noclean' => \$noclean); +my $test = $ARGV[0]; +my $server = $ARGV[1]; +my $options = $ARGV[2]; + +if (!$test) { + print "$usage\n"; +} +if (!-d $test) { + print "No test directory: \"$test\"\n"; +} +if ($server && !-d "$test/$server") { + print "No server directory: \"$test/$server\"\n"; +} + +# Global variables +my $topdir = abs_path("$test/.."); +my $testdir = abs_path("$test"); +my $NAMED = $ENV{'NAMED'}; +my $LWRESD = $ENV{'LWRESD'}; +my $DIG = $ENV{'DIG'}; +my $PERL = $ENV{'PERL'}; + +# Start the server(s) + +if ($server) { + if ($server =~ /^ns/) { + &check_ports($server); + } + &start_server($server, $options); + if ($server =~ /^ns/) { + &verify_server($server); + } +} else { + # Determine which servers need to be started for this test. + opendir DIR, $testdir; + my @files = sort readdir DIR; + closedir DIR; + + my @ns = grep /^ns[0-9]*$/, @files; + my @lwresd = grep /^lwresd[0-9]*$/, @files; + my @ans = grep /^ans[0-9]*$/, @files; + + # Start the servers we found. + &check_ports(); + foreach (@ns, @lwresd, @ans) { + &start_server($_); + } + foreach (@ns) { + &verify_server($_); + } +} + +# Subroutines + +sub check_ports { + my $server = shift; + my $options = ""; + + if ($server && $server =~ /(\d+)$/) { + $options = "-i $1"; + } + + my $tries = 0; + while (1) { + my $return = system("$PERL $topdir/testsock.pl -p 5300 $options"); + last if ($return == 0); + if (++$tries > 4) { + print "$0: could not bind to server addresses, still running?\n"; + print "I:server sockets not available\n"; + print "R:FAIL\n"; + system("$PERL $topdir/stop.pl $testdir"); # Is this the correct behavior? + exit 1; + } + print "I:Couldn't bind to socket (yet)\n"; + sleep 2; + } +} + +sub start_server { + my $server = shift; + my $options = shift; + + my $cleanup_files; + my $command; + my $pid_file; + + if ($server =~ /^ns/) { + $cleanup_files = "{*.jnl,*.bk,*.st,named.run}"; + $command = "$NAMED "; + if ($options) { + $command .= "$options"; + } else { + $command .= "-m record,size,mctx "; + $command .= "-T clienttest "; + $command .= "-c named.conf -d 99 -g"; + } + $command .= " >named.run 2>&1 &"; + $pid_file = "named.pid"; + } elsif ($server =~ /^lwresd/) { + $cleanup_files = "{lwresd.run}"; + $command = "$LWRESD "; + if ($options) { + $command .= "$options"; + } else { + $command .= "-m record,size,mctx "; + $command .= "-T clienttest "; + $command .= "-C resolv.conf -d 99 -g "; + $command .= "-i lwresd.pid -P 9210 -p 5300"; + } + $command .= " >lwresd.run 2>&1 &"; + $pid_file = "lwresd.pid"; + } elsif ($server =~ /^ans/) { + $cleanup_files = "{ans.run}"; + $command = "$PERL ./ans.pl "; + if ($options) { + $command .= "$options"; + } else { + $command .= ""; + } + $command .= " >ans.run 2>&1 &"; + $pid_file = "ans.pid"; + } else { + print "I:Unknown server type $server\n"; + print "R:FAIL\n"; + system "$PERL $topdir/stop.pl $testdir"; + exit 1; + } + + # print "I:starting server $server\n"; + + chdir "$testdir/$server"; + + unless ($noclean) { + unlink glob $cleanup_files; + } + + system "$command"; + + my $tries = 0; + while (!-f $pid_file) { + if (++$tries > 14) { + print "I:Couldn't start server $server\n"; + print "R:FAIL\n"; + system "$PERL $topdir/stop.pl $testdir"; + exit 1; + } + sleep 1; + } +} + +sub verify_server { + my $server = shift; + my $n = $server; + $n =~ s/^ns//; + + my $tries = 0; + while (1) { + my $return = system("$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd -p 5300 version.bind. chaos txt \@10.53.0.$n > dig.out"); + last if ($return == 0); + print `grep ";" dig.out`; + if (++$tries >= 30) { + print "I:no response from $server\n"; + print "R:FAIL\n"; + system("$PERL $topdir/stop.pl $testdir"); + exit 1; + } + sleep 2; + } + unlink "dig.out"; +} diff --git a/bin/tests/system/start.sh b/bin/tests/system/start.sh new file mode 100644 index 0000000..7c128db --- /dev/null +++ b/bin/tests/system/start.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# +# 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. + +# $Id: start.sh,v 1.42 2007/06/18 23:47:27 tbox Exp $ + +. ./conf.sh +$PERL start.pl "$@" diff --git a/bin/tests/system/stop.pl b/bin/tests/system/stop.pl new file mode 100644 index 0000000..3d4b804 --- /dev/null +++ b/bin/tests/system/stop.pl @@ -0,0 +1,188 @@ +#!/usr/bin/perl -w +# +# Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 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. + +# $Id: stop.pl,v 1.12 2007/06/19 23:47:00 tbox Exp $ + +# Framework for stopping test servers +# Based on the type of server specified, signal the server to stop, wait +# briefly for it to die, and then kill it if it is still alive. +# If a server is specified, stop it. Otherwise, stop all servers for test. + +use strict; +use Cwd 'abs_path'; + +# Option handling +# [--use-rndc] test [server] +# +# test - name of the test directory +# server - name of the server directory + +my $usage = "usage: $0 [--use-rndc] test-directory [server-directory]"; +my $use_rndc; + +while (@ARGV && $ARGV[0] =~ /^-/) { + my $opt = shift @ARGV; + if ($opt eq '--use-rndc') { + $use_rndc = 1; + } else { + die "$usage\n"; + } +} + +my $test = $ARGV[0]; +my $server = $ARGV[1]; + +my $errors = 0; + +die "$usage\n" unless defined($test); +die "No test directory: \"$test\"\n" unless (-d $test); +die "No server directory: \"$server\"\n" if (defined($server) && !-d "$test/$server"); + +# Global variables +my $testdir = abs_path($test); +my @servers; + + +# Determine which servers need to be stopped. +if (defined $server) { + @servers = ($server); +} else { + local *DIR; + opendir DIR, $testdir or die "$testdir: $!\n"; + my @files = sort readdir DIR; + closedir DIR; + + my @ns = grep /^ns[0-9]*$/, @files; + my @lwresd = grep /^lwresd[0-9]*$/, @files; + my @ans = grep /^ans[0-9]*$/, @files; + + push @servers, @ns, @lwresd, @ans; +} + + +# Stop the server(s), pass 1: rndc. +if ($use_rndc) { + foreach my $server (grep /^ns/, @servers) { + stop_rndc($server); + } + + wait_for_servers(30, grep /^ns/, @servers); +} + + +# Pass 2: SIGTERM +foreach my $server (@servers) { + stop_signal($server, "TERM"); +} + +wait_for_servers(60, @servers); + +# Pass 3: SIGABRT +foreach my $server (@servers) { + stop_signal($server, "ABRT"); +} + +exit($errors ? 1 : 0); + +# Subroutines + +# Return the full path to a given server's PID file. +sub server_pid_file { + my($server) = @_; + + my $pid_file; + if ($server =~ /^ns/) { + $pid_file = "named.pid"; + } elsif ($server =~ /^lwresd/) { + $pid_file = "lwresd.pid"; + } elsif ($server =~ /^ans/) { + $pid_file = "ans.pid"; + } else { + print "I:Unknown server type $server\n"; + exit 1; + } + $pid_file = "$testdir/$server/$pid_file"; +} + +# Read a PID. +sub read_pid { + my($pid_file) = @_; + + local *FH; + my $result = open FH, "< $pid_file"; + if (!$result) { + print "I:$pid_file: $!\n"; + unlink $pid_file; + return; + } + + my $pid = <FH>; + chomp($pid); + return $pid; +} + +# Stop a named process with rndc. +sub stop_rndc { + my($server) = @_; + + return unless ($server =~ /^ns(\d+)$/); + my $ip = "10.53.0.$1"; + + # Ugly, but should work. + system("$ENV{RNDC} -c $testdir/../common/rndc.conf -s $ip -p 9953 stop | sed 's/^/I:$server /'"); + return; +} + +# Stop a server by sending a signal to it. +sub stop_signal { + my($server, $sig) = @_; + + my $pid_file = server_pid_file($server); + return unless -f $pid_file; + + my $pid = read_pid($pid_file); + return unless defined($pid); + + if ($sig eq 'ABRT') { + print "I:$server didn't die when sent a SIGTERM\n"; + $errors++; + } + + my $result = kill $sig, $pid; + if (!$result) { + print "I:$server died before a SIG$sig was sent\n"; + unlink $pid_file; + $errors++; + } + + return; +} + +sub wait_for_servers { + my($timeout, @servers) = @_; + + my @pid_files = grep { defined($_) } + map { server_pid_file($_) } @servers; + + while ($timeout > 0 && @pid_files > 0) { + @pid_files = grep { -f $_ } @pid_files; + sleep 1 if (@pid_files > 0); + $timeout--; + } + + return; +} diff --git a/bin/tests/system/stop.sh b/bin/tests/system/stop.sh new file mode 100644 index 0000000..5eb6cdd --- /dev/null +++ b/bin/tests/system/stop.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# +# 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. + +# $Id: stop.sh,v 1.25 2007/06/18 23:47:27 tbox Exp $ + +. ./conf.sh +$PERL ./stop.pl "$@" + diff --git a/bin/tests/system/stress/clean.sh b/bin/tests/system/stress/clean.sh new file mode 100644 index 0000000..1a3fa60 --- /dev/null +++ b/bin/tests/system/stress/clean.sh @@ -0,0 +1,29 @@ +#!/bin/sh +# +# 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. + +# $Id: clean.sh,v 1.6 2007/09/26 03:22:44 marka Exp $ + +rm -f reload.pid + +rm -f ns?/zones.conf +rm -f ns?/zone*.bk + +rm -f ns1/delegations.db + +rm -f ns2/zone0*.db +rm -f ns2/zone0*.jnl +rm -f */named.memstats diff --git a/bin/tests/system/stress/ns1/named.conf b/bin/tests/system/stress/ns1/named.conf new file mode 100644 index 0000000..3d88d8e --- /dev/null +++ b/bin/tests/system/stress/ns1/named.conf @@ -0,0 +1,37 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.6 2007/06/19 23:47:05 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify yes; +}; + +zone "." { + type master; + file "root.db"; +}; diff --git a/bin/tests/system/stress/ns2/named.conf b/bin/tests/system/stress/ns2/named.conf new file mode 100644 index 0000000..812b833 --- /dev/null +++ b/bin/tests/system/stress/ns2/named.conf @@ -0,0 +1,39 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.7 2007/06/19 23:47:05 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.2; + notify-source 10.53.0.2; + transfer-source 10.53.0.2; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.2; }; + listen-on-v6 { none; }; + recursion no; + notify yes; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +include "zones.conf"; diff --git a/bin/tests/system/stress/ns3/named.conf b/bin/tests/system/stress/ns3/named.conf new file mode 100644 index 0000000..9ff09d7 --- /dev/null +++ b/bin/tests/system/stress/ns3/named.conf @@ -0,0 +1,56 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.8 2007/06/18 23:47:30 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.3; + notify-source 10.53.0.3; + transfer-source 10.53.0.3; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.3; }; + listen-on-v6 { none; }; + recursion yes; + acache-enable yes; + notify yes; +}; + +key rndc_key { + secret "1234abcd8765"; + algorithm hmac-md5; +}; + +controls { + inet 10.53.0.3 port 9953 allow { any; } keys { rndc_key; }; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +server 10.53.0.4 { + provide-ixfr no; +}; +server 10.53.0.2 { + request-ixfr no; +}; + +include "zones.conf"; diff --git a/bin/tests/system/stress/ns4/named.conf b/bin/tests/system/stress/ns4/named.conf new file mode 100644 index 0000000..e40a0a5 --- /dev/null +++ b/bin/tests/system/stress/ns4/named.conf @@ -0,0 +1,41 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.8 2007/06/18 23:47:31 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.4; + notify-source 10.53.0.4; + transfer-source 10.53.0.4; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.4; }; + listen-on-v6 { none; }; + recursion yes; + acache-enable yes; + notify yes; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +include "zones.conf"; + diff --git a/bin/tests/system/stress/setup.pl b/bin/tests/system/stress/setup.pl new file mode 100644 index 0000000..5ae0928 --- /dev/null +++ b/bin/tests/system/stress/setup.pl @@ -0,0 +1,91 @@ +#!/usr/bin/perl +# +# 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. + +# $Id: setup.pl,v 1.6 2007/06/19 23:47:05 tbox Exp $ + +# +# Set up test data for zone transfer quota tests. +# +use FileHandle; + +my $n_zones = 5; +my $n_names = 1000; + +make_zones(2, undef); +make_zones(3, "10.53.0.2"); +make_zones(4, "10.53.0.3"); + +my $rootdelegations = + new FileHandle("ns1/root.db", "w") or die; + +print $rootdelegations <<END; +\$TTL 300 +. IN SOA gson.nominum.com. a.root.servers.nil. ( + 2000042100 ; serial + 600 ; refresh + 600 ; retry + 1200 ; expire + 600 ; minimum + ) +. NS a.root-servers.nil. +a.root-servers.nil. A 10.53.0.1 +END + +for ($z = 0; $z < $n_zones; $z++) { + my $zn = sprintf("zone%06d.example", $z); + foreach $ns (qw(2 3 4)) { + print $rootdelegations "$zn. NS ns$ns.$zn.\n"; + print $rootdelegations "ns$ns.$zn. A 10.53.0.$ns\n"; + } +} +close $rootdelegations; + +sub make_zones { + my ($nsno, $slaved_from) = @_; + my $namedconf = new FileHandle("ns$nsno/zones.conf", "w") or die; + for ($z = 0; $z < $n_zones; $z++) { + my $zn = sprintf("zone%06d.example", $z); + if (defined($slaved_from)) { + print $namedconf "zone \"$zn\" { type slave; " . + "file \"$zn.bk\"; masters { $slaved_from; }; };\n"; + } else { + print $namedconf "zone \"$zn\" { " . + "type master; " . + "allow-update { any; }; " . + "file \"$zn.db\"; };\n"; + + my $fn = "ns$nsno/$zn.db"; + my $f = new FileHandle($fn, "w") or die "open: $fn: $!"; + print $f "\$TTL 300 +\@ IN SOA ns2.$zn. hostmaster 1 300 120 3600 86400 +@ NS ns2.$zn. +ns2.$zn. A 10.53.0.2 +@ NS ns3.$zn. +ns3.$zn. A 10.53.0.3 +@ NS ns4.$zn. +ns4.$zn. A 10.53.0.4 + MX 10 mail1.isp.example. + MX 20 mail2.isp.example. +"; + for ($i = 0; $i < $n_names; $i++) { + print $f sprintf("name%06d", $i) . + " A 10.0.0.1\n"; + } + $f->close; + } + } +} diff --git a/bin/tests/system/stress/setup.sh b/bin/tests/system/stress/setup.sh new file mode 100644 index 0000000..2737998 --- /dev/null +++ b/bin/tests/system/stress/setup.sh @@ -0,0 +1,24 @@ +#!/bin/sh +# +# 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. + +# $Id: setup.sh,v 1.5 2007/06/19 23:47:05 tbox Exp $ + +# +# Set up test data for zone transfer quota tests. +# + +$PERL setup.pl diff --git a/bin/tests/system/stress/tests.sh b/bin/tests/system/stress/tests.sh new file mode 100644 index 0000000..1c5e75e --- /dev/null +++ b/bin/tests/system/stress/tests.sh @@ -0,0 +1,53 @@ +#!/bin/sh +# +# 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. + +# $Id: tests.sh,v 1.5 2007/06/19 23:47:05 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +status=0 + +if $PERL -e 'use Net::DNS;' 2>/dev/null +then + : +else + echo "I:This test requires the Net::DNS library." >&2 + exit 1 +fi + +( +sh -c "while true + do $RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 reload 2>&1 | + sed 's/^/I:ns3 /'; + sleep 1 + done" & echo $! >reload.pid +) & + +for i in 0 1 2 3 4 +do + $PERL update.pl -s 10.53.0.2 -p 5300 zone00000$i.example. & +done + +echo "I:waiting for background processes to finish" +wait + +echo "I:killing reload loop" +kill `cat reload.pid` + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/stress/update.pl b/bin/tests/system/stress/update.pl new file mode 100644 index 0000000..6a4a6fb --- /dev/null +++ b/bin/tests/system/stress/update.pl @@ -0,0 +1,107 @@ +#!/usr/bin/perl +# +# 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. + +# +# Dynamic update test suite. +# +# Usage: +# +# perl update_test.pl [-s server] [-p port] zone +# +# The server defaults to 127.0.0.1. +# The port defaults to 53. +# +# The "Special NS rules" tests will only work correctly if the +# has no NS records to begin with, or alternatively has a +# single NS record pointing at the name "ns1" (relative to +# the zone name). +# +# Installation notes: +# +# This program uses the Net::DNS::Resolver module. +# You can install it by saying +# +# perl -MCPAN -e "install Net::DNS" +# +# $Id: update.pl,v 1.5 2007/06/19 23:47:05 tbox Exp $ +# + +use Getopt::Std; +use Net::DNS; +use Net::DNS::Update; +use Net::DNS::Resolver; + +$opt_s = "127.0.0.1"; +$opt_p = 53; + +getopt('s:p:'); + +$res = new Net::DNS::Resolver; +$res->nameservers($opt_s); +$res->port($opt_p); +$res->defnames(0); # Do not append default domain. + +@ARGV == 1 or die + "usage: perl update_test.pl [-s server] [-p port] zone\n"; + +$zone = shift @ARGV; + +my $failures = 0; + +sub assert { + my ($cond, $explanation) = @_; + if (!$cond) { + print "I:Test Failed: $explanation ***\n"; + $failures++ + } +} + +sub test { + my ($expected, @records) = @_; + + my $update = new Net::DNS::Update("$zone"); + + foreach $rec (@records) { + $update->push(@$rec); + } + + $reply = $res->send($update); + + # Did it work? + if (defined $reply) { + my $rcode = $reply->header->rcode; + assert($rcode eq $expected, "expected $expected, got $rcode"); + } else { + print "I:Update failed: ", $res->errorstring, "\n"; + } +} + +sub section { + my ($msg) = @_; + print "I:$msg\n"; +} + +for ($i = 0; $i < 1000; $i++) { + test("NOERROR", ["update", rr_add("dynamic-$i.$zone 300 TXT txt-$i" )]); +} + +if ($failures) { + print "I:$failures tests failed.\n"; +} else { + print "I:Update of $opt_s zone $zone successful.\n"; +} +exit $failures; diff --git a/bin/tests/system/stub/clean.sh b/bin/tests/system/stub/clean.sh new file mode 100644 index 0000000..dadd765 --- /dev/null +++ b/bin/tests/system/stub/clean.sh @@ -0,0 +1,24 @@ +#!/bin/sh +# +# 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. + +# $Id: clean.sh,v 1.10 2007/09/26 03:22:44 marka Exp $ + +# +# Clean up after stub tests. +# +rm -f dig.out.ns3 ns3/child.example.st +rm -f */named.memstats diff --git a/bin/tests/system/stub/knowngood.dig.out.norec b/bin/tests/system/stub/knowngood.dig.out.norec new file mode 100644 index 0000000..ca0e458 --- /dev/null +++ b/bin/tests/system/stub/knowngood.dig.out.norec @@ -0,0 +1,21 @@ + +; <<>> DiG 8.2 <<>> -p @10.53.0.3 +norec data.child.example txt +; (1 server found) +;; res options: init defnam dnsrch +;; got answer: +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 216 +;; flags: qr ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 +;; QUERY SECTION: +;; data.child.example, type = TXT, class = IN + +;; AUTHORITY SECTION: +child.example. 5M IN NS ns2.child.example. + +;; ADDITIONAL SECTION: +ns2.child.example. 5M IN A 10.53.0.2 + +;; Total query time: 3 msec +;; FROM: draco to SERVER: 10.53.0.3 +;; WHEN: Wed Jun 21 10:58:37 2000 +;; MSG SIZE sent: 36 rcvd: 70 + diff --git a/bin/tests/system/stub/knowngood.dig.out.rec b/bin/tests/system/stub/knowngood.dig.out.rec new file mode 100644 index 0000000..9f2e4ee --- /dev/null +++ b/bin/tests/system/stub/knowngood.dig.out.rec @@ -0,0 +1,24 @@ + +; <<>> DiG 8.2 <<>> -p @10.53.0.3 data.child.example txt +; (1 server found) +;; res options: init recurs defnam dnsrch +;; got answer: +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6 +;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 +;; QUERY SECTION: +;; data.child.example, type = TXT, class = IN + +;; ANSWER SECTION: +data.child.example. 5M IN TXT "some" "test" "data" + +;; AUTHORITY SECTION: +child.example. 5M IN NS ns2.child.example. + +;; ADDITIONAL SECTION: +ns2.child.example. 5M IN A 10.53.0.2 + +;; Total query time: 8 msec +;; FROM: draco to SERVER: 10.53.0.3 +;; WHEN: Wed Jun 21 10:58:54 2000 +;; MSG SIZE sent: 36 rcvd: 97 + diff --git a/bin/tests/system/stub/ns1/named.conf b/bin/tests/system/stub/ns1/named.conf new file mode 100644 index 0000000..858506b --- /dev/null +++ b/bin/tests/system/stub/ns1/named.conf @@ -0,0 +1,37 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.14 2007/06/19 23:47:05 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify yes; +}; + +zone "." { + type master; + file "root.db"; +}; diff --git a/bin/tests/system/stub/ns1/root.db b/bin/tests/system/stub/ns1/root.db new file mode 100644 index 0000000..a811e47 --- /dev/null +++ b/bin/tests/system/stub/ns1/root.db @@ -0,0 +1,30 @@ +; 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. + +; $Id: root.db,v 1.9 2007/06/19 23:47:05 tbox Exp $ + +$TTL 300 +. IN SOA gson.nominum.com. a.root.servers.nil. ( + 2000042100 ; serial + 600 ; refresh + 600 ; retry + 1200 ; expire + 600 ; minimum + ) +. NS a.root-servers.nil. +a.root-servers.nil. A 10.53.0.1 + +example. NS ns3.example. +ns3.example. A 10.53.0.3 diff --git a/bin/tests/system/stub/ns2/child.example.db b/bin/tests/system/stub/ns2/child.example.db new file mode 100644 index 0000000..327a3b8 --- /dev/null +++ b/bin/tests/system/stub/ns2/child.example.db @@ -0,0 +1,28 @@ +; 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. + +; $Id: child.example.db,v 1.9 2007/06/19 23:47:05 tbox Exp $ + +$TTL 300 ; 5 minutes +child.example. IN SOA ns2.child.example. hostmaster.child.example. ( + 2000042795 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) +child.example. NS ns2.child.example. +ns2.child.example. A 10.53.0.2 +data TXT some test data diff --git a/bin/tests/system/stub/ns2/named.conf b/bin/tests/system/stub/ns2/named.conf new file mode 100644 index 0000000..888b5e0 --- /dev/null +++ b/bin/tests/system/stub/ns2/named.conf @@ -0,0 +1,42 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.14 2007/06/19 23:47:05 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.2; + notify-source 10.53.0.2; + transfer-source 10.53.0.2; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.2; }; + listen-on-v6 { none; }; + recursion no; + notify yes; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +zone "child.example" { + type master; + file "child.example.db"; +}; diff --git a/bin/tests/system/stub/ns3/example.db b/bin/tests/system/stub/ns3/example.db new file mode 100644 index 0000000..25e17e4 --- /dev/null +++ b/bin/tests/system/stub/ns3/example.db @@ -0,0 +1,28 @@ +; 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. + +; $Id: example.db,v 1.9 2007/06/19 23:47:05 tbox Exp $ + +$ORIGIN . +$TTL 300 ; 5 minutes +example IN SOA ns3.example. hostmaster.example. ( + 2000042795 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) +example. NS ns3.example. +ns3.example. A 10.53.0.3 diff --git a/bin/tests/system/stub/ns3/named.conf b/bin/tests/system/stub/ns3/named.conf new file mode 100644 index 0000000..89ba16e --- /dev/null +++ b/bin/tests/system/stub/ns3/named.conf @@ -0,0 +1,49 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.16 2007/06/18 23:47:31 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.3; + notify-source 10.53.0.3; + transfer-source 10.53.0.3; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.3; }; + listen-on-v6 { none; }; + recursion yes; + acache-enable yes; + notify yes; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +zone "example" { + type master; + file "example.db"; +}; + +zone "child.example" { + type stub; + file "child.example.st"; + masters { 10.53.0.2; }; +}; diff --git a/bin/tests/system/stub/tests.sh b/bin/tests/system/stub/tests.sh new file mode 100644 index 0000000..ad7fe0b --- /dev/null +++ b/bin/tests/system/stub/tests.sh @@ -0,0 +1,39 @@ +#!/bin/sh +# +# 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. + +# $Id: tests.sh,v 1.14 2007/06/19 23:47:05 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +status=0 + +echo "I:trying an axfr that should be denied (NOTAUTH)" +$DIG +tcp data.child.example. @10.53.0.3 axfr -p 5300 > dig.out.ns3 || status=1 +grep "; Transfer failed." dig.out.ns3 > /dev/null || status=1 + +echo "I:look for stub zone data without recursion (should not be found)" +$DIG +tcp +norec data.child.example. @10.53.0.3 txt -p 5300 > dig.out.ns3 \ + || status=1 +$PERL ../digcomp.pl knowngood.dig.out.norec dig.out.ns3 || status=1 + +echo "I:look for stub zone data with recursion (should be found)" +$DIG +tcp data.child.example. @10.53.0.3 txt -p 5300 > dig.out.ns3 || status=1 +$PERL ../digcomp.pl knowngood.dig.out.rec dig.out.ns3 || status=1 + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/testsock.pl b/bin/tests/system/testsock.pl new file mode 100644 index 0000000..a658086 --- /dev/null +++ b/bin/tests/system/testsock.pl @@ -0,0 +1,51 @@ +#!/usr/bin/perl +# +# 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. + +# $Id: testsock.pl,v 1.16 2007/06/19 23:47:00 tbox Exp $ + +# Test whether the interfaces on 10.53.0.* are up. + +require 5.001; + +use Socket; +use Getopt::Long; + +my $port = 0; +my $id = 0; +GetOptions("p=i" => \$port, + "i=i" => \$id); + +my @ids; +if ($id != 0) { + @ids = ($id); +} else { + @ids = (1..5); +} + +foreach $id (@ids) { + my $addr = pack("C4", 10, 53, 0, $id); + my $sa = pack_sockaddr_in($port, $addr); + socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname("tcp")) + or die "$0: socket: $!\n"; + setsockopt(SOCK, SOL_SOCKET, SO_REUSEADDR, pack("l", 1)); + + bind(SOCK, $sa) + or die sprintf("$0: bind(%s, %d): $!\n", + inet_ntoa($addr), $port); + close(SOCK); + sleep(1); +} diff --git a/bin/tests/system/tkey/Makefile.in b/bin/tests/system/tkey/Makefile.in new file mode 100644 index 0000000..684fb1a --- /dev/null +++ b/bin/tests/system/tkey/Makefile.in @@ -0,0 +1,60 @@ +# Copyright (C) 2004, 2007 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. + +# $Id: Makefile.in,v 1.11 2007/06/19 23:47:06 tbox Exp $ + +srcdir = @srcdir@ +VPATH = @srcdir@ +top_srcdir = @top_srcdir@ + +@BIND9_VERSION@ + +@BIND9_MAKE_INCLUDES@ + +CINCLUDES = ${DNS_INCLUDES} ${ISC_INCLUDES} + +CDEFINES = +CWARNINGS = + +DNSLIBS = ../../../../lib/dns/libdns.@A@ @DNS_CRYPTO_LIBS@ +ISCLIBS = ../../../../lib/isc/libisc.@A@ + +DNSDEPLIBS = ../../../../lib/dns/libdns.@A@ +ISCDEPLIBS = ../../../../lib/isc/libisc.@A@ + +DEPLIBS = ${DNSDEPLIBS} ${ISCDEPLIBS} + +LIBS = ${DNSLIBS} ${ISCLIBS} @LIBS@ + +TARGETS = keycreate@EXEEXT@ keydelete@EXEEXT@ + +CREATEOBJS = keycreate.@O@ +DELETEOBJS = keydelete.@O@ + +SRCS = keycreate.c keydelete.c + +@BIND9_MAKE_RULES@ + +all: keycreate@EXEEXT@ keydelete@EXEEXT@ + +keycreate@EXEEXT@: ${CREATEOBJS} ${DEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ ${CREATEOBJS} ${LIBS} + +keydelete@EXEEXT@: ${DELETEOBJS} ${DEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ ${DELETEOBJS} ${LIBS} + +clean distclean:: + rm -f ${TARGETS} + diff --git a/bin/tests/system/tkey/clean.sh b/bin/tests/system/tkey/clean.sh new file mode 100644 index 0000000..7d64de5 --- /dev/null +++ b/bin/tests/system/tkey/clean.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 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. + +# $Id: clean.sh,v 1.6 2007/09/26 03:22:44 marka Exp $ + +rm -f dig.out.* random.data ns1/named.conf +rm -f K* ns1/K* +rm -f */named.memstats diff --git a/bin/tests/system/tkey/keycreate.c b/bin/tests/system/tkey/keycreate.c new file mode 100644 index 0000000..5540866 --- /dev/null +++ b/bin/tests/system/tkey/keycreate.c @@ -0,0 +1,329 @@ +/* + * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 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. + */ + +/* $Id: keycreate.c,v 1.15 2007/06/19 23:47:06 tbox Exp $ */ + +#include <config.h> + +#include <stdlib.h> +#include <string.h> + +#include <isc/app.h> +#include <isc/base64.h> +#include <isc/entropy.h> +#include <isc/hash.h> +#include <isc/log.h> +#include <isc/mem.h> +#include <isc/sockaddr.h> +#include <isc/socket.h> +#include <isc/task.h> +#include <isc/timer.h> +#include <isc/util.h> + +#include <dns/dispatch.h> +#include <dns/fixedname.h> +#include <dns/keyvalues.h> +#include <dns/message.h> +#include <dns/name.h> +#include <dns/request.h> +#include <dns/result.h> +#include <dns/tkey.h> +#include <dns/tsig.h> +#include <dns/view.h> + +#include <dst/result.h> + +#define CHECK(str, x) { \ + if ((x) != ISC_R_SUCCESS) { \ + fprintf(stderr, "I:%s: %s\n", (str), isc_result_totext(x)); \ + exit(-1); \ + } \ +} + +#define RUNCHECK(x) RUNTIME_CHECK((x) == ISC_R_SUCCESS) + +#define PORT 5300 +#define TIMEOUT 30 + +static dst_key_t *ourkey; +static isc_mem_t *mctx; +static dns_tsigkey_t *tsigkey, *initialkey; +static dns_tsig_keyring_t *ring; +static unsigned char noncedata[16]; +static isc_buffer_t nonce; +static dns_requestmgr_t *requestmgr; +static const char *ownername_str = "."; + +static void +recvquery(isc_task_t *task, isc_event_t *event) { + dns_requestevent_t *reqev = (dns_requestevent_t *)event; + isc_result_t result; + dns_message_t *query, *response; + char keyname[256]; + isc_buffer_t keynamebuf; + int type; + + UNUSED(task); + + REQUIRE(reqev != NULL); + + if (reqev->result != ISC_R_SUCCESS) { + fprintf(stderr, "I:request event result: %s\n", + isc_result_totext(reqev->result)); + exit(-1); + } + + query = reqev->ev_arg; + + response = NULL; + result = dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &response); + CHECK("dns_message_create", result); + + result = dns_request_getresponse(reqev->request, response, + DNS_MESSAGEPARSE_PRESERVEORDER); + CHECK("dns_request_getresponse", result); + + if (response->rcode != dns_rcode_noerror) { + result = ISC_RESULTCLASS_DNSRCODE + response->rcode; + fprintf(stderr, "I:response rcode: %s\n", + isc_result_totext(result)); + exit(-1); + } + + result = dns_tkey_processdhresponse(query, response, ourkey, &nonce, + &tsigkey, ring); + CHECK("dns_tkey_processdhresponse", result); + + /* + * Yes, this is a hack. + */ + isc_buffer_init(&keynamebuf, keyname, sizeof(keyname)); + result = dst_key_buildfilename(tsigkey->key, 0, "", &keynamebuf); + CHECK("dst_key_buildfilename", result); + printf("%.*s\n", (int)isc_buffer_usedlength(&keynamebuf), + (char *)isc_buffer_base(&keynamebuf)); + type = DST_TYPE_PRIVATE | DST_TYPE_PUBLIC | DST_TYPE_KEY; + result = dst_key_tofile(tsigkey->key, type, ""); + CHECK("dst_key_tofile", result); + + dns_message_destroy(&query); + dns_message_destroy(&response); + dns_request_destroy(&reqev->request); + isc_event_free(&event); + isc_app_shutdown(); + return; +} + +static void +sendquery(isc_task_t *task, isc_event_t *event) { + struct in_addr inaddr; + isc_sockaddr_t address; + isc_region_t r; + isc_result_t result; + dns_fixedname_t keyname; + dns_fixedname_t ownername; + isc_buffer_t namestr, keybuf; + unsigned char keydata[9]; + dns_message_t *query; + dns_request_t *request; + static char keystr[] = "0123456789ab"; + + isc_event_free(&event); + + result = ISC_R_FAILURE; + if (inet_pton(AF_INET, "10.53.0.1", &inaddr) != 1) + CHECK("inet_pton", result); + isc_sockaddr_fromin(&address, &inaddr, PORT); + + dns_fixedname_init(&keyname); + isc_buffer_init(&namestr, "tkeytest.", 9); + isc_buffer_add(&namestr, 9); + result = dns_name_fromtext(dns_fixedname_name(&keyname), &namestr, + NULL, ISC_FALSE, NULL); + CHECK("dns_name_fromtext", result); + + dns_fixedname_init(&ownername); + isc_buffer_init(&namestr, ownername_str, strlen(ownername_str)); + isc_buffer_add(&namestr, strlen(ownername_str)); + result = dns_name_fromtext(dns_fixedname_name(&ownername), &namestr, + NULL, ISC_FALSE, NULL); + CHECK("dns_name_fromtext", result); + + isc_buffer_init(&keybuf, keydata, 9); + result = isc_base64_decodestring(keystr, &keybuf); + CHECK("isc_base64_decodestring", result); + + isc_buffer_usedregion(&keybuf, &r); + + initialkey = NULL; + result = dns_tsigkey_create(dns_fixedname_name(&keyname), + DNS_TSIG_HMACMD5_NAME, + isc_buffer_base(&keybuf), + isc_buffer_usedlength(&keybuf), + ISC_FALSE, NULL, 0, 0, mctx, ring, + &initialkey); + CHECK("dns_tsigkey_create", result); + + query = NULL; + result = dns_message_create(mctx, DNS_MESSAGE_INTENTRENDER, &query); + CHECK("dns_message_create", result); + + result = dns_tkey_builddhquery(query, ourkey, + dns_fixedname_name(&ownername), + DNS_TSIG_HMACMD5_NAME, &nonce, 3600); + CHECK("dns_tkey_builddhquery", result); + + request = NULL; + result = dns_request_create(requestmgr, query, &address, + 0, initialkey, TIMEOUT, task, + recvquery, query, &request); + CHECK("dns_request_create", result); +} + +int +main(int argc, char *argv[]) { + char *ourkeyname; + isc_taskmgr_t *taskmgr; + isc_timermgr_t *timermgr; + isc_socketmgr_t *socketmgr; + isc_socket_t *sock; + unsigned int attrs, attrmask; + isc_sockaddr_t bind_any; + dns_dispatchmgr_t *dispatchmgr; + dns_dispatch_t *dispatchv4; + dns_view_t *view; + isc_entropy_t *ectx; + dns_tkeyctx_t *tctx; + isc_log_t *log; + isc_logconfig_t *logconfig; + isc_task_t *task; + isc_result_t result; + int type; + + RUNCHECK(isc_app_start()); + + if (argc < 2) { + fprintf(stderr, "I:no DH key provided\n"); + exit(-1); + } + ourkeyname = argv[1]; + + if (argc >= 3) + ownername_str = argv[2]; + + dns_result_register(); + + mctx = NULL; + RUNCHECK(isc_mem_create(0, 0, &mctx)); + + ectx = NULL; + RUNCHECK(isc_entropy_create(mctx, &ectx)); + RUNCHECK(isc_entropy_createfilesource(ectx, "random.data")); + RUNCHECK(isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE)); + + log = NULL; + logconfig = NULL; + RUNCHECK(isc_log_create(mctx, &log, &logconfig)); + + RUNCHECK(dst_lib_init(mctx, ectx, ISC_ENTROPY_GOODONLY)); + + taskmgr = NULL; + RUNCHECK(isc_taskmgr_create(mctx, 1, 0, &taskmgr)); + task = NULL; + RUNCHECK(isc_task_create(taskmgr, 0, &task)); + timermgr = NULL; + RUNCHECK(isc_timermgr_create(mctx, &timermgr)); + socketmgr = NULL; + RUNCHECK(isc_socketmgr_create(mctx, &socketmgr)); + dispatchmgr = NULL; + RUNCHECK(dns_dispatchmgr_create(mctx, NULL, &dispatchmgr)); + isc_sockaddr_any(&bind_any); + attrs = DNS_DISPATCHATTR_UDP | + DNS_DISPATCHATTR_MAKEQUERY | + DNS_DISPATCHATTR_IPV4; + attrmask = DNS_DISPATCHATTR_UDP | + DNS_DISPATCHATTR_TCP | + DNS_DISPATCHATTR_IPV4 | + DNS_DISPATCHATTR_IPV6; + dispatchv4 = NULL; + RUNCHECK(dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr, + &bind_any, 4096, 4, 2, 3, 5, + attrs, attrmask, &dispatchv4)); + requestmgr = NULL; + RUNCHECK(dns_requestmgr_create(mctx, timermgr, socketmgr, taskmgr, + dispatchmgr, dispatchv4, NULL, + &requestmgr)); + + ring = NULL; + RUNCHECK(dns_tsigkeyring_create(mctx, &ring)); + tctx = NULL; + RUNCHECK(dns_tkeyctx_create(mctx, ectx, &tctx)); + + view = NULL; + RUNCHECK(dns_view_create(mctx, 0, "_test", &view)); + dns_view_setkeyring(view, ring); + + sock = NULL; + RUNCHECK(isc_socket_create(socketmgr, PF_INET, isc_sockettype_udp, + &sock)); + + RUNCHECK(isc_app_onrun(mctx, task, sendquery, NULL)); + + ourkey = NULL; + type = DST_TYPE_PUBLIC | DST_TYPE_PRIVATE | DST_TYPE_KEY; + result = dst_key_fromnamedfile(ourkeyname, type, mctx, &ourkey); + CHECK("dst_key_fromnamedfile", result); + + isc_buffer_init(&nonce, noncedata, sizeof(noncedata)); + result = isc_entropy_getdata(ectx, noncedata, sizeof(noncedata), + NULL, ISC_ENTROPY_BLOCKING); + CHECK("isc_entropy_getdata", result); + isc_buffer_add(&nonce, sizeof(noncedata)); + + (void)isc_app_run(); + + dns_requestmgr_shutdown(requestmgr); + dns_requestmgr_detach(&requestmgr); + dns_dispatch_detach(&dispatchv4); + dns_dispatchmgr_destroy(&dispatchmgr); + isc_task_shutdown(task); + isc_task_detach(&task); + isc_taskmgr_destroy(&taskmgr); + isc_socket_detach(&sock); + isc_socketmgr_destroy(&socketmgr); + isc_timermgr_destroy(&timermgr); + + dst_key_free(&ourkey); + dns_tsigkey_detach(&initialkey); + dns_tsigkey_detach(&tsigkey); + + dns_tkeyctx_destroy(&tctx); + + dns_view_detach(&view); + + isc_log_destroy(&log); + + dst_lib_destroy(); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + + isc_mem_destroy(&mctx); + + isc_app_finish(); + + return (0); +} diff --git a/bin/tests/system/tkey/keydelete.c b/bin/tests/system/tkey/keydelete.c new file mode 100644 index 0000000..cb028ad --- /dev/null +++ b/bin/tests/system/tkey/keydelete.c @@ -0,0 +1,267 @@ +/* + * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 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. + */ + +/* $Id: keydelete.c,v 1.11 2007/06/19 23:47:06 tbox Exp $ */ + +#include <config.h> + +#include <stdlib.h> +#include <string.h> + +#include <isc/app.h> +#include <isc/base64.h> +#include <isc/entropy.h> +#include <isc/hash.h> +#include <isc/log.h> +#include <isc/mem.h> +#include <isc/sockaddr.h> +#include <isc/socket.h> +#include <isc/task.h> +#include <isc/timer.h> +#include <isc/util.h> + +#include <dns/dispatch.h> +#include <dns/fixedname.h> +#include <dns/keyvalues.h> +#include <dns/message.h> +#include <dns/name.h> +#include <dns/request.h> +#include <dns/result.h> +#include <dns/tkey.h> +#include <dns/tsig.h> +#include <dns/view.h> + +#include <dst/result.h> + +#define CHECK(str, x) { \ + if ((x) != ISC_R_SUCCESS) { \ + fprintf(stderr, "I:%s: %s\n", (str), isc_result_totext(x)); \ + exit(-1); \ + } \ +} + +#define RUNCHECK(x) RUNTIME_CHECK((x) == ISC_R_SUCCESS) + +#define PORT 5300 +#define TIMEOUT 30 + +static isc_mem_t *mctx; +static dns_tsigkey_t *tsigkey; +static dns_tsig_keyring_t *ring; +static dns_requestmgr_t *requestmgr; + +static void +recvquery(isc_task_t *task, isc_event_t *event) { + dns_requestevent_t *reqev = (dns_requestevent_t *)event; + isc_result_t result; + dns_message_t *query, *response; + + UNUSED(task); + + REQUIRE(reqev != NULL); + + if (reqev->result != ISC_R_SUCCESS) { + fprintf(stderr, "I:request event result: %s\n", + isc_result_totext(reqev->result)); + exit(-1); + } + + query = reqev->ev_arg; + + response = NULL; + result = dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &response); + CHECK("dns_message_create", result); + + result = dns_request_getresponse(reqev->request, response, + DNS_MESSAGEPARSE_PRESERVEORDER); + CHECK("dns_request_getresponse", result); + + if (response->rcode != dns_rcode_noerror) { + result = ISC_RESULTCLASS_DNSRCODE + response->rcode; + fprintf(stderr, "I:response rcode: %s\n", + isc_result_totext(result)); + exit(-1); + } + + result = dns_tkey_processdeleteresponse(query, response, ring); + CHECK("dns_tkey_processdhresponse", result); + + dns_message_destroy(&query); + dns_message_destroy(&response); + dns_request_destroy(&reqev->request); + isc_event_free(&event); + isc_app_shutdown(); + return; +} + +static void +sendquery(isc_task_t *task, isc_event_t *event) { + struct in_addr inaddr; + isc_sockaddr_t address; + isc_result_t result; + dns_message_t *query; + dns_request_t *request; + + isc_event_free(&event); + + result = ISC_R_FAILURE; + if (inet_pton(AF_INET, "10.53.0.1", &inaddr) != 1) + CHECK("inet_pton", result); + isc_sockaddr_fromin(&address, &inaddr, PORT); + + query = NULL; + result = dns_message_create(mctx, DNS_MESSAGE_INTENTRENDER, &query); + CHECK("dns_message_create", result); + + result = dns_tkey_builddeletequery(query, tsigkey); + CHECK("dns_tkey_builddeletequery", result); + + request = NULL; + result = dns_request_create(requestmgr, query, &address, + 0, tsigkey, TIMEOUT, task, + recvquery, query, &request); + CHECK("dns_request_create", result); +} + +int +main(int argc, char **argv) { + char *keyname; + isc_taskmgr_t *taskmgr; + isc_timermgr_t *timermgr; + isc_socketmgr_t *socketmgr; + isc_socket_t *sock; + unsigned int attrs, attrmask; + isc_sockaddr_t bind_any; + dns_dispatchmgr_t *dispatchmgr; + dns_dispatch_t *dispatchv4; + dns_view_t *view; + isc_entropy_t *ectx; + dns_tkeyctx_t *tctx; + dst_key_t *dstkey; + isc_log_t *log; + isc_logconfig_t *logconfig; + isc_task_t *task; + isc_result_t result; + int type; + + RUNCHECK(isc_app_start()); + + if (argc < 2) { + fprintf(stderr, "I:no key to delete\n"); + exit(-1); + } + keyname = argv[1]; + + dns_result_register(); + + mctx = NULL; + RUNCHECK(isc_mem_create(0, 0, &mctx)); + + ectx = NULL; + RUNCHECK(isc_entropy_create(mctx, &ectx)); + RUNCHECK(isc_entropy_createfilesource(ectx, "random.data")); + RUNCHECK(isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE)); + + log = NULL; + logconfig = NULL; + RUNCHECK(isc_log_create(mctx, &log, &logconfig)); + + RUNCHECK(dst_lib_init(mctx, ectx, ISC_ENTROPY_GOODONLY)); + + taskmgr = NULL; + RUNCHECK(isc_taskmgr_create(mctx, 1, 0, &taskmgr)); + task = NULL; + RUNCHECK(isc_task_create(taskmgr, 0, &task)); + timermgr = NULL; + RUNCHECK(isc_timermgr_create(mctx, &timermgr)); + socketmgr = NULL; + RUNCHECK(isc_socketmgr_create(mctx, &socketmgr)); + dispatchmgr = NULL; + RUNCHECK(dns_dispatchmgr_create(mctx, NULL, &dispatchmgr)); + isc_sockaddr_any(&bind_any); + attrs = DNS_DISPATCHATTR_UDP | + DNS_DISPATCHATTR_MAKEQUERY | + DNS_DISPATCHATTR_IPV4; + attrmask = DNS_DISPATCHATTR_UDP | + DNS_DISPATCHATTR_TCP | + DNS_DISPATCHATTR_IPV4 | + DNS_DISPATCHATTR_IPV6; + dispatchv4 = NULL; + RUNCHECK(dns_dispatch_getudp(dispatchmgr, socketmgr, taskmgr, + &bind_any, 4096, 4, 2, 3, 5, + attrs, attrmask, &dispatchv4)); + requestmgr = NULL; + RUNCHECK(dns_requestmgr_create(mctx, timermgr, socketmgr, taskmgr, + dispatchmgr, dispatchv4, NULL, + &requestmgr)); + + ring = NULL; + RUNCHECK(dns_tsigkeyring_create(mctx, &ring)); + tctx = NULL; + RUNCHECK(dns_tkeyctx_create(mctx, ectx, &tctx)); + + view = NULL; + RUNCHECK(dns_view_create(mctx, 0, "_test", &view)); + dns_view_setkeyring(view, ring); + + sock = NULL; + RUNCHECK(isc_socket_create(socketmgr, PF_INET, isc_sockettype_udp, + &sock)); + + RUNCHECK(isc_app_onrun(mctx, task, sendquery, NULL)); + + dstkey = NULL; + type = DST_TYPE_PUBLIC | DST_TYPE_PRIVATE | DST_TYPE_KEY; + result = dst_key_fromnamedfile(keyname, type, mctx, &dstkey); + CHECK("dst_key_fromnamedfile", result); + result = dns_tsigkey_createfromkey(dst_key_name(dstkey), + DNS_TSIG_HMACMD5_NAME, + dstkey, ISC_TRUE, NULL, 0, 0, + mctx, ring, &tsigkey); + CHECK("dns_tsigkey_createfromkey", result); + + (void)isc_app_run(); + + dns_requestmgr_shutdown(requestmgr); + dns_requestmgr_detach(&requestmgr); + dns_dispatch_detach(&dispatchv4); + dns_dispatchmgr_destroy(&dispatchmgr); + isc_task_shutdown(task); + isc_task_detach(&task); + isc_taskmgr_destroy(&taskmgr); + isc_socket_detach(&sock); + isc_socketmgr_destroy(&socketmgr); + isc_timermgr_destroy(&timermgr); + + dns_tsigkey_detach(&tsigkey); + + dns_tkeyctx_destroy(&tctx); + + dns_view_detach(&view); + + isc_log_destroy(&log); + + dst_lib_destroy(); + isc_hash_destroy(); + isc_entropy_detach(&ectx); + + isc_mem_destroy(&mctx); + + isc_app_finish(); + + return (0); +} diff --git a/bin/tests/system/tkey/ns1/named.conf.in b/bin/tests/system/tkey/ns1/named.conf.in new file mode 100644 index 0000000..27e0d6b --- /dev/null +++ b/bin/tests/system/tkey/ns1/named.conf.in @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 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. + */ + +/* $Id: named.conf.in,v 1.6 2007/06/19 23:47:06 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify no; + tkey-domain "server"; + tkey-dhkey "server" KEYID; +}; + +key "tkeytest." { + algorithm hmac-md5; + secret "0123456789ab"; +}; diff --git a/bin/tests/system/tkey/ns1/setup.sh b/bin/tests/system/tkey/ns1/setup.sh new file mode 100644 index 0000000..c54e17f --- /dev/null +++ b/bin/tests/system/tkey/ns1/setup.sh @@ -0,0 +1,25 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 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. + +# $Id: setup.sh,v 1.8 2007/06/19 23:47:06 tbox Exp $ + +RANDFILE=../random.data + +keyname=`$KEYGEN -k -a DH -b 768 -n host -r $RANDFILE server` +keyid=`echo $keyname | $PERL -p -e 's/^.*\+0*//;'` +rm -f named.conf +perl -p -e "s/KEYID/$keyid/;" < named.conf.in > named.conf diff --git a/bin/tests/system/tkey/prereq.sh b/bin/tests/system/tkey/prereq.sh new file mode 100644 index 0000000..9c162a4 --- /dev/null +++ b/bin/tests/system/tkey/prereq.sh @@ -0,0 +1,28 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2006, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 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. + +# $Id: prereq.sh,v 1.10 2007/06/19 23:47:06 tbox Exp $ + +../../genrandom 400 random.data + +if $KEYGEN -a RSAMD5 -b 512 -n zone -r random.data foo > /dev/null 2>&1 +then + rm -f foo* +else + echo "I:This test requires that --with-openssl was used." >&2 + exit 1 +fi diff --git a/bin/tests/system/tkey/setup.sh b/bin/tests/system/tkey/setup.sh new file mode 100644 index 0000000..d4aee8b --- /dev/null +++ b/bin/tests/system/tkey/setup.sh @@ -0,0 +1,24 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 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. + +# $Id: setup.sh,v 1.5 2007/06/19 23:47:06 tbox Exp $ + +RANDFILE=random.data + +../../genrandom 100 $RANDFILE + +cd ns1 && sh setup.sh diff --git a/bin/tests/system/tkey/tests.sh b/bin/tests/system/tkey/tests.sh new file mode 100644 index 0000000..199a3b9 --- /dev/null +++ b/bin/tests/system/tkey/tests.sh @@ -0,0 +1,83 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 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. + +# $Id: tests.sh,v 1.7 2007/06/19 23:47:06 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +DIGOPTS="@10.53.0.1 -p 5300" + +status=0 + +RANDFILE=random.data + +echo "I:generating new DH key" +ret=0 +dhkeyname=`$KEYGEN -k -a DH -b 768 -n host -r $RANDFILE client` || ret=1 +if [ $ret != 0 ]; then + echo "I:failed" + echo "I:exit status: $status" + exit $status +fi +status=`expr $status + $ret` + +for owner in . foo.example. +do + echo "I:creating new key using owner name \"$owner\"" + ret=0 + keyname=`./keycreate $dhkeyname $owner` || ret=1 + if [ $ret != 0 ]; then + echo "I:failed" + echo "I:exit status: $status" + exit $status + fi + status=`expr $status + $ret` + + echo "I:checking the new key" + ret=0 + $DIG $DIGOPTS . ns -k $keyname > dig.out.1 || ret=1 + grep "status: NOERROR" dig.out.1 > /dev/null || ret=1 + grep "TSIG.*hmac-md5.*NOERROR" dig.out.1 > /dev/null || ret=1 + grep "Some TSIG could not be validated" dig.out.1 > /dev/null && ret=1 + if [ $ret != 0 ]; then + echo "I:failed" + fi + status=`expr $status + $ret` + + echo "I:deleting new key" + ret=0 + ./keydelete $keyname || ret=1 + if [ $ret != 0 ]; then + echo "I:failed" + fi + status=`expr $status + $ret` + + echo "I:checking that new key has been deleted" + ret=0 + $DIG $DIGOPTS . ns -k $keyname > dig.out.2 || ret=1 + grep "status: NOERROR" dig.out.2 > /dev/null && ret=1 + grep "TSIG.*hmac-md5.*NOERROR" dig.out.2 > /dev/null && ret=1 + grep "Some TSIG could not be validated" dig.out.2 > /dev/null || ret=1 + if [ $ret != 0 ]; then + echo "I:failed" + fi + status=`expr $status + $ret` +done + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/tsig/clean.sh b/bin/tests/system/tsig/clean.sh new file mode 100644 index 0000000..47e7172 --- /dev/null +++ b/bin/tests/system/tsig/clean.sh @@ -0,0 +1,24 @@ +#!/bin/sh +# +# Copyright (C) 2005-2007 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: clean.sh,v 1.6 2007/09/26 03:22:44 marka Exp $ + +# +# Clean up after tsig tests. +# + +rm -f dig.out.* +rm -f */named.memstats diff --git a/bin/tests/system/tsig/ns1/example.db b/bin/tests/system/tsig/ns1/example.db new file mode 100644 index 0000000..1dd6522 --- /dev/null +++ b/bin/tests/system/tsig/ns1/example.db @@ -0,0 +1,151 @@ +; Copyright (C) 2005-2007 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: example.db,v 1.5 2007/06/19 23:47:06 tbox Exp $ + +$ORIGIN . +$TTL 300 ; 5 minutes +example.nil IN SOA ns1.example.nil. hostmaster.example.nil. ( + 1 ; serial + 2000 ; refresh (2000 seconds) + 2000 ; retry (2000 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) +example.nil. NS ns1.example.nil. +ns1.example.nil. A 10.53.0.1 +example.nil. NS ns2.example.nil. +ns2.example.nil. A 10.53.0.2 + +$ORIGIN example.nil. +* MX 10 mail +a TXT "foo foo foo" + PTR foo.net. +$TTL 3600 ; 1 hour +a01 A 0.0.0.0 +a02 A 255.255.255.255 +a601 AAAA ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff +afsdb01 AFSDB 0 hostname +afsdb02 AFSDB 65535 . +$TTL 300 ; 5 minutes +b CNAME foo.net. +c A 73.80.65.49 +$TTL 3600 ; 1 hour +cert01 CERT 65534 65535 PRIVATEOID ( + MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgi + WCn/GxHhai6VAuHAoNUz4YoU1tVfSCSqQYn6//11U6Nl + d80jEeC8aTrO+KKmCaY= ) +cname01 CNAME cname-target. +cname02 CNAME cname-target +cname03 CNAME . +$TTL 300 ; 5 minutes +d A 73.80.65.49 +$TTL 3600 ; 1 hour +dname01 DNAME dname-target. +dname02 DNAME dname-target +dname03 DNAME . +$TTL 300 ; 5 minutes +e MX 10 mail + TXT "one" + TXT "three" + TXT "two" + A 73.80.65.49 + A 73.80.65.50 + A 73.80.65.52 + A 73.80.65.51 +f A 73.80.65.52 +$TTL 3600 ; 1 hour +gpos01 GPOS "-22.6882" "116.8652" "250.0" +gpos02 GPOS "" "" "" +hinfo01 HINFO "Generic PC clone" "NetBSD-1.4" +hinfo02 HINFO "PC" "NetBSD" +isdn01 ISDN "isdn-address" +isdn02 ISDN "isdn-address" "subaddress" +isdn03 ISDN "isdn-address" +isdn04 ISDN "isdn-address" "subaddress" +key01 KEY 512 255 1 ( + AQMFD5raczCJHViKtLYhWGz8hMY9UGRuniJDBzC7w0aR + yzWZriO6i2odGWWQVucZqKVsENW91IOW4vqudngPZsY3 + GvQ/xVA8/7pyFj6b7Esga60zyGW6LFe9r8n6paHrlG5o + jqf0BaqHT+8= ) +kx01 KX 10 kdc +kx02 KX 10 . +loc01 LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m +loc02 LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m +mb01 MG madname +mb02 MG . +mg01 MG mgmname +mg02 MG . +minfo01 MINFO rmailbx emailbx +minfo02 MINFO . . +mr01 MR mrname +mr02 MR . +mx01 MX 10 mail +mx02 MX 10 . +naptr01 NAPTR 0 0 "" "" "" . +naptr02 NAPTR 65535 65535 "blurgh" "blorf" "blegh" foo. +nsap-ptr01 NSAP-PTR foo. + NSAP-PTR . +nsap01 NSAP 0x47000580005a0000000001e133ffffff00016100 +nsap02 NSAP 0x47000580005a0000000001e133ffffff00016100 +nxt01 NXT a.secure ( NS SOA MX SIG KEY LOC NXT ) +nxt02 NXT . ( NSAP-PTR NXT ) +nxt03 NXT . ( A ) +nxt04 NXT . ( 127 ) +ptr01 PTR example.nil. +px01 PX 65535 foo. bar. +px02 PX 65535 . . +rp01 RP mbox-dname txt-dname +rp02 RP . . +rt01 RT 0 intermediate-host +rt02 RT 65535 . +$TTL 300 ; 5 minutes +s NS ns.s +$ORIGIN s.example.nil. +ns A 73.80.65.49 +$ORIGIN example.nil. +$TTL 3600 ; 1 hour +sig01 SIG NXT 1 3 3600 20000102030405 ( + 19961211100908 2143 foo + MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgi + WCn/GxHhai6VAuHAoNUz4YoU1tVfSCSqQYn6//11U6Nl + d80jEeC8aTrO+KKmCaY= ) +srv01 SRV 0 0 0 . +srv02 SRV 65535 65535 65535 old-slow-box.example.com. +$TTL 301 ; 5 minutes 1 second +t A 73.80.65.49 +$TTL 3600 ; 1 hour +txt01 TXT "foo" +txt02 TXT "foo" "bar" +txt03 TXT "foo" +txt04 TXT "foo" "bar" +txt05 TXT "foo bar" +txt06 TXT "foo bar" +txt07 TXT "foo bar" +txt08 TXT "foo\010bar" +txt09 TXT "foo\010bar" +txt10 TXT "foo bar" +txt11 TXT "\"foo\"" +txt12 TXT "\"foo\"" +$TTL 300 ; 5 minutes +u TXT "txt-not-in-nxt" +$ORIGIN u.example.nil. +a A 73.80.65.49 +b A 73.80.65.49 +$ORIGIN example.nil. +$TTL 3600 ; 1 hour +wks01 WKS 10.0.0.1 6 ( 0 1 2 21 23 ) +wks02 WKS 10.0.0.1 17 ( 0 1 2 53 ) +wks03 WKS 10.0.0.2 6 ( 65535 ) +x2501 X25 "123456789" diff --git a/bin/tests/system/tsig/ns1/named.conf b/bin/tests/system/tsig/ns1/named.conf new file mode 100644 index 0000000..b48de83 --- /dev/null +++ b/bin/tests/system/tsig/ns1/named.conf @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2005-2007 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: named.conf,v 1.5 2007/06/19 23:47:06 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify no; +}; + +key "md5" { + secret "97rnFx24Tfna4mHPfgnerA=="; + algorithm hmac-md5; +}; + +key "sha1" { + secret "FrSt77yPTFx6hTs4i2tKLB9LmE0="; + algorithm hmac-sha1; +}; + +key "sha224" { + secret "hXfwwwiag2QGqblopofai9NuW28q/1rH4CaTnA=="; + algorithm hmac-sha224; +}; + +key "sha256" { + secret "R16NojROxtxH/xbDl//ehDsHm5DjWTQ2YXV+hGC2iBY="; + algorithm hmac-sha256; +}; + +key "sha384" { + secret "OaDdoAk2LAcLtYeUnsT7A9XHjsb6ZEma7OCvUpMraQIJX6HetGrlKmF7yglO1G2h"; + algorithm hmac-sha384; +}; + +key "sha512" { + secret "jI/Pa4qRu96t76Pns5Z/Ndxbn3QCkwcxLOgt9vgvnJw5wqTRvNyk3FtD6yIMd1dWVlqZ+Y4fe6Uasc0ckctEmg=="; + algorithm hmac-sha512; +}; + +key "md5-trunc" { + secret "97rnFx24Tfna4mHPfgnerA=="; + algorithm hmac-md5-80; +}; + +key "sha1-trunc" { + secret "FrSt77yPTFx6hTs4i2tKLB9LmE0="; + algorithm hmac-sha1-80; +}; + +key "sha224-trunc" { + secret "hXfwwwiag2QGqblopofai9NuW28q/1rH4CaTnA=="; + algorithm hmac-sha224-112; +}; + +key "sha256-trunc" { + secret "R16NojROxtxH/xbDl//ehDsHm5DjWTQ2YXV+hGC2iBY="; + algorithm hmac-sha256-128; +}; + +key "sha384-trunc" { + secret "OaDdoAk2LAcLtYeUnsT7A9XHjsb6ZEma7OCvUpMraQIJX6HetGrlKmF7yglO1G2h"; + algorithm hmac-sha384-192; +}; + +key "sha512-trunc" { + secret "jI/Pa4qRu96t76Pns5Z/Ndxbn3QCkwcxLOgt9vgvnJw5wqTRvNyk3FtD6yIMd1dWVlqZ+Y4fe6Uasc0ckctEmg=="; + algorithm hmac-sha512-256; +}; + +zone "example.nil" { + type master; + file "example.db"; +}; diff --git a/bin/tests/system/tsig/tests.sh b/bin/tests/system/tsig/tests.sh new file mode 100644 index 0000000..d2391c1 --- /dev/null +++ b/bin/tests/system/tsig/tests.sh @@ -0,0 +1,218 @@ +#!/bin/sh +# +# Copyright (C) 2005-2007 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: tests.sh,v 1.5 2007/06/19 23:47:06 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +# +# Shared secrets. +# +md5="97rnFx24Tfna4mHPfgnerA==" +sha1="FrSt77yPTFx6hTs4i2tKLB9LmE0=" +sha224="hXfwwwiag2QGqblopofai9NuW28q/1rH4CaTnA==" +sha256="R16NojROxtxH/xbDl//ehDsHm5DjWTQ2YXV+hGC2iBY=" +sha384="OaDdoAk2LAcLtYeUnsT7A9XHjsb6ZEma7OCvUpMraQIJX6HetGrlKmF7yglO1G2h" +sha512="jI/Pa4qRu96t76Pns5Z/Ndxbn3QCkwcxLOgt9vgvnJw5wqTRvNyk3FtD6yIMd1dWVlqZ+Y4fe6Uasc0ckctEmg==" + +status=0 + +echo "I:fetching using hmac-md5 (old form)" +ret=0 +$DIG +tcp +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + -y "md5:$md5" @10.53.0.1 soa -p 5300 > dig.out.md5.old || ret=1 +grep -i "md5.*TSIG.*NOERROR" dig.out.md5.old > /dev/null || ret=1 +if [ $ret -eq 1 ] ; then + echo "I: failed"; status=1 +fi + +echo "I:fetching using hmac-md5 (new form)" +ret=0 +$DIG +tcp +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + -y "hmac-md5:md5:$md5" @10.53.0.1 soa -p 5300 > dig.out.md5.new || ret=1 +grep -i "md5.*TSIG.*NOERROR" dig.out.md5.new > /dev/null || ret=1 +if [ $ret -eq 1 ] ; then + echo "I: failed"; status=1 +fi + +echo "I:fetching using hmac-sha1" +ret=0 +$DIG +tcp +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + -y "hmac-sha1:sha1:$sha1" @10.53.0.1 soa -p 5300 > dig.out.sha1 || ret=1 +grep -i "sha1.*TSIG.*NOERROR" dig.out.sha1 > /dev/null || ret=1 +if [ $ret -eq 1 ] ; then + echo "I: failed"; status=1 +fi + +echo "I:fetching using hmac-sha224" +ret=0 +$DIG +tcp +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + -y "hmac-sha224:sha224:$sha224" @10.53.0.1 soa -p 5300 > dig.out.sha224 || ret=1 +grep -i "sha224.*TSIG.*NOERROR" dig.out.sha224 > /dev/null || ret=1 +if [ $ret -eq 1 ] ; then + echo "I: failed"; status=1 +fi + +echo "I:fetching using hmac-sha256" +ret=0 +$DIG +tcp +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + -y "hmac-sha256:sha256:$sha256" @10.53.0.1 soa -p 5300 > dig.out.sha256 || ret=1 +grep -i "sha256.*TSIG.*NOERROR" dig.out.sha256 > /dev/null || ret=1 +if [ $ret -eq 1 ] ; then + echo "I: failed"; status=1 +fi + +echo "I:fetching using hmac-sha384" +ret=0 +$DIG +tcp +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + -y "hmac-sha384:sha384:$sha384" @10.53.0.1 soa -p 5300 > dig.out.sha384 || ret=1 +grep -i "sha384.*TSIG.*NOERROR" dig.out.sha384 > /dev/null || ret=1 +if [ $ret -eq 1 ] ; then + echo "I: failed"; status=1 +fi + +echo "I:fetching using hmac-sha512" +ret=0 +$DIG +tcp +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + -y "hmac-sha512:sha512:$sha512" @10.53.0.1 soa -p 5300 > dig.out.sha512 || ret=1 +grep -i "sha512.*TSIG.*NOERROR" dig.out.sha512 > /dev/null || ret=1 +if [ $ret -eq 1 ] ; then + echo "I: failed"; status=1 +fi + +# +# +# Truncated TSIG +# +# +echo "I:fetching using hmac-md5 (trunc)" +ret=0 +$DIG +tcp +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + -y "hmac-md5-80:md5-trunc:$md5" @10.53.0.1 soa -p 5300 > dig.out.md5.trunc || ret=1 +grep -i "md5-trunc.*TSIG.*NOERROR" dig.out.md5.trunc > /dev/null || ret=1 +if [ $ret -eq 1 ] ; then + echo "I: failed"; status=1 +fi + +echo "I:fetching using hmac-sha1 (trunc)" +ret=0 +$DIG +tcp +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + -y "hmac-sha1-80:sha1-trunc:$sha1" @10.53.0.1 soa -p 5300 > dig.out.sha1.trunc || ret=1 +grep -i "sha1.*TSIG.*NOERROR" dig.out.sha1.trunc > /dev/null || ret=1 +if [ $ret -eq 1 ] ; then + echo "I: failed"; status=1 +fi + +echo "I:fetching using hmac-sha224 (trunc)" +ret=0 +$DIG +tcp +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + -y "hmac-sha224-112:sha224-trunc:$sha224" @10.53.0.1 soa -p 5300 > dig.out.sha224.trunc || ret=1 +grep -i "sha224-trunc.*TSIG.*NOERROR" dig.out.sha224.trunc > /dev/null || ret=1 +if [ $ret -eq 1 ] ; then + echo "I: failed"; status=1 +fi + +echo "I:fetching using hmac-sha256 (trunc)" +ret=0 +$DIG +tcp +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + -y "hmac-sha256-128:sha256-trunc:$sha256" @10.53.0.1 soa -p 5300 > dig.out.sha256.trunc || ret=1 +grep -i "sha256-trunc.*TSIG.*NOERROR" dig.out.sha256.trunc > /dev/null || ret=1 +if [ $ret -eq 1 ] ; then + echo "I: failed"; status=1 +fi + +echo "I:fetching using hmac-sha384 (trunc)" +ret=0 +$DIG +tcp +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + -y "hmac-sha384-192:sha384-trunc:$sha384" @10.53.0.1 soa -p 5300 > dig.out.sha384.trunc || ret=1 +grep -i "sha384-trunc.*TSIG.*NOERROR" dig.out.sha384.trunc > /dev/null || ret=1 +if [ $ret -eq 1 ] ; then + echo "I: failed"; status=1 +fi + +echo "I:fetching using hmac-sha512-256 (trunc)" +ret=0 +$DIG +tcp +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + -y "hmac-sha512-256:sha512-trunc:$sha512" @10.53.0.1 soa -p 5300 > dig.out.sha512.trunc || ret=1 +grep -i "sha512-trunc.*TSIG.*NOERROR" dig.out.sha512.trunc > /dev/null || ret=1 +if [ $ret -eq 1 ] ; then + echo "I: failed"; status=1 +fi + + +# +# +# Check for bad truncation. +# +# +echo "I:fetching using hmac-md5-80 (BADTRUNC)" +ret=0 +$DIG +tcp +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + -y "hmac-md5-80:md5:$md5" @10.53.0.1 soa -p 5300 > dig.out.md5-80 || ret=1 +grep -i "md5.*TSIG.*BADTRUNC" dig.out.md5-80 > /dev/null || ret=1 +if [ $ret -eq 1 ] ; then + echo "I: failed"; status=1 +fi + +echo "I:fetching using hmac-sha1-80 (BADTRUNC)" +ret=0 +$DIG +tcp +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + -y "hmac-sha1-80:sha1:$sha1" @10.53.0.1 soa -p 5300 > dig.out.sha1-80 || ret=1 +grep -i "sha1.*TSIG.*BADTRUNC" dig.out.sha1-80 > /dev/null || ret=1 +if [ $ret -eq 1 ] ; then + echo "I: failed"; status=1 +fi + +echo "I:fetching using hmac-sha224-112 (BADTRUNC)" +ret=0 +$DIG +tcp +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + -y "hmac-sha224-112:sha224:$sha224" @10.53.0.1 soa -p 5300 > dig.out.sha224-112 || ret=1 +grep -i "sha224.*TSIG.*BADTRUNC" dig.out.sha224-112 > /dev/null || ret=1 +if [ $ret -eq 1 ] ; then + echo "I: failed"; status=1 +fi + +echo "I:fetching using hmac-sha256-128 (BADTRUNC)" +ret=0 +$DIG +tcp +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + -y "hmac-sha256-128:sha256:$sha256" @10.53.0.1 soa -p 5300 > dig.out.sha256-128 || ret=1 +grep -i "sha256.*TSIG.*BADTRUNC" dig.out.sha256-128 > /dev/null || ret=1 +if [ $ret -eq 1 ] ; then + echo "I: failed"; status=1 +fi + +echo "I:fetching using hmac-sha384-192 (BADTRUNC)" +ret=0 +$DIG +tcp +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + -y "hmac-sha384-192:sha384:$sha384" @10.53.0.1 soa -p 5300 > dig.out.sha384-192 || ret=1 +grep -i "sha384.*TSIG.*BADTRUNC" dig.out.sha384-192 > /dev/null || ret=1 +if [ $ret -eq 1 ] ; then + echo "I: failed"; status=1 +fi + +echo "I:fetching using hmac-sha512-256 (BADTRUNC)" +ret=0 +$DIG +tcp +nosea +nostat +noquest +nocomm +nocmd example.nil.\ + -y "hmac-sha512-256:sha512:$sha512" @10.53.0.1 soa -p 5300 > dig.out.sha512-256 || ret=1 +grep -i "sha512.*TSIG.*BADTRUNC" dig.out.sha512-256 > /dev/null || ret=1 +if [ $ret -eq 1 ] ; then + echo "I: failed"; status=1 +fi + +exit $status + + diff --git a/bin/tests/system/unknown/clean.sh b/bin/tests/system/unknown/clean.sh new file mode 100644 index 0000000..98acac5 --- /dev/null +++ b/bin/tests/system/unknown/clean.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# +# 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. + +# $Id: clean.sh,v 1.7 2007/09/26 03:22:44 marka Exp $ + +rm -f dig.out +rm -f */named.memstats diff --git a/bin/tests/system/unknown/ns1/broken1.db b/bin/tests/system/unknown/ns1/broken1.db new file mode 100644 index 0000000..657c75e --- /dev/null +++ b/bin/tests/system/unknown/ns1/broken1.db @@ -0,0 +1,29 @@ +; 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. + +; $Id: broken1.db,v 1.5 2007/06/19 23:47:06 tbox Exp $ + +$TTL 300 ; 5 minutes +@ SOA mname1. . ( + 2000062101 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.1 + +a A \# 5 0A000001 diff --git a/bin/tests/system/unknown/ns1/broken2.db b/bin/tests/system/unknown/ns1/broken2.db new file mode 100644 index 0000000..47e2942 --- /dev/null +++ b/bin/tests/system/unknown/ns1/broken2.db @@ -0,0 +1,29 @@ +; 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. + +; $Id: broken2.db,v 1.5 2007/06/19 23:47:06 tbox Exp $ + +$TTL 300 ; 5 minutes +@ SOA mname1. . ( + 2000062101 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.1 + +a A \# 4 0A00000100 diff --git a/bin/tests/system/unknown/ns1/broken3.db b/bin/tests/system/unknown/ns1/broken3.db new file mode 100644 index 0000000..a292a4e --- /dev/null +++ b/bin/tests/system/unknown/ns1/broken3.db @@ -0,0 +1,29 @@ +; 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. + +; $Id: broken3.db,v 1.5 2007/06/19 23:47:06 tbox Exp $ + +$TTL 300 ; 5 minutes +@ SOA mname1. . ( + 2000062101 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.1 + +a A \# 5 0A00000100 diff --git a/bin/tests/system/unknown/ns1/broken4.db b/bin/tests/system/unknown/ns1/broken4.db new file mode 100644 index 0000000..9abb02b --- /dev/null +++ b/bin/tests/system/unknown/ns1/broken4.db @@ -0,0 +1,29 @@ +; 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. + +; $Id: broken4.db,v 1.6 2007/06/19 23:47:06 tbox Exp $ + +$TTL 300 ; 5 minutes +@ SOA mname1. . ( + 2000062101 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.1 + +soa SOA \# 32 026E73013300 04726F6F74C4 00000001 00000001 00000001 00000001 00000001 diff --git a/bin/tests/system/unknown/ns1/broken5.db b/bin/tests/system/unknown/ns1/broken5.db new file mode 100644 index 0000000..5501a77 --- /dev/null +++ b/bin/tests/system/unknown/ns1/broken5.db @@ -0,0 +1,29 @@ +; 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. + +; $Id: broken5.db,v 1.5 2007/06/19 23:47:06 tbox Exp $ + +$TTL 300 ; 5 minutes +@ SOA mname1. . ( + 2000062101 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.1 + +any TYPE255 \# 2 AB CD diff --git a/bin/tests/system/unknown/ns1/class10.hints b/bin/tests/system/unknown/ns1/class10.hints new file mode 100644 index 0000000..c283a31 --- /dev/null +++ b/bin/tests/system/unknown/ns1/class10.hints @@ -0,0 +1,19 @@ +; 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. + +; $Id: class10.hints,v 1.5 2007/06/19 23:47:06 tbox Exp $ + +$TTL 3600 +. NS ns. diff --git a/bin/tests/system/unknown/ns1/example-class10.db b/bin/tests/system/unknown/ns1/example-class10.db new file mode 100644 index 0000000..834b558 --- /dev/null +++ b/bin/tests/system/unknown/ns1/example-class10.db @@ -0,0 +1,37 @@ +; 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. + +; $Id: example-class10.db,v 1.5 2007/06/19 23:47:06 tbox Exp $ + +$TTL 300 ; 5 minutes +@ SOA mname1. . ( + 2000062101 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns + +a1 A \# 4 0A000001 +a2 CLASS10 A \# 4 0A000001 + +txt1 TXT \# 6 0568656C6C6F +txt2 TXT "hello" +txt3 CLASS10 TXT \# 6 0568656C6C6F +txt4 CLASS10 TXT "hello" + +unk1 TYPE123 \# 1 00 +unk2 CLASS10 TYPE123 \# 1 00 diff --git a/bin/tests/system/unknown/ns1/example-in.db b/bin/tests/system/unknown/ns1/example-in.db new file mode 100644 index 0000000..579bed8 --- /dev/null +++ b/bin/tests/system/unknown/ns1/example-in.db @@ -0,0 +1,52 @@ +; 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. + +; $Id: example-in.db,v 1.7 2007/06/19 23:47:06 tbox Exp $ + +$TTL 300 ; 5 minutes +@ SOA mname1. . ( + 2000062101 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns +ns A 10.53.0.1 + +a1 A \# 4 0A000001 +a2 A \# 4 0A 00 00 01 +a3 CLASS1 A 10.0.0.1 +a4 CLASS1 A \# 4 0A000001 +a5 TYPE1 10.0.0.1 +a6 TYPE1 \# 4 0A000001 +a7 CLASS1 TYPE1 10.0.0.1 +a8 CLASS1 TYPE1 \# 4 0A000001 +a9 IN TYPE1 10.0.0.1 +a10 IN TYPE1 \# 4 0A000001 +a11 IN TYPE1 \# 4 0a000001 +a12 IN A \# 4 0A000001 + +txt1 IN TXT "hello" +txt2 CLASS1 TXT "hello" +txt3 IN TYPE16 "hello" +txt4 CLASS1 TYPE16 "hello" +txt5 TXT \# 6 0568656C6C6F +txt6 TYPE16 \# 6 0568656C6C6F +txt7 IN TXT \# 6 0568656C6C6F + +unk1 TYPE123 \# 1 00 +unk2 CLASS1 TYPE123 \# 1 00 +unk3 IN TYPE123 \# 1 00 diff --git a/bin/tests/system/unknown/ns1/named.conf b/bin/tests/system/unknown/ns1/named.conf new file mode 100644 index 0000000..be3b57e --- /dev/null +++ b/bin/tests/system/unknown/ns1/named.conf @@ -0,0 +1,76 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.11 2007/06/19 23:47:06 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify no; +}; + +view "in" { + zone "example." { + type master; + file "example-in.db"; + }; + + zone "broken1." { + type master; + file "broken1.db"; + }; + + zone "broken2." { + type master; + file "broken2.db"; + }; + + zone "broken3." { + type master; + file "broken3.db"; + }; + + zone "broken4." { + type master; + file "broken4.db"; + }; + + zone "broken5." { + type master; + file "broken5.db"; + }; +}; + +view "class10" class10 { + zone "." class10 { + type hint; + file "class10.hints"; + }; + + zone "example." class10 { + type master; + file "example-class10.db"; + }; +}; diff --git a/bin/tests/system/unknown/tests.sh b/bin/tests/system/unknown/tests.sh new file mode 100644 index 0000000..c234178 --- /dev/null +++ b/bin/tests/system/unknown/tests.sh @@ -0,0 +1,119 @@ +#!/bin/sh +# +# 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. + +# $Id: tests.sh,v 1.10 2007/06/19 23:47:06 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +status=0 + +DIGOPTS="@10.53.0.1 -p 5300" + +echo "I:querying for various representations of an IN A record" +for i in 1 2 3 4 5 6 7 8 9 10 11 12 +do + ret=0 + $DIG +short $DIGOPTS a$i.example a in > dig.out || ret=1 + echo 10.0.0.1 | diff - dig.out || ret=1 + if [ $ret != 0 ] + then + echo "#$i failed" + fi + status=`expr $status + $ret` +done + +echo "I:querying for various representations of an IN TXT record" +for i in 1 2 3 4 5 6 7 +do + ret=0 + $DIG +short $DIGOPTS txt$i.example txt in > dig.out || ret=1 + echo '"hello"' | diff - dig.out || ret=1 + if [ $ret != 0 ] + then + echo "#$i failed" + fi + status=`expr $status + $ret` +done + +echo "I:querying for various representations of an IN TYPE123 record" +for i in 1 2 3 +do + ret=0 + $DIG +short $DIGOPTS unk$i.example type123 in > dig.out || ret=1 + echo '\# 1 00' | diff - dig.out || ret=1 + if [ $ret != 0 ] + then + echo "#$i failed" + fi + status=`expr $status + $ret` +done + +echo "I:querying for various representations of a CLASS10 TYPE1 record" +for i in 1 2 +do + ret=0 + $DIG +short $DIGOPTS a$i.example a class10 > dig.out || ret=1 + echo '\# 4 0A000001' | diff - dig.out || ret=1 + if [ $ret != 0 ] + then + echo "#$i failed" + fi + status=`expr $status + $ret` +done + +echo "I:querying for various representations of a CLASS10 TXT record" +for i in 1 2 3 4 +do + ret=0 + $DIG +short $DIGOPTS txt$i.example txt class10 > dig.out || ret=1 + echo '"hello"' | diff - dig.out || ret=1 + if [ $ret != 0 ] + then + echo "#$i failed" + fi + status=`expr $status + $ret` +done + +echo "I:querying for various representations of a CLASS10 TYPE123 record" +for i in 1 2 +do + ret=0 + $DIG +short $DIGOPTS unk$i.example type123 class10 > dig.out || ret=1 + echo '\# 1 00' | diff - dig.out || ret=1 + if [ $ret != 0 ] + then + echo "#$i failed" + fi + status=`expr $status + $ret` +done + +echo "I:querying for SOAs of zone that should have failed to load" +for i in 1 2 3 4 +do + ret=0 + $DIG $DIGOPTS broken$i. soa in > dig.out || ret=1 + grep "SERVFAIL" dig.out > /dev/null || ret=1 + if [ $ret != 0 ] + then + echo "#$i failed" + fi + status=`expr $status + $ret` +done + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/upforwd/clean.sh b/bin/tests/system/upforwd/clean.sh new file mode 100644 index 0000000..5d4054e --- /dev/null +++ b/bin/tests/system/upforwd/clean.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# +# 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. + +# $Id: clean.sh,v 1.9 2007/09/26 03:22:44 marka Exp $ + +# +# Clean up after zone transfer tests. +# + +rm -f dig.out.ns1 dig.out.ns2 dig.out.ns1 dig.out.ns3 dig.out.ns1.after +rm -f ns1/*.jnl ns2/*.jnl ns3/*.jnl ns1/example.db ns2/*.bk ns3/*.bk +rm -f */named.memstats diff --git a/bin/tests/system/upforwd/knowngood.after1 b/bin/tests/system/upforwd/knowngood.after1 new file mode 100644 index 0000000..7fc424c --- /dev/null +++ b/bin/tests/system/upforwd/knowngood.after1 @@ -0,0 +1,10 @@ +example. 3600 IN SOA n1.example. hostmaster.ns1.example. 2 3600 1200 604800 7200 +example. 3600 IN NS ns2.example. +example. 3600 IN NS ns3.example. +ns1.example. 3600 IN A 10.53.0.1 +ns2.example. 3600 IN A 10.53.0.2 +ns3.example. 3600 IN A 10.53.0.3 +updated.example. 600 IN TXT "Foo" +updated.example. 600 IN A 10.10.10.1 +example. 3600 IN SOA n1.example. hostmaster.ns1.example. 2 3600 1200 604800 7200 + diff --git a/bin/tests/system/upforwd/knowngood.after2 b/bin/tests/system/upforwd/knowngood.after2 new file mode 100644 index 0000000..eab7a2c --- /dev/null +++ b/bin/tests/system/upforwd/knowngood.after2 @@ -0,0 +1,11 @@ +example. 3600 IN SOA n1.example. hostmaster.ns1.example. 3 3600 1200 604800 7200 +example. 3600 IN NS ns2.example. +example. 3600 IN NS ns3.example. +ns1.example. 3600 IN A 10.53.0.1 +ns2.example. 3600 IN A 10.53.0.2 +ns3.example. 3600 IN A 10.53.0.3 +unsigned.example. 600 IN TXT "Foo" +unsigned.example. 600 IN A 10.10.10.1 +updated.example. 600 IN TXT "Foo" +updated.example. 600 IN A 10.10.10.1 +example. 3600 IN SOA n1.example. hostmaster.ns1.example. 3 3600 1200 604800 7200 diff --git a/bin/tests/system/upforwd/knowngood.before b/bin/tests/system/upforwd/knowngood.before new file mode 100644 index 0000000..4bde819 --- /dev/null +++ b/bin/tests/system/upforwd/knowngood.before @@ -0,0 +1,8 @@ +example. 3600 IN SOA n1.example. hostmaster.ns1.example. 1 3600 1200 604800 7200 +example. 3600 IN NS ns2.example. +example. 3600 IN NS ns3.example. +ns1.example. 3600 IN A 10.53.0.1 +ns2.example. 3600 IN A 10.53.0.2 +ns3.example. 3600 IN A 10.53.0.3 +example. 3600 IN SOA n1.example. hostmaster.ns1.example. 1 3600 1200 604800 7200 + diff --git a/bin/tests/system/upforwd/knowngood.ns2.before b/bin/tests/system/upforwd/knowngood.ns2.before new file mode 100644 index 0000000..bb3c355 --- /dev/null +++ b/bin/tests/system/upforwd/knowngood.ns2.before @@ -0,0 +1,6 @@ +example. 3600 IN SOA n1.example. hostmaster.ns1.example. 1 3600 1200 604800 7200 +example. 3600 IN NS ns2.example. +ns1.example. 3600 IN A 10.53.0.1 +ns2.example. 3600 IN A 10.53.0.2 +example. 3600 IN SOA n1.example. hostmaster.ns1.example. 1 3600 1200 604800 7200 + diff --git a/bin/tests/system/upforwd/ns1/example1.db b/bin/tests/system/upforwd/ns1/example1.db new file mode 100644 index 0000000..940b9fd --- /dev/null +++ b/bin/tests/system/upforwd/ns1/example1.db @@ -0,0 +1,24 @@ +; 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. + +; $Id: example1.db,v 1.4 2007/06/19 23:47:06 tbox Exp $ + +@ 3600 SOA n1.example. hostmaster.ns1.example. ( + 1 3600 1200 604800 7200 ) + NS ns2.example. + NS ns3.example. +ns1 A 10.53.0.1 +ns2 A 10.53.0.2 +ns3 A 10.53.0.3 diff --git a/bin/tests/system/upforwd/ns1/named.conf b/bin/tests/system/upforwd/ns1/named.conf new file mode 100644 index 0000000..8d9d2fa --- /dev/null +++ b/bin/tests/system/upforwd/ns1/named.conf @@ -0,0 +1,44 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.11 2007/06/18 23:47:31 tbox Exp $ */ + +key "update.example." { + algorithm "hmac-md5"; + secret "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K"; +}; + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion yes; + acache-enable yes; + notify yes; +}; + +zone "example" { + type master; + file "example.db"; + allow-update { key update.example.; 10.53.0.3; }; +}; diff --git a/bin/tests/system/upforwd/ns2/named.conf b/bin/tests/system/upforwd/ns2/named.conf new file mode 100644 index 0000000..57ad4b0 --- /dev/null +++ b/bin/tests/system/upforwd/ns2/named.conf @@ -0,0 +1,39 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.10 2007/06/18 23:47:31 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.2; + notify-source 10.53.0.2; + transfer-source 10.53.0.2; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.2; }; + listen-on-v6 { none; }; + recursion yes; + acache-enable yes; + notify yes; +}; + +zone "example" { + type slave; + file "example.bk"; + masters { 10.53.0.1; }; +}; diff --git a/bin/tests/system/upforwd/ns3/named.conf b/bin/tests/system/upforwd/ns3/named.conf new file mode 100644 index 0000000..b1fe854 --- /dev/null +++ b/bin/tests/system/upforwd/ns3/named.conf @@ -0,0 +1,40 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.10 2007/06/18 23:47:31 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.3; + notify-source 10.53.0.3; + transfer-source 10.53.0.3; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.3; }; + listen-on-v6 { none; }; + recursion yes; + acache-enable yes; + notify yes; +}; + +zone "example" { + type slave; + file "example.bk"; + allow-update-forwarding { any; }; + masters { 10.53.0.1; }; +}; diff --git a/bin/tests/system/upforwd/setup.sh b/bin/tests/system/upforwd/setup.sh new file mode 100644 index 0000000..21a0e36 --- /dev/null +++ b/bin/tests/system/upforwd/setup.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# +# 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. + +# $Id: setup.sh,v 1.8 2007/06/19 23:47:06 tbox Exp $ + +cp -f ns1/example1.db ns1/example.db +rm -f ns1/example.db.jnl ns2/example.bk ns2/example.bk.jnl diff --git a/bin/tests/system/upforwd/tests.sh b/bin/tests/system/upforwd/tests.sh new file mode 100644 index 0000000..81156c8 --- /dev/null +++ b/bin/tests/system/upforwd/tests.sh @@ -0,0 +1,103 @@ +#!/bin/sh +# +# 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. + +# $Id: tests.sh,v 1.10 2007/06/19 23:47:06 tbox Exp $ + +# ns1 = stealth master +# ns2 = slave with update forwarding disabled; not currently used +# ns3 = slave with update forwarding enabled + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +status=0 + +echo "I:fetching master copy of zone before update" +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.\ + @10.53.0.1 axfr -p 5300 > dig.out.ns1 || status=1 + +echo "I:fetching slave 1 copy of zone before update" +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.\ + @10.53.0.2 axfr -p 5300 > dig.out.ns2 || status=1 + +echo "I:fetching slave 2 copy of zone before update" +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.\ + @10.53.0.3 axfr -p 5300 > dig.out.ns3 || status=1 + +echo "I:comparing pre-update copies to known good data" +$PERL ../digcomp.pl knowngood.before dig.out.ns1 || status=1 +$PERL ../digcomp.pl knowngood.before dig.out.ns2 || status=1 +$PERL ../digcomp.pl knowngood.before dig.out.ns3 || status=1 + +echo "I:updating zone (signed)" +$NSUPDATE -y update.example:c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K -- - <<EOF || status=1 +server 10.53.0.3 5300 +update add updated.example. 600 A 10.10.10.1 +update add updated.example. 600 TXT Foo +send +EOF + +echo "I:sleeping 15 seconds for server to incorporate changes" +sleep 15 + +echo "I:fetching master copy of zone after update" +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.\ + @10.53.0.1 axfr -p 5300 > dig.out.ns1 || status=1 + +echo "I:fetching slave 1 copy of zone after update" +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.\ + @10.53.0.2 axfr -p 5300 > dig.out.ns2 || status=1 + +echo "I:fetching slave 2 copy of zone after update" +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.\ + @10.53.0.3 axfr -p 5300 > dig.out.ns3 || status=1 + +echo "I:comparing post-update copies to known good data" +$PERL ../digcomp.pl knowngood.after1 dig.out.ns1 || status=1 +$PERL ../digcomp.pl knowngood.after1 dig.out.ns2 || status=1 +$PERL ../digcomp.pl knowngood.after1 dig.out.ns3 || status=1 + +echo "I:updating zone (unsigned)" +$NSUPDATE -- - <<EOF || status=1 +server 10.53.0.3 5300 +update add unsigned.example. 600 A 10.10.10.1 +update add unsigned.example. 600 TXT Foo +send +EOF + +echo "I:sleeping 15 seconds for server to incorporate changes" +sleep 15 + +echo "I:fetching master copy of zone after update" +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.\ + @10.53.0.1 axfr -p 5300 > dig.out.ns1 || status=1 + +echo "I:fetching slave 1 copy of zone after update" +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.\ + @10.53.0.2 axfr -p 5300 > dig.out.ns2 || status=1 + +echo "I:fetching slave 2 copy of zone after update" +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.\ + @10.53.0.3 axfr -p 5300 > dig.out.ns3 || status=1 + +echo "I:comparing post-update copies to known good data" +$PERL ../digcomp.pl knowngood.after2 dig.out.ns1 || status=1 +$PERL ../digcomp.pl knowngood.after2 dig.out.ns2 || status=1 +$PERL ../digcomp.pl knowngood.after2 dig.out.ns3 || status=1 + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/v6synth/clean.sh b/bin/tests/system/v6synth/clean.sh new file mode 100644 index 0000000..5f9157b --- /dev/null +++ b/bin/tests/system/v6synth/clean.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 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. + +# $Id: clean.sh,v 1.5 2007/09/26 03:22:44 marka Exp $ + +rm -f *.out +rm -f */named.memstats diff --git a/bin/tests/system/v6synth/ns1/named.conf b/bin/tests/system/v6synth/ns1/named.conf new file mode 100644 index 0000000..fdf7e56 --- /dev/null +++ b/bin/tests/system/v6synth/ns1/named.conf @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 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. + */ + +/* $Id: named.conf,v 1.5 2007/06/19 23:47:06 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify yes; +}; + +zone "." { + type master; + file "root.db"; +}; diff --git a/bin/tests/system/v6synth/ns1/root.db b/bin/tests/system/v6synth/ns1/root.db new file mode 100644 index 0000000..0208038 --- /dev/null +++ b/bin/tests/system/v6synth/ns1/root.db @@ -0,0 +1,33 @@ +; Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +; Copyright (C) 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. + +; $Id: root.db,v 1.4 2007/06/19 23:47:06 tbox Exp $ + +$TTL 300 +. IN SOA gson.nominum.com. a.root.servers.nil. ( + 2000042100 ; serial + 600 ; refresh + 600 ; retry + 1200 ; expire + 600 ; minimum + ) +. NS a.root-servers.nil. +a.root-servers.nil. A 10.53.0.1 + +example. NS ns2.example. +ns2.example. A 10.53.0.2 + +ip6.int. NS ns2.example. +ip6.arpa. NS ns2.example. diff --git a/bin/tests/system/v6synth/ns2/example.db b/bin/tests/system/v6synth/ns2/example.db new file mode 100644 index 0000000..120b87d --- /dev/null +++ b/bin/tests/system/v6synth/ns2/example.db @@ -0,0 +1,38 @@ +; Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +; Copyright (C) 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. + +; $Id: example.db,v 1.4 2007/06/19 23:47:06 tbox Exp $ + +$TTL 86400 +@ IN SOA ns2 hostmaster ( + 2001010604 3600 1800 1814400 3600 ) + NS ns2.example. +ns2.example. A 10.53.0.2 + +a A 10.0.0.1 +aaaa AAAA 12:34:56::ff +a6 A6 0 12:34:56::ff +chain A6 64 0::ff:ff prefix +prefix A6 0 12:34:56::0 +alias CNAME chain +alias2 CNAME alias +dname DNAME foo + +loop CNAME loop + +loop2 CNAME loop3 +loop3 CNAME loop2 + +aaaa.foo AAAA 12:34:56::ff diff --git a/bin/tests/system/v6synth/ns2/ip6.arpa.db b/bin/tests/system/v6synth/ns2/ip6.arpa.db new file mode 100644 index 0000000..c99c8d9 --- /dev/null +++ b/bin/tests/system/v6synth/ns2/ip6.arpa.db @@ -0,0 +1,24 @@ +; Copyright (C) 2004, 2007 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. + +; $Id: ip6.arpa.db,v 1.5 2007/06/19 23:47:06 tbox Exp $ + +$TTL 86400 +@ IN SOA ns2 hostmaster ( + 2001010604 3600 1800 1814400 3600 ) + NS ns2.example. +ns2.example. A 10.53.0.2 + +f.f.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.6.5.4.3.2.1 PTR foo. diff --git a/bin/tests/system/v6synth/ns2/ip6.int.db b/bin/tests/system/v6synth/ns2/ip6.int.db new file mode 100644 index 0000000..374e02a --- /dev/null +++ b/bin/tests/system/v6synth/ns2/ip6.int.db @@ -0,0 +1,24 @@ +; Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +; Copyright (C) 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. + +; $Id: ip6.int.db,v 1.4 2007/06/19 23:47:06 tbox Exp $ + +$TTL 86400 +@ IN SOA ns2 hostmaster ( + 2001010604 3600 1800 1814400 3600 ) + NS ns2.example. +ns2.example. A 10.53.0.2 + +f.f.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.6.5.4.3.2.1 PTR bar. diff --git a/bin/tests/system/v6synth/ns2/named.conf b/bin/tests/system/v6synth/ns2/named.conf new file mode 100644 index 0000000..1eb6d33 --- /dev/null +++ b/bin/tests/system/v6synth/ns2/named.conf @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 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. + */ + +/* $Id: named.conf,v 1.6 2007/06/18 23:47:31 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.2; + notify-source 10.53.0.2; + transfer-source 10.53.0.2; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.2; }; + listen-on-v6 { none; }; + recursion yes; + acache-enable yes; + notify yes; +}; + +zone "example" { + type master; + file "example.db"; +}; + +zone "ip6.int" { + type master; + file "ip6.int.db"; +}; + +zone "ip6.arpa" { + type master; + file "ip6.arpa.db"; +}; + diff --git a/bin/tests/system/v6synth/ns3/named.conf b/bin/tests/system/v6synth/ns3/named.conf new file mode 100644 index 0000000..bacaab7 --- /dev/null +++ b/bin/tests/system/v6synth/ns3/named.conf @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 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. + */ + +/* $Id: named.conf,v 1.6 2007/06/18 23:47:31 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.3; + notify-source 10.53.0.3; + transfer-source 10.53.0.3; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.3; }; + listen-on-v6 { none; }; + recursion yes; + acache-enable yes; + notify yes; + allow-v6-synthesis { any; }; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; diff --git a/bin/tests/system/v6synth/tests.sh b/bin/tests/system/v6synth/tests.sh new file mode 100644 index 0000000..8cc67f9 --- /dev/null +++ b/bin/tests/system/v6synth/tests.sh @@ -0,0 +1,71 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 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. + +# $Id: tests.sh,v 1.4 2007/06/19 23:47:06 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +# ns1 = root server +# ns2 = authoritative server +# ns3 = recursive server doing v6 synthesis + +status=0 + +DIGOPTS="+tcp +noadd +nosea +nostat +noquest +nocomm +nocmd" + +for name in aaaa a6 chain alias2 aaaa.dname loop loop2 +do + $DIG $DIGOPTS $name.example. aaaa @10.53.0.3 -p 5300 + echo +done >dig.out + +for i in 1 2 +do + $DIG $DIGOPTS f.f.$i.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.6.5.4.3.2.1.ip6.int. PTR @10.53.0.3 -p 5300 + echo +done >>dig.out + +cat <<EOF >good.out +aaaa.example. 0 IN AAAA 12:34:56::ff + +a6.example. 0 IN AAAA 12:34:56::ff + +chain.example. 0 IN AAAA 12:34:56::ff:ff + +alias2.example. 0 IN CNAME alias.example. +alias.example. 0 IN CNAME chain.example. +chain.example. 0 IN AAAA 12:34:56::ff:ff + +aaaa.dname.example. 0 IN CNAME aaaa.foo.example. +aaaa.foo.example. 0 IN AAAA 12:34:56::ff + +loop.example. 0 IN CNAME loop.example. + +loop2.example. 0 IN CNAME loop3.example. +loop3.example. 0 IN CNAME loop2.example. + +f.f.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.6.5.4.3.2.1.ip6.int. 0 IN PTR foo. + +f.f.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.6.5.4.3.2.1.ip6.int. 0 IN PTR bar. + +EOF + +diff good.out dig.out || status=1 + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/views/clean.sh b/bin/tests/system/views/clean.sh new file mode 100644 index 0000000..1eebccf --- /dev/null +++ b/bin/tests/system/views/clean.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2005, 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. + +# $Id: clean.sh,v 1.14 2007/09/26 03:22:44 marka Exp $ + +# +# Clean up after zone transfer tests. +# + +rm -f ns3/example.bk dig.out.ns?.? +rm -f ns2/named.conf ns2/example.db ns3/named.conf ns3/internal.bk +rm -f */named.memstats diff --git a/bin/tests/system/views/ns1/named.conf b/bin/tests/system/views/ns1/named.conf new file mode 100644 index 0000000..46a0a02 --- /dev/null +++ b/bin/tests/system/views/ns1/named.conf @@ -0,0 +1,37 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.17 2007/06/19 23:47:07 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify yes; +}; + +zone "." { + type master; + file "root.db"; +}; diff --git a/bin/tests/system/views/ns1/root.db b/bin/tests/system/views/ns1/root.db new file mode 100644 index 0000000..683f585 --- /dev/null +++ b/bin/tests/system/views/ns1/root.db @@ -0,0 +1,30 @@ +; 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. + +; $Id: root.db,v 1.9 2007/06/19 23:47:07 tbox Exp $ + +$TTL 300 +. IN SOA gson.nominum.com. a.root.servers.nil. ( + 2000042100 ; serial + 600 ; refresh + 600 ; retry + 1200 ; expire + 600 ; minimum + ) +. NS a.root-servers.nil. +a.root-servers.nil. A 10.53.0.1 + +example. NS ns2.example. +ns2.example. A 10.53.0.2 diff --git a/bin/tests/system/views/ns2/example1.db b/bin/tests/system/views/ns2/example1.db new file mode 100644 index 0000000..c8d7ec8 --- /dev/null +++ b/bin/tests/system/views/ns2/example1.db @@ -0,0 +1,34 @@ +; 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. + +; $Id: example1.db,v 1.9 2007/06/19 23:47:07 tbox Exp $ + +$ORIGIN . +$TTL 300 ; 5 minutes +example IN SOA mname1. . ( + 1 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) +example. NS ns2.example. +ns2.example. A 10.53.0.2 + +$ORIGIN example. +a A 10.0.0.1 + MX 10 mail.example. + +mail A 10.0.0.2 diff --git a/bin/tests/system/views/ns2/example2.db b/bin/tests/system/views/ns2/example2.db new file mode 100644 index 0000000..d7ea37e --- /dev/null +++ b/bin/tests/system/views/ns2/example2.db @@ -0,0 +1,34 @@ +; 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. + +; $Id: example2.db,v 1.10 2007/06/19 23:47:07 tbox Exp $ + +$ORIGIN . +$TTL 300 ; 5 minutes +example IN SOA mname1. . ( + 2 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) +example. NS ns2.example. +ns2.example. A 10.53.0.4 + +$ORIGIN example. +a A 10.0.0.1 + MX 10 mail.example. + +mail A 10.0.0.2 diff --git a/bin/tests/system/views/ns2/internal.db b/bin/tests/system/views/ns2/internal.db new file mode 100644 index 0000000..1a97057 --- /dev/null +++ b/bin/tests/system/views/ns2/internal.db @@ -0,0 +1,36 @@ +; 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. + +; $Id: internal.db,v 1.9 2007/06/19 23:47:07 tbox Exp $ + +$ORIGIN . +$TTL 300 ; 5 minutes +example IN SOA mname1. . ( + 2 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) +example. NS ns2.example. +ns2.example. A 10.53.0.2 +example. NS ns3.example. +ns3.example. A 10.53.0.3 + +$ORIGIN example. +a A 10.1.0.1 + MX 10 intmail.example. + +intmail A 10.1.0.2 diff --git a/bin/tests/system/views/ns2/named1.conf b/bin/tests/system/views/ns2/named1.conf new file mode 100644 index 0000000..a09d069 --- /dev/null +++ b/bin/tests/system/views/ns2/named1.conf @@ -0,0 +1,45 @@ +/* + * 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. + */ + +/* $Id: named1.conf,v 1.20 2007/06/19 23:47:07 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.2; + notify-source 10.53.0.2; + transfer-source 10.53.0.2; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.2; }; + listen-on-v6 { none; }; + recursion no; + notify yes; +}; + +include "../../common/controls.conf"; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +zone "example" { + type master; + file "example.db"; + allow-update { any; }; +}; diff --git a/bin/tests/system/views/ns2/named2.conf b/bin/tests/system/views/ns2/named2.conf new file mode 100644 index 0000000..e4180f2 --- /dev/null +++ b/bin/tests/system/views/ns2/named2.conf @@ -0,0 +1,65 @@ +/* + * 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. + */ + +/* $Id: named2.conf,v 1.22 2007/06/19 23:47:07 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.2; + notify-source 10.53.0.2; + transfer-source 10.53.0.2; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.2; 10.53.0.4; }; + listen-on-v6 { none; }; + recursion no; + notify yes; +}; + +include "../../common/controls.conf"; + +view "internal" { + match-clients { 10.53.0.2; + 10.53.0.3; }; + + zone "." { + type hint; + file "../../common/root.hint"; + }; + + zone "example" { + type master; + file "internal.db"; + allow-update { any; }; + }; +}; + +view "external" { + match-clients { any; }; + + zone "." { + type hint; + file "../../common/root.hint"; + }; + + zone "example" { + type master; + file "example.db"; + }; +}; + diff --git a/bin/tests/system/views/ns3/internal.db b/bin/tests/system/views/ns3/internal.db new file mode 100644 index 0000000..3d33d7f --- /dev/null +++ b/bin/tests/system/views/ns3/internal.db @@ -0,0 +1,34 @@ +; 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. + +; $Id: internal.db,v 1.9 2007/06/19 23:47:07 tbox Exp $ + +$ORIGIN . +$TTL 300 ; 5 minutes +example IN SOA mname1. . ( + 1 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) +example. NS ns3.example. +ns3.example. A 10.53.0.3 + +$ORIGIN example. +a A 10.1.0.1 + MX 10 intmail.example. + +intmail A 10.1.0.2 diff --git a/bin/tests/system/views/ns3/named1.conf b/bin/tests/system/views/ns3/named1.conf new file mode 100644 index 0000000..9723e08 --- /dev/null +++ b/bin/tests/system/views/ns3/named1.conf @@ -0,0 +1,55 @@ +/* + * 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. + */ + +/* $Id: named1.conf,v 1.19 2007/06/19 23:47:07 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.3; + notify-source 10.53.0.3; + transfer-source 10.53.0.3; + port 5300; + directory "."; + pid-file "named.pid"; + listen-on { 10.53.0.3; }; + listen-on-v6 { none; }; + recursion yes; + notify yes; +}; + +key rndc_key { + secret "1234abcd8765"; + algorithm hmac-md5; +}; + +controls { + inet 10.53.0.3 port 9953 allow { any; } keys { rndc_key; }; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +zone "example" { + type master; + allow-update { any; }; + file "internal.db"; +}; + + diff --git a/bin/tests/system/views/ns3/named2.conf b/bin/tests/system/views/ns3/named2.conf new file mode 100644 index 0000000..27d4955 --- /dev/null +++ b/bin/tests/system/views/ns3/named2.conf @@ -0,0 +1,54 @@ +/* + * 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. + */ + +/* $Id: named2.conf,v 1.19 2007/06/19 23:47:07 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.3; + notify-source 10.53.0.3; + transfer-source 10.53.0.3; + port 5300; + directory "."; + pid-file "named.pid"; + listen-on { 10.53.0.3; }; + listen-on-v6 { none; }; + recursion yes; + notify yes; +}; + +key rndc_key { + secret "1234abcd8765"; + algorithm hmac-md5; +}; + +controls { + inet 10.53.0.3 port 11953 allow { any; } keys { rndc_key; }; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +zone "example" { + type slave; + masters { 10.53.0.2; }; + allow-update { any; }; + file "internal.bk"; +}; diff --git a/bin/tests/system/views/setup.sh b/bin/tests/system/views/setup.sh new file mode 100644 index 0000000..c572a87 --- /dev/null +++ b/bin/tests/system/views/setup.sh @@ -0,0 +1,23 @@ +#!/bin/sh +# +# 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. + +# $Id: setup.sh,v 1.10 2007/06/19 23:47:06 tbox Exp $ + + +cp -f ns2/example1.db ns2/example.db +cp -f ns2/named1.conf ns2/named.conf +cp -f ns3/named1.conf ns3/named.conf diff --git a/bin/tests/system/views/tests.sh b/bin/tests/system/views/tests.sh new file mode 100644 index 0000000..b6fb552 --- /dev/null +++ b/bin/tests/system/views/tests.sh @@ -0,0 +1,83 @@ +#!/bin/sh +# +# 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. + +# $Id: tests.sh,v 1.30 2007/06/19 23:47:06 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +status=0 + +echo "I:fetching a.example from ns2's initial configuration" +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd +noauth \ + a.example. @10.53.0.2 any -p 5300 > dig.out.ns2.1 || status=1 +grep ";" dig.out.ns2.1 # XXXDCL why is this here? + +echo "I:fetching a.example from ns3's initial configuration" +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd +noauth \ + a.example. @10.53.0.3 any -p 5300 > dig.out.ns3.1 || status=1 +grep ";" dig.out.ns3.1 # XXXDCL why is this here? + +echo "I:copying in new configurations for ns2 and ns3" +rm -f ns2/named.conf ns3/named.conf ns2/example.db +cp -f ns2/named2.conf ns2/named.conf +cp -f ns3/named2.conf ns3/named.conf +cp -f ns2/example2.db ns2/example.db + +echo "I:reloading ns2 and ns3 with rndc" +$RNDC -c ../common/rndc.conf -s 10.53.0.2 -p 9953 reload 2>&1 | sed 's/^/I:ns2 /' +$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 reload 2>&1 | sed 's/^/I:ns3 /' + +echo "I:sleeping for 20 seconds" +sleep 20 + +echo "I:fetching a.example from ns2's 10.53.0.4, source address 10.53.0.4" +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd +noauth \ + -b 10.53.0.4 a.example. @10.53.0.4 any -p 5300 > dig.out.ns4.2 \ + || status=1 +grep ";" dig.out.ns4.2 # XXXDCL why is this here? + +echo "I:fetching a.example from ns2's 10.53.0.2, source address 10.53.0.2" +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd +noauth \ + -b 10.53.0.2 a.example. @10.53.0.2 any -p 5300 > dig.out.ns2.2 \ + || status=1 +grep ";" dig.out.ns2.2 # XXXDCL why is this here? + +echo "I:fetching a.example from ns3's 10.53.0.3, source address defaulted" +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd +noauth \ + @10.53.0.3 a.example. any -p 5300 > dig.out.ns3.2 || status=1 +grep ";" dig.out.ns3.2 # XXXDCL why is this here? + +echo "I:comparing ns3's initial a.example to one from reconfigured 10.53.0.2" +$PERL ../digcomp.pl dig.out.ns3.1 dig.out.ns2.2 || status=1 + +echo "I:comparing ns3's initial a.example to one from reconfigured 10.53.0.3" +$PERL ../digcomp.pl dig.out.ns3.1 dig.out.ns3.2 || status=1 + +echo "I:comparing ns2's initial a.example to one from reconfigured 10.53.0.4" +$PERL ../digcomp.pl dig.out.ns2.1 dig.out.ns4.2 || status=1 + +echo "I:comparing ns2's initial a.example to one from reconfigured 10.53.0.3" +echo "I:(should be different)" +if $PERL ../digcomp.pl dig.out.ns2.1 dig.out.ns3.2 >/dev/null +then + echo "I:no differences found. something's wrong." + status=1 +fi + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/xfer/clean.sh b/bin/tests/system/xfer/clean.sh new file mode 100644 index 0000000..132530a --- /dev/null +++ b/bin/tests/system/xfer/clean.sh @@ -0,0 +1,27 @@ +#!/bin/sh +# +# 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. + +# $Id: clean.sh,v 1.14 2007/09/26 03:22:44 marka Exp $ + +# +# Clean up after zone transfer tests. +# + +rm -f dig.out.ns2 dig.out.ns3 +rm -f ns2/example.db ns2/tsigzone.db ns2/example.db.jnl +rm -f ns3/example.bk ns3/tsigzone.bk ns3/example.bk.jnl +rm -f */named.memstats diff --git a/bin/tests/system/xfer/dig1.good b/bin/tests/system/xfer/dig1.good new file mode 100644 index 0000000..b7f3f79 --- /dev/null +++ b/bin/tests/system/xfer/dig1.good @@ -0,0 +1,80 @@ +example. 86400 IN SOA ns2.example. hostmaster.example. 1397051952 5 5 1814400 3600 +example. 3600 IN NS ns2.example. +example. 3600 IN NS ns3.example. +a01.example. 3600 IN A 0.0.0.0 +a02.example. 3600 IN A 255.255.255.255 +a601.example. 3600 IN A6 0 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff +a601.example. 3600 IN A6 64 ::ffff:ffff:ffff:ffff foo. +a601.example. 3600 IN A6 127 ::1 foo. +a601.example. 3600 IN A6 128 . +afsdb01.example. 3600 IN AFSDB 0 hostname.example. +afsdb02.example. 3600 IN AFSDB 65535 . +cert01.example. 3600 IN CERT 65534 65535 PRIVATEOID MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgiWCn/GxHhai6V AuHAoNUz4YoU1tVfSCSqQYn6//11U6Nld80jEeC8aTrO+KKmCaY= +cname01.example. 3600 IN CNAME cname-target. +cname02.example. 3600 IN CNAME cname-target.example. +cname03.example. 3600 IN CNAME . +dname01.example. 3600 IN DNAME dname-target. +dname02.example. 3600 IN DNAME dname-target.example. +dname03.example. 3600 IN DNAME . +gpos01.example. 3600 IN GPOS "-22.6882" "116.8652" "250.0" +gpos02.example. 3600 IN GPOS "" "" "" +hinfo01.example. 3600 IN HINFO "Generic PC clone" "NetBSD-1.4" +hinfo02.example. 3600 IN HINFO "PC" "NetBSD" +isdn01.example. 3600 IN ISDN "isdn-address" +isdn02.example. 3600 IN ISDN "isdn-address" "subaddress" +isdn03.example. 3600 IN ISDN "isdn-address" +isdn04.example. 3600 IN ISDN "isdn-address" "subaddress" +dnskey01.example. 3600 IN DNSKEY 512 255 1 AQMFD5raczCJHViKtLYhWGz8hMY9UGRuniJDBzC7w0aRyzWZriO6i2od GWWQVucZqKVsENW91IOW4vqudngPZsY3GvQ/xVA8/7pyFj6b7Esga60z yGW6LFe9r8n6paHrlG5ojqf0BaqHT+8= +kx01.example. 3600 IN KX 10 kdc.example. +kx02.example. 3600 IN KX 10 . +loc01.example. 3600 IN LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m +loc02.example. 3600 IN LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m +mb01.example. 3600 IN MG madname.example. +mb02.example. 3600 IN MG . +mg01.example. 3600 IN MG mgmname.example. +mg02.example. 3600 IN MG . +minfo01.example. 3600 IN MINFO rmailbx.example. emailbx.example. +minfo02.example. 3600 IN MINFO . . +mr01.example. 3600 IN MR mrname.example. +mr02.example. 3600 IN MR . +mx01.example. 3600 IN MX 10 mail.example. +mx02.example. 3600 IN MX 10 . +naptr01.example. 3600 IN NAPTR 0 0 "" "" "" . +naptr02.example. 3600 IN NAPTR 65535 65535 "blurgh" "blorf" "blegh" foo. +ns2.example. 3600 IN A 10.53.0.2 +ns3.example. 3600 IN A 10.53.0.3 +nsap-ptr01.example. 3600 IN NSAP-PTR . +nsap-ptr01.example. 3600 IN NSAP-PTR foo. +nsap01.example. 3600 IN NSAP 0x47000580005a0000000001e133ffffff00016100 +nsap02.example. 3600 IN NSAP 0x47000580005a0000000001e133ffffff00016100 +nsec01.example. 3600 IN NSEC a.secure.nil. NS SOA MX LOC RRSIG NSEC DNSKEY +nsec02.example. 3600 IN NSEC . NSAP-PTR NSEC +nsec03.example. 3600 IN NSEC . A +nsec04.example. 3600 IN NSEC . TYPE127 +ptr01.example. 3600 IN PTR example. +px01.example. 3600 IN PX 65535 foo. bar. +px02.example. 3600 IN PX 65535 . . +rp01.example. 3600 IN RP mbox-dname.example. txt-dname.example. +rp02.example. 3600 IN RP . . +rt01.example. 3600 IN RT 0 intermediate-host.example. +rt02.example. 3600 IN RT 65535 . +rrsig01.example. 3600 IN RRSIG NSEC 1 3 3600 20000102030405 19961211100908 2143 foo.nil. MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgiWCn/GxHhai6V AuHAoNUz4YoU1tVfSCSqQYn6//11U6Nld80jEeC8aTrO+KKmCaY= +srv01.example. 3600 IN SRV 0 0 0 . +srv02.example. 3600 IN SRV 65535 65535 65535 old-slow-box.example. +txt01.example. 3600 IN TXT "foo" +txt02.example. 3600 IN TXT "foo" "bar" +txt03.example. 3600 IN TXT "foo" +txt04.example. 3600 IN TXT "foo" "bar" +txt05.example. 3600 IN TXT "foo bar" +txt06.example. 3600 IN TXT "foo bar" +txt07.example. 3600 IN TXT "foo bar" +txt08.example. 3600 IN TXT "foo\010bar" +txt09.example. 3600 IN TXT "foo\010bar" +txt10.example. 3600 IN TXT "foo bar" +txt11.example. 3600 IN TXT "\"foo\"" +txt12.example. 3600 IN TXT "\"foo\"" +wks01.example. 3600 IN WKS 10.0.0.1 6 0 1 2 21 23 +wks02.example. 3600 IN WKS 10.0.0.1 17 0 1 2 53 +wks03.example. 3600 IN WKS 10.0.0.2 6 65535 +x2501.example. 3600 IN X25 "123456789" +example. 86400 IN SOA ns2.example. hostmaster.example. 1397051952 5 5 1814400 3600 diff --git a/bin/tests/system/xfer/dig2.good b/bin/tests/system/xfer/dig2.good new file mode 100644 index 0000000..9f2cece --- /dev/null +++ b/bin/tests/system/xfer/dig2.good @@ -0,0 +1,80 @@ +example. 86400 IN SOA ns2.example. hostmaster.example. 1397051953 5 5 1814400 3600 +example. 3600 IN NS ns2.example. +example. 3600 IN NS ns3.example. +a01.example. 3600 IN A 0.0.0.1 +a02.example. 3600 IN A 255.255.255.255 +a601.example. 3600 IN A6 0 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff +a601.example. 3600 IN A6 64 ::ffff:ffff:ffff:ffff foo. +a601.example. 3600 IN A6 127 ::1 foo. +a601.example. 3600 IN A6 128 . +afsdb01.example. 3600 IN AFSDB 0 hostname.example. +afsdb02.example. 3600 IN AFSDB 65535 . +cert01.example. 3600 IN CERT 65534 65535 PRIVATEOID MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgiWCn/GxHhai6V AuHAoNUz4YoU1tVfSCSqQYn6//11U6Nld80jEeC8aTrO+KKmCaY= +cname01.example. 3600 IN CNAME cname-target. +cname02.example. 3600 IN CNAME cname-target.example. +cname03.example. 3600 IN CNAME . +dname01.example. 3600 IN DNAME dname-target. +dname02.example. 3600 IN DNAME dname-target.example. +dname03.example. 3600 IN DNAME . +gpos01.example. 3600 IN GPOS "-22.6882" "116.8652" "250.0" +gpos02.example. 3600 IN GPOS "" "" "" +hinfo01.example. 3600 IN HINFO "Generic PC clone" "NetBSD-1.4" +hinfo02.example. 3600 IN HINFO "PC" "NetBSD" +isdn01.example. 3600 IN ISDN "isdn-address" +isdn02.example. 3600 IN ISDN "isdn-address" "subaddress" +isdn03.example. 3600 IN ISDN "isdn-address" +isdn04.example. 3600 IN ISDN "isdn-address" "subaddress" +dnskey01.example. 3600 IN DNSKEY 512 255 1 AQMFD5raczCJHViKtLYhWGz8hMY9UGRuniJDBzC7w0aRyzWZriO6i2od GWWQVucZqKVsENW91IOW4vqudngPZsY3GvQ/xVA8/7pyFj6b7Esga60z yGW6LFe9r8n6paHrlG5ojqf0BaqHT+8= +kx01.example. 3600 IN KX 10 kdc.example. +kx02.example. 3600 IN KX 10 . +loc01.example. 3600 IN LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m +loc02.example. 3600 IN LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m +mb01.example. 3600 IN MG madname.example. +mb02.example. 3600 IN MG . +mg01.example. 3600 IN MG mgmname.example. +mg02.example. 3600 IN MG . +minfo01.example. 3600 IN MINFO rmailbx.example. emailbx.example. +minfo02.example. 3600 IN MINFO . . +mr01.example. 3600 IN MR mrname.example. +mr02.example. 3600 IN MR . +mx01.example. 3600 IN MX 10 mail.example. +mx02.example. 3600 IN MX 10 . +naptr01.example. 3600 IN NAPTR 0 0 "" "" "" . +naptr02.example. 3600 IN NAPTR 65535 65535 "blurgh" "blorf" "blegh" foo. +ns2.example. 3600 IN A 10.53.0.2 +ns3.example. 3600 IN A 10.53.0.3 +nsap-ptr01.example. 3600 IN NSAP-PTR . +nsap-ptr01.example. 3600 IN NSAP-PTR foo. +nsap01.example. 3600 IN NSAP 0x47000580005a0000000001e133ffffff00016100 +nsap02.example. 3600 IN NSAP 0x47000580005a0000000001e133ffffff00016100 +nsec01.example. 3600 IN NSEC a.secure.nil. NS SOA MX LOC RRSIG NSEC DNSKEY +nsec02.example. 3600 IN NSEC . NSAP-PTR NSEC +nsec03.example. 3600 IN NSEC . A +nsec04.example. 3600 IN NSEC . TYPE127 +ptr01.example. 3600 IN PTR example. +px01.example. 3600 IN PX 65535 foo. bar. +px02.example. 3600 IN PX 65535 . . +rp01.example. 3600 IN RP mbox-dname.example. txt-dname.example. +rp02.example. 3600 IN RP . . +rt01.example. 3600 IN RT 0 intermediate-host.example. +rt02.example. 3600 IN RT 65535 . +rrsig01.example. 3600 IN RRSIG NSEC 1 3 3600 20000102030405 19961211100908 2143 foo.nil. MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgiWCn/GxHhai6V AuHAoNUz4YoU1tVfSCSqQYn6//11U6Nld80jEeC8aTrO+KKmCaY= +srv01.example. 3600 IN SRV 0 0 0 . +srv02.example. 3600 IN SRV 65535 65535 65535 old-slow-box.example. +txt01.example. 3600 IN TXT "foo" +txt02.example. 3600 IN TXT "foo" "bar" +txt03.example. 3600 IN TXT "foo" +txt04.example. 3600 IN TXT "foo" "bar" +txt05.example. 3600 IN TXT "foo bar" +txt06.example. 3600 IN TXT "foo bar" +txt07.example. 3600 IN TXT "foo bar" +txt08.example. 3600 IN TXT "foo\010bar" +txt09.example. 3600 IN TXT "foo\010bar" +txt10.example. 3600 IN TXT "foo bar" +txt11.example. 3600 IN TXT "\"foo\"" +txt12.example. 3600 IN TXT "\"foo\"" +wks01.example. 3600 IN WKS 10.0.0.1 6 0 1 2 21 23 +wks02.example. 3600 IN WKS 10.0.0.1 17 0 1 2 53 +wks03.example. 3600 IN WKS 10.0.0.2 6 65535 +x2501.example. 3600 IN X25 "123456789" +example. 86400 IN SOA ns2.example. hostmaster.example. 1397051953 5 5 1814400 3600 diff --git a/bin/tests/system/xfer/ns1/named.conf b/bin/tests/system/xfer/ns1/named.conf new file mode 100644 index 0000000..4c945ca --- /dev/null +++ b/bin/tests/system/xfer/ns1/named.conf @@ -0,0 +1,37 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.18 2007/06/19 23:47:07 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify yes; +}; + +zone "." { + type master; + file "root.db"; +}; diff --git a/bin/tests/system/xfer/ns1/root.db b/bin/tests/system/xfer/ns1/root.db new file mode 100644 index 0000000..ee1e74b --- /dev/null +++ b/bin/tests/system/xfer/ns1/root.db @@ -0,0 +1,33 @@ +; 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. + +; $Id: root.db,v 1.10 2007/06/19 23:47:07 tbox Exp $ + +$TTL 300 +. IN SOA gson.nominum.com. a.root.servers.nil. ( + 2000042100 ; serial + 600 ; refresh + 600 ; retry + 1200 ; expire + 600 ; minimum + ) +. NS a.root-servers.nil. +a.root-servers.nil. A 10.53.0.1 + +example. NS ns2.example. +ns2.example. A 10.53.0.2 + +tsigzone. NS ns2.tsigzone. +ns2.tsigzone. A 10.53.0.2 diff --git a/bin/tests/system/xfer/ns2/named.conf b/bin/tests/system/xfer/ns2/named.conf new file mode 100644 index 0000000..53a64ab --- /dev/null +++ b/bin/tests/system/xfer/ns2/named.conf @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2004, 2005, 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. + */ + +/* $Id: named.conf,v 1.24 2007/12/20 01:48:29 marka Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.2; + notify-source 10.53.0.2; + transfer-source 10.53.0.2; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.2; }; + listen-on-v6 { none; }; + recursion no; + notify yes; + ixfr-from-differences yes; + check-integrity no; +}; + +include "../../common/controls.conf"; + +key tsigzone. { + algorithm hmac-md5; + secret "1234abcd8765"; +}; + +acl tzkey { + key tsigzone.; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +zone "example" { + type master; + file "example.db"; +}; + +zone "tsigzone" { + type master; + file "tsigzone.db"; + allow-transfer { tzkey; }; +}; diff --git a/bin/tests/system/xfer/ns3/named.conf b/bin/tests/system/xfer/ns3/named.conf new file mode 100644 index 0000000..2dd1254 --- /dev/null +++ b/bin/tests/system/xfer/ns3/named.conf @@ -0,0 +1,71 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.21 2007/06/18 23:47:32 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.3; + notify-source 10.53.0.3; + transfer-source 10.53.0.3; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.3; }; + listen-on-v6 { none; }; + recursion yes; + acache-enable yes; + notify yes; +}; + +key rndc_key { + secret "1234abcd8765"; + algorithm hmac-md5; +}; + +controls { + inet 10.53.0.3 port 9953 allow { any; } keys { rndc_key; }; +}; + +key tsigzone. { + algorithm hmac-md5; + secret "1234abcd8765"; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +zone "example" { + type slave; + masters { 10.53.0.2; }; + file "example.bk"; +}; + +server 10.53.0.2 { + keys { tsigzone.; }; +}; + +zone "tsigzone" { + type slave; + masters { 10.53.0.2; }; + file "tsigzone.bk"; + allow-transfer { key tsigzone.; }; +}; + + diff --git a/bin/tests/system/xfer/setup.sh b/bin/tests/system/xfer/setup.sh new file mode 100644 index 0000000..8faadcb --- /dev/null +++ b/bin/tests/system/xfer/setup.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 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. + +# $Id: setup.sh,v 1.5 2007/06/19 23:47:07 tbox Exp $ + +sh ../genzone.sh 2 3 >ns2/example.db +sh ../genzone.sh 2 3 >ns2/tsigzone.db diff --git a/bin/tests/system/xfer/tests.sh b/bin/tests/system/xfer/tests.sh new file mode 100644 index 0000000..3356f81 --- /dev/null +++ b/bin/tests/system/xfer/tests.sh @@ -0,0 +1,102 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2005, 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. + +# $Id: tests.sh,v 1.31 2007/06/19 23:47:07 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +DIGOPTS="+tcp +noadd +nosea +nostat +noquest +nocomm +nocmd" + +status=0 + +echo "I:testing basic zone transfer functionality" +$DIG $DIGOPTS example. \ + @10.53.0.2 axfr -p 5300 > dig.out.ns2 || status=1 +grep ";" dig.out.ns2 + +# +# Spin to allow the zone to tranfer. +# +for i in 1 2 3 4 5 +do +tmp=0 +$DIG $DIGOPTS example. \ + @10.53.0.3 axfr -p 5300 > dig.out.ns3 || tmp=1 + grep ";" dig.out.ns3 > /dev/null + if test $? -ne 0 ; then break; fi + echo "I: plain zone re-transfer" + sleep 5 +done +if test $tmp -eq 1 ; then status=1; fi +grep ";" dig.out.ns3 + +$PERL ../digcomp.pl dig1.good dig.out.ns2 || status=1 + +$PERL ../digcomp.pl dig1.good dig.out.ns3 || status=1 + +echo "I:testing TSIG signed zone transfers" +$DIG $DIGOPTS tsigzone. \ + @10.53.0.2 axfr -y tsigzone.:1234abcd8765 -p 5300 \ + > dig.out.ns2 || status=1 +grep ";" dig.out.ns2 + +# +# Spin to allow the zone to tranfer. +# +for i in 1 2 3 4 5 +do +tmp=0 +$DIG $DIGOPTS tsigzone. \ + @10.53.0.3 axfr -y tsigzone.:1234abcd8765 -p 5300 \ + > dig.out.ns3 || tmp=1 + grep ";" dig.out.ns3 > /dev/null + if test $? -ne 0 ; then break; fi + echo "I: plain zone re-transfer" + sleep 5 +done +if test $tmp -eq 1 ; then status=1; fi +grep ";" dig.out.ns3 + +$PERL ../digcomp.pl dig.out.ns2 dig.out.ns3 || status=1 + +echo "I:testing ixfr-from-differences" + +$PERL -i -p -e ' + s/0\.0\.0\.0/0.0.0.1/; + s/1397051952/1397051953/ +' ns2/example.db + +$RNDC -c ../common/rndc.conf -s 10.53.0.2 -p 9953 reload 2>&1 | sed 's/^/I:ns2 /' + +sleep 5 + +$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 reload 2>&1 | sed 's/^/I:ns3 /' + +sleep 5 + +$DIG $DIGOPTS example. \ + @10.53.0.3 axfr -p 5300 > dig.out.ns3 || status=1 +grep ";" dig.out.ns3 + +$PERL ../digcomp.pl dig2.good dig.out.ns3 || status=1 + +# ns3 has a journal iff it received an IXFR. +test -f ns3/example.bk.jnl || status=1 + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/xferquota/clean.sh b/bin/tests/system/xferquota/clean.sh new file mode 100644 index 0000000..9ca8830 --- /dev/null +++ b/bin/tests/system/xferquota/clean.sh @@ -0,0 +1,28 @@ +#!/bin/sh +# +# 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. + +# $Id: clean.sh,v 1.14 2007/09/26 03:22:44 marka Exp $ + +# +# Clean up after zone transfer quota tests. +# + +rm -f ns1/zone*.example.db ns1/zones.conf +rm -f ns2/zone*.example.bk ns2/zones.conf +rm -f dig.out.* ns2/changing.bk +rm -f ns1/changing.db +rm -f */named.memstats diff --git a/bin/tests/system/xferquota/ns1/changing1.db b/bin/tests/system/xferquota/ns1/changing1.db new file mode 100644 index 0000000..70b9016 --- /dev/null +++ b/bin/tests/system/xferquota/ns1/changing1.db @@ -0,0 +1,33 @@ +; 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. + +; $Id: changing1.db,v 1.10 2007/06/19 23:47:07 tbox Exp $ + +$TTL 600 + +@ IN SOA dns1.changing. postmaster.changing. ( + 1 ;; serial + 3600 ;; refresh period + 1800 ;; retry interval + 604800 ;; expire time + 600 ) ;; default TTL + + IN NS dns1.changing. + NS dns2.changing. + +dns1 IN A 10.53.0.1 +dns2 IN A 10.53.0.2 + +a IN A 10.0.0.1 diff --git a/bin/tests/system/xferquota/ns1/changing2.db b/bin/tests/system/xferquota/ns1/changing2.db new file mode 100644 index 0000000..bcf73e0 --- /dev/null +++ b/bin/tests/system/xferquota/ns1/changing2.db @@ -0,0 +1,33 @@ +; 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. + +; $Id: changing2.db,v 1.10 2007/06/19 23:47:07 tbox Exp $ + +$TTL 600 + +@ IN SOA dns1.changing. postmaster.changing. ( + 2 ;; serial + 3600 ;; refresh period + 1800 ;; retry interval + 604800 ;; expire time + 600 ) ;; default TTL + + IN NS dns1.changing. + NS dns2.changing. + +dns1 IN A 10.53.0.1 +dns2 IN A 10.53.0.2 + +a IN A 10.0.0.2 diff --git a/bin/tests/system/xferquota/ns1/named.conf b/bin/tests/system/xferquota/ns1/named.conf new file mode 100644 index 0000000..a49e790 --- /dev/null +++ b/bin/tests/system/xferquota/ns1/named.conf @@ -0,0 +1,44 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.21 2007/06/19 23:47:07 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify yes; +}; + +zone "." { + type master; + file "root.db"; +}; + +zone "changing." { + type master; + file "changing.db"; +}; + +include "zones.conf"; diff --git a/bin/tests/system/xferquota/ns1/root.db b/bin/tests/system/xferquota/ns1/root.db new file mode 100644 index 0000000..beca386 --- /dev/null +++ b/bin/tests/system/xferquota/ns1/root.db @@ -0,0 +1,35 @@ +; 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. + +; $Id: root.db,v 1.10 2007/06/19 23:47:07 tbox Exp $ + +$TTL 300 +. IN SOA gson.nominum.com. a.root.servers.nil. ( + 2000042100 ; serial + 600 ; refresh + 600 ; retry + 1200 ; expire + 600 ; minimum + ) +. NS a.root-servers.nil. +a.root-servers.nil. A 10.53.0.1 + +example. NS ns2.example. +ns2.example. A 10.53.0.2 + +changing. NS dns1.changing. + A 10.53.0.1 + NS dns2.changing. + A 10.53.0.2 diff --git a/bin/tests/system/xferquota/ns2/example.db b/bin/tests/system/xferquota/ns2/example.db new file mode 100644 index 0000000..8e5a7be --- /dev/null +++ b/bin/tests/system/xferquota/ns2/example.db @@ -0,0 +1,152 @@ +; Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +; Copyright (C) 2000-2003 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. + +; $Id: example.db,v 1.12 2007/06/19 23:47:07 tbox Exp $ + +$ORIGIN . +$TTL 300 ; 5 minutes +example IN SOA mname1. . ( + 2000042795 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) +example. NS ns2.example. +ns2.example. A 10.53.0.2 +example. NS ns3.example. +ns3.example. A 10.53.0.3 + +$ORIGIN example. +* MX 10 mail +a TXT "foo foo foo" + PTR foo.net. +$TTL 3600 ; 1 hour +a01 A 0.0.0.0 +a02 A 255.255.255.255 +a601 AAAA ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff +afsdb01 AFSDB 0 hostname +afsdb02 AFSDB 65535 . +$TTL 300 ; 5 minutes +b CNAME foo.net. +c A 73.80.65.49 +$TTL 3600 ; 1 hour +cert01 CERT 65534 65535 PRIVATEOID ( + MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgi + WCn/GxHhai6VAuHAoNUz4YoU1tVfSCSqQYn6//11U6Nl + d80jEeC8aTrO+KKmCaY= ) +cname01 CNAME cname-target. +cname02 CNAME cname-target +cname03 CNAME . +$TTL 300 ; 5 minutes +d A 73.80.65.49 +$TTL 3600 ; 1 hour +dname01 DNAME dname-target. +dname02 DNAME dname-target +dname03 DNAME . +$TTL 300 ; 5 minutes +e MX 10 mail + TXT "one" + TXT "three" + TXT "two" + A 73.80.65.49 + A 73.80.65.50 + A 73.80.65.52 + A 73.80.65.51 +f A 73.80.65.52 +$TTL 3600 ; 1 hour +gpos01 GPOS "-22.6882" "116.8652" "250.0" +gpos02 GPOS "" "" "" +hinfo01 HINFO "Generic PC clone" "NetBSD-1.4" +hinfo02 HINFO "PC" "NetBSD" +isdn01 ISDN "isdn-address" +isdn02 ISDN "isdn-address" "subaddress" +isdn03 ISDN "isdn-address" +isdn04 ISDN "isdn-address" "subaddress" +dnskey01 DNSKEY 512 255 1 ( + AQMFD5raczCJHViKtLYhWGz8hMY9UGRuniJDBzC7w0aR + yzWZriO6i2odGWWQVucZqKVsENW91IOW4vqudngPZsY3 + GvQ/xVA8/7pyFj6b7Esga60zyGW6LFe9r8n6paHrlG5o + jqf0BaqHT+8= ) +kx01 KX 10 kdc +kx02 KX 10 . +loc01 LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m +loc02 LOC 60 9 0.000 N 24 39 0.000 E 10.00m 20m 2000m 20m +mb01 MG madname +mb02 MG . +mg01 MG mgmname +mg02 MG . +minfo01 MINFO rmailbx emailbx +minfo02 MINFO . . +mr01 MR mrname +mr02 MR . +mx01 MX 10 mail +mx02 MX 10 . +naptr01 NAPTR 0 0 "" "" "" . +naptr02 NAPTR 65535 65535 "blurgh" "blorf" "blegh" foo. +nsap-ptr01 NSAP-PTR foo. + NSAP-PTR . +nsap01 NSAP 0x47000580005a0000000001e133ffffff00016100 +nsap02 NSAP 0x47000580005a0000000001e133ffffff00016100 +nsec01 NSEC a.secure ( NS SOA MX RRSIG DNSKEY LOC NSEC ) +nsec02 NSEC . ( NSAP-PTR NSEC ) +nsec03 NSEC . ( A ) +nsec04 NSEC . ( 127 ) +ptr01 PTR example. +px01 PX 65535 foo. bar. +px02 PX 65535 . . +rp01 RP mbox-dname txt-dname +rp02 RP . . +rt01 RT 0 intermediate-host +rt02 RT 65535 . +$TTL 300 ; 5 minutes +s NS ns.s +$ORIGIN s.example. +ns A 73.80.65.49 +$ORIGIN example. +$TTL 3600 ; 1 hour +rrsig01 RRSIG NSEC 1 3 3600 20000102030405 ( + 19961211100908 2143 foo + MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgi + WCn/GxHhai6VAuHAoNUz4YoU1tVfSCSqQYn6//11U6Nl + d80jEeC8aTrO+KKmCaY= ) +srv01 SRV 0 0 0 . +srv02 SRV 65535 65535 65535 old-slow-box.example.com. +$TTL 301 ; 5 minutes 1 second +t A 73.80.65.49 +$TTL 3600 ; 1 hour +txt01 TXT "foo" +txt02 TXT "foo" "bar" +txt03 TXT "foo" +txt04 TXT "foo" "bar" +txt05 TXT "foo bar" +txt06 TXT "foo bar" +txt07 TXT "foo bar" +txt08 TXT "foo\010bar" +txt09 TXT "foo\010bar" +txt10 TXT "foo bar" +txt11 TXT "\"foo\"" +txt12 TXT "\"foo\"" +$TTL 300 ; 5 minutes +u TXT "txt-not-in-nsec" +$ORIGIN u.example. +a A 73.80.65.49 +b A 73.80.65.49 +$ORIGIN example. +$TTL 3600 ; 1 hour +wks01 WKS 10.0.0.1 6 ( 0 1 2 21 23 ) +wks02 WKS 10.0.0.1 17 ( 0 1 2 53 ) +wks03 WKS 10.0.0.2 6 ( 65535 ) +x2501 X25 "123456789" diff --git a/bin/tests/system/xferquota/ns2/named.conf b/bin/tests/system/xferquota/ns2/named.conf new file mode 100644 index 0000000..5930eea --- /dev/null +++ b/bin/tests/system/xferquota/ns2/named.conf @@ -0,0 +1,48 @@ +/* + * 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. + */ + +/* $Id: named.conf,v 1.22 2007/06/19 23:47:07 tbox Exp $ */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.2; + notify-source 10.53.0.2; + transfer-source 10.53.0.2; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.2; }; + listen-on-v6 { none; }; + recursion no; + notify no; + + transfers-in 5; + transfers-per-ns 5; +}; + +zone "." { + type hint; + file "../../common/root.hint"; +}; + +zone "changing." { + type slave; + masters { 10.53.0.1; }; + file "changing.bk"; +}; + +include "zones.conf"; diff --git a/bin/tests/system/xferquota/setup.pl b/bin/tests/system/xferquota/setup.pl new file mode 100644 index 0000000..19ed4e8 --- /dev/null +++ b/bin/tests/system/xferquota/setup.pl @@ -0,0 +1,46 @@ +#!/usr/bin/perl +# +# 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. + +# $Id: setup.pl,v 1.14 2007/06/19 23:47:07 tbox Exp $ + +# +# Set up test data for zone transfer quota tests. +# +use FileHandle; + +my $masterconf = new FileHandle("ns1/zones.conf", "w") or die; +my $slaveconf = new FileHandle("ns2/zones.conf", "w") or die; + +for ($z = 0; $z < 300; $z++) { + my $zn = sprintf("zone%06d.example", $z); + print $masterconf "zone \"$zn\" { type master; file \"$zn.db\"; };\n"; + print $slaveconf "zone \"$zn\" { type slave; file \"$zn.bk\"; masters { 10.53.0.1; }; };\n"; + my $fn = "ns1/$zn.db"; + my $f = new FileHandle($fn, "w") or die "open: $fn: $!"; + print $f "\$TTL 300 +\@ IN SOA ns1 . 1 300 120 3600 86400 + NS ns1 + NS ns2 +ns1 A 10.53.0.1 +ns2 A 10.53.0.2 + MX 10 mail1.isp.example. + MX 20 mail2.isp.example. +www A 10.0.0.1 +xyzzy A 10.0.0.2 +"; + $f->close; +} diff --git a/bin/tests/system/xferquota/setup.sh b/bin/tests/system/xferquota/setup.sh new file mode 100644 index 0000000..d45cc88 --- /dev/null +++ b/bin/tests/system/xferquota/setup.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# +# 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. + +# $Id: setup.sh,v 1.15 2007/06/19 23:47:07 tbox Exp $ + +# +# Set up test data for zone transfer quota tests. +# + +$PERL setup.pl + +cp -f ns1/changing1.db ns1/changing.db diff --git a/bin/tests/system/xferquota/tests.sh b/bin/tests/system/xferquota/tests.sh new file mode 100644 index 0000000..9d077e5 --- /dev/null +++ b/bin/tests/system/xferquota/tests.sh @@ -0,0 +1,71 @@ +#!/bin/sh +# +# 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. + +# $Id: tests.sh,v 1.25 2007/06/19 23:47:07 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +# +# Perform tests +# + +count=0 +ticks=0 +while [ $count != 300 ]; do + if [ $ticks = 1 ]; then + echo "I:Changing test zone..." + cp -f ns1/changing2.db ns1/changing.db + kill -HUP `cat ns1/named.pid` + fi + sleep 1 + ticks=`expr $ticks + 1` + seconds=`expr $ticks \* 1` + if [ $ticks = 360 ]; then + echo "I:Took too long to load zones" + exit 1 + fi + count=`cat ns2/zone*.bk | grep xyzzy | wc -l` + echo "I:Have $count zones up in $seconds seconds" +done + +status=0 + +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd \ + zone000099.example. @10.53.0.1 axfr -p 5300 > dig.out.ns1 || status=1 +grep ";" dig.out.ns1 + +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd \ + zone000099.example. @10.53.0.2 axfr -p 5300 > dig.out.ns2 || status=1 +grep ";" dig.out.ns2 + +$PERL ../digcomp.pl dig.out.ns1 dig.out.ns2 || status=1 + +sleep 15 + +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd \ + a.changing. @10.53.0.1 a -p 5300 > dig.out.ns1 || status=1 +grep ";" dig.out.ns1 + +$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd \ + a.changing. @10.53.0.2 a -p 5300 > dig.out.ns2 || status=1 +grep ";" dig.out.ns2 + +$PERL ../digcomp.pl dig.out.ns1 dig.out.ns2 || status=1 + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/zonechecks/a.db b/bin/tests/system/zonechecks/a.db new file mode 100644 index 0000000..2f90e8e --- /dev/null +++ b/bin/tests/system/zonechecks/a.db @@ -0,0 +1,19 @@ +; Copyright (C) 2004, 2007 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: a.db,v 1.5 2007/06/19 23:47:07 tbox Exp $ + +@ 3600 IN SOA ns hostmaster 1 3600 1200 604800 3600 +@ 3600 IN NS 127.0.0.1 +127.0.0.1 3600 IN A 127.0.0.1 diff --git a/bin/tests/system/zonechecks/aaaa.db b/bin/tests/system/zonechecks/aaaa.db new file mode 100644 index 0000000..bcf26f4 --- /dev/null +++ b/bin/tests/system/zonechecks/aaaa.db @@ -0,0 +1,19 @@ +; Copyright (C) 2004, 2007 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: aaaa.db,v 1.5 2007/06/19 23:47:07 tbox Exp $ + +@ 3600 IN SOA ns hostmaster 1 3600 1200 604800 3600 +@ 3600 IN NS ::1 +::1 3600 IN AAAA ::1 diff --git a/bin/tests/system/zonechecks/clean.sh b/bin/tests/system/zonechecks/clean.sh new file mode 100644 index 0000000..c103c59 --- /dev/null +++ b/bin/tests/system/zonechecks/clean.sh @@ -0,0 +1,20 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 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: clean.sh,v 1.6 2007/09/26 03:22:44 marka Exp $ + +rm -f *.out +rm -f */named.memstats diff --git a/bin/tests/system/zonechecks/cname.db b/bin/tests/system/zonechecks/cname.db new file mode 100644 index 0000000..75e3f38 --- /dev/null +++ b/bin/tests/system/zonechecks/cname.db @@ -0,0 +1,19 @@ +; Copyright (C) 2004, 2007 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: cname.db,v 1.5 2007/06/19 23:47:07 tbox Exp $ + +@ 3600 IN SOA ns hostmaster 1 3600 1200 604800 3600 +@ 3600 IN NS ns +ns 3600 IN CNAME @ diff --git a/bin/tests/system/zonechecks/dname.db b/bin/tests/system/zonechecks/dname.db new file mode 100644 index 0000000..fdbc128 --- /dev/null +++ b/bin/tests/system/zonechecks/dname.db @@ -0,0 +1,19 @@ +; Copyright (C) 2004, 2007 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: dname.db,v 1.5 2007/06/19 23:47:07 tbox Exp $ + +@ 3600 IN SOA ns hostmaster 1 3600 1200 604800 3600 +@ 3600 IN NS ns +@ 3600 IN DNAME . diff --git a/bin/tests/system/zonechecks/noaddress.db b/bin/tests/system/zonechecks/noaddress.db new file mode 100644 index 0000000..e457626 --- /dev/null +++ b/bin/tests/system/zonechecks/noaddress.db @@ -0,0 +1,19 @@ +; Copyright (C) 2004, 2007 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: noaddress.db,v 1.5 2007/06/19 23:47:07 tbox Exp $ + +@ 3600 IN SOA ns hostmaster 1 3600 1200 604800 3600 +@ 3600 IN NS ns +ns 3600 IN TXT this name has no address records diff --git a/bin/tests/system/zonechecks/nxdomain.db b/bin/tests/system/zonechecks/nxdomain.db new file mode 100644 index 0000000..d5981bb --- /dev/null +++ b/bin/tests/system/zonechecks/nxdomain.db @@ -0,0 +1,19 @@ +; Copyright (C) 2004, 2007 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: nxdomain.db,v 1.5 2007/06/19 23:47:07 tbox Exp $ + +@ 3600 IN SOA ns hostmaster 1 3600 1200 604800 3600 +@ 3600 IN NS ns +; There are no records at all with the ownername of "ns". diff --git a/bin/tests/system/zonechecks/tests.sh b/bin/tests/system/zonechecks/tests.sh new file mode 100644 index 0000000..2a1b850 --- /dev/null +++ b/bin/tests/system/zonechecks/tests.sh @@ -0,0 +1,164 @@ +#!/bin/sh +# +# Copyright (C) 2004, 2007 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: tests.sh,v 1.4 2007/06/19 23:47:07 tbox Exp $ + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +status=0 + +# +echo "I: checking that we detect a NS which refers to a CNAME" +if $CHECKZONE . cname.db > cname.out 2>&1 +then + echo "I:failed (status)"; status=1 +else + if grep "is a CNAME" cname.out > /dev/null + then + : + else + echo "I:failed (message)"; status=1 + fi +fi + +# +echo "I: checking that we detect a NS which is below a DNAME" +if $CHECKZONE . dname.db > dname.out 2>&1 +then + echo "I:failed (status)"; status=1 +else + if grep "is below a DNAME" dname.out > /dev/null + then + : + else + echo "I:failed (message)"; status=1 + fi +fi + +# +echo "I: checking that we detect a NS which has no address records (A/AAAA)" +if $CHECKZONE . noaddress.db > noaddress.out +then + echo "I:failed (status)"; status=1 +else + if grep "has no address records" noaddress.out > /dev/null + then + : + else + echo "I:failed (message)"; status=1 + fi +fi + +# +echo "I: checking that we detect a NS which has no records" +if $CHECKZONE . nxdomain.db > nxdomain.out +then + echo "I:failed (status)"; status=1 +else + if grep "has no address records" noaddress.out > /dev/null + then + : + else + echo "I:failed (message)"; status=1 + fi +fi + +# +echo "I: checking that we detect a NS which looks like a A record (fail)" +if $CHECKZONE -n fail . a.db > a.out 2>&1 +then + echo "I:failed (status)"; status=1 +else + if grep "appears to be an address" a.out > /dev/null + then + : + else + echo "I:failed (message)"; status=1 + fi +fi + +# +echo "I: checking that we detect a NS which looks like a A record (warn=default)" +if $CHECKZONE . a.db > a.out 2>&1 +then + if grep "appears to be an address" a.out > /dev/null + then + : + else + echo "I:failed (message)"; status=1 + fi +else + echo "I:failed (status)"; status=1 +fi + +# +echo "I: checking that we detect a NS which looks like a A record (ignore)" +if $CHECKZONE -n ignore . a.db > a.out 2>&1 +then + if grep "appears to be an address" a.out > /dev/null + then + echo "I:failed (message)"; status=1 + else + : + fi +else + echo "I:failed (status)"; status=1 +fi + +# +echo "I: checking that we detect a NS which looks like a AAAA record (fail)" +if $CHECKZONE -n fail . aaaa.db > aaaa.out 2>&1 +then + echo "I:failed (status)"; status=1 +else + if grep "appears to be an address" aaaa.out > /dev/null + then + : + else + echo "I:failed (message)"; status=1 + fi +fi + +# +echo "I: checking that we detect a NS which looks like a AAAA record (warn=default)" +if $CHECKZONE . aaaa.db > aaaa.out 2>&1 +then + if grep "appears to be an address" aaaa.out > /dev/null + then + : + else + echo "I:failed (message)"; status=1 + fi +else + echo "I:failed (status)"; status=1 +fi + +# +echo "I: checking that we detect a NS which looks like a AAAA record (ignore)" +if $CHECKZONE -n ignore . aaaa.db > aaaa.out 2>&1 +then + if grep "appears to be an address" aaaa.out > /dev/null + then + echo "I:failed (message)"; status=1 + else + : + fi +else + echo "I:failed (status)"; status=1 +fi +echo "I:exit status: $status" +exit $? diff --git a/bin/tests/t_api.pl b/bin/tests/t_api.pl new file mode 100644 index 0000000..daf0161 --- /dev/null +++ b/bin/tests/t_api.pl @@ -0,0 +1,223 @@ +#!/usr/local/bin/perl +# +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 1999-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. + +# $Id: t_api.pl,v 1.10 2007/06/19 23:46:59 tbox Exp $ + +require "getopts.pl"; + +# +# a minimalistic test api in perl compatable with the C api +# used for the bind 9 regression tests +# + +sub t_info { + package t_api; + local($format, @rest) = @_; + printf("I:${format}%s", @rest); +} + +sub t_result { + package t_api; + local($result) = @_; + $T_inresult = 1; + printf("R:$result\n"); +} + +sub t_assert { + package t_api; + local($component, $anum, $class, $what, @rest) = @_; + printf("A:%s:%d:%s:$what\n", $component, $anum, $class, @rest); +} + +sub t_getenv { + package t_api; + local($name) = @_; + return($T_env{$name}) if (defined($T_env{$name})); +} + +package t_api; + +$| = 1; + +sub t_on_abort { + $T_aborted = 1; + &t_info("got abort\n"); + die; +} + +sub t_on_alarm { + $T_timedout = 1; + &t_info("got alarm\n"); + die; +} + +sub t_on_int { + $T_terminated = 1; + &t_info("got int\n"); + die; +} + +# initialize the test environment +sub t_initconf { + local($cfile) = @_; + local($name, $value); + + if ((-f $cfile) && (-s _)) { + open(XXX, "< $cfile"); + while (<XXX>) { + next if (/^\#/); + next unless (/=/); + chop; + ($name, $value) = split(/=/, $_, 2); + $T_env{$name} = $value; + } + close(XXX); + } +} + +# dump the configuration to the journal +sub t_dumpconf { + local($name, $value); + + foreach $name (sort keys %T_env) { + &main't_info("%s\t%s\n", $name, $T_env{$name}); + } +} + +# run a test +sub doTestN { + package main; + local($testnumber) = @_; + local($status); + + if (defined($T_testlist[$testnumber])) { + + $t_api'T_inresult = 0; + $t_api'T_aborted = 0; + $t_api'T_timedout = 0; + $t_api'T_terminated = 0; + $t_api'T_unresolved = 0; + + alarm($t_api'T_timeout); + $status = eval($T_testlist[$testnumber]); + alarm(0); + + if (! defined($status)) { + &t_info("The test case timed out\n") if ($t_api'T_timedout); + &t_info("The test case was terminated\n") if ($t_api'T_terminated); + &t_info("The test case was aborted\n") if ($t_api'T_aborted); + &t_result("UNRESOLVED"); + } + elsif (! $t_api'T_inresult) { + &t_result("NORESULT"); + } + } + else { + &t_info("Test %d is not defined\n", $testnumber); + &t_result("UNTESTED"); + } +} + +$T_usage = "Usage: + a : run all tests + b <dir> : cd to dir before running tests + c <configfile> : use configfile instead of t_config + d <level> : set debug level to level + h : print test info (not implemented) + u : print usage info + n <testnumber> : run test number testnumber + t <name> : run test named testname (not implemented) + q <seconds> : use seconds as the timeout value + x : don't execute tests in a subproc (n/a) +"; + +# get command line args +&main'Getopts('ab:c:d:hun:t:q:x'); + +# if -u, print usage and exit +if (defined($main'opt_u)) { + print $T_usage; + exit(0); +} + +# implement -h and -t after we add test descriptions to T_testlist ZZZ +if (defined($main'opt_h)) { + print "the -h option is not implemented\n"; + exit(0); +} + +if (defined($main'opt_t)) { + print "the -t option is not implemented\n"; + exit(0); +} + +# +# silently ignore the -x option +# this exists in the C version of the api +# to facilitate exception debugging with gdb +# and is not meaningful here +# + +$T_configfile = "t_config"; +$T_debug = 0; +$T_timeout = 10; +$T_testnum = -1; + +$T_dir = $main'opt_b if (defined($main'opt_b)); +$T_debug = $main'opt_d if (defined($main'opt_d)); +$T_configfile = $main'opt_c if (defined($main'opt_c)); +$T_testnum = $main'opt_n if (defined($main'opt_n)); +$T_timeout = $main'opt_q if (defined($main'opt_q)); + +$SIG{'ABRT'} = 't_api\'t_on_abort'; +$SIG{'ALRM'} = 't_api\'t_on_alarm'; +$SIG{'INT'} = 't_api\'t_on_int'; +$SIG{'QUIT'} = 't_api\'t_on_int'; + +# print the start line +$date = `date`; +chop $date; +($cmd = $0) =~ s/\.\///g; +printf("S:$cmd:$date\n"); + +# initialize the test environment +&t_initconf($T_configfile); +&t_dumpconf() if ($T_debug); + +# establish working directory if requested +chdir("$T_dir") if (defined($T_dir) && (-d "$T_dir")); + +# run the tests +if ($T_testnum == -1) { + # run all tests + $T_ntests = $#main'T_testlist + 1; + for ($T_cnt = 0; $T_cnt < $T_ntests; ++$T_cnt) { + &doTestN($T_cnt); + } +} +else { + # otherwise run the specified test + &doTest($T_testnum); +} + +# print the end line +$date = `date`; +chop $date; +printf("E:$cmd:$date\n"); + +1; + diff --git a/bin/tests/task_test.c b/bin/tests/task_test.c new file mode 100644 index 0000000..e3ff26b --- /dev/null +++ b/bin/tests/task_test.c @@ -0,0 +1,191 @@ +/* + * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1998-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. + */ + +/* $Id: task_test.c,v 1.51 2007/06/19 23:46:59 tbox Exp $ */ + +#include <config.h> + +#include <stdlib.h> +#include <unistd.h> + +#include <isc/mem.h> +#include <isc/task.h> +#include <isc/time.h> +#include <isc/timer.h> +#include <isc/util.h> + +isc_mem_t *mctx = NULL; + +static void +my_callback(isc_task_t *task, isc_event_t *event) { + int i, j; + char *name = event->ev_arg; + + j = 0; + for (i = 0; i < 1000000; i++) + j += 100; + printf("task %s (%p): %d\n", name, task, j); + isc_event_free(&event); +} + +static void +my_shutdown(isc_task_t *task, isc_event_t *event) { + char *name = event->ev_arg; + + printf("shutdown %s (%p)\n", name, task); + isc_event_free(&event); +} + +static void +my_tick(isc_task_t *task, isc_event_t *event) { + char *name = event->ev_arg; + + printf("task %p tick %s\n", task, name); + isc_event_free(&event); +} + +int +main(int argc, char *argv[]) { + isc_taskmgr_t *manager = NULL; + isc_task_t *t1 = NULL, *t2 = NULL; + isc_task_t *t3 = NULL, *t4 = NULL; + isc_event_t *event; + unsigned int workers; + isc_timermgr_t *timgr; + isc_timer_t *ti1, *ti2; + struct isc_interval interval; + + if (argc > 1) + workers = atoi(argv[1]); + else + workers = 2; + printf("%d workers\n", workers); + + RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS); + + RUNTIME_CHECK(isc_taskmgr_create(mctx, workers, 0, &manager) == + ISC_R_SUCCESS); + + RUNTIME_CHECK(isc_task_create(manager, 0, &t1) == ISC_R_SUCCESS); + RUNTIME_CHECK(isc_task_create(manager, 0, &t2) == ISC_R_SUCCESS); + RUNTIME_CHECK(isc_task_create(manager, 0, &t3) == ISC_R_SUCCESS); + RUNTIME_CHECK(isc_task_create(manager, 0, &t4) == ISC_R_SUCCESS); + + RUNTIME_CHECK(isc_task_onshutdown(t1, my_shutdown, "1") == + ISC_R_SUCCESS); + RUNTIME_CHECK(isc_task_onshutdown(t2, my_shutdown, "2") == + ISC_R_SUCCESS); + RUNTIME_CHECK(isc_task_onshutdown(t3, my_shutdown, "3") == + ISC_R_SUCCESS); + RUNTIME_CHECK(isc_task_onshutdown(t4, my_shutdown, "4") == + ISC_R_SUCCESS); + + timgr = NULL; + RUNTIME_CHECK(isc_timermgr_create(mctx, &timgr) == ISC_R_SUCCESS); + ti1 = NULL; + + isc_interval_set(&interval, 1, 0); + RUNTIME_CHECK(isc_timer_create(timgr, isc_timertype_ticker, NULL, + &interval, t1, my_tick, "foo", &ti1) == + ISC_R_SUCCESS); + + ti2 = NULL; + isc_interval_set(&interval, 1, 0); + RUNTIME_CHECK(isc_timer_create(timgr, isc_timertype_ticker, NULL, + &interval, t2, my_tick, "bar", &ti2) == + ISC_R_SUCCESS); + + printf("task 1 = %p\n", t1); + printf("task 2 = %p\n", t2); + sleep(2); + + /* + * Note: (void *)1 is used as a sender here, since some compilers + * don't like casting a function pointer to a (void *). + * + * In a real use, it is more likely the sender would be a + * structure (socket, timer, task, etc) but this is just a test + * program. + */ + event = isc_event_allocate(mctx, (void *)1, 1, my_callback, "1", + sizeof(*event)); + isc_task_send(t1, &event); + event = isc_event_allocate(mctx, (void *)1, 1, my_callback, "1", + sizeof(*event)); + isc_task_send(t1, &event); + event = isc_event_allocate(mctx, (void *)1, 1, my_callback, "1", + sizeof(*event)); + isc_task_send(t1, &event); + event = isc_event_allocate(mctx, (void *)1, 1, my_callback, "1", + sizeof(*event)); + isc_task_send(t1, &event); + event = isc_event_allocate(mctx, (void *)1, 1, my_callback, "1", + sizeof(*event)); + isc_task_send(t1, &event); + event = isc_event_allocate(mctx, (void *)1, 1, my_callback, "1", + sizeof(*event)); + isc_task_send(t1, &event); + event = isc_event_allocate(mctx, (void *)1, 1, my_callback, "1", + sizeof(*event)); + isc_task_send(t1, &event); + event = isc_event_allocate(mctx, (void *)1, 1, my_callback, "1", + sizeof(*event)); + isc_task_send(t1, &event); + event = isc_event_allocate(mctx, (void *)1, 1, my_callback, "1", + sizeof(*event)); + isc_task_send(t1, &event); + event = isc_event_allocate(mctx, (void *)1, 1, my_callback, "2", + sizeof(*event)); + isc_task_send(t2, &event); + event = isc_event_allocate(mctx, (void *)1, 1, my_callback, "3", + sizeof(*event)); + isc_task_send(t3, &event); + event = isc_event_allocate(mctx, (void *)1, 1, my_callback, "4", + sizeof(*event)); + isc_task_send(t4, &event); + event = isc_event_allocate(mctx, (void *)1, 1, my_callback, "2", + sizeof(*event)); + isc_task_send(t2, &event); + event = isc_event_allocate(mctx, (void *)1, 1, my_callback, "3", + sizeof(*event)); + isc_task_send(t3, &event); + event = isc_event_allocate(mctx, (void *)1, 1, my_callback, "4", + sizeof(*event)); + isc_task_send(t4, &event); + isc_task_purgerange(t3, + NULL, + ISC_EVENTTYPE_FIRSTEVENT, + ISC_EVENTTYPE_LASTEVENT, NULL); + + isc_task_detach(&t1); + isc_task_detach(&t2); + isc_task_detach(&t3); + isc_task_detach(&t4); + + sleep(10); + printf("destroy\n"); + isc_timer_detach(&ti1); + isc_timer_detach(&ti2); + isc_timermgr_destroy(&timgr); + isc_taskmgr_destroy(&manager); + printf("destroyed\n"); + + isc_mem_stats(mctx, stdout); + isc_mem_destroy(&mctx); + + return (0); +} diff --git a/bin/tests/tasks/Makefile.in b/bin/tests/tasks/Makefile.in new file mode 100644 index 0000000..f7fc908 --- /dev/null +++ b/bin/tests/tasks/Makefile.in @@ -0,0 +1,55 @@ +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 1998-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. + +# $Id: Makefile.in,v 1.30 2007/06/19 23:47:07 tbox Exp $ + +srcdir = @srcdir@ +VPATH = @srcdir@ +top_srcdir = @top_srcdir@ + +@BIND9_MAKE_INCLUDES@ + +CINCLUDES = ${TEST_INCLUDES} ${ISC_INCLUDES} + +CDEFINES = +CWARNINGS = + +ISCLIBS = ../../../lib/isc/libisc.@A@ +TAPIDEPLIBS = ../../../lib/tests/libt_api.@A@ + +ISCDEPLIBS = ../../../lib/isc/libisc.@A@ +TAPILIBS = ../../../lib/tests/libt_api.@A@ + +DEPLIBS = ${TAPIDEPLIBS} ${ISCDEPLIBS} + +LIBS = ${TAPILIBS} ${ISCLIBS} @LIBS@ + +TARGETS = t_tasks@EXEEXT@ + +SRCS = t_tasks.c + +@BIND9_MAKE_RULES@ + +t_tasks@EXEEXT@: t_tasks.@O@ ${DEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ t_tasks.@O@ ${LIBS} + +test: t_tasks@EXEEXT@ + -@./t_tasks@EXEEXT@ -c @top_srcdir@/t_config -b @srcdir@ -a + +testhelp: + @./t_tasks@EXEEXT@ -h + +clean distclean:: + rm -f ${TARGETS} diff --git a/bin/tests/tasks/t_tasks.c b/bin/tests/tasks/t_tasks.c new file mode 100644 index 0000000..b8a4d24 --- /dev/null +++ b/bin/tests/tasks/t_tasks.c @@ -0,0 +1,2293 @@ +/* + * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1998-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. + */ + +/* $Id: t_tasks.c,v 1.40 2007/06/19 23:47:07 tbox Exp $ */ + +#include <config.h> + +#include <stdlib.h> +#include <unistd.h> +#ifdef HAVE_INTTYPES_H +#include <inttypes.h> /* uintptr_t */ +#endif +#include <isc/condition.h> +#include <isc/mem.h> +#include <isc/platform.h> +#include <isc/task.h> +#include <isc/time.h> +#include <isc/timer.h> +#include <isc/util.h> + +#include <tests/t_api.h> + + +#ifdef ISC_PLATFORM_USETHREADS +isc_boolean_t threaded = ISC_TRUE; +#else +isc_boolean_t threaded = ISC_FALSE; +#endif + +static int senders[4]; + +static void +require_threads(void) { + t_info("This test requires threads\n"); + t_result(T_THREADONLY); + return; +} + +static void +t1_callback(isc_task_t *task, isc_event_t *event) { + int i; + int j; + + UNUSED(task); + + j = 0; + + for (i = 0; i < 1000000; i++) + j += 100; + + t_info("task %s\n", (char *)event->ev_arg); + isc_event_free(&event); +} + +static void +t1_shutdown(isc_task_t *task, isc_event_t *event) { + UNUSED(task); + + t_info("shutdown %s\n", (char *)event->ev_arg); + isc_event_free(&event); +} + +static void +my_tick(isc_task_t *task, isc_event_t *event) { + UNUSED(task); + + t_info("%s\n", (char *)event->ev_arg); + isc_event_free(&event); +} + +/* + * Adapted from RTH's original task_test program + */ + +static int +t_tasks1(void) { + char *p; + isc_mem_t *mctx; + isc_taskmgr_t *manager; + isc_task_t *task1; + isc_task_t *task2; + isc_task_t *task3; + isc_task_t *task4; + isc_event_t *event; + unsigned int workers; + isc_timermgr_t *timgr; + isc_timer_t *ti1; + isc_timer_t *ti2; + isc_result_t isc_result; + struct isc_time absolute; + struct isc_interval interval; + + manager = NULL; + task1 = NULL; + task2 = NULL; + task3 = NULL; + task4 = NULL; + mctx = NULL; + + workers = 2; + p = t_getenv("ISC_TASK_WORKERS"); + if (p != NULL) + workers = atoi(p); + if (workers < 1) { + t_info("Bad config value for ISC_TASK_WORKERS, %d\n", workers); + return(T_UNRESOLVED); + } + + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %d\n", isc_result); + return(T_UNRESOLVED); + } + + isc_result = isc_taskmgr_create(mctx, workers, 0, &manager); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_taskmgr_create failed %d\n", isc_result); + return(T_FAIL); + } + + isc_result = isc_task_create(manager, 0, &task1); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_create failed %d\n", isc_result); + return(T_FAIL); + } + + isc_result = isc_task_create(manager, 0, &task2); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_create failed %d\n", isc_result); + return(T_FAIL); + } + + isc_result = isc_task_create(manager, 0, &task3); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_create failed %d\n", isc_result); + return(T_FAIL); + } + + isc_result = isc_task_create(manager, 0, &task4); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_create failed %d\n", isc_result); + return(T_FAIL); + } + + isc_result = isc_task_onshutdown(task1, t1_shutdown, "1"); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_onshutdown failed %d\n", isc_result); + return(T_FAIL); + } + + isc_result = isc_task_onshutdown(task2, t1_shutdown, "2"); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_onshutdown failed %d\n", isc_result); + return(T_FAIL); + } + + isc_result = isc_task_onshutdown(task3, t1_shutdown, "3"); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_onshutdown failed %d\n", isc_result); + return(T_FAIL); + } + + isc_result = isc_task_onshutdown(task4, t1_shutdown, "4"); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_onshutdown failed %d\n", isc_result); + return(T_FAIL); + } + + timgr = NULL; + isc_result = isc_timermgr_create(mctx, &timgr); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_timermgr_create %d\n", isc_result); + return(T_UNRESOLVED); + } + + ti1 = NULL; + isc_time_settoepoch(&absolute); + isc_interval_set(&interval, 1, 0); + isc_result = isc_timer_create(timgr, isc_timertype_ticker, + &absolute, &interval, + task1, my_tick, "tick", &ti1); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_timer_create %d\n", isc_result); + return(T_UNRESOLVED); + } + + ti2 = NULL; + isc_time_settoepoch(&absolute); + isc_interval_set(&interval, 1, 0); + isc_result = isc_timer_create(timgr, isc_timertype_ticker, + &absolute, &interval, + task2, my_tick, "tock", &ti2); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_timer_create %d\n", isc_result); + return(T_UNRESOLVED); + } + + + sleep(2); + + /* + * Note: (void *)1 is used as a sender here, since some compilers + * don't like casting a function pointer to a (void *). + * + * In a real use, it is more likely the sender would be a + * structure (socket, timer, task, etc) but this is just a test + * program. + */ + event = isc_event_allocate(mctx, (void *)1, 1, t1_callback, "1", + sizeof(*event)); + if (event == NULL) { + t_info("isc_event_allocate failed\n"); + return(T_UNRESOLVED); + } + + isc_task_send(task1, &event); + + event = isc_event_allocate(mctx, (void *)1, 1, t1_callback, "1", + sizeof(*event)); + if (event == NULL) { + t_info("isc_event_allocate failed\n"); + return(T_UNRESOLVED); + } + + isc_task_send(task1, &event); + + event = isc_event_allocate(mctx, (void *)1, 1, t1_callback, "1", + sizeof(*event)); + if (event == NULL) { + t_info("isc_event_allocate failed\n"); + return(T_UNRESOLVED); + } + + isc_task_send(task1, &event); + + event = isc_event_allocate(mctx, (void *)1, 1, t1_callback, "1", + sizeof(*event)); + if (event == NULL) { + t_info("isc_event_allocate failed\n"); + return(T_UNRESOLVED); + } + + isc_task_send(task1, &event); + + event = isc_event_allocate(mctx, (void *)1, 1, t1_callback, "1", + sizeof(*event)); + if (event == NULL) { + t_info("isc_event_allocate failed\n"); + return(T_UNRESOLVED); + } + + isc_task_send(task1, &event); + + event = isc_event_allocate(mctx, (void *)1, 1, t1_callback, "1", + sizeof(*event)); + if (event == NULL) { + t_info("isc_event_allocate failed\n"); + return(T_UNRESOLVED); + } + + isc_task_send(task1, &event); + + event = isc_event_allocate(mctx, (void *)1, 1, t1_callback, "1", + sizeof(*event)); + if (event == NULL) { + t_info("isc_event_allocate failed\n"); + return(T_UNRESOLVED); + } + + isc_task_send(task1, &event); + + event = isc_event_allocate(mctx, (void *)1, 1, t1_callback, "1", + sizeof(*event)); + if (event == NULL) { + t_info("isc_event_allocate failed\n"); + return(T_UNRESOLVED); + } + + isc_task_send(task1, &event); + + event = isc_event_allocate(mctx, (void *)1, 1, t1_callback, "1", + sizeof(*event)); + if (event == NULL) { + t_info("isc_event_allocate failed\n"); + return(T_UNRESOLVED); + } + + isc_task_send(task1, &event); + + event = isc_event_allocate(mctx, (void *)1, 1, t1_callback, "2", + sizeof(*event)); + if (event == NULL) { + t_info("isc_event_allocate failed\n"); + return(T_UNRESOLVED); + } + + isc_task_send(task2, &event); + + event = isc_event_allocate(mctx, (void *)1, 1, t1_callback, "3", + sizeof(*event)); + if (event == NULL) { + t_info("isc_event_allocate failed\n"); + return(T_UNRESOLVED); + } + + isc_task_send(task3, &event); + + event = isc_event_allocate(mctx, (void *)1, 1, t1_callback, "4", + sizeof(*event)); + if (event == NULL) { + t_info("isc_event_allocate failed\n"); + return(T_UNRESOLVED); + } + + isc_task_send(task4, &event); + + event = isc_event_allocate(mctx, (void *)1, 1, t1_callback, "2", + sizeof(*event)); + if (event == NULL) { + t_info("isc_event_allocate failed\n"); + return(T_UNRESOLVED); + } + + isc_task_send(task2, &event); + + event = isc_event_allocate(mctx, (void *)1, 1, t1_callback, "3", + sizeof(*event)); + if (event == NULL) { + t_info("isc_event_allocate failed\n"); + return(T_UNRESOLVED); + } + + isc_task_send(task3, &event); + + event = isc_event_allocate(mctx, (void *)1, 1, t1_callback, "4", + sizeof(*event)); + if (event == NULL) { + t_info("isc_event_allocate failed\n"); + return(T_UNRESOLVED); + } + + isc_task_send(task4, &event); + + (void)isc_task_purge(task3, NULL, 0, 0); + + isc_task_detach(&task1); + isc_task_detach(&task2); + isc_task_detach(&task3); + isc_task_detach(&task4); + + sleep(10); + isc_timer_detach(&ti1); + isc_timer_detach(&ti2); + isc_timermgr_destroy(&timgr); + isc_taskmgr_destroy(&manager); + + isc_mem_destroy(&mctx); + return(T_PASS); +} + +static const char *a1 = "The task subsystem can create and manage tasks"; + +static void +t1(void) { + int result; + + t_assert("tasks", 1, T_REQUIRED, a1); + result = t_tasks1(); + t_result(result); +} + +#define T2_NTASKS 10000 + +static isc_event_t *T2_event; +static isc_taskmgr_t *T2_manager; +static isc_mem_t *T2_mctx; +static isc_condition_t T2_cv; +static isc_mutex_t T2_mx; +static int T2_done; +static int T2_nprobs; +static int T2_nfails; +static int T2_ntasks; + +static void +t2_shutdown(isc_task_t *task, isc_event_t *event) { + + isc_result_t isc_result; + + task = task; /* notused */ + + if (event->ev_arg != NULL) { + isc_task_destroy((isc_task_t**) &event->ev_arg); + } + else { + isc_result = isc_mutex_lock(&T2_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_lock failed %d\n", isc_result); + ++T2_nprobs; + } + + T2_done = 1; + + isc_result = isc_condition_signal(&T2_cv); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_signal failed %d\n", isc_result); + ++T2_nprobs; + } + + isc_result = isc_mutex_unlock(&T2_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_unlock failed %d\n", isc_result); + ++T2_nprobs; + } + + isc_event_free(&T2_event); + isc_taskmgr_destroy(&T2_manager); + isc_mem_destroy(&T2_mctx); + } +} + +static void +t2_callback(isc_task_t *task, isc_event_t *event) { + isc_result_t isc_result; + isc_task_t *newtask; + + ++T2_ntasks; + + if (T_debug && ((T2_ntasks % 100) == 0)) { + t_info("T2_ntasks %d\n", T2_ntasks); + } + + if (event->ev_arg) { + + event->ev_arg = (void *)(((uintptr_t) event->ev_arg) - 1); + + /* + * Create a new task and forward the message. + */ + newtask = NULL; + isc_result = isc_task_create(T2_manager, 0, &newtask); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_create failed %d\n", isc_result); + ++T2_nfails; + return; + } + + isc_result = isc_task_onshutdown(newtask, t2_shutdown, + (void *)task); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_onshutdown failed %d\n", + isc_result); + ++T2_nfails; + return; + } + + isc_task_send(newtask, &event); + } else { + /* + * Time to unwind, shutdown should perc back up. + */ + isc_task_destroy(&task); + } +} + +static int +t_tasks2(void) { + uintptr_t ntasks; + int result; + char *p; + isc_event_t *event; + unsigned int workers; + isc_result_t isc_result; + + T2_manager = NULL; + T2_done = 0; + T2_nprobs = 0; + T2_nfails = 0; + T2_ntasks = 0; + + workers = 2; + p = t_getenv("ISC_TASK_WORKERS"); + if (p != NULL) + workers = atoi(p); + if (workers < 1) { + t_info("Bad config value for ISC_TASK_WORKERS, %d\n", workers); + return(T_UNRESOLVED); + } + + p = t_getenv("ISC_TASKS_MIN"); + if (p != NULL) + ntasks = atoi(p); + else + ntasks = T2_NTASKS; + if (ntasks == 0U) { + t_info("Bad config value for ISC_TASKS_MIN, %lu\n", + (unsigned long)ntasks); + return(T_UNRESOLVED); + } + + t_info("Testing with %lu tasks\n", (unsigned long)ntasks); + + isc_result = isc_mutex_init(&T2_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_init failed %d\n", isc_result); + return(T_UNRESOLVED); + } + + isc_result = isc_condition_init(&T2_cv); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_init failed %d\n", isc_result); + return(T_UNRESOLVED); + } + + isc_result = isc_mem_create(0, 0, &T2_mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %d\n", isc_result); + return(T_UNRESOLVED); + } + + isc_result = isc_taskmgr_create(T2_mctx, workers, 0, &T2_manager); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_taskmgr_create failed %d\n", isc_result); + return(T_FAIL); + } + + T2_event = isc_event_allocate(T2_mctx, (void *)1, 1, t2_callback, + (void *)ntasks, sizeof(*event)); + if (T2_event == NULL) { + t_info("isc_event_allocate failed\n"); + return(T_UNRESOLVED); + } + + isc_result = isc_mutex_lock(&T2_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_lock failed %d\n", isc_result); + return(T_UNRESOLVED); + } + + t2_callback(NULL, T2_event); + + while (T2_done == 0) { + isc_result = isc_condition_wait(&T2_cv, &T2_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_wait failed %d\n", isc_result); + return(T_UNRESOLVED); + } + } + + result = T_UNRESOLVED; + + if ((T2_nfails == 0) && (T2_nprobs == 0)) + result = T_PASS; + else if (T2_nfails != 0) + result = T_FAIL; + + return(result); +} + +static const char *a2 = "The task subsystem can create ISC_TASKS_MIN tasks"; + +static void +t2(void) { + t_assert("tasks", 2, T_REQUIRED, a2); + + if (threaded) + t_result(t_tasks2()); + else + require_threads(); +} + +#define T3_NEVENTS 256 + +static int T3_flag; +static int T3_nevents; +static int T3_nsdevents; +static isc_mutex_t T3_mx; +static isc_condition_t T3_cv; +static int T3_nfails; +static int T3_nprobs; + +static void +t3_sde1(isc_task_t *task, isc_event_t *event) { + task = task; + + if (T3_nevents != T3_NEVENTS) { + t_info("Some events were not processed\n"); + ++T3_nprobs; + } + if (T3_nsdevents == 1) { + ++T3_nsdevents; + } else { + t_info("Shutdown events not processed in LIFO order\n"); + ++T3_nfails; + } + isc_event_free(&event); +} + +static void +t3_sde2(isc_task_t *task, isc_event_t *event) { + + task = task; + + if (T3_nevents != T3_NEVENTS) { + t_info("Some events were not processed\n"); + ++T3_nprobs; + } + if (T3_nsdevents == 0) { + ++T3_nsdevents; + } else { + t_info("Shutdown events not processed in LIFO order\n"); + ++T3_nfails; + } + isc_event_free(&event); +} + +static void +t3_event1(isc_task_t *task, isc_event_t *event) { + isc_result_t isc_result; + + task = task; + + isc_result = isc_mutex_lock(&T3_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_lock failed %s\n", + isc_result_totext(isc_result)); + ++T3_nprobs; + } + while (T3_flag != 1) { + (void) isc_condition_wait(&T3_cv, &T3_mx); + } + + isc_result = isc_mutex_unlock(&T3_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_unlock failed %s\n", + isc_result_totext(isc_result)); + ++T3_nprobs; + } + isc_event_free(&event); +} + +static void +t3_event2(isc_task_t *task, isc_event_t *event) { + task = task; + + ++T3_nevents; + isc_event_free(&event); +} + +static int +t_tasks3(void) { + int cnt; + int result; + char *p; + isc_mem_t *mctx; + isc_taskmgr_t *tmgr; + isc_task_t *task; + unsigned int workers; + isc_event_t *event; + isc_result_t isc_result; + isc_eventtype_t event_type; + + T3_flag = 0; + T3_nevents = 0; + T3_nsdevents = 0; + T3_nfails = 0; + T3_nprobs = 0; + + event_type = 3; + + workers = 2; + p = t_getenv("ISC_TASK_WORKERS"); + if (p != NULL) + workers = atoi(p); + + mctx = NULL; + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + return(T_UNRESOLVED); + } + + isc_result = isc_mutex_init(&T3_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_init failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_condition_init(&T3_cv); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_init failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + tmgr = NULL; + isc_result = isc_taskmgr_create(mctx, workers, 0, &tmgr); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_taskmgr_create failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_mutex_lock(&T3_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_lock failed %s\n", + isc_result_totext(isc_result)); + isc_taskmgr_destroy(&tmgr); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + task = NULL; + isc_result = isc_task_create(tmgr, 0, &task); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_create failed %s\n", + isc_result_totext(isc_result)); + isc_mutex_unlock(&T3_mx); + isc_taskmgr_destroy(&tmgr); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + /* + * This event causes the task to wait on T3_cv. + */ + event = isc_event_allocate(mctx, &senders[1], event_type, t3_event1, + NULL, sizeof(*event)); + isc_task_send(task, &event); + + /* + * Now we fill up the task's event queue with some events. + */ + for (cnt = 0; cnt < T3_NEVENTS; ++cnt) { + event = isc_event_allocate(mctx, &senders[1], event_type, + t3_event2, NULL, sizeof(*event)); + isc_task_send(task, &event); + } + + /* + * Now we register two shutdown events. + */ + isc_result = isc_task_onshutdown(task, t3_sde1, NULL); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_send failed %s\n", + isc_result_totext(isc_result)); + isc_mutex_unlock(&T3_mx); + isc_task_destroy(&task); + isc_taskmgr_destroy(&tmgr); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_task_onshutdown(task, t3_sde2, NULL); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_send failed %s\n", + isc_result_totext(isc_result)); + isc_mutex_unlock(&T3_mx); + isc_task_destroy(&task); + isc_taskmgr_destroy(&tmgr); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_task_shutdown(task); + + /* + * Now we free the task by signaling T3_cv. + */ + T3_flag = 1; + isc_result = isc_condition_signal(&T3_cv); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_send failed %s\n", + isc_result_totext(isc_result)); + ++T3_nprobs; + } + + isc_result = isc_mutex_unlock(&T3_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_send failed %s\n", + isc_result_totext(isc_result)); + ++T3_nprobs; + } + + + isc_task_detach(&task); + isc_taskmgr_destroy(&tmgr); + isc_mem_destroy(&mctx); + + if (T3_nsdevents != 2) { + t_info("T3_nsdevents == %d, expected 2\n", T3_nsdevents); + ++T3_nfails; + } + + if (T3_nevents != T3_nevents) { + t_info("T3_nevents == %d, expected 2\n", T3_nevents); + ++T3_nfails; + } + + result = T_UNRESOLVED; + + if (T3_nfails != 0) + result = T_FAIL; + else if ((T3_nfails == 0) && (T3_nprobs == 0)) + result = T_PASS; + + return(result); +} + +static const char *a3 = "When isc_task_shutdown() is called, any shutdown " + "events that have been requested via prior " + "isc_task_onshutdown() calls are posted in " + "LIFO order."; +static void +t3(void) { + t_assert("tasks", 3, T_REQUIRED, a3); + + if (threaded) + t_result(t_tasks3()); + else + require_threads(); +} + +static isc_mutex_t T4_mx; +static isc_condition_t T4_cv; +static int T4_flag; +static int T4_nprobs; +static int T4_nfails; + +static void +t4_event1(isc_task_t *task, isc_event_t *event) { + isc_result_t isc_result; + + UNUSED(task); + + isc_result = isc_mutex_lock(&T4_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_lock failed %s\n", + isc_result_totext(isc_result)); + ++T4_nprobs; + } + while (T4_flag != 1) { + (void) isc_condition_wait(&T4_cv, &T4_mx); + } + + isc_result = isc_mutex_unlock(&T4_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_unlock failed %s\n", + isc_result_totext(isc_result)); + ++T4_nprobs; + } + isc_event_free(&event); +} + +static void +t4_sde(isc_task_t *task, isc_event_t *event) { + UNUSED(task); + + /* + * No-op. + */ + + isc_event_free(&event); +} + +static int +t_tasks4(void) { + int result; + char *p; + isc_mem_t *mctx; + isc_taskmgr_t *tmgr; + isc_task_t *task; + unsigned int workers; + isc_result_t isc_result; + isc_eventtype_t event_type; + isc_event_t *event; + + T4_nprobs = 0; + T4_nfails = 0; + T4_flag = 0; + + result = T_UNRESOLVED; + event_type = 4; + + workers = 2; + p = t_getenv("ISC_TASK_WORKERS"); + if (p != NULL) + workers = atoi(p); + + mctx = NULL; + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + return(T_UNRESOLVED); + } + + isc_result = isc_mutex_init(&T4_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_init failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_condition_init(&T4_cv); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_init failed %s\n", + isc_result_totext(isc_result)); + DESTROYLOCK(&T4_mx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + tmgr = NULL; + isc_result = isc_taskmgr_create(mctx, workers, 0, &tmgr); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_taskmgr_create failed %s\n", + isc_result_totext(isc_result)); + DESTROYLOCK(&T4_mx); + isc_condition_destroy(&T4_cv); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_mutex_lock(&T4_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_lock failed %s\n", + isc_result_totext(isc_result)); + DESTROYLOCK(&T4_mx); + isc_condition_destroy(&T4_cv); + isc_taskmgr_destroy(&tmgr); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + task = NULL; + isc_result = isc_task_create(tmgr, 0, &task); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_create failed %s\n", + isc_result_totext(isc_result)); + DESTROYLOCK(&T4_mx); + isc_condition_destroy(&T4_cv); + isc_taskmgr_destroy(&tmgr); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + /* + * This event causes the task to wait on T4_cv. + */ + event = isc_event_allocate(mctx, &senders[1], event_type, t4_event1, + NULL, sizeof(*event)); + isc_task_send(task, &event); + + isc_task_shutdown(task); + + isc_result = isc_task_onshutdown(task, t4_sde, NULL); + if (isc_result != ISC_R_SHUTTINGDOWN) { + t_info("isc_task_onshutdown returned %s\n", + isc_result_totext(isc_result)); + ++T4_nfails; + } + + /* + * Release the task. + */ + T4_flag = 1; + + isc_result = isc_condition_signal(&T4_cv); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_signal failed %s\n", + isc_result_totext(isc_result)); + ++T4_nprobs; + } + + isc_result = isc_mutex_unlock(&T4_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_unlock failed %s\n", + isc_result_totext(isc_result)); + ++T4_nprobs; + } + + isc_task_detach(&task); + isc_taskmgr_destroy(&tmgr); + isc_mem_destroy(&mctx); + isc_condition_destroy(&T4_cv); + DESTROYLOCK(&T4_mx); + + result = T_UNRESOLVED; + + if (T4_nfails != 0) + result = T_FAIL; + else if ((T4_nfails == 0) && (T4_nprobs == 0)) + result = T_PASS; + + return(result); +} + +static const char *a4 = + "After isc_task_shutdown() has been called, any call to " + "isc_task_onshutdown() will return ISC_R_SHUTTINGDOWN."; + +static void +t4(void) { + t_assert("tasks", 4, T_REQUIRED, a4); + + if (threaded) + t_result(t_tasks4()); + else + require_threads(); +} + +static int T7_nprobs; +static int T7_eflag; +static int T7_sdflag; +static isc_mutex_t T7_mx; +static isc_condition_t T7_cv; + +static int T7_nfails; + +static void +t7_event1(isc_task_t *task, isc_event_t *event) { + UNUSED(task); + + ++T7_eflag; + + isc_event_free(&event); +} + +static void +t7_sde(isc_task_t *task, isc_event_t *event) { + isc_result_t isc_result; + + UNUSED(task); + + isc_result = isc_mutex_lock(&T7_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_lock failed %s\n", + isc_result_totext(isc_result)); + ++T7_nprobs; + } + + ++T7_sdflag; + + isc_result = isc_condition_signal(&T7_cv); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_signal failed %s\n", + isc_result_totext(isc_result)); + ++T7_nprobs; + } + + isc_result = isc_mutex_unlock(&T7_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_unlock failed %s\n", + isc_result_totext(isc_result)); + ++T7_nprobs; + } + + isc_event_free(&event); +} + +static int +t_tasks7(void) { + int result; + char *p; + isc_mem_t *mctx; + isc_taskmgr_t *tmgr; + isc_task_t *task; + unsigned int workers; + isc_result_t isc_result; + isc_eventtype_t event_type; + isc_event_t *event; + isc_time_t now; + isc_interval_t interval; + + T7_nprobs = 0; + T7_nfails = 0; + T7_sdflag = 0; + T7_eflag = 0; + + result = T_UNRESOLVED; + event_type = 7; + + workers = 2; + p = t_getenv("ISC_TASK_WORKERS"); + if (p != NULL) + workers = atoi(p); + + mctx = NULL; + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + return(T_UNRESOLVED); + } + + isc_result = isc_mutex_init(&T7_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_init failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_condition_init(&T7_cv); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_init failed %s\n", + isc_result_totext(isc_result)); + DESTROYLOCK(&T7_mx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + tmgr = NULL; + isc_result = isc_taskmgr_create(mctx, workers, 0, &tmgr); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_taskmgr_create failed %s\n", + isc_result_totext(isc_result)); + DESTROYLOCK(&T7_mx); + isc_condition_destroy(&T7_cv); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_mutex_lock(&T7_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_lock failed %s\n", + isc_result_totext(isc_result)); + DESTROYLOCK(&T7_mx); + isc_condition_destroy(&T7_cv); + isc_taskmgr_destroy(&tmgr); + isc_mem_destroy(&mctx); + return(T_FAIL); + } + + task = NULL; + isc_result = isc_task_create(tmgr, 0, &task); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_create failed %s\n", + isc_result_totext(isc_result)); + DESTROYLOCK(&T7_mx); + isc_condition_destroy(&T7_cv); + isc_taskmgr_destroy(&tmgr); + isc_mem_destroy(&mctx); + return(T_FAIL); + } + + isc_result = isc_task_onshutdown(task, t7_sde, NULL); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_onshutdown returned %s\n", + isc_result_totext(isc_result)); + DESTROYLOCK(&T7_mx); + isc_condition_destroy(&T7_cv); + isc_task_destroy(&task); + isc_taskmgr_destroy(&tmgr); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + event = isc_event_allocate(mctx, &senders[1], event_type, t7_event1, + NULL, sizeof(*event)); + isc_task_send(task, &event); + + isc_task_shutdown(task); + + interval.seconds = 5; + interval.nanoseconds = 0; + + while (T7_sdflag == 0) { + isc_result = isc_time_nowplusinterval(&now, &interval); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_time_nowplusinterval failed %s\n", + isc_result_totext(isc_result)); + DESTROYLOCK(&T7_mx); + isc_condition_destroy(&T7_cv); + isc_task_destroy(&task); + isc_taskmgr_destroy(&tmgr); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_condition_waituntil(&T7_cv, &T7_mx, &now); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_waituntil returned %s\n", + isc_result_totext(isc_result)); + DESTROYLOCK(&T7_mx); + isc_condition_destroy(&T7_cv); + isc_task_destroy(&task); + isc_taskmgr_destroy(&tmgr); + isc_mem_destroy(&mctx); + return(T_FAIL); + } + } + + isc_result = isc_mutex_unlock(&T7_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_unlock failed %s\n", + isc_result_totext(isc_result)); + ++T7_nprobs; + } + + isc_task_detach(&task); + isc_taskmgr_destroy(&tmgr); + isc_mem_destroy(&mctx); + isc_condition_destroy(&T7_cv); + DESTROYLOCK(&T7_mx); + + result = T_UNRESOLVED; + + if (T7_eflag == 0) + ++T7_nfails; + + if (T7_nfails != 0) + result = T_FAIL; + else if ((T7_nfails == 0) && (T7_nprobs == 0)) + result = T_PASS; + + return(result); +} + +static const char *a7 = "A call to isc_task_create() creates a task that can " + "receive events."; + +static void +t7(void) { + t_assert("tasks", 7, T_REQUIRED, a7); + + if (threaded) + t_result(t_tasks7()); + else + require_threads(); +} + +#define T10_SENDERCNT 3 +#define T10_TYPECNT 4 +#define T10_TAGCNT 5 +#define T10_NEVENTS (T10_SENDERCNT*T10_TYPECNT*T10_TAGCNT) +#define T_CONTROL 99999 + +static int T10_nprobs; +static int T10_nfails; +static int T10_startflag; +static int T10_shutdownflag; +static int T10_eventcnt; +static isc_mutex_t T10_mx; +static isc_condition_t T10_cv; + +static void *T10_purge_sender; +static isc_eventtype_t T10_purge_type_first; +static isc_eventtype_t T10_purge_type_last; +static void *T10_purge_tag; +static int T10_testrange; + +static void +t10_event1(isc_task_t *task, isc_event_t *event) { + isc_result_t isc_result; + + task = task; + + isc_result = isc_mutex_lock(&T10_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_lock failed %s\n", + isc_result_totext(isc_result)); + ++T10_nprobs; + } + + while (T10_startflag == 0) { + isc_result = isc_condition_wait(&T10_cv, &T10_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_lock failed %s\n", + isc_result_totext(isc_result)); + ++T10_nprobs; + } + } + + isc_result = isc_mutex_unlock(&T10_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_unlock failed %s\n", + isc_result_totext(isc_result)); + ++T10_nprobs; + } + + isc_event_free(&event); +} + +static void +t10_event2(isc_task_t *task, isc_event_t *event) { + + int sender_match; + int type_match; + int tag_match; + + task = task; + + sender_match = 0; + type_match = 0; + tag_match = 0; + + if (T_debug) { + t_info("Event %p,%d,%p,%s\n", + event->ev_sender, + (int)event->ev_type, + event->ev_tag, + event->ev_attributes & ISC_EVENTATTR_NOPURGE ? + "NP" : "P"); + } + + if ((T10_purge_sender == NULL) || + (T10_purge_sender == event->ev_sender)) { + sender_match = 1; + } + if (T10_testrange == 0) { + if (T10_purge_type_first == event->ev_type) { + type_match = 1; + } + } else { + if ((T10_purge_type_first <= event->ev_type) && + (event->ev_type <= T10_purge_type_last)) { + type_match = 1; + } + } + if ((T10_purge_tag == NULL) || + (T10_purge_tag == event->ev_tag)) { + tag_match = 1; + } + + if (sender_match && type_match && tag_match) { + if (event->ev_attributes & ISC_EVENTATTR_NOPURGE) { + t_info("event %p,%d,%p matched but was not purgable\n", + event->ev_sender, (int)event->ev_type, + event->ev_tag); + ++T10_eventcnt; + } else { + t_info("*** event %p,%d,%p not purged\n", + event->ev_sender, (int)event->ev_type, + event->ev_tag); + } + } else { + ++T10_eventcnt; + } + isc_event_free(&event); +} + + +static void +t10_sde(isc_task_t *task, isc_event_t *event) { + isc_result_t isc_result; + + task = task; + + isc_result = isc_mutex_lock(&T10_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_lock failed %s\n", + isc_result_totext(isc_result)); + ++T10_nprobs; + } + + ++T10_shutdownflag; + + isc_result = isc_condition_signal(&T10_cv); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_signal failed %s\n", + isc_result_totext(isc_result)); + ++T10_nprobs; + } + + isc_result = isc_mutex_unlock(&T10_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_unlock failed %s\n", + isc_result_totext(isc_result)); + ++T10_nprobs; + } + + isc_event_free(&event); +} + +static void +t_taskpurge_x(int sender, int type, int tag, void *purge_sender, + int purge_type_first, int purge_type_last, void *purge_tag, + int exp_nevents, int *nfails, int *nprobs, int testrange) +{ + char *p; + isc_mem_t *mctx; + isc_taskmgr_t *tmgr; + isc_task_t *task; + unsigned int workers; + isc_result_t isc_result; + isc_event_t *event; + isc_time_t now; + isc_interval_t interval; + int sender_cnt; + int type_cnt; + int tag_cnt; + int event_cnt; + int cnt; + int nevents; + isc_event_t *eventtab[T10_NEVENTS]; + + + T10_startflag = 0; + T10_shutdownflag = 0; + T10_eventcnt = 0; + T10_purge_sender = purge_sender; + T10_purge_type_first = (isc_eventtype_t) purge_type_first; + T10_purge_type_last = (isc_eventtype_t) purge_type_last; + T10_purge_tag = purge_tag; + T10_testrange = testrange; + + workers = 2; + p = t_getenv("ISC_TASK_WORKERS"); + if (p != NULL) + workers = atoi(p); + + mctx = NULL; + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + ++*nprobs; + return; + } + + isc_result = isc_mutex_init(&T10_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_init failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + ++*nprobs; + return; + } + + isc_result = isc_condition_init(&T10_cv); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_init failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + DESTROYLOCK(&T10_mx); + ++*nprobs; + return; + } + + tmgr = NULL; + isc_result = isc_taskmgr_create(mctx, workers, 0, &tmgr); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_taskmgr_create failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + DESTROYLOCK(&T10_mx); + isc_condition_destroy(&T10_cv); + ++*nprobs; + return; + } + + task = NULL; + isc_result = isc_task_create(tmgr, 0, &task); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_create failed %s\n", + isc_result_totext(isc_result)); + isc_taskmgr_destroy(&tmgr); + isc_mem_destroy(&mctx); + DESTROYLOCK(&T10_mx); + isc_condition_destroy(&T10_cv); + ++*nprobs; + return; + } + + isc_result = isc_task_onshutdown(task, t10_sde, NULL); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_onshutdown returned %s\n", + isc_result_totext(isc_result)); + isc_task_destroy(&task); + isc_taskmgr_destroy(&tmgr); + isc_mem_destroy(&mctx); + DESTROYLOCK(&T10_mx); + isc_condition_destroy(&T10_cv); + ++*nprobs; + return; + } + + /* + * Block the task on T10_cv. + */ + event = isc_event_allocate(mctx, (void *)1, (isc_eventtype_t)T_CONTROL, + t10_event1, NULL, sizeof(*event)); + + isc_task_send(task, &event); + + /* + * Fill the task's queue with some messages with varying + * sender, type, tag, and purgable attribute values. + */ + + event_cnt = 0; + for (sender_cnt = 0; sender_cnt < T10_SENDERCNT; ++sender_cnt) { + for (type_cnt = 0; type_cnt < T10_TYPECNT; ++type_cnt) { + for (tag_cnt = 0; tag_cnt < T10_TAGCNT; ++tag_cnt) { + eventtab[event_cnt] = + isc_event_allocate(mctx, + &senders[sender + sender_cnt], + (isc_eventtype_t)(type + type_cnt), + t10_event2, NULL, sizeof(*event)); + + eventtab[event_cnt]->ev_tag = + (void *)((uintptr_t)tag + tag_cnt); + + /* + * Make all odd message non-purgable. + */ + if ((sender_cnt % 2) && (type_cnt %2) && + (tag_cnt %2)) + eventtab[event_cnt]->ev_attributes |= + ISC_EVENTATTR_NOPURGE; + ++event_cnt; + } + } + } + + for (cnt = 0; cnt < event_cnt; ++cnt) + isc_task_send(task, &eventtab[cnt]); + + if (T_debug) + t_info("%d events queued\n", cnt); + + if (testrange == 0) { + /* + * We're testing isc_task_purge. + */ + nevents = isc_task_purge(task, purge_sender, + (isc_eventtype_t)purge_type_first, + purge_tag); + if (nevents != exp_nevents) { + t_info("*** isc_task_purge returned %d, expected %d\n", + nevents, exp_nevents); + ++*nfails; + } else if (T_debug) + t_info("isc_task_purge returned %d\n", nevents); + } else { + /* + * We're testing isc_task_purgerange. + */ + nevents = isc_task_purgerange(task, purge_sender, + (isc_eventtype_t)purge_type_first, + (isc_eventtype_t)purge_type_last, + purge_tag); + if (nevents != exp_nevents) { + t_info("*** isc_task_purgerange returned %d, " + "expected %d\n", nevents, exp_nevents); + ++*nfails; + } else if (T_debug) + t_info("isc_task_purgerange returned %d\n", nevents); + } + + isc_result = isc_mutex_lock(&T10_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_lock failed %s\n", + isc_result_totext(isc_result)); + isc_task_destroy(&task); + isc_taskmgr_destroy(&tmgr); + isc_mem_destroy(&mctx); + DESTROYLOCK(&T10_mx); + isc_condition_destroy(&T10_cv); + ++*nprobs; + return; + } + + /* + * Unblock the task, allowing event processing. + */ + T10_startflag = 1; + isc_result = isc_condition_signal(&T10_cv); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_signal failed %s\n", + isc_result_totext(isc_result)); + ++*nprobs; + } + + isc_task_shutdown(task); + + interval.seconds = 5; + interval.nanoseconds = 0; + + /* + * Wait for shutdown processing to complete. + */ + while (T10_shutdownflag == 0) { + isc_result = isc_time_nowplusinterval(&now, &interval); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_time_nowplusinterval failed %s\n", + isc_result_totext(isc_result)); + isc_task_detach(&task); + isc_taskmgr_destroy(&tmgr); + isc_mem_destroy(&mctx); + DESTROYLOCK(&T10_mx); + isc_condition_destroy(&T10_cv); + ++*nprobs; + return; + } + + isc_result = isc_condition_waituntil(&T10_cv, &T10_mx, &now); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_waituntil returned %s\n", + isc_result_totext(isc_result)); + isc_task_detach(&task); + isc_taskmgr_destroy(&tmgr); + isc_mem_destroy(&mctx); + DESTROYLOCK(&T10_mx); + isc_condition_destroy(&T10_cv); + ++*nfails; + return; + } + } + + isc_result = isc_mutex_unlock(&T10_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_unlock failed %s\n", + isc_result_totext(isc_result)); + ++*nprobs; + } + + isc_task_detach(&task); + isc_taskmgr_destroy(&tmgr); + isc_mem_destroy(&mctx); + DESTROYLOCK(&T10_mx); + isc_condition_destroy(&T10_cv); + + if (T_debug) + t_info("task processed %d events\n", T10_eventcnt); + + if ((T10_eventcnt + nevents) != event_cnt) { + t_info("*** processed %d, purged %d, total %d\n", + T10_eventcnt, nevents, event_cnt); + ++*nfails; + } +} + +static int +t_tasks10(void) { + int result; + + T10_nprobs = 0; + T10_nfails = 0; + + /* + * Try purging on a specific sender. + */ + t_info("testing purge on 2,4,8 expecting 1\n"); + t_taskpurge_x(1, 4, 7, &senders[2], 4, 4, (void *)8, 1, &T10_nfails, + &T10_nprobs, 0); + + /* + * Try purging on all senders. + */ + t_info("testing purge on 0,4,8 expecting 3\n"); + t_taskpurge_x(1, 4, 7, NULL, 4, 4, (void *)8, 3, &T10_nfails, + &T10_nprobs, 0); + + /* + * Try purging on all senders, specified type, all tags. + */ + t_info("testing purge on 0,4,0 expecting 15\n"); + t_taskpurge_x(1, 4, 7, NULL, 4, 4, NULL, 15, &T10_nfails, + &T10_nprobs, 0); + + /* + * Try purging on a specified tag, no such type. + */ + t_info("testing purge on 0,99,8 expecting 0\n"); + t_taskpurge_x(1, 4, 7, NULL, 99, 99, (void *)8, 0, &T10_nfails, + &T10_nprobs, 0); + + /* + * Try purging on specified sender, type, all tags. + */ + t_info("testing purge on 0,5,0 expecting 5\n"); + t_taskpurge_x(1, 4, 7, &senders[3], 5, 5, NULL, 5, &T10_nfails, + &T10_nprobs, 0); + + result = T_UNRESOLVED; + + if ((T10_nfails == 0) && (T10_nprobs == 0)) + result = T_PASS; + else if (T10_nfails != 0) + result = T_FAIL; + + return(result); +} + +static const char *a10 = + "A call to isc_task_purge(task, sender, type, tag) " + "purges all events of type 'type' and with tag 'tag' " + "not marked as unpurgable from sender from the task's " + "queue and returns the number of events purged."; + +static void +t10(void) { + t_assert("tasks", 10, T_REQUIRED, a10); + + if (threaded) + t_result(t_tasks10()); + else + require_threads(); +} + +static int T11_nprobs; +static int T11_nfails; +static int T11_startflag; +static int T11_shutdownflag; +static int T11_eventcnt; +static isc_mutex_t T11_mx; +static isc_condition_t T11_cv; + +static void +t11_event1(isc_task_t *task, isc_event_t *event) { + isc_result_t isc_result; + + task = task; + + isc_result = isc_mutex_lock(&T11_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_lock failed %s\n", + isc_result_totext(isc_result)); + ++T11_nprobs; + } + + while (T11_startflag == 0) { + isc_result = isc_condition_wait(&T11_cv, &T11_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_lock failed %s\n", + isc_result_totext(isc_result)); + ++T11_nprobs; + } + } + + isc_result = isc_mutex_unlock(&T11_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_unlock failed %s\n", + isc_result_totext(isc_result)); + ++T11_nprobs; + } + + isc_event_free(&event); +} + +static void +t11_event2(isc_task_t *task, isc_event_t *event) { + UNUSED(task); + + ++T11_eventcnt; + isc_event_free(&event); +} + + +static void +t11_sde(isc_task_t *task, isc_event_t *event) { + isc_result_t isc_result; + + UNUSED(task); + + isc_result = isc_mutex_lock(&T11_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_lock failed %s\n", + isc_result_totext(isc_result)); + ++T11_nprobs; + } + + ++T11_shutdownflag; + + isc_result = isc_condition_signal(&T11_cv); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_signal failed %s\n", + isc_result_totext(isc_result)); + ++T11_nprobs; + } + + isc_result = isc_mutex_unlock(&T11_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_unlock failed %s\n", + isc_result_totext(isc_result)); + ++T11_nprobs; + } + + isc_event_free(&event); +} + +static int +t_tasks11(int purgable) { + char *p; + isc_mem_t *mctx; + isc_taskmgr_t *tmgr; + isc_task_t *task; + isc_boolean_t rval; + unsigned int workers; + isc_result_t isc_result; + isc_event_t *event1; + isc_event_t *event2, *event2_clone; + isc_time_t now; + isc_interval_t interval; + int result; + + T11_startflag = 0; + T11_shutdownflag = 0; + T11_eventcnt = 0; + + workers = 2; + p = t_getenv("ISC_TASK_WORKERS"); + if (p != NULL) + workers = atoi(p); + + mctx = NULL; + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + return(T_UNRESOLVED); + } + + isc_result = isc_mutex_init(&T11_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_init failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_condition_init(&T11_cv); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_init failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + DESTROYLOCK(&T11_mx); + return(T_UNRESOLVED); + } + + tmgr = NULL; + isc_result = isc_taskmgr_create(mctx, workers, 0, &tmgr); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_taskmgr_create failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + DESTROYLOCK(&T11_mx); + isc_condition_destroy(&T11_cv); + return(T_UNRESOLVED); + } + + task = NULL; + isc_result = isc_task_create(tmgr, 0, &task); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_create failed %s\n", + isc_result_totext(isc_result)); + isc_taskmgr_destroy(&tmgr); + isc_mem_destroy(&mctx); + DESTROYLOCK(&T11_mx); + isc_condition_destroy(&T11_cv); + return(T_UNRESOLVED); + } + + isc_result = isc_task_onshutdown(task, t11_sde, NULL); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_onshutdown returned %s\n", + isc_result_totext(isc_result)); + isc_task_destroy(&task); + isc_taskmgr_destroy(&tmgr); + isc_mem_destroy(&mctx); + DESTROYLOCK(&T11_mx); + isc_condition_destroy(&T11_cv); + return(T_UNRESOLVED); + } + + /* + * Block the task on T11_cv. + */ + event1 = isc_event_allocate(mctx, (void *)1, (isc_eventtype_t)1, + t11_event1, NULL, sizeof(*event1)); + + isc_task_send(task, &event1); + + event2 = isc_event_allocate(mctx, (void *)1, (isc_eventtype_t)1, + t11_event2, NULL, sizeof(*event2)); + event2_clone = event2; + if (purgable) + event2->ev_attributes &= ~ISC_EVENTATTR_NOPURGE; + else + event2->ev_attributes |= ISC_EVENTATTR_NOPURGE; + + isc_task_send(task, &event2); + + rval = isc_task_purgeevent(task, event2_clone); + if (rval != (purgable ? ISC_TRUE : ISC_FALSE)) { + t_info("isc_task_purgeevent returned %s, expected %s\n", + (rval ? "ISC_TRUE" : "ISC_FALSE"), + (purgable ? "ISC_TRUE" : "ISC_FALSE")); + ++T11_nfails; + } + + isc_result = isc_mutex_lock(&T11_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_lock failed %s\n", + isc_result_totext(isc_result)); + ++T11_nprobs; + } + + /* + * Unblock the task, allowing event processing. + */ + T11_startflag = 1; + isc_result = isc_condition_signal(&T11_cv); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_signal failed %s\n", + isc_result_totext(isc_result)); + ++T11_nprobs; + } + + isc_task_shutdown(task); + + interval.seconds = 5; + interval.nanoseconds = 0; + + /* + * Wait for shutdown processing to complete. + */ + while (T11_shutdownflag == 0) { + isc_result = isc_time_nowplusinterval(&now, &interval); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_time_nowplusinterval failed %s\n", + isc_result_totext(isc_result)); + ++T11_nprobs; + } + + isc_result = isc_condition_waituntil(&T11_cv, &T11_mx, &now); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_waituntil returned %s\n", + isc_result_totext(isc_result)); + ++T11_nprobs; + } + } + + isc_result = isc_mutex_unlock(&T11_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_unlock failed %s\n", + isc_result_totext(isc_result)); + ++T11_nprobs; + } + + isc_task_detach(&task); + isc_taskmgr_destroy(&tmgr); + isc_mem_destroy(&mctx); + DESTROYLOCK(&T11_mx); + isc_condition_destroy(&T11_cv); + + if (T11_eventcnt != (purgable ? 0 : 1)) { + t_info("Event was %s purged\n", + (purgable ? "not" : "unexpectedly")); + ++T11_nfails; + } + + result = T_UNRESOLVED; + + if ((T11_nfails == 0) && (T11_nprobs == 0)) + result = T_PASS; + else if (T11_nfails) + result = T_FAIL; + + return(result); +} + +static const char *a11 = + "When the event is marked as purgable, a call to " + "isc_task_purgeevent(task, event) purges the event 'event' " + "from the task's queue and returns ISC_TRUE."; + +static void +t11(void) { + t_assert("tasks", 11, T_REQUIRED, a11); + + if (threaded) + t_result(t_tasks11(1)); + else + require_threads(); +} + +static const char *a12 = + "When the event is not marked as purgable, a call to " + "isc_task_purgeevent(task, event) does not purge the " + "event 'event' from the task's queue and returns " + "ISC_FALSE."; + +static int +t_tasks12(void) { + return(t_tasks11(0)); +} + +static void +t12(void) { + t_assert("tasks", 12, T_REQUIRED, a12); + + if (threaded) + t_result(t_tasks12()); + else + require_threads(); +} + +static int T13_nfails; +static int T13_nprobs; + +static const char *a13 = + "A call to " + "isc_event_purgerange(task, sender, first, last, tag) " + "purges all events not marked unpurgable from " + "sender 'sender' and of type within the range 'first' " + "to 'last' inclusive from the task's event queue and " + "returns the number of tasks purged."; + +static int +t_tasks13(void) { + int result; + + T13_nfails = 0; + T13_nprobs = 0; + + /* + * First let's try the same cases we used in t10. + */ + + /* + * Try purging on a specific sender. + */ + t_info("testing purge on 2,4,8 expecting 1\n"); + t_taskpurge_x(1, 4, 7, &senders[2], 4, 4, (void *)8, 1, + &T13_nfails, &T13_nprobs, 1); + + /* + * Try purging on all senders. + */ + t_info("testing purge on 0,4,8 expecting 3\n"); + t_taskpurge_x(1, 4, 7, NULL, 4, 4, (void *)8, 3, + &T13_nfails, &T13_nprobs, 1); + + /* + * Try purging on all senders, specified type, all tags. + */ + t_info("testing purge on 0,4,0 expecting 15\n"); + t_taskpurge_x(1, 4, 7, NULL, 4, 4, NULL, 15, &T13_nfails, &T13_nprobs, 1); + + /* + * Try purging on a specified tag, no such type. + */ + t_info("testing purge on 0,99,8 expecting 0\n"); + t_taskpurge_x(1, 4, 7, NULL, 99, 99, (void *)8, 0, + &T13_nfails, &T13_nprobs, 1); + + /* + * Try purging on specified sender, type, all tags. + */ + t_info("testing purge on 3,5,0 expecting 5\n"); + t_taskpurge_x(1, 4, 7, &senders[3], 5, 5, 0, 5, &T13_nfails, &T13_nprobs, 1); + + /* + * Now let's try some ranges. + */ + + t_info("testing purgerange on 2,4-5,8 expecting 2\n"); + t_taskpurge_x(1, 4, 7, &senders[2], 4, 5, (void *)8, 1, + &T13_nfails, &T13_nprobs, 1); + + /* + * Try purging on all senders. + */ + t_info("testing purge on 0,4-5,8 expecting 5\n"); + t_taskpurge_x(1, 4, 7, NULL, 4, 5, (void *)8, 5, + &T13_nfails, &T13_nprobs, 1); + + /* + * Try purging on all senders, specified type, all tags. + */ + t_info("testing purge on 0,5-6,0 expecting 28\n"); + t_taskpurge_x(1, 4, 7, NULL, 5, 6, NULL, 28, &T13_nfails, &T13_nprobs, 1); + + /* + * Try purging on a specified tag, no such type. + */ + t_info("testing purge on 0,99-101,8 expecting 0\n"); + t_taskpurge_x(1, 4, 7, NULL, 99, 101, (void *)8, 0, + &T13_nfails, &T13_nprobs, 1); + + /* + * Try purging on specified sender, type, all tags. + */ + t_info("testing purge on 3,5-6,0 expecting 10\n"); + t_taskpurge_x(1, 4, 7, &senders[3], 5, 6, NULL, 10, &T13_nfails, + &T13_nprobs, 1); + + result = T_UNRESOLVED; + + if ((T13_nfails == 0) && (T13_nprobs == 0)) + result = T_PASS; + else if (T13_nfails) + result = T_FAIL; + + return (result); +} + +static void +t13(void) { + t_assert("tasks", 13, T_REQUIRED, a13); + + if (threaded) + t_result(t_tasks13()); + else + require_threads(); +} + +#define T14_NTASKS 10 +#define T14_EXCLTASK 6 + +int t14_exclusiveerror = ISC_R_SUCCESS; +int t14_error = 0; +int t14_done = 0; + +int spin(int n); + +int t14_active[T14_NTASKS]; + +static void +t14_callback(isc_task_t *task, isc_event_t *event) { + int taskno = *(int *)(event->ev_arg); + + + t_info("task enter %d\n", taskno); + if (taskno == T14_EXCLTASK) { + int i; + t14_exclusiveerror = isc_task_beginexclusive(task); + if (t14_exclusiveerror == ISC_R_SUCCESS) + t_info("task %d got exclusive access\n", taskno); + else + t_info("task %d failed to got exclusive access: %d\n", + taskno, t14_exclusiveerror); + for (i = 0; i < T14_NTASKS; i++) { + t_info("task %d state %d\n", i , t14_active[i]); + if (t14_active[i]) + t14_error++; + } + isc_task_endexclusive(task); + t14_done = 1; + } else { + t14_active[taskno]++; + (void) spin(10000000); + t14_active[taskno]--; + } + t_info("task exit %d\n", taskno); + if (t14_done) { + isc_mem_put(event->ev_destroy_arg, event->ev_arg, sizeof (int)); + isc_event_free(&event); + } else { + isc_task_send(task, &event); + } +} + +int spin(int n) { + int i; + int r = 0; + for (i = 0; i < n; i++) { + r += i; + if (r > 1000000) + r = 0; + } + return (r); +} + +static int +t_tasks14(void) { + char *p; + isc_mem_t *mctx; + isc_taskmgr_t *manager; + isc_task_t *tasks[T14_NTASKS]; + unsigned int workers; + isc_result_t isc_result; + int i; + + manager = NULL; + mctx = NULL; + + for (i = 0; i < T14_NTASKS; i++) + tasks[i] = NULL; + + workers = 4; + p = t_getenv("ISC_TASK_WORKERS"); + if (p != NULL) + workers = atoi(p); + if (workers < 1) { + t_info("Bad config value for ISC_TASK_WORKERS, %d\n", workers); + return(T_UNRESOLVED); + } + + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %d\n", isc_result); + return(T_UNRESOLVED); + } + + isc_result = isc_taskmgr_create(mctx, workers, 0, &manager); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_taskmgr_create failed %d\n", isc_result); + return(T_FAIL); + } + + for (i = 0; i < T14_NTASKS; i++) { + isc_event_t *event; + int *v; + + isc_result = isc_task_create(manager, 0, &tasks[i]); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_create failed %d\n", isc_result); + return(T_FAIL); + } + + v = isc_mem_get(mctx, sizeof *v); + if (v == NULL) { + isc_task_detach(&tasks[i]); + t_info("isc_mem_get failed\n"); + return(T_FAIL); + } + *v = i; + + event = isc_event_allocate(mctx, NULL, 1, t14_callback, + v, sizeof(*event)); + if (event == NULL) { + isc_mem_put(mctx, v, sizeof *v); + t_info("isc_event_allocate failed\n"); + return(T_UNRESOLVED); + } + isc_task_send(tasks[i], &event); + } + + for (i = 0; i < T14_NTASKS; i++) { + isc_task_detach(&tasks[i]); + } + + isc_taskmgr_destroy(&manager); + + if (t14_exclusiveerror != ISC_R_SUCCESS || t14_error) { + if (t14_exclusiveerror != ISC_R_SUCCESS) + t_info("isc_task_beginexclusive() failed\n"); + if (t14_error) + t_info("mutual access occurred\n"); + return(T_FAIL); + } + + isc_mem_destroy(&mctx); + return(T_PASS); +} + +static void +t14(void) { + int result; + + t_assert("tasks", 14, T_REQUIRED, + "isc_task_beginexclusive() gets exclusive access"); + result = t_tasks14(); + t_result(result); +} + +testspec_t T_testlist[] = { + { t1, "basic task subsystem" }, + { t2, "maxtasks" }, + { t3, "isc_task_shutdown" }, + { t4, "isc_task_shutdown" }, + { t7, "isc_task_create" }, + { t10, "isc_task_purge" }, + { t11, "isc_task_purgeevent" }, + { t12, "isc_task_purgeevent" }, + { t13, "isc_task_purgerange" }, + { t14, "isc_task_beginexclusive" }, + { NULL, NULL } +}; diff --git a/bin/tests/timer_test.c b/bin/tests/timer_test.c new file mode 100644 index 0000000..2825dc5 --- /dev/null +++ b/bin/tests/timer_test.c @@ -0,0 +1,172 @@ +/* + * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1998-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. + */ + +/* $Id: timer_test.c,v 1.40 2007/06/19 23:46:59 tbox Exp $ */ + +#include <config.h> + +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include <isc/mem.h> +#include <isc/task.h> +#include <isc/time.h> +#include <isc/timer.h> +#include <isc/util.h> + +isc_mem_t *mctx1, *mctx2, *mctx3; +isc_task_t *t1, *t2, *t3; +isc_timer_t *ti1, *ti2, *ti3; +int tick_count = 0; + +static void +shutdown_task(isc_task_t *task, isc_event_t *event) { + char *name = event->ev_arg; + + printf("task %p shutdown %s\n", task, name); + isc_event_free(&event); +} + +static void +tick(isc_task_t *task, isc_event_t *event) { + char *name = event->ev_arg; + + INSIST(event->ev_type == ISC_TIMEREVENT_TICK); + + printf("task %s (%p) tick\n", name, task); + + tick_count++; + if (ti3 != NULL && tick_count % 3 == 0) + isc_timer_touch(ti3); + + if (ti3 != NULL && tick_count == 7) { + isc_time_t expires; + isc_interval_t interval; + + isc_interval_set(&interval, 5, 0); + (void)isc_time_nowplusinterval(&expires, &interval); + isc_interval_set(&interval, 4, 0); + printf("*** resetting ti3 ***\n"); + RUNTIME_CHECK(isc_timer_reset(ti3, isc_timertype_once, + &expires, &interval, ISC_TRUE) == + ISC_R_SUCCESS); + } + + isc_event_free(&event); +} + +static void +timeout(isc_task_t *task, isc_event_t *event) { + char *name = event->ev_arg; + const char *type; + + INSIST(event->ev_type == ISC_TIMEREVENT_IDLE || + event->ev_type == ISC_TIMEREVENT_LIFE); + + if (event->ev_type == ISC_TIMEREVENT_IDLE) + type = "idle"; + else + type = "life"; + printf("task %s (%p) %s timeout\n", name, task, type); + + if (strcmp(name, "3") == 0) { + printf("*** saving task 3 ***\n"); + isc_event_free(&event); + return; + } + + isc_event_free(&event); + isc_task_shutdown(task); +} + +int +main(int argc, char *argv[]) { + isc_taskmgr_t *manager = NULL; + isc_timermgr_t *timgr = NULL; + unsigned int workers; + isc_time_t expires, now; + isc_interval_t interval; + + if (argc > 1) + workers = atoi(argv[1]); + else + workers = 2; + printf("%d workers\n", workers); + + RUNTIME_CHECK(isc_mem_create(0, 0, &mctx1) == ISC_R_SUCCESS); + RUNTIME_CHECK(isc_taskmgr_create(mctx1, workers, 0, &manager) == + ISC_R_SUCCESS); + RUNTIME_CHECK(isc_timermgr_create(mctx1, &timgr) == ISC_R_SUCCESS); + + RUNTIME_CHECK(isc_task_create(manager, 0, &t1) == + ISC_R_SUCCESS); + RUNTIME_CHECK(isc_task_create(manager, 0, &t2) == + ISC_R_SUCCESS); + RUNTIME_CHECK(isc_task_create(manager, 0, &t3) == + ISC_R_SUCCESS); + RUNTIME_CHECK(isc_task_onshutdown(t1, shutdown_task, "1") == + ISC_R_SUCCESS); + RUNTIME_CHECK(isc_task_onshutdown(t2, shutdown_task, "2") == + ISC_R_SUCCESS); + RUNTIME_CHECK(isc_task_onshutdown(t3, shutdown_task, "3") == + ISC_R_SUCCESS); + + printf("task 1: %p\n", t1); + printf("task 2: %p\n", t2); + printf("task 3: %p\n", t3); + + TIME_NOW(&now); + + isc_interval_set(&interval, 2, 0); + RUNTIME_CHECK(isc_timer_create(timgr, isc_timertype_once, NULL, + &interval, t2, timeout, "2", &ti2) == + ISC_R_SUCCESS); + + isc_interval_set(&interval, 1, 0); + RUNTIME_CHECK(isc_timer_create(timgr, isc_timertype_ticker, NULL, + &interval, t1, tick, "1", &ti1) == + ISC_R_SUCCESS); + + isc_interval_set(&interval, 10, 0); + RUNTIME_CHECK(isc_time_add(&now, &interval, &expires) == + ISC_R_SUCCESS); + isc_interval_set(&interval, 2, 0); + RUNTIME_CHECK(isc_timer_create(timgr, isc_timertype_once, &expires, + &interval, t3, timeout, "3", &ti3) == + ISC_R_SUCCESS); + + isc_task_detach(&t1); + isc_task_detach(&t2); + isc_task_detach(&t3); + + sleep(15); + printf("destroy\n"); + isc_timer_detach(&ti1); + isc_timer_detach(&ti2); + isc_timer_detach(&ti3); + sleep(2); + isc_timermgr_destroy(&timgr); + isc_taskmgr_destroy(&manager); + printf("destroyed\n"); + + printf("Statistics for mctx1:\n"); + isc_mem_stats(mctx1, stdout); + isc_mem_destroy(&mctx1); + + return (0); +} diff --git a/bin/tests/timers/Makefile.in b/bin/tests/timers/Makefile.in new file mode 100644 index 0000000..0ba198a --- /dev/null +++ b/bin/tests/timers/Makefile.in @@ -0,0 +1,55 @@ +# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 1999-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. + +# $Id: Makefile.in,v 1.28 2007/06/19 23:47:07 tbox Exp $ + +srcdir = @srcdir@ +VPATH = @srcdir@ +top_srcdir = @top_srcdir@ + +@BIND9_MAKE_INCLUDES@ + +CINCLUDES = ${TEST_INCLUDES} ${ISC_INCLUDES} + +CDEFINES = +CWARNINGS = + +ISCLIBS = ../../../lib/isc/libisc.@A@ + +ISCDEPLIBS = ../../../lib/isc/libisc.@A@ + +DEPLIBS = ${ISCDEPLIBS} + +LIBS = ${ISCLIBS} @LIBS@ + +TLIB = ../../../lib/tests/libt_api.@A@ + +TARGETS = t_timers@EXEEXT@ + +SRCS = t_timers.c + +@BIND9_MAKE_RULES@ + +t_timers@EXEEXT@: t_timers.@O@ ${DEPLIBS} ${TLIB} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ t_timers.@O@ ${TLIB} ${LIBS} + +test: t_timers@EXEEXT@ + -@./t_timers@EXEEXT@ -c @top_srcdir@/t_config -b @srcdir@ -q 60 -a + +testhelp: + @./t_timers@EXEEXT@ -h + +clean distclean:: + rm -f ${TARGETS} diff --git a/bin/tests/timers/t_timers.c b/bin/tests/timers/t_timers.c new file mode 100644 index 0000000..7705364 --- /dev/null +++ b/bin/tests/timers/t_timers.c @@ -0,0 +1,1128 @@ +/* + * Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1999-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. + */ + +/* $Id: t_timers.c,v 1.28 2008/01/12 23:47:13 tbox Exp $ */ + +#include <config.h> + +#include <stdlib.h> + +#include <isc/condition.h> +#include <isc/mem.h> +#include <isc/platform.h> +#include <isc/task.h> +#include <isc/time.h> +#include <isc/timer.h> +#include <isc/util.h> + +#include <tests/t_api.h> + +#ifdef ISC_PLATFORM_USETHREADS +isc_boolean_t threaded = ISC_TRUE; +#else +isc_boolean_t threaded = ISC_FALSE; +#endif + +#define Tx_FUDGE_SECONDS 0 /* in absence of clock_getres() */ +#define Tx_FUDGE_NANOSECONDS 500000000 /* in absence of clock_getres() */ + +static isc_time_t Tx_endtime; +static isc_time_t Tx_lasttime; +static int Tx_eventcnt; +static int Tx_nevents; +static isc_mutex_t Tx_mx; +static isc_condition_t Tx_cv; +static int Tx_nfails; +static int Tx_nprobs; +static isc_timer_t *Tx_timer; +static int Tx_seconds; +static int Tx_nanoseconds; + +static void +require_threads(void) { + t_info("This test requires threads\n"); + t_result(T_THREADONLY); + return; +} + +static void +tx_sde(isc_task_t *task, isc_event_t *event) { + isc_result_t isc_result; + + task = task; + event = event; + + /* + * Signal shutdown processing complete. + */ + isc_result = isc_mutex_lock(&Tx_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_lock failed %s\n", + isc_result_totext(isc_result)); + ++Tx_nprobs; + } + + isc_result = isc_condition_signal(&Tx_cv); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_signal failed %s\n", + isc_result_totext(isc_result)); + ++Tx_nprobs; + } + + isc_result = isc_mutex_unlock(&Tx_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_unlock failed %s\n", + isc_result_totext(isc_result)); + ++Tx_nprobs; + } + + isc_event_free(&event); +} + +static void +tx_te(isc_task_t *task, isc_event_t *event) { + isc_result_t isc_result; + isc_time_t now; + isc_time_t base; + isc_time_t ulim; + isc_time_t llim; + isc_interval_t interval; + isc_eventtype_t expected_event_type; + + ++Tx_eventcnt; + + t_info("tick %d\n", Tx_eventcnt); + + expected_event_type = ISC_TIMEREVENT_LIFE; + if ((isc_timertype_t) event->ev_arg == isc_timertype_ticker) + expected_event_type = ISC_TIMEREVENT_TICK; + + if (event->ev_type != expected_event_type) { + t_info("expected event type %d, got %d\n", + expected_event_type, (int) event->ev_type); + ++Tx_nfails; + } + + isc_result = isc_time_now(&now); + if (isc_result == ISC_R_SUCCESS) { + interval.seconds = Tx_seconds; + interval.nanoseconds = Tx_nanoseconds; + isc_result = isc_time_add(&Tx_lasttime, &interval, &base); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_time_add failed %s\n", + isc_result_totext(isc_result)); + ++Tx_nprobs; + } + } else { + t_info("isc_time_now failed %s\n", + isc_result_totext(isc_result)); + ++Tx_nprobs; + } + + if (isc_result == ISC_R_SUCCESS) { + interval.seconds = Tx_FUDGE_SECONDS; + interval.nanoseconds = Tx_FUDGE_NANOSECONDS; + isc_result = isc_time_add(&base, &interval, &ulim); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_time_add failed %s\n", + isc_result_totext(isc_result)); + ++Tx_nprobs; + } + } + + if (isc_result == ISC_R_SUCCESS) { + isc_result = isc_time_subtract(&base, &interval, &llim); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_time_subtract failed %s\n", + isc_result_totext(isc_result)); + ++Tx_nprobs; + } + } + + if (isc_result == ISC_R_SUCCESS) { + if (isc_time_compare(&llim, &now) > 0) { + t_info("timer range error: early by " + "%lu microseconds\n", + (unsigned long)isc_time_microdiff(&base, &now)); + ++Tx_nfails; + } else if (isc_time_compare(&ulim, &now) < 0) { + t_info("timer range error: late by " + "%lu microseconds\n", + (unsigned long)isc_time_microdiff(&now, &base)); + ++Tx_nfails; + } + Tx_lasttime = now; + } + + if (Tx_eventcnt == Tx_nevents) { + isc_result = isc_time_now(&Tx_endtime); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_time_now failed %s\n", + isc_result_totext(isc_result)); + ++Tx_nprobs; + } + isc_timer_detach(&Tx_timer); + isc_task_shutdown(task); + } + + isc_event_free(&event); +} + +static void +t_timers_x(isc_timertype_t timertype, isc_time_t *expires, + isc_interval_t *interval, + void (*action)(isc_task_t *, isc_event_t *)) +{ + char *p; + isc_mem_t *mctx; + isc_taskmgr_t *tmgr; + isc_task_t *task; + unsigned int workers; + isc_result_t isc_result; + isc_timermgr_t *timermgr; + + Tx_eventcnt = 0; + isc_time_settoepoch(&Tx_endtime); + + workers = 2; + p = t_getenv("ISC_TASK_WORKERS"); + if (p != NULL) + workers = atoi(p); + + mctx = NULL; + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + ++Tx_nprobs; + return; + } + + isc_result = isc_mutex_init(&Tx_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_init failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + ++Tx_nprobs; + return; + } + + isc_result = isc_condition_init(&Tx_cv); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_init failed %s\n", + isc_result_totext(isc_result)); + DESTROYLOCK(&Tx_mx); + isc_mem_destroy(&mctx); + ++Tx_nprobs; + return; + } + + tmgr = NULL; + isc_result = isc_taskmgr_create(mctx, workers, 0, &tmgr); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_taskmgr_create failed %s\n", + isc_result_totext(isc_result)); + DESTROYLOCK(&Tx_mx); + isc_condition_destroy(&Tx_cv); + isc_mem_destroy(&mctx); + ++Tx_nprobs; + return; + } + + timermgr = NULL; + isc_result = isc_timermgr_create(mctx, &timermgr); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_timermgr_create failed %s\n", + isc_result_totext(isc_result)); + isc_taskmgr_destroy(&tmgr); + DESTROYLOCK(&Tx_mx); + isc_condition_destroy(&Tx_cv); + isc_mem_destroy(&mctx); + ++Tx_nprobs; + return; + } + + isc_result = isc_mutex_lock(&Tx_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_lock failed %s\n", + isc_result_totext(isc_result)); + isc_timermgr_destroy(&timermgr); + isc_taskmgr_destroy(&tmgr); + DESTROYLOCK(&Tx_mx); + isc_condition_destroy(&Tx_cv); + isc_mem_destroy(&mctx); + ++Tx_nprobs; + return; + } + + task = NULL; + isc_result = isc_task_create(tmgr, 0, &task); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_create failed %s\n", + isc_result_totext(isc_result)); + isc_timermgr_destroy(&timermgr); + isc_taskmgr_destroy(&tmgr); + DESTROYLOCK(&Tx_mx); + isc_condition_destroy(&Tx_cv); + isc_mem_destroy(&mctx); + ++Tx_nprobs; + return; + } + + isc_result = isc_task_onshutdown(task, tx_sde, NULL); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_onshutdown failed %s\n", + isc_result_totext(isc_result)); + isc_timermgr_destroy(&timermgr); + isc_task_destroy(&task); + isc_taskmgr_destroy(&tmgr); + DESTROYLOCK(&Tx_mx); + isc_condition_destroy(&Tx_cv); + isc_mem_destroy(&mctx); + ++Tx_nprobs; + return; + } + + isc_result = isc_time_now(&Tx_lasttime); + if (isc_result != ISC_R_SUCCESS) { + isc_timermgr_destroy(&timermgr); + isc_task_destroy(&task); + isc_taskmgr_destroy(&tmgr); + DESTROYLOCK(&Tx_mx); + isc_condition_destroy(&Tx_cv); + isc_mem_destroy(&mctx); + ++Tx_nprobs; + return; + } + + Tx_timer = NULL; + isc_result = isc_timer_create(timermgr, timertype, expires, interval, + task, action, (void *)timertype, + &Tx_timer); + + if (isc_result != ISC_R_SUCCESS) { + isc_timermgr_destroy(&timermgr); + isc_task_destroy(&task); + isc_taskmgr_destroy(&tmgr); + DESTROYLOCK(&Tx_mx); + isc_condition_destroy(&Tx_cv); + isc_mem_destroy(&mctx); + ++Tx_nprobs; + return; + } + + /* + * Wait for shutdown processing to complete. + */ + while (Tx_eventcnt != Tx_nevents) { + isc_result = isc_condition_wait(&Tx_cv, &Tx_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_waituntil failed %s\n", + isc_result_totext(isc_result)); + ++Tx_nprobs; + } + } + + isc_result = isc_mutex_unlock(&Tx_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_unlock failed %s\n", + isc_result_totext(isc_result)); + ++Tx_nprobs; + } + + isc_task_detach(&task); + isc_taskmgr_destroy(&tmgr); + isc_timermgr_destroy(&timermgr); + DESTROYLOCK(&Tx_mx); + isc_condition_destroy(&Tx_cv); + isc_mem_destroy(&mctx); + +} + +#define T1_SECONDS 2 +#define T1_NANOSECONDS 500000000 + +static const char *a1 = + "When type is isc_timertype_ticker, a call to isc_timer_create() " + "creates a timer that posts an ISC_TIMEREVENT_TICK event to the " + "specified task every 'interval' seconds and returns ISC_R_SUCCESS."; + +static void +t1(void) { + int result; + isc_time_t expires; + isc_interval_t interval; + + t_assert("isc_timer_create", 1, T_REQUIRED, a1); + + if (threaded) { + Tx_nfails = 0; + Tx_nprobs = 0; + Tx_nevents = 12; + Tx_seconds = T1_SECONDS; + Tx_nanoseconds = T1_NANOSECONDS; + isc_interval_set(&interval, Tx_seconds, Tx_nanoseconds); + isc_time_settoepoch(&expires); + + t_timers_x(isc_timertype_ticker, &expires, &interval, tx_te); + + result = T_UNRESOLVED; + + if ((Tx_nfails == 0) && (Tx_nprobs == 0)) + result = T_PASS; + else if (Tx_nfails) + result = T_FAIL; + + t_result(result); + } else + require_threads(); +} + +#define T2_SECONDS 5 +#define T2_NANOSECONDS 300000000; + +static const char *a2 = + "When type is isc_timertype_once, a call to isc_timer_create() " + "creates a timer that posts an ISC_TIMEEVENT_LIFE event to the " + "specified task when the current time reaches or exceeds the time " + "specified by 'expires'."; + +static void +t2(void) { + int result; + int isc_result; + isc_time_t expires; + isc_interval_t interval; + + t_assert("isc_timer_create", 2, T_REQUIRED, a2); + + if (threaded) { + Tx_nfails = 0; + Tx_nprobs = 0; + Tx_nevents = 1; + Tx_seconds = T2_SECONDS; + Tx_nanoseconds = T2_NANOSECONDS; + isc_interval_set(&interval, Tx_seconds, Tx_nanoseconds); + + isc_result = isc_time_nowplusinterval(&expires, &interval); + if (isc_result == ISC_R_SUCCESS) { + + isc_interval_set(&interval, 0, 0); + t_timers_x(isc_timertype_once, &expires, &interval, + tx_te); + + } else { + t_info("isc_time_nowplusinterval failed %s\n", + isc_result_totext(isc_result)); + } + + result = T_UNRESOLVED; + + if ((Tx_nfails == 0) && (Tx_nprobs == 0)) + result = T_PASS; + else if (Tx_nfails) + result = T_FAIL; + + t_result(result); + } else + require_threads(); +} + +static void +t3_te(isc_task_t *task, isc_event_t *event) { + isc_result_t isc_result; + isc_time_t now; + isc_time_t base; + isc_time_t ulim; + isc_time_t llim; + isc_interval_t interval; + + ++Tx_eventcnt; + + t_info("tick %d\n", Tx_eventcnt); + + isc_result = isc_time_now(&now); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_time_now failed %s\n", + isc_result_totext(isc_result)); + ++Tx_nprobs; + } + + if (isc_result == ISC_R_SUCCESS) { + interval.seconds = Tx_seconds; + interval.nanoseconds = Tx_nanoseconds; + isc_result = isc_time_add(&Tx_lasttime, &interval, &base); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_time_add failed %s\n", + isc_result_totext(isc_result)); + ++Tx_nprobs; + } + } + + if (isc_result == ISC_R_SUCCESS) { + interval.seconds = Tx_FUDGE_SECONDS; + interval.nanoseconds = Tx_FUDGE_NANOSECONDS; + isc_result = isc_time_add(&base, &interval, &ulim); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_time_add failed %s\n", + isc_result_totext(isc_result)); + ++Tx_nprobs; + } + } + + if (isc_result == ISC_R_SUCCESS) { + isc_result = isc_time_subtract(&base, &interval, &llim); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_time_subtract failed %s\n", + isc_result_totext(isc_result)); + ++Tx_nprobs; + } + } + + if (isc_result == ISC_R_SUCCESS) { + if (isc_time_compare(&llim, &now) > 0) { + t_info("timer range error: early by " + "%lu microseconds\n", + (unsigned long)isc_time_microdiff(&base, &now)); + ++Tx_nfails; + } else if (isc_time_compare(&ulim, &now) < 0) { + t_info("timer range error: late by " + "%lu microseconds\n", + (unsigned long)isc_time_microdiff(&now, &base)); + ++Tx_nfails; + } + Tx_lasttime = now; + } + + if (event->ev_type != ISC_TIMEREVENT_IDLE) { + t_info("received event type %d, expected type %d\n", + event->ev_type, ISC_TIMEREVENT_IDLE); + ++Tx_nfails; + } + + isc_timer_detach(&Tx_timer); + isc_task_shutdown(task); + isc_event_free(&event); +} + +#define T3_SECONDS 4 +#define T3_NANOSECONDS 400000000 + +static const char *a3 = + "When type is isc_timertype_once, a call to isc_timer_create() " + "creates a timer that posts an ISC_TIMEEVENT_IDLE event to the " + "specified task when the timer has been idle for 'interval' seconds."; + +static void +t3(void) { + int result; + int isc_result; + isc_time_t expires; + isc_interval_t interval; + + t_assert("isc_timer_create", 3, T_REQUIRED, a3); + + if (threaded) { + Tx_nfails = 0; + Tx_nprobs = 0; + Tx_nevents = 1; + Tx_seconds = T3_SECONDS; + Tx_nanoseconds = T3_NANOSECONDS; + + isc_interval_set(&interval, Tx_seconds + 1, Tx_nanoseconds); + + isc_result = isc_time_nowplusinterval(&expires, &interval); + if (isc_result == ISC_R_SUCCESS) { + isc_interval_set(&interval, Tx_seconds, + Tx_nanoseconds); + t_timers_x(isc_timertype_once, &expires, &interval, + t3_te); + } else { + t_info("isc_time_nowplusinterval failed %s\n", + isc_result_totext(isc_result)); + ++Tx_nprobs; + } + + result = T_UNRESOLVED; + + if ((Tx_nfails == 0) && (Tx_nprobs == 0)) + result = T_PASS; + else if (Tx_nfails) + result = T_FAIL; + + t_result(result); + } else + require_threads(); +} + +#define T4_SECONDS 2 +#define T4_NANOSECONDS 500000000 + +static void +t4_te(isc_task_t *task, isc_event_t *event) { + + isc_result_t isc_result; + isc_time_t now; + isc_time_t base; + isc_time_t ulim; + isc_time_t llim; + isc_time_t expires; + isc_interval_t interval; + + ++Tx_eventcnt; + + t_info("tick %d\n", Tx_eventcnt); + + /* + * Check expired time. + */ + + isc_result = isc_time_now(&now); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_time_now failed %s\n", + isc_result_totext(isc_result)); + ++Tx_nprobs; + } + + if (isc_result == ISC_R_SUCCESS) { + interval.seconds = Tx_seconds; + interval.nanoseconds = Tx_nanoseconds; + isc_result = isc_time_add(&Tx_lasttime, &interval, &base); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_time_add failed %s\n", + isc_result_totext(isc_result)); + ++Tx_nprobs; + } + } + + if (isc_result == ISC_R_SUCCESS) { + interval.seconds = Tx_FUDGE_SECONDS; + interval.nanoseconds = Tx_FUDGE_NANOSECONDS; + isc_result = isc_time_add(&base, &interval, &ulim); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_time_add failed %s\n", + isc_result_totext(isc_result)); + ++Tx_nprobs; + } + } + + if (isc_result == ISC_R_SUCCESS) { + isc_result = isc_time_subtract(&base, &interval, &llim); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_time_subtract failed %s\n", + isc_result_totext(isc_result)); + ++Tx_nprobs; + } + } + + if (isc_result == ISC_R_SUCCESS) { + if (isc_time_compare(&llim, &now) > 0) { + t_info("timer range error: early by " + "%lu microseconds\n", + (unsigned long)isc_time_microdiff(&base, &now)); + ++Tx_nfails; + } else if (isc_time_compare(&ulim, &now) < 0) { + t_info("timer range error: late by " + "%lu microseconds\n", + (unsigned long)isc_time_microdiff(&now, &base)); + ++Tx_nfails; + } + Tx_lasttime = now; + } + + if (Tx_eventcnt < 3) { + if (event->ev_type != ISC_TIMEREVENT_TICK) { + t_info("received event type %d, expected type %d\n", + event->ev_type, ISC_TIMEREVENT_IDLE); + ++Tx_nfails; + } + if (Tx_eventcnt == 2) { + isc_interval_set(&interval, T4_SECONDS, + T4_NANOSECONDS); + isc_result = isc_time_nowplusinterval(&expires, + &interval); + if (isc_result == ISC_R_SUCCESS) { + isc_interval_set(&interval, 0, 0); + isc_result = + isc_timer_reset(Tx_timer, + isc_timertype_once, + &expires, &interval, + ISC_FALSE); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_timer_reset failed %s\n", + isc_result_totext(isc_result)); + ++Tx_nfails; + } + } else { + t_info("isc_time_nowplusinterval failed %s\n", + isc_result_totext(isc_result)); + ++Tx_nprobs; + } + } + } else { + if (event->ev_type != ISC_TIMEREVENT_LIFE) { + t_info("received event type %d, expected type %d\n", + event->ev_type, ISC_TIMEREVENT_IDLE); + ++Tx_nfails; + } + + isc_timer_detach(&Tx_timer); + isc_task_shutdown(task); + } + + isc_event_free(&event); +} + +static const char *a4 = + "A call to isc_timer_reset() changes the timer's type, expires and " + "interval values to the given values."; + +static void +t4(void) { + int result; + isc_time_t expires; + isc_interval_t interval; + + t_assert("isc_timer_reset", 4, T_REQUIRED, a4); + + if (threaded) { + Tx_nfails = 0; + Tx_nprobs = 0; + Tx_nevents = 3; + Tx_seconds = T4_SECONDS; + Tx_nanoseconds = T4_NANOSECONDS; + + isc_interval_set(&interval, T4_SECONDS, T4_NANOSECONDS); + isc_time_settoepoch(&expires); + t_timers_x(isc_timertype_ticker, &expires, &interval, t4_te); + + result = T_UNRESOLVED; + + if ((Tx_nfails == 0) && (Tx_nprobs == 0)) + result = T_PASS; + else if (Tx_nfails) + result = T_FAIL; + + t_result(result); + } else + require_threads(); +} + +#define T5_NTICKS 4 +#define T5_SECONDS 3 + +static int T5_startflag; +static int T5_shutdownflag; +static int T5_eventcnt; +static isc_mutex_t T5_mx; +static isc_condition_t T5_cv; +static int T5_nfails; +static int T5_nprobs; +static isc_timer_t *T5_tickertimer; +static isc_timer_t *T5_oncetimer; +static isc_task_t *T5_task1; +static isc_task_t *T5_task2; + +/* + * T5_task1 blocks on T5_mx while events accumulate + * in it's queue, until signaled by T5_task2. + */ + +static void +t5_start_event(isc_task_t *task, isc_event_t *event) { + isc_result_t isc_result; + + UNUSED(task); + + t_info("t5_start_event\n"); + + isc_result = isc_mutex_lock(&T5_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_lock failed %s\n", + isc_result_totext(isc_result)); + ++T5_nprobs; + } + + while (! T5_startflag) { + (void) isc_condition_wait(&T5_cv, &T5_mx); + } + + isc_result = isc_mutex_unlock(&T5_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_unlock failed %s\n", + isc_result_totext(isc_result)); + ++T5_nprobs; + } + isc_event_free(&event); +} + +static void +t5_tick_event(isc_task_t *task, isc_event_t *event) { + isc_result_t isc_result; + isc_time_t expires; + isc_interval_t interval; + + task = task; + + ++T5_eventcnt; + t_info("t5_tick_event %d\n", T5_eventcnt); + + /* + * On the first tick, purge all remaining tick events + * and then shut down the task. + */ + if (T5_eventcnt == 1) { + isc_time_settoepoch(&expires); + isc_interval_set(&interval, T5_SECONDS, 0); + isc_result = isc_timer_reset(T5_tickertimer, + isc_timertype_ticker, &expires, + &interval, ISC_TRUE); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_timer_reset failed %s\n", + isc_result_totext(isc_result)); + ++T5_nfails; + } + isc_task_shutdown(task); + } + isc_event_free(&event); +} + +static void +t5_once_event(isc_task_t *task, isc_event_t *event) { + + isc_result_t isc_result; + + t_info("t5_once_event\n"); + + /* + * Allow task1 to start processing events. + */ + isc_result = isc_mutex_lock(&T5_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_lock failed %s\n", + isc_result_totext(isc_result)); + ++T5_nprobs; + } + + T5_startflag = 1; + + isc_result = isc_condition_broadcast(&T5_cv); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_broadcast failed %s\n", + isc_result_totext(isc_result)); + ++T5_nprobs; + } + + isc_result = isc_mutex_unlock(&T5_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_unlock failed %s\n", + isc_result_totext(isc_result)); + ++T5_nprobs; + } + + isc_event_free(&event); + isc_task_shutdown(task); +} + +static void +t5_shutdown_event(isc_task_t *task, isc_event_t *event) { + + isc_result_t isc_result; + + UNUSED(task); + UNUSED(event); + + t_info("t5_shutdown_event\n"); + + /* + * Signal shutdown processing complete. + */ + isc_result = isc_mutex_lock(&T5_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_lock failed %s\n", + isc_result_totext(isc_result)); + ++T5_nprobs; + } + + T5_shutdownflag = 1; + + isc_result = isc_condition_signal(&T5_cv); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_signal failed %s\n", + isc_result_totext(isc_result)); + ++T5_nprobs; + } + + isc_result = isc_mutex_unlock(&T5_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_unlock failed %s\n", + isc_result_totext(isc_result)); + ++T5_nprobs; + } + isc_event_free(&event); +} + +static int +t_timers5(void) { + char *p; + int result; + isc_mem_t *mctx; + isc_taskmgr_t *tmgr; + unsigned int workers; + isc_result_t isc_result; + isc_timermgr_t *timermgr; + isc_event_t *event; + isc_time_t expires; + isc_interval_t interval; + + T5_startflag = 0; + T5_shutdownflag = 0; + T5_eventcnt = 0; + + workers = 2; + p = t_getenv("ISC_TASK_WORKERS"); + if (p != NULL) + workers = atoi(p); + + mctx = NULL; + isc_result = isc_mem_create(0, 0, &mctx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mem_create failed %s\n", + isc_result_totext(isc_result)); + return(T_UNRESOLVED); + } + + isc_result = isc_mutex_init(&T5_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_init failed %s\n", + isc_result_totext(isc_result)); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_condition_init(&T5_cv); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_init failed %s\n", + isc_result_totext(isc_result)); + DESTROYLOCK(&T5_mx); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + tmgr = NULL; + isc_result = isc_taskmgr_create(mctx, workers, 0, &tmgr); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_taskmgr_create failed %s\n", + isc_result_totext(isc_result)); + DESTROYLOCK(&T5_mx); + isc_condition_destroy(&T5_cv); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + timermgr = NULL; + isc_result = isc_timermgr_create(mctx, &timermgr); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_timermgr_create failed %s\n", + isc_result_totext(isc_result)); + isc_taskmgr_destroy(&tmgr); + DESTROYLOCK(&T5_mx); + isc_condition_destroy(&T5_cv); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + T5_task1 = NULL; + isc_result = isc_task_create(tmgr, 0, &T5_task1); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_create failed %s\n", + isc_result_totext(isc_result)); + isc_timermgr_destroy(&timermgr); + isc_taskmgr_destroy(&tmgr); + DESTROYLOCK(&T5_mx); + isc_condition_destroy(&T5_cv); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_task_onshutdown(T5_task1, t5_shutdown_event, NULL); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_onshutdown failed %s\n", + isc_result_totext(isc_result)); + isc_timermgr_destroy(&timermgr); + isc_task_destroy(&T5_task1); + isc_taskmgr_destroy(&tmgr); + DESTROYLOCK(&T5_mx); + isc_condition_destroy(&T5_cv); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + T5_task2 = NULL; + isc_result = isc_task_create(tmgr, 0, &T5_task2); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_task_create failed %s\n", + isc_result_totext(isc_result)); + isc_timermgr_destroy(&timermgr); + isc_task_destroy(&T5_task1); + isc_taskmgr_destroy(&tmgr); + DESTROYLOCK(&T5_mx); + isc_condition_destroy(&T5_cv); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_result = isc_mutex_lock(&T5_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_lock failed %s\n", + isc_result_totext(isc_result)); + isc_timermgr_destroy(&timermgr); + isc_taskmgr_destroy(&tmgr); + DESTROYLOCK(&T5_mx); + isc_condition_destroy(&T5_cv); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + event = isc_event_allocate(mctx, (void *)1 , (isc_eventtype_t)1, + t5_start_event, NULL, sizeof(*event)); + isc_task_send(T5_task1, &event); + + isc_time_settoepoch(&expires); + isc_interval_set(&interval, T5_SECONDS, 0); + + T5_tickertimer = NULL; + isc_result = isc_timer_create(timermgr, isc_timertype_ticker, + &expires, &interval, T5_task1, + t5_tick_event, NULL, &T5_tickertimer); + + if (isc_result != ISC_R_SUCCESS) { + isc_timermgr_destroy(&timermgr); + (void) isc_condition_signal(&T5_cv); + (void) isc_mutex_unlock(&T5_mx); + isc_task_destroy(&T5_task1); + isc_task_destroy(&T5_task2); + isc_taskmgr_destroy(&tmgr); + DESTROYLOCK(&T5_mx); + isc_condition_destroy(&T5_cv); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + T5_oncetimer = NULL; + isc_interval_set(&interval, (T5_SECONDS * T5_NTICKS) + 2, 0); + isc_result = isc_time_nowplusinterval(&expires, &interval); + if (isc_result != ISC_R_SUCCESS) { + isc_timer_detach(&T5_tickertimer); + isc_timermgr_destroy(&timermgr); + (void)isc_condition_signal(&T5_cv); + (void)isc_mutex_unlock(&T5_mx); + isc_task_destroy(&T5_task1); + isc_task_destroy(&T5_task2); + isc_taskmgr_destroy(&tmgr); + DESTROYLOCK(&T5_mx); + isc_condition_destroy(&T5_cv); + isc_mem_destroy(&mctx); + return(T_UNRESOLVED); + } + + isc_interval_set(&interval, 0, 0); + isc_result = isc_timer_create(timermgr, isc_timertype_once, + &expires, &interval, T5_task2, + t5_once_event, NULL, &T5_oncetimer); + + if (isc_result != ISC_R_SUCCESS) { + isc_timer_detach(&T5_tickertimer); + isc_timermgr_destroy(&timermgr); + (void) isc_condition_signal(&T5_cv); + (void) isc_mutex_unlock(&T5_mx); + isc_task_destroy(&T5_task1); + isc_task_destroy(&T5_task2); + isc_taskmgr_destroy(&tmgr); + DESTROYLOCK(&T5_mx); + isc_condition_destroy(&T5_cv); + isc_mem_destroy(&mctx); + ++T5_nprobs; + return(T_UNRESOLVED); + } + + /* + * Wait for shutdown processing to complete. + */ + while (! T5_shutdownflag) { + isc_result = isc_condition_wait(&T5_cv, &T5_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_condition_waituntil failed %s\n", + isc_result_totext(isc_result)); + ++T5_nprobs; + } + } + + isc_result = isc_mutex_unlock(&T5_mx); + if (isc_result != ISC_R_SUCCESS) { + t_info("isc_mutex_unlock failed %s\n", + isc_result_totext(isc_result)); + ++T5_nprobs; + } + + if (T5_eventcnt != 1) { + t_info("processed %d events\n", T5_eventcnt); + ++T5_nfails; + } + + isc_timer_detach(&T5_tickertimer); + isc_timer_detach(&T5_oncetimer); + isc_timermgr_destroy(&timermgr); + isc_task_destroy(&T5_task1); + isc_task_destroy(&T5_task2); + isc_taskmgr_destroy(&tmgr); + DESTROYLOCK(&T5_mx); + isc_condition_destroy(&T5_cv); + isc_mem_destroy(&mctx); + + result = T_UNRESOLVED; + + if ((T5_nfails == 0) && (T5_nprobs == 0)) + result = T_PASS; + else if (T5_nfails) + result = T_FAIL; + + return (result); +} + +static const char *a5 = + "When 'purge' is TRUE, a call to isc_timer_reset() purges any pending " + "events from 'timer' from the task's event queue."; + +static void +t5(void) { + t_assert("isc_timer_reset", 5, T_REQUIRED, a5); + + if (threaded) + t_result(t_timers5()); + else + require_threads(); +} + +testspec_t T_testlist[] = { + { t1, "timer_create" }, + { t2, "timer_create" }, + { t3, "timer_create" }, + { t4, "timer_reset" }, + { t5, "timer_reset" }, + { NULL, NULL } +}; diff --git a/bin/tests/wire_test.c b/bin/tests/wire_test.c new file mode 100644 index 0000000..ee7de98 --- /dev/null +++ b/bin/tests/wire_test.c @@ -0,0 +1,284 @@ +/* + * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1999-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. + */ + +/* $Id: wire_test.c,v 1.67 2007/06/19 23:46:59 tbox Exp $ */ + +#include <config.h> + +#include <stdlib.h> + +#include <isc/buffer.h> +#include <isc/commandline.h> +#include <isc/mem.h> +#include <isc/string.h> +#include <isc/util.h> + +#include <dns/result.h> + +#include "printmsg.h" + +int parseflags = 0; +isc_mem_t *mctx; +isc_boolean_t printmemstats = ISC_FALSE; +isc_boolean_t dorender = ISC_FALSE; + +static void +process_message(isc_buffer_t *source); + +static inline void +CHECKRESULT(isc_result_t result, const char *msg) { + if (result != ISC_R_SUCCESS) { + printf("%s: %s\n", msg, dns_result_totext(result)); + + exit(1); + } +} + +static int +fromhex(char c) { + if (c >= '0' && c <= '9') + return (c - '0'); + else if (c >= 'a' && c <= 'f') + return (c - 'a' + 10); + else if (c >= 'A' && c <= 'F') + return (c - 'A' + 10); + + printf("bad input format: %02x\n", c); + exit(3); + /* NOTREACHED */ +} + +static void +usage(void) { + fprintf(stderr, "wire_test [-p] [-b] [-s] [-r]\n"); + fprintf(stderr, "\t-p\tPreserve order of the records in messages\n"); + fprintf(stderr, "\t-b\tBest-effort parsing (ignore some errors)\n"); + fprintf(stderr, "\t-s\tPrint memory statistics\n"); + fprintf(stderr, "\t-r\tAfter parsing, re-render the message\n"); + fprintf(stderr, "\t-t\tTCP mode - ignore the first 2 bytes\n"); +} + +int +main(int argc, char *argv[]) { + char *rp, *wp; + unsigned char *bp; + isc_buffer_t source; + size_t len, i; + int n; + FILE *f; + isc_boolean_t need_close = ISC_FALSE; + unsigned char b[64 * 1024]; + char s[4000]; + isc_boolean_t tcp = ISC_FALSE; + int ch; + + mctx = NULL; + RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS); + + while ((ch = isc_commandline_parse(argc, argv, "pbsrt")) != -1) { + switch (ch) { + case 'p': + parseflags |= DNS_MESSAGEPARSE_PRESERVEORDER; + break; + case 'b': + parseflags |= DNS_MESSAGEPARSE_BESTEFFORT; + break; + case 's': + printmemstats = ISC_TRUE; + break; + case 'r': + dorender = ISC_TRUE; + break; + case 't': + tcp = ISC_TRUE; + break; + default: + usage(); + exit(1); + } + } + + argc -= isc_commandline_index; + argv += isc_commandline_index; + + if (argc > 1) { + f = fopen(argv[1], "r"); + if (f == NULL) { + printf("fopen failed\n"); + exit(1); + } + need_close = ISC_TRUE; + } else + f = stdin; + + bp = b; + while (fgets(s, sizeof(s), f) != NULL) { + rp = s; + wp = s; + len = 0; + while (*rp != '\0') { + if (*rp == '#') + break; + if (*rp != ' ' && *rp != '\t' && + *rp != '\r' && *rp != '\n') { + *wp++ = *rp; + len++; + } + rp++; + } + if (len == 0U) + break; + if (len % 2 != 0U) { + printf("bad input format: %lu\n", (unsigned long)len); + exit(1); + } + if (len > sizeof(b) * 2) { + printf("input too long\n"); + exit(2); + } + rp = s; + for (i = 0; i < len; i += 2) { + n = fromhex(*rp++); + n *= 16; + n += fromhex(*rp++); + *bp++ = n; + } + } + + if (need_close) + fclose(f); + + if (tcp) { + unsigned char *p = b; + while (p < bp) { + unsigned int len; + + if (p + 2 > bp) { + printf("premature end of packet\n"); + exit(1); + } + len = p[0] << 8 | p[1]; + + if (p + 2 + len > bp) { + printf("premature end of packet\n"); + exit(1); + } + isc_buffer_init(&source, p + 2, len); + isc_buffer_add(&source, len); + process_message(&source); + p += 2 + len; + } + } else { + isc_buffer_init(&source, b, sizeof(b)); + isc_buffer_add(&source, bp - b); + process_message(&source); + } + + if (printmemstats) + isc_mem_stats(mctx, stdout); + isc_mem_destroy(&mctx); + + return (0); +} + +static void +process_message(isc_buffer_t *source) { + dns_message_t *message; + isc_result_t result; + int i; + + message = NULL; + result = dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &message); + CHECKRESULT(result, "dns_message_create failed"); + + result = dns_message_parse(message, source, parseflags); + if (result == DNS_R_RECOVERABLE) + result = ISC_R_SUCCESS; + CHECKRESULT(result, "dns_message_parse failed"); + + result = printmessage(message); + CHECKRESULT(result, "printmessage() failed"); + + if (printmemstats) + isc_mem_stats(mctx, stdout); + + if (dorender) { + unsigned char b2[64 * 1024]; + isc_buffer_t buffer; + dns_compress_t cctx; + + isc_buffer_init(&buffer, b2, sizeof(b2)); + + /* + * XXXMLG + * Changing this here is a hack, and should not be done in + * reasonable application code, ever. + */ + message->from_to_wire = DNS_MESSAGE_INTENTRENDER; + + for (i = 0; i < DNS_SECTION_MAX; i++) + message->counts[i] = 0; /* Another hack XXX */ + + result = dns_compress_init(&cctx, -1, mctx); + CHECKRESULT(result, "dns_compress_init() failed"); + + result = dns_message_renderbegin(message, &cctx, &buffer); + CHECKRESULT(result, "dns_message_renderbegin() failed"); + + result = dns_message_rendersection(message, + DNS_SECTION_QUESTION, 0); + CHECKRESULT(result, + "dns_message_rendersection(QUESTION) failed"); + + result = dns_message_rendersection(message, + DNS_SECTION_ANSWER, 0); + CHECKRESULT(result, + "dns_message_rendersection(ANSWER) failed"); + + result = dns_message_rendersection(message, + DNS_SECTION_AUTHORITY, 0); + CHECKRESULT(result, + "dns_message_rendersection(AUTHORITY) failed"); + + result = dns_message_rendersection(message, + DNS_SECTION_ADDITIONAL, 0); + CHECKRESULT(result, + "dns_message_rendersection(ADDITIONAL) failed"); + + dns_message_renderend(message); + + dns_compress_invalidate(&cctx); + + message->from_to_wire = DNS_MESSAGE_INTENTPARSE; + dns_message_destroy(&message); + + printf("Message rendered.\n"); + if (printmemstats) + isc_mem_stats(mctx, stdout); + + result = dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, + &message); + CHECKRESULT(result, "dns_message_create failed"); + + result = dns_message_parse(message, &buffer, parseflags); + CHECKRESULT(result, "dns_message_parse failed"); + + result = printmessage(message); + CHECKRESULT(result, "printmessage() failed"); + } + dns_message_destroy(&message); +} diff --git a/bin/tests/wire_test.data b/bin/tests/wire_test.data new file mode 100644 index 0000000..cbda586 --- /dev/null +++ b/bin/tests/wire_test.data @@ -0,0 +1,9 @@ +000a 8580 0001 0003 0000 0003 # message header +0376697803636f6d00 0002 0001 # question section: vix.com IN NS +c00c 0002 0001 00000e10 # vix.com IN NS 3600 +000b 056973727631027061c00c # rdlen=0xb isrv1.pa.vix.com +c00c 0002 0001 00000e10 0009 066e732d657874c00c +c00c 0002 0001 00000e10 000e 036e733104676e616303636f6d00 +c025 0001 0001 00000e10 0004 cc98b886 +c03c 0001 0001 00000e10 0004 cc98b840 +c051 0001 0001 0002a14a 0004 c697f8f6 diff --git a/bin/tests/wire_test.data2 b/bin/tests/wire_test.data2 new file mode 100644 index 0000000..503eac7 --- /dev/null +++ b/bin/tests/wire_test.data2 @@ -0,0 +1,14 @@ +1707 8180 + 0001 0005 0002 0002 027a 6202 6d78 0361 + 6f6c 0363 6f6d 0000 0100 01c0 0c00 0100 + 0100 000b a100 04c6 5110 21c0 0c00 0100 + 0100 000b a100 04c6 5110 22c0 0c00 0100 + 0100 000b a100 04c6 5110 23c0 0c00 0100 + 0100 000b a100 04c6 5110 24c0 0c00 0100 + 0100 000b a100 04c6 5110 2502 6d78 0341 + 4f4c 0363 6f6d 0000 0200 0100 000d 9900 + 0c06 646e 732d 3031 026e 73c0 72c0 6f00 + 0200 0100 000d 9900 0906 646e 732d 3032 + c08c c085 0001 0001 0000 0d99 0004 c651 + 11e8 c09d 0001 0001 0000 0d99 0004 cdbc + 9de8 diff --git a/bin/tests/wire_test.data3 b/bin/tests/wire_test.data3 new file mode 100644 index 0000000..86a80ab --- /dev/null +++ b/bin/tests/wire_test.data3 @@ -0,0 +1,14 @@ +1706 8180 + 0001 0005 0002 0002 027a 6102 6d78 0361 + 6f6c 0363 6f6d 0000 0100 01c0 0c00 0100 + 0100 000b a100 04c6 5110 05c0 0c00 0100 + 0100 000b a100 04c6 5110 01c0 0c00 0100 + 0100 000b a100 04c6 5110 02c0 0c00 0100 + 0100 000b a100 04c6 5110 03c0 0c00 0100 + 0100 000b a100 04c6 5110 0402 6d78 0341 + 4f4c 0363 6f6d 0000 0200 0100 000d 9900 + 0c06 646e 732d 3031 026e 73c0 72c0 6f00 + 0200 0100 000d 9900 0906 646e 732d 3032 + c08c c085 0001 0001 0000 0d99 0004 c651 + 11e8 c09d 0001 0001 0000 0d99 0004 cdbc + 9de8 diff --git a/bin/tests/wire_test.data4 b/bin/tests/wire_test.data4 new file mode 100644 index 0000000..b934a60 --- /dev/null +++ b/bin/tests/wire_test.data4 @@ -0,0 +1,31 @@ +00068180 +000100070002001103616f6c03636f6d +00000f0001c00c000f000100000d1b00 +0a000f027a64026d78c00cc00c000f00 +0100000d1b0007000f027962c02ac00c +000f000100000d1b0007000f027963c0 +2ac00c000f000100000d1b0007000f02 +7964c02ac00c000f000100000d1b0007 +000f027a61c02ac00c000f000100000d +1b0007000f027a62c02ac00c000f0001 +00000d1b0007000f027a63c02ac00c00 +02000100000d1b000c06444e532d3031 +024e53c00cc00c0002000100000d1b00 +0906444e532d3032c0b4c02700010001 +00000d1c0004c6511062c02700010001 +00000d1c0004c6511063c02700010001 +00000d1c0004c6511064c02700010001 +00000d1c0004c6511065c02700010001 +00000d1c0004c6511061c03d00010001 +00000d1c0004cdbc9c63c03d00010001 +00000d1c0004cdbc9c64c03d00010001 +00000d1c0004cdbc9c65c03d00010001 +00000d1c0004cdbc9c61c03d00010001 +00000d1c0004cdbc9c62c05000010001 +00000d1c0004cdbc9c83c05000010001 +00000d1c0004cdbc9c84c05000010001 +00000d1c0004cdbc9c85c05000010001 +00000d1c0004cdbc9c81c05000010001 +00000d1c0004cdbc9c82c0ad00010001 +00000d1c0004c65111e8c0c500010001 +00000d1c0004cdbc9de8 diff --git a/bin/tests/zone_test.c b/bin/tests/zone_test.c new file mode 100644 index 0000000..7983bba --- /dev/null +++ b/bin/tests/zone_test.c @@ -0,0 +1,312 @@ +/* + * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 1999-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. + */ + +/* $Id: zone_test.c,v 1.33 2007/06/19 23:46:59 tbox Exp $ */ + +#include <config.h> + +#include <sys/param.h> +#include <sys/types.h> +#include <sys/time.h> + +#include <unistd.h> +#include <stdlib.h> + +#include <isc/app.h> +#include <isc/commandline.h> +#include <isc/mem.h> +#include <isc/socket.h> +#include <isc/string.h> +#include <isc/task.h> +#include <isc/timer.h> +#include <isc/util.h> + +#include <dns/db.h> +#include <dns/fixedname.h> +#include <dns/rdataclass.h> +#include <dns/rdataset.h> +#include <dns/result.h> +#include <dns/zone.h> + +#ifdef ISC_PLATFORM_NEEDSYSSELECTH +#include <sys/select.h> +#endif + +static int debug = 0; +static int quiet = 0; +static int stats = 0; +static isc_mem_t *mctx = NULL; +dns_zone_t *zone = NULL; +isc_taskmgr_t *taskmgr = NULL; +isc_timermgr_t *timermgr = NULL; +isc_socketmgr_t *socketmgr = NULL; +dns_zonemgr_t *zonemgr = NULL; +dns_zonetype_t zonetype = dns_zone_master; +isc_sockaddr_t addr; + +#define ERRRET(result, function) \ + do { \ + if (result != ISC_R_SUCCESS) { \ + fprintf(stderr, "%s() returned %s\n", \ + function, dns_result_totext(result)); \ + return; \ + } \ + } while (0) + +#define ERRCONT(result, function) \ + if (result != ISC_R_SUCCESS) { \ + fprintf(stderr, "%s() returned %s\n", \ + function, dns_result_totext(result)); \ + continue; \ + } else \ + (void)NULL + +static void +usage() { + fprintf(stderr, + "usage: zone_test [-dqsSM] [-c class] [-f file] zone\n"); + exit(1); +} + +static void +setup(const char *zonename, const char *filename, const char *classname) { + isc_result_t result; + dns_rdataclass_t rdclass; + isc_consttextregion_t region; + isc_buffer_t buffer; + dns_fixedname_t fixorigin; + dns_name_t *origin; + const char *rbt = "rbt"; + + if (debug) + fprintf(stderr, "loading \"%s\" from \"%s\" class \"%s\"\n", + zonename, filename, classname); + result = dns_zone_create(&zone, mctx); + ERRRET(result, "dns_zone_new"); + + dns_zone_settype(zone, zonetype); + + isc_buffer_init(&buffer, zonename, strlen(zonename)); + isc_buffer_add(&buffer, strlen(zonename)); + dns_fixedname_init(&fixorigin); + result = dns_name_fromtext(dns_fixedname_name(&fixorigin), + &buffer, dns_rootname, ISC_FALSE, NULL); + ERRRET(result, "dns_name_fromtext"); + origin = dns_fixedname_name(&fixorigin); + + result = dns_zone_setorigin(zone, origin); + ERRRET(result, "dns_zone_setorigin"); + + result = dns_zone_setdbtype(zone, 1, &rbt); + ERRRET(result, "dns_zone_setdatabase"); + + result = dns_zone_setfile(zone, filename); + ERRRET(result, "dns_zone_setfile"); + + region.base = classname; + region.length = strlen(classname); + result = dns_rdataclass_fromtext(&rdclass, + (isc_textregion_t *)(void*)®ion); + ERRRET(result, "dns_rdataclass_fromtext"); + + dns_zone_setclass(zone, rdclass); + + if (zonetype == dns_zone_slave) + dns_zone_setmasters(zone, &addr, 1); + + result = dns_zone_load(zone); + ERRRET(result, "dns_zone_load"); + + result = dns_zonemgr_managezone(zonemgr, zone); + ERRRET(result, "dns_zonemgr_managezone"); +} + +static void +print_rdataset(dns_name_t *name, dns_rdataset_t *rdataset) { + isc_buffer_t text; + char t[1000]; + isc_result_t result; + isc_region_t r; + + isc_buffer_init(&text, t, sizeof(t)); + result = dns_rdataset_totext(rdataset, name, ISC_FALSE, ISC_FALSE, + &text); + isc_buffer_usedregion(&text, &r); + if (result == ISC_R_SUCCESS) + printf("%.*s", (int)r.length, (char *)r.base); + else + printf("%s\n", dns_result_totext(result)); +} + +static void +query(void) { + char buf[1024]; + dns_fixedname_t name; + dns_fixedname_t found; + dns_db_t *db; + char *s; + isc_buffer_t buffer; + isc_result_t result; + dns_rdataset_t rdataset; + dns_rdataset_t sigset; + fd_set rfdset; + + db = NULL; + result = dns_zone_getdb(zone, &db); + if (result != ISC_R_SUCCESS) { + fprintf(stderr, "%s() returned %s\n", "dns_zone_getdb", + dns_result_totext(result)); + return; + } + + dns_fixedname_init(&found); + dns_rdataset_init(&rdataset); + dns_rdataset_init(&sigset); + + do { + + fprintf(stdout, "zone_test "); + fflush(stdout); + FD_ZERO(&rfdset); + FD_SET(0, &rfdset); + select(1, &rfdset, NULL, NULL, NULL); + if (fgets(buf, sizeof(buf), stdin) == NULL) { + fprintf(stdout, "\n"); + break; + } + buf[sizeof(buf) - 1] = '\0'; + + s = strchr(buf, '\n'); + if (s != NULL) + *s = '\0'; + s = strchr(buf, '\r'); + if (s != NULL) + *s = '\0'; + if (strcmp(buf, "dump") == 0) { + dns_zone_dumptostream(zone, stdout); + continue; + } + if (strlen(buf) == 0U) + continue; + dns_fixedname_init(&name); + isc_buffer_init(&buffer, buf, strlen(buf)); + isc_buffer_add(&buffer, strlen(buf)); + result = dns_name_fromtext(dns_fixedname_name(&name), + &buffer, dns_rootname, ISC_FALSE, NULL); + ERRCONT(result, "dns_name_fromtext"); + + result = dns_db_find(db, dns_fixedname_name(&name), + NULL /*vesion*/, + dns_rdatatype_a, + 0 /*options*/, + 0 /*time*/, + NULL /*nodep*/, + dns_fixedname_name(&found), + &rdataset, &sigset); + fprintf(stderr, "%s() returned %s\n", "dns_db_find", + dns_result_totext(result)); + switch (result) { + case DNS_R_DELEGATION: + print_rdataset(dns_fixedname_name(&found), &rdataset); + break; + case ISC_R_SUCCESS: + print_rdataset(dns_fixedname_name(&name), &rdataset); + break; + default: + break; + } + + if (dns_rdataset_isassociated(&rdataset)) + dns_rdataset_disassociate(&rdataset); + if (dns_rdataset_isassociated(&sigset)) + dns_rdataset_disassociate(&sigset); + } while (1); + dns_rdataset_invalidate(&rdataset); + dns_db_detach(&db); +} + +int +main(int argc, char **argv) { + int c; + char *filename = NULL; + const char *classname = "IN"; + + while ((c = isc_commandline_parse(argc, argv, "cdf:m:qsMS")) != EOF) { + switch (c) { + case 'c': + classname = isc_commandline_argument; + break; + case 'd': + debug++; + break; + case 'f': + if (filename != NULL) + usage(); + filename = isc_commandline_argument; + break; + case 'm': + memset(&addr, 0, sizeof(addr)); + addr.type.sin.sin_family = AF_INET; + inet_pton(AF_INET, isc_commandline_argument, + &addr.type.sin.sin_addr); + addr.type.sin.sin_port = htons(53); + break; + case 'q': + quiet++; + break; + case 's': + stats++; + break; + case 'S': + zonetype = dns_zone_slave; + break; + case 'M': + zonetype = dns_zone_master; + break; + default: + usage(); + } + } + + if (argv[isc_commandline_index] == NULL) + usage(); + + RUNTIME_CHECK(isc_app_start() == ISC_R_SUCCESS); + RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS); + RUNTIME_CHECK(isc_taskmgr_create(mctx, 2, 0, &taskmgr) == + ISC_R_SUCCESS); + RUNTIME_CHECK(isc_timermgr_create(mctx, &timermgr) == ISC_R_SUCCESS); + RUNTIME_CHECK(isc_socketmgr_create(mctx, &socketmgr) == ISC_R_SUCCESS); + RUNTIME_CHECK(dns_zonemgr_create(mctx, taskmgr, timermgr, socketmgr, + &zonemgr) == ISC_R_SUCCESS); + if (filename == NULL) + filename = argv[isc_commandline_index]; + setup(argv[isc_commandline_index], filename, classname); + query(); + if (zone != NULL) + dns_zone_detach(&zone); + dns_zonemgr_shutdown(zonemgr); + dns_zonemgr_detach(&zonemgr); + isc_socketmgr_destroy(&socketmgr); + isc_taskmgr_destroy(&taskmgr); + isc_timermgr_destroy(&timermgr); + if (!quiet && stats) + isc_mem_stats(mctx, stdout); + isc_mem_destroy(&mctx); + + return (0); +} |