summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Halley <halley@nominum.com>2009-06-18 17:48:58 +0100
committerBob Halley <halley@nominum.com>2009-06-18 17:48:58 +0100
commit2c1a8455262cb045e3e212e7ccb05aaad6439482 (patch)
tree57763e3a032b9bfa6aa2a5b0526af3d0e4921432
parent02c0121ede34ab571047f1f9e3814de1a111129a (diff)
downloaddnspython-2c1a8455262cb045e3e212e7ccb05aaad6439482.tar.gz
Add DLV support
-rw-r--r--ChangeLog4
-rw-r--r--dns/rdtypes/ANY/DLV.py20
-rw-r--r--dns/rdtypes/ANY/DS.py80
-rw-r--r--dns/rdtypes/ANY/__init__.py1
-rw-r--r--dns/rdtypes/dsbase.py92
-rw-r--r--tests/example1
-rw-r--r--tests/example1.good1
-rw-r--r--tests/example2.good1
8 files changed, 124 insertions, 76 deletions
diff --git a/ChangeLog b/ChangeLog
index 56e5048..b963ce2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2009-06-18 Bob Halley <halley@dnspython.org>
+ * Added support for the DLV RR type.
+
+2009-06-18 Bob Halley <halley@dnspython.org>
+
* Added various DNSSEC related constants (e.g. algorithm identifiers,
flag values).
diff --git a/dns/rdtypes/ANY/DLV.py b/dns/rdtypes/ANY/DLV.py
new file mode 100644
index 0000000..4961300
--- /dev/null
+++ b/dns/rdtypes/ANY/DLV.py
@@ -0,0 +1,20 @@
+# Copyright (C) 2003-2007, 2009 Nominum, 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 dns.rdtypes.dsbase
+
+class DLV(dns.rdtypes.dsbase.DSBase):
+ """DLV record"""
+ pass
diff --git a/dns/rdtypes/ANY/DS.py b/dns/rdtypes/ANY/DS.py
index 7344d90..3efe0eb 100644
--- a/dns/rdtypes/ANY/DS.py
+++ b/dns/rdtypes/ANY/DS.py
@@ -13,80 +13,8 @@
# 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.rdtypes.dsbase
-import dns.rdata
-import dns.rdatatype
-
-class DS(dns.rdata.Rdata):
- """DS record
-
- @ivar key_tag: the key tag
- @type key_tag: int
- @ivar algorithm: the algorithm
- @type algorithm: int
- @ivar digest_type: the digest type
- @type digest_type: int
- @ivar digest: the digest
- @type digest: int
- @see: draft-ietf-dnsext-delegation-signer-14.txt"""
-
- __slots__ = ['key_tag', 'algorithm', 'digest_type', 'digest']
-
- def __init__(self, rdclass, rdtype, key_tag, algorithm, digest_type,
- digest):
- super(DS, self).__init__(rdclass, rdtype)
- self.key_tag = key_tag
- self.algorithm = algorithm
- self.digest_type = digest_type
- self.digest = digest
-
- def to_text(self, origin=None, relativize=True, **kw):
- return '%d %d %d %s' % (self.key_tag, self.algorithm,
- self.digest_type,
- dns.rdata._hexify(self.digest,
- chunksize=128))
-
- def from_text(cls, rdclass, rdtype, tok, origin = None, relativize = True):
- key_tag = tok.get_uint16()
- algorithm = tok.get_uint8()
- digest_type = tok.get_uint8()
- chunks = []
- while 1:
- t = tok.get()
- if t[0] == dns.tokenizer.EOL or t[0] == dns.tokenizer.EOF:
- break
- if t[0] != dns.tokenizer.IDENTIFIER:
- raise dns.exception.SyntaxError
- chunks.append(t[1])
- digest = ''.join(chunks)
- digest = digest.decode('hex_codec')
- return cls(rdclass, rdtype, key_tag, algorithm, digest_type,
- digest)
-
- from_text = classmethod(from_text)
-
- def to_wire(self, file, compress = None, origin = None):
- header = struct.pack("!HBB", self.key_tag, self.algorithm,
- self.digest_type)
- file.write(header)
- file.write(self.digest)
-
- def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin = None):
- header = struct.unpack("!HBB", wire[current : current + 4])
- current += 4
- rdlen -= 4
- digest = wire[current : current + rdlen]
- return cls(rdclass, rdtype, header[0], header[1], header[2], digest)
-
- from_wire = classmethod(from_wire)
-
- def _cmp(self, other):
- hs = struct.pack("!HBB", self.key_tag, self.algorithm,
- self.digest_type)
- ho = struct.pack("!HBB", other.key_tag, other.algorithm,
- other.digest_type)
- v = cmp(hs, ho)
- if v == 0:
- v = cmp(self.digest, other.digest)
- return v
+class DS(dns.rdtypes.dsbase.DSBase):
+ """DS record"""
+ pass
diff --git a/dns/rdtypes/ANY/__init__.py b/dns/rdtypes/ANY/__init__.py
index 9c6f93c..ef366ae 100644
--- a/dns/rdtypes/ANY/__init__.py
+++ b/dns/rdtypes/ANY/__init__.py
@@ -19,6 +19,7 @@ __all__ = [
'AFSDB',
'CERT',
'CNAME',
+ 'DLV',
'DNAME',
'DNSKEY',
'DS',
diff --git a/dns/rdtypes/dsbase.py b/dns/rdtypes/dsbase.py
new file mode 100644
index 0000000..6ba2123
--- /dev/null
+++ b/dns/rdtypes/dsbase.py
@@ -0,0 +1,92 @@
+# Copyright (C) 2003-2007, 2009 Nominum, 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.rdata
+import dns.rdatatype
+
+class DSBase(dns.rdata.Rdata):
+ """Base class for rdata that is like a DS record
+
+ @ivar key_tag: the key tag
+ @type key_tag: int
+ @ivar algorithm: the algorithm
+ @type algorithm: int
+ @ivar digest_type: the digest type
+ @type digest_type: int
+ @ivar digest: the digest
+ @type digest: int
+ @see: draft-ietf-dnsext-delegation-signer-14.txt"""
+
+ __slots__ = ['key_tag', 'algorithm', 'digest_type', 'digest']
+
+ def __init__(self, rdclass, rdtype, key_tag, algorithm, digest_type,
+ digest):
+ super(DSBase, self).__init__(rdclass, rdtype)
+ self.key_tag = key_tag
+ self.algorithm = algorithm
+ self.digest_type = digest_type
+ self.digest = digest
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ return '%d %d %d %s' % (self.key_tag, self.algorithm,
+ self.digest_type,
+ dns.rdata._hexify(self.digest,
+ chunksize=128))
+
+ def from_text(cls, rdclass, rdtype, tok, origin = None, relativize = True):
+ key_tag = tok.get_uint16()
+ algorithm = tok.get_uint8()
+ digest_type = tok.get_uint8()
+ chunks = []
+ while 1:
+ t = tok.get()
+ if t[0] == dns.tokenizer.EOL or t[0] == dns.tokenizer.EOF:
+ break
+ if t[0] != dns.tokenizer.IDENTIFIER:
+ raise dns.exception.SyntaxError
+ chunks.append(t[1])
+ digest = ''.join(chunks)
+ digest = digest.decode('hex_codec')
+ return cls(rdclass, rdtype, key_tag, algorithm, digest_type,
+ digest)
+
+ from_text = classmethod(from_text)
+
+ def to_wire(self, file, compress = None, origin = None):
+ header = struct.pack("!HBB", self.key_tag, self.algorithm,
+ self.digest_type)
+ file.write(header)
+ file.write(self.digest)
+
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin = None):
+ header = struct.unpack("!HBB", wire[current : current + 4])
+ current += 4
+ rdlen -= 4
+ digest = wire[current : current + rdlen]
+ return cls(rdclass, rdtype, header[0], header[1], header[2], digest)
+
+ from_wire = classmethod(from_wire)
+
+ def _cmp(self, other):
+ hs = struct.pack("!HBB", self.key_tag, self.algorithm,
+ self.digest_type)
+ ho = struct.pack("!HBB", other.key_tag, other.algorithm,
+ other.digest_type)
+ v = cmp(hs, ho)
+ if v == 0:
+ v = cmp(self.digest, other.digest)
+ return v
diff --git a/tests/example b/tests/example
index ee8e7d5..c4183d3 100644
--- a/tests/example
+++ b/tests/example
@@ -188,6 +188,7 @@ wks01 WKS 10.0.0.1 6 ( 0 1 2 21 23 )
wks02 WKS 10.0.0.1 17 ( 0 1 2 53 )
wks03 WKS 10.0.0.2 6 ( 65535 )
x2501 X25 "123456789"
+dlv01 DLV 12345 3 1 123456789abcdef67890123456789abcdef67890
ds01 DS 12345 3 1 123456789abcdef67890123456789abcdef67890
apl01 APL 1:192.168.32.0/21 !1:192.168.38.0/28
apl02 APL 1:224.0.0.0/4 2:FF00:0:0:0:0:0:0:0/8
diff --git a/tests/example1.good b/tests/example1.good
index bc20ec2..5117b87 100644
--- a/tests/example1.good
+++ b/tests/example1.good
@@ -22,6 +22,7 @@ d 300 IN A 73.80.65.49
dhcid01 3600 IN DHCID AAIBY2/AuCccgoJbsaxcQc9TUapptP69 lOjxfNuVAA2kjEA=
dhcid02 3600 IN DHCID AAEBOSD+XR3Os/0LozeXVqcNc7FwCfQd WL3b/NaiUDlW2No=
dhcid03 3600 IN DHCID AAABxLmlskllE0MVjd57zHcWmEH3pCQ6 VytcKD//7es/deY=
+dlv01 3600 IN DLV 12345 3 1 123456789abcdef67890123456789abcdef67890
dname01 3600 IN DNAME dname-target.
dname02 3600 IN DNAME dname-target
dname03 3600 IN DNAME .
diff --git a/tests/example2.good b/tests/example2.good
index 1f508e4..e1526af 100644
--- a/tests/example2.good
+++ b/tests/example2.good
@@ -22,6 +22,7 @@ d.example. 300 IN A 73.80.65.49
dhcid01.example. 3600 IN DHCID AAIBY2/AuCccgoJbsaxcQc9TUapptP69 lOjxfNuVAA2kjEA=
dhcid02.example. 3600 IN DHCID AAEBOSD+XR3Os/0LozeXVqcNc7FwCfQd WL3b/NaiUDlW2No=
dhcid03.example. 3600 IN DHCID AAABxLmlskllE0MVjd57zHcWmEH3pCQ6 VytcKD//7es/deY=
+dlv01.example. 3600 IN DLV 12345 3 1 123456789abcdef67890123456789abcdef67890
dname01.example. 3600 IN DNAME dname-target.
dname02.example. 3600 IN DNAME dname-target.example.
dname03.example. 3600 IN DNAME .