* dns/ttl.py: TTLs are now bounds checked to be within the closed
interval [0, 2^31 - 1].
+ * The BIND 8 TTL syntax is now accepted in the SOA refresh, retry,
+ expire, and minimum fields, and in the original_ttl field of
+ SIG and RRSIG records.
+
2006-01-04 Bob Halley <halley@dnspython.org>
* dns/resolver.py: The windows registry irritatingly changes the
mname = mname.choose_relativity(origin, relativize)
rname = rname.choose_relativity(origin, relativize)
serial = tok.get_uint32()
- refresh = tok.get_uint32()
- retry = tok.get_uint32()
- expire = tok.get_uint32()
- minimum = tok.get_uint32()
+ refresh = tok.get_ttl()
+ retry = tok.get_ttl()
+ expire = tok.get_ttl()
+ minimum = tok.get_ttl()
tok.get_eol()
return cls(rdclass, rdtype, mname, rname, serial, refresh, retry,
expire, minimum )
type_covered = dns.rdatatype.from_text(tok.get_string())
algorithm = dns.dnssec.algorithm_from_text(tok.get_string())
labels = tok.get_int()
- original_ttl = tok.get_uint32()
+ original_ttl = tok.get_ttl()
expiration = sigtime_to_posixtime(tok.get_string())
inception = sigtime_to_posixtime(tok.get_string())
key_tag = tok.get_int()
import dns.exception
import dns.name
+import dns.ttl
_DELIMITERS = {
' ' : True,
raise dns.exception.SyntaxError, \
'expected EOL or EOF, got %d "%s"' % (ttype, t)
return t
+
+ def get_ttl(self):
+ (ttype, t) = self.get()
+ if ttype != IDENTIFIER:
+ raise dns.exception.SyntaxError, 'expecting an identifier'
+ return dns.ttl.from_text(t)
import dns.rdata
import dns.rdataclass
import dns.rdatatype
+import dns.ttl
class BugsTestCase(unittest.TestCase):
self.failUnless(rdata.float_latitude == 30.5)
self.failUnless(rdata.float_longitude == -100.5)
+ def test_SOA_BIND8_TTL(self):
+ rdata1 = dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.SOA,
+ "a b 100 1s 1m 1h 1d")
+ rdata2 = dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.SOA,
+ "a b 100 1 60 3600 86400")
+ self.failUnless(rdata1 == rdata2)
+
+ def test_TTL_bounds_check(self):
+ def bad():
+ ttl = dns.ttl.from_text("2147483648")
+ self.failUnlessRaises(dns.ttl.BadTTL, bad)
+
if __name__ == '__main__':
unittest.main()