added cd flag to resolver structure, so that all queries made can have their cd bit set
flags = ldns_pkt_ra(packet) << 7
/*| ldns_pkt_z(packet) << 6*/
+ | ldns_pkt_ad(packet) << 5
+ | ldns_pkt_cd(packet) << 4
| ldns_pkt_rcode(packet);
ldns_buffer_write_u8(buffer, flags);
uint8_t _retrans;
/** \brief Wether to do DNSSEC */
bool _dnssec;
+ /** \brief Wether to set the CD bit on DNSSEC requests */
+ bool _dnssec_cd;
/** \brief Wether to use tcp */
bool _usevc;
/** \brief Wether to ignore the tc bit */
bool ldns_resolver_usevc(ldns_resolver *r);
bool ldns_resolver_fail(ldns_resolver *r);
bool ldns_resolver_dnssec(ldns_resolver *r);
+bool ldns_resolver_dnssec_cd(ldns_resolver *r);
bool ldns_resolver_igntc(ldns_resolver *r);
bool ldns_resolver_random(ldns_resolver *r);
size_t ldns_resolver_nameserver_count(ldns_resolver *r);
void ldns_resolver_set_usevc(ldns_resolver *r, bool b);
void ldns_resolver_set_dnsrch(ldns_resolver *r, bool b);
void ldns_resolver_set_dnssec(ldns_resolver *r, bool b);
+void ldns_resolver_set_dnssec_cd(ldns_resolver *r, bool b);
void ldns_resolver_set_retrans(ldns_resolver *r, uint8_t re);
void ldns_resolver_set_retry(ldns_resolver *r, uint8_t re);
void ldns_resolver_set_ip6(ldns_resolver *r, uint8_t i);
if (ldns_pkt2buffer_wire(qb, query_pkt) != LDNS_STATUS_OK) {
return LDNS_STATUS_ERR;
}
-
/* random should already be setup - isn't so bad
* if this isn't "good" random. Note that this
* changes the order in the resolver as well!
return r->_dnssec;
}
+bool
+ldns_resolver_dnssec_cd(ldns_resolver *r)
+{
+ return r->_dnssec_cd;
+}
+
bool
ldns_resolver_igntc(ldns_resolver *r)
{
r->_dnssec = d;
}
+void
+ldns_resolver_set_dnssec_cd(ldns_resolver *r, bool d)
+{
+ r->_dnssec_cd = d;
+}
+
void
ldns_resolver_set_igntc(ldns_resolver *r, bool i)
{
ldns_resolver_set_fail(r, false);
ldns_resolver_set_edns_udp_size(r, 0);
ldns_resolver_set_dnssec(r, false);
+ ldns_resolver_set_dnssec_cd(r, false);
ldns_resolver_set_ip6(r, false);
/* randomize the nameserver to be queried
if (ldns_resolver_dnssec(r)) {
ldns_resolver_set_edns_udp_size(r, 4096);
ldns_pkt_set_edns_do(query_pkt, true);
+ ldns_pkt_set_cd(query_pkt, ldns_resolver_dnssec_cd(r));
}
/* transfer the udp_edns_size from the resolver to the packet */