edns_do_bit defaults to 0 with stub

And better handling of including OPT RR in stub query
This commit is contained in:
Willem Toorop 2014-10-28 14:32:29 +01:00
parent f9195fde4d
commit d92dc8b460
2 changed files with 19 additions and 14 deletions

View File

@ -588,7 +588,7 @@ getdns_context_create_with_extended_memory_functions(
result->edns_extended_rcode = 0;
result->edns_version = 0;
result->edns_do_bit = 1;
result->edns_do_bit = 0;
result->extension = &result->mini_event.loop;
if ((r = getdns_mini_event_init(result, &result->mini_event)))
@ -1327,7 +1327,7 @@ getdns_context_set_edns_do_bit(struct getdns_context *context, uint8_t value)
{
RETURN_IF_NULL(context, GETDNS_RETURN_INVALID_PARAMETER);
/* only allow 1 */
if (value != 1) {
if (value != 0 and value != 1) {
return GETDNS_RETURN_CONTEXT_UPDATE_FAIL;
}

View File

@ -63,7 +63,8 @@ getdns_make_query_pkt_buf(const getdns_network_req *netreq, uint8_t *buf,
|| dnssec_return_only_secure || dnssec_return_validation_chain;
uint32_t edns_do_bit;
uint32_t edns_maximum_udp_payload_size;
int edns_maximum_udp_payload_size;
uint32_t get_edns_maximum_udp_payload_size;
uint32_t edns_extended_rcode;
uint32_t edns_version;
@ -93,35 +94,39 @@ getdns_make_query_pkt_buf(const getdns_network_req *netreq, uint8_t *buf,
edns_version = 0;
edns_do_bit = 1;
} else {
edns_maximum_udp_payload_size
= context->edns_maximum_udp_payload_size != -1
? context->edns_maximum_udp_payload_size
: netreq->upstream->addr.ss_family==AF_INET6 ? 1232 : 1432;
edns_maximum_udp_payload_size =
context->edns_maximum_udp_payload_size;
edns_extended_rcode = context->edns_extended_rcode;
edns_version = context->edns_version;
edns_do_bit = context->edns_do_bit;
if (have_add_opt_parameters) {
(void) getdns_dict_get_int(add_opt_parameters,
if (!getdns_dict_get_int(add_opt_parameters,
"maximum_udp_payload_size",
&edns_maximum_udp_payload_size);
&get_edns_maximum_udp_payload_size))
edns_maximum_udp_payload_size =
get_edns_maximum_udp_payload_size;
(void) getdns_dict_get_int(add_opt_parameters,
"extended_rcode", &edns_extended_rcode);
(void) getdns_dict_get_int(add_opt_parameters,
"version", &edns_version);
(void) getdns_dict_get_int(add_opt_parameters,
"do_bit", &edns_do_bit);
if (edns_maximum_udp_payload_size < 512)
edns_maximum_udp_payload_size = 512;
}
}
if (have_add_opt_parameters && getdns_dict_get_list(
add_opt_parameters, "options", &options) == GETDNS_RETURN_GOOD)
(void) getdns_list_get_length(options, &noptions);
with_opt = edns_do_bit || edns_maximum_udp_payload_size > 512
|| edns_extended_rcode != 0 || edns_version != 0
|| noptions;
with_opt = edns_do_bit != 0 || edns_maximum_udp_payload_size != -1 ||
edns_extended_rcode != 0 || edns_version != 0 || noptions;
*omax_udp_payload_size = edns_maximum_udp_payload_size =
! with_opt ? 512
: edns_maximum_udp_payload_size == -1 ?
netreq->upstream->addr.ss_family==AF_INET6 ? 1232 : 1432
: edns_maximum_udp_payload_size > 512 ?
edns_maximum_udp_payload_size : 512;
assert(buf);
assert(olen);