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;
}
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;
}
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;
}
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,
};
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
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; i<rec1->data.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;
-}