From: Mark Andrews Date: Fri, 4 Oct 2024 01:55:58 +0000 (+1000) Subject: Return raw zone serial for inline zones X-Git-Tag: v9.21.7~34^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=78de8afd475ca53ceafb66a8dde0c4e8022ae686;p=thirdparty%2Fbind9.git Return raw zone serial for inline zones --- diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 7d16993f1ce..96e642f957a 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -1502,17 +1502,23 @@ dns_zone_getzoneversion(dns_zone_t *zone, isc_buffer_t *b) { isc_result_t result = DNS_R_NOTLOADED; unsigned int soacount; uint32_t serial; + dns_zone_t *mayberaw = zone; REQUIRE(DNS_ZONE_VALID(zone)); REQUIRE(b != NULL); LOCK_ZONE(zone); - ZONEDB_LOCK(&zone->dblock, isc_rwlocktype_read); - if (DNS_ZONE_OPTION(zone, DNS_ZONEOPT_ZONEVERSION) && zone->db != NULL) + if (zone->raw != NULL) { + LOCK_ZONE(zone->raw); + mayberaw = zone->raw; + } + ZONEDB_LOCK(&mayberaw->dblock, isc_rwlocktype_read); + if (DNS_ZONE_OPTION(mayberaw, DNS_ZONEOPT_ZONEVERSION) && + mayberaw->db != NULL) { - result = dns_db_getzoneversion(zone->db, b); + result = dns_db_getzoneversion(mayberaw->db, b); if (result == ISC_R_NOTIMPLEMENTED) { - result = zone_get_from_db(zone, zone->db, NULL, + result = zone_get_from_db(mayberaw, mayberaw->db, NULL, &soacount, NULL, &serial, NULL, NULL, NULL, NULL, NULL); if (result == ISC_R_SUCCESS && soacount == 0) { @@ -1522,7 +1528,7 @@ dns_zone_getzoneversion(dns_zone_t *zone, isc_buffer_t *b) { if (isc_buffer_availablelength(b) >= 6) { isc_buffer_putuint8( b, dns_name_countlabels( - &zone->origin) - + &mayberaw->origin) - 1); isc_buffer_putuint8(b, 0); isc_buffer_putuint32(b, serial); @@ -1532,7 +1538,10 @@ dns_zone_getzoneversion(dns_zone_t *zone, isc_buffer_t *b) { } } } - ZONEDB_UNLOCK(&zone->dblock, isc_rwlocktype_read); + ZONEDB_UNLOCK(&mayberaw->dblock, isc_rwlocktype_read); + if (zone->raw != NULL) { + UNLOCK_ZONE(zone->raw); + } UNLOCK_ZONE(zone); return result;