2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-30 14:07:59 +00:00

Fix a zone refresh bug in zone.c:refresh_callback()

When the zone.c:refresh_callback() callback function is called during
a SOA request before a zone transfer, it can receive a
ISC_R_SHUTTINGDOWN result for the sent request when named is shutting
down, and in that case it just destroys the request and finishes the
ongoing transfer, without clearing the DNS_ZONEFLG_REFRESH flag of the
zone. This is alright when named is going to shutdown, but currently
the callback can get a ISC_R_SHUTTINGDOWN result also when named is
reconfigured during the ongoibg SOA request. In that case, leaving the
DNS_ZONEFLG_REFRESH flag set results in the zone never being able
to refresh again, because any new attempts will be caneled while
the flag is set. Clear the DNS_ZONEFLG_REFRESH flag on the 'exiting'
error path of the callback function.

(cherry picked from commit 228e441328af8f3a54c1ae3f0cd7b871dab83609)
This commit is contained in:
Aram Sargsyan 2025-05-21 14:44:50 +00:00 committed by Ondřej Surý
parent 4709cb4fa2
commit 7b46d898b6
No known key found for this signature in database
GPG Key ID: 2820F37E873DEA41

View File

@ -14308,6 +14308,17 @@ next_primary:
goto detach;
exiting:
/*
* We can get here not only during shutdown, but also when the refresh
* is canceled during reconfiguration. In that case, make sure to clear
* the DNS_ZONEFLG_REFRESH flag so that future zone refreshes don't get
* stuck, and make sure a new refresh attempt is made again soon after
* the reconfiguration is complete.
*/
DNS_ZONE_CLRFLAG(zone, DNS_ZONEFLG_REFRESH);
zone->refreshtime = now;
zone_settimer(zone, &now);
dns_request_destroy(&zone->request);
goto detach;