mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-10 16:00:01 -04:00
Add ability to load root zone into AsyncServer
We would prefer if explicit $ORIGIN is used only for root zone and
nothing else, solely to avoid zone files named "..db". For all other
zones the file name should match zone name.
(cherry picked from commit 339e5162d6)
This commit is contained in:
parent
6c62e131cc
commit
2f5e5c965d
1 changed files with 26 additions and 3 deletions
|
|
@ -768,13 +768,36 @@ class AsyncDnsServer(AsyncServer):
|
|||
self._zone_tree.add(zone)
|
||||
|
||||
def _load_zone(self, zone_file_path: pathlib.Path) -> dns.zone.Zone:
|
||||
origin = dns.name.from_text(zone_file_path.stem)
|
||||
logging.info("Loading zone file %s", zone_file_path)
|
||||
with open(zone_file_path, encoding="utf-8") as zone_file:
|
||||
zone = dns.zone.from_file(zone_file, origin, relativize=False)
|
||||
zone = self._load_zone_file(zone_file_path)
|
||||
self._abort_if_dname_found_unless_acknowledged(zone)
|
||||
return zone
|
||||
|
||||
def _load_zone_file(self, zone_file_path: pathlib.Path) -> dns.zone.Zone:
|
||||
try:
|
||||
zone = self._load_zone_file_with_origin(zone_file_path)
|
||||
except dns.zone.UnknownOrigin:
|
||||
zone = self._load_zone_file_without_origin(zone_file_path)
|
||||
|
||||
return zone
|
||||
|
||||
def _load_zone_file_with_origin(
|
||||
self, zone_file_path: pathlib.Path
|
||||
) -> dns.zone.Zone:
|
||||
zone = dns.zone.from_file(str(zone_file_path), origin=None, relativize=False)
|
||||
if zone.origin != dns.name.root:
|
||||
error = "only the root zone may use $ORIGIN in the zone file; "
|
||||
error += "for every other zone, its origin is determined by "
|
||||
error += "the name of the file it is loaded from"
|
||||
raise ValueError(error)
|
||||
return zone
|
||||
|
||||
def _load_zone_file_without_origin(
|
||||
self, zone_file_path: pathlib.Path
|
||||
) -> dns.zone.Zone:
|
||||
origin = dns.name.from_text(zone_file_path.stem)
|
||||
return dns.zone.from_file(str(zone_file_path), origin=origin, relativize=False)
|
||||
|
||||
def _abort_if_dname_found_unless_acknowledged(self, zone: dns.zone.Zone) -> None:
|
||||
if self._acknowledge_manual_dname_handling:
|
||||
return
|
||||
|
|
|
|||
Loading…
Reference in a new issue