summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Halley <halley@play-bow.org>2015-12-03 09:18:24 -0800
committerBob Halley <halley@play-bow.org>2015-12-03 09:18:24 -0800
commitea95dcedcd77c521af7c1903ede7a06ff7859e7c (patch)
tree433b8f639759b0a819aced7ae7d5c845a4c79a03
parent5bce45eabb3a4987d197f11afc42d5b37d33c430 (diff)
parentecc43653c8ba3387086b6f18387badf9cc7750ab (diff)
downloaddnspython-ea95dcedcd77c521af7c1903ede7a06ff7859e7c.tar.gz
Merge pull request #103 from encukou/py3-records
Py3: Add missing code for URI and TLSA rrtypes from the python2 branch
-rw-r--r--dns/rdatatype.py2
-rw-r--r--dns/rdtypes/ANY/URI.py73
-rw-r--r--dns/rdtypes/ANY/__init__.py1
-rw-r--r--tests/example1
-rw-r--r--tests/example1.good1
-rw-r--r--tests/example2.good1
-rw-r--r--tests/example3.good1
-rw-r--r--util/copyrights1
8 files changed, 81 insertions, 0 deletions
diff --git a/dns/rdatatype.py b/dns/rdatatype.py
index d54b704..ef8df2a 100644
--- a/dns/rdatatype.py
+++ b/dns/rdatatype.py
@@ -93,6 +93,7 @@ AXFR = 252
MAILB = 253
MAILA = 254
ANY = 255
+URI = 256
CAA = 257
TA = 32768
DLV = 32769
@@ -161,6 +162,7 @@ _by_text = {
'MAILB' : MAILB,
'MAILA' : MAILA,
'ANY' : ANY,
+ 'URI' : URI,
'CAA' : CAA,
'TA' : TA,
'DLV' : DLV,
diff --git a/dns/rdtypes/ANY/URI.py b/dns/rdtypes/ANY/URI.py
new file mode 100644
index 0000000..238a927
--- /dev/null
+++ b/dns/rdtypes/ANY/URI.py
@@ -0,0 +1,73 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+# Copyright (C) 2015 Red Hat, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import struct
+
+import dns.exception
+import dns.rdata
+import dns.name
+
+class URI(dns.rdata.Rdata):
+ """URI record
+
+ @ivar priority: the priority
+ @type priority: int
+ @ivar weight: the weight
+ @type weight: int
+ @ivar target: the target host
+ @type target: dns.name.Name object
+ @see: draft-faltstrom-uri-13"""
+
+ __slots__ = ['priority', 'weight', 'target']
+
+ def __init__(self, rdclass, rdtype, priority, weight, target):
+ super(URI, self).__init__(rdclass, rdtype)
+ self.priority = priority
+ self.weight = weight
+ if len(target) < 1:
+ raise dns.exception.SyntaxError("URI target cannot be empty")
+ self.target = target
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ return '%d %d "%s"' % (self.priority, self.weight, self.target)
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin = None, relativize = True):
+ priority = tok.get_uint16()
+ weight = tok.get_uint16()
+ target = tok.get().unescape()
+ if not (target.is_quoted_string() or target.is_identifier()):
+ raise dns.exception.SyntaxError("URI target must be a string")
+ tok.get_eol()
+ return cls(rdclass, rdtype, priority, weight, target.value)
+
+ def to_wire(self, file, compress = None, origin = None):
+ two_ints = struct.pack("!HH", self.priority, self.weight)
+ file.write(two_ints)
+ file.write(self.target.encode('ascii'))
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin = None):
+ if rdlen < 5:
+ raise dns.exception.FormError('URI RR is shorter than 5 octets')
+
+ (priority, weight) = struct.unpack('!HH', wire[current : current + 4])
+ current += 4
+ rdlen -= 4
+ target = wire[current : current + rdlen].decode('ascii')
+ current += rdlen
+
+ return cls(rdclass, rdtype, priority, weight, target)
diff --git a/dns/rdtypes/ANY/__init__.py b/dns/rdtypes/ANY/__init__.py
index cb52822..a2a297c 100644
--- a/dns/rdtypes/ANY/__init__.py
+++ b/dns/rdtypes/ANY/__init__.py
@@ -44,6 +44,7 @@ __all__ = [
'SOA',
'SPF',
'SSHFP',
+ 'TLSA',
'TXT',
'X25',
]
diff --git a/tests/example b/tests/example
index a4eb615..b4ad606 100644
--- a/tests/example
+++ b/tests/example
@@ -240,3 +240,4 @@ caa03 CAA 0 iodef "http://iodef.example.com/"
caa04 CAA 0 issue "ca.example.net; account=230123"
caa05 CAA 0 issue "ca.example.net; policy=ev"
caa06 CAA 128 tbs "Unknown"
+uri0q URI 10 1 "http://www.example.com/"
diff --git a/tests/example1.good b/tests/example1.good
index a311f59..1eef90b 100644
--- a/tests/example1.good
+++ b/tests/example1.good
@@ -119,6 +119,7 @@ a.u 300 IN A 73.80.65.49
b.u 300 IN A 73.80.65.49
unknown2 3600 IN TYPE999 \# 8 0a0000010a000001
unknown3 3600 IN A 127.0.0.2
+uri0q 3600 IN URI 10 1 "http://www.example.com/"
wks01 3600 IN WKS 10.0.0.1 6 0 1 2 21 23
wks02 3600 IN WKS 10.0.0.1 17 0 1 2 53
wks03 3600 IN WKS 10.0.0.2 6 65535
diff --git a/tests/example2.good b/tests/example2.good
index 492bbb5..2a10506 100644
--- a/tests/example2.good
+++ b/tests/example2.good
@@ -119,6 +119,7 @@ a.u.example. 300 IN A 73.80.65.49
b.u.example. 300 IN A 73.80.65.49
unknown2.example. 3600 IN TYPE999 \# 8 0a0000010a000001
unknown3.example. 3600 IN A 127.0.0.2
+uri0q.example. 3600 IN URI 10 1 "http://www.example.com/"
wks01.example. 3600 IN WKS 10.0.0.1 6 0 1 2 21 23
wks02.example. 3600 IN WKS 10.0.0.1 17 0 1 2 53
wks03.example. 3600 IN WKS 10.0.0.2 6 65535
diff --git a/tests/example3.good b/tests/example3.good
index a311f59..1eef90b 100644
--- a/tests/example3.good
+++ b/tests/example3.good
@@ -119,6 +119,7 @@ a.u 300 IN A 73.80.65.49
b.u 300 IN A 73.80.65.49
unknown2 3600 IN TYPE999 \# 8 0a0000010a000001
unknown3 3600 IN A 127.0.0.2
+uri0q 3600 IN URI 10 1 "http://www.example.com/"
wks01 3600 IN WKS 10.0.0.1 6 0 1 2 21 23
wks02 3600 IN WKS 10.0.0.1 17 0 1 2 53
wks03 3600 IN WKS 10.0.0.2 6 65535
diff --git a/util/copyrights b/util/copyrights
index 9c7b18f..0023ca8 100644
--- a/util/copyrights
+++ b/util/copyrights
@@ -52,6 +52,7 @@
./dns/rdtypes/ANY/SOA.py PYTHON 2003,2004,2005,2006,2007,2009,2010,2011
./dns/rdtypes/ANY/SPF.py PYTHON 2006,2007,2009,2010,2011
./dns/rdtypes/ANY/SSHFP.py PYTHON 2005,2006,2007,2009,2010,2011
+./dns/rdtypes/ANY/TLSA.py PYTHON 2012
./dns/rdtypes/ANY/TXT.py PYTHON 2003,2004,2005,2006,2007,2009,2010,2011
./dns/rdtypes/ANY/X25.py PYTHON 2003,2004,2005,2006,2007,2009,2010,2011
./dns/rdtypes/ANY/__init__.py PYTHON 2003,2004,2005,2006,2007,2009,2010,2011