From: Miek Gieben Date: Thu, 9 Feb 2006 13:53:23 +0000 (+0000) Subject: ldns_resolver_search implemented, but not tested yet X-Git-Tag: release-1.1.0~358 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e57773566db47b22103ee98115d439aa92e424ab;p=thirdparty%2Fldns.git ldns_resolver_search implemented, but not tested yet --- diff --git a/Changelog b/Changelog index 42fa16eb..7875aa6a 100644 --- a/Changelog +++ b/Changelog @@ -15,6 +15,7 @@ XX Jan 2006: 1.1.0: ldns-team defines as the building of ldns itself. * Preliminary sha-256 support was added. Currently is your OpenSSL supports it, it is supported in the DS creation. + * ldns_resolver_search was implemented Drill: * -r was killed in favor of -o
which diff --git a/ldns/resolver.h b/ldns/resolver.h index 9aa29408..064f6915 100644 --- a/ldns/resolver.h +++ b/ldns/resolver.h @@ -504,7 +504,7 @@ ldns_status ldns_resolver_push_nameserver_rr_list(ldns_resolver *r, ldns_rr_list /** * Send the query for using the resolver and take the search list into account * The search algorithm is as follows: - * If the is absolute, try it as-is, otherwise apply the search list + * If the name is absolute, try it as-is, otherwise apply the search list * \param[in] *r operate using this resolver * \param[in] *rdf query for this name * \param[in] t query for this type (may be 0, defaults to A) @@ -544,7 +544,7 @@ ldns_status ldns_resolver_send_pkt(ldns_pkt **answer, const ldns_resolver *r, co * \return ldns_pkt* a packet with the reply from the nameserver * if _defnames is true the default domain will be added */ -ldns_pkt* ldns_resolver_query(ldns_resolver *r, const ldns_rdf *name, ldns_rr_type type, ldns_rr_class class, uint16_t flags); +ldns_pkt* ldns_resolver_query(const ldns_resolver *r, const ldns_rdf *name, ldns_rr_type type, ldns_rr_class class, uint16_t flags); /** diff --git a/resolver.c b/resolver.c index 21eca013..a5cfe119 100644 --- a/resolver.c +++ b/resolver.c @@ -714,16 +714,36 @@ ldns_pkt * ldns_resolver_search(const ldns_resolver *r,const ldns_rdf *name, ldns_rr_type type, ldns_rr_class class, uint16_t flags) { - r = r; - name = name; - type = type; - class = class; - flags = 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, class, 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, class, flags); + ldns_rdf_free(new_name); + if (p) { + return p; + } + } + } return NULL; } ldns_pkt * -ldns_resolver_query(ldns_resolver *r, const ldns_rdf *name, ldns_rr_type type, ldns_rr_class class, +ldns_resolver_query(const ldns_resolver *r, const ldns_rdf *name, ldns_rr_type type, ldns_rr_class class, uint16_t flags) { ldns_rdf *newname; @@ -733,7 +753,7 @@ ldns_resolver_query(ldns_resolver *r, const ldns_rdf *name, ldns_rr_type type, l pkt = NULL; if (!ldns_resolver_defnames(r)) { - status = ldns_resolver_send(&pkt, r, name, type, class, flags); + status = ldns_resolver_send(&pkt, (ldns_resolver *)r, name, type, class, flags); if (status == LDNS_STATUS_OK) { return pkt; } else { @@ -746,12 +766,7 @@ ldns_resolver_query(ldns_resolver *r, const ldns_rdf *name, ldns_rr_type type, l if (!ldns_resolver_domain(r)) { /* _defnames is set, but the domain is not....?? */ - status = ldns_resolver_send(&pkt, - r, - name, - type, - class, - flags); + status = ldns_resolver_send(&pkt, (ldns_resolver *)r, name, type, class, flags); if (status == LDNS_STATUS_OK) { return pkt; } else { @@ -769,7 +784,7 @@ ldns_resolver_query(ldns_resolver *r, const ldns_rdf *name, ldns_rr_type type, l } return NULL; } - status = ldns_resolver_send(&pkt, r, newname, type, class, flags); + status = ldns_resolver_send(&pkt, (ldns_resolver *)r, newname, type, class, flags); ldns_rdf_free(newname); return pkt; }