mirror of
https://github.com/samba-team/samba.git
synced 2025-07-27 07:42:04 +03:00
samba-tool: dns: Convert dns data into a dns record for comparison
and compare two dns records directly. Refactor dns name comparision as dns_name_equal().
This commit is contained in:
@ -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
|
||||
|
Reference in New Issue
Block a user