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