From: Amitay Isaacs Date: Wed, 14 Dec 2011 04:54:31 +0000 (+1100) Subject: samba-tool:dns: Add support for reverse names (PTR records) X-Git-Tag: tevent-0.9.15~632 X-Git-Url: http://git.samba.org/?p=ddiss%2Fsamba.git;a=commitdiff_plain;h=ecbc747ca57e11538c872dfc977eebec8aa8807e samba-tool:dns: Add support for reverse names (PTR records) --- diff --git a/source4/scripting/python/samba/netcmd/dns.py b/source4/scripting/python/samba/netcmd/dns.py index 3c1bb981601..40c88f3470d 100644 --- a/source4/scripting/python/samba/netcmd/dns.py +++ b/source4/scripting/python/samba/netcmd/dns.py @@ -139,6 +139,8 @@ def dns_type_flag(rec_type): record_type = dnsp.DNS_TYPE_A elif rtype == 'AAAA': record_type = dnsp.DNS_TYPE_AAAA + elif rtype == 'PTR': + record_type = dnsp.DNS_TYPE_PTR elif rtype == 'NS': record_type = dnsp.DNS_TYPE_NS elif rtype == 'CNAME': @@ -326,6 +328,10 @@ def print_dns_record(outf, rec): mesg = 'Unknown: ' if rec.wType == dnsp.DNS_TYPE_A: mesg = 'A: %s' % (rec.data) + elif rec.wType == dnsp.DNS_TYPE_AAAA: + mesg = 'AAAA: %s' % (rec.data) + elif rec.wType == dnsp.DNS_TYPE_PTR: + mesg = 'PTR: %s' % (rec.data.str) elif rec.wType == dnsp.DNS_TYPE_NS: mesg = 'NS: %s' % (rec.data.str) elif rec.wType == dnsp.DNS_TYPE_CNAME: @@ -376,6 +382,19 @@ class AAAARecord(dnsserver.DNS_RPC_RECORD): self.dwTtlSeconds = ttl self.data = ip6_addr +class PTRRecord(dnsserver.DNS_RPC_RECORD): + def __init__(self, ptr, serial=1, ttl=900, rank=dnsp.DNS_RANK_ZONE, + node_flag=0): + super(PTRRecord, self).__init__() + self.wType = dnsp.DNS_TYPE_PTR + self.dwFlags = rank | node_flag + self.dwSerial = serial + self.dwTtleSeconds = ttl + ptr_name = dnsserver.DNS_RPC_NAME() + ptr_name.str = ptr + ptr_name.len = len(ptr) + self.data = ptr_name + class CNameRecord(dnsserver.DNS_RPC_RECORD): def __init__(self, cname, serial=1, ttl=900, rank=dnsp.DNS_RANK_ZONE, node_flag=0): @@ -471,11 +490,14 @@ def dns_record_match(dns_conn, server, zone, name, record_type, data): elif record_type == dnsp.DNS_TYPE_AAAA: if rec_match.data == data: found = True + elif record_type == dnsp.DNS_TYPE_PTR: + if rec_match.data.str.rstrip('.') == data.rstrip('.'): + found = True elif record_type == dnsp.DNS_TYPE_CNAME: - if rec_match.data == data: + if rec_match.data.str.rstrip('.') == data.rstrip('.'): found = True elif record_type == dnsp.DNS_TYPE_NS: - if rec_match.data == data: + if rec_match.data.str.rstrip('.') == data.rstrip('.'): found = True if found: @@ -717,7 +739,7 @@ class cmd_roothints(Command): class cmd_add_record(Command): """Add a DNS record""" - synopsis = '%prog ' + synopsis = '%prog ' takes_args = [ 'server', 'zone', 'name', 'rtype', 'data' ] @@ -729,6 +751,8 @@ class cmd_add_record(Command): 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: @@ -760,7 +784,7 @@ class cmd_add_record(Command): class cmd_update_record(Command): """Update a DNS record""" - synopsis = '%prog ' + synopsis = '%prog ' takes_args = [ 'server', 'zone', 'name', 'rtype', 'olddata', 'newdata' ] @@ -772,6 +796,8 @@ class cmd_update_record(Command): rec = ARecord(newdata) elif record_type == dnsp.DNS_TYPE_AAAA: rec = AAAARecord(newdata) + elif record_type == dnsp.DNS_TYPE_PTR: + rec = PTRRecord(newdata) elif record_type == dnsp.DNS_TYPE_CNAME: rec = CNameRecord(newdata) elif record_type == dnsp.DNS_TYPE_NS: @@ -812,7 +838,7 @@ class cmd_update_record(Command): class cmd_delete_record(Command): """Delete a DNS record""" - synopsis = '%prog ' + synopsis = '%prog ' takes_args = [ 'server', 'zone', 'name', 'rtype', 'data' ] @@ -824,6 +850,8 @@ class cmd_delete_record(Command): 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: