1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 import struct
17
18 import dns.exception
19 import dns.rdata
20 import dns.name
21
22
23 -class SOA(dns.rdata.Rdata):
24
25 """SOA record
26
27 @ivar mname: the SOA MNAME (master name) field
28 @type mname: dns.name.Name object
29 @ivar rname: the SOA RNAME (responsible name) field
30 @type rname: dns.name.Name object
31 @ivar serial: The zone's serial number
32 @type serial: int
33 @ivar refresh: The zone's refresh value (in seconds)
34 @type refresh: int
35 @ivar retry: The zone's retry value (in seconds)
36 @type retry: int
37 @ivar expire: The zone's expiration value (in seconds)
38 @type expire: int
39 @ivar minimum: The zone's negative caching time (in seconds, called
40 "minimum" for historical reasons)
41 @type minimum: int
42 @see: RFC 1035"""
43
44 __slots__ = ['mname', 'rname', 'serial', 'refresh', 'retry', 'expire',
45 'minimum']
46
47 - def __init__(self, rdclass, rdtype, mname, rname, serial, refresh, retry,
48 expire, minimum):
57
58 - def to_text(self, origin=None, relativize=True, **kw):
64
65 @classmethod
66 - def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
67 mname = tok.get_name()
68 rname = tok.get_name()
69 mname = mname.choose_relativity(origin, relativize)
70 rname = rname.choose_relativity(origin, relativize)
71 serial = tok.get_uint32()
72 refresh = tok.get_ttl()
73 retry = tok.get_ttl()
74 expire = tok.get_ttl()
75 minimum = tok.get_ttl()
76 tok.get_eol()
77 return cls(rdclass, rdtype, mname, rname, serial, refresh, retry,
78 expire, minimum)
79
80 - def to_wire(self, file, compress=None, origin=None):
86
92
93 @classmethod
94 - def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
95 (mname, cused) = dns.name.from_wire(wire[: current + rdlen], current)
96 current += cused
97 rdlen -= cused
98 (rname, cused) = dns.name.from_wire(wire[: current + rdlen], current)
99 current += cused
100 rdlen -= cused
101 if rdlen != 20:
102 raise dns.exception.FormError
103 five_ints = struct.unpack('!IIIII',
104 wire[current: current + rdlen])
105 if origin is not None:
106 mname = mname.relativize(origin)
107 rname = rname.relativize(origin)
108 return cls(rdclass, rdtype, mname, rname,
109 five_ints[0], five_ints[1], five_ints[2], five_ints[3],
110 five_ints[4])
111
115