]> git.ipfire.org Git - thirdparty/dnspython.git/commitdiff
Add DLV support
authorBob Halley <halley@nominum.com>
Thu, 18 Jun 2009 16:48:58 +0000 (17:48 +0100)
committerBob Halley <halley@nominum.com>
Thu, 18 Jun 2009 16:48:58 +0000 (17:48 +0100)
ChangeLog
dns/rdtypes/ANY/DLV.py [new file with mode: 0644]
dns/rdtypes/ANY/DS.py
dns/rdtypes/ANY/__init__.py
dns/rdtypes/dsbase.py [new file with mode: 0644]
tests/example
tests/example1.good
tests/example2.good

index 56e50483b509ded9f86b040dc67e6dfec1d74a0a..b963ce296e7f2d9b7bfc5f896444d4c187b70de5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+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,
diff --git a/dns/rdtypes/ANY/DLV.py b/dns/rdtypes/ANY/DLV.py
new file mode 100644 (file)
index 0000000..4961300
--- /dev/null
@@ -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
index 7344d90f430de55d4d865b96c6abc15440f519ff..3efe0ebb3a8411a43505a00e7847171ea2eb3568 100644 (file)
 # 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
index 9c6f93c644184cf59e80e78b731b3316ed1c0495..ef366ae0d39ba045dbd051e7a005bffc584459ef 100644 (file)
@@ -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 (file)
index 0000000..6ba2123
--- /dev/null
@@ -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
index ee8e7d51942bc3e9abec2ba2966c2148b226fa6b..c4183d33ce90428160a0cc43e3759adf9a94c3f4 100644 (file)
@@ -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
index bc20ec22fd4e7caa2fb02846afad89df5366b859..5117b87ffeed175e4f0a448d8e693413423320a1 100644 (file)
@@ -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 .
index 1f508e4a1f416d0fe0a940e0c78514762af71e95..e1526afe36de33c37214bdef8091635ddd3d6c9d 100644 (file)
@@ -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 .