From: Mark Andrews Date: Tue, 29 Dec 2009 22:20:33 +0000 (+0000) Subject: 2824. [bug] "rndc sign" was not being run by the correct task. X-Git-Tag: v9.4.3-P1~2^2~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5b77627c09dea9a65a70d2a0b95a22ff75b3ac04;p=thirdparty%2Fbind9.git 2824. [bug] "rndc sign" was not being run by the correct task. [RT #20759] --- diff --git a/CHANGES b/CHANGES index ac9e8315658..1ebc7bdb683 100644 --- 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. diff --git a/bin/named/server.c b/bin/named/server.c index 4da1d0b0719..fd21c88507f 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -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; diff --git a/lib/dns/include/dns/zone.h b/lib/dns/include/dns/zone.h index ed7948994ae..2994e53f0fb 100644 --- a/lib/dns/include/dns/zone.h +++ b/lib/dns/include/dns/zone.h @@ -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. diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 7de739159a2..1905f2063b3 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -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