]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
2804. [bug] Send notifies when a zone is signed with "rndc sign"
authorEvan Hunt <each@isc.org>
Fri, 4 Dec 2009 22:45:11 +0000 (22:45 +0000)
committerEvan Hunt <each@isc.org>
Fri, 4 Dec 2009 22:45:11 +0000 (22:45 +0000)
or as a result of a scheduled key change. [RT #20700]

CHANGES
lib/dns/zone.c

diff --git a/CHANGES b/CHANGES
index bd704328816e08184f2d69ca0c9b21c477f5c48b..4db91ab469cc69e35d97fea255e56fa41dd8ab39 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+2804.  [bug]           Send notifies when a zone is signed with "rndc sign"
+                       or as a result of a scheduled key change. [RT #20700]
+
 2803.  [port]          win32: Install named-journalprint, nsec3hash, arpaname
                        and genrandom under windows. [RT #20670]
 
index 238877ee74f925f4c860a7566b42d2439d148505..86498d26b1136cc3df1619c2916f59148eed110c 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: zone.c,v 1.537 2009/12/04 22:06:37 tbox Exp $ */
+/* $Id: zone.c,v 1.538 2009/12/04 22:45:11 each Exp $ */
 
 /*! \file */
 
@@ -365,6 +365,7 @@ struct dns_zone {
 #define DNS_ZONEFLG_NEEDCOMPACT 0x02000000U
 #define DNS_ZONEFLG_REFRESHING 0x04000000U     /*%< Refreshing keydata */
 #define DNS_ZONEFLG_THAW       0x08000000U
+#define DNS_ZONEFLG_NOTIFYRESIGN 0x10000000U
 
 #define DNS_ZONE_OPTION(z,o) (((z)->options & (o)) != 0)
 #define DNS_ZONEKEY_OPTION(z,o) (((z)->keyopts & (o)) != 0)
@@ -6836,6 +6837,15 @@ zone_sign(dns_zone_t *zone) {
         */
        zone_journal(zone, &sig_diff, "zone_sign");
 
+       /*
+        * Notify slaves, if appropriate.
+        */
+       TIME_NOW(&when);
+       if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_NOTIFYRESIGN)) {
+               DNS_ZONE_CLRFLAG(zone, DNS_ZONEFLG_NOTIFYRESIGN);
+               zone_notify(zone, when);
+       }
+
  pauseall:
        /*
         * Pause all iterators so that dns_db_closeversion() can succeed.
@@ -13645,6 +13655,8 @@ zone_rekey(dns_zone_t *zone) {
        dns_db_closeversion(db, &ver, commit);
 
        if (commit) {
+               DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_NOTIFYRESIGN);
+
                for (key = ISC_LIST_HEAD(rmkeys);
                     key != NULL;
                     key = ISC_LIST_NEXT(key, link)) {