]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
4563. [bug] Modified zones would occasionally fail to reload.
authorMark Andrews <marka@isc.org>
Thu, 2 Feb 2017 06:11:15 +0000 (17:11 +1100)
committerMark Andrews <marka@isc.org>
Thu, 2 Feb 2017 06:11:15 +0000 (17:11 +1100)
                        [RT #39424]

CHANGES
lib/dns/zone.c

diff --git a/CHANGES b/CHANGES
index 2a0a3cee4c4395b1d897ff7de6c0d0d432edf913..10e28a1357e7bcc8d628109f34b164fdee55a99e 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+4563.  [bug]           Modified zones would occasionally fail to reload.
+                       [RT #39424]
+
 4562.  [func]          Add additional memory statistics currently malloced
                        and maxmalloced per memory context. [RT #43593]
 
index 367b380e76ccf2d944d24c650bb186488af58a15..089235d533a809e791db8f85873547c5b78f6598 100644 (file)
@@ -1828,7 +1828,6 @@ zone_touched(dns_zone_t *zone) {
                        return (ISC_TRUE);
        }
 
-
        return (ISC_FALSE);
 }
 
@@ -1908,6 +1907,8 @@ zone_load(dns_zone_t *zone, unsigned int flags, isc_boolean_t locked) {
         * been loaded yet, zone->loadtime will be the epoch.
         */
        if (zone->masterfile != NULL) {
+               isc_time_t filetime;
+
                /*
                 * The file is already loaded.  If we are just doing a
                 * "rndc reconfig", we are done.
@@ -1927,6 +1928,16 @@ zone_load(dns_zone_t *zone, unsigned int flags, isc_boolean_t locked) {
                        result = DNS_R_UPTODATE;
                        goto cleanup;
                }
+
+
+               /*
+                * If the file modification time is in the past
+                * set loadtime to that value.
+                */
+               result = isc_file_getmodtime(zone->masterfile, &filetime);
+               if (result == ISC_R_SUCCESS &&
+                   isc_time_compare(&loadtime, &filetime) > 0)
+                       loadtime = filetime;
        }
 
        /*