]> git.ipfire.org Git - thirdparty/dnspython.git/commitdiff
Add CAA.
authorBob Halley <halley@dnspython.org>
Fri, 5 Sep 2014 15:09:44 +0000 (08:09 -0700)
committerBob Halley <halley@dnspython.org>
Fri, 5 Sep 2014 15:09:44 +0000 (08:09 -0700)
dns/rdatatype.py
dns/rdtypes/ANY/CAA.py [new file with mode: 0644]
tests/example
tests/example1.good
tests/example2.good
tests/example3.good

index d5cc5cc8f53270743032db720357126b33341b63..d5d9f7ca76d20fb55e936a95401545194d4f934f 100644 (file)
@@ -89,6 +89,7 @@ AXFR = 252
 MAILB = 253
 MAILA = 254
 ANY = 255
+CAA = 257
 TA = 32768
 DLV = 32769
 
@@ -152,6 +153,7 @@ _by_text = {
     'MAILB' : MAILB,
     'MAILA' : MAILA,
     'ANY' : ANY,
+    'CAA' : CAA,
     'TA' : TA,
     'DLV' : DLV,
     }
diff --git a/dns/rdtypes/ANY/CAA.py b/dns/rdtypes/ANY/CAA.py
new file mode 100644 (file)
index 0000000..7425606
--- /dev/null
@@ -0,0 +1,73 @@
+# Copyright (C) 2003-2007, 2009-2011 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.exception
+import dns.rdata
+import dns.tokenizer
+import dns.util
+
+class CAA(dns.rdata.Rdata):
+    """CAA (Certification Authority Authorization) record
+
+    @ivar flags: the flags
+    @type flags: int
+    @ivar tag: the tag
+    @type tag: string
+    @ivar value: the value
+    @type value: string
+    @see: RFC 6844"""
+
+    __slots__ = ['flags', 'tag', 'value']
+
+    def __init__(self, rdclass, rdtype, flags, tag, value):
+        super(CAA, self).__init__(rdclass, rdtype)
+        self.flags = flags
+        self.tag = tag
+        self.value = value
+
+    def to_text(self, origin=None, relativize=True, **kw):
+        return '%u %s "%s"' % (self.flags,
+                               dns.rdata._escapify(self.tag),
+                               dns.rdata._escapify(self.value))
+
+    def from_text(cls, rdclass, rdtype, tok, origin = None, relativize = True):
+        flags = tok.get_uint8()
+        tag = tok.get_string()
+        if len(tag) > 255:
+            raise dns.exception.SyntaxError("tag too long")
+        if not tag.isalnum():
+            raise dns.exception.SyntaxError("tag is not alphanumeric")
+        value = tok.get_string()
+        return cls(rdclass, rdtype, flags, tag, value)
+
+    from_text = classmethod(from_text)
+
+    def to_wire(self, file, compress = None, origin = None):
+        dns.util.write_uint8(file, self.flags)
+        l = len(self.tag)
+        assert l < 256
+        dns.util.write_uint8(file, l)
+        file.write(self.tag.encode('latin_1'))
+        file.write(self.value.encode('latin_1'))
+
+    @classmethod
+    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin = None):
+        (flags, l) = struct.unpack('!BB', wire[current : current + 2])
+        current += 2
+        tag = wire[current : current + l].decode('latin_1')
+        value = wire[current + l:].decode('latin_1')
+        return cls(rdclass, rdtype, flags, tag, value)
index 37a90a2a5eaa2552b36f43232e105a3f03c6c397..07394ae835b23e5a93ddd86c02b02116fe788996 100644 (file)
@@ -227,3 +227,9 @@ nsec302                     NSEC3 1 1 12 - 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3
 nsec3param01           NSEC3PARAM 1 1 12 aabbccdd
 nsec3param02           NSEC3PARAM 1 1 12 -
 hip01                  HIP 2 200100107B1A74DF365639CC39F1D578 AwEAAbdxyhNuSutc5EMzxTs9LBPCIkOFH8cIvM4p9+LrV4e19WzK00+CI6zBCQTdtWsuxKbWIy87UOoJTwkUs7lBu+Upr1gsNrut79ryra+bSRGQb1slImA8YVJyuIDsj7kwzG7jnERNqnWxZ48AWkskmdHaVDP4BcelrTI3rMXdXF5D rvs1.example.com. rvs2
+caa01                  CAA 0 issue "ca.example.net"
+caa02                  CAA 0 iodef "mailto:security@example.com"
+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"
index 100842e23c17b6ae2035e3e348266bd7ecaa091e..62e8e287b4906d3fb2a525069f88963850ec7057 100644 (file)
@@ -14,6 +14,12 @@ apl01 3600 IN APL 1:192.168.32.0/21 !1:192.168.38.0/28
 apl02 3600 IN APL 1:224.0.0.0/4 2:FF00:0:0:0:0:0:0:0/8
 b 300 IN CNAME foo.net.
 c 300 IN A 73.80.65.49
+caa01 3600 IN CAA 0 issue "ca.example.net"
+caa02 3600 IN CAA 0 iodef "mailto:security@example.com"
+caa03 3600 IN CAA 0 iodef "http://iodef.example.com/"
+caa04 3600 IN CAA 0 issue "ca.example.net; account=230123"
+caa05 3600 IN CAA 0 issue "ca.example.net; policy=ev"
+caa06 3600 IN CAA 128 tbs "Unknown"
 cert01 3600 IN CERT 65534 65535 PRIVATEOID MxFcby9k/yvedMfQgKzhH5er0Mu/vILz 45IkskceFGgiWCn/GxHhai6VAuHAoNUz 4YoU1tVfSCSqQYn6//11U6Nld80jEeC8 aTrO+KKmCaY=
 cname01 3600 IN CNAME cname-target.
 cname02 3600 IN CNAME cname-target
index ac3261c49ef645b7a9a40f613e396844c8a4bd1e..4a92012573a4b380e81c46643b16ee0ef3e58b09 100644 (file)
@@ -14,6 +14,12 @@ apl01.example. 3600 IN APL 1:192.168.32.0/21 !1:192.168.38.0/28
 apl02.example. 3600 IN APL 1:224.0.0.0/4 2:FF00:0:0:0:0:0:0:0/8
 b.example. 300 IN CNAME foo.net.
 c.example. 300 IN A 73.80.65.49
+caa01.example. 3600 IN CAA 0 issue "ca.example.net"
+caa02.example. 3600 IN CAA 0 iodef "mailto:security@example.com"
+caa03.example. 3600 IN CAA 0 iodef "http://iodef.example.com/"
+caa04.example. 3600 IN CAA 0 issue "ca.example.net; account=230123"
+caa05.example. 3600 IN CAA 0 issue "ca.example.net; policy=ev"
+caa06.example. 3600 IN CAA 128 tbs "Unknown"
 cert01.example. 3600 IN CERT 65534 65535 PRIVATEOID MxFcby9k/yvedMfQgKzhH5er0Mu/vILz 45IkskceFGgiWCn/GxHhai6VAuHAoNUz 4YoU1tVfSCSqQYn6//11U6Nld80jEeC8 aTrO+KKmCaY=
 cname01.example. 3600 IN CNAME cname-target.
 cname02.example. 3600 IN CNAME cname-target.example.
index 100842e23c17b6ae2035e3e348266bd7ecaa091e..62e8e287b4906d3fb2a525069f88963850ec7057 100644 (file)
@@ -14,6 +14,12 @@ apl01 3600 IN APL 1:192.168.32.0/21 !1:192.168.38.0/28
 apl02 3600 IN APL 1:224.0.0.0/4 2:FF00:0:0:0:0:0:0:0/8
 b 300 IN CNAME foo.net.
 c 300 IN A 73.80.65.49
+caa01 3600 IN CAA 0 issue "ca.example.net"
+caa02 3600 IN CAA 0 iodef "mailto:security@example.com"
+caa03 3600 IN CAA 0 iodef "http://iodef.example.com/"
+caa04 3600 IN CAA 0 issue "ca.example.net; account=230123"
+caa05 3600 IN CAA 0 issue "ca.example.net; policy=ev"
+caa06 3600 IN CAA 128 tbs "Unknown"
 cert01 3600 IN CERT 65534 65535 PRIVATEOID MxFcby9k/yvedMfQgKzhH5er0Mu/vILz 45IkskceFGgiWCn/GxHhai6VAuHAoNUz 4YoU1tVfSCSqQYn6//11U6Nld80jEeC8 aTrO+KKmCaY=
 cname01 3600 IN CNAME cname-target.
 cname02 3600 IN CNAME cname-target