]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
3010. [bug] Fixed a bug where "rndc reconfig" stopped the timer
authorEvan Hunt <each@isc.org>
Thu, 3 Feb 2011 00:28:08 +0000 (00:28 +0000)
committerEvan Hunt <each@isc.org>
Thu, 3 Feb 2011 00:28:08 +0000 (00:28 +0000)
for refreshing managed-keys. [RT #22296]

CHANGES
bin/named/server.c
lib/dns/zone.c

diff --git a/CHANGES b/CHANGES
index e406215ee651837956eefc68ab119832d5ba02f2..39f793a9bc4d2b898b5c46dd0a0888e787765ad6 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+3010.  [bug]           Fixed a bug where "rndc reconfig" stopped the timer
+                       for refreshing managed-keys. [RT #22296]
+
        --- 9.7.3 released ---
 
 3009.  [bug]           clients-per-query code didn't work as expected with
index c47bd092862c1e01af2f878c0cb47a6be9575e0e..0f922d7782fb60b9af94266cab12dda62f25d65f 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: server.c,v 1.556.8.34 2011/01/07 23:46:36 tbox Exp $ */
+/* $Id: server.c,v 1.556.8.35 2011/02/03 00:28:08 each Exp $ */
 
 /*! \file */
 
@@ -3044,6 +3044,7 @@ configure_zone(const cfg_obj_t *config, const cfg_obj_t *zconfig,
 static isc_result_t
 add_keydata_zone(dns_view_t *view, const char *directory, isc_mem_t *mctx) {
        isc_result_t result;
+       dns_view_t *pview = NULL;
        dns_zone_t *zone = NULL;
        dns_acl_t *none = NULL;
        char filename[PATH_MAX];
@@ -3052,8 +3053,22 @@ add_keydata_zone(dns_view_t *view, const char *directory, isc_mem_t *mctx) {
 
        REQUIRE(view != NULL);
 
-       CHECK(dns_zone_create(&zone, mctx));
+       /* See if we can re-use an existing keydata zone. */
+       result = dns_viewlist_find(&ns_g_server->viewlist,
+                                  view->name, view->rdclass,
+                                  &pview);
+       if (result != ISC_R_NOTFOUND &&
+           result != ISC_R_SUCCESS)
+               return (result);
+
+       if (pview != NULL && pview->managed_keys != NULL) {
+               dns_zone_attach(pview->managed_keys, &view->managed_keys);
+               dns_view_detach(&pview);
+               return (ISC_R_SUCCESS);
+       }
 
+       /* No existing keydata zone was found; create one */
+       CHECK(dns_zone_create(&zone, mctx));
        CHECK(dns_zone_setorigin(zone, dns_rootname));
 
        isc_sha256_data((void *)view->name, strlen(view->name), buffer);
@@ -4617,11 +4632,14 @@ load_new_zones(ns_server_t *server, isc_boolean_t stop) {
             view = ISC_LIST_NEXT(view, link))
        {
                CHECK(dns_view_loadnew(view, stop));
+
+               /* Load managed-keys data */
+               if (view->managed_keys != NULL)
+                       CHECK(dns_zone_loadnew(view->managed_keys));
        }
+
        /*
-        * Force zone maintenance.  Do this after loading
-        * so that we know when we need to force AXFR of
-        * slave zones whose master files are missing.
+        * Resume zone XFRs.
         */
        dns_zonemgr_resumexfrs(server->zonemgr);
  cleanup:
index 900bdb8dfa37d9a11c8247bdfa20f9ead517acda..ef89d0682caf213e9df4a09ecbf90ae78e28d4d1 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: zone.c,v 1.540.2.34 2010/12/14 00:46:40 marka Exp $ */
+/* $Id: zone.c,v 1.540.2.35 2011/02/03 00:28:08 each Exp $ */
 
 /*! \file */
 
@@ -2673,6 +2673,7 @@ set_refreshkeytimer(dns_zone_t *zone, dns_rdata_keydata_t *key,
        const char me[] = "set_refreshkeytimer";
        isc_stdtime_t then;
        isc_time_t timenow, timethen;
+       char timebuf[80];
 
        ENTER;
        then = key->refresh;
@@ -2689,6 +2690,9 @@ set_refreshkeytimer(dns_zone_t *zone, dns_rdata_keydata_t *key,
        if (isc_time_compare(&zone->refreshkeytime, &timenow) < 0 ||
            isc_time_compare(&timethen, &zone->refreshkeytime) < 0)
                zone->refreshkeytime = timethen;
+
+       isc_time_formattimestamp(&zone->refreshkeytime, timebuf, 80);
+       dns_zone_log(zone, ISC_LOG_DEBUG(1), "next key refresh: %s", timebuf);
        zone_settimer(zone, &timenow);
 }