summaryrefslogtreecommitdiff
path: root/dns/rdtypes
diff options
context:
space:
mode:
authorBrian Wellington <bwelling@xbill.org>2020-03-18 16:44:09 -0700
committerBrian Wellington <bwelling@xbill.org>2020-03-18 16:44:09 -0700
commitcee00834c8ef0c1a0bebbeb98f5e0c97d39ad0d4 (patch)
tree930da1b29884daa1a5d38d63387b49fb41181ced /dns/rdtypes
parent41ca1be22dad341709a3856f34fe63aa46da1d1b (diff)
downloaddnspython-cee00834c8ef0c1a0bebbeb98f5e0c97d39ad0d4.tar.gz
Add relativize_to to from_text().
When calling from_text, the zone code needs to apply the current origin (which may or may not be the zone origin, if sub-zone $ORIGIN statements are present), and may also want to relativize the contents to the zone origin. Previously, this was done by explicitly reading records as absolute, and then relativizing them laster. With this change, the work is moved to the tokenizer. This gets rid of the remaining internal uses of dns.rdata.choose_relativity(), which prevents rdata from being immutable.
Diffstat (limited to 'dns/rdtypes')
-rw-r--r--dns/rdtypes/ANY/CAA.py3
-rw-r--r--dns/rdtypes/ANY/CERT.py3
-rw-r--r--dns/rdtypes/ANY/CSYNC.py3
-rw-r--r--dns/rdtypes/ANY/GPOS.py3
-rw-r--r--dns/rdtypes/ANY/HINFO.py3
-rw-r--r--dns/rdtypes/ANY/HIP.py3
-rw-r--r--dns/rdtypes/ANY/ISDN.py3
-rw-r--r--dns/rdtypes/ANY/LOC.py3
-rw-r--r--dns/rdtypes/ANY/NSEC.py6
-rw-r--r--dns/rdtypes/ANY/NSEC3.py3
-rw-r--r--dns/rdtypes/ANY/NSEC3PARAM.py3
-rw-r--r--dns/rdtypes/ANY/OPENPGPKEY.py3
-rw-r--r--dns/rdtypes/ANY/RP.py9
-rw-r--r--dns/rdtypes/ANY/RRSIG.py6
-rw-r--r--dns/rdtypes/ANY/SOA.py9
-rw-r--r--dns/rdtypes/ANY/SSHFP.py3
-rw-r--r--dns/rdtypes/ANY/TLSA.py3
-rw-r--r--dns/rdtypes/ANY/URI.py3
-rw-r--r--dns/rdtypes/ANY/X25.py3
-rw-r--r--dns/rdtypes/CH/A.py6
-rw-r--r--dns/rdtypes/IN/A.py3
-rw-r--r--dns/rdtypes/IN/AAAA.py3
-rw-r--r--dns/rdtypes/IN/APL.py3
-rw-r--r--dns/rdtypes/IN/DHCID.py3
-rw-r--r--dns/rdtypes/IN/IPSECKEY.py5
-rw-r--r--dns/rdtypes/IN/NAPTR.py6
-rw-r--r--dns/rdtypes/IN/NSAP.py3
-rw-r--r--dns/rdtypes/IN/PX.py9
-rw-r--r--dns/rdtypes/IN/SRV.py6
-rw-r--r--dns/rdtypes/IN/WKS.py3
-rw-r--r--dns/rdtypes/dnskeybase.py3
-rw-r--r--dns/rdtypes/dnskeybase.pyi3
-rw-r--r--dns/rdtypes/dsbase.py3
-rw-r--r--dns/rdtypes/euibase.py3
-rw-r--r--dns/rdtypes/mxbase.py6
-rw-r--r--dns/rdtypes/nsbase.py6
-rw-r--r--dns/rdtypes/txtbase.py3
37 files changed, 88 insertions, 64 deletions
diff --git a/dns/rdtypes/ANY/CAA.py b/dns/rdtypes/ANY/CAA.py
index 0acf201..254bdc6 100644
--- a/dns/rdtypes/ANY/CAA.py
+++ b/dns/rdtypes/ANY/CAA.py
@@ -48,7 +48,8 @@ class CAA(dns.rdata.Rdata):
dns.rdata._escapify(self.value))
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
flags = tok.get_uint8()
tag = tok.get_string().encode()
if len(tag) > 255:
diff --git a/dns/rdtypes/ANY/CERT.py b/dns/rdtypes/ANY/CERT.py
index eea27b5..7951775 100644
--- a/dns/rdtypes/ANY/CERT.py
+++ b/dns/rdtypes/ANY/CERT.py
@@ -85,7 +85,8 @@ class CERT(dns.rdata.Rdata):
dns.rdata._base64ify(self.certificate))
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
certificate_type = _ctype_from_text(tok.get_string())
key_tag = tok.get_uint16()
algorithm = dns.dnssec.algorithm_from_text(tok.get_string())
diff --git a/dns/rdtypes/ANY/CSYNC.py b/dns/rdtypes/ANY/CSYNC.py
index 878befa..26508b5 100644
--- a/dns/rdtypes/ANY/CSYNC.py
+++ b/dns/rdtypes/ANY/CSYNC.py
@@ -54,7 +54,8 @@ class CSYNC(dns.rdata.Rdata):
return '%d %d%s' % (self.serial, self.flags, text)
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
serial = tok.get_uint32()
flags = tok.get_uint16()
rdtypes = []
diff --git a/dns/rdtypes/ANY/GPOS.py b/dns/rdtypes/ANY/GPOS.py
index 2448420..5db2ddb 100644
--- a/dns/rdtypes/ANY/GPOS.py
+++ b/dns/rdtypes/ANY/GPOS.py
@@ -83,7 +83,8 @@ class GPOS(dns.rdata.Rdata):
self.altitude.decode())
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
latitude = tok.get_string()
longitude = tok.get_string()
altitude = tok.get_string()
diff --git a/dns/rdtypes/ANY/HINFO.py b/dns/rdtypes/ANY/HINFO.py
index 7bf8edd..d68230f 100644
--- a/dns/rdtypes/ANY/HINFO.py
+++ b/dns/rdtypes/ANY/HINFO.py
@@ -50,7 +50,8 @@ class HINFO(dns.rdata.Rdata):
dns.rdata._escapify(self.os))
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
cpu = tok.get_string()
os = tok.get_string()
tok.get_eol()
diff --git a/dns/rdtypes/ANY/HIP.py b/dns/rdtypes/ANY/HIP.py
index 81e13c2..0b3dfb0 100644
--- a/dns/rdtypes/ANY/HIP.py
+++ b/dns/rdtypes/ANY/HIP.py
@@ -59,7 +59,8 @@ class HIP(dns.rdata.Rdata):
return '%u %s %s%s' % (self.algorithm, hit, key, text)
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
algorithm = tok.get_uint8()
hit = binascii.unhexlify(tok.get_string().encode())
if len(hit) > 255:
diff --git a/dns/rdtypes/ANY/ISDN.py b/dns/rdtypes/ANY/ISDN.py
index 4d1b866..eeb51b0 100644
--- a/dns/rdtypes/ANY/ISDN.py
+++ b/dns/rdtypes/ANY/ISDN.py
@@ -53,7 +53,8 @@ class ISDN(dns.rdata.Rdata):
return '"%s"' % dns.rdata._escapify(self.address)
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
address = tok.get_string()
t = tok.get()
if not t.is_eol_or_eof():
diff --git a/dns/rdtypes/ANY/LOC.py b/dns/rdtypes/ANY/LOC.py
index 1045513..9d6f046 100644
--- a/dns/rdtypes/ANY/LOC.py
+++ b/dns/rdtypes/ANY/LOC.py
@@ -164,7 +164,8 @@ class LOC(dns.rdata.Rdata):
return text
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
latitude = [0, 0, 0, 0, 1]
longitude = [0, 0, 0, 0, 1]
size = _default_size
diff --git a/dns/rdtypes/ANY/NSEC.py b/dns/rdtypes/ANY/NSEC.py
index a138d4d..2b7bc6c 100644
--- a/dns/rdtypes/ANY/NSEC.py
+++ b/dns/rdtypes/ANY/NSEC.py
@@ -53,9 +53,9 @@ class NSEC(dns.rdata.Rdata):
return '{}{}'.format(next, text)
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
- next = tok.get_name()
- next = next.choose_relativity(origin, relativize)
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
+ next = tok.get_name(origin, relativize, relativize_to)
rdtypes = []
while 1:
token = tok.get().unescape()
diff --git a/dns/rdtypes/ANY/NSEC3.py b/dns/rdtypes/ANY/NSEC3.py
index 95e02eb..086f526 100644
--- a/dns/rdtypes/ANY/NSEC3.py
+++ b/dns/rdtypes/ANY/NSEC3.py
@@ -88,7 +88,8 @@ class NSEC3(dns.rdata.Rdata):
self.iterations, salt, next, text)
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
algorithm = tok.get_uint8()
flags = tok.get_uint8()
iterations = tok.get_uint16()
diff --git a/dns/rdtypes/ANY/NSEC3PARAM.py b/dns/rdtypes/ANY/NSEC3PARAM.py
index 356fff4..8f21657 100644
--- a/dns/rdtypes/ANY/NSEC3PARAM.py
+++ b/dns/rdtypes/ANY/NSEC3PARAM.py
@@ -56,7 +56,8 @@ class NSEC3PARAM(dns.rdata.Rdata):
salt)
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
algorithm = tok.get_uint8()
flags = tok.get_uint8()
iterations = tok.get_uint16()
diff --git a/dns/rdtypes/ANY/OPENPGPKEY.py b/dns/rdtypes/ANY/OPENPGPKEY.py
index a066cf9..5bce444 100644
--- a/dns/rdtypes/ANY/OPENPGPKEY.py
+++ b/dns/rdtypes/ANY/OPENPGPKEY.py
@@ -38,7 +38,8 @@ class OPENPGPKEY(dns.rdata.Rdata):
return dns.rdata._base64ify(self.key)
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
chunks = []
while 1:
t = tok.get().unescape()
diff --git a/dns/rdtypes/ANY/RP.py b/dns/rdtypes/ANY/RP.py
index 8f07be9..1c8afe2 100644
--- a/dns/rdtypes/ANY/RP.py
+++ b/dns/rdtypes/ANY/RP.py
@@ -44,11 +44,10 @@ class RP(dns.rdata.Rdata):
return "{} {}".format(str(mbox), str(txt))
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
- mbox = tok.get_name()
- txt = tok.get_name()
- mbox = mbox.choose_relativity(origin, relativize)
- txt = txt.choose_relativity(origin, relativize)
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
+ mbox = tok.get_name(origin, relativize, relativize_to)
+ txt = tok.get_name(origin, relativize, relativize_to)
tok.get_eol()
return cls(rdclass, rdtype, mbox, txt)
diff --git a/dns/rdtypes/ANY/RRSIG.py b/dns/rdtypes/ANY/RRSIG.py
index 80c6509..cef6000 100644
--- a/dns/rdtypes/ANY/RRSIG.py
+++ b/dns/rdtypes/ANY/RRSIG.py
@@ -108,7 +108,8 @@ class RRSIG(dns.rdata.Rdata):
)
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
type_covered = dns.rdatatype.from_text(tok.get_string())
algorithm = dns.dnssec.algorithm_from_text(tok.get_string())
labels = tok.get_int()
@@ -116,8 +117,7 @@ class RRSIG(dns.rdata.Rdata):
expiration = sigtime_to_posixtime(tok.get_string())
inception = sigtime_to_posixtime(tok.get_string())
key_tag = tok.get_int()
- signer = tok.get_name()
- signer = signer.choose_relativity(origin, relativize)
+ signer = tok.get_name(origin, relativize, relativize_to)
chunks = []
while 1:
t = tok.get().unescape()
diff --git a/dns/rdtypes/ANY/SOA.py b/dns/rdtypes/ANY/SOA.py
index aec81ca..58a65f6 100644
--- a/dns/rdtypes/ANY/SOA.py
+++ b/dns/rdtypes/ANY/SOA.py
@@ -65,11 +65,10 @@ class SOA(dns.rdata.Rdata):
self.expire, self.minimum)
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
- mname = tok.get_name()
- rname = tok.get_name()
- mname = mname.choose_relativity(origin, relativize)
- rname = rname.choose_relativity(origin, relativize)
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
+ mname = tok.get_name(origin, relativize, relativize_to)
+ rname = tok.get_name(origin, relativize, relativize_to)
serial = tok.get_uint32()
refresh = tok.get_ttl()
retry = tok.get_ttl()
diff --git a/dns/rdtypes/ANY/SSHFP.py b/dns/rdtypes/ANY/SSHFP.py
index c18311e..7c27ccb 100644
--- a/dns/rdtypes/ANY/SSHFP.py
+++ b/dns/rdtypes/ANY/SSHFP.py
@@ -50,7 +50,8 @@ class SSHFP(dns.rdata.Rdata):
chunksize=128))
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
algorithm = tok.get_uint8()
fp_type = tok.get_uint8()
chunks = []
diff --git a/dns/rdtypes/ANY/TLSA.py b/dns/rdtypes/ANY/TLSA.py
index a135c2b..83e4d63 100644
--- a/dns/rdtypes/ANY/TLSA.py
+++ b/dns/rdtypes/ANY/TLSA.py
@@ -54,7 +54,8 @@ class TLSA(dns.rdata.Rdata):
chunksize=128))
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
usage = tok.get_uint8()
selector = tok.get_uint8()
mtype = tok.get_uint8()
diff --git a/dns/rdtypes/ANY/URI.py b/dns/rdtypes/ANY/URI.py
index 4c6569c..576344e 100644
--- a/dns/rdtypes/ANY/URI.py
+++ b/dns/rdtypes/ANY/URI.py
@@ -53,7 +53,8 @@ class URI(dns.rdata.Rdata):
self.target.decode())
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
priority = tok.get_uint16()
weight = tok.get_uint16()
target = tok.get().unescape()
diff --git a/dns/rdtypes/ANY/X25.py b/dns/rdtypes/ANY/X25.py
index 1323ba4..7c7d25b 100644
--- a/dns/rdtypes/ANY/X25.py
+++ b/dns/rdtypes/ANY/X25.py
@@ -43,7 +43,8 @@ class X25(dns.rdata.Rdata):
return '"%s"' % dns.rdata._escapify(self.address)
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
address = tok.get_string()
tok.get_eol()
return cls(rdclass, rdtype, address)
diff --git a/dns/rdtypes/CH/A.py b/dns/rdtypes/CH/A.py
index e65d192..34d432c 100644
--- a/dns/rdtypes/CH/A.py
+++ b/dns/rdtypes/CH/A.py
@@ -38,10 +38,10 @@ class A(dns.rdtypes.mxbase.MXBase):
return '%s %o' % (domain, self.address)
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
- domain = tok.get_name()
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
+ domain = tok.get_name(origin, relativize, relativize_to)
address = tok.get_uint16(base=8)
- domain = domain.choose_relativity(origin, relativize)
tok.get_eol()
return cls(rdclass, rdtype, address, domain)
diff --git a/dns/rdtypes/IN/A.py b/dns/rdtypes/IN/A.py
index 8998982..84e54ab 100644
--- a/dns/rdtypes/IN/A.py
+++ b/dns/rdtypes/IN/A.py
@@ -40,7 +40,8 @@ class A(dns.rdata.Rdata):
return self.address
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
address = tok.get_identifier()
tok.get_eol()
return cls(rdclass, rdtype, address)
diff --git a/dns/rdtypes/IN/AAAA.py b/dns/rdtypes/IN/AAAA.py
index a77c5bf..b6b13ba 100644
--- a/dns/rdtypes/IN/AAAA.py
+++ b/dns/rdtypes/IN/AAAA.py
@@ -40,7 +40,8 @@ class AAAA(dns.rdata.Rdata):
return self.address
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
address = tok.get_identifier()
tok.get_eol()
return cls(rdclass, rdtype, address)
diff --git a/dns/rdtypes/IN/APL.py b/dns/rdtypes/IN/APL.py
index 5648908..f824498 100644
--- a/dns/rdtypes/IN/APL.py
+++ b/dns/rdtypes/IN/APL.py
@@ -95,7 +95,8 @@ class APL(dns.rdata.Rdata):
return ' '.join(map(str, self.items))
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
items = []
while 1:
token = tok.get().unescape()
diff --git a/dns/rdtypes/IN/DHCID.py b/dns/rdtypes/IN/DHCID.py
index cec6459..1cc50ff 100644
--- a/dns/rdtypes/IN/DHCID.py
+++ b/dns/rdtypes/IN/DHCID.py
@@ -39,7 +39,8 @@ class DHCID(dns.rdata.Rdata):
return dns.rdata._base64ify(self.data)
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
chunks = []
while 1:
t = tok.get().unescape()
diff --git a/dns/rdtypes/IN/IPSECKEY.py b/dns/rdtypes/IN/IPSECKEY.py
index 5e61923..4a81d98 100644
--- a/dns/rdtypes/IN/IPSECKEY.py
+++ b/dns/rdtypes/IN/IPSECKEY.py
@@ -81,12 +81,13 @@ class IPSECKEY(dns.rdata.Rdata):
dns.rdata._base64ify(self.key))
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
precedence = tok.get_uint8()
gateway_type = tok.get_uint8()
algorithm = tok.get_uint8()
if gateway_type == 3:
- gateway = tok.get_name().choose_relativity(origin, relativize)
+ gateway = tok.get_name(origin, relativize, relativize_to)
else:
gateway = tok.get_string()
chunks = []
diff --git a/dns/rdtypes/IN/NAPTR.py b/dns/rdtypes/IN/NAPTR.py
index 79e5e5f..69c988c 100644
--- a/dns/rdtypes/IN/NAPTR.py
+++ b/dns/rdtypes/IN/NAPTR.py
@@ -76,14 +76,14 @@ class NAPTR(dns.rdata.Rdata):
replacement)
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
order = tok.get_uint16()
preference = tok.get_uint16()
flags = tok.get_string()
service = tok.get_string()
regexp = tok.get_string()
- replacement = tok.get_name()
- replacement = replacement.choose_relativity(origin, relativize)
+ replacement = tok.get_name(origin, relativize, relativize_to)
tok.get_eol()
return cls(rdclass, rdtype, order, preference, flags, service,
regexp, replacement)
diff --git a/dns/rdtypes/IN/NSAP.py b/dns/rdtypes/IN/NSAP.py
index 336befc..c4df595 100644
--- a/dns/rdtypes/IN/NSAP.py
+++ b/dns/rdtypes/IN/NSAP.py
@@ -40,7 +40,8 @@ class NSAP(dns.rdata.Rdata):
return "0x%s" % binascii.hexlify(self.address).decode()
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
address = tok.get_string()
tok.get_eol()
if address[0:2] != '0x':
diff --git a/dns/rdtypes/IN/PX.py b/dns/rdtypes/IN/PX.py
index 2dbaee6..86f8613 100644
--- a/dns/rdtypes/IN/PX.py
+++ b/dns/rdtypes/IN/PX.py
@@ -48,12 +48,11 @@ class PX(dns.rdata.Rdata):
return '%d %s %s' % (self.preference, map822, mapx400)
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
preference = tok.get_uint16()
- map822 = tok.get_name()
- map822 = map822.choose_relativity(origin, relativize)
- mapx400 = tok.get_name(None)
- mapx400 = mapx400.choose_relativity(origin, relativize)
+ map822 = tok.get_name(origin, relativize, relativize_to)
+ mapx400 = tok.get_name(origin, relativize, relativize_to)
tok.get_eol()
return cls(rdclass, rdtype, preference, map822, mapx400)
diff --git a/dns/rdtypes/IN/SRV.py b/dns/rdtypes/IN/SRV.py
index b2c1bc9..87c0471 100644
--- a/dns/rdtypes/IN/SRV.py
+++ b/dns/rdtypes/IN/SRV.py
@@ -51,12 +51,12 @@ class SRV(dns.rdata.Rdata):
target)
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
priority = tok.get_uint16()
weight = tok.get_uint16()
port = tok.get_uint16()
- target = tok.get_name(None)
- target = target.choose_relativity(origin, relativize)
+ target = tok.get_name(origin, relativize, relativize_to)
tok.get_eol()
return cls(rdclass, rdtype, priority, weight, port, target)
diff --git a/dns/rdtypes/IN/WKS.py b/dns/rdtypes/IN/WKS.py
index c3a4798..ac0e9c8 100644
--- a/dns/rdtypes/IN/WKS.py
+++ b/dns/rdtypes/IN/WKS.py
@@ -59,7 +59,8 @@ class WKS(dns.rdata.Rdata):
return '%s %d %s' % (self.address, self.protocol, text)
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
address = tok.get_string()
protocol = tok.get_string()
if protocol.isdigit():
diff --git a/dns/rdtypes/dnskeybase.py b/dns/rdtypes/dnskeybase.py
index 3e7e87e..ea8f191 100644
--- a/dns/rdtypes/dnskeybase.py
+++ b/dns/rdtypes/dnskeybase.py
@@ -100,7 +100,8 @@ class DNSKEYBase(dns.rdata.Rdata):
dns.rdata._base64ify(self.key))
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
flags = tok.get_uint16()
protocol = tok.get_uint8()
algorithm = dns.dnssec.algorithm_from_text(tok.get_string())
diff --git a/dns/rdtypes/dnskeybase.pyi b/dns/rdtypes/dnskeybase.pyi
index e102a69..ee70691 100644
--- a/dns/rdtypes/dnskeybase.pyi
+++ b/dns/rdtypes/dnskeybase.pyi
@@ -23,7 +23,8 @@ class DNSKEYBase(rdata.Rdata):
...
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
...
def to_wire(self, file, compress=None, origin=None):
diff --git a/dns/rdtypes/dsbase.py b/dns/rdtypes/dsbase.py
index 26ae9d5..ac5904d 100644
--- a/dns/rdtypes/dsbase.py
+++ b/dns/rdtypes/dsbase.py
@@ -53,7 +53,8 @@ class DSBase(dns.rdata.Rdata):
chunksize=128))
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
key_tag = tok.get_uint16()
algorithm = tok.get_uint8()
digest_type = tok.get_uint8()
diff --git a/dns/rdtypes/euibase.py b/dns/rdtypes/euibase.py
index 4eaecbf..9ac8bc0 100644
--- a/dns/rdtypes/euibase.py
+++ b/dns/rdtypes/euibase.py
@@ -43,7 +43,8 @@ class EUIBase(dns.rdata.Rdata):
return dns.rdata._hexify(self.eui, chunksize=2).replace(' ', '-')
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
text = tok.get_string()
tok.get_eol()
if len(text) != cls.text_len:
diff --git a/dns/rdtypes/mxbase.py b/dns/rdtypes/mxbase.py
index 9a3fa62..7ed97f5 100644
--- a/dns/rdtypes/mxbase.py
+++ b/dns/rdtypes/mxbase.py
@@ -46,10 +46,10 @@ class MXBase(dns.rdata.Rdata):
return '%d %s' % (self.preference, exchange)
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
preference = tok.get_uint16()
- exchange = tok.get_name()
- exchange = exchange.choose_relativity(origin, relativize)
+ exchange = tok.get_name(origin, relativize, relativize_to)
tok.get_eol()
return cls(rdclass, rdtype, preference, exchange)
diff --git a/dns/rdtypes/nsbase.py b/dns/rdtypes/nsbase.py
index 97a2232..b55a7f2 100644
--- a/dns/rdtypes/nsbase.py
+++ b/dns/rdtypes/nsbase.py
@@ -42,9 +42,9 @@ class NSBase(dns.rdata.Rdata):
return str(target)
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
- target = tok.get_name()
- target = target.choose_relativity(origin, relativize)
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
+ target = tok.get_name(origin, relativize, relativize_to)
tok.get_eol()
return cls(rdclass, rdtype, target)
diff --git a/dns/rdtypes/txtbase.py b/dns/rdtypes/txtbase.py
index fd85871..0988052 100644
--- a/dns/rdtypes/txtbase.py
+++ b/dns/rdtypes/txtbase.py
@@ -54,7 +54,8 @@ class TXTBase(dns.rdata.Rdata):
return txt
@classmethod
- def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True,
+ relativize_to=None):
strings = []
while 1:
token = tok.get().unescape()