From 4ba89110eae47f454462db6e4d453851ce818f4e Mon Sep 17 00:00:00 2001 From: tmerila Date: Wed, 3 Apr 2019 13:57:15 +0300 Subject: [PATCH] Update zone.py By doing the TTL validity check after parsing the record data allows the TTL to be set properly from SOA RDATA even when the SOA record itself does not have TTL set. --- dns/zone.py | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/dns/zone.py b/dns/zone.py index 21731a6a..e80a3ca2 100644 --- a/dns/zone.py +++ b/dns/zone.py @@ -658,21 +658,7 @@ class _MasterReader(object): token = self.tok.get() if not token.is_identifier(): raise dns.exception.SyntaxError - # TTL - try: - ttl = dns.ttl.from_text(token.value) - self.last_ttl = ttl - self.last_ttl_known = True - token = self.tok.get() - if not token.is_identifier(): - raise dns.exception.SyntaxError - except dns.ttl.BadTTL: - if not (self.last_ttl_known or self.default_ttl_known): - raise dns.exception.SyntaxError("Missing default TTL value") - if self.default_ttl_known: - ttl = self.default_ttl - else: - ttl = self.last_ttl + # Class try: rdclass = dns.rdataclass.from_text(token.value) @@ -719,6 +705,22 @@ class _MasterReader(object): self.default_ttl = rd.minimum self.default_ttl_known = True + # TTL + try: + ttl = dns.ttl.from_text(token.value) + self.last_ttl = ttl + self.last_ttl_known = True + token = self.tok.get() + if not token.is_identifier(): + raise dns.exception.SyntaxError + except dns.ttl.BadTTL: + if not (self.last_ttl_known or self.default_ttl_known): + raise dns.exception.SyntaxError("Missing default TTL value") + if self.default_ttl_known: + ttl = self.default_ttl + else: + ttl = self.last_ttl + rd.choose_relativity(self.zone.origin, self.relativize) covers = rd.covers() rds = n.find_rdataset(rdclass, rdtype, covers, True) -- 2.47.3