add DHCID
authorBob Halley <halley@dnspython.org>
Fri, 3 Nov 2006 23:29:19 +0000 (23:29 +0000)
committerBob Halley <halley@dnspython.org>
Fri, 3 Nov 2006 23:29:19 +0000 (23:29 +0000)
ChangeLog
dns/rdatatype.py
dns/rdtypes/IN/DHCID.py [new file with mode: 0644]
dns/rdtypes/IN/__init__.py
tests/example
tests/example1.good
tests/example2.good

index fc865a472586648d1bc4b4808cfc9c8a64d178f5..eb21452e479803c7aa5776056ca8f52a1cd7df6e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2006-11-03  Bob Halley  <halley@dnspython.org>
+
+       * dns/rdtypes/IN/DHCID.py: Added support for the DHCID RR type.
+
 2006-11-02  Bob Halley  <halley@dnspython.org>
 
        * dns/query.py (udp): Messages from unexpected sources can now be
index db4e353e66a9eb2bd01999dc36ddedeee7a7c372..19e8acb102eb8b28278c5120e0315d049e6a8ffd 100644 (file)
@@ -75,6 +75,7 @@ IPSECKEY = 45
 RRSIG = 46
 NSEC = 47
 DNSKEY = 48
+DHCID = 49
 SPF = 99
 UNSPEC = 103
 TKEY = 249
@@ -131,6 +132,7 @@ _by_text = {
     'RRSIG' : RRSIG,
     'NSEC' : NSEC,
     'DNSKEY' : DNSKEY,
+    'DHCID' : DHCID,
     'SPF' : SPF,
     'UNSPEC' : UNSPEC,
     'TKEY' : TKEY,
diff --git a/dns/rdtypes/IN/DHCID.py b/dns/rdtypes/IN/DHCID.py
new file mode 100644 (file)
index 0000000..a5fb69f
--- /dev/null
@@ -0,0 +1,60 @@
+# Copyright (C) 2006 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.exception
+
+class DHCID(dns.rdata.Rdata):
+    """DHCID record
+
+    @ivar data: the data (the content of the RR is opaque as far as the
+    DNS is concerned)
+    @type data: string
+    @see: RFC 4701"""
+
+    __slots__ = ['data']
+    
+    def __init__(self, rdclass, rdtype, data):
+        super(DHCID, self).__init__(rdclass, rdtype)
+        self.data = data
+
+    def to_text(self, origin=None, relativize=True, **kw):
+        return dns.rdata._base64ify(self.data)
+
+    def from_text(cls, rdclass, rdtype, tok, origin = None, relativize = True):
+        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])
+        b64 = ''.join(chunks)
+        data = b64.decode('base64_codec')
+        return cls(rdclass, rdtype, data)
+    
+    from_text = classmethod(from_text)
+
+    def to_wire(self, file, compress = None, origin = None):
+        file.write(self.data)
+        
+    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin = None):
+        data = wire[current : current + rdlen]
+        return cls(rdclass, rdtype, data)
+
+    from_wire = classmethod(from_wire)
+
+    def _cmp(self, other):
+       return cmp(self.data, other.data)
index fcc63b5920bf28abf0624b89d2a59663ae2278f0..ef1cfa12ce69a5dd252af9aa4cc5aecdb8c47c55 100644 (file)
@@ -19,11 +19,12 @@ __all__ = [
     'A',
     'AAAA',
     'APL',
+    'DHCID',
     'KX',
-    'PX',
     'NAPTR',
     'NSAP',
     'NSAP_PTR',
+    'PX',
     'SRV',
     'WKS',
 ]
index 0036afb8aee5e0be2b8f18848314904141da9be5..0e31d472b184581d8cf6ffba72d88790da01fe5f 100644 (file)
@@ -69,6 +69,12 @@ cname03                      CNAME   .
 $TTL 300       ; 5 minutes
 d                      A       73.80.65.49
 $TTL 3600      ; 1 hour
+dhcid01                        DHCID   ( AAIBY2/AuCccgoJbsaxcQc9TUapptP69l
+                                 OjxfNuVAA2kjEA= )
+dhcid02                        DHCID   ( AAEBOSD+XR3Os/0LozeXVqcNc7FwCfQdW
+                                 L3b/NaiUDlW2No= )
+dhcid03                        DHCID   ( AAABxLmlskllE0MVjd57zHcWmEH3pCQ6V
+                                  ytcKD//7es/deY= )
 dname01                        DNAME   dname-target.
 dname02                        DNAME   dname-target
 dname03                        DNAME   .
index f322a27564d7ddc69732ffc695e1f727914f75ce..5ec1d6cf8ac84efb8d6492d35dc10588586aaf28 100644 (file)
@@ -19,6 +19,9 @@ cname01 3600 IN CNAME cname-target.
 cname02 3600 IN CNAME cname-target
 cname03 3600 IN CNAME .
 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=
 dname01 3600 IN DNAME dname-target.
 dname02 3600 IN DNAME dname-target
 dname03 3600 IN DNAME .
index 5e52af12c7f9b27477f7bb496a85d9b3520229ad..914accb369b5117d49416adbde9408981aadb470 100644 (file)
@@ -19,6 +19,9 @@ cname01.example. 3600 IN CNAME cname-target.
 cname02.example. 3600 IN CNAME cname-target.example.
 cname03.example. 3600 IN CNAME .
 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=
 dname01.example. 3600 IN DNAME dname-target.
 dname02.example. 3600 IN DNAME dname-target.example.
 dname03.example. 3600 IN DNAME .