]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
ldns_resolver_search implemented, but not tested yet
authorMiek Gieben <miekg@NLnetLabs.nl>
Thu, 9 Feb 2006 13:53:23 +0000 (13:53 +0000)
committerMiek Gieben <miekg@NLnetLabs.nl>
Thu, 9 Feb 2006 13:53:23 +0000 (13:53 +0000)
Changelog
ldns/resolver.h
resolver.c

index 42fa16ebb773f14ec1fb972b2c39c0fccc7ff4fd..7875aa6a11a5d36e94bc0e17893fce9264224b08 100644 (file)
--- 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 <header bit mnemonic> which 
index 9aa29408056e285e5646d1a7f7f1f092c5ef27b4..064f6915ca7ea6451aa74af961652334acd8f234 100644 (file)
@@ -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);
 
 
 /** 
index 21eca0136050eb0d0572199d8542593268580cae..a5cfe119e913825ee79d4334ed9bc835e15bfe10 100644 (file)
@@ -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;
 }