mirror of https://github.com/getdnsapi/getdns.git
edns_do_bit defaults to 0 with stub
And better handling of including OPT RR in stub query
This commit is contained in:
parent
f9195fde4d
commit
d92dc8b460
|
@ -588,7 +588,7 @@ getdns_context_create_with_extended_memory_functions(
|
||||||
|
|
||||||
result->edns_extended_rcode = 0;
|
result->edns_extended_rcode = 0;
|
||||||
result->edns_version = 0;
|
result->edns_version = 0;
|
||||||
result->edns_do_bit = 1;
|
result->edns_do_bit = 0;
|
||||||
|
|
||||||
result->extension = &result->mini_event.loop;
|
result->extension = &result->mini_event.loop;
|
||||||
if ((r = getdns_mini_event_init(result, &result->mini_event)))
|
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);
|
RETURN_IF_NULL(context, GETDNS_RETURN_INVALID_PARAMETER);
|
||||||
/* only allow 1 */
|
/* only allow 1 */
|
||||||
if (value != 1) {
|
if (value != 0 and value != 1) {
|
||||||
return GETDNS_RETURN_CONTEXT_UPDATE_FAIL;
|
return GETDNS_RETURN_CONTEXT_UPDATE_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
29
src/stub.c
29
src/stub.c
|
@ -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;
|
|| dnssec_return_only_secure || dnssec_return_validation_chain;
|
||||||
|
|
||||||
uint32_t edns_do_bit;
|
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_extended_rcode;
|
||||||
uint32_t edns_version;
|
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_version = 0;
|
||||||
edns_do_bit = 1;
|
edns_do_bit = 1;
|
||||||
} else {
|
} else {
|
||||||
edns_maximum_udp_payload_size
|
edns_maximum_udp_payload_size =
|
||||||
= context->edns_maximum_udp_payload_size != -1
|
context->edns_maximum_udp_payload_size;
|
||||||
? context->edns_maximum_udp_payload_size
|
|
||||||
: netreq->upstream->addr.ss_family==AF_INET6 ? 1232 : 1432;
|
|
||||||
edns_extended_rcode = context->edns_extended_rcode;
|
edns_extended_rcode = context->edns_extended_rcode;
|
||||||
edns_version = context->edns_version;
|
edns_version = context->edns_version;
|
||||||
edns_do_bit = context->edns_do_bit;
|
edns_do_bit = context->edns_do_bit;
|
||||||
|
|
||||||
if (have_add_opt_parameters) {
|
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",
|
"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,
|
(void) getdns_dict_get_int(add_opt_parameters,
|
||||||
"extended_rcode", &edns_extended_rcode);
|
"extended_rcode", &edns_extended_rcode);
|
||||||
(void) getdns_dict_get_int(add_opt_parameters,
|
(void) getdns_dict_get_int(add_opt_parameters,
|
||||||
"version", &edns_version);
|
"version", &edns_version);
|
||||||
(void) getdns_dict_get_int(add_opt_parameters,
|
(void) getdns_dict_get_int(add_opt_parameters,
|
||||||
"do_bit", &edns_do_bit);
|
"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(
|
if (have_add_opt_parameters && getdns_dict_get_list(
|
||||||
add_opt_parameters, "options", &options) == GETDNS_RETURN_GOOD)
|
add_opt_parameters, "options", &options) == GETDNS_RETURN_GOOD)
|
||||||
(void) getdns_list_get_length(options, &noptions);
|
(void) getdns_list_get_length(options, &noptions);
|
||||||
|
|
||||||
with_opt = edns_do_bit || edns_maximum_udp_payload_size > 512
|
with_opt = edns_do_bit != 0 || edns_maximum_udp_payload_size != -1 ||
|
||||||
|| edns_extended_rcode != 0 || edns_version != 0
|
edns_extended_rcode != 0 || edns_version != 0 || noptions;
|
||||||
|| 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(buf);
|
||||||
assert(olen);
|
assert(olen);
|
||||||
|
|
Loading…
Reference in New Issue