mirror of https://github.com/getdnsapi/getdns.git
Stub edns0 payload 1232 for IPv6 and 1432 for IPv4
This commit is contained in:
parent
484f98daf9
commit
6f6b8e65a2
|
@ -80,7 +80,7 @@ static void set_ub_limit_outstanding_queries(struct getdns_context*,
|
|||
uint16_t);
|
||||
static void set_ub_dnssec_allowed_skew(struct getdns_context*, uint32_t);
|
||||
static void set_ub_edns_maximum_udp_payload_size(struct getdns_context*,
|
||||
uint16_t);
|
||||
int);
|
||||
|
||||
/* Stuff to make it compile pedantically */
|
||||
#define RETURN_IF_NULL(ptr, code) if(ptr == NULL) return code;
|
||||
|
@ -625,7 +625,7 @@ getdns_context_create_with_extended_memory_functions(
|
|||
goto error;
|
||||
|
||||
result->dnssec_allowed_skew = 0;
|
||||
result->edns_maximum_udp_payload_size = 1232;
|
||||
result->edns_maximum_udp_payload_size = -1;
|
||||
result->dns_transport = GETDNS_TRANSPORT_UDP_FIRST_AND_FALL_BACK_TO_TCP;
|
||||
result->limit_outstanding_queries = 0;
|
||||
result->has_ta = priv_getdns_parse_ta_file(NULL, NULL);
|
||||
|
@ -1289,9 +1289,10 @@ error:
|
|||
|
||||
static void
|
||||
set_ub_edns_maximum_udp_payload_size(struct getdns_context* context,
|
||||
uint16_t value) {
|
||||
int value) {
|
||||
/* edns-buffer-size */
|
||||
set_ub_number_opt(context, "edns-buffer-size:", value);
|
||||
if (value >= 512 && value <= 65535)
|
||||
set_ub_number_opt(context, "edns-buffer-size:", (uint16_t)value);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1879,7 +1880,9 @@ priv_get_context_settings(getdns_context* context) {
|
|||
r |= getdns_dict_set_int(result, "limit_outstanding_queries", context->limit_outstanding_queries);
|
||||
r |= getdns_dict_set_int(result, "dnssec_allowed_skew", context->dnssec_allowed_skew);
|
||||
r |= getdns_dict_set_int(result, "follow_redirects", context->follow_redirects);
|
||||
r |= getdns_dict_set_int(result, "edns_maximum_udp_payload_size", context->edns_maximum_udp_payload_size);
|
||||
if (context->edns_maximum_udp_payload_size != -1)
|
||||
r |= getdns_dict_set_int(result, "edns_maximum_udp_payload_size",
|
||||
context->edns_maximum_udp_payload_size);
|
||||
r |= getdns_dict_set_int(result, "edns_extended_rcode", context->edns_extended_rcode);
|
||||
r |= getdns_dict_set_int(result, "edns_version", context->edns_version);
|
||||
r |= getdns_dict_set_int(result, "edns_do_bit", context->edns_do_bit);
|
||||
|
|
|
@ -118,7 +118,7 @@ struct getdns_context {
|
|||
uint8_t edns_extended_rcode;
|
||||
uint8_t edns_version;
|
||||
uint8_t edns_do_bit;
|
||||
uint16_t edns_maximum_udp_payload_size;
|
||||
int edns_maximum_udp_payload_size; /* -1 is unset */
|
||||
|
||||
getdns_update_callback update_callback;
|
||||
|
||||
|
|
31
src/stub.c
31
src/stub.c
|
@ -44,12 +44,15 @@
|
|||
#include "general.h"
|
||||
|
||||
static int
|
||||
getdns_make_query_pkt_buf(getdns_context *context, const char *name,
|
||||
uint16_t request_type, getdns_dict *extensions, uint8_t* buf, size_t* olen)
|
||||
getdns_make_query_pkt_buf(
|
||||
getdns_network_req *netreq, uint8_t *buf, size_t *olen)
|
||||
{
|
||||
uint32_t klass = GLDNS_RR_CLASS_IN;
|
||||
size_t len;
|
||||
|
||||
getdns_dns_req *dnsreq = netreq->owner;
|
||||
getdns_context *context = dnsreq->context;
|
||||
getdns_dict *extensions = dnsreq->extensions;
|
||||
|
||||
int dnssec_return_status
|
||||
= is_extension_set(extensions, "dnssec_return_status");
|
||||
int dnssec_return_only_secure
|
||||
|
@ -84,13 +87,16 @@ getdns_make_query_pkt_buf(getdns_context *context, const char *name,
|
|||
"add_opt_parameters", &add_opt_parameters) == GETDNS_RETURN_GOOD;
|
||||
|
||||
if (dnssec_extension_set) {
|
||||
edns_maximum_udp_payload_size = 1232;
|
||||
edns_maximum_udp_payload_size =
|
||||
netreq->upstream->addr.ss_family == AF_INET6 ? 1232 : 1432;
|
||||
edns_extended_rcode = 0;
|
||||
edns_version = 0;
|
||||
edns_do_bit = 1;
|
||||
} else {
|
||||
edns_maximum_udp_payload_size
|
||||
= context->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_extended_rcode = context->edns_extended_rcode;
|
||||
edns_version = context->edns_version;
|
||||
edns_do_bit = context->edns_do_bit;
|
||||
|
@ -121,8 +127,6 @@ getdns_make_query_pkt_buf(getdns_context *context, const char *name,
|
|||
len = *olen;
|
||||
*olen = 0;
|
||||
|
||||
(void) getdns_dict_get_int(extensions, "specify_class", &klass);
|
||||
|
||||
if (len < GLDNS_HEADER_SIZE)
|
||||
return GLDNS_WIREPARSE_ERR_BUFFER_TOO_SMALL;
|
||||
|
||||
|
@ -141,15 +145,16 @@ getdns_make_query_pkt_buf(getdns_context *context, const char *name,
|
|||
buf += GLDNS_HEADER_SIZE;
|
||||
|
||||
dname_len = len;
|
||||
if ((r = gldns_str2wire_dname_buf(name, buf, &dname_len))) return r;
|
||||
if ((r = gldns_str2wire_dname_buf(dnsreq->name, buf, &dname_len)))
|
||||
return r;
|
||||
len -= dname_len;
|
||||
*olen += dname_len;
|
||||
buf += dname_len;
|
||||
|
||||
if (len < 4)
|
||||
return GLDNS_WIREPARSE_ERR_BUFFER_TOO_SMALL;
|
||||
gldns_write_uint16(buf, request_type);
|
||||
gldns_write_uint16(buf + 2, klass);
|
||||
gldns_write_uint16(buf, netreq->request_type);
|
||||
gldns_write_uint16(buf + 2, netreq->request_class);
|
||||
len -= 4;
|
||||
*olen += 4;
|
||||
buf += 4;
|
||||
|
@ -466,8 +471,7 @@ stub_udp_write_cb(void *userarg)
|
|||
} else
|
||||
pkt_len = pkt_buf_len;
|
||||
|
||||
if (getdns_make_query_pkt_buf(dnsreq->context, dnsreq->name,
|
||||
netreq->request_type, dnsreq->extensions, pkt_buf, &pkt_len))
|
||||
if (getdns_make_query_pkt_buf(netreq, pkt_buf, &pkt_len))
|
||||
goto done;
|
||||
|
||||
netreq->query_id = ldns_get_random();
|
||||
|
@ -750,8 +754,7 @@ stub_tcp_write(int fd, getdns_tcp_state *tcp, getdns_network_req *netreq)
|
|||
pkt_len = pkt_buf_len - 2;
|
||||
|
||||
/* Construct query packet */
|
||||
if (getdns_make_query_pkt_buf(dnsreq->context, dnsreq->name,
|
||||
netreq->request_type,dnsreq->extensions,pkt + 2,&pkt_len))
|
||||
if (getdns_make_query_pkt_buf(netreq, pkt + 2, &pkt_len))
|
||||
return STUB_TCP_ERROR;
|
||||
|
||||
/* Prepend length short */
|
||||
|
|
Loading…
Reference in New Issue