From 2131ed55fc50c26420734503e360c27175a1d78f Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Wed, 15 Jan 2014 13:11:30 +0100 Subject: [PATCH] Make search paths work + Adapt ldns-mx to utilize search path + A compiler warning suppression (unused variable) --- examples/ldns-mx.c | 19 ++++++++++++++----- resolver.c | 19 +++++++++++++++---- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/examples/ldns-mx.c b/examples/ldns-mx.c index 873cf55f..84d27c83 100644 --- a/examples/ldns-mx.c +++ b/examples/ldns-mx.c @@ -40,6 +40,15 @@ main(int argc, char *argv[]) usage(stdout, argv[0]); exit(EXIT_FAILURE); } + if (! ldns_dname_str_absolute(argv[1]) && + ldns_dname_absolute(domain)) { + + /* ldns_dname_new_frm_str makes absolute dnames always! + * So deabsolutify domain. + * TODO: Create ldns_dname_new_frm_str_relative? Yuck! + */ + ldns_rdf_set_size(domain, ldns_rdf_size(domain) - 1); + } } /* create a new resolver from /etc/resolv.conf */ @@ -52,11 +61,11 @@ main(int argc, char *argv[]) /* use the resolver to send a query for the mx * records of the domain given on the command line */ - p = ldns_resolver_query(res, - domain, - LDNS_RR_TYPE_MX, - LDNS_RR_CLASS_IN, - LDNS_RD); + p = ldns_resolver_search(res, + domain, + LDNS_RR_TYPE_MX, + LDNS_RR_CLASS_IN, + LDNS_RD); ldns_rdf_deep_free(domain); diff --git a/resolver.c b/resolver.c index 16efc90f..1dff1a2a 100644 --- a/resolver.c +++ b/resolver.c @@ -995,25 +995,34 @@ ldns_resolver_search_status(ldns_pkt** pkt, ldns_rdf **search_list; size_t i; ldns_status s = LDNS_STATUS_OK; + ldns_rdf root_dname = { 1, LDNS_RDF_TYPE_DNAME, (void *)"" }; if (ldns_dname_absolute(name)) { /* query as-is */ return ldns_resolver_query_status(pkt, r, name, t, c, flags); } else if (ldns_resolver_dnsrch(r)) { 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]); + for (i = 0; i <= ldns_resolver_searchlist_count(r); i++) { + if (i == ldns_resolver_searchlist_count(r)) { + new_name = ldns_dname_cat_clone(name, + &root_dname); + } else { + new_name = ldns_dname_cat_clone(name, + search_list[i]); + } s = ldns_resolver_query_status(pkt, r, new_name, t, c, flags); ldns_rdf_free(new_name); - if (pkt) { - if (s == LDNS_STATUS_OK && *pkt && + if (pkt && *pkt) { + if (s == LDNS_STATUS_OK && ldns_pkt_get_rcode(*pkt) == LDNS_RCODE_NOERROR) { + return LDNS_STATUS_OK; } ldns_pkt_free(*pkt); + *pkt = NULL; } } } @@ -1346,6 +1355,8 @@ ldns_axfr_next(ldns_resolver *resolver) (int) ldns_pkt_get_rcode( resolver->_cur_axfr_pkt)); } +#else + (void)rcode; /* Suppress unused warning */ #endif /* we must now also close the socket, otherwise subsequent uses of the -- 2.47.3