]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
2824. [bug] "rndc sign" was not being run by the correct task.
authorMark Andrews <marka@isc.org>
Tue, 29 Dec 2009 22:20:33 +0000 (22:20 +0000)
committerMark Andrews <marka@isc.org>
Tue, 29 Dec 2009 22:20:33 +0000 (22:20 +0000)
                        [RT #20759]

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

diff --git a/CHANGES b/CHANGES
index ac9e83156582c63cd393f42654e0d54ce5b7f52b..1ebc7bdb6834d71b947fdcbcf294d9e35201d5bb 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+2824.  [bug]           "rndc sign" was not being run by the correct task.
+                       [RT #20759]
+
 2823.  [bug]           rbtdb.c:getsigningtime() was missing locks. [RT #20781]
 
 2822.  [bug]           rbtdb.c:loadnode() could return the wrong result.
index 4da1d0b071935dffd1bb35de97cd41f9d4fc0c68..fd21c88507f7717129578a65fd2b1425423b7cad 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: server.c,v 1.559 2009/12/24 00:14:20 each Exp $ */
+/* $Id: server.c,v 1.560 2009/12/29 22:20:33 marka Exp $ */
 
 /*! \file */
 
@@ -6302,7 +6302,7 @@ ns_server_sign(ns_server_t *server, char *args) {
 
        keyopts = dns_zone_getkeyopts(zone);
        if ((keyopts & DNS_ZONEKEY_ALLOW) != 0)
-               result = dns_zone_rekey(zone);
+               dns_zone_rekey(zone);
        else
                result = ISC_R_NOPERM;
 
index ed7948994ae54c40a50389b9f27ac87ae9ed6975..2994e53f0fb8e6f82b3cb27967272c4b0ab28361 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: zone.h,v 1.174 2009/12/04 22:06:37 tbox Exp $ */
+/* $Id: zone.h,v 1.175 2009/12/29 22:20:33 marka Exp $ */
 
 #ifndef DNS_ZONE_H
 #define DNS_ZONE_H 1
@@ -1778,7 +1778,7 @@ dns_zone_getprivatetype(dns_zone_t *zone);
  * will not be permanent.
  */
 
-isc_result_t
+void
 dns_zone_rekey(dns_zone_t *zone);
 /*%<
  * Update the zone's DNSKEY set from the key repository.
index 7de739159a2378e6edef3e72b5c5c132edad8401..1905f2063b39b1b6a6655ad4ba05174cd55d5ab2 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: zone.c,v 1.544 2009/12/21 04:29:10 marka Exp $ */
+/* $Id: zone.c,v 1.545 2009/12/29 22:20:33 marka Exp $ */
 
 /*! \file */
 
@@ -648,7 +648,7 @@ static isc_result_t zone_signwithkey(dns_zone_t *zone, dns_secalg_t algorithm,
 static isc_result_t delete_nsec(dns_db_t *db, dns_dbversion_t *ver,
                                dns_dbnode_t *node, dns_name_t *name,
                                dns_diff_t *diff);
-static isc_result_t zone_rekey(dns_zone_t *zone);
+static void zone_rekey(dns_zone_t *zone);
 
 #define ENTER zone_debuglog(zone, me, 1, "enter")
 
@@ -7822,10 +7822,9 @@ zone_maintenance(dns_zone_t *zone) {
                        zone_refreshkeys(zone);
                break;
        case dns_zone_master:
-               if (DNS_ZONEKEY_OPTION(zone, DNS_ZONEKEY_MAINTAIN) &&
-                   !isc_time_isepoch(&zone->refreshkeytime) &&
+               if (!isc_time_isepoch(&zone->refreshkeytime) &&
                    isc_time_compare(&now, &zone->refreshkeytime) >= 0)
-                       dns_zone_rekey(zone);
+                       zone_rekey(zone);
        default:
                break;
        }
@@ -13683,7 +13682,7 @@ dnskey_sane(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
        return (ISC_FALSE);
 }
 
-static isc_result_t
+static void
 zone_rekey(dns_zone_t *zone) {
        isc_result_t result;
        dns_db_t *db = NULL;
@@ -13822,8 +13821,6 @@ zone_rekey(dns_zone_t *zone) {
                }
        }
 
-       result = ISC_R_SUCCESS;
-
  failure:
        dns_diff_clear(&diff);
 
@@ -13843,19 +13840,20 @@ zone_rekey(dns_zone_t *zone) {
                dns_db_detachnode(db, &node);
        if (db != NULL)
                dns_db_detach(&db);
-       return (result);
 }
 
-isc_result_t
+void
 dns_zone_rekey(dns_zone_t *zone) {
-       isc_result_t result;
+       isc_time_t now;
 
-       LOCK_ZONE(zone);
-       DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_REFRESHING);
-       result = zone_rekey(zone);
-       DNS_ZONE_CLRFLAG(zone, DNS_ZONEFLG_REFRESHING);
-       UNLOCK_ZONE(zone);
-       return (result);
+       if (zone->type == dns_zone_master && zone->task != NULL) {
+               LOCK_ZONE(zone);
+
+               TIME_NOW(&now);
+               zone->refreshkeytime = now;
+               zone_settimer(zone, &now);
+               UNLOCK_ZONE(zone);
+       }
 }
 
 isc_result_t