ldns_pkt * ldns_resolver_search(const ldns_resolver *r,const ldns_rdf *name, ldns_rr_type type, ldns_rr_class c, uint16_t flags) { char *str_dname; ldns_rdf *new_name; ldns_rdf **search_list; size_t i; ldns_pkt *p; str_dname = ldns_rdf2str(name); if (ldns_dname_str_absolute(str_dname)) { /* query as-is */ return ldns_resolver_query(r, name, type, c, flags); } else { search_list = ldns_resolver_searchlist(r); for (i = 0; i < ldns_resolver_searchlist_count(r); i++) { new_name = ldns_dname_cat_clone(name, search_list[i]); p = ldns_resolver_query(r, new_name, type, c, flags); ldns_rdf_free(new_name); if (p) { return p; } } } return NULL; }
ldns_pkt * ldns_resolver_query(const ldns_resolver *r, const ldns_rdf *name, ldns_rr_type type, ldns_rr_class c, uint16_t flags) { ldns_rdf *newname; ldns_pkt *pkt; ldns_status status; pkt = NULL; if (!ldns_resolver_defnames(r)) { status = ldns_resolver_send(&pkt, (ldns_resolver *)r, name, type, c, flags); if (status == LDNS_STATUS_OK) { return pkt; } else { if (pkt) { ldns_pkt_free(pkt); } fprintf(stderr, "error: %s\n", ldns_get_errorstr_by_id(status)); return NULL; } } if (!ldns_resolver_domain(r)) { /* _defnames is set, but the domain is not....?? */ status = ldns_resolver_send(&pkt, (ldns_resolver *)r, name, type, c, flags); if (status == LDNS_STATUS_OK) { return pkt; } else { if (pkt) { ldns_pkt_free(pkt); } return NULL; } } newname = ldns_dname_cat_clone((const ldns_rdf*)name, ldns_resolver_domain(r)); if (!newname) { if (pkt) { ldns_pkt_free(pkt); } return NULL; } status = ldns_resolver_send(&pkt, (ldns_resolver *)r, newname, type, c, flags); ldns_rdf_free(newname); return pkt; }
void covertests(ldns_rr_list *list, ldns_rdf *qname) { size_t i; ldns_rdf *smaller = qname; ldns_rdf *wcard = ldns_dname_new_frm_str("*"); for(i=0; i<ldns_dname_label_count(qname)+1; ++i) { check_cover(list, smaller); ldns_rdf* wcardchild = ldns_dname_cat_clone(wcard, smaller); check_cover(list, wcardchild); smaller = ldns_dname_left_chop(smaller); } /* check covers by weird names */ if(0) { check_cover(list, ldns_dname_new_frm_str("x.bar.example.")); check_cover(list, ldns_dname_new_frm_str("bar.example.")); } }