From: Jelte Jansen Date: Tue, 24 May 2005 10:12:40 +0000 (+0000) Subject: added pkt_set_edns_do for DO bit X-Git-Tag: release-0.60^2~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dd6fc0fb350568eec121de76fd5b05e35f81eae0;p=thirdparty%2Fldns.git added pkt_set_edns_do for DO bit if resolver is set to dnssec mode, DO bit is set --- diff --git a/ldns/packet.h b/ldns/packet.h index 49799feb..c2e05a57 100644 --- a/ldns/packet.h +++ b/ldns/packet.h @@ -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. diff --git a/packet.c b/packet.c index 23fecf38..1009e7bf 100644 --- 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; } diff --git a/resolver.c b/resolver.c index 4819a865..5a7bff48 100644 --- a/resolver.c +++ b/resolver.c @@ -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 */