Пример #1
0
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;
}