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 */
/* 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);
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;
}
}
}
(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