diff --git a/bin/named/server.c b/bin/named/server.c index 9a05e4c8ff..6df21523fb 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -922,16 +922,21 @@ configure_zone(dns_c_ctx_t *cctx, dns_c_zone_t *czone, dns_c_view_t *cview, dns_zone_detach(&zone); } - /* - * If we cannot reuse an existing zone, we will have to - * create a new one. - */ - if (zone == NULL) { + if (zone != NULL) { + /* + * We found a reusable zone. Make it use the + * new view. + */ + dns_zone_setview(zone, view); + } else { + /* + * We cannot reuse an existing zone, we have + * to create a new one. + */ CHECK(dns_zone_create(&zone, lctx->mctx)); CHECK(dns_zone_setorigin(zone, origin)); dns_zone_setview(zone, view); - CHECK(dns_zonemgr_managezone(ns_g_server->zonemgr, - zone)); + CHECK(dns_zonemgr_managezone(ns_g_server->zonemgr, zone)); } /* diff --git a/lib/dns/zone.c b/lib/dns/zone.c index ac230027a3..7cd47345b5 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -15,7 +15,7 @@ * SOFTWARE. */ -/* $Id: zone.c,v 1.122 2000/05/22 17:23:11 gson Exp $ */ +/* $Id: zone.c,v 1.123 2000/05/23 04:38:22 gson Exp $ */ #include @@ -487,6 +487,8 @@ dns_zone_setdbtype(dns_zone_t *zone, char *db_type) { void dns_zone_setview(dns_zone_t *zone, dns_view_t *view) { + if (zone->view != NULL) + dns_view_weakdetach(&zone->view); dns_view_weakattach(view, &zone->view); }