From 14ffa0770b546d6d7939a23add7122383f08fde5 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Mon, 25 Apr 2016 16:36:44 +0100 Subject: [PATCH] Fix init of per server EDNS UDP packet size. --- CHANGELOG | 4 ++++ src/network.c | 5 ++++- src/option.c | 22 +++++++++------------- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index fced746..aa53fba 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -61,6 +61,10 @@ version 2.76 garbage dhcp-options being sent. Thanks to Marc Branchaud for spotting this. + Fix wrong value for EDNS UDP packet size when using + --servers-file to define upstream DNS servers. Thanks to + Scott Bonar for the bug report. + version 2.75 Fix reversion on 2.74 which caused 100% CPU use when a diff --git a/src/network.c b/src/network.c index 95998cc..da8a7f4 100644 --- a/src/network.c +++ b/src/network.c @@ -1409,7 +1409,6 @@ void add_update_server(int flags, serv->domain = domain_str; serv->next = next; serv->queries = serv->failed_queries = 0; - serv->edns_pktsz = daemon->edns_pktsz; #ifdef HAVE_LOOP serv->uid = rand32(); #endif @@ -1447,6 +1446,10 @@ void check_servers(void) { if (!(serv->flags & (SERV_LITERAL_ADDRESS | SERV_NO_ADDR | SERV_USE_RESOLV | SERV_NO_REBIND))) { + /* Init edns_pktsz for newly created server records. */ + if (serv->edns_pktsz == 0) + serv->edns_pktsz = daemon->edns_pktsz; + #ifdef HAVE_DNSSEC if (option_bool(OPT_DNSSEC_VALID)) { diff --git a/src/option.c b/src/option.c index df390b1..c66f401 100644 --- a/src/option.c +++ b/src/option.c @@ -4612,21 +4612,17 @@ void read_opts(int argc, char **argv, char *compile_opts) { struct server *tmp; for (tmp = daemon->servers; tmp; tmp = tmp->next) - { - tmp->edns_pktsz = daemon->edns_pktsz; - - if (!(tmp->flags & SERV_HAS_SOURCE)) - { - if (tmp->source_addr.sa.sa_family == AF_INET) - tmp->source_addr.in.sin_port = htons(daemon->query_port); + if (!(tmp->flags & SERV_HAS_SOURCE)) + { + if (tmp->source_addr.sa.sa_family == AF_INET) + tmp->source_addr.in.sin_port = htons(daemon->query_port); #ifdef HAVE_IPV6 - else if (tmp->source_addr.sa.sa_family == AF_INET6) - tmp->source_addr.in6.sin6_port = htons(daemon->query_port); + else if (tmp->source_addr.sa.sa_family == AF_INET6) + tmp->source_addr.in6.sin6_port = htons(daemon->query_port); #endif - } - } - } - + } + } + if (daemon->host_records) { struct host_record *hr;