From 75c121f07a85b4029458f11b113a4655114af126 Mon Sep 17 00:00:00 2001 From: Jeremy Harris Date: Fri, 12 Oct 2018 20:07:44 +0100 Subject: [PATCH] Increase buffer size used for DNS responses. Bug 2329 --- doc/doc-txt/ChangeLog | 5 + src/exim_monitor/em_hdr.h | 9 +- src/src/dns.c | 6 +- src/src/exim.h | 12 - src/src/structs.h | 5 +- test/stderr/0020 | 550 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 568 insertions(+), 19 deletions(-) diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog index 6f16fed82..b4aae226f 100644 --- a/doc/doc-txt/ChangeLog +++ b/doc/doc-txt/ChangeLog @@ -137,6 +137,11 @@ JH/28 Bug 2314: Fire msg:fail:delivery event even when error is being ignored. JH/29 Bug 2322: A "fail" command in a non-system filter (file) now fires the msg:fail:internal event. Developement by Matthias Kurz. +JH/30 Bug 2329: Increase buffer size used for dns lookup from 2k, which was + far too smal for todays use of crypto signatures stored there. Go all + the way to the max DNS message size of 64kB, even though this might be + overmuch for IOT constrained device use. + Exim version 4.91 ----------------- diff --git a/src/exim_monitor/em_hdr.h b/src/exim_monitor/em_hdr.h index 67294368a..ada9f36b4 100644 --- a/src/exim_monitor/em_hdr.h +++ b/src/exim_monitor/em_hdr.h @@ -87,11 +87,12 @@ anything. */ #include -/* Includes from the main source of Exim. We need to have MAXPACKET defined for -the benefit of structs.h. One of these days I should tidy up this interface so -that this kind of kludge isn't needed. */ +/* Includes from the main source of Exim. One of these days I should tidy up +this interface so that this kind of kludge isn't needed. */ -#define MAXPACKET 1024 +#ifndef NS_MAXMSG +# define NS_MAXMSG 65535 +#endif typedef void hctx; #include "config.h" diff --git a/src/src/dns.c b/src/src/dns.c index 297b8b88d..0f0b435de 100644 --- a/src/src/dns.c +++ b/src/src/dns.c @@ -639,6 +639,10 @@ up nameservers that produce this error continually, so there is the option of providing a list of domains for which this is treated as a non-existent host. +The dns_answer structure is pretty big; enough to hold a max-sized DNS message +- so best allocated from fast-release memory. As of writing, all our callers +use a stack-auto variable. + Arguments: dnsa pointer to dns_answer structure name name to look up @@ -1101,7 +1105,7 @@ switch (type) && (h->rcode == NOERROR || h->rcode == NXDOMAIN) && ntohs(h->qdcount) == 1 && ntohs(h->ancount) == 0 && ntohs(h->nscount) >= 1) - dnsa->answerlen = MAXPACKET; + dnsa->answerlen = sizeof(dnsa->answer); for (rr = dns_next_rr(dnsa, &dnss, RESET_AUTHORITY); rr; rr = dns_next_rr(dnsa, &dnss, RESET_NEXT) diff --git a/src/src/exim.h b/src/src/exim.h index 0de0595b1..ca6221ffd 100644 --- a/src/src/exim.h +++ b/src/src/exim.h @@ -284,18 +284,6 @@ disabused of the notion. Luckily, since EX_OK is not used, it didn't matter.] */ #include -/* If arpa/nameser.h defines a maximum name server packet size, use it, -provided it is greater than 2048. Otherwise go for a default. PACKETSZ was used -for this, but it seems that NS_PACKETSZ is coming into use. */ - -#if defined(NS_PACKETSZ) && NS_PACKETSZ >= 2048 - #define MAXPACKET NS_PACKETSZ -#elif defined(PACKETSZ) && PACKETSZ >= 2048 - #define MAXPACKET PACKETSZ -#else - #define MAXPACKET 2048 -#endif - /* While IPv6 is still young the definitions of T_AAAA and T_A6 may not be included in arpa/nameser.h. Fudge them here. */ diff --git a/src/src/structs.h b/src/src/structs.h index 1ac455ca5..48f475a89 100644 --- a/src/src/structs.h +++ b/src/src/structs.h @@ -743,11 +743,12 @@ typedef struct { const uschar *data; /* pointer to data */ } dns_record; -/* Structure for holding the result of a DNS query. */ +/* Structure for holding the result of a DNS query. A touch over +64k big, so take care to release as soon as possible. */ typedef struct { int answerlen; /* length of the answer */ - uschar answer[MAXPACKET]; /* the answer itself */ + uschar answer[NS_MAXMSG]; /* the answer itself */ } dns_answer; /* Structure for holding the intermediate data while scanning a DNS answer diff --git a/test/stderr/0020 b/test/stderr/0020 index dc674fc69..7578b74c8 100644 --- a/test/stderr/0020 +++ b/test/stderr/0020 @@ -3,26 +3,576 @@ >>> looking up host name for 10.250.104.42 >>> IP address lookup yielded "manyhome.test.ex" >>> checking addresses for manyhome.test.ex +>>> 10.250.107.163 +>>> 10.250.109.49 +>>> 10.250.105.65 +>>> 10.250.105.225 +>>> 10.250.106.7 +>>> 10.250.107.0 +>>> 10.250.109.30 +>>> 10.250.110.11 +>>> 10.250.110.80 +>>> 10.250.111.143 +>>> 10.250.105.194 +>>> 10.250.106.43 +>>> 10.250.107.128 +>>> 10.250.107.199 +>>> 10.250.109.68 +>>> 10.250.110.153 +>>> 10.250.106.3 +>>> 10.250.107.91 +>>> 10.250.107.146 +>>> 10.250.108.234 +>>> 10.250.109.222 +>>> 10.250.111.36 +>>> 10.250.111.178 +>>> 10.250.105.97 +>>> 10.250.107.28 +>>> 10.250.107.41 +>>> 10.250.107.59 +>>> 10.250.107.63 +>>> 10.250.108.54 +>>> 10.250.109.34 +>>> 10.250.110.124 +>>> 10.250.105.0 +>>> 10.250.106.15 +>>> 10.250.107.207 +>>> 10.250.107.239 +>>> 10.250.110.166 +>>> 10.250.111.34 +>>> 10.250.109.196 +>>> 10.250.111.7 +>>> 10.250.111.33 +>>> 10.250.110.31 +>>> 10.250.110.40 +>>> 10.250.111.87 +>>> 10.250.111.179 +>>> 10.250.105.178 +>>> 10.250.108.171 +>>> 10.250.106.148 +>>> 10.250.106.221 +>>> 10.250.109.46 +>>> 10.250.109.144 +>>> 10.250.104.144 +>>> 10.250.104.72 +>>> 10.250.105.133 +>>> 10.250.105.214 +>>> 10.250.107.223 +>>> 10.250.108.205 +>>> 10.250.109.91 +>>> 10.250.105.228 +>>> 10.250.106.20 +>>> 10.250.106.198 +>>> 10.250.108.161 +>>> 10.250.108.184 +>>> 10.250.109.183 +>>> 10.250.110.189 +>>> 10.250.104.179 +>>> 10.250.105.111 +>>> 10.250.105.164 +>>> 10.250.108.39 +>>> 10.250.107.198 +>>> 10.250.109.137 +>>> 10.250.108.142 +>>> 10.250.110.192 +>>> 10.250.110.226 +>>> 10.250.111.226 +>>> 10.250.105.26 +>>> 10.250.106.92 +>>> 10.250.109.7 +>>> 10.250.109.207 +>>> 10.250.111.167 +>>> 10.250.106.171 +>>> 10.250.106.203 +>>> 10.250.110.8 +>>> 10.250.110.249 +>>> 10.250.110.151 +>>> 10.250.105.58 +>>> 10.250.109.8 +>>> 10.250.109.170 +>>> 10.250.104.63 +>>> 10.250.106.184 +>>> 10.250.107.49 +>>> 10.250.107.79 +>>> 10.250.109.40 +>>> 10.250.109.254 +>>> 10.250.111.203 +>>> 10.250.107.186 +>>> 10.250.110.24 +>>> 10.250.104.119 +>>> 10.250.106.242 +>>> 10.250.105.76 +>>> 10.250.106.206 +>>> 10.250.108.187 +>>> 10.250.110.179 +>>> 10.250.105.18 +>>> 10.250.106.91 +>>> 10.250.108.226 +>>> 10.250.111.247 >>> 10.250.104.51 +>>> 10.250.104.164 +>>> 10.250.104.247 +>>> 10.250.105.47 +>>> 10.250.105.155 +>>> 10.250.104.75 +>>> 10.250.111.128 +>>> 10.250.104.73 +>>> 10.250.105.69 +>>> 10.250.108.57 +>>> 10.250.109.214 +>>> 10.250.104.149 +>>> 10.250.104.170 +>>> 10.250.105.84 +>>> 10.250.107.149 +>>> 10.250.110.167 +>>> 10.250.110.238 >>> 10.250.104.17 +>>> 10.250.104.212 +>>> 10.250.107.179 +>>> 10.250.107.215 +>>> 10.250.109.192 +>>> 10.250.109.202 +>>> 10.250.111.243 +>>> 10.250.105.116 +>>> 10.250.111.93 +>>> 10.250.105.162 +>>> 10.250.108.1 +>>> 10.250.108.27 +>>> 10.250.111.81 +>>> 10.250.111.122 +>>> 10.250.106.56 +>>> 10.250.106.106 +>>> 10.250.107.69 +>>> 10.250.108.148 +>>> 10.250.109.217 +>>> 10.250.111.164 +>>> 10.250.111.180 +>>> 10.250.104.155 +>>> 10.250.107.74 +>>> 10.250.108.252 +>>> 10.250.110.198 +>>> 10.250.111.159 +>>> 10.250.104.198 +>>> 10.250.105.38 +>>> 10.250.107.8 +>>> 10.250.107.122 +>>> 10.250.109.111 >>> 10.250.104.2 +>>> 10.250.105.213 +>>> 10.250.106.36 +>>> 10.250.107.25 +>>> 10.250.110.175 +>>> 10.250.107.80 +>>> 10.250.108.137 +>>> 10.250.110.6 +>>> 10.250.110.119 +>>> 10.250.105.43 +>>> 10.250.105.171 +>>> 10.250.108.14 +>>> 10.250.105.120 +>>> 10.250.111.186 +>>> 10.250.111.215 +>>> 10.250.105.208 +>>> 10.250.108.240 +>>> 10.250.111.17 +>>> 10.250.104.116 +>>> 10.250.108.55 +>>> 10.250.105.174 +>>> 10.250.107.45 +>>> 10.250.109.134 +>>> 10.250.109.152 +>>> 10.250.110.174 +>>> 10.250.111.37 +>>> 10.250.104.210 +>>> 10.250.104.239 +>>> 10.250.104.255 +>>> 10.250.105.85 +>>> 10.250.109.200 +>>> 10.250.111.145 +>>> 10.250.108.135 +>>> 10.250.109.199 +>>> 10.250.104.196 +>>> 10.250.105.67 +>>> 10.250.105.102 +>>> 10.250.107.89 +>>> 10.250.109.77 +>>> 10.250.109.232 +>>> 10.250.110.3 +>>> 10.250.110.41 +>>> 10.250.108.13 +>>> 10.250.108.131 +>>> 10.250.109.154 +>>> 10.250.111.146 +>>> 10.250.105.7 +>>> 10.250.109.0 +>>> 10.250.111.249 +>>> 10.250.105.14 +>>> 10.250.106.235 +>>> 10.250.107.111 +>>> 10.250.109.161 +>>> 10.250.104.97 +>>> 10.250.104.113 +>>> 10.250.105.204 +>>> 10.250.106.250 +>>> 10.250.109.205 +>>> 10.250.110.65 +>>> 10.250.111.40 >>> 10.250.104.26 +>>> 10.250.104.125 +>>> 10.250.105.103 +>>> 10.250.106.100 +>>> 10.250.107.195 +>>> 10.250.108.73 +>>> 10.250.110.196 +>>> 10.250.108.192 +>>> 10.250.105.241 +>>> 10.250.108.64 +>>> 10.250.110.173 +>>> 10.250.105.28 +>>> 10.250.108.5 +>>> 10.250.111.191 +>>> 10.250.110.133 +>>> 10.250.111.89 +>>> 10.250.110.113 +>>> 10.250.111.244 +>>> 10.250.104.151 +>>> 10.250.104.237 +>>> 10.250.106.32 +>>> 10.250.106.65 +>>> 10.250.107.64 +>>> 10.250.108.56 +>>> 10.250.109.16 +>>> 10.250.104.120 +>>> 10.250.107.48 +>>> 10.250.110.90 +>>> 10.250.110.246 +>>> 10.250.104.124 +>>> 10.250.105.160 +>>> 10.250.106.122 +>>> 10.250.106.237 +>>> 10.250.107.4 +>>> 10.250.107.210 +>>> 10.250.108.11 +>>> 10.250.110.237 +>>> 10.250.106.71 +>>> 10.250.107.26 +>>> 10.250.110.19 +>>> 10.250.110.154 +>>> 10.250.105.23 +>>> 10.250.105.173 +>>> 10.250.106.181 +>>> 10.250.108.243 +>>> 10.250.110.168 +>>> 10.250.104.127 +>>> 10.250.105.183 +>>> 10.250.111.105 +>>> 10.250.107.118 +>>> 10.250.109.129 +>>> 10.250.111.216 +>>> 10.250.111.230 >>> 10.250.104.8 +>>> 10.250.109.153 +>>> 10.250.104.192 +>>> 10.250.108.238 +>>> 10.250.108.244 +>>> 10.250.108.251 +>>> 10.250.110.201 +>>> 10.250.106.118 +>>> 10.250.106.245 +>>> 10.250.108.105 +>>> 10.250.110.148 +>>> 10.250.105.16 +>>> 10.250.108.183 +>>> 10.250.111.41 +>>> 10.250.111.56 +>>> 10.250.105.238 +>>> 10.250.106.13 +>>> 10.250.111.73 >>> 10.250.104.18 >>> 10.250.104.25 +>>> 10.250.105.227 +>>> 10.250.108.147 +>>> 10.250.111.49 +>>> 10.250.104.115 +>>> 10.250.105.131 +>>> 10.250.106.233 +>>> 10.250.107.55 +>>> 10.250.104.76 +>>> 10.250.106.153 +>>> 10.250.109.75 +>>> 10.250.111.131 +>>> 10.250.111.142 +>>> 10.250.106.41 +>>> 10.250.108.86 +>>> 10.250.108.136 +>>> 10.250.104.231 +>>> 10.250.108.210 +>>> 10.250.108.212 +>>> 10.250.110.67 >>> 10.250.104.21 +>>> 10.250.106.6 +>>> 10.250.106.64 +>>> 10.250.107.43 +>>> 10.250.107.231 +>>> 10.250.111.44 +>>> 10.250.108.68 +>>> 10.250.109.147 +>>> 10.250.110.224 +>>> 10.250.111.181 +>>> 10.250.105.6 +>>> 10.250.106.68 +>>> 10.250.110.84 +>>> 10.250.110.120 +>>> 10.250.104.145 +>>> 10.250.105.202 +>>> 10.250.110.181 +>>> 10.250.105.153 +>>> 10.250.107.46 +>>> 10.250.109.188 +>>> 10.250.111.152 +>>> 10.250.104.185 +>>> 10.250.105.30 +>>> 10.250.111.60 +>>> 10.250.107.220 +>>> 10.250.109.231 +>>> 10.250.110.98 +>>> 10.250.111.238 >>> 10.250.104.39 +>>> 10.250.105.125 +>>> 10.250.107.9 +>>> 10.250.109.243 +>>> 10.250.111.51 +>>> 10.250.111.222 +>>> 10.250.104.187 +>>> 10.250.104.226 +>>> 10.250.106.50 +>>> 10.250.108.196 +>>> 10.250.110.122 +>>> 10.250.105.78 +>>> 10.250.105.106 +>>> 10.250.105.158 +>>> 10.250.106.154 +>>> 10.250.108.114 +>>> 10.250.109.240 +>>> 10.250.110.112 +>>> 10.250.106.141 +>>> 10.250.108.20 +>>> 10.250.108.145 +>>> 10.250.110.145 >>> 10.250.104.32 +>>> 10.250.105.137 +>>> 10.250.106.246 +>>> 10.250.107.194 +>>> 10.250.107.243 +>>> 10.250.109.48 +>>> 10.250.104.123 +>>> 10.250.107.84 +>>> 10.250.107.134 +>>> 10.250.109.11 +>>> 10.250.111.63 >>> 10.250.104.29 +>>> 10.250.105.91 +>>> 10.250.105.135 +>>> 10.250.105.192 +>>> 10.250.108.143 +>>> 10.250.109.108 +>>> 10.250.109.226 +>>> 10.250.110.96 +>>> 10.250.110.128 +>>> 10.250.106.72 +>>> 10.250.107.24 +>>> 10.250.109.167 +>>> 10.250.109.206 +>>> 10.250.105.223 +>>> 10.250.108.223 +>>> 10.250.109.112 +>>> 10.250.110.225 >>> 10.250.104.23 +>>> 10.250.104.251 +>>> 10.250.109.255 +>>> 10.250.111.235 +>>> 10.250.106.134 +>>> 10.250.106.137 +>>> 10.250.106.215 +>>> 10.250.108.36 +>>> 10.250.111.14 +>>> 10.250.106.158 +>>> 10.250.106.160 +>>> 10.250.109.238 +>>> 10.250.104.66 +>>> 10.250.105.34 >>> 10.250.104.43 +>>> 10.250.105.230 +>>> 10.250.106.234 +>>> 10.250.111.45 +>>> 10.250.107.138 +>>> 10.250.107.141 +>>> 10.250.110.5 +>>> 10.250.110.108 +>>> 10.250.110.185 +>>> 10.250.104.103 +>>> 10.250.107.85 +>>> 10.250.109.84 +>>> 10.250.106.164 +>>> 10.250.109.125 +>>> 10.250.111.172 +>>> 10.250.104.91 +>>> 10.250.109.230 +>>> 10.250.106.38 +>>> 10.250.111.114 +>>> 10.250.111.166 +>>> 10.250.105.218 +>>> 10.250.110.52 +>>> 10.250.110.64 +>>> 10.250.111.26 +>>> 10.250.108.246 +>>> 10.250.111.80 +>>> 10.250.104.114 +>>> 10.250.107.184 +>>> 10.250.108.80 +>>> 10.250.108.110 +>>> 10.250.106.12 +>>> 10.250.107.66 +>>> 10.250.107.150 +>>> 10.250.109.43 +>>> 10.250.104.70 +>>> 10.250.105.229 +>>> 10.250.106.48 +>>> 10.250.107.177 +>>> 10.250.110.123 +>>> 10.250.111.82 >>> 10.250.104.46 +>>> 10.250.109.159 +>>> 10.250.111.130 +>>> 10.250.104.225 +>>> 10.250.105.159 +>>> 10.250.106.83 +>>> 10.250.111.123 +>>> 10.250.105.60 +>>> 10.250.105.130 +>>> 10.250.108.0 +>>> 10.250.109.124 +>>> 10.250.110.95 +>>> 10.250.110.253 +>>> 10.250.111.24 +>>> 10.250.111.223 +>>> 10.250.107.124 +>>> 10.250.108.146 +>>> 10.250.110.21 +>>> 10.250.110.232 +>>> 10.250.105.144 +>>> 10.250.105.253 +>>> 10.250.108.72 +>>> 10.250.109.42 +>>> 10.250.106.10 +>>> 10.250.108.198 +>>> 10.250.104.154 +>>> 10.250.105.10 +>>> 10.250.105.166 +>>> 10.250.106.81 +>>> 10.250.106.155 +>>> 10.250.106.67 +>>> 10.250.106.140 +>>> 10.250.111.120 +>>> 10.250.104.216 +>>> 10.250.104.220 +>>> 10.250.107.98 +>>> 10.250.107.246 +>>> 10.250.106.142 +>>> 10.250.107.182 +>>> 10.250.108.206 +>>> 10.250.108.239 +>>> 10.250.109.130 +>>> 10.250.110.158 +>>> 10.250.111.236 +>>> 10.250.107.88 +>>> 10.250.110.126 +>>> 10.250.110.197 +>>> 10.250.110.223 +>>> 10.250.104.199 +>>> 10.250.106.74 +>>> 10.250.107.39 +>>> 10.250.107.240 +>>> 10.250.111.254 +>>> 10.250.104.214 +>>> 10.250.104.233 +>>> 10.250.105.24 +>>> 10.250.106.214 +>>> 10.250.110.92 +>>> 10.250.110.164 >>> 10.250.104.28 +>>> 10.250.104.118 +>>> 10.250.107.54 +>>> 10.250.107.158 +>>> 10.250.109.53 +>>> 10.250.109.82 +>>> 10.250.110.83 >>> 10.250.104.4 +>>> 10.250.106.161 +>>> 10.250.107.34 +>>> 10.250.107.112 +>>> 10.250.109.250 +>>> 10.250.111.158 +>>> 10.250.105.221 +>>> 10.250.107.214 +>>> 10.250.108.237 +>>> 10.250.110.46 +>>> 10.250.110.213 +>>> 10.250.110.241 +>>> 10.250.109.71 +>>> 10.250.111.65 +>>> 10.250.105.129 +>>> 10.250.105.150 +>>> 10.250.107.228 +>>> 10.250.104.95 +>>> 10.250.110.131 +>>> 10.250.109.171 >>> 10.250.104.41 +>>> 10.250.107.191 +>>> 10.250.109.203 +>>> 10.250.110.160 +>>> 10.250.105.250 +>>> 10.250.106.183 +>>> 10.250.111.208 >>> 10.250.104.15 +>>> 10.250.105.206 +>>> 10.250.107.225 +>>> 10.250.107.232 +>>> 10.250.111.177 >>> 10.250.104.14 +>>> 10.250.106.34 +>>> 10.250.107.44 +>>> 10.250.107.157 +>>> 10.250.108.19 +>>> 10.250.108.236 +>>> 10.250.111.59 +>>> 10.250.104.201 +>>> 10.250.108.83 +>>> 10.250.108.95 +>>> 10.250.108.163 +>>> 10.250.108.221 +>>> 10.250.109.220 +>>> 10.250.108.9 +>>> 10.250.109.86 +>>> 10.250.109.93 +>>> 10.250.104.223 +>>> 10.250.105.140 +>>> 10.250.106.16 +>>> 10.250.107.137 +>>> 10.250.108.120 +>>> 10.250.110.43 +>>> 10.250.111.140 >>> 10.250.104.45 +>>> 10.250.107.129 +>>> 10.250.110.242 +>>> 10.250.111.47 +>>> 10.250.106.193 +>>> 10.250.109.97 +>>> 10.250.104.153 +>>> 10.250.105.201 +>>> 10.250.107.175 +>>> 10.250.105.105 +>>> 10.250.111.151 >>> 10.250.104.42 OK >>> host in host_reject_connection? no (option unset) >>> host in sender_unqualified_hosts? no (option unset) -- 2.30.2