]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
samba-tool: dns: Convert dns data in a string to DNS record
authorAmitay Isaacs <amitay@gmail.com>
Tue, 14 Feb 2012 02:19:36 +0000 (13:19 +1100)
committerAmitay Isaacs <amitay@gmail.com>
Tue, 21 Feb 2012 07:24:30 +0000 (18:24 +1100)
source4/scripting/python/samba/netcmd/dns.py

index 9607cd92fda4cf0a5a104b5bb12bea2bc43f5b0e..b566a34159f1f11477a567fe162048c0c9e52340 100644 (file)
@@ -471,6 +471,54 @@ class SRVRecord(dnsserver.DNS_RPC_RECORD):
         srv.nameTarget.len = len(target)
         self.data = srv
 
+
+# Convert data into a dns record
+def data_to_dns_record(record_type, data):
+    if record_type == dnsp.DNS_TYPE_A:
+        rec = ARecord(data)
+    elif record_type == dnsp.DNS_TYPE_AAAA:
+        rec = AAAARecord(data)
+    elif record_type == dnsp.DNS_TYPE_PTR:
+        rec = PTRRecord(data)
+    elif record_type == dnsp.DNS_TYPE_CNAME:
+        rec = CNameRecord(data)
+    elif record_type == dnsp.DNS_TYPE_NS:
+        rec = NSRecord(data)
+    elif record_type == dnsp.DNS_TYPE_MX:
+        tmp = data.split(' ')
+        if len(tmp) != 2:
+            raise CommandError('Data requires 2 elements - mail_server, preference')
+        mail_server = tmp[0]
+        preference = int(tmp[1])
+        rec = MXRecord(mail_server, preference)
+    elif record_type == dnsp.DNS_TYPE_SRV:
+        tmp = data.split(' ')
+        if len(tmp) != 4:
+            raise CommandError('Data requires 4 elements - server, port, priority, weight')
+        server = tmp[0]
+        port = int(tmp[1])
+        priority = int(tmp[2])
+        weight = int(tmp[3])
+        rec = SRVRecord(server, port, priority=priority, weight=weight)
+    elif record_type == dnsp.DNS_TYPE_SOA:
+        tmp = data.split(' ')
+        if len(tmp) != 7:
+            raise CommandError('Data requires 7 elements - nameserver, email, serial, '
+                               'refresh, retry, expire, minimumttl')
+        nameserver = tmp[0]
+        email = tmp[1]
+        serial = int(tmp[2])
+        refresh = int(tmp[3])
+        retry = int(tmp[4])
+        expire = int(tmp[5])
+        minimum = int(tmp[6])
+        rec = SOARecord(nameserver, email, serial=serial, refresh=refresh,
+                        retry=retry, expire=expire, minimum=minimum)
+    else:
+        raise CommandError('Unsupported record type')
+    return rec
+
+
 # Match a dns record with specified data
 def dns_record_match(dns_conn, server, zone, name, record_type, data):
     select_flags = dnsserver.DNS_RPC_VIEW_AUTHORITY_DATA