From b7077203256aac45e64497614f58555b182d4a33 Mon Sep 17 00:00:00 2001 From: Douglas Bagnall Date: Sat, 29 May 2021 21:25:29 +1200 Subject: [PATCH] dns: merge dns_records_match and dns_record_match Signed-off-by: Douglas Bagnall Reviewed-by: Andrew Bartlett --- source4/dns_server/dlz_bind9.c | 2 +- source4/dns_server/dns_update.c | 8 ++-- source4/dns_server/dnsserver_common.c | 4 +- source4/dns_server/dnsserver_common.h | 4 +- source4/rpc_server/dnsserver/dnsdata.c | 66 -------------------------- 5 files changed, 9 insertions(+), 75 deletions(-) diff --git a/source4/dns_server/dlz_bind9.c b/source4/dns_server/dlz_bind9.c index dd514e8181a..78f69a4d635 100644 --- a/source4/dns_server/dlz_bind9.c +++ b/source4/dns_server/dlz_bind9.c @@ -1755,7 +1755,7 @@ static bool b9_record_match(struct dnsp_DnssrvRpcRecord *rec1, return true; } - return dns_records_match(rec1, rec2); + return dns_record_match(rec1, rec2); } /* diff --git a/source4/dns_server/dns_update.c b/source4/dns_server/dns_update.c index d1e7825bf07..10dfb1160d6 100644 --- a/source4/dns_server/dns_update.c +++ b/source4/dns_server/dns_update.c @@ -186,7 +186,7 @@ static WERROR check_one_prerequisite(struct dns_server *dns, W_ERROR_NOT_OK_RETURN(werror); for (i = 0; i < acount; i++) { - if (dns_records_match(rec, &ans[i])) { + if (dns_record_match(rec, &ans[i])) { found = true; break; } @@ -545,7 +545,7 @@ static WERROR handle_one_update(struct dns_server *dns, W_ERROR_NOT_OK_RETURN(werror); for (i = first; i < rcount; i++) { - if (!dns_records_match(&recs[i], &recs[rcount])) { + if (!dns_record_match(&recs[i], &recs[rcount])) { continue; } @@ -632,7 +632,7 @@ static WERROR handle_one_update(struct dns_server *dns, W_ERROR_NOT_OK_RETURN(werror); for (i = first; i < rcount; i++) { - if (dns_records_match(ns_rec, &recs[i])) { + if (dns_record_match(ns_rec, &recs[i])) { found = true; break; } @@ -650,7 +650,7 @@ static WERROR handle_one_update(struct dns_server *dns, W_ERROR_NOT_OK_RETURN(werror); for (i = first; i < rcount; i++) { - if (dns_records_match(del_rec, &recs[i])) { + if (dns_record_match(del_rec, &recs[i])) { recs[i] = (struct dnsp_DnssrvRpcRecord) { .wType = DNS_TYPE_TOMBSTONE, }; diff --git a/source4/dns_server/dnsserver_common.c b/source4/dns_server/dnsserver_common.c index 855323035fb..02f958b3c08 100644 --- a/source4/dns_server/dnsserver_common.c +++ b/source4/dns_server/dnsserver_common.c @@ -1273,8 +1273,8 @@ WERROR dns_common_name2dn(struct ldb_context *samdb, */ -bool dns_records_match(struct dnsp_DnssrvRpcRecord *rec1, - struct dnsp_DnssrvRpcRecord *rec2) +bool dns_record_match(struct dnsp_DnssrvRpcRecord *rec1, + struct dnsp_DnssrvRpcRecord *rec2) { int i; struct in6_addr rec1_in_addr6; diff --git a/source4/dns_server/dnsserver_common.h b/source4/dns_server/dnsserver_common.h index 4f451725508..c3ba369e3bf 100644 --- a/source4/dns_server/dnsserver_common.h +++ b/source4/dns_server/dnsserver_common.h @@ -78,8 +78,8 @@ WERROR dns_common_name2dn(struct ldb_context *samdb, struct ldb_dn **_dn); bool dns_name_equal(const char *name1, const char *name2); -bool dns_records_match(struct dnsp_DnssrvRpcRecord *rec1, - struct dnsp_DnssrvRpcRecord *rec2); +bool dns_record_match(struct dnsp_DnssrvRpcRecord *rec1, + struct dnsp_DnssrvRpcRecord *rec2); /* * For this routine, base_dn is generally NULL. The exception comes diff --git a/source4/rpc_server/dnsserver/dnsdata.c b/source4/rpc_server/dnsserver/dnsdata.c index c3787bc9dfe..002d9e622cc 100644 --- a/source4/rpc_server/dnsserver/dnsdata.c +++ b/source4/rpc_server/dnsserver/dnsdata.c @@ -1119,69 +1119,3 @@ int dns_name_compare(struct ldb_message * const *m1, struct ldb_message * const return strcasecmp(ptr1, ptr2); } - -bool dns_record_match(struct dnsp_DnssrvRpcRecord *rec1, struct dnsp_DnssrvRpcRecord *rec2) -{ - bool status; - int i; - - if (rec1->wType != rec2->wType) { - return false; - } - - switch(rec1->wType) { - case DNS_TYPE_TOMBSTONE: - return true; - - case DNS_TYPE_A: - return strcmp(rec1->data.ipv4, rec2->data.ipv4) == 0; - - case DNS_TYPE_NS: - return dns_name_equal(rec1->data.ns, rec2->data.ns); - - case DNS_TYPE_CNAME: - return dns_name_equal(rec1->data.cname, rec2->data.cname); - - case DNS_TYPE_SOA: - return dns_name_equal(rec1->data.soa.mname, rec2->data.soa.mname) && - dns_name_equal(rec1->data.soa.rname, rec2->data.soa.rname) && - rec1->data.soa.serial == rec2->data.soa.serial && - rec1->data.soa.refresh == rec2->data.soa.refresh && - rec1->data.soa.retry == rec2->data.soa.retry && - rec1->data.soa.expire == rec2->data.soa.expire && - rec1->data.soa.minimum == rec2->data.soa.minimum; - - case DNS_TYPE_PTR: - return dns_name_equal(rec1->data.ptr, rec2->data.ptr); - - case DNS_TYPE_MX: - return rec1->data.mx.wPriority == rec2->data.mx.wPriority && - dns_name_equal(rec1->data.mx.nameTarget, rec2->data.mx.nameTarget); - - case DNS_TYPE_TXT: - if (rec1->data.txt.count != rec2->data.txt.count) { - return false; - } - status = true; - for (i=0; idata.txt.count; i++) { - status = status && (strcmp(rec1->data.txt.str[i], - rec2->data.txt.str[i]) == 0); - } - return status; - - case DNS_TYPE_AAAA: - return strcmp(rec1->data.ipv6, rec2->data.ipv6) == 0; - - case DNS_TYPE_SRV: - return rec1->data.srv.wPriority == rec2->data.srv.wPriority && - rec1->data.srv.wWeight == rec2->data.srv.wWeight && - rec1->data.srv.wPort == rec2->data.srv.wPort && - dns_name_equal(rec1->data.srv.nameTarget, rec2->data.srv.nameTarget); - - default: - DEBUG(0, ("dnsserver: unhandled record type %u", rec1->wType)); - break; - } - - return false; -} -- 2.47.3