]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
zone: don't flush upon start if DNSSEC is up-to-date
authorDaniel Salzman <daniel.salzman@nic.cz>
Sun, 16 May 2021 08:16:41 +0000 (10:16 +0200)
committerDaniel Salzman <daniel.salzman@nic.cz>
Mon, 17 May 2021 09:45:49 +0000 (11:45 +0200)
src/knot/dnssec/zone-events.c
src/knot/updates/zone-update.c
tests-extra/tests/zone/flush_immediate/test.py

index b259b202add446895536ee8dc8696f0856b188f5..1c96e37aac587ebc8b13c82b7a2e21a3692f9cbf 100644 (file)
@@ -214,7 +214,10 @@ int knot_dnssec_zone_sign(zone_update_t *update,
        if (zone_update_no_change(update) &&
            !knot_zone_sign_soa_expired(update->new_cont, &keyset, &ctx)) {
                log_zone_info(zone_name, "DNSSEC, zone is up-to-date");
+               update->zone->zonefile.resigned = false;
                goto done;
+       } else {
+               update->zone->zonefile.resigned = true;
        }
 
        if (!(flags & ZONE_SIGN_KEEP_SERIAL) && zone_update_to(update) == NULL) {
@@ -297,7 +300,10 @@ int knot_dnssec_sign_update(zone_update_t *update, zone_sign_reschedule_t *resch
        if (zone_update_no_change(update) && !soa_changed &&
            !knot_zone_sign_soa_expired(update->new_cont, &keyset, &ctx)) {
                log_zone_info(zone_name, "DNSSEC, zone is up-to-date");
+               update->zone->zonefile.resigned = false;
                goto done;
+       } else {
+               update->zone->zonefile.resigned = true;
        }
 
        if (!soa_changed) {
index c559c44d841771209b5c3a9f664c2b7b41f9434d..375c0b35aaf21765bdb385456dff1a4ecf6bef2d 100644 (file)
@@ -925,22 +925,14 @@ int zone_update_commit(conf_t *conf, zone_update_t *update)
                return ret;
        }
 
-       /* Check if the zone was re-signed upon zone load to ensure proper flush
-        * even if the SOA serial wasn't incremented by re-signing. */
        val = conf_zone_get(conf, C_DNSSEC_SIGNING, update->zone->name);
-       bool dnssec = conf_bool(&val);
-
-       if (dnssec) {
-               update->zone->zonefile.resigned = true;
-
-               if (zone_is_slave(conf, update->zone)) {
-                       ret = zone_set_lastsigned_serial(update->zone,
-                                                        zone_contents_serial(update->new_cont));
-                       if (ret != KNOT_EOK) {
-                               log_zone_warning(update->zone->name,
-                                                "unable to save lastsigned serial, "
-                                                "future transfers might be broken");
-                       }
+       if (conf_bool(&val) && zone_is_slave(conf, update->zone)) {
+               ret = zone_set_lastsigned_serial(update->zone,
+                                                zone_contents_serial(update->new_cont));
+               if (ret != KNOT_EOK) {
+                       log_zone_warning(update->zone->name,
+                                        "unable to save lastsigned serial, "
+                                        "future transfers might be broken");
                }
        }
 
index e53b3b754ed69d737101a38444fa1e691fb2968b..11317b93ea812defde1585253910e19ecae08be0 100644 (file)
@@ -66,5 +66,15 @@ if m_mtime2 == m_mtime1:
 if s_mtime2 == s_mtime1:
     set_err("Not flushed after IXFR")
 
+master.stop()
+master.start()
+master.zones_wait(zone)
+t.sleep(1)
+m_mtime3 = os.stat(m_zfpath).st_mtime
+
+# check zonefile not re-flushed after restart
+if m_mtime3 != m_mtime2:
+    set_err("Up-to-date re-flushed after restart")
+
 t.end()