summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorInternet Software Consortium, Inc <@isc.org>2007-09-07 14:08:49 -0600
committerLaMont Jones <lamont@debian.org>2007-09-07 14:08:49 -0600
commita80776499e31c00d0c3afdfb4f27504ef56db751 (patch)
tree7e5c87c8d9e8434b27b662db6b3b13746b12d55a /bin
parentd366f01c173d7934ac2d28ca66baff57a6baad7e (diff)
downloadbind9-a80776499e31c00d0c3afdfb4f27504ef56db751.tar.gz
9.1.1rc1
Diffstat (limited to 'bin')
-rw-r--r--bin/dig/dighost.c21
-rw-r--r--bin/named/lwdgrbn.c4
-rw-r--r--bin/named/lwresd.c154
-rw-r--r--bin/nsupdate/nsupdate.c139
-rw-r--r--bin/tests/Makefile.in7
-rw-r--r--bin/tests/zone_test.c36
6 files changed, 208 insertions, 153 deletions
diff --git a/bin/dig/dighost.c b/bin/dig/dighost.c
index 6f313868..1c775964 100644
--- a/bin/dig/dighost.c
+++ b/bin/dig/dighost.c
@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dighost.c,v 1.174.2.4 2001/01/12 20:39:06 bwelling Exp $ */
+/* $Id: dighost.c,v 1.174.2.5 2001/02/07 19:26:20 gson Exp $ */
/*
* Notice to programmers: Do not use this code as an example of how to
@@ -32,9 +32,6 @@
#include <netdb.h>
#include <string.h>
#include <limits.h>
-#if (!(defined(HAVE_ADDRINFO) && defined(HAVE_GETADDRINFO)))
-extern int h_errno;
-#endif
#include <dns/byaddr.h>
#include <dns/fixedname.h>
@@ -67,6 +64,18 @@ extern int h_errno;
#include <dig/dig.h>
+#ifdef HAVE_ADDRINFO
+#ifdef HAVE_GETADDRINFO
+#ifdef HAVE_GAISTRERROR
+#define USE_GETADDRINFO
+#endif
+#endif
+#endif
+
+#ifndef USE_GETADDRINFO
+extern int h_errno;
+#endif
+
ISC_LIST(dig_lookup_t) lookup_list;
dig_serverlist_t server_list;
ISC_LIST(dig_searchlist_t) search_list;
@@ -2530,7 +2539,7 @@ void
get_address(char *host, in_port_t port, isc_sockaddr_t *sockaddr) {
struct in_addr in4;
struct in6_addr in6;
-#if defined(HAVE_ADDRINFO) && defined(HAVE_GETADDRINFO)
+#ifdef USE_GETADDRINFO
struct addrinfo *res = NULL;
int result;
#else
@@ -2548,7 +2557,7 @@ get_address(char *host, in_port_t port, isc_sockaddr_t *sockaddr) {
else if (inet_pton(AF_INET, host, &in4) == 1)
isc_sockaddr_fromin(sockaddr, &in4, port);
else {
-#if defined(HAVE_ADDRINFO) && defined(HAVE_GETADDRINFO)
+#ifdef USE_GETADDRINFO
debug ("before getaddrinfo()");
is_blocking = ISC_TRUE;
result = getaddrinfo(host, NULL, NULL, &res);
diff --git a/bin/named/lwdgrbn.c b/bin/named/lwdgrbn.c
index 9271d633..e96b456a 100644
--- a/bin/named/lwdgrbn.c
+++ b/bin/named/lwdgrbn.c
@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: lwdgrbn.c,v 1.6.2.1 2001/01/09 22:32:02 bwelling Exp $ */
+/* $Id: lwdgrbn.c,v 1.6.2.2 2001/01/23 02:05:11 gson Exp $ */
#include <config.h>
@@ -265,7 +265,7 @@ lookup_done(isc_task_t *task, isc_event_t *event) {
if (sigrdataset != NULL) {
i = 0;
- result = fill_array(&i, rdataset, grbn->nsigs, grbn->sigs,
+ result = fill_array(&i, sigrdataset, grbn->nsigs, grbn->sigs,
grbn->siglen);
if (result != ISC_R_SUCCESS || i != grbn->nsigs)
goto out;
diff --git a/bin/named/lwresd.c b/bin/named/lwresd.c
index 994c03af..defa0b54 100644
--- a/bin/named/lwresd.c
+++ b/bin/named/lwresd.c
@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: lwresd.c,v 1.27.2.1 2001/01/09 22:32:05 bwelling Exp $ */
+/* $Id: lwresd.c,v 1.27.2.2 2001/01/19 02:37:51 gson Exp $ */
/*
* Main program for the Lightweight Resolver Daemon.
@@ -672,13 +672,70 @@ ns_lwreslistener_linkcm(ns_lwreslistener_t *listener, ns_lwdclientmgr_t *cm) {
ISC_LIST_APPEND(listener->cmgrs, cm, link);
}
+static isc_result_t
+configure_listener(isc_sockaddr_t *address, ns_lwresd_t *lwresd,
+ isc_mem_t *mctx, ns_lwreslistenerlist_t *newlisteners)
+{
+ ns_lwreslistener_t *listener, *oldlistener = NULL;
+ char socktext[ISC_SOCKADDR_FORMATSIZE];
+ isc_result_t result;
+
+ (void)find_listener(address, &oldlistener);
+ listener = NULL;
+ result = listener_create(mctx, lwresd, &listener);
+ if (result != ISC_R_SUCCESS) {
+ isc_sockaddr_format(address, socktext, sizeof(socktext));
+ isc_log_write(ns_g_lctx, ISC_LOGCATEGORY_GENERAL,
+ NS_LOGMODULE_LWRESD, ISC_LOG_WARNING,
+ "lwres failed to configure %s: %s",
+ socktext, isc_result_totext(result));
+ return (result);
+ }
+
+ /*
+ * If there's already a listener, don't rebind the socket.
+ */
+ if (oldlistener == NULL) {
+ result = listener_bind(listener, address);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ } else
+ listener_copysock(oldlistener, listener);
+
+ result = listener_startclients(listener);
+ if (result != ISC_R_SUCCESS) {
+ isc_sockaddr_format(address, socktext, sizeof(socktext));
+ isc_log_write(ns_g_lctx, ISC_LOGCATEGORY_GENERAL,
+ NS_LOGMODULE_LWRESD, ISC_LOG_WARNING,
+ "lwres: failed to start %s: %s", socktext,
+ isc_result_totext(result));
+ ns_lwreslistener_detach(&listener);
+ return (result);
+ }
+
+ if (oldlistener != NULL) {
+ /*
+ * Remove the old listener from the old list and shut it down.
+ */
+ ISC_LIST_UNLINK(listeners, oldlistener, link);
+ listener_shutdown(oldlistener);
+ ns_lwreslistener_detach(&oldlistener);
+ } else {
+ isc_sockaddr_format(address, socktext, sizeof(socktext));
+ isc_log_write(ns_g_lctx, ISC_LOGCATEGORY_GENERAL,
+ NS_LOGMODULE_LWRESD, ISC_LOG_NOTICE,
+ "lwres listening on %s", socktext);
+ }
+
+ ISC_LIST_APPEND(*newlisteners, listener, link);
+ return (result);
+}
isc_result_t
ns_lwresd_configure(isc_mem_t *mctx, dns_c_ctx_t *cctx) {
dns_c_lwres_t *lwres = NULL;
dns_c_lwreslist_t *list = NULL;
ns_lwreslistener_t *listener;
- ns_lwreslistener_t *oldlistener;
ns_lwreslistenerlist_t newlisteners;
isc_result_t result;
char socktext[ISC_SOCKADDR_FORMATSIZE];
@@ -708,7 +765,6 @@ ns_lwresd_configure(isc_mem_t *mctx, dns_c_ctx_t *cctx) {
lwres = dns_c_lwreslist_next(lwres))
{
unsigned int i;
- isc_sockaddr_t *address;
ns_lwresd_t *lwresd;
lwresd = NULL;
@@ -716,79 +772,33 @@ ns_lwresd_configure(isc_mem_t *mctx, dns_c_ctx_t *cctx) {
if (result != ISC_R_SUCCESS)
return (result);
- for (i = 0; i < lwres->listeners->nextidx; i++) {
- address = &lwres->listeners->ips[i];
- oldlistener = NULL;
- (void)find_listener(address, &oldlistener);
- listener = NULL;
- result = listener_create(mctx, lwresd, &listener);
- if (result != ISC_R_SUCCESS) {
- isc_sockaddr_format(address, socktext,
- sizeof(socktext));
- isc_log_write(ns_g_lctx,
- ISC_LOGCATEGORY_GENERAL,
- NS_LOGMODULE_LWRESD,
- ISC_LOG_WARNING,
- "lwres failed to configure "
- "%s: %s",
- socktext,
- isc_result_totext(result));
- ns_lwdmanager_detach(&lwresd);
- return (result);
- }
-
- /*
- * If there's already a listener, don't rebind the
- * socket.
- */
- if (oldlistener == NULL) {
- result = listener_bind(listener, address);
- if (result != ISC_R_SUCCESS) {
- ns_lwdmanager_detach(&lwresd);
- return (result);
- }
- } else
- listener_copysock(oldlistener, listener);
-
- result = listener_startclients(listener);
- if (result != ISC_R_SUCCESS) {
- isc_sockaddr_format(address, socktext,
- sizeof(socktext));
- isc_log_write(ns_g_lctx,
- ISC_LOGCATEGORY_GENERAL,
- NS_LOGMODULE_LWRESD,
- ISC_LOG_WARNING,
- "lwres: failed to start %s: %s",
- socktext,
- isc_result_totext(result));
- ns_lwreslistener_detach(&listener);
- ns_lwdmanager_detach(&lwresd);
- return (result);
- }
-
- if (oldlistener != NULL) {
- /*
- * Remove the old listener from the old
- * list and shut it down.
- */
- ISC_LIST_UNLINK(listeners, oldlistener, link);
- listener_shutdown(oldlistener);
- ns_lwreslistener_detach(&oldlistener);
- } else {
- isc_sockaddr_format(address, socktext,
- sizeof(socktext));
- isc_log_write(ns_g_lctx,
- ISC_LOGCATEGORY_GENERAL,
- NS_LOGMODULE_LWRESD,
- ISC_LOG_NOTICE,
- "lwres listening on %s",
- socktext);
+ if (lwres->listeners == NULL) {
+ struct in_addr localhost;
+ in_port_t port;
+ isc_sockaddr_t address;
+
+ port = lwresd_g_listenport;
+ if (port == 0)
+ port = LWRES_UDP_PORT;
+ localhost.s_addr = htonl(INADDR_LOOPBACK);
+ isc_sockaddr_fromin(&address, &localhost, port);
+ result = configure_listener(&address, lwresd,
+ mctx, &newlisteners);
+ } else {
+ isc_sockaddr_t *address;
+ for (i = 0; i < lwres->listeners->nextidx; i++) {
+ address = &lwres->listeners->ips[i];
+ result = configure_listener(address, lwresd,
+ mctx,
+ &newlisteners);
+ if (result != ISC_R_SUCCESS)
+ break;
}
-
- ISC_LIST_APPEND(newlisteners, listener, link);
}
ns_lwdmanager_detach(&lwresd);
+ if (result != ISC_R_SUCCESS)
+ return (result);
}
/*
diff --git a/bin/nsupdate/nsupdate.c b/bin/nsupdate/nsupdate.c
index 77f9ed19..58a7293f 100644
--- a/bin/nsupdate/nsupdate.c
+++ b/bin/nsupdate/nsupdate.c
@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: nsupdate.c,v 1.75.2.1 2001/01/09 22:32:54 bwelling Exp $ */
+/* $Id: nsupdate.c,v 1.75.2.3 2001/02/07 19:26:22 gson Exp $ */
#include <config.h>
@@ -26,10 +26,6 @@
#include <stdlib.h>
#include <unistd.h>
-#if (!(defined(HAVE_ADDRINFO) && defined(HAVE_GETADDRINFO)))
-extern int h_errno;
-#endif
-
#include <isc/app.h>
#include <isc/base64.h>
#include <isc/buffer.h>
@@ -69,6 +65,18 @@ extern int h_errno;
#include <lwres/lwres.h>
#include <lwres/net.h>
+#ifdef HAVE_ADDRINFO
+#ifdef HAVE_GETADDRINFO
+#ifdef HAVE_GAISTRERROR
+#define USE_GETADDRINFO
+#endif
+#endif
+#endif
+
+#ifndef USE_GETADDRINFO
+extern int h_errno;
+#endif
+
#define MAXCMD (4 * 1024)
#define INITDATA (32 * 1024)
#define MAXDATA (64 * 1024)
@@ -355,6 +363,50 @@ shutdown_program(isc_task_t *task, isc_event_t *event) {
isc_event_free(&event);
isc_task_detach(&global_task);
shuttingdown = ISC_TRUE;
+
+ if (userserver != NULL)
+ isc_mem_put(mctx, userserver, sizeof(isc_sockaddr_t));
+
+ if (localaddr != NULL)
+ isc_mem_put(mctx, localaddr, sizeof(isc_sockaddr_t));
+
+ if (key != NULL) {
+ debug("Freeing key");
+ dns_tsigkey_detach(&key);
+ }
+
+ if (updatemsg != NULL)
+ dns_message_destroy(&updatemsg);
+
+ if (is_dst_up) {
+ debug("Destroy DST lib");
+ dst_lib_destroy();
+ is_dst_up = ISC_FALSE;
+ }
+
+ if (entp != NULL) {
+ debug("Detach from entropy");
+ isc_entropy_detach(&entp);
+ }
+
+ lwres_conf_clear(lwctx);
+ lwres_context_destroy(&lwctx);
+
+ isc_mem_put(mctx, servers, ns_total * sizeof(isc_sockaddr_t));
+
+ ddebug("Shutting down request manager");
+ dns_requestmgr_shutdown(requestmgr);
+ dns_requestmgr_detach(&requestmgr);
+
+ ddebug("Freeing the dispatchers");
+ if (have_ipv4)
+ dns_dispatch_detach(&dispatchv4);
+ if (have_ipv6)
+ dns_dispatch_detach(&dispatchv6);
+
+ ddebug("Shutting down dispatch manager");
+ dns_dispatchmgr_destroy(&dispatchmgr);
+
}
static void
@@ -493,7 +545,7 @@ static void
get_address(char *host, in_port_t port, isc_sockaddr_t *sockaddr) {
struct in_addr in4;
struct in6_addr in6;
-#if defined(HAVE_ADDRINFO) && defined(HAVE_GETADDRINFO)
+#ifdef USE_GETADDRINFO
struct addrinfo *res = NULL;
int result;
#else
@@ -506,7 +558,7 @@ get_address(char *host, in_port_t port, isc_sockaddr_t *sockaddr) {
else if (inet_pton(AF_INET, host, &in4) == 1)
isc_sockaddr_fromin(sockaddr, &in4, port);
else {
-#if defined(HAVE_ADDRINFO) && defined(HAVE_GETADDRINFO)
+#ifdef USE_GETADDRINFO
result = getaddrinfo(host, NULL, NULL, &res);
if (result != 0) {
fatal("Couldn't find server '%s': %s",
@@ -1185,12 +1237,22 @@ update_completed(isc_task_t *task, isc_event_t *event) {
dns_requestevent_t *reqev = NULL;
isc_result_t result;
dns_message_t *rcvmsg = NULL;
+ dns_request_t *request;
UNUSED(task);
ddebug("update_completed()");
+
REQUIRE(event->ev_type == DNS_EVENT_REQUESTDONE);
reqev = (dns_requestevent_t *)event;
+ request = reqev->request;
+
+ if (shuttingdown) {
+ dns_request_destroy(&request);
+ isc_event_free(&event);
+ return;
+ }
+
if (reqev->result != ISC_R_SUCCESS) {
fprintf(stderr, "; Communication with server failed: %s\n",
isc_result_totext(reqev->result));
@@ -1200,7 +1262,7 @@ update_completed(isc_task_t *task, isc_event_t *event) {
result = dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &rcvmsg);
check_result(result, "dns_message_create");
- result = dns_request_getresponse(reqev->request, rcvmsg,
+ result = dns_request_getresponse(request, rcvmsg,
DNS_MESSAGEPARSE_PRESERVEORDER);
check_result(result, "dns_request_getresponse");
if (rcvmsg->rcode != dns_rcode_noerror)
@@ -1231,7 +1293,7 @@ update_completed(isc_task_t *task, isc_event_t *event) {
}
dns_message_destroy(&rcvmsg);
done:
- dns_request_destroy(&reqev->request);
+ dns_request_destroy(&request);
isc_event_free(&event);
done_update();
}
@@ -1300,8 +1362,13 @@ recvsoa(isc_task_t *task, isc_event_t *event) {
soaquery = reqinfo->msg;
addr = reqinfo->addr;
- isc_event_free(&event);
- reqev = NULL;
+ if (shuttingdown) {
+ dns_request_destroy(&request);
+ dns_message_destroy(&soaquery);
+ isc_mem_put(mctx, reqinfo, sizeof(nsu_requestinfo_t));
+ isc_event_free(&event);
+ return;
+ }
if (eresult != ISC_R_SUCCESS) {
char addrbuf[ISC_SOCKADDR_FORMATSIZE];
@@ -1318,10 +1385,14 @@ recvsoa(isc_task_t *task, isc_event_t *event) {
dns_message_renderreset(soaquery);
sendrequest(localaddr, &servers[ns_inuse], soaquery, &request);
isc_mem_put(mctx, reqinfo, sizeof(nsu_requestinfo_t));
+ isc_event_free(&event);
return;
}
isc_mem_put(mctx, reqinfo, sizeof(nsu_requestinfo_t));
+ isc_event_free(&event);
+ reqev = NULL;
+
ddebug("About to create rcvmsg");
result = dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &rcvmsg);
check_result(result, "dns_message_create");
@@ -1553,49 +1624,6 @@ static void
cleanup(void) {
ddebug("cleanup()");
- if (userserver != NULL)
- isc_mem_put(mctx, userserver, sizeof(isc_sockaddr_t));
-
- if (localaddr != NULL)
- isc_mem_put(mctx, localaddr, sizeof(isc_sockaddr_t));
-
- if (key != NULL) {
- debug("Freeing key");
- dns_tsigkey_detach(&key);
- }
-
- if (updatemsg != NULL)
- dns_message_destroy(&updatemsg);
-
- if (is_dst_up) {
- debug("Destroy DST lib");
- dst_lib_destroy();
- is_dst_up = ISC_FALSE;
- }
-
- if (entp != NULL) {
- debug("Detach from entropy");
- isc_entropy_detach(&entp);
- }
-
- lwres_conf_clear(lwctx);
- lwres_context_destroy(&lwctx);
-
- isc_mem_put(mctx, servers, ns_total * sizeof(isc_sockaddr_t));
-
- ddebug("Shutting down request manager");
- dns_requestmgr_shutdown(requestmgr);
- dns_requestmgr_detach(&requestmgr);
-
- ddebug("Freeing the dispatchers");
- if (have_ipv4)
- dns_dispatch_detach(&dispatchv4);
- if (have_ipv6)
- dns_dispatch_detach(&dispatchv6);
-
- ddebug("Shutting down dispatch manager");
- dns_dispatchmgr_destroy(&dispatchmgr);
-
ddebug("Shutting down task manager");
isc_taskmgr_destroy(&taskmgr);
@@ -1620,6 +1648,9 @@ getinput(isc_task_t *task, isc_event_t *event) {
UNUSED(task);
+ if (shuttingdown)
+ return;
+
if (global_event == NULL)
global_event = event;
diff --git a/bin/tests/Makefile.in b/bin/tests/Makefile.in
index e1b2ebaf..51576b00 100644
--- a/bin/tests/Makefile.in
+++ b/bin/tests/Makefile.in
@@ -13,7 +13,7 @@
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-# $Id: Makefile.in,v 1.103.4.1 2001/01/09 22:32:59 bwelling Exp $
+# $Id: Makefile.in,v 1.103.4.2 2001/01/24 00:05:24 gson Exp $
srcdir = @srcdir@
VPATH = @srcdir@
@@ -84,7 +84,8 @@ XTARGETS = adb_test \
task_test \
timer_test \
tkey_test \
- wire_test
+ wire_test \
+ zone_test
# Alphabetically
SRCS = adb_test.c \
@@ -298,7 +299,7 @@ gxba_test: gxba_test.@O@ ${LWRESDEPLIBS}
${LIBTOOL} ${CC} ${CFLAGS} -o $@ gxba_test.@O@ \
${LWRESLIBS} ${ISCLIBS} ${LIBS}
-sig0_test: sig0_test.@O@ ${DNSDEPLIBS}
+sig0_test: sig0_test.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS}
${LIBTOOL} ${CC} ${CFLAGS} -o $@ sig0_test.@O@ \
${DNSLIBS} ${ISCLIBS} ${LIBS}
diff --git a/bin/tests/zone_test.c b/bin/tests/zone_test.c
index 2d8b234f..540a67af 100644
--- a/bin/tests/zone_test.c
+++ b/bin/tests/zone_test.c
@@ -15,10 +15,14 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: zone_test.c,v 1.22.4.1 2001/01/09 22:34:04 bwelling Exp $ */
+/* $Id: zone_test.c,v 1.22.4.2 2001/01/24 00:05:23 gson Exp $ */
#include <config.h>
+#include <sys/types.h>
+#include <sys/time.h>
+
+#include <unistd.h>
#include <stdlib.h>
#include <isc/app.h>
@@ -74,13 +78,14 @@ usage() {
}
static void
-setup(char *zonename, char *filename, char *classname) {
+setup(const char *zonename, const char *filename, const char *classname) {
isc_result_t result;
dns_rdataclass_t rdclass;
- isc_textregion_t region;
+ 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",
@@ -101,15 +106,16 @@ setup(char *zonename, char *filename, char *classname) {
result = dns_zone_setorigin(zone, origin);
ERRRET(result, "dns_zone_setorigin");
- result = dns_zone_setdbtype(zone, "rbt");
+ result = dns_zone_setdbtype(zone, 1, &rbt);
ERRRET(result, "dns_zone_setdatabase");
- result = dns_zone_setdatabase(zone, filename);
- 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, &region);
+ result = dns_rdataclass_fromtext(&rdclass,
+ (isc_textregion_t *)&region);
ERRRET(result, "dns_rdataclass_fromtext");
dns_zone_setclass(zone, rdclass);
@@ -228,18 +234,11 @@ query(void) {
dns_db_detach(&db);
}
-static void
-destroy(void) {
- if (zone == NULL)
- return;
- dns_zone_detach(&zone);
-}
-
int
main(int argc, char **argv) {
int c;
char *filename = NULL;
- char *classname = "IN";
+ const char *classname = "IN";
while ((c = isc_commandline_parse(argc, argv, "cdf:m:qsMS")) != EOF) {
switch (c) {
@@ -293,8 +292,13 @@ main(int argc, char **argv) {
filename = argv[isc_commandline_index];
setup(argv[isc_commandline_index], filename, classname);
query();
- destroy();
+ 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);