diff options
-rw-r--r-- | source4/scripting/python/samba/netcmd/dns.py | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/source4/scripting/python/samba/netcmd/dns.py b/source4/scripting/python/samba/netcmd/dns.py index b566a34159..f1adc06faa 100644 --- a/source4/scripting/python/samba/netcmd/dns.py +++ b/source4/scripting/python/samba/netcmd/dns.py @@ -519,8 +519,15 @@ def data_to_dns_record(record_type, data): return rec +# Match dns name (of type DNS_RPC_NAME) +def dns_name_equal(n1, n2): + return n1.str.rstrip('.').lower() == n2.str.rstrip('.').lower() + + # Match a dns record with specified data def dns_record_match(dns_conn, server, zone, name, record_type, data): + urec = data_to_dns_record(record_type, data) + select_flags = dnsserver.DNS_RPC_VIEW_AUTHORITY_DATA try: @@ -547,19 +554,40 @@ def dns_record_match(dns_conn, server, zone, name, record_type, data): found = False if record_type == dnsp.DNS_TYPE_A: - if rec.data == data: + if rec.data == urec.data: found = True elif record_type == dnsp.DNS_TYPE_AAAA: - if rec.data == data: + if rec.data == urec.data: found = True elif record_type == dnsp.DNS_TYPE_PTR: - if rec.data.str.rstrip('.').lower() == data.rstrip('.').lower(): + if dns_name_equal(rec.data, urec.data): found = True elif record_type == dnsp.DNS_TYPE_CNAME: - if rec.data.str.rstrip('.').lower() == data.rstrip('.').lower(): + if dns_name_equal(rec.data, urec.data): found = True elif record_type == dnsp.DNS_TYPE_NS: - if rec.data.str.rstrip('.').lower() == data.rstrip('.').lower(): + if dns_name_equal(rec.data, urec.data): + found = True + elif record_type == dnsp.DNS_TYPE_MX: + if dns_name_equal(rec.data.nameExchange, urec.data.nameExchange) and \ + rec.data.wPreference == urec.data.wPreference: + found = True + elif record_type == dnsp.DNS_TYPE_SRV: + if rec.data.wPriority == urec.data.wPriority and \ + rec.data.wWeight == urec.data.wWeight and \ + rec.data.wPort == urec.data.wPort and \ + dns_name_equal(rec.data.nameTarget, urec.data.nameTarget): + found = True + elif record_type == dnsp.DNS_TYPE_SOA: + if rec.data.dwSerialNo == urec.data.dwSerialNo and \ + rec.data.dwRefresh == urec.data.dwRefresh and \ + rec.data.dwRetry == urec.data.dwRetry and \ + rec.data.dwExpire == urec.data.dwExpire and \ + rec.data.dwMinimumTtl == urec.data.dwMinimumTtl and \ + dns_name_equal(rec.data.NamePrimaryServer, + urec.data.NamePrimaryServer) and \ + dns_name_equal(rec.data.ZoneAdministratorEmail, + urec.data.ZoneAdministratorEmail): found = True if found: rec_match = rec |