self.last_ttl_known = True
token = None
except dns.ttl.BadTTL:
- if self.default_ttl_known:
- ttl = self.default_ttl
- elif self.last_ttl_known:
- ttl = self.last_ttl
self.tok.unget(token)
# Class
if rdclass != self.zone_rdclass:
raise dns.exception.SyntaxError("RR class is not zone's class")
+ if ttl is None:
+ # support for <class> <ttl> <type> syntax
+ token = self._get_identifier()
+ ttl = None
+ try:
+ ttl = dns.ttl.from_text(token.value)
+ self.last_ttl = ttl
+ self.last_ttl_known = True
+ token = None
+ except dns.ttl.BadTTL:
+ if self.default_ttl_known:
+ ttl = self.default_ttl
+ elif self.last_ttl_known:
+ ttl = self.last_ttl
+ self.tok.unget(token)
+
# Type
if self.force_rdtype is not None:
rdtype = self.force_rdtype
ns2 3600 IN A 10.0.0.2
"""
+example_text_output_class_before_ttl = """@ IN 3600 SOA foo bar 1 2 3 4 5
+@ 3600 NS ns1 ; no class
+@ NS ns2 ; no class or TTL, TTL inferred from prior record
+bar.foo IN 300 MX 0 blaz.foo
+ns1 IN 3600 A 10.0.0.1
+ns2 IN 3600 A 10.0.0.2
+"""
+
example_generate = """@ 3600 IN SOA foo bar 1 2 3 4 5
@ 3600 IN NS ns
$GENERATE 9-12 a.$ A 10.0.0.$
z2 = dns.zone.from_text(example_text_output, "example.", relativize=True)
self.assertEqual(z1, z2)
+ def testEqualClassBeforeTTL(self):
+ z1 = dns.zone.from_text(
+ example_text_output_class_before_ttl, "example.", relativize=True
+ )
+ z2 = dns.zone.from_text(example_text_output, "example.", relativize=True)
+ self.assertEqual(z1, z2)
+
def testNotEqual1(self):
z1 = dns.zone.from_text(example_text, "example.", relativize=True)
z2 = dns.zone.from_text(something_quite_similar, "example.", relativize=True)