]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
added helper function to deal with nsecs: ldns_nsec_type_check and ldns_dname_interval
authorMiek Gieben <miekg@NLnetLabs.nl>
Tue, 29 Nov 2005 14:23:40 +0000 (14:23 +0000)
committerMiek Gieben <miekg@NLnetLabs.nl>
Tue, 29 Nov 2005 14:23:40 +0000 (14:23 +0000)
drill/chasetrace.c
drill/drill.c
drill/securetrace.c
higher.c
host2str.c
ldns/higher.h

index 0b311f6056b78f2da3d4ac292d1de8fd4bdb271e..cf88ad1cb21821b22618dd1a87334c09426346ce 100644 (file)
@@ -118,19 +118,15 @@ do_trace(ldns_resolver *local_res, ldns_rdf *name, ldns_rr_type t,
                         * no nameserver found!!! 
                         * try to resolve the names we do got 
                         */
-                       printf("nameserver %d\n", ldns_rr_list_rr_count(new_nss));
                        for(i = 0; i < ldns_rr_list_rr_count(new_nss); i++) {
                                /* get the name of the nameserver */
                                pop = ldns_rr_rdf(ldns_rr_list_rr(new_nss, i), 0);
-                               printf("pop %p\n", pop);
                                if (!pop) {
                                        break;
                                }
 
                                ldns_rr_list_print(stdout, new_nss);
-                               printf("pop -- ");
                                ldns_rdf_print(stdout, pop);
-                               printf("\n");
                                /* retrieve it's addresses */
                                ns_addr = ldns_rr_list_cat_clone(ns_addr,
                                        ldns_get_rr_list_addr_by_name(local_res, pop, c, 0));
index e34a4c722a307faa5388b47eb6f945f0dbb3cf59..f388d7bb094deaca22c81925cdf5597ad9c0b278 100644 (file)
@@ -367,9 +367,10 @@ main(int argc, char *argv[])
                type = LDNS_RR_TYPE_A;
        }
 
-       /* if we're asking for DNSSEC record, act as if -D with given */
+       /* if we're asking for DNSSEC records, act as if -D with given */
        if (type == LDNS_RR_TYPE_DNSKEY ||
-                       type == LDNS_RR_TYPE_RRSIG ||
+                       type == LDNS_RR_TYPE_RRSIG || 
+                       type == LDNS_RR_TYPE_DS || 
                        type == LDNS_RR_TYPE_NSEC) {
                qdnssec = true;
        }
index a183045c633f21fe10bc335202dfe90ec0939e80..47e2c5c9f77c05dcad0347002641951b68bea4f0 100644 (file)
@@ -62,7 +62,6 @@ do_secure_trace2(ldns_resolver *res, ldns_rdf *name, ldns_rr_type t,
        for(i = 1; i < 10 && chopped_dname[i - 1]; i++) {
                chopped_dname[i] = ldns_dname_left_chop(chopped_dname[i - 1]);  
        }
-       printf("%d i\n", i);
        chopped_dname[i] = NULL;
        dname_labels = i - 2; /* set this also before this last NULL */
 
index 9ee3ace6f90f538554d38c3edc7481b00e9eb02a..2cc75694d64a7e0e342cbbb5a667aaf4b0aa6086 100644 (file)
--- a/higher.c
+++ b/higher.c
@@ -402,3 +402,36 @@ ldns_update_send_simple_addr(const char *fqdn, const char *zone,
                ldns_pkt_free(u_pkt);
        return LDNS_STATUS_ERR;
 }
+
+bool
+ldns_nsec_type_check(ldns_rr *nsec, ldns_rr_type t)
+{
+       /* does the nsec cover the t given? */
+       /* copied from host2str.c line 465: ldns_rdf2buffer_str_nsec */
+        uint8_t window_block_nr;
+        uint8_t bitmap_length;
+        uint16_t type;
+        uint16_t pos = 0;
+        uint16_t bit_pos;
+       ldns_rdf *nsec_type_list = ldns_rr_rdf(nsec, 1); 
+       uint8_t *data = ldns_rdf_data(nsec_type_list);
+
+       while(pos < ldns_rdf_size(nsec_type_list)) {
+               window_block_nr = data[pos];
+               bitmap_length = data[pos+1];
+               pos += 2;
+
+               for (bit_pos = 0; bit_pos < (bitmap_length) * 8; bit_pos++) {
+                       if (ldns_get_bit(&data[pos], bit_pos)) {
+                               type = 256 * (uint16_t) window_block_nr + bit_pos;
+
+                               if ((ldns_rr_type)type == t) {
+                                       /* we have a winner */
+                                       return true;
+                               }
+                       }
+               }
+               pos += (uint16_t) bitmap_length;
+       }
+       return false;
+}
index a0c6feba3e2f3a9770238c5e2302a79bbe22814d..dd91a6fbcf639e8fc6d641507c3c5fcaef2654a0 100644 (file)
@@ -455,6 +455,9 @@ ldns_rdf2buffer_str_wks(ldns_buffer *output, ldns_rdf *rdf)
 ldns_status
 ldns_rdf2buffer_str_nsec(ldns_buffer *output, ldns_rdf *rdf)
 {
+       /* Note: this code is duplicated in higher.c in 
+        * ldns_nsec_type_check() function
+        */
        uint8_t window_block_nr;
        uint8_t bitmap_length;
        uint16_t type;
index 27bac08ac86e452578e96ffa8f1e9b62bf1e2afa..3dbfbbddc41e84e37afef49434a600274f539317 100644 (file)
@@ -87,6 +87,14 @@ uint16_t ldns_getaddrinfo(ldns_resolver *res, ldns_rdf *node, ldns_rr_class c, l
  */
 ldns_rr_list *ldns_getaddrinfo_secure();
 
+/**
+ * Check if t is enumerated in the nsec type rdata
+ * \param[in] nsec the NSEC Record to look in
+ * \param[in] t the type to check for
+ * \return true when t is found, otherwise return false
+ */
+bool ldns_nsec_type_check(ldns_rr *nsec, ldns_rr_type t);
+
 /*
  * Send a "simple" update for an A or an AAAA RR.
  * \param[in] fqdn the update RR owner