]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
added pkt_set_edns_do for DO bit
authorJelte Jansen <jeltejan@NLnetLabs.nl>
Tue, 24 May 2005 10:12:40 +0000 (10:12 +0000)
committerJelte Jansen <jeltejan@NLnetLabs.nl>
Tue, 24 May 2005 10:12:40 +0000 (10:12 +0000)
if resolver is set to dnssec mode, DO bit is set

ldns/packet.h
packet.c
resolver.c

index 49799feb8bb72cf3369a21d87df1b04c752c99e7..c2e05a57e5279b06cf0f0e6bf7c6ad4de78a5b44 100644 (file)
@@ -195,6 +195,8 @@ uint8_t ldns_pkt_edns_extended_rcode(const ldns_pkt *packet);
 uint8_t ldns_pkt_edns_version(const ldns_pkt *packet);
 uint16_t ldns_pkt_edns_z(const ldns_pkt *packet);
 ldns_rdf *ldns_pkt_edns_data(const ldns_pkt *packet);
+bool ldns_pkt_edns_do(const ldns_pkt *packet);
+void ldns_pkt_set_edns_do(ldns_pkt *packet, bool value);
 
 /**
  * returns true if this packet needs and EDNS rr to be sent.
index 23fecf38af2ec396d1042f9f461786fa225a76b8..1009e7bf5bbd8f18fd20a6972dae37a60b157ad2 100644 (file)
--- a/packet.c
+++ b/packet.c
@@ -208,6 +208,22 @@ ldns_pkt_edns_z(const ldns_pkt *packet)
        return packet->_edns_z;
 }
 
+bool
+ldns_pkt_edns_do(const ldns_pkt *packet)
+{
+       return (packet->_edns_z & 0x8000);
+}
+
+void
+ldns_pkt_set_edns_do(ldns_pkt *packet, bool value)
+{
+       if (value) {
+               packet->_edns_z = packet->_edns_z | 0x8000;
+       } else {
+               packet->_edns_z = packet->_edns_z | 0x7fff;
+       }
+}
+
 ldns_rdf *
 ldns_pkt_edns_data(const ldns_pkt *packet)
 {
@@ -263,10 +279,17 @@ ldns_pkt_rr_list_by_type(ldns_pkt *packet, ldns_rr_type type, ldns_pkt_section s
        for(i = 0; i < ldns_rr_list_rr_count(rrs); i++) {
                if (type == ldns_rr_get_type(ldns_rr_list_rr(rrs, i))) {
                        /* types match */
-                       ldns_rr_list_push_rr(new, ldns_rr_list_rr(rrs, i));
+                       ldns_rr_list_push_rr(new, 
+                                            ldns_rr_deep_clone(
+                                               ldns_rr_list_rr(rrs, i))
+                                            );
                        ret = new;
                }
        }
+       if (!ret) { 
+               ldns_rr_list_free(new);
+       }
+
        return ret;
 }
 
index 4819a865bac5d676d3e8942f6c2f210be767c35e..5a7bff48c8ea5da88ec660f09322af223675e063 100644 (file)
@@ -434,6 +434,8 @@ ldns_resolver_new(void)
         */
        ldns_resolver_set_random(r, true);
 
+       ldns_resolver_set_debug(r, 0);
+       
        r->_timeout.tv_sec = LDNS_DEFAULT_TIMEOUT_SEC;
        r->_timeout.tv_usec = LDNS_DEFAULT_TIMEOUT_USEC;
 
@@ -686,6 +688,7 @@ ldns_resolver_send(ldns_pkt **answer, ldns_resolver *r, ldns_rdf *name,
        /* set DO bit if necessary */
        if (ldns_resolver_dnssec(r)) {
                ldns_resolver_set_edns_udp_size(r, 4096);
+               ldns_pkt_set_edns_do(query_pkt, true);
        }
 
        /* transfer the udp_edns_size from the resolver to the packet */