bool ldns_resolver_trusted_key(const ldns_resolver *r, ldns_rr_list * keys, ldns_rr_list * trusted_keys) { size_t i; bool result = false; ldns_rr_list * trust_anchors; ldns_rr * cur_rr; if (!r || !keys) { return false; } trust_anchors = ldns_resolver_dnssec_anchors(r); if (!trust_anchors) { return false; } for (i = 0; i < ldns_rr_list_rr_count(keys); i++) { cur_rr = ldns_rr_list_rr(keys, i); if (ldns_rr_list_contains_rr(trust_anchors, cur_rr)) { if (trusted_keys) { ldns_rr_list_push_rr(trusted_keys, cur_rr); } result = true; } } return result; }
/** match two rr lists */ static int match_list(ldns_rr_list* q, ldns_rr_list *p) { size_t i; if(ldns_rr_list_rr_count(q) != ldns_rr_list_rr_count(p)) { verbose(3, "rrlistcount different %d %d", (int)ldns_rr_list_rr_count(q), (int)ldns_rr_list_rr_count(p)); return 0; } for(i=0; i<ldns_rr_list_rr_count(q); i++) { if(matches_nolocation) { if(!ldns_rr_list_contains_rr(p, ldns_rr_list_rr(q, i))) { verbose(3, "rr %u not found", (unsigned)i); return 0; } } else { if(ldns_rr_compare(ldns_rr_list_rr(q, i), ldns_rr_list_rr(p, i)) != 0) { verbose(3, "rr %u different", (unsigned)i); return 0; } /* and check the ttl */ if(ldns_rr_ttl(ldns_rr_list_rr(q, i)) != ldns_rr_ttl(ldns_rr_list_rr(p, i))) { verbose(3, "rr %u ttl different", (unsigned)i); return 0; } } } return 1; }