diff options
| author | Bob Halley <halley@play-bow.org> | 2015-12-03 09:18:24 -0800 |
|---|---|---|
| committer | Bob Halley <halley@play-bow.org> | 2015-12-03 09:18:24 -0800 |
| commit | ea95dcedcd77c521af7c1903ede7a06ff7859e7c (patch) | |
| tree | 433b8f639759b0a819aced7ae7d5c845a4c79a03 | |
| parent | 5bce45eabb3a4987d197f11afc42d5b37d33c430 (diff) | |
| parent | ecc43653c8ba3387086b6f18387badf9cc7750ab (diff) | |
| download | dnspython-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.py | 2 | ||||
| -rw-r--r-- | dns/rdtypes/ANY/URI.py | 73 | ||||
| -rw-r--r-- | dns/rdtypes/ANY/__init__.py | 1 | ||||
| -rw-r--r-- | tests/example | 1 | ||||
| -rw-r--r-- | tests/example1.good | 1 | ||||
| -rw-r--r-- | tests/example2.good | 1 | ||||
| -rw-r--r-- | tests/example3.good | 1 | ||||
| -rw-r--r-- | util/copyrights | 1 |
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 |
