]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
Make search paths work
authorWillem Toorop <willem@nlnetlabs.nl>
Wed, 15 Jan 2014 12:11:30 +0000 (13:11 +0100)
committerWillem Toorop <willem@nlnetlabs.nl>
Wed, 15 Jan 2014 12:11:30 +0000 (13:11 +0100)
+ Adapt ldns-mx to utilize search path
+ A compiler warning suppression (unused variable)

examples/ldns-mx.c
resolver.c

index 873cf55f87de7161ab8c3b42bf13b64583a62b0a..84d27c837f89a41defb58a15b431d2223a2b7155 100644 (file)
@@ -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);
        
index 16efc90f1a34638431e76b48e8f42d5826dc5bcd..1dff1a2a4e3c6dfce061ef633eaefaa8aa4b6230 100644 (file)
@@ -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