summaryrefslogtreecommitdiff
path: root/dns/zone.py
diff options
context:
space:
mode:
authorBob Halley <halley@dnspython.org>2022-01-23 15:38:05 -0800
committerBob Halley <halley@dnspython.org>2022-01-23 15:38:05 -0800
commitc07d11ea060bc4bb02ee8deadba8365bd5b8b99d (patch)
tree07b0a7447376d25f4016a9f14242ff0e058f2bff /dns/zone.py
parentecdc63b866856d7a38f73484722226f29b95224f (diff)
downloaddnspython-absolute_origin_zone_txn_fix.tar.gz
Use the version's origin if the zone doesn't have one yet. [#766]absolute_origin_zone_txn_fix
Diffstat (limited to 'dns/zone.py')
-rw-r--r--dns/zone.py20
1 files changed, 18 insertions, 2 deletions
diff --git a/dns/zone.py b/dns/zone.py
index 2e73144..69c3a73 100644
--- a/dns/zone.py
+++ b/dns/zone.py
@@ -870,10 +870,14 @@ class Version:
def _validate_name(self, name):
if name.is_absolute():
- if not name.is_subdomain(self.zone.origin):
+ if self.origin is None:
+ # This should probably never happen as other code (e.g.
+ # _rr_line) will notice the lack of an origin before us, but
+ # we check just in case!
+ raise KeyError('no zone origin is defined')
+ if not name.is_subdomain(self.origin):
raise KeyError("name is not a subdomain of the zone origin")
if self.zone.relativize:
- # XXXRTH should it be an error if self.origin is still None?
name = name.relativize(self.origin)
return name
@@ -1030,6 +1034,18 @@ class Transaction(dns.transaction.Transaction):
def _get_node(self, name):
return self.version.get_node(name)
+ def _origin_information(self):
+ (absolute, relativize, effective) = self.manager.origin_information()
+ if absolute is None and self.version.origin is not None:
+ # No origin has been committed yet, but we've learned one as part of
+ # this txn. Use it.
+ absolute = self.version.origin
+ if relativize:
+ effective = dns.name.empty
+ else:
+ effective = absolute
+ return (absolute, relativize, effective)
+
def from_text(text, origin=None, rdclass=dns.rdataclass.IN,
relativize=True, zone_factory=Zone, filename=None,