summaryrefslogtreecommitdiff
path: root/dns
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 /dns
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
Diffstat (limited to 'dns')
-rw-r--r--dns/rdatatype.py2
-rw-r--r--dns/rdtypes/ANY/URI.py73
-rw-r--r--dns/rdtypes/ANY/__init__.py1
3 files changed, 76 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',
]