Commit | Line | Data |
---|---|---|
14aa5a05 | 1 | $Cambridge: exim/doc/doc-txt/ChangeLog,v 1.400 2006/10/02 13:38:17 ph10 Exp $ |
495ae4b0 PH |
2 | |
3 | Change log file for Exim from version 4.21 | |
4 | ------------------------------------------- | |
5 | ||
944e9e9c TF |
6 | Exim version 4.64 |
7 | ----------------- | |
8 | ||
9 | TF/01 In the add_headers option to the mail command in an Exim filter, | |
10 | there was a bug that Exim would claim a syntax error in any | |
11 | header after the first one which had an odd number of characters | |
12 | in the field name. | |
13 | ||
2b1c6e3a PH |
14 | PH/01 If a server that rejects MAIL FROM:<> was the target of a sender |
15 | callout verification, Exim cached a "reject" for the entire domain. This | |
16 | is correct for most verifications, but it is not correct for a recipient | |
17 | verification with use_sender or use_postmaster set, because in that case | |
18 | the callout does not use MAIL FROM:<>. Exim now distinguishes the special | |
19 | case of MAIL FROM:<> rejection from other early rejections (e.g. | |
20 | rejection of HELO). When verifying a recipient using a non-null MAIL | |
21 | address, the cache is ignored if it shows MAIL FROM:<> rejection. | |
22 | Whatever the result of the callout, the value of the domain cache is | |
23 | left unchanged (for any other kind of callout, getting as far as trying | |
24 | RCPT means that the domain itself is ok). | |
25 | ||
1f872c80 PH |
26 | PH/02 Tidied a number of unused variable and signed/unsigned warnings that |
27 | gcc 4.1.1 threw up. | |
28 | ||
29 | PH/03 On Solaris, an unexpectedly close socket (dropped connection) can | |
30 | manifest itself as EPIPE rather than ECONNECT. When tidying away a | |
31 | session, the daemon ignores ECONNECT errors and logs others; it now | |
32 | ignores EPIPE as well. | |
33 | ||
d203e649 PH |
34 | PH/04 Applied Nico Erfurth's refactoring patch to tidy up mime.c |
35 | (quoted-printable decoding). | |
36 | ||
cc2ed8f7 | 37 | PH/05 Applied Nico Erfurth's refactoring patch to tidy up spool_mbox.c, and |
21a04aa3 | 38 | later the small subsequent patch to fix an introduced bug. |
f951fd57 | 39 | |
ddfcd446 PH |
40 | PH/06 Installed the latest Cygwin Makefile from the Cygwin maintainer. |
41 | ||
d45b1de8 PH |
42 | PH/07 There was no check for overflow in expansions such as ${if >{1}{4096M}}. |
43 | ||
44 | PH/08 An error is now given if message_size_limit is specified negative. | |
45 | ||
38a0a95f | 46 | PH/09 Applied and tidied up Jakob Hirsch's patch for allowing ACL variables |
641cb756 | 47 | to be given (somewhat) arbitrary names. |
38a0a95f | 48 | |
a2405d83 JJ |
49 | JJ/01 exipick 20060919.0, allow for arbitrary acl_ variables introduced |
50 | in 4.64-PH/09. | |
51 | ||
52 | JJ/02 exipick 20060919.0, --show-vars args can now be regular expressions, | |
53 | miscellaneous code fixes | |
54 | ||
6ea85e9a PH |
55 | PH/10 Added the log_reject_target ACL modifier to specify where to log |
56 | rejections. | |
57 | ||
26da7e20 PH |
58 | PH/11 Callouts were setting the name used for EHLO/HELO from $smtp_active_ |
59 | hostname. This is wrong, because it relates to the incoming message (and | |
60 | probably the interface on which it is arriving) and not to the outgoing | |
61 | callout (which could be using a different interface). This has been | |
62 | changed to use the value of the helo_data option from the smtp transport | |
63 | instead - this is what is used when a message is actually being sent. If | |
64 | there is no remote transport (possible with a router that sets up host | |
65 | addresses), $smtp_active_hostname is used. | |
6ea85e9a | 66 | |
14aa5a05 PH |
67 | PH/12 Installed Andrey Panin's patch to add a dovecot authenticator. Various |
68 | tweaks were necessary in order to get it to work: | |
69 | (a) The code assumed that strncpy() returns a negative number on buffer | |
70 | overflow, which isn't the case. Replaced with Exim's string_format() | |
71 | function. | |
72 | (b) There were several signed/unsigned issues. I just did the minimum | |
73 | hacking in of casts. There is scope for a larger refactoring. | |
74 | (c) The code used strcasecmp() which is not a standard C function. | |
75 | Replaced with Exim's strcmpic() function. | |
76 | (d) The code set only $1; it now sets $auth1 as well. | |
77 | (e) A simple test gave the error "authentication client didn't specify | |
78 | service in request". It would seem that Dovecot has changed its | |
79 | interface. Fortunately there's a specification; I followed it and | |
80 | changed what the client sends and it appears to be working now. | |
81 | ||
944e9e9c | 82 | |
478be7b0 SC |
83 | Exim version 4.63 |
84 | ----------------- | |
85 | ||
86 | SC/01 Use a glob alias rather than an array ref in eximstats generated | |
87 | parser. This improves both readability and performance. | |
88 | ||
89 | SC/02 Collect SpamAssassin and rejection statistics in eximstats. | |
90 | Don't display local sender or destination tables in eximstats unless | |
91 | there is data to show. | |
92 | Added average volumes into the eximstats top table text output. | |
93 | ||
94 | SC/03 Collect data on the number of addresses (recipients) as well | |
95 | as the number of messages in eximstats. | |
96 | ||
2b965a65 TF |
97 | TF/01 Correct an error in the documentation for the redirect router. Exim |
98 | does (usually) call initgroups() when daemonizing. | |
478be7b0 | 99 | |
45b91596 PH |
100 | TF/02 Call initgroups() when dropping privilege in exim.c, so that Exim runs |
101 | with consistent privilege compared to when running as a daemon. | |
478be7b0 | 102 | |
c59f5781 TF |
103 | TF/03 Note in the spec that $authenticated_id is not set for local |
104 | submissions from trusted users. | |
105 | ||
90fc3069 TF |
106 | TF/04 The ratelimit per_rcpt option now works correctly in acl_not_smtp. |
107 | Thanks to Dean Brooks <dean@iglou.com> for the patch. | |
108 | ||
6083aca0 TF |
109 | TF/05 Make it easier to get SMTP authentication and TLS/SSL support working |
110 | by adding some example configuration directives to the default | |
111 | configuration file. A little bit of work is required to uncomment the | |
112 | directives and define how usernames and passwords are checked, but | |
113 | there is now a framework to start from. | |
114 | ||
765b530f PH |
115 | PH/01 Added #define LDAP_DEPRECATED 1 to ldap.c because some of the "old" |
116 | functions that Exim currently uses aren't defined in ldap.h for OpenLDAP | |
117 | without this. I don't know how relevant this is to other LDAP libraries. | |
118 | ||
4e167a8c PH |
119 | PH/02 Add the verb name to the "unknown ACL verb" error. |
120 | ||
4608d683 PH |
121 | PH/03 Magnus Holmgren's patch for filter_prepend_home. |
122 | ||
b8dc3e4a PH |
123 | PH/03 Fixed Bugzilla #101: macro definition between ACLs doesn't work. |
124 | ||
5418e93b PH |
125 | PH/04 Applied Magnus Holmgren's patch to fix Bugzilla #98: transport's home |
126 | directory not expanded when it should be if an expanded home directory | |
127 | was set for the address (which is overridden by the transport). | |
128 | ||
b4a9bda2 PH |
129 | PH/05 Applied Alex Kiernan's patch to fix Bugzilla #99: a problem with |
130 | libradius. | |
131 | ||
45b91596 PH |
132 | PH/06 Added acl_not_smtp_start, based on Johannes Berg's patch, and set the |
133 | bit to forbid control=suppress_local_fixups in the acl_not_smtp ACL, | |
134 | because it is too late at that time, and has no effect. | |
135 | ||
5547e2c5 PH |
136 | PH/07 Changed ${quote_pgsql to quote ' as '' instead of \' because of a |
137 | security issue with \' (bugzilla #107). I could not use the | |
138 | PQescapeStringConn() function, because it needs a PGconn value as one of | |
139 | its arguments. | |
140 | ||
dbcef0ea PH |
141 | PH/08 When testing addresses using -bt, indicate those final addresses that |
142 | are duplicates that would not cause an additional delivery. At least one | |
143 | person was confused, thinking that -bt output corresponded to deliveries. | |
144 | (Suppressing duplicates isn't a good idea as you lose the information | |
145 | about possibly different redirections that led to the duplicates.) | |
146 | ||
25257489 PH |
147 | PH/09 Applied patch from Erik to use select() instead of poll() in spam.c on |
148 | systems where poll() doesn't work, in particular OS X. | |
149 | ||
c816d124 PH |
150 | PH/10 Added more information to debugging output for retry time not reached. |
151 | ||
a9ccd69a PH |
152 | PH/11 Applied patch from Arkadiusz Miskiewicz to apply a timeout to read |
153 | operations in malware.c. | |
154 | ||
75fa1910 PH |
155 | PH/12 Applied patch from Magnus Holmgren to include the "h" tag in Domain Keys |
156 | signatures. | |
157 | ||
a7d7aa58 PH |
158 | PH/13 If write_rejectlog was set false when logging was sent to syslog with |
159 | syslog_duplication set false, log lines that would normally be written | |
160 | both the the main log and to the reject log were not written to syslog at | |
161 | all. | |
162 | ||
42119b09 PH |
163 | PH/14 In the default configuration, change the use of "message" in ACL warn |
164 | statements to "add_header". | |
165 | ||
41609df5 PH |
166 | PH/15 Diagnose a filter syntax error for "seen", "unseen", or "noerror" if not |
167 | not followed by a command (e.g. "seen endif"). | |
168 | ||
a5bd321b PH |
169 | PH/16 Recognize SMTP codes at the start of "message" in ACLs and after :fail: |
170 | and :defer: in a redirect router. Add forbid_smtp_code to suppress the | |
171 | latter. | |
172 | ||
e85a7ad5 | 173 | PH/17 Added extra conditions to the default value of delay_warning_condition |
5dff5817 PH |
174 | so that it is now: |
175 | ||
e85a7ad5 PH |
176 | ${if or { \ |
177 | { !eq{$h_list-id:$h_list-post:$h_list-subscribe:}{} } \ | |
178 | { match{$h_precedence:}{(?i)bulk|list|junk} } \ | |
179 | { match{$h_auto-submitted:}{(?i)auto-generated|auto-replied} } \ | |
5dff5817 PH |
180 | }{no}{yes}} |
181 | ||
e85a7ad5 PH |
182 | The Auto-Submitted: and various List- headers are standardised, whereas I |
183 | don't think Precedence: ever was. | |
5dff5817 | 184 | |
d8fe1c03 PH |
185 | PH/18 Refactored debugging code in route_finduser() to show more information, |
186 | in particular, the error code if getpwnam() issues one. | |
187 | ||
16282d2b PH |
188 | PH/19 Added PQsetClientEncoding(conn, "SQL_ASCII") to the pgsql code module. |
189 | This is apparently needed in addition to the PH/07 change above to avoid | |
190 | any possible encoding problems. | |
191 | ||
35d40a98 PH |
192 | PH/20 Perl can change the locale. Exim was resetting it after a ${perl call, |
193 | but not after initializing Perl. | |
194 | ||
034d99ab PH |
195 | PH/21 Added a call to PQsetNoticeProcessor() to catch pgsql "notices" and |
196 | output them only if debugging. By default they are written stderr, | |
197 | apparently, which is not desirable. | |
198 | ||
6ec97b1b PH |
199 | PH/22 Added Alain Williams' LDAP patch to support setting REFERRALS=off on |
200 | queries. | |
201 | ||
e22ca4ac JJ |
202 | JJ/01 exipick: added --reverse (and -R synonym), --random, --size, --sort and |
203 | --not options | |
204 | ||
205 | JJ/02 exipick: rewrote --help documentation to hopefully make more clear. | |
206 | ||
33d73e3b PH |
207 | PH/23 Made -oMaa and -oMt work with -bh and -bs to pretend the connection is |
208 | authenticated or an ident call has been made. Suppress the default | |
209 | values for $authenticated_id and $authenticated_sender (but permit -oMai | |
210 | and -oMas) when testing with -bh. | |
211 | ||
9ecb03f3 PH |
212 | PH/24 Re-jigged the order of the tests in the default configuration so that the |
213 | tests for valid domains and recipients precede the DNS black list and CSA | |
214 | tests, on the grounds that those ones are more expensive. | |
215 | ||
084efe8d PH |
216 | PH/25 Exim was not testing for a space following SMTP commands such as EHLO |
217 | that require one. Thus, EHLORHUBARB was interpreted as a valid command. | |
218 | This bug exists in every version of Exim that I still have, right back to | |
219 | 0.12. | |
220 | ||
366fc9f0 PH |
221 | PH/26 (n)wildlsearch lookups are documented as being done case-insensitively. |
222 | However, an attempt to turn on case-sensitivity in a regex key by | |
223 | including (?-i) didn't work because the subject string was already | |
224 | lowercased, and the effects were non-intuitive. It turns out that a | |
225 | one-line patch can be used to allow (?-i) to work as expected. | |
226 | ||
c59f5781 | 227 | |
c887c79e TF |
228 | Exim version 4.62 |
229 | ----------------- | |
230 | ||
231 | TF/01 Fix the add_header change below (4.61 PH/55) which had a bug that (amongst | |
232 | other effects) broke the use of negated acl sub-conditions. | |
233 | ||
1cce3af8 PH |
234 | PH/01 ${readsocket now supports Internet domain sockets (modified John Jetmore |
235 | patch). | |
236 | ||
afb3eaaf PH |
237 | PH/02 When tcp-wrappers is called from Exim, it returns only "deny" or "allow". |
238 | "Deny" causes Exim to reject the incoming connection with a 554 error. | |
239 | Unfortunately, if there is a major crisis, such as a disk failure, | |
240 | tcp-wrappers gives "deny", whereas what one would like would be some | |
241 | kind of temporary error. A kludge has been added to help with this. | |
242 | Before calling hosts_ctl(), errno is set zero. If the result is "deny", a | |
243 | 554 error is used if errno is still zero or contains ENOENT (which occurs | |
244 | if either of the /etc/hosts.{allow,deny} files is missing). Otherwise, a | |
245 | 451 error is used. | |
246 | ||
e173618b PH |
247 | PH/03 Add -lutil to the default FreeBSD LIBS setting. |
248 | ||
dd16e114 PH |
249 | PH/04 Change PH/19 for 4.61 was too wide. It should not be applied to host |
250 | errors. Otherwise a message that provokes a temporary error (when other | |
251 | messages do not) can cause a whole host to time out. | |
252 | ||
f7fd3850 PH |
253 | PH/05 Batch deliveries by appendfile and pipe transports did not work when the |
254 | addresses were routed directly to files or pipes from a redirect router. | |
255 | File deliveries just didn't batch; pipe deliveries might have suffered | |
256 | odd errors. | |
257 | ||
d87df92c PH |
258 | PH/06 A failure to get a lock for a hints database would erroneously always say |
259 | "Failed to get write lock", even when it was really a read lock. | |
260 | ||
7e9f683d PH |
261 | PH/07 The appendfile transport was creating MBX lock files with a fixed mode |
262 | of 0600. This has been changed to use the value of the lockfile_mode | |
263 | option (which defaults to 0600). | |
264 | ||
bfad5236 PH |
265 | PH/08 Applied small patch from the Sieve maintainer. |
266 | ||
01c490df PH |
267 | PH/09 If maildir_quota_directory_regex was set to exclude (say) the .Trash |
268 | folder from quota calculations, a direct delivery into this folder messed | |
269 | up the contents of the maildirsize file. This was because the regex was | |
270 | used only to exclude .Trash (or whatever) when the size of the mailbox | |
271 | was calculated. There was no check that a delivery was happening into an | |
272 | excluded directory. This bug has been fixed by ignoring all quota | |
273 | processing for deliveries into excluded directories. | |
274 | ||
d6629cdc PH |
275 | PH/10 Added the maildirfolder_create_regex option to appendfile. |
276 | ||
1cce3af8 | 277 | |
214e2000 PH |
278 | Exim version 4.61 |
279 | ----------------- | |
280 | ||
281 | PH/01 The code for finding all the local interface addresses on a FreeBSD | |
282 | system running IPv6 was broken. This may well have applied to all BSD | |
283 | systems, as well as to others that have similar system calls. The broken | |
284 | code found IPv4 interfaces correctly, but gave incorrect values for the | |
285 | IPv6 interfaces. In particular, ::1 was not found. The effect in Exim was | |
286 | that it would not match correctly against @[] and not recognize the IPv6 | |
287 | addresses as local. | |
288 | ||
f9daeae0 PH |
289 | PH/02 The ipliteral router was not recognizing addresses of the form user@ |
290 | [ipv6:....] because it didn't know about the "ipv6:" prefix. | |
291 | ||
7e66e54d PH |
292 | PH/03 Added disable_ipv6. |
293 | ||
c8ea1597 PH |
294 | PH/04 Changed $reply_address to use the raw form of the headers instead of the |
295 | decoded form, because it is most often used to construct To: headers | |
296 | lines in autoreplies, and the decoded form may well be syntactically | |
297 | invalid. However, $reply_address has leading white space removed, and all | |
298 | newlines turned into spaces so that the autoreply transport does not | |
299 | grumble. | |
300 | ||
911f6fde PH |
301 | PH/05 If group was specified without a user on a router, and no group or user |
302 | was specified on a transport, the group from the router was ignored. | |
303 | ||
47ca6d6c PH |
304 | PH/06 Increased the number of ACL variables to 20 of each type, and arranged |
305 | for visible compile-time settings that can be used to change these | |
306 | numbers, for those that want even more. Backwards compatibility with old | |
307 | spool files has been maintained. However, going back to a previous Exim | |
308 | release will lost any variables that are in spool files. | |
309 | ||
ed0e9820 PH |
310 | PH/07 Two small changes when running in the test harness: increase delay when |
311 | passing a TCP/IP connection to a new process, in case the original | |
312 | process has to generate a bounce, and remove special handling of | |
313 | 127.0.0.2 (sic), which is no longer necessary. | |
314 | ||
eff37e47 PH |
315 | PH/08 Changed debug output of dbfn_open() flags from numbers to names, so as to |
316 | be the same on different OS. | |
317 | ||
1921d2ea PH |
318 | PH/09 Moved a debug statement in filter processing to avoid a race problem when |
319 | testing. | |
320 | ||
b3f69ca8 JJ |
321 | JJ/01 exipick: fixed bug where -b (brief) output option showed "Vars:" |
322 | whether --show-vars was specified or not | |
323 | ||
324 | JJ/02 exipick: Added support for new ACL variable spool format introduced | |
325 | in 4.61-PH/06 | |
326 | ||
424a1c63 PH |
327 | PH/10 Fixed another bug related to PH/04 above: if an incoming message had a |
328 | syntactically invalid From: or Reply-to: line, and a filter used this to | |
329 | generate an autoreply, and therefore failed to obtain an address for the | |
330 | autoreply, Exim could try to deliver to a non-existent relative file | |
331 | name, causing unrelated and misleading errors. What now happens is that | |
332 | it logs this as a hard delivery error, but does not attempt to create a | |
333 | bounce message. | |
334 | ||
7a100415 PH |
335 | PH/11 The exinext utility has a -C option for testing purposes, but although |
336 | the given file was scanned by exinext itself; it wasn't being passed on | |
337 | when Exim was called. | |
338 | ||
19b9dc85 PH |
339 | PH/12 In the smtp transport, treat an explicit ECONNRESET error the same as |
340 | an end-of-file indication when reading a command response. | |
341 | ||
309bd837 PH |
342 | PH/13 Domain literals for IPv6 were not recognized unless IPv6 support was |
343 | compiled. In many other places in Exim, IPv6 addresses are always | |
344 | recognized, so I have changed this. It also means that IPv4 domain | |
345 | literals of the form [IPV4:n.n.n.n] are now always recognized. | |
346 | ||
59e82a2a PH |
347 | PH/14 When a uid/gid is specified for the queryprogram router, it cannot be |
348 | used if the router is not running as root, for example, when verifying at | |
349 | ACL time, or when using -bh. The debugging output from this situation was | |
350 | non-existent - all you got was a failure to exec. I have made two | |
351 | changes: | |
352 | ||
353 | (a) Failures to set uid/gid, the current directory, or a process leader | |
354 | in a subprocess such as that created by queryprogram now generate | |
355 | suitable debugging ouput when -d is set. | |
356 | ||
357 | (b) The queryprogram router detects when it is not running as root, | |
358 | outputs suitable debugging information if -d is set, and then runs | |
359 | the subprocess without attempting to change uid/gid. | |
360 | ||
9edc04ce PH |
361 | PH/15 Minor change to Makefile for building test_host (undocumented testing |
362 | feature). | |
363 | ||
1349e1e5 PH |
364 | PH/16 As discussed on the list in Nov/Dec: Exim no longer looks at the |
365 | additional section of a DNS packet that returns MX or SRV records. | |
366 | Instead, it always explicitly searches for A/AAAA records. This avoids | |
367 | major problems that occur when a DNS server includes only records of one | |
368 | type (A or AAAA) in an MX/SRV packet. A byproduct of this change has | |
369 | fixed another bug: if SRV records were looked up and the corresponding | |
370 | address records were *not* found in the additional section, the port | |
371 | values from the SRV records were lost. | |
372 | ||
ea49d0e1 PH |
373 | PH/17 If a delivery to a pipe, file, or autoreply was deferred, Exim was not |
374 | using the correct key (the original address) when searching the retry | |
375 | rules in order to find which one to use for generating the retry hint. | |
376 | ||
064a94c9 PH |
377 | PH/18 If quota_warn_message contains a From: header, Exim now refrains from |
378 | adding the default one. Similarly, if it contains a Reply-To: header, the | |
379 | errors_reply_to option, if set, is not used. | |
380 | ||
727071f8 PH |
381 | PH/19 When calculating a retry time, Exim used to measure the "time since |
382 | failure" by looking at the "first failed" field in the retry record. Now | |
383 | it does not use this if it is later than than the arrival time of the | |
384 | message. Instead it uses the arrival time. This makes for better | |
385 | behaviour in cases where some deliveries succeed, thus re-setting the | |
386 | "first failed" field. An example is a quota failure for a huge message | |
387 | when small messages continue to be delivered. Without this change, the | |
388 | "time since failure" will always be short, possible causing more frequent | |
389 | delivery attempts for the huge message than are intended. | |
dd16e114 | 390 | [Note: This change was subsequently modified - see PH/04 for 4.62.] |
727071f8 | 391 | |
f78eb7c6 PH |
392 | PH/20 Added $auth1, $auth2, $auth3 to contain authentication data (as well as |
393 | $1, $2, $3) because the numerical variables can be reset during some | |
394 | expansion items (e.g. "match"), thereby losing the authentication data. | |
395 | ||
21c28500 PH |
396 | PH/21 Make -bV show the size of off_t variables so that the test suite can |
397 | decide whether to run tests for quotas > 2G. | |
398 | ||
399 | PH/22 Test the values given for quota, quota_filecount, quota_warn_threshold, | |
400 | mailbox_size, and mailbox_filecount in the appendfile transport. If a | |
401 | filecount value is greater than 2G or if a quota value is greater than 2G | |
402 | on a system where the size of off_t is not greater than 4, a panic error | |
403 | is given. | |
404 | ||
1688f43b PH |
405 | PH/23 When a malformed item such as 1.2.3/24 appears in a host list, it can |
406 | never match. The debug and -bh output now contains an explicit error | |
407 | message indicating a malformed IPv4 address or mask. | |
408 | ||
409 | PH/24 An host item such as 1.2.3.4/abc was being treated as the IP address | |
410 | 1.2.3.4 without a mask. Now it is not recognized as an IP address, and | |
411 | PH/23 above applies. | |
412 | ||
9675b384 PH |
413 | PH/25 Do not write to syslog when running in the test harness. The only |
414 | occasion when this arises is a failure to open the main or panic logs | |
415 | (for which there is an explicit test). | |
416 | ||
6a3f1455 PH |
417 | PH/26 Added the /no_tell option to "control=freeze". |
418 | ||
dac79d3e PH |
419 | PH/27 If a host name lookup failed very early in a connection, for example, if |
420 | the IP address matched host_lookup and the reverse lookup yielded a name | |
421 | that did not have a forward lookup, an error message of the form "no IP | |
422 | address found for host xxx.xxx.xxx (during SMTP connection from NULL)" | |
423 | could be logged. Now it outputs the IP address instead of "NULL". | |
1349e1e5 | 424 | |
5977a0b3 PH |
425 | PH/28 An enabling patch from MH: add new function child_open_exim2() which |
426 | allows the sender and the authenticated sender to be set when | |
427 | submitting a message from within Exim. Since child_open_exim() is | |
428 | documented for local_scan(), the new function should be too. | |
429 | ||
c91535f3 PH |
430 | PH/29 In GnuTLS, a forced expansion failure for tls_privatekey was not being |
431 | ignored. In both GnuTLS and OpenSSL, an expansion of tls_privatekey that | |
432 | results in an empty string is now treated as unset. | |
433 | ||
0d46a8c8 PH |
434 | PH/30 Fix eximon buffer overflow bug (Bugzilla #73). |
435 | ||
278c6e6c PH |
436 | PH/31 Added sender_verify_fail logging option. |
437 | ||
2cbb4081 PH |
438 | PH/32 In November 2003, the code in Exim that added an empty Bcc: header when |
439 | needed by RFC 822 but not by RFC 2822 was commented out. I have now | |
440 | tidied the source and removed it altogether. | |
441 | ||
3eef829e PH |
442 | PH/33 When a queue run was abandoned because the load average was too high, a |
443 | log line was always written; now it is written only if the queue_run log | |
444 | selector is set. In addition, the log line for abandonment now contains | |
445 | information about the queue run such as the pid. This is always present | |
446 | in "start" and "stop" lines but was omitted from the "abandon" line. | |
447 | ||
1ab95fa6 PH |
448 | PH/34 Omit spaces between a header name and the colon in the error message that |
449 | is given when verify = headers_syntax fails (if there are lots of them, | |
450 | the message gets confusing). | |
451 | ||
230205fc PH |
452 | PH/35 Change the default for dns_check_names_pattern to allow slashes within |
453 | names, as there are now some PTR records that contain slashes. This check | |
454 | is only to protect against broken name servers that fall over on strange | |
455 | characters, so the fact that it applies to all lookups doesn't matter. | |
456 | ||
75e0e026 PH |
457 | PH/36 Now that the new test suite is complete, we can remove some of the |
458 | special code in Exim that was needed for the old test suite. For example, | |
459 | sorting DNS records because real resolvers return them in an arbitrary | |
460 | order. The new test suite's fake resolver always returns records in the | |
461 | same order. | |
462 | ||
463 | PH/37 When running in the test harness, use -odi for submitted messages (e.g. | |
464 | bounces) except when queue_only is set, to avoid logging races between | |
465 | the different processes. | |
466 | ||
145396a6 PH |
467 | PH/38 Panic-die if .include specifies a non-absolute path. |
468 | ||
3cd34f13 PH |
469 | PH/39 A tweak to the "H" retry rule from its user. |
470 | ||
11121d3d JJ |
471 | JJ/03 exipick: Removed parentheses from 'next' and 'last' calls that specified |
472 | a label. They prevented compilation on older perls. | |
473 | ||
474 | JJ/04 exipick: Refactored code to prevent implicit split to @_ which caused | |
475 | a warning to be raised on newish perls. | |
476 | ||
477 | JJ/05 exipick: Fixed bug where -bpc always showed a count of all messages | |
478 | on queue. Changes to match documented behaviour of showing count of | |
479 | messages matching specified criteria. | |
480 | ||
8def5aaf PH |
481 | PH/40 Changed the default ident timeout from 30s to 5s. |
482 | ||
929ba01c PH |
483 | PH/41 Added support for the use of login_cap features, on those BSD systems |
484 | that have them, for controlling the resources used by pipe deliveries. | |
485 | ||
2632889e PH |
486 | PH/42 The content-scanning code uses fopen() to create files in which to put |
487 | message data. Previously it was not paying any attention to the mode of | |
488 | the files. Exim runs with umask(0) because the rest of the code creates | |
489 | files with open(), and sets the required mode explicitly. Thus, these | |
490 | files were ending up world-writeable. This was not a big issue, because, | |
491 | being within the spool directory, they were not world-accessible. I have | |
492 | created a function called modefopen, which takes an additional mode | |
493 | argument. It sets umask(777), creates the file, chmods it to the required | |
494 | mode, then resets the umask. All the relevant calls to fopen() in the | |
495 | content scanning code have been changed to use this function. | |
496 | ||
944a9c55 PH |
497 | PH/43 If retry_interval_max is set greater than 24 hours, it is quietly reset |
498 | to 24 hours. This avoids potential overflow problems when processing G | |
499 | and H retry rules. I suspect nobody ever tinkers with this value. | |
500 | ||
4a23603b PH |
501 | PH/44 Added STRIP_COMMAND=/usr/bin/strip to the FreeBSD Makefile. |
502 | ||
4730f942 PH |
503 | PH/45 When the plaintext authenticator is running as a client, the server's |
504 | challenges are checked to ensure they are valid base64 strings. By | |
505 | default, the authentication attempt is cancelled if an invalid string is | |
506 | received. Setting client_ignore_invalid_base64 true ignores these errors. | |
507 | The decoded challenge strings are now placed in $auth1, $auth2, etc. as | |
508 | they are received. Thus, the responses can be made to depend on the | |
509 | challenges. If an invalid string is ignored, an empty string is placed in | |
510 | the variable. | |
511 | ||
30dba1e6 PH |
512 | PH/46 Messages that are created by the autoreply transport now contains a |
513 | References: header, in accordance with RFCs 2822 and 3834. | |
514 | ||
382afc6b PH |
515 | PH/47 Added authenticated_sender_force to the smtp transport. |
516 | ||
a86229cf PH |
517 | PH/48 The ${prvs expansion was broken on systems where time_t was long long. |
518 | ||
50c99ba6 PH |
519 | PH/49 Installed latest patch from the Sieve maintainer. |
520 | ||
d35e429d PH |
521 | PH/50 When an Exim quota was set without a file count quota, and mailbox_size |
522 | was also set, the appendfile transport was unnecessarily scanning a | |
523 | directory of message files (e.g. for maildir delivery) to find the count | |
524 | of files (along with the size), even though it did not need this | |
525 | information. It now does the scan only if it needs to find either the | |
526 | size of the count of files. | |
527 | ||
f90d018c PH |
528 | PH/51 Added ${time_eval: to convert Exim time strings into seconds. |
529 | ||
75def545 PH |
530 | PH/52 Two bugs concerned with error handling when the smtp transport is |
531 | used in LMTP mode: | |
532 | ||
533 | (i) Exim was not creating retry information for temporary errors given | |
534 | for individual recipients after the DATA command when the smtp transport | |
535 | was used in LMTP mode. This meant that they could be retried too | |
536 | frequently, and not timed out correctly. | |
537 | ||
538 | (ii) Exim was setting the flag that allows error details to be returned | |
539 | for LMTP errors on RCPT commands, but not for LMTP errors for individual | |
540 | recipients that were returned after the DATA command. | |
541 | ||
542 | PH/53 This is related to PH/52, but is more general: for any failing address, | |
543 | when detailed error information was permitted to be returned to the | |
544 | sender, but the error was temporary, then after the final timeout, only | |
545 | "retry timeout exceeded" was returned. Now it returns the full error as | |
546 | well as "retry timeout exceeded". | |
547 | ||
c46782ef PH |
548 | PH/54 Added control=allow_auth_unadvertised, as it seems there are clients that |
549 | do this, and (what is worse) MTAs that accept it. | |
550 | ||
71fafd95 PH |
551 | PH/55 Added the add_header modified to ACLs. The use of "message" with "warn" |
552 | will now be deprecated. | |
553 | ||
2c5db4fd PH |
554 | PH/56 New os.c-cygwin from the Cygwin maintainer. |
555 | ||
9cf6b11a JJ |
556 | JJ/06 exipick: added --unsorted option to allow unsorted output in all output |
557 | formats (previously only available in exim formats via -bpr, -bpru, | |
558 | and -bpra. Now also available in native and exiqgrep formats) | |
559 | ||
560 | JJ/07 exipick: added --freeze and --thaw options to allow faster interaction | |
561 | with very large, slow to parse queues | |
562 | ||
563 | JJ/08 exipick: added ! as generic prefix to negate any criteria format | |
564 | ||
565 | JJ/09 exipick: miscellaneous performance enhancements (~24% improvements) | |
566 | ||
898d150f PH |
567 | PH/57 Tidies in SMTP dialogue display in debug output: (i) It was not showing |
568 | responses to authentication challenges, though it was showing the | |
569 | challenges; (ii) I've removed the CR characters from the debug output for | |
570 | SMTP output lines. | |
571 | ||
46218253 PH |
572 | PH/58 Allow for the insertion of a newline as well as a space when a string |
573 | is turned into more than one encoded-word during RFC 2047 encoding. The | |
574 | Sieve code now uses this. | |
575 | ||
e97957bc PH |
576 | PH/59 Added the following errors that can be detected in retry rules: mail_4xx, |
577 | data_4xx, lost_connection, tls_required. | |
578 | ||
81e509d7 PH |
579 | PH/60 When a VRFY deferred or FAILED, the log message rather than the user |
580 | message was being sent as an SMTP response. | |
581 | ||
3d240ff7 PH |
582 | PH/61 Add -l and -k options to exicyclog. |
583 | ||
b37c4101 PH |
584 | PH/62 When verifying, if an address was redirected to one new address, so that |
585 | verification continued, and the new address failed or deferred after | |
586 | having set something in $address_data, the value of $address_data was not | |
587 | passed back to the ACL. This was different to the case when no | |
588 | redirection occurred. The value is now passed back in both cases. | |
589 | ||
79378e0f PH |
590 | PH/63 Changed the macro HAVE_LOGIN_CAP (see PH/41 for this release above) to |
591 | HAVE_SETCLASSRESOURCES because there are different APIs in use that all | |
592 | use login_cap.h, so on its own it isn't the distinguishing feature. The | |
593 | new name refers directly to the setclassresources() function. | |
594 | ||
e49c7bb4 PH |
595 | PH/65 Added configuration files for NetBSD3. |
596 | ||
d114ec46 PH |
597 | PH/66 Updated OS/Makefile-HP-UX for gcc 4.1.0 with HP-UX 11. |
598 | ||
f3d7df6c PH |
599 | PH/67 Fixed minor infelicity in the sorting of addresses to ensure that IPv6 |
600 | is preferred over IPv4. | |
601 | ||
715ab376 PH |
602 | PH/68 The bounce_return_message and bounce_return_body options were not being |
603 | honoured for bounces generated during the reception of non-SMTP messages. | |
604 | In particular, this applied to messages rejected by the ACL. This bug has | |
605 | been fixed. However, if bounce_return_message is true and bounce_return_ | |
606 | body is false, the headers that are returned for a non-SMTP message | |
607 | include only those that have been read before the error was detected. | |
608 | (In the case of an ACL rejection, they have all been read.) | |
609 | ||
6b31b150 PH |
610 | PH/69 The HTML version of the specification is now built in a directory called |
611 | spec_html instead of spec.html, because the latter looks like a path with | |
612 | a MIME-type, and this confuses some software. | |
613 | ||
614 | PH/70 Catch two compiler warnings in sieve.c. | |
615 | ||
d515a917 PH |
616 | PH/71 Fixed an obscure and subtle bug (thanks Alexander & Matthias). The |
617 | function verify_get_ident() calls ip_connect() to connect a socket, but | |
618 | if the "connect()" function timed out, ip_connect() used to close the | |
619 | socket. However, verify_get_ident() also closes the socket later, and in | |
620 | between Exim writes to the log, which may get opened at this point. When | |
621 | the socket was closed in ip_connect(), the log could get the same file | |
622 | descriptor number as the socket. This naturally causes chaos. The fix is | |
623 | not to close the socket in ip_connect(); the socket should be closed by | |
624 | the function that creates it. There was only one place in the code where | |
625 | this was missing, in the iplookup router, which I don't think anybody now | |
626 | uses, but I've fixed it anyway. | |
627 | ||
9b8fadde PH |
628 | PH/72 Make dns_again_means_nonexist apply to lookups using gethostbyname() as |
629 | well as to direct DNS lookups. Otherwise the handling of names in host | |
630 | lists is inconsistent and therefore confusing. | |
631 | ||
214e2000 | 632 | |
5de37277 PH |
633 | Exim version 4.60 |
634 | ----------------- | |
635 | ||
cc38ddbf PH |
636 | PH/01 Two changes to the default runtime configuration: |
637 | ||
638 | (1) Move the checks for relay_from_hosts and authenticated clients from | |
639 | after to before the (commented out) DNS black list checks. | |
640 | ||
641 | (2) Add control=submission to the relay_from_hosts and authenticated | |
642 | clients checks, on the grounds that messages accepted by these | |
643 | statements are most likely to be submissions. | |
5de37277 | 644 | |
72fdd6ae PH |
645 | PH/02 Several tidies to the handling of ${prvs and ${prvscheck: |
646 | ||
647 | (1) Generate an error if the third argument for the ${prvs expansion is | |
648 | not a single digit. | |
649 | ||
650 | (2) Treat a missing third argument of ${prvscheck as if it were an empty | |
651 | string. | |
652 | ||
653 | (3) Reset the variables that are obtained from the first argument of | |
654 | ${prvscheck and used in the second argument before leaving the code, | |
655 | because their memory is reclaimed, so using them afterwards may do | |
656 | silly things. | |
657 | ||
658 | (4) Tidy up the code for expanding the arguments of ${prvscheck one by | |
659 | one (it's much easier than Tom thought :-). | |
660 | ||
661 | (5) Because of (4), we can now allow for the use of $prvscheck_result | |
662 | inside the third argument. | |
cb9328de | 663 | |
cb741023 PH |
664 | PH/03 For some reason, the default setting of PATH when running a command from |
665 | a pipe transport was just "/usr/bin". I have changed it to | |
666 | "/bin:/usr/bin". | |
667 | ||
f174f16e PH |
668 | PH/04 SUPPORT_TRANSLATE_IP_ADDRESS and MOVE_FROZEN_MESSAGES did not cause |
669 | anything to be listed in the output from -bV. | |
b2f5a032 | 670 | |
c25242d7 PH |
671 | PH/05 When a filter generated an autoreply, the entire To: header line was |
672 | quoted in the delivery log line, like this: | |
673 | ||
674 | => >A.N.Other <ano@some.domain> <original@ddress> ... | |
675 | ||
676 | This has been changed so that it extracts the operative address. There | |
677 | may be more than one such address. If so, they are comma-separated, like | |
678 | this: | |
679 | ||
680 | => >ano@some.domain,ona@other.domain <original@ddress> ... | |
681 | ||
82c19f95 PH |
682 | PH/06 When a client host used a correct literal IP address in a HELO or EHLO |
683 | command, (for example, EHLO [1.2.3.4]) and the client's IP address was | |
684 | not being looked up in the rDNS to get a host name, Exim was showing the | |
685 | IP address twice in Received: lines, even though the IP addresses were | |
686 | identical. For example: | |
687 | ||
688 | Received: from [1.2.3.4] (helo=[1.2.3.4]) | |
689 | ||
690 | However, if the real host name was known, it was omitting the HELO data | |
691 | if it matched the actual IP address. This has been tidied up so that it | |
692 | doesn't show the same IP address twice. | |
693 | ||
d7ffbc12 PH |
694 | PH/07 When both +timestamp and +memory debugging was on, the value given by |
695 | $tod_xxx expansions could be wrong, because the tod_stamp() function was | |
696 | called by the debug printing, thereby overwriting the timestamp buffer. | |
697 | Debugging no longer uses the tod_stamp() function when +timestamp is set. | |
698 | ||
9f526266 PH |
699 | PH/08 When the original message was included in an autoreply transport, it |
700 | always said "this is a copy of the message, including all the headers", | |
701 | even if body_only or headers_only was set. It now gives an appropriate | |
702 | message. | |
703 | ||
87fcc8b9 PH |
704 | PH/09 Applied a patch from the Sieve maintainer which: |
705 | ||
706 | o fixes some comments | |
707 | o adds the (disabled) notify extension core | |
708 | o adds some debug output for the result of if/elsif tests | |
709 | o points to the current vacation draft in the documentation | |
710 | and documents the missing references header update | |
711 | ||
712 | and most important: | |
713 | ||
714 | o fixes a bug in processing the envelope test (when testing | |
715 | multiple envelope elements, the last element determinted the | |
716 | result) | |
717 | ||
456682f5 PH |
718 | PH/10 Exim was violating RFC 3834 ("Recommendations for Automatic Responses to |
719 | Electronic Mail") by including: | |
720 | ||
721 | Auto-submitted: auto-generated | |
722 | ||
723 | in the messages that it generates (bounce messages and others, such as | |
724 | warnings). In the case of bounce messages for non-SMTP mesages, there was | |
725 | also a typo: it was using "Auto_submitted" (underscore instead of | |
726 | hyphen). Since every message generated by Exim is necessarily in response | |
727 | to another message, thes have all been changed to: | |
728 | ||
729 | Auto-Submitted: auto-replied | |
730 | ||
731 | in accordance with these statements in the RFC: | |
732 | ||
733 | The auto-replied keyword: | |
734 | ||
735 | - SHOULD be used on messages sent in direct response to another | |
736 | message by an automatic process, | |
737 | ||
738 | - MUST NOT be used on manually-generated messages, | |
739 | ||
740 | - MAY be used on Delivery Status Notifications (DSNs) and Message | |
741 | Disposition Notifications (MDNs), | |
742 | ||
743 | - MUST NOT be used on messages generated by automatic or periodic | |
744 | processes, except for messages which are automatic responses to | |
745 | other messages. | |
746 | ||
3e46c1aa PH |
747 | PH/11 Added "${if def:sender_address {(envelope-from <$sender_address>)\n\t}}" |
748 | to the default Received: header definition. | |
456682f5 | 749 | |
49826d12 PH |
750 | PH/12 Added log selector acl_warn_skipped (default on). |
751 | ||
eba0c039 PH |
752 | PH/13 After a successful wildlsearch lookup, discard the values of numeric |
753 | variables because (a) they are in the wrong storage pool and (b) even if | |
754 | they were copied, it wouldn't work properly because of the caching. | |
755 | ||
a0d6ba8a PH |
756 | PH/14 Add check_rfc2047_length to disable enforcement of RFC 2047 length |
757 | checking when decoding. Apparently there are clients that generate | |
758 | overlong encoded strings. Why am I not surprised? | |
759 | ||
f0917727 PH |
760 | PH/15 If the first argument of "${if match_address" was not empty, but did not |
761 | contain an "@" character, Exim crashed. Now it writes a panic log message | |
762 | and treats the condition as false. | |
763 | ||
096fee00 PH |
764 | PH/16 In autoreply, treat an empty string for "once" the same as unset. |
765 | ||
024bd3c2 PH |
766 | PH/17 A further patch from the Sieve maintainer: "Introduce the new Sieve |
767 | extension "envelope-auth". The code is finished and in agreement with | |
768 | other implementations, but there is no documentation so far and in fact, | |
769 | nobody wrote the draft yet. This extension is currently #undef'ed, thus | |
770 | not changing the active code. | |
771 | ||
772 | Print executed "if" and "elsif" statements when debugging is used. This | |
773 | helps a great deal to understand what a filter does. | |
774 | ||
775 | Document more things not specified clearly in RFC3028. I had all this | |
776 | sorted out, when out of a sudden new issues came to my mind. Oops." | |
777 | ||
df199fec PH |
778 | PH/18 Exim was not recognizing the "net-" search type prefix in match_ip lists |
779 | (Bugzilla #53). | |
780 | ||
d27f1df3 PH |
781 | PH/19 Exim expands the IPv6 address given to -bh to its full non-abbreviated |
782 | canonical form (as documented). However, after a host name lookup from | |
783 | the IP address, check_host() was doing a simple string comparison with | |
784 | addresses acquired from the DNS when checking that the found name did | |
785 | have the original IP as one of its addresses. Since any found IPv6 | |
786 | addresses are likely to be in abbreviated form, the comparison could | |
787 | fail. Luckily, there already exists a function for doing the comparison | |
788 | by converting both addresses to binary, so now that is used instead of | |
789 | the text comparison. | |
790 | ||
96776534 PH |
791 | PH/20 There was another similar case to PH/19, when a complete host name was |
792 | given in a host list; looking up its IP address could give an abbreviated | |
793 | form, whereas the current host's name might or might not be abbreviated. | |
794 | The same fix has been applied. | |
795 | ||
5de37277 | 796 | |
9a799bc0 PH |
797 | Exim version 4.54 |
798 | ----------------- | |
799 | ||
800 | PH/01 The ${base62: operator adjusted itself to base 36 when BASE_62 was | |
801 | set to 36 (for Darwin and Cygwin), but the ${base62d: operator did not. | |
802 | It now does. | |
803 | ||
99a4b039 PH |
804 | PH/02 Two minor problems detected in Cygwin: the os.{c,h} files had lost */ on |
805 | the CVS lines, and there was a missing #if HAVE_IPV6 in host.c. | |
806 | ||
807 | PH/03 Typo: missing ".o" in src/pcre/Makefile. | |
808 | ||
4b233853 PH |
809 | PH/04 Tighten up "personal" tests: Instead of testing for any "List-" |
810 | header line, restrict the check to what is listed in RFCs 2369 and 2929. | |
811 | Also, for "Auto-Submitted", treat anything other than "no" as | |
812 | non-personal, in accordance with RFC 3834. (Previously it treated | |
813 | anything starting "auto-" as non-personal.) | |
814 | ||
8857ccfd PH |
815 | TF/01 The control=submission/name=... option had a problem with syntax |
816 | errors if the name included a slash character. The /name= option | |
817 | now slurps the rest of the string, so it can include any characters | |
818 | but it must come last in the list of options (after /sender_retain | |
819 | or /domain=). | |
820 | ||
433a2980 PH |
821 | PH/05 Some modifications to the interface to the fake nameserver for the new |
822 | testing suite. | |
823 | ||
3e46c1aa | 824 | |
9a799bc0 | 825 | |
e3a311ba TK |
826 | Exim version 4.53 |
827 | ----------------- | |
828 | ||
829 | TK/01 Added the "success_on_redirect" address verification option. See | |
830 | NewStuff for rationale and an example. | |
831 | ||
13b685f9 PH |
832 | PH/01 Added support for SQLite, basic code supplied by David Woodhouse. |
833 | ||
395ff96d PH |
834 | PH/02 Patch to exigrep to allow it to work on syslog lines. |
835 | ||
5b68f6e4 PH |
836 | PH/03 When creating an mbox file for a virus/spam scan, use fseek() instead of |
837 | fread() to skip over the body file's header line, because in Cygwin the | |
838 | header line is locked and is inaccessible. | |
839 | ||
1ab52c69 PH |
840 | PH/04 Added $message_exim_id, ultimately to replace $message_id (they will both |
841 | co-exist for some time) to make it clear that it is the Exim ID that is | |
842 | referenced, not the Message-ID: header line. | |
843 | ||
b07e6aa3 PH |
844 | PH/05 Replaced all Tom's calls to snprintf() with calls to the internal |
845 | string_format() function, because snprintf() does not exist on all | |
846 | operating systems. | |
847 | ||
254e032f PH |
848 | PH/06 The use of forbid_filter_existstest now also locks out the use of the |
849 | ${stat: expansion item. | |
850 | ||
3af76a81 PH |
851 | PH/07 Changed "SMTP protocol violation: synchronization error" into "SMTP |
852 | protocol synchronization error", to keep the pedants happy. | |
853 | ||
2548ba04 PH |
854 | PH/08 Arrange for USE_INET_NTOA_FIX to be set in config.h for AIX systems as |
855 | well as for IRIX systems, when gcc is being used. See the host.c source | |
856 | file for comments. | |
857 | ||
b6c6011d PH |
858 | PH/09 Installed latest Cygwin configuration files from the Cygwin maintainer. |
859 | ||
cf39cf57 PH |
860 | PH/10 Named domain lists were not working if used in a queue_smtp_domains |
861 | setting. | |
862 | ||
f1513293 PH |
863 | PH/11 Added support for the IGNOREQUOTA extension to LMTP, both to the lmtp |
864 | transport and to the smtp transport in LMTP mode. | |
865 | ||
727549a4 PH |
866 | TK/02 Remove one case of BASE64 error detection FTTB (undocumented anyway). |
867 | ||
af46795e PH |
868 | PH/12 There was a missing call to search_tidyup() before the fork() in rda.c to |
869 | run a filter in a subprocess. This could lead to confusion in subsequent | |
870 | lookups in the parent process. There should also be a search_tidyup() at | |
871 | the end of the subprocess. | |
872 | ||
d7b47fd0 PH |
873 | PH/13 Previously, if "verify = helo" was set in an ACL, the condition was true |
874 | only if the host matched helo_try_verify_hosts, which caused the | |
875 | verification to occur when the EHLO/HELO command was issued. The ACL just | |
876 | tested the remembered result. Now, if a previous verification attempt has | |
877 | not happened, "verify = helo" does it there and then. | |
878 | ||
ee744174 JJ |
879 | JJ/01 exipick: added $message_exim_id variable (see 4.53-PH/04) |
880 | ||
b582ab87 PH |
881 | TK/03 Fix log output including CR from clamd. |
882 | ||
41a13e0a PH |
883 | PH/14 A reference to $reply_address when Reply-to: was empty and From: did not |
884 | exist provoked a memory error which could cause a segfault. | |
885 | ||
f625cc5a PH |
886 | PH/15 Installed PCRE 6.2 |
887 | ||
888 | PH/17 Defined BIND_8_COMPAT in the Darwin os.h file. | |
889 | ||
21f7af35 PH |
890 | PH/18 Reversed 4.52/PH/17 because the HP-UX user found it wasn't the cause |
891 | of the problem. Specifically, suggested +O2 rather than +O1 for the | |
892 | HP-UX compiler. | |
893 | ||
31480e42 PH |
894 | PH/19 Added sqlite_lock_timeout option (David Woodhouse's patch). |
895 | ||
2d280592 PH |
896 | PH/20 If a delivery was routed to a non-standard port by means of an SRV |
897 | record, the port was not correctly logged when the outgoing_port log | |
898 | selector was set (it logged the transort's default port). | |
899 | ||
7cd1141b PH |
900 | PH/21 Added support for host-specific ports to manualroute, queryprogram, |
901 | fallback_hosts, and "hosts" in the smtp transport. | |
902 | ||
903 | PH/22 If the log selector "outgoing_port" is set, the port is now also given on | |
904 | host errors such as "Connection refused". | |
905 | ||
750af86e PH |
906 | PH/23 Applied a patch to fix problems with exim-4.52 while doing radius |
907 | authentication with radiusclient 0.4.9: | |
908 | ||
909 | - Error returned from rc_read_config was caught wrongly | |
910 | - Username/password not passed on to radius server due to wrong length. | |
911 | ||
912 | The presumption is that some radiusclient API changes for 4.51/PH/17 | |
913 | were not taken care of correctly. The code is still untested by me (my | |
914 | Linux distribution still has 0.3.2 of radiusclient), but it was | |
915 | contributed by a Radius user. | |
916 | ||
917 | PH/24 When doing a callout, the value of $domain wasn't set correctly when | |
918 | expanding the "port" option of the smtp transport. | |
919 | ||
4304270b TK |
920 | TK/04 MIME ACL: Fix buffer underrun that occurs when EOF condition is met |
921 | while reading a MIME header. Thanks to Tom Hughes for a patch. | |
922 | ||
750af86e PH |
923 | PH/24 Include config.h inside local_scan.h so that configuration settings are |
924 | available. | |
925 | ||
64ffc24f PH |
926 | PH/25 Make $smtp_command_argument available after all SMTP commands. This means |
927 | that in an ACL for RCPT (for example), you can examine exactly what was | |
928 | received. | |
929 | ||
5dd9625b PH |
930 | PH/26 Exim was recognizing IPv6 addresses of the form [IPv6:....] in EHLO |
931 | commands, but it was not correctly comparing the address with the actual | |
932 | client host address. Thus, it would show the EHLO address in Received: | |
933 | header lines when this was not necessary. | |
934 | ||
5591031b PH |
935 | PH/27 Added the % operator to ${eval:}. |
936 | ||
ba18e66a PH |
937 | PH/28 Exim tries to create and chdir to its spool directory when it starts; |
938 | it should be ignoring failures (because with -C, for example, it has lost | |
939 | privilege). It wasn't ignoring creation failures other than "already | |
940 | exists". | |
941 | ||
9cec981f PH |
942 | PH/29 Added "crypteq" to the list of supported features that Exim outputs when |
943 | -bV or -d is used. | |
944 | ||
aa2b5c79 PH |
945 | PH/30 Fixed (presumably very longstanding) bug in exim_dbmbuild: if it failed |
946 | because an input line was too long, either on its own, or by virtue of | |
1509d3a8 PH |
947 | too many continuations, the temporary file was not being removed, and the |
948 | return code was incorrect. | |
aa2b5c79 | 949 | |
48a53b7f PH |
950 | PH/31 Missing "BOOL" in function definition in filtertest.c. |
951 | ||
1c59d63b PH |
952 | PH/32 Applied Sieve patches from the maintainer. |
953 | ||
671012da TK |
954 | TK/05 Domainkeys: Accomodate for a minor API change in libdomainkeys 0.67. |
955 | ||
1509d3a8 PH |
956 | PH/33 Added "verify = not_blind". |
957 | ||
958 | PH/34 There are settings for CHOWN_COMMAND and MV_COMMAND that can be used in | |
959 | Local/Makefile (with some defaults set). These are used in built scripts | |
960 | such as exicyclog, but they have never been used in the exim_install | |
961 | script (though there are many overriding facilities there). I have | |
962 | arranged that the exim_install script now takes note of these two | |
963 | settings. | |
964 | ||
965 | PH/35 Installed configuration files for Dragonfly. | |
966 | ||
2fe1a124 PH |
967 | PH/36 When a locally submitted message by a trusted user did not contain a |
968 | From: header, and the sender address was obtained from -f or from an SMTP | |
969 | MAIL command, and the trusted user did not use -F to supply a sender | |
970 | name, $originator_name was incorrectly used when constructing a From: | |
971 | header. Furthermore, $originator_name was used for submission mode | |
972 | messages from external hosts without From: headers in a similar way, | |
973 | which is clearly wrong. | |
974 | ||
8800895a PH |
975 | PH/37 Added control=suppress_local_fixups. |
976 | ||
ccfdb010 PH |
977 | PH/38 When log_selector = +received_sender was set, and the addition of the |
978 | sender made the log line's construction buffer exactly full, or one byte | |
979 | less than full, an overflow happened when the terminating "\n" was | |
980 | subsequently added. | |
981 | ||
1130bfb0 PH |
982 | PH/39 Added a new log selector, "unknown_in_list", which provokes a log entry |
983 | when the result of a list match is failure because a DNS lookup failed. | |
984 | ||
ebcb507f PH |
985 | PH/40 RM_COMMAND is now used in the building process. |
986 | ||
c35e155c PH |
987 | PH/41 Added a "distclean" target to the top-level Makefile; it deletes all |
988 | the "build-* directories that it finds. | |
989 | ||
95d1f782 PH |
990 | PH/42 (But a TF fix): In a domain list, Exim incorrectly matched @[] if the IP |
991 | address in a domain literal was a prefix of an interface address. | |
992 | ||
fd6de02e PH |
993 | PH/43 (Again a TF fix): In the dnslookup router, do not apply widen_domains |
994 | when verifying a sender address, unless rewrite_headers is false. | |
995 | ||
58de37c5 PH |
996 | PH/44 Wrote a long comment about why errors_to addresses are verified as |
997 | recipients, not senders. | |
998 | ||
261cf466 TF |
999 | TF/01 Add missing LIBS=-lm to OS/Makefile-OpenBSD which was overlooked when |
1000 | the ratelimit ACL was added. | |
1001 | ||
3ee512ff PH |
1002 | PH/45 Added $smtp_command for the full command (cf $smtp_command_argument). |
1003 | ||
e08c430f PH |
1004 | PH/46 Added extra information about PostgreSQL errors to the error string. |
1005 | ||
bef5a11f PH |
1006 | PH/47 Added an interface to a fake DNS resolver for use by the new test suite, |
1007 | avoiding the need to install special zones in a real server. This is | |
1008 | backwards compatible; if it can't find the fake resolver, it drops back. | |
1009 | Thus, both old and new test suites can be run. | |
1010 | ||
7546de58 TF |
1011 | TF/02 Added util/ratelimit.pl |
1012 | ||
e5d5a95f TF |
1013 | TF/03 Minor fix to the ratelimit code to improve its behaviour in case the |
1014 | clock is set back in time. | |
1015 | ||
2e88a017 TF |
1016 | TF/04 Fix the ratelimit support in exim_fixdb. Patch provided by Brian |
1017 | Candler <B.Candler@pobox.com>. | |
1018 | ||
a5f65aa4 TF |
1019 | TF/05 The fix for PH/43 was not completely correct; widen_domains is always |
1020 | OK for addresses that are the result of redirections. | |
1021 | ||
e7726cbf PH |
1022 | PH/48 A number of further additions for the benefit of the new test suite, |
1023 | including a fake gethostbyname() that interfaces to the fake DNS resolver | |
1024 | (see PH/47 above). | |
1025 | ||
a7fdad5b TF |
1026 | TF/06 The fix for widen_domains has also been applied to qualify_single and |
1027 | search_parents which are the other dnslookup options that can cause | |
1028 | header rewrites. | |
1029 | ||
6af56900 PH |
1030 | PH/49 Michael Haardt's randomized retrying, but as a separate retry parameter |
1031 | type ("H"). | |
1032 | ||
0925ede6 PH |
1033 | PH/50 Make never_users, trusted_users, admin_groups, trusted_groups expandable. |
1034 | ||
66afa403 TF |
1035 | TF/07 Exim produced the error message "an SRV record indicated no SMTP |
1036 | service" if it encountered an MX record with an empty target hostname. | |
1037 | The message is now "an MX or SRV record indicated no SMTP service". | |
1038 | ||
0154e85a TF |
1039 | TF/08 Change PH/13 introduced the possibility that verify=helo may defer, |
1040 | if the DNS of the sending site is misconfigured. This is quite a | |
1041 | common situation. This change restores the behaviour of treating a | |
1042 | helo verification defer as a failure. | |
1043 | ||
16f12c76 PH |
1044 | PH/51 If self=fail was set on a router, the bounce message did not include the |
1045 | actual error message. | |
1046 | ||
bbe902f0 | 1047 | |
e5a9dba6 PH |
1048 | Exim version 4.52 |
1049 | ----------------- | |
1050 | ||
1051 | TF/01 Added support for Client SMTP Authorization. See NewStuff for details. | |
1052 | ||
22c3b60b PH |
1053 | PH/01 When a transport filter timed out in a pipe delivery, and the pipe |
1054 | command itself ended in error, the underlying message about the transport | |
1055 | filter timeout was being overwritten with the pipe command error. Now the | |
1056 | underlying error message should be appended to the second error message. | |
1057 | ||
06a9b4b5 PH |
1058 | TK/01 Fix poll() being unavailable on Mac OSX 10.2. |
1059 | ||
c1ac6996 PH |
1060 | PH/02 Reduce the amount of output that "make" produces by default. Full output |
1061 | can still be requested. | |
1062 | ||
9c7a242c PH |
1063 | PH/03 The warning log line about a condition test deferring for a "warn" verb |
1064 | was being output only once per connection, rather than after each | |
1065 | occurrence (because it was using the same function as for successful | |
1066 | "warn" verbs). This seems wrong, so I have changed it. | |
1067 | ||
87ba3f5f PH |
1068 | TF/02 Two buglets in acl.c which caused Exim to read a few bytes of memory that |
1069 | it should not have, which might have caused a crash in the right | |
1070 | circumstances, but probably never did. | |
1071 | ||
1072 | PH/04 Installed a modified version of Tony Finch's patch to make submission | |
1073 | mode fix the return path as well as the Sender: header line, and to | |
1074 | add a /name= option so that you can make the user's friendly name appear | |
1075 | in the header line. | |
1076 | ||
29aba418 TF |
1077 | TF/03 Added the control = fakedefer ACL modifier. |
1078 | ||
fe0dab11 TF |
1079 | TF/04 Added the ratelimit ACL condition. See NewStuff for details. Thanks to |
1080 | Mark Lowes for thorough testing. | |
870f6ba8 | 1081 | |
11d337a4 TK |
1082 | TK/02 Rewrote SPF support to work with libspf2 versions >1.2.0. |
1083 | ||
1084 | TK/03 Merged latest SRS patch from Miles Wilton. | |
1085 | ||
415c8f3b PH |
1086 | PH/05 There's a shambles in IRIX6 - it defines EX_OK in unistd.h which conflicts |
1087 | with the definition in sysexits.h (which is #included earlier). | |
1088 | Fortunately, Exim does not actually use EX_OK. The code used to try to | |
1089 | preserve the sysexits.h value, by assumimg that macro definitions were | |
1090 | scanned for macro replacements. I have been disabused of this notion, | |
1091 | so now the code just undefines EX_OK before #including unistd.h. | |
11d337a4 | 1092 | |
958541e9 PH |
1093 | PH/06 There is a timeout for writing blocks of data, set by, e.g. data_timeout |
1094 | in the smtp transport. When a block could not be written in a single | |
1095 | write() function, the timeout was being re-applied to each part-write. | |
1096 | This seems wrong - if the receiver was accepting one byte at a time it | |
1097 | would take for ever. The timeout is now adjusted when this happens. It | |
1098 | doesn't have to be particularly precise. | |
1099 | ||
c206415f TK |
1100 | TK/04 Added simple SPF lookup method in EXPERIMENTAL_SPF. See NewStuff for |
1101 | details. Thanks to Chris Webb <chris@arachsys.com> for the patch! | |
1102 | ||
2a4be8f9 PH |
1103 | PH/07 Added "fullpostmaster" verify option, which does a check to <postmaster> |
1104 | without a domain if the check to <postmaster@domain> fails. | |
1105 | ||
1cba11c5 SC |
1106 | SC/01 Eximstats: added -xls and the ability to specify output files |
1107 | (patch written by Frank Heydlauf). | |
1108 | ||
1109 | SC/02 Eximstats: use FileHandles for outputing results. | |
1110 | ||
1111 | SC/03 Eximstats: allow any combination of xls, txt, and html output. | |
1112 | ||
1113 | SC/04 Eximstats: fixed display of large numbers with -nvr option | |
1114 | ||
1115 | SC/05 Eximstats: fixed merging of reports with empty tables. | |
1116 | ||
1117 | SC/06 Eximstats: added the -include_original_destination flag | |
1118 | ||
1119 | SC/07 Eximstats: removed tabs and trailing whitespace. | |
1120 | ||
1005d00e TK |
1121 | TK/05 Malware: Improve on aveserver error handling. Patch from Alex Miller. |
1122 | ||
1123 | TK/06 MBOX spool code: Add real "From " MBOX separator line | |
1124 | so the .eml file is really in mbox format (even though | |
1125 | most programs do not really care). Patch from Alex Miller. | |
1126 | ||
1127 | TK/07 MBOX spool code: Add X-Envelope-From: and X-Envelope-To: headers. | |
1128 | The latter is generated from $received_to and is only set if the | |
1129 | message has one envelope recipient. SA can use these headers, | |
1130 | obviously out-of-the-box. Patch from Alex Miller. | |
1131 | ||
9b4768fa PH |
1132 | PH/08 The ${def test on a variable was returning false if the variable's |
1133 | value was "0", contrary to what the specification has always said! | |
1134 | The result should be true unless the variable is empty. | |
1135 | ||
1136 | PH/09 The syntax error of a character other than { following "${if | |
1137 | def:variable_name" (after optional whitespace) was not being diagnosed. | |
1138 | An expansion such as ${if def:sender_ident:{xxx}{yyy}} in which an | |
1139 | accidental colon was present, for example, could give incorrect results. | |
1140 | ||
0d7eb84a PH |
1141 | PH/10 Tidied the code in a number of places where the st_size field of a stat() |
1142 | result is used (not including appendfile, where other changes are about | |
1143 | to be made). | |
1144 | ||
1145 | PH/11 Upgraded appendfile so that quotas larger than 2G are now supported. | |
1146 | This involved changing a lot of size variables from int to off_t. It | |
1147 | should work with maildirs and everything. | |
1148 | ||
40727bee TK |
1149 | TK/08 Apply fix provided by Michael Haardt to prevent deadlock in case of |
1150 | spamd dying while we are connected to it. | |
1151 | ||
554d2369 TF |
1152 | TF/05 Fixed a ${extract error message typo reported by Jeremy Harris |
1153 | <jgh@wizmail.org> | |
1154 | ||
1f922db1 PH |
1155 | PH/12 Applied Alex Kiernan's patch for the API change for the error callback |
1156 | function for BDB 4.3. | |
1157 | ||
ef213c3b PH |
1158 | PH/13 Changed auto_thaw such that it does not apply to bounce messages. |
1159 | ||
8ac170f3 PH |
1160 | PH/14 Imported PCRE 6.0; this was more than just a trivial operation because |
1161 | the sources for PCRE have been re-arranged and more files are now | |
1162 | involved. | |
1163 | ||
b1c749bb PH |
1164 | PH/15 The code I had for printing potentially long long variables in PH/11 |
1165 | above was not the best (it lost precision). The length of off_t variables | |
1166 | is now inspected at build time, and an appropriate printing format (%ld | |
c6c2dc1d PH |
1167 | or %lld) is chosen and #defined by OFF_T_FMT. We also define LONGLONG_T |
1168 | to be "long long int" or "long int". This is needed for the internal | |
1169 | formatting function string_vformat(). | |
b1c749bb | 1170 | |
4aac9b49 PH |
1171 | PH/16 Applied Matthew Newton's patch to exicyclog: "If log_file_path is set in |
1172 | the configuration file to be ":syslog", then the script "guesses" where | |
1173 | the logs files are, rather than using the compiled in default. In our | |
1174 | case the guess is not the same as the compiled default, so the script | |
1175 | suddenly stopped working when I started to use syslog. The patch checks | |
1176 | to see if log_file_path is "". If so, it attempts to read it from exim | |
1177 | with no configuration file to get the compiled in version, before it | |
1178 | falls back to the previous guessing code." | |
1179 | ||
294520c8 TK |
1180 | TK/09 Added "prvs" and "prvscheck" expansion items. These help a lot with |
1181 | implementing BATV in an Exim configuration. See NewStuff for the gory | |
1182 | details. | |
1183 | ||
5bd022fe PH |
1184 | PH/17 Applied Michael Haardt's patch for HP-UX, affecting only the os.h and |
1185 | Makefile that are specific to HP-UX. | |
1186 | ||
90e9ce59 PH |
1187 | PH/18 If the "use_postmaster" option was set for a recipient callout together |
1188 | with the "random" option, the postmaster address was used as the MAIL | |
1189 | FROM address for the random test, but not for the subsequent recipient | |
1190 | test. It is now used for both. | |
1191 | ||
5ea81592 PH |
1192 | PH/19 Applied Michael Haardt's patch to update Sieve to RFC3028bis. "The |
1193 | patch removes a few documentation additions to RFC 3028, because the | |
1194 | latest draft now contains them. It adds the new en;ascii-case comparator | |
1195 | and a new error check for 8bit text in MIME parts. Comparator and | |
1196 | require names are now matched exactly. I enabled the subaddress | |
1197 | extension, but it is not well tested yet (read: it works for me)." | |
1198 | ||
c6c2dc1d PH |
1199 | PH/20 Added macros for time_t as for off_t (see PH/15 above) and used them to |
1200 | rework some of the code of TK/09 above to avoid the hardwired use of | |
1201 | "%lld" and "long long". Replaced the call to snprintf() with a call to | |
1202 | string_vformat(). | |
1203 | ||
fffffe4c PH |
1204 | PH/21 Added some other messages to those in 4.51/PH/42, namely "All relevant MX |
1205 | records point to non-existent hosts", "retry timeout exceeded", and | |
1206 | "retry time not reached for any host after a long failure period". | |
ca02eafb | 1207 | |
9a26b6b2 PH |
1208 | PH/22 Fixed some oversights/typos causing bugs when Exim is compiled with |
1209 | experimental DomainKeys support: | |
1210 | ||
1211 | (1) The filter variables $n0-$n9 and $sn0-$sn9 were broken. | |
1212 | (2) On an error such as an illegally used "control", the wrong name for | |
1213 | the control was given. | |
1214 | ||
1215 | These problems did NOT occur unless DomainKeys support was compiled. | |
1216 | ||
4aee0225 PH |
1217 | PH/23 Added daemon_startup_retries and daemon_startup_sleep. |
1218 | ||
32d668a5 PH |
1219 | PH/24 Added ${if match_ip condition. |
1220 | ||
8187c3f3 PH |
1221 | PH/25 Put debug statements on either side of calls to EXIM_DBOPEN() for hints |
1222 | databases so that it will be absolutely obvious if a crash occurs in the | |
1223 | DB library. This is a regular occurrence (often caused by mis-matched | |
1224 | db.h files). | |
1225 | ||
ff790e47 | 1226 | PH/26 Insert a lot of missing (void) casts for functions such as chown(), |
f1e894f3 PH |
1227 | chmod(), fcntl(), sscanf(), and other functions from stdio.h. These were |
1228 | picked up on a user's system that detects such things. There doesn't seem | |
1229 | to be a gcc warning option for this - only an attribute that has to be | |
1230 | put on the function's prototype. It seems that in Fedora Core 4 they have | |
1231 | set this on a number of new functions. No doubt there will be more in due | |
1232 | course. | |
ff790e47 | 1233 | |
5417f6d1 PH |
1234 | PH/27 If a dnslookup or manualroute router is set with verify=only, it need not |
1235 | specify a transport. However, if an address that was verified by such a | |
1236 | router was the subject of a callout, Exim crashed because it tried to | |
1237 | read the rcpt_include_affixes from the non-existent transport. Now it | |
1238 | just assumes that the setting of that option is false. This bug was | |
1239 | introduced by 4.51/PH/31. | |
1240 | ||
59cf8544 PH |
1241 | PH/28 Changed -d+all to exclude +memory, because that information is very |
1242 | rarely of interest, but it makes the output a lot bigger. People tend to | |
1243 | do -d+all out of habit. | |
1244 | ||
e7ad8a65 PH |
1245 | PH/29 Removed support for the Linux-libc5 build, as it is obsolete and the |
1246 | code in os-type was giving problems when libc.so lives in lib64, like on | |
1247 | x86_64 Fedora Core. | |
1248 | ||
ade42478 PH |
1249 | PH/30 Exim's DNS code uses the original T_xxx names for DNS record times. These |
1250 | aren't the modern standard, and it seems that some systems' include files | |
1251 | don't always have them. Exim was already checking for some of the newer | |
1252 | ones like T_AAAA, and defining it itself. I've added checks for all the | |
1253 | record types that Exim uses. | |
1254 | ||
182ad5cf PH |
1255 | PH/31 When using GnuTLS, if the parameters cache file did not exist, Exim was |
1256 | not automatically generating a new one, as it is supposed to. This | |
1257 | prevented TLS from working. If the file did exist, but contained invalid | |
1258 | data, a new version was generated, as expected. It was only the case of a | |
1259 | non-existent file that was broken. | |
1260 | ||
b0d9fc80 TK |
1261 | TK/10 Domainkeys: Fix a bug in verification that caused a crash in conjunction |
1262 | with a change in libdomainkeys > 0.64. | |
1263 | ||
1264 | TK/11 Domainkeys: Change the logic how the "testing" policy flag is retrieved | |
1265 | from DNS. If the selector record carries the flag, it now has | |
1266 | precedence over the domain-wide flag. | |
1267 | ||
1268 | TK/12 Cleared some compiler warnings related to SPF, SRS and DK code. | |
1269 | ||
47c7a64a PH |
1270 | PH/32 In mua_wrapper mode, if an smtp transport configuration error (such as |
1271 | the use of a port name that isn't defined in /etc/services) occurred, the | |
1272 | message was deferred as in a normal delivery, and thus remained on the | |
1273 | spool, instead of being failed because of the mua_wrapper setting. This | |
1274 | is now fixed, and I tidied up some of the mua_wrapper messages at the | |
1275 | same time. | |
1276 | ||
a388bce4 SC |
1277 | SC/08 Eximstats: whilst parsing the mainlog(s), store information about |
1278 | the messages in a hash of arrays rather than using individual hashes. | |
1279 | This is a bit cleaner and results in dramatic memory savings, albeit | |
1280 | at a slight CPU cost. | |
1281 | ||
1282 | SC/09 Eximstats: added the -show_rt<list> and the -show_dt<list> flags | |
1283 | as requested by Marc Sherman. | |
1284 | ||
1285 | SC/10 Eximstats: added histograms for user specified patterns as requested | |
1286 | by Marc Sherman. | |
1287 | ||
0793e4ed SC |
1288 | SC/11 Eximstats: v1.43 - bugfix for pattern histograms with -h0 specified. |
1289 | ||
c58b88df PH |
1290 | PH/33 Patch from the Cygwin maintainer to add "b" to all occurences of |
1291 | fopen() in the content-scanning modules that did not already have it. | |
1292 | ||
e7ad8a65 | 1293 | |
7982096b PH |
1294 | Exim version 4.51 |
1295 | ----------------- | |
1296 | ||
1a46a8c5 PH |
1297 | TK/01 Added Yahoo DomainKeys support via libdomainkeys. See |
1298 | doc/experimental-spec.txt for details. (http://domainkeys.sf.net) | |
1299 | ||
2f079f46 | 1300 | TK/02 Fix ACL "control" statement not being available in MIME ACL. |
1a46a8c5 PH |
1301 | |
1302 | TK/03 Fix ACL "regex" condition not being available in MIME ACL. | |
1303 | ||
1304 | PH/01 Installed a patch from the Sieve maintainer that allows -bf to be used | |
1305 | to test Sieve filters that use "vacation". | |
1306 | ||
1307 | PH/02 Installed a slightly modified version of Nikos Mavrogiannopoulos' patch | |
1308 | that changes the way the GnuTLS parameters are stored in the cache file. | |
1309 | The new format can be generated externally. For backward compatibility, | |
1310 | if the data in the cache doesn't make sense, Exim assumes it has read an | |
1311 | old-format file, and it generates new data and writes a new file. This | |
1312 | means that you can't go back to an older release without removing the | |
1313 | file. | |
1314 | ||
1315 | PH/03 A redirect router that has both "unseen" and "one_time" set does not | |
1316 | work if there are any delivery delays because "one_time" forces the | |
1317 | parent to be marked "delivered", so its unseen clone is never tried | |
1318 | again. For this reason, Exim now forbids the simultaneous setting of | |
1319 | these two options. | |
1320 | ||
1321 | PH/04 Change 4.11/85 fixed an obscure bug concerned with addresses that are | |
1322 | redirected to themselves ("homonym" addresses). Read the long ChangeLog | |
1323 | entry if you want to know the details. The fix, however, neglected to | |
1324 | consider the case when local delivery batching is involved. The test for | |
1325 | "previously delivered" was not happening when checking to see if an | |
1326 | address could be batched with a previous (undelivered) one; under | |
1327 | certain circumstances this could lead to multiple deliveries to the same | |
c2c19e9d | 1328 | address. |
1a46a8c5 PH |
1329 | |
1330 | PH/05 Renamed the macro SOCKLEN_T as EXIM_SOCKLEN_T because AIX uses SOCKLEN_T | |
1331 | in its include files, and this causes problems building Exim. | |
1332 | ||
1333 | PH/06 A number of "verify =" ACL conditions have no options (e.g. verify = | |
1334 | header_syntax) but Exim was just ignoring anything given after a slash. | |
1335 | In particular, this caused confusion with an attempt to use "verify = | |
1336 | reverse_host_lookup/defer_ok". An error is now given when options are | |
1337 | supplied for verify items that do not have them. (Maybe reverse_host_ | |
1338 | lookup should have a defer_ok option, but that's a different point.) | |
1339 | ||
1340 | PH/07 Increase the size of the buffer for incoming SMTP commands from 512 (as | |
1341 | defined by RFC 821) to 2048, because there were problems with some AUTH | |
1342 | commands, and RFC 1869 says the size should be increased for extended | |
1343 | SMTP commands that take arguments. | |
1344 | ||
1345 | PH/08 Added ${dlfunc dynamically loaded function for expansion (code from Tony | |
1346 | Finch). | |
1347 | ||
1348 | PH/09 Previously, an attempt to use ${perl when it wasn't compiled gave an | |
1349 | "unknown" error; now it says that the functionality isn't in the binary. | |
8d67ada3 | 1350 | |
49c2d5ea PH |
1351 | PH/10 Added a nasty fudge to try to recognize and flatten LDAP passwords in |
1352 | an address' error message when a string expansion fails (syntax or | |
f331f3b6 PH |
1353 | whatever). Otherwise the password may appear in the log. Following change |
1354 | PH/42 below, there is no longer a chance of it appearing in a bounce | |
1355 | message. | |
49c2d5ea | 1356 | |
bf759a8b PH |
1357 | PH/11 Installed exipick version 20050225.0 from John Jetmore. |
1358 | ||
83364d30 PH |
1359 | PH/12 If the last host in a fallback_hosts list was multihomed, only the first |
1360 | of its addresses was ever tried. (Bugzilla bug #2.) | |
1361 | ||
7999bbd7 PH |
1362 | PH/13 If "headers_add" in a transport didn't end in a newline, Exim printed |
1363 | the result incorrectly in the debug output. (It correctly added a newline | |
1364 | to what was transported.) | |
1365 | ||
7dbf77c9 PH |
1366 | TF/01 Added $received_time. |
1367 | ||
74e0617f PH |
1368 | PH/14 Modified the default configuration to add an acl_smtp_data ACL, with |
1369 | commented out examples of how to interface to a virus scanner and to | |
1370 | SpamAssassin. Also added commented examples of av_scanner and | |
1371 | spamd_address settings. | |
1372 | ||
2f079f46 PH |
1373 | PH/15 Further to TK/02 and TK/03 above, tidied up the tables of what conditions |
1374 | and controls are allowed in which ACLs. There were a couple of minor | |
1375 | errors. Some of the entries in the conditions table (which is a table of | |
1376 | where they are NOT allowed) were getting very unwieldy; rewrote them as a | |
1377 | negation of where the condition IS allowed. | |
1378 | ||
8c841523 PH |
1379 | PH/16 Installed updated OS/os.c-cygwin from the Cygwin maintainer. |
1380 | ||
7766a4f0 PH |
1381 | PH/17 The API for radiusclient changed at release 0.4.0. Unfortunately, the |
1382 | header file does not have a version number, so I've had to invent a new | |
1383 | value for RADIUS_LIB_TYPE, namely "RADIUSCLIENTNEW" to request the new | |
1384 | API. The code is untested by me (my Linux distribution still has 0.3.2 of | |
1385 | radiusclient), but it was contributed by a Radius user. | |
1386 | ||
8b417f2c PH |
1387 | PH/18 Installed Lars Mainka's patch for the support of CRL collections in |
1388 | files or directories, for OpenSSL. | |
1389 | ||
901f42cb PH |
1390 | PH/19 When an Exim process that is running as root has to create an Exim log |
1391 | file, it does so in a subprocess that runs as exim:exim so as to get the | |
1392 | ownership right at creation (otherwise, other Exim processes might see | |
1393 | the file with the wrong ownership). There was no test for failure of this | |
1394 | fork() call, which would lead to the process getting stuck as it waited | |
1395 | for a non-existent subprocess. Forks do occasionally fail when resources | |
1396 | run out. I reviewed all the other calls to fork(); they all seem to check | |
1397 | for failure. | |
1398 | ||
f9b9210e PH |
1399 | PH/20 When checking for unexpected SMTP input at connect time (before writing |
1400 | the banner), Exim was not dealing correctly with a non-positive return | |
1401 | from the read() function. If the client had disconnected by this time, | |
1402 | the result was a log entry for a synchronization error with an empty | |
1403 | string after "input=" when read() returned zero. If read() returned -1 | |
1404 | (an event I could not check), uninitialized data bytes were printed. | |
1405 | There were reports of junk text (parts of files, etc) appearing after | |
1406 | "input=". | |
1407 | ||
54cdb463 PH |
1408 | PH/21 Added acl_not_smtp_mime to allow for MIME scanning for non-SMTP messages. |
1409 | ||
cf00dad6 PH |
1410 | PH/22 Added support for macro redefinition, and (re)definition in between |
1411 | driver and ACL definitions. | |
1412 | ||
acb1b346 PH |
1413 | PH/23 The cyrus_sasl authenticator was expanding server_hostname, but then |
1414 | forgetting to use the resulting value; it was using the unexpanded value. | |
1415 | ||
c5ddb310 PH |
1416 | PH/24 The cyrus_sasl authenticator was advertising mechanisms for which it |
1417 | hadn't been configured. The fix is from Juergen Kreileder, who | |
1418 | understands it better than I do: | |
1419 | ||
1420 | "Here's what I see happening with three configured cyrus_sasl | |
1421 | authenticators configured (plain, login, cram-md5): | |
1422 | ||
1423 | On startup auth_cyrus_sasl_init() gets called for each of these. | |
1424 | This means three calls to sasl_listmech() without a specified mech_list. | |
1425 | => SASL tests which mechs of all available mechs actually work | |
1426 | => three warnings about OTP not working | |
1427 | => the returned list contains: plain, login, cram-md5, digest-md5, ... | |
1428 | ||
1429 | With the patch, sasl_listmech() also gets called three times. But now | |
1430 | SASL's mech_list option is set to the server_mech specified in the the | |
1431 | authenticator. Or in other words, the answer from sasl_listmech() | |
1432 | gets limited to just the mech you're testing for (which is different | |
1433 | for each call.) | |
1434 | => the return list contains just 'plain' or 'login', 'cram-md5' or | |
1435 | nothing depending on the value of ob->server_mech. | |
1436 | ||
1437 | I've just tested the patch: Authentication still works fine, | |
1438 | unavailable mechs specified in the exim configuration are still | |
1439 | caught, and the auth.log warnings about OTP are gone." | |
1440 | ||
31619da6 PH |
1441 | PH/25 When debugging is enabled, the contents of the command line are added |
1442 | to the debugging output, even when log_selector=+arguments is not | |
1443 | specified. | |
1444 | ||
bebaf0fc PH |
1445 | PH/26 Change scripts/os-type so that when "uname -s" returns just "GNU", the |
1446 | answer is "GNU", and only if the return is "GNU/something" is the answer | |
1447 | "Linux". | |
1448 | ||
475fe28a PH |
1449 | PH/27 $acl_verify_message is now set immediately after the failure of a |
1450 | verification in an ACL, and so is available in subsequent modifiers. In | |
1451 | particular, the message can be preserved by coding like this: | |
1452 | ||
1453 | warn !verify = sender | |
1454 | set acl_m0 = $acl_verify_message | |
1455 | ||
1456 | Previously, $acl_verify_message was set only while expanding "message" | |
1457 | and "log_message" when a very denied access. | |
1458 | ||
7e8bec7a PH |
1459 | PH/28 Modified OS/os.c-Linux with |
1460 | ||
1461 | -#ifndef OS_LOAD_AVERAGE | |
1462 | +#if !defined(OS_LOAD_AVERAGE) && defined(__linux__) | |
1463 | ||
1464 | to make Exim compile on kfreebsd-gnu. (I'm totally confused about the | |
1465 | nomenclature these days.) | |
1466 | ||
e4a89c47 PH |
1467 | PH/29 Installed patch from the Sieve maintainer that adds the options |
1468 | sieve_useraddress and sieve_subaddress to the redirect router. | |
1469 | ||
5ca2a9a1 PH |
1470 | PH/30 In these circumstances: |
1471 | . Two addresses routed to the same list of hosts; | |
1472 | . First host does not offer TLS; | |
1473 | . First host accepts first address; | |
1474 | . First host gives temporary error to second address; | |
1475 | . Second host offers TLS and a TLS session is established; | |
1476 | . Second host accepts second address. | |
1477 | Exim incorrectly logged both deliveries with the TLS parameters (cipher | |
1478 | and peerdn, if requested) that were in fact used only for the second | |
1479 | address. | |
7e8bec7a | 1480 | |
c688b954 PH |
1481 | PH/31 When doing a callout as part of verifying an address, Exim was not paying |
1482 | attention to any local part prefix or suffix that was matched by the | |
1483 | router that accepted the address. It now behaves in the same way as it | |
1484 | does for delivery: the affixes are removed from the local part unless | |
1485 | rcpt_include_affixes is set on the transport. | |
1486 | ||
fed77020 PH |
1487 | PH/32 Add the sender address, as F=<...>, to the log line when logging a |
1488 | timeout during the DATA phase of an incoming message. | |
1489 | ||
7fe1560f PH |
1490 | PH/33 Sieve envelope tests were broken for match types other than :is. I have |
1491 | applied a patch sanctioned by the Sieve maintainer. | |
c688b954 | 1492 | |
ebb6e6d5 PH |
1493 | PH/34 Change 4.50/80 broke Exim in that it could no longer handle cases where |
1494 | the uid or gid is negative. A case of a negative gid caused this to be | |
1495 | noticed. The fix allows for either to be negative. | |
1496 | ||
9c4e8f60 PH |
1497 | PH/35 ACL_WHERE_MIME is now declared unconditionally, to avoid too much code |
1498 | clutter, but the tables that are indexed by ACL_WHERE_xxx values had been | |
1499 | overlooked. | |
1500 | ||
1501 | PH/36 The change PH/12 above was broken. Fixed it. | |
1502 | ||
d7174846 PH |
1503 | PH/37 Exim used to check for duplicate addresses in the middle of routing, on |
1504 | the grounds that routing the same address twice would always produce the | |
1505 | same answer. This might have been true once, but it is certainly no | |
1506 | longer true now. Routing a child address may depend on the previous | |
1507 | routing that produced that child. Some complicated redirection strategies | |
1508 | went wrong when messages had multiple recipients, and made Exim's | |
1509 | behaviour dependent on the order in which the addresses were given. | |
1510 | ||
1511 | I have moved the duplicate checking until after the routing is complete. | |
1512 | Exim scans the addresses that are assigned to local and remote | |
1513 | transports, and removes any duplicates. This means that more work will be | |
1514 | done, as duplicates will always all be routed, but duplicates are | |
1515 | presumably rare, so I don't expect this is of any significance. | |
1516 | ||
1517 | For deliveries to pipes, files, and autoreplies, the duplicate checking | |
1518 | still happens during the routing process, since they are not going to be | |
1519 | routed further. | |
1520 | ||
cfe75fc3 PH |
1521 | PH/38 Installed a patch from Ian Freislich, with the agreement of Tom Kistner. |
1522 | It corrects a timeout issue with spamd. This is Ian's comment: "The | |
1523 | background is that sometimes spamd either never reads data from a | |
1524 | connection it has accepted, or it never writes response data. The exiscan | |
1525 | spam.[ch] uses a 3600 second timeout on spamd socket reads, further, it | |
1526 | blindly assumes that writes won't block so it may never time out." | |
1527 | ||
be22d70e PH |
1528 | PH/39 Allow G after quota size as well as K and M. |
1529 | ||
0612b098 PH |
1530 | PH/40 The value set for $authenticated_id in an authenticator may not contain |
1531 | binary zeroes or newlines because the value is written to log lines and | |
1532 | to spool files. There was no check on this. Now the value is run through | |
1533 | the string_printing() function so that such characters are converted to | |
1534 | printable escape sequences. | |
1535 | ||
2e0c1448 PH |
1536 | PH/41 $message_linecount is a new variable that contains the total number of |
1537 | lines in the message. Compare $body_linecount, which is the count for the | |
1538 | body only. | |
1539 | ||
447d236c PH |
1540 | PH/42 Exim no longer gives details of delivery errors for specific addresses in |
1541 | bounce and delay warning messages, except in certain special cases, which | |
1542 | are as follows: | |
1543 | ||
1544 | (a) An SMTP error message from a remote host; | |
1545 | (b) A message specified in a :fail: redirection; | |
1546 | (c) A message specified in a "fail" command in a system filter; | |
1547 | (d) A message specified in a FAIL return from the queryprogram router; | |
1548 | (e) A message specified by the cannot_route_message router option. | |
1549 | ||
1550 | In these cases only, Exim does include the error details in bounce and | |
1551 | warning messages. There are also a few cases where bland messages such | |
1552 | as "unrouteable address" or "local delivery error" are given. | |
1553 | ||
d20976dc PH |
1554 | PH/43 $value is now also set for the "else" part of a ${run expansion. |
1555 | ||
f656d135 PH |
1556 | PH/44 Applied patch from the Sieve maintainer: "The vacation draft is still |
1557 | being worked on, but at least Exim now implements the latest version to | |
1558 | play with." | |
1559 | ||
2e2a30b4 PH |
1560 | PH/45 In a pipe transport, although a timeout while waiting for the pipe |
1561 | process to complete was treated as a delivery failure, a timeout while | |
1562 | writing the message to the pipe was logged, but erroneously treated as a | |
1563 | successful delivery. Such timeouts include transport filter timeouts. For | |
1564 | consistency with the overall process timeout, these timeouts are now | |
1565 | treated as errors, giving rise to delivery failures by default. However, | |
1566 | there is now a new Boolean option for the pipe transport called | |
1567 | timeout_defer, which, if set TRUE, converts the failures into defers for | |
1568 | both kinds of timeout. A transport filter timeout is now identified in | |
1569 | the log output. | |
1570 | ||
9176e9f0 PH |
1571 | PH/46 The "scripts/Configure-config.h" script calls "make" at one point. On |
1572 | systems where "make" and "gmake" are different, calling "gmake" at top | |
1573 | level broke things. I've arranged for the value of $(MAKE) to be passed | |
1574 | from the Makefile to this script so that it can call the same version of | |
1575 | "make". | |
1576 | ||
7982096b | 1577 | |
bbe902f0 PH |
1578 | A note about Exim versions 4.44 and 4.50 |
1579 | ---------------------------------------- | |
1580 | ||
1581 | Exim 4.50 was meant to be the next release after 4.43. It contains a lot of | |
1582 | changes of various kinds. As a consequence, a big documentation update was | |
1583 | needed. This delayed the release for rather longer than seemed good, especially | |
1584 | in the light of a couple of (minor) security issues. Therefore, the changes | |
1585 | that fixed bugs were backported into 4.43, to create a 4.44 maintenance | |
1586 | release. So 4.44 and 4.50 are in effect two different branches that both start | |
1587 | from 4.43. | |
1588 | ||
1589 | I have left the 4.50 change log unchanged; it contains all the changes since | |
1590 | 4.43. The change log for 4.44 is below; many of its items are identical to | |
1591 | those for 4.50. This seems to be the most sensible way to preserve the | |
1592 | historical information. | |
1593 | ||
1594 | ||
f7b63901 | 1595 | Exim version 4.50 |
495ae4b0 PH |
1596 | ----------------- |
1597 | ||
5fe762f6 PH |
1598 | 1. Minor wording change to the doc/README.SIEVE file. |
1599 | ||
139059f6 | 1600 | 2. Change 4.43/35 introduced a bug: if quota_filecount was set, the |
5fe762f6 | 1601 | computation of the current number of files was incorrect. |
495ae4b0 | 1602 | |
7086e875 PH |
1603 | 3. Closing a stable door: arrange to panic-die if setitimer() ever fails. The |
1604 | bug fixed in 4.43/37 would have been diagnosed quickly if this had been in | |
1605 | place. | |
1606 | ||
35af9f61 PH |
1607 | 4. Give more explanation in the error message when the command for a transport |
1608 | filter fails to execute. | |
1609 | ||
b668c215 PH |
1610 | 5. There are several places where Exim runs a non-Exim command in a |
1611 | subprocess. The SIGUSR1 signal should be disabled for these processes. This | |
1612 | was being done only for the command run by the queryprogram router. It is | |
1613 | now done for all such subprocesses. The other cases are: ${run, transport | |
1614 | filters, and the commands run by the lmtp and pipe transports. | |
1615 | ||
a494b1e1 PH |
1616 | 6. Added CONFIGURE_GROUP build-time option. |
1617 | ||
1618 | 7. Some older OS have a limit of 256 on the maximum number of file | |
1619 | descriptors. Exim was using setrlimit() to set 1000 as a large value | |
1620 | unlikely to be exceeded. Change 4.43/17 caused a lot of logging on these | |
1621 | systems. I've change it so that if it can't get 1000, it tries for 256. | |
35edf2ff | 1622 | |
c5fcb476 PH |
1623 | 8. "control=submission" was allowed, but had no effect, in a DATA ACL. This |
1624 | was an oversight, and furthermore, ever since the addition of extra | |
1625 | controls (e.g. 4.43/32), the checks on when to allow different forms of | |
1626 | "control" were broken. There should now be diagnostics for all cases when a | |
1627 | control that does not make sense is encountered. | |
1628 | ||
69358f02 PH |
1629 | 9. Added the /retain_sender option to "control=submission". |
1630 | ||
5be20824 PH |
1631 | 10. $recipients is now available in the predata ACL (oversight). |
1632 | ||
eb2c0248 PH |
1633 | 11. Tidy the search cache before the fork to do a delivery from a message |
1634 | received from the command line. Otherwise the child will trigger a lookup | |
1635 | failure and thereby defer the delivery if it tries to use (for example) a | |
1636 | cached ldap connection that the parent has called unbind on. | |
1637 | ||
2a3eea10 PH |
1638 | 12. If verify=recipient was followed by verify=sender in a RCPT ACL, the value |
1639 | of $address_data from the recipient verification was clobbered by the | |
1640 | sender verification. | |
1641 | ||
1642 | 13. The value of address_data from a sender verification is now available in | |
1643 | $sender_address_data in subsequent conditions in the ACL statement. | |
1644 | ||
23c7ff99 PH |
1645 | 14. Added forbid_sieve_filter and forbid_exim_filter to the redirect router. |
1646 | ||
4deaf07d PH |
1647 | 15. Added a new option "connect=<time>" to callout options, to set a different |
1648 | connection timeout. | |
1649 | ||
926e1192 PH |
1650 | 16. If FIXED_NEVER_USERS was defined, but empty, Exim was assuming the uid 0 |
1651 | was its contents. (It was OK if the option was not defined at all.) | |
1652 | ||
650edc6f PH |
1653 | 17. A "Completed" log line is now written for messages that are removed from |
1654 | the spool by the -Mrm option. | |
1655 | ||
2c7db3f5 PH |
1656 | 18. New variables $sender_verify_failure and $recipient_verify_failure contain |
1657 | information about exactly what failed. | |
1658 | ||
3d235903 PH |
1659 | 19. Added -dd to debug only the daemon process. |
1660 | ||
7c7ad977 PH |
1661 | 20. Incorporated Michael Haardt's patch to ldap.c for improving the way it |
1662 | handles timeouts, both on the server side and network timeouts. Renamed the | |
1663 | CONNECT parameter as NETTIMEOUT (but kept the old name for compatibility). | |
1664 | ||
981756db PH |
1665 | 21. The rare case of EHLO->STARTTLS->HELO was setting the protocol to "smtp". |
1666 | It is now set to "smtps". | |
1667 | ||
d4eb88df PH |
1668 | 22. $host_address is now set to the target address during the checking of |
1669 | ignore_target_hosts. | |
1670 | ||
1671 | 23. When checking ignore_target_hosts for an ipliteral router, no host name was | |
1672 | being passed; this would have caused $sender_host_name to have been used if | |
1673 | matching the list had actually called for a host name (not very likely, | |
1674 | since this list is usually IP addresses). A host name is now passed as | |
1675 | "[x.x.x.x]". | |
1676 | ||
7d468ab8 PH |
1677 | 24. Changed the calls that set up the SIGCHLD handler in the daemon to use the |
1678 | code that specifies a non-restarting handler (typically sigaction() in | |
1679 | modern systems) in an attempt to fix a rare and obscure crash bug. | |
1680 | ||
1681 | 25. Narrowed the window for a race in the daemon that could cause it to ignore | |
1682 | SIGCHLD signals. This is not a major problem, because they are used only to | |
1683 | wake it up if nothing else does. | |
1684 | ||
62c0818f PH |
1685 | 26. A malformed maildirsize file could cause Exim to calculate negative values |
1686 | for the mailbox size or file count. Odd effects could occur as a result. | |
1687 | The maildirsize information is now recalculated if the size or filecount | |
1688 | end up negative. | |
1689 | ||
26034054 PH |
1690 | 27. Added HAVE_SYS_STATVFS_H to the os.h file for Linux, as it has had this |
1691 | support for a long time. Removed HAVE_SYS_VFS_H. | |
1692 | ||
af66f652 PH |
1693 | 28. Installed the latest version of exipick from John Jetmore. |
1694 | ||
90af77f4 PH |
1695 | 29. In an address list, if the pattern was not a regular expression, an empty |
1696 | subject address (from a bounce message) matched only if the pattern was an | |
1697 | empty string. Non-empty patterns were not even tested. This was the wrong | |
1698 | because it is perfectly reasonable to use an empty address as part of a | |
1699 | database query. An empty address is now tested by patterns that are | |
1700 | lookups. However, all the other forms of pattern expect the subject to | |
1701 | contain a local part and a domain, and therefore, for them, an empty | |
1702 | address still always fails if the pattern is not itself empty. | |
1703 | ||
d8ef3577 PH |
1704 | 30. Exim went into a mad DNS loop when attempting to do a callout where the |
1705 | host was specified on an smtp transport, and looking it up yielded more | |
1706 | than one IP address. | |
1707 | ||
5cb8cbc6 PH |
1708 | 31. Re-factored the code for checking spool and log partition space into a |
1709 | function that finds that data and another that does the check. The former | |
1710 | is then used to implement four new variables: $spool_space, $log_space, | |
1711 | $spool_inodes, and $log_inodes. | |
1712 | ||
14702f5b PH |
1713 | 32. The RFC2047 encoding function was originally intended for short strings |
1714 | such as real names; it was not keeping to the 75-character limit for | |
1715 | encoded words that the RFC imposes. It now respects the limit, and | |
1716 | generates multiple encoded words if necessary. To be on the safe side, I | |
1717 | have increased the buffer size for the ${rfc2047: expansion operator from | |
1718 | 1024 to 2048 bytes. | |
1719 | ||
063b1e99 PH |
1720 | 33. It is now permitted to omit both strings after an "if" condition; if the |
1721 | condition is true, the result is "true". As before, when the second string | |
1722 | is omitted, a false condition yields an empty string. This makes it less | |
1723 | cumbersome to write custom ACL and router conditions. | |
1724 | ||
652e1b65 PH |
1725 | 34. Failure to deliver a bounce message always caused it to be frozen, even if |
1726 | there was an errors_to setting on the router. The errors_to setting is now | |
1727 | respected. | |
1728 | ||
6f0c9a4f PH |
1729 | 35. If an IPv6 address is given for -bh or -bhc, it is now converted to the |
1730 | canonical form (fully expanded) before being placed in | |
1731 | $sender_host_address. | |
1732 | ||
33397d19 PH |
1733 | 36. The table in the code that translates DNS record types into text (T_A to |
1734 | "A" for instance) was missing entries for NS and CNAME. It is just possible | |
1735 | that this could have caused confusion if both these types were looked up | |
1736 | for the same domain, because the text type is used as part of Exim's | |
1737 | per-process caching. But the chance of anyone hitting this buglet seems | |
1738 | very small. | |
1739 | ||
7bb56e1f PH |
1740 | 37. The dnsdb lookup has been extended in a number of ways. |
1741 | ||
1742 | (1) There is a new type, "zns", which walks up the domain tree until it | |
1743 | finds some nameserver records. It should be used with care. | |
1744 | ||
ea3bc19b PH |
1745 | (2) There is a new type, "mxh", which is like "mx" except that it returns |
1746 | just the host names, not the priorities. | |
1747 | ||
1748 | (3) It is now possible to give a list of domains (or IP addresses) to be | |
ff4dbb19 PH |
1749 | looked up. The behaviour when one of the lookups defers can be |
1750 | controlled by a keyword. | |
7bb56e1f | 1751 | |
ea3bc19b | 1752 | (4) It is now possible to specify the separator character for use when |
7bb56e1f | 1753 | multiple records are returned. |
33397d19 | 1754 | |
0bcb2a0e PH |
1755 | 38. The dnslists ACL condition has been extended: it is now possible to supply |
1756 | a list of IP addresses and/or domains to be looked up in a particular DNS | |
1757 | domain. | |
1758 | ||
2ac0e484 PH |
1759 | 39. Added log_selector=+queue_time_overall. |
1760 | ||
4e1fde53 PH |
1761 | 40. When running the queue in the test harness, wait just a tad after forking a |
1762 | delivery process, to get repeatability of debugging output. | |
1763 | ||
de365ded PH |
1764 | 41. Include certificate and key file names in error message when GnuTLS fails |
1765 | to set them up, because the GnuTLS error message doesn't include the name | |
1766 | of the failing file when there is a problem reading it. | |
1767 | ||
f05da2e8 PH |
1768 | 42. Allow both -bf and -bF in the same test run. |
1769 | ||
d6453af2 PH |
1770 | 43. Did the same fix as 41 above for OpenSSL, which had the same infelicity. |
1771 | ||
f7b63901 PH |
1772 | 44. The "Exiscan patch" is now merged into the mainline Exim source. |
1773 | ||
1774 | 45. Sometimes the final signoff response after QUIT could fail to get | |
1775 | transmitted in the non-TLS case. Testing !tls_active instead of tls_active | |
1776 | < 0 before doing a fflush(). This bug looks as though it goes back to the | |
1777 | introduction of TLS in release 3.20, but "sometimes" must have been rare | |
1778 | because the tests only now provoked it. | |
1779 | ||
a444213a PH |
1780 | 46. Reset the locale to "C" after calling embedded Perl, in case it was changed |
1781 | (this can affect the format of dates). | |
1782 | ||
0ec020ea PH |
1783 | 47. exim_tidydb, when checking for the continued existence of a message for |
1784 | which it has found a message-specific retry record, was not finding | |
1785 | messages that were in split spool directories. Consequently, it was | |
1786 | deleting retry records that should have stayed in existence. | |
1787 | ||
b1206957 PH |
1788 | 48. Steve fixed some bugs in eximstats. |
1789 | ||
1790 | 49. The SPA authentication driver was not abandoning authentication and moving | |
1791 | on to the next authenticator when an expansion was forced to fail, | |
1792 | contradicting the general specification for all authenticators. Instead it | |
1793 | was generating a temporary error. It now behaves as specified. | |
1794 | ||
26dd5a95 PH |
1795 | 50. The default ordering of permitted cipher suites for GnuTLS was pessimal |
1796 | (the order specifies the preference for clients). The order is now AES256, | |
1797 | AES128, 3DES, ARCFOUR128. | |
1798 | ||
343b2385 PH |
1799 | 51. Small patch to Sieve code - explicitly set From: when generating an |
1800 | autoreply. | |
1801 | ||
1c5466b9 PH |
1802 | 52. Exim crashed if a remote delivery caused a very long error message to be |
1803 | recorded - for instance if somebody sent an entire SpamAssassin report back | |
1804 | as a large number of 550 error lines. This bug was coincidentally fixed by | |
1805 | increasing the size of one of Exim's internal buffers (big_buffer) that | |
1806 | happened as part of the Exiscan merge. However, to be on the safe side, I | |
1807 | have made the code more robust (and fixed the comments that describe what | |
1808 | is going on). | |
1809 | ||
55ee9ee3 PH |
1810 | 53. Now that there can be additional text after "Completed" in log lines (if |
1811 | the queue_time_overall log selector is set), a one-byte patch to exigrep | |
1812 | was needed to allow it to recognize "Completed" as not the last thing in | |
1813 | the line. | |
1814 | ||
d38f8232 PH |
1815 | 54. The LDAP lookup was not handling a return of LDAP_RES_SEARCH_REFERENCE. A |
1816 | patch that reportedly fixes this has been added. I am not expert enough to | |
1817 | create a test for it. This is what the patch creator wrote: | |
1818 | ||
1819 | "I found a little strange behaviour of ldap code when working with | |
1820 | Windows 2003 AD Domain, where users was placed in more than one | |
1821 | Organization Units. When I tried to give exim partial DN, the exit code | |
1822 | of ldap_search was unknown to exim because of LDAP_RES_SEARCH_REFERENCE. | |
1823 | But simultaneously result of request was absolutely normal ldap result, | |
1824 | so I produce this patch..." | |
1825 | ||
3295e65b PH |
1826 | Later: it seems that not all versions of LDAP support LDAP_RES_SEARCH_ |
1827 | REFERENCE, so I have modified the code to exclude the patch when that macro | |
1828 | is not defined. | |
1829 | ||
7102e136 PH |
1830 | 55. Some experimental protocols are using DNS PTR records for new purposes. The |
1831 | keys for these records are domain names, not reversed IP addresses. The | |
b975ba52 PH |
1832 | dnsdb PTR lookup now tests whether its key is an IP address. If not, it |
1833 | leaves it alone. Component reversal etc. now happens only for IP addresses. | |
ea3a6f44 | 1834 | CAN-2005-0021 |
7102e136 | 1835 | |
3ca0ba97 PH |
1836 | 56. Improve error message when ldap_search() fails in OpenLDAP or Solaris LDAP. |
1837 | ||
c2bcbe20 PH |
1838 | 57. Double the size of the debug message buffer (to 2048) so that more of very |
1839 | long debug lines gets shown. | |
1840 | ||
18ce445d PH |
1841 | 58. The exicyclog utility now does better if the number of log files to keep |
1842 | exceeds 99. In this case, it numbers them 001, 002 ... instead of 01, 02... | |
1843 | ||
1f5b4c3d PH |
1844 | 59. Two changes related to the smtp_active_hostname option: |
1845 | ||
1846 | (1) $smtp_active_hostname is now available as a variable. | |
1847 | (2) The default for smtp_banner uses $smtp_active_hostname instead | |
1848 | of $primary_hostname. | |
1849 | ||
b975ba52 PH |
1850 | 60. The host_aton() function is supposed to be passed a string that is known |
1851 | to be a valid IP address. However, in the case of IPv6 addresses, it was | |
1852 | not checking this. This is a hostage to fortune. Exim now panics and dies | |
1853 | if the condition is not met. A case was found where this could be provoked | |
85b87bc2 PH |
1854 | from a dnsdb PTR lookup with an IPv6 address that had more than 8 |
1855 | components; fortuitously, this particular loophole had already been fixed | |
1856 | by change 4.50/55 above. | |
1857 | ||
1858 | If there are any other similar loopholes, the new check in host_aton() | |
1859 | itself should stop them being exploited. The report I received stated that | |
1860 | data on the command line could provoke the exploit when Exim was running as | |
1861 | exim, but did not say which command line option was involved. All I could | |
1862 | find was the use of -be with a bad dnsdb PTR lookup, and in that case it is | |
1863 | running as the user. | |
ea3a6f44 | 1864 | CAN-2005-0021 |
85b87bc2 PH |
1865 | |
1866 | 61. There was a buffer overflow vulnerability in the SPA authentication code | |
1867 | (which came originally from the Samba project). I have added a test to the | |
1868 | spa_base64_to_bits() function which I hope fixes it. | |
ea3a6f44 | 1869 | CAN-2005-0022 |
b975ba52 | 1870 | |
17ffcae7 PH |
1871 | 62. Configuration update for GNU/Hurd and variations. Updated Makefile-GNU and |
1872 | os.h-GNU, and added configuration files for GNUkFreeBSD and GNUkNetBSD. | |
1873 | ||
d95f9fdb PH |
1874 | 63. The daemon start-up calls getloadavg() while still root for those OS that |
1875 | need the first call to be done as root, but it missed one case: when | |
1876 | deliver_queue_load_max is set with deliver_drop_privilege. This is | |
1877 | necessary for the benefit of the queue runner, because there is no re-exec | |
1878 | when deliver_drop_privilege is set. | |
1879 | ||
86b8287f PH |
1880 | 64. A call to exiwhat cut short delays set up by "delay" modifiers in ACLs. |
1881 | This has been fixed. | |
1882 | ||
60dc5e56 PH |
1883 | 65. Caching of lookup data for "hosts =" ACL conditions, when a named host list |
1884 | was in use, was not putting the data itself into the right store pool; | |
1885 | consequently, it could be overwritten for a subsequent message in the same | |
1886 | SMTP connection. (Fix 4.40/11 dealt with the non-cache case, but overlooked | |
1887 | the caching.) | |
1888 | ||
533244af PH |
1889 | 66. Added hosts_max_try_hardlimit to the smtp transport, default 50. |
1890 | ||
a5a28604 PH |
1891 | 67. The string_is_ip_address() function returns 0, 4, or 6, for "no an IP |
1892 | address", "IPv4 address", and "IPv6 address", respectively. Some calls of | |
1893 | the function were treating the return as a boolean value, which happened to | |
1894 | work because 0=false and not-0=true, but is not correct code. | |
1895 | ||
7e634d24 PH |
1896 | 68. The host_aton() function was not handling scoped IPv6 addresses (those |
1897 | with, for example, "%eth0" on the end) correctly. | |
1898 | ||
3e11c26b PH |
1899 | 69. Fixed some compiler warnings in acl.c for the bitmaps specified with |
1900 | negated items (that is, ~something) in unsigned ints. Some compilers | |
1901 | apparently mutter when there is no cast. | |
1902 | ||
6729cf78 PH |
1903 | 70. If an address verification called from an ACL failed, and did not produce a |
1904 | user-specific message (i.e. there was only a "system" message), nothing was | |
1905 | put in $acl_verify_message. In this situation, it now puts the system | |
1906 | message there. | |
1907 | ||
00f00ca5 PH |
1908 | 71. Change 4.23/11 added synchronization checking at the start of an SMTP |
1909 | session; change 4.31/43 added the unwanted input to the log line - except | |
1910 | that it did not do this in the start of session case. It now does. | |
1911 | ||
c9bdd01c PH |
1912 | 72. After a timeout in a callout SMTP session, Exim still sent a QUIT command. |
1913 | This is wrong and can cause the other end to generate a synchronization | |
1914 | error if it is another Exim or anything else that does the synchronization | |
1915 | check. A QUIT command is no longer sent after a timeout. | |
1916 | ||
d43194df PH |
1917 | 73. $host_lookup_deferred has been added, to make it easier to detect DEFERs |
1918 | during host lookups. | |
1919 | ||
fe5b5d0b PH |
1920 | 74. The defer_ok option of callout verification was not working if it was used |
1921 | when verifying addresses in header lines, that is, for this case: | |
1922 | ||
1923 | verify = header_sender/callout=defer_ok | |
1924 | ||
76a2d7ba PH |
1925 | 75. A backgrounded daemon closed stdin/stdout/stderr on entry; this meant that |
1926 | those file descriptors could be used for SMTP connections. If anything | |
1927 | wrote to stderr (the example that came up was "warn" in embedded Perl), it | |
1928 | could be sent to the SMTP client, causing chaos. The daemon now opens | |
1929 | stdin, stdout, and stderr to /dev/null when it puts itself into the | |
1930 | background. | |
1931 | ||
1932 | 76. Arrange for output from Perl's "warn" command to be written to Exim's main | |
1933 | log by default. The user can override this with suitable Perl magic. | |
1934 | ||
04f7d5b9 PH |
1935 | 77. The use of log_message on a "discard" ACL verb, which is supposed to add to |
1936 | the log message when discard triggers, was not working for the DATA ACL or | |
1937 | for the non-SMTP ACL. | |
1938 | ||
bc60667e PH |
1939 | 78. Error message wording change in sieve.c. |
1940 | ||
bb6e88ff PH |
1941 | 79. If smtp_accept_max_per_host was set, the number of connections could be |
1942 | restricted to fewer than expected, because the daemon was trying to set up | |
1943 | a new connection before checking whether the processes handling previous | |
1944 | connections had finished. The check for completed processes is now done | |
1945 | earlier. On busy systems, this bug wouldn't be noticed because something | |
1946 | else would have woken the daemon, and it would have reaped the completed | |
1947 | process earlier. | |
1948 | ||
1e70f85b PH |
1949 | 80. If a message was submitted locally by a user whose login name contained one |
1950 | or more spaces (ugh!), the spool file that Exim wrote was not re-readable. | |
1951 | It caused a spool format error. I have fixed the spool reading code. A | |
1952 | related problem was that the "from" clause in the Received: line became | |
1953 | illegal because of the space(s). It is now covered by ${quote_local_part. | |
1954 | ||
1955 | 81. Included the latest eximstats from Steve (adds average sizes to HTML Top | |
1956 | tables). | |
1957 | ||
4e01f9d6 PH |
1958 | 82. Updated OS/Makefile-AIX as per message from Mike Meredith. |
1959 | ||
1ee1cef2 PH |
1960 | 83. Patch from Sieve maintainer to fix unterminated string problem in |
1961 | "vacation" handling. | |
1962 | ||
6e2b4ccc PH |
1963 | 84. Some minor changes to the Linux configuration files to help with other |
1964 | OS variants using glibc. | |
1965 | ||
8e669ac1 PH |
1966 | 85. One more patch for Sieve to update vacation handling to latest spec. |
1967 | ||
495ae4b0 | 1968 | |
bbe902f0 PH |
1969 | ---------------------------------------------------- |
1970 | See the note above about the 4.44 and 4.50 releases. | |
1971 | ---------------------------------------------------- | |
1972 | ||
1973 | ||
1974 | Exim version 4.44 | |
1975 | ----------------- | |
1976 | ||
1977 | 1. Change 4.43/35 introduced a bug that caused file counts to be | |
1978 | incorrectly computed when quota_filecount was set in an appendfile | |
1979 | transport | |
1980 | ||
1981 | 2. Closing a stable door: arrange to panic-die if setitimer() ever fails. The | |
1982 | bug fixed in 4.43/37 would have been diagnosed quickly if this had been in | |
1983 | place. | |
1984 | ||
1985 | 3. Give more explanation in the error message when the command for a transport | |
1986 | filter fails to execute. | |
1987 | ||
1988 | 4. There are several places where Exim runs a non-Exim command in a | |
1989 | subprocess. The SIGUSR1 signal should be disabled for these processes. This | |
1990 | was being done only for the command run by the queryprogram router. It is | |
1991 | now done for all such subprocesses. The other cases are: ${run, transport | |
1992 | filters, and the commands run by the lmtp and pipe transports. | |
1993 | ||
1994 | 5. Some older OS have a limit of 256 on the maximum number of file | |
1995 | descriptors. Exim was using setrlimit() to set 1000 as a large value | |
1996 | unlikely to be exceeded. Change 4.43/17 caused a lot of logging on these | |
1997 | systems. I've change it so that if it can't get 1000, it tries for 256. | |
1998 | ||
1999 | 6. "control=submission" was allowed, but had no effect, in a DATA ACL. This | |
2000 | was an oversight, and furthermore, ever since the addition of extra | |
2001 | controls (e.g. 4.43/32), the checks on when to allow different forms of | |
2002 | "control" were broken. There should now be diagnostics for all cases when a | |
2003 | control that does not make sense is encountered. | |
2004 | ||
2005 | 7. $recipients is now available in the predata ACL (oversight). | |
2006 | ||
2007 | 8. Tidy the search cache before the fork to do a delivery from a message | |
2008 | received from the command line. Otherwise the child will trigger a lookup | |
2009 | failure and thereby defer the delivery if it tries to use (for example) a | |
2010 | cached ldap connection that the parent has called unbind on. | |
2011 | ||
2012 | 9. If verify=recipient was followed by verify=sender in a RCPT ACL, the value | |
2013 | of $address_data from the recipient verification was clobbered by the | |
2014 | sender verification. | |
2015 | ||
2016 | 10. If FIXED_NEVER_USERS was defined, but empty, Exim was assuming the uid 0 | |
2017 | was its contents. (It was OK if the option was not defined at all.) | |
2018 | ||
2019 | 11. A "Completed" log line is now written for messages that are removed from | |
2020 | the spool by the -Mrm option. | |
2021 | ||
2022 | 12. $host_address is now set to the target address during the checking of | |
2023 | ignore_target_hosts. | |
2024 | ||
2025 | 13. When checking ignore_target_hosts for an ipliteral router, no host name was | |
2026 | being passed; this would have caused $sender_host_name to have been used if | |
2027 | matching the list had actually called for a host name (not very likely, | |
2028 | since this list is usually IP addresses). A host name is now passed as | |
2029 | "[x.x.x.x]". | |
2030 | ||
2031 | 14. Changed the calls that set up the SIGCHLD handler in the daemon to use the | |
2032 | code that specifies a non-restarting handler (typically sigaction() in | |
2033 | modern systems) in an attempt to fix a rare and obscure crash bug. | |
2034 | ||
2035 | 15. Narrowed the window for a race in the daemon that could cause it to ignore | |
2036 | SIGCHLD signals. This is not a major problem, because they are used only to | |
2037 | wake it up if nothing else does. | |
2038 | ||
2039 | 16. A malformed maildirsize file could cause Exim to calculate negative values | |
2040 | for the mailbox size or file count. Odd effects could occur as a result. | |
2041 | The maildirsize information is now recalculated if the size or filecount | |
2042 | end up negative. | |
2043 | ||
2044 | 17. Added HAVE_SYS_STATVFS_H to the os.h file for Linux, as it has had this | |
2045 | support for a long time. Removed HAVE_SYS_VFS_H. | |
2046 | ||
ea3a6f44 | 2047 | 18. Updated exipick to current release from John Jetmore. |
bbe902f0 PH |
2048 | |
2049 | 19. Allow an empty sender to be matched against a lookup in an address list. | |
2050 | Previously the only cases considered were a regular expression, or an | |
2051 | empty pattern. | |
2052 | ||
2053 | 20. Exim went into a mad DNS lookup loop when doing a callout where the | |
2054 | host was specified on the transport, if the DNS lookup yielded more than | |
2055 | one IP address. | |
2056 | ||
ea3a6f44 NM |
2057 | 21. The RFC2047 encoding function was originally intended for short strings |
2058 | such as real names; it was not keeping to the 75-character limit for | |
2059 | encoded words that the RFC imposes. It now respects the limit, and | |
2060 | generates multiple encoded words if necessary. To be on the safe side, I | |
2061 | have increased the buffer size for the ${rfc2047: expansion operator from | |
2062 | 1024 to 2048 bytes. | |
bbe902f0 | 2063 | |
ea3a6f44 NM |
2064 | 22. Failure to deliver a bounce message always caused it to be frozen, even if |
2065 | there was an errors_to setting on the router. The errors_to setting is now | |
2066 | respected. | |
bbe902f0 PH |
2067 | |
2068 | 23. If an IPv6 address is given for -bh or -bhc, it is now converted to the | |
2069 | canonical form (fully expanded) before being placed in | |
2070 | $sender_host_address. | |
2071 | ||
2072 | 24. Updated eximstats to version 1.33 | |
2073 | ||
ea3a6f44 NM |
2074 | 25. Include certificate and key file names in error message when GnuTLS fails |
2075 | to set them up, because the GnuTLS error message doesn't include the name | |
2076 | of the failing file when there is a problem reading it. | |
bbe902f0 PH |
2077 | |
2078 | 26. Expand error message when OpenSSL has problems setting up cert/key files. | |
ea3a6f44 | 2079 | As per change 25. |
bbe902f0 | 2080 | |
ea3a6f44 NM |
2081 | 27. Reset the locale to "C" after calling embedded Perl, in case it was changed |
2082 | (this can affect the format of dates). | |
bbe902f0 | 2083 | |
ea3a6f44 NM |
2084 | 28. exim_tidydb, when checking for the continued existence of a message for |
2085 | which it has found a message-specific retry record, was not finding | |
2086 | messages that were in split spool directories. Consequently, it was | |
2087 | deleting retry records that should have stayed in existence. | |
bbe902f0 PH |
2088 | |
2089 | 29. eximstats updated to version 1.35 | |
2090 | 1.34 - allow eximstats to parse syslog lines as well as mainlog lines | |
2091 | 1.35 - bugfix such that pie charts by volume are generated correctly | |
2092 | ||
ea3a6f44 NM |
2093 | 30. The SPA authentication driver was not abandoning authentication and moving |
2094 | on to the next authenticator when an expansion was forced to fail, | |
2095 | contradicting the general specification for all authenticators. Instead it | |
2096 | was generating a temporary error. It now behaves as specified. | |
bbe902f0 | 2097 | |
ea3a6f44 NM |
2098 | 31. The default ordering of permitted cipher suites for GnuTLS was pessimal |
2099 | (the order specifies the preference for clients). The order is now AES256, | |
2100 | AES128, 3DES, ARCFOUR128. | |
bbe902f0 | 2101 | |
ea3a6f44 NM |
2102 | 31. Small patch to Sieve code - explicitly set From: when generating an |
2103 | autoreply. | |
bbe902f0 | 2104 | |
ea3a6f44 NM |
2105 | 32. Exim crashed if a remote delivery caused a very long error message to be |
2106 | recorded - for instance if somebody sent an entire SpamAssassin report back | |
2107 | as a large number of 550 error lines. This bug was coincidentally fixed by | |
2108 | increasing the size of one of Exim's internal buffers (big_buffer) that | |
2109 | happened as part of the Exiscan merge. However, to be on the safe side, I | |
2110 | have made the code more robust (and fixed the comments that describe what | |
2111 | is going on). | |
bbe902f0 | 2112 | |
ea3a6f44 NM |
2113 | 33. Some experimental protocols are using DNS PTR records for new purposes. The |
2114 | keys for these records are domain names, not reversed IP addresses. The | |
2115 | dnsdb PTR lookup now tests whether its key is an IP address. If not, it | |
2116 | leaves it alone. Component reversal etc. now happens only for IP addresses. | |
bbe902f0 PH |
2117 | CAN-2005-0021 |
2118 | ||
ea3a6f44 NM |
2119 | 34. The host_aton() function is supposed to be passed a string that is known |
2120 | to be a valid IP address. However, in the case of IPv6 addresses, it was | |
2121 | not checking this. This is a hostage to fortune. Exim now panics and dies | |
2122 | if the condition is not met. A case was found where this could be provoked | |
2123 | from a dnsdb PTR lookup with an IPv6 address that had more than 8 | |
2124 | components; fortuitously, this particular loophole had already been fixed | |
2125 | by change 4.50/55 or 4.44/33 above. | |
2126 | ||
2127 | If there are any other similar loopholes, the new check in host_aton() | |
2128 | itself should stop them being exploited. The report I received stated that | |
2129 | data on the command line could provoke the exploit when Exim was running as | |
2130 | exim, but did not say which command line option was involved. All I could | |
2131 | find was the use of -be with a bad dnsdb PTR lookup, and in that case it is | |
2132 | running as the user. | |
bbe902f0 PH |
2133 | CAN-2005-0021 |
2134 | ||
ea3a6f44 NM |
2135 | 35. There was a buffer overflow vulnerability in the SPA authentication code |
2136 | (which came originally from the Samba project). I have added a test to the | |
2137 | spa_base64_to_bits() function which I hope fixes it. | |
bbe902f0 PH |
2138 | CAN-2005-0022 |
2139 | ||
ea3a6f44 NM |
2140 | 36. The daemon start-up calls getloadavg() while still root for those OS that |
2141 | need the first call to be done as root, but it missed one case: when | |
2142 | deliver_queue_load_max is set with deliver_drop_privilege. This is | |
2143 | necessary for the benefit of the queue runner, because there is no re-exec | |
2144 | when deliver_drop_privilege is set. | |
bbe902f0 | 2145 | |
ea3a6f44 NM |
2146 | 37. Caching of lookup data for "hosts =" ACL conditions, when a named host list |
2147 | was in use, was not putting the data itself into the right store pool; | |
2148 | consequently, it could be overwritten for a subsequent message in the same | |
2149 | SMTP connection. (Fix 4.40/11 dealt with the non-cache case, but overlooked | |
2150 | the caching.) | |
bbe902f0 | 2151 | |
ea3a6f44 NM |
2152 | 38. Sometimes the final signoff response after QUIT could fail to get |
2153 | transmitted in the non-TLS case. Testing !tls_active instead of tls_active | |
2154 | < 0 before doing a fflush(). This bug looks as though it goes back to the | |
2155 | introduction of TLS in release 3.20, but "sometimes" must have been rare | |
2156 | because the tests only now provoked it. | |
bbe902f0 PH |
2157 | |
2158 | ||
495ae4b0 PH |
2159 | Exim version 4.43 |
2160 | ----------------- | |
2161 | ||
2162 | 1. Fixed a longstanding but relatively impotent bug: a long time ago, before | |
2163 | PIPELINING, the function smtp_write_command() used to return TRUE or FALSE. | |
2164 | Now it returns an integer. A number of calls were still expecting a T/F | |
2165 | return. Fortuitously, in all cases, the tests worked in OK situations, | |
2166 | which is the norm. However, things would have gone wrong on any write | |
2167 | failures on the smtp file descriptor. This function is used when sending | |
2168 | messages over SMTP and also when doing verify callouts. | |
2169 | ||
2170 | 2. When Exim is called to do synchronous delivery of a locally submitted | |
2171 | message (the -odf or -odi options), it no longer closes stderr before doing | |
2172 | the delivery. | |
2173 | ||
2174 | 3. Implemented the mua_wrapper option. | |
2175 | ||
2176 | 4. Implemented mx_fail_domains and srv_fail_domains for the dnslookup router. | |
2177 | ||
2178 | 5. Implemented the functions header_remove(), header_testname(), | |
2179 | header_add_at_position(), and receive_remove_recipient(), and exported them | |
2180 | to local_scan(). | |
2181 | ||
2182 | 6. If an ACL "warn" statement specified the addition of headers, Exim already | |
2183 | inserted X-ACL-Warn: at the start if there was no header name. However, it | |
2184 | was not making this test for the second and subsequent header lines if | |
2185 | there were newlines in the string. This meant that an invalid header could | |
2186 | be inserted if Exim was badly configured. | |
2187 | ||
2188 | 7. Allow an ACL "warn" statement to add header lines at the start or after all | |
2189 | the Received: headers, as well as at the end. | |
2190 | ||
2191 | 8. Added the rcpt_4xx retry error code. | |
2192 | ||
2193 | 9. Added postmaster_mailfrom=xxx to callout verification option. | |
2194 | ||
2195 | 10. Added mailfrom=xxxx to the callout verification option, for verify= | |
2196 | header_sender only. | |
2197 | ||
2198 | 11. ${substr_1_:xxxx} and ${substr__3:xxxx} are now diagnosed as syntax errors | |
2199 | (they previously behaved as ${substr_1_0:xxxx} and ${substr:_0_3:xxxx}). | |
2200 | ||
2201 | 12. Inserted some casts to stop certain compilers warning when using pointer | |
2202 | differences as field lengths or precisions in printf-type calls (mostly | |
2203 | affecting debugging statements). | |
2204 | ||
2205 | 13. Added optional readline() support for -be (dynamically loaded). | |
2206 | ||
2207 | 14. Obscure bug fix: if a message error (e.g. 4xx to MAIL) happened within the | |
2208 | same clock tick as a message's arrival, so that its received time was the | |
2209 | same as the "first fail" time on the retry record, and that message | |
2210 | remained on the queue past the ultimate address timeout, every queue runner | |
2211 | would try a delivery (because it was past the ultimate address timeout) but | |
2212 | after another failure, the ultimate address timeout, which should have then | |
2213 | bounced the address, did not kick in. This was a "< instead of <=" error; | |
2214 | in most cases the first failure would have been in the next clock tick | |
2215 | after the received time, and all would be well. | |
2216 | ||
2217 | 15. The special items beginning with @ in domain lists (e.g. @mx_any) were not | |
2218 | being recognized when the domain list was tested by the match_domain | |
2219 | condition in an expansion string. | |
2220 | ||
2221 | 16. Added the ${str2b64: operator. | |
2222 | ||
2223 | 17. Exim was always calling setrlimit() to set a large limit for the number of | |
2224 | processes, without checking whether the existing limit was already | |
2225 | adequate. (It did check for the limit on file descriptors.) Furthermore, | |
2226 | errors from getrlimit() and setrlimit() were being ignored. Now they are | |
2227 | logged to the main and panic logs, but Exim does carry on, to try to do its | |
2228 | job under whatever limits there are. | |
2229 | ||
2230 | 18. Imported PCRE 5.0. | |
2231 | ||
2232 | 19. Trivial typo in log message " temporarily refused connection" (the leading | |
2233 | space). | |
2234 | ||
2235 | 20. If the log selector return_path_on_delivery was set and an address was | |
2236 | redirected to /dev/null, the delivery process crashed because it assumed | |
2237 | that a return path would always be set for a "successful" delivery. In this | |
2238 | case, the whole delivery is bypassed as an optimization, and therefore no | |
2239 | return path is set. | |
2240 | ||
2241 | 21. Internal re-arrangement: the function for sending a challenge and reading | |
2242 | a response while authentication was assuming a zero-terminated challenge | |
2243 | string. It's now changed to take a pointer and a length, to allow for | |
2244 | binary data in such strings. | |
2245 | ||
2246 | 22. Added the cyrus_sasl authenticator (code supplied by MBM). | |
2247 | ||
2248 | 23. Exim was not respecting finduser_retries when seeking the login of the | |
2249 | uid under which it was called; it was always trying 10 times. (The default | |
2250 | setting of finduser_retries is zero.) Also, it was sleeping after the final | |
2251 | failure, which is pointless. | |
2252 | ||
2253 | 24. Implemented tls_on_connect_ports. | |
2254 | ||
2255 | 25. Implemented acl_smtp_predata. | |
2256 | ||
2257 | 26. If the domain in control=submission is set empty, Exim assumes that the | |
2258 | authenticated id is a complete email address when it generates From: or | |
2259 | Sender: header lines. | |
2260 | ||
2261 | 27. Added "#define SOCKLEN_T int" to OS/os.h-SCO and OS/os.h-SCO_SV. Also added | |
2262 | definitions to OS/Makefile-SCO and OS/Makefile-SCO_SV that put basename, | |
2263 | chown and chgrp in /bin and hostname in /usr/bin. | |
2264 | ||
2265 | 28. Exim was keeping the "process log" file open after each use, just as it | |
2266 | does for the main log. This opens the possibility of it remaining open for | |
2267 | long periods when the USR1 signal hits a daemon. Occasional processlog | |
2268 | errors were reported, that could have been caused by this. Anyway, it seems | |
2269 | much more sensible not to leave this file open at all, so that is what now | |
2270 | happens. | |
2271 | ||
2272 | 29. The long-running daemon process does not normally write to the log once it | |
2273 | has entered its main loop, and it closes the log before doing so. This is | |
2274 | so that log files can straightforwardly be renamed and moved. However, | |
2275 | there are a couple of unusual error situations where the daemon does write | |
2276 | log entries, and I had neglected to close the log afterwards. | |
2277 | ||
2278 | 30. The text of an SMTP error response that was received during a remote | |
2279 | delivery was being truncated at 512 bytes. This is too short for some of | |
2280 | the long messages that one sometimes sees. I've increased the limit to | |
2281 | 1024. | |
2282 | ||
2283 | 31. It is now possible to make retry rules that apply only when a message has a | |
2284 | specific sender, in particular, an empty sender. | |
2285 | ||
2286 | 32. Added "control = enforce_sync" and "control = no_enforce_sync". This makes | |
2287 | it possible to be selective about when SMTP synchronization is enforced. | |
2288 | ||
2289 | 33. Added "control = caseful_local_part" and "control = "caselower_local_part". | |
2290 | ||
2291 | 32. Implemented hosts_connection_nolog. | |
2292 | ||
2293 | 33. Added an ACL for QUIT. | |
2294 | ||
2295 | 34. Setting "delay_warning=" to disable warnings was not working; it gave a | |
2296 | syntax error. | |
2297 | ||
2298 | 35. Added mailbox_size and mailbox_filecount to appendfile. | |
2299 | ||
2300 | 36. Added control = no_multiline_responses to ACLs. | |
2301 | ||
2302 | 37. There was a bug in the logic of the code that waits for the clock to tick | |
2303 | in the case where the clock went backwards by a substantial amount such | |
2304 | that the microsecond fraction of "now" was more than the microsecond | |
2305 | fraction of "then" (but the whole seconds number was less). | |
2306 | ||
2307 | 38. Added support for the libradius Radius client library this is found on | |
2308 | FreeBSD (previously only the radiusclient library was supported). | |
2309 | ||
2310 | ||
2311 | Exim version 4.42 | |
2312 | ----------------- | |
2313 | ||
2314 | 1. When certain lookups returned multiple values in the form name=value, the | |
2315 | quoting of the values was not always being done properly. Specifically: | |
2316 | (a) If the value started with a double quote, but contained no whitespace, | |
2317 | it was not quoted. | |
2318 | (b) If the value contained whitespace other than a space character (i.e. | |
2319 | tabs or newlines or carriage returns) it was not quoted. | |
2320 | This fix has been applied to the mysql and pgsql lookups by writing a | |
2321 | separate quoting function and calling it from the lookup code. The fix | |
2322 | should probably also be applied to nisplus, ibase and oracle lookups, but | |
2323 | since I cannot test any of those, I have not disturbed their existing code. | |
2324 | ||
2325 | 2. A hit in the callout cache for a specific address caused a log line with no | |
2326 | reason for rejecting RCPT. Now it says "Previous (cached) callout | |
2327 | verification failure". | |
2328 | ||
2329 | 3. There was an off-by-one bug in the queryprogram router. An over-long | |
2330 | return line was truncated at 256 instead of 255 characters, thereby | |
2331 | overflowing its buffer with the terminating zero. As well as fixing this, I | |
2332 | have increased the buffer size to 1024 (and made a note to document this). | |
2333 | ||
2334 | 4. If an interrupt, such as the USR1 signal that is send by exiwhat, arrives | |
2335 | when Exim is waiting for an SMTP response from a remote server, Exim | |
2336 | restarts its select() call on the socket, thereby resetting its timeout. | |
2337 | This is not a problem when such interrupts are rare. Somebody set up a cron | |
2338 | job to run exiwhat every 2 minutes, which is less than the normal select() | |
2339 | timeout (5 or 10 minutes). This meant that the select() timeout never | |
2340 | kicked in because it was always reset. I have fixed this by comparing the | |
2341 | time when an interrupt arrives with the time at the start of the first call | |
2342 | to select(). If more time than the timeout has elapsed, the interrupt is | |
2343 | treated as a timeout. | |
2344 | ||
2345 | 5. Some internal re-factoring in preparation for the addition of Sieve | |
2346 | extensions (by MH). In particular, the "personal" test is moved to a | |
2347 | separate function, and given an option for scanning Cc: and Bcc: (which is | |
2348 | not set for Exim filters). | |
2349 | ||
2350 | 6. When Exim created an email address using the login of the caller as the | |
2351 | local part (e.g. when creating a From: or Sender: header line), it was not | |
2352 | quoting the local part when it contained special characters such as @. | |
2353 | ||
2354 | 7. Installed new OpenBSD configuration files. | |
2355 | ||
2356 | 8. Reworded some messages for syntax errors in "and" and "or" conditions to | |
2357 | try to make them clearer. | |
2358 | ||
2359 | 9. Callout options, other than the timeout value, were being ignored when | |
2360 | verifying sender addresses in header lines. For example, when using | |
2361 | ||
2362 | verify = header_sender/callout=no_cache | |
2363 | ||
2364 | the cache was (incorrectly) being used. | |
2365 | ||
2366 | 10. Added a missing instance of ${EXE} to the exim_install script; this affects | |
2367 | only the Cygwin environment. | |
2368 | ||
2369 | 11. When return_path_on_delivery was set as a log selector, if different remote | |
2370 | addresses in the same message used different return paths and parallel | |
2371 | remote delivery occurred, the wrong values would sometimes be logged. | |
2372 | (Whenever a remote delivery process finished, the return path value from | |
2373 | the most recently started remote delivery process was logged.) | |
2374 | ||
2375 | 12. RFC 3848 specifies standard names for the "with" phrase in Received: header | |
2376 | lines when AUTH and/or TLS are in use. This is the "received protocol" | |
2377 | field. Exim used to use "asmtp" for authenticated SMTP, without any | |
2378 | indication (in the protocol name) for TLS use. Now it follows the RFC and | |
2379 | uses "esmtpa" if the connection is authenticated, "esmtps" if it is | |
2380 | encrypted, and "esmtpsa" if it is both encrypted and authenticated. These | |
2381 | names appear in log lines as well as in Received: header lines. | |
2382 | ||
2383 | 13. Installed MH's patches for Sieve to add the "copy" and "vacation" | |
2384 | extensions, and comparison tests, and to fix some bugs. | |
2385 | ||
2386 | 14. Changes to the "personal" filter test: | |
2387 | ||
2388 | (1) The test was buggy in that it was just doing the equivalent of | |
2389 | "contains" tests on header lines. For example, if a user's address was | |
2390 | anne@some.where, the "personal" test would incorrectly be true for | |
2391 | ||
2392 | To: susanne@some.where | |
2393 | ||
2394 | This test is now done by extracting each address from the header in turn, | |
2395 | and checking the entire address. Other tests that are part of "personal" | |
2396 | are now done using regular expressions (for example, to check local parts | |
2397 | of addresses in From: header lines). | |
2398 | ||
2399 | (2) The list of non-personal local parts in From: addresses has been | |
2400 | extended to include "listserv", "majordomo", "*-request", and "owner-*", | |
2401 | taken from the Sieve specification recommendations. | |
2402 | ||
2403 | (3) If the message contains any header line starting with "List-" it is | |
2404 | treated as non-personal. | |
2405 | ||
2406 | (4) The test for "circular" in the Subject: header line has been removed | |
2407 | because it now seems ill-conceived. | |
2408 | ||
2409 | 15. Minor typos in src/EDITME comments corrected. | |
2410 | ||
2411 | 16. Installed latest exipick from John Jetmore. | |
2412 | ||
2413 | 17. If headers_add on a router specified a text string that was too long for | |
2414 | string_sprintf() - that is, longer than 8192 bytes - Exim panicked. The use | |
2415 | of string_sprintf() is now avoided. | |
2416 | ||
2417 | 18. $message_body_size was not set (it was always zero) when running the DATA | |
2418 | ACL and the local_scan() function. | |
2419 | ||
2420 | 19. For the "mail" command in an Exim filter, no default was being set for | |
2421 | the once_repeat time, causing a random time value to be used if "once" was | |
2422 | specified. (If the value happened to be <= 0, no repeat happened.) The | |
2423 | default is now 0s, meaning "never repeat". The "vacation" command was OK | |
2424 | (its default is 7d). It's somewhat surprising nobody ever noticed this bug | |
2425 | (I found it when inspecting the code). | |
2426 | ||
2427 | 20. There is now an overall timeout for performing a callout verification. It | |
2428 | defaults to 4 times the callout timeout, which applies to individual SMTP | |
2429 | commands during the callout. The overall timeout applies when there is more | |
2430 | than one host that can be tried. The timeout is checked before trying the | |
2431 | next host. This prevents very long delays if there are a large number of | |
2432 | hosts and all are timing out (e.g. when the network connections are timing | |
2433 | out). The value of the overall timeout can be changed by specifying an | |
2434 | additional sub-option for "callout", called "maxwait". For example: | |
2435 | ||
2436 | verify = sender/callout=5s,maxwait=20s | |
2437 | ||
2438 | 21. Add O_APPEND to the open() call for maildirsize files (Exim already seeks | |
2439 | to the end before writing, but this should make it even safer). | |
2440 | ||
2441 | 22. Exim was forgetting that it had advertised PIPELINING for the second and | |
2442 | subsequent messages on an SMTP connection. It was also not resetting its | |
2443 | memory on STARTTLS and an internal HELO. | |
2444 | ||
2445 | 23. When Exim logs an SMTP synchronization error within a session, it now | |
2446 | records whether PIPELINING has been advertised or not. | |
2447 | ||
2448 | 24. Added 3 instances of "(long int)" casts to time_t variables that were being | |
2449 | formatted using %ld, because on OpenBSD (and perhaps others), time_t is int | |
2450 | rather than long int. | |
2451 | ||
2452 | 25. Installed the latest Cygwin configuration files from the Cygwin maintainer. | |
2453 | ||
2454 | 26. Added the never_mail option to autoreply. | |
2455 | ||
2456 | ||
2457 | Exim version 4.41 | |
2458 | ----------------- | |
2459 | ||
2460 | 1. A reorganization of the code in order to implement 4.40/8 caused a daemon | |
2461 | crash if the getsockname() call failed; this can happen if a connection is | |
2462 | closed very soon after it is established. The problem was simply in the | |
2463 | order in which certain operations were done, causing Exim to try to write | |
2464 | to the SMTP stream before it had set up the file descriptor. The bug has | |
2465 | been fixed by making things happen in the correct order. | |
2466 | ||
2467 | ||
2468 | Exim version 4.40 | |
2469 | ----------------- | |
2470 | ||
2471 | 1. If "drop" was used in a DATA ACL, the SMTP output buffer was not flushed | |
2472 | before the connection was closed, thus losing the rejection response. | |
2473 | ||
2474 | 2. Commented out the definition of SOCKLEN_T in os.h-SunOS5. It is needed for | |
2475 | some early Solaris releases, but causes trouble in current releases where | |
2476 | socklen_t is defined. | |
2477 | ||
2478 | 3. When std{in,out,err} are closed, re-open them to /dev/null so that they | |
2479 | always exist. | |
2480 | ||
2481 | 4. Minor refactoring of os.c-Linux to avoid compiler warning when IPv6 is not | |
2482 | configured. | |
2483 | ||
2484 | 5. Refactoring in expand.c to improve memory usage. Pre-allocate a block so | |
2485 | that releasing the top of it at the end releases what was used for sub- | |
2486 | expansions (unless the block got too big). However, discard this block if | |
2487 | the first thing is a variable or header, so that we can use its block when | |
2488 | it is dynamic (useful for very large $message_headers, for example). | |
2489 | ||
2490 | 6. Lookups now cache *every* query, not just the most recent. A new, separate | |
2491 | store pool is used for this. It can be recovered when all lookup caches are | |
2492 | flushed. Lookups now release memory at the end of their result strings. | |
2493 | This has involved some general refactoring of the lookup sources. | |
2494 | ||
2495 | 7. Some code has been added to the store_xxx() functions to reduce the amount | |
2496 | of flapping under certain conditions. | |
2497 | ||
2498 | 8. log_incoming_interface used to affect only the <= reception log lines. Now | |
2499 | it causes the local interface and port to be added to several more SMTP log | |
2500 | lines, for example "SMTP connection from", and rejection lines. | |
2501 | ||
2502 | 9. The Sieve author supplied some patches for the doc/README.SIEVE file. | |
2503 | ||
2504 | 10. Added a conditional definition of _BSD_SOCKLEN_T to os.h-Darwin. | |
2505 | ||
2506 | 11. If $host_data was set by virtue of a hosts lookup in an ACL, its value | |
2507 | could be overwritten at the end of the current message (or the start of a | |
2508 | new message if it was set in a HELO ACL). The value is now preserved for | |
2509 | the duration of the SMTP connection. | |
2510 | ||
2511 | 12. If a transport had a headers_rewrite setting, and a matching header line | |
2512 | contained an unqualified address, that address was qualified, even if it | |
2513 | did not match any rewriting rules. The underlying bug was that the values | |
2514 | of the flags that permit the existence of unqualified sender and recipient | |
2515 | addresses in header lines (set by {sender,recipient}_unqualified_hosts for | |
2516 | non-local messages, and by -bnq for local messages) were not being | |
2517 | preserved with the message after it was received. | |
2518 | ||
2519 | 13. When Exim was logging an SMTP synchronization error, it could sometimes log | |
2520 | "next input=" as part of the text comprising the host identity instead of | |
2521 | the correct text. The code was using the same buffer for two different | |
2522 | strings. However, depending on which order the printing function evaluated | |
2523 | its arguments, the bug did not always show up. Under Linux, for example, my | |
2524 | test suite worked just fine. | |
2525 | ||
2526 | 14. Exigrep contained a use of Perl's "our" scoping after change 4.31/70. This | |
2527 | doesn't work with some older versions of Perl. It has been changed to "my", | |
2528 | which in any case is probably the better facility to use. | |
2529 | ||
2530 | 15. A really picky compiler found some instances of statements for creating | |
2531 | error messages that either had too many or two few arguments for the format | |
2532 | string. | |
2533 | ||
2534 | 16. The size of the buffer for calls to the DNS resolver has been increased | |
2535 | from 1024 to 2048. A larger buffer is needed when performing PTR lookups | |
2536 | for addresses that have a lot of PTR records. This alleviates a problem; it | |
2537 | does not fully solve it. | |
2538 | ||
2539 | 17. A dnsdb lookup for PTR records that receives more data than will fit in the | |
2540 | buffer now truncates the list and logs the incident, which is the same | |
2541 | action as happens when Exim is looking up a host name and its aliases. | |
2542 | Previously in this situation something unpredictable would happen; | |
2543 | sometimes it was "internal error: store_reset failed". | |
2544 | ||
2545 | 18. If a server dropped the connection unexpectedly when an Exim client was | |
2546 | using GnuTLS and trying to read a response, the client delivery process | |
2547 | crashed while trying to generate an error log message. | |
2548 | ||
2549 | 19. If a "warn" verb in an ACL added multiple headers to a message in a single | |
2550 | string, for example: | |
2551 | ||
2552 | warn message = H1: something\nH2: something | |
2553 | ||
2554 | the text was added as a single header line from Exim's point of view | |
2555 | though it ended up OK in the delivered message. However, searching for the | |
2556 | second and subsequent header lines using $h_h2: did not work. This has been | |
2557 | fixed. Similarly, if a system filter added multiple headers in this way, | |
2558 | the routers could not see them. | |
2559 | ||
2560 | 20. Expanded the error message when iplsearch is called with an invalid key to | |
2561 | suggest using net-iplsearch in a host list. | |
2562 | ||
2563 | 21. When running tests using -bh, any delays imposed by "delay" modifiers in | |
2564 | ACLs are no longer actually imposed (and a message to that effect is | |
2565 | output). | |
2566 | ||
2567 | 22. If a "gecos" field in a passwd entry contained escaped characters, in | |
2568 | particular, if it contained a \" sequence, Exim got it wrong when building | |
2569 | a From: or a Sender: header from that name. A second bug also caused | |
2570 | incorrect handling when an unquoted " was present following a character | |
2571 | that needed quoting. | |
2572 | ||
2573 | 23. "{crypt}" as a password encryption mechanism for a "crypteq" expansion item | |
2574 | was not being matched caselessly. | |
2575 | ||
2576 | 24. Arranged for all hyphens in the exim.8 source to be escaped with | |
2577 | backslashes. | |
2578 | ||
2579 | 25. Change 16 of 4.32, which reversed 71 or 4.31 didn't quite do the job | |
2580 | properly. Recipient callout cache records were still being keyed to include | |
2581 | the sender, even when use_sender was set false. This led to far more | |
2582 | callouts that were necessary. The sender is no longer included in the key | |
2583 | when use_sender is false. | |
2584 | ||
2585 | 26. Added "control = submission" modifier to ACLs. | |
2586 | ||
2587 | 27. Added the ${base62d: operator to decode base 62 numbers. | |
2588 | ||
2589 | 28. dnsdb lookups can now access SRV records. | |
2590 | ||
2591 | 29. CONFIGURE_OWNER can be set at build time to define an alternative owner for | |
2592 | the configuration file. | |
2593 | ||
2594 | 30. The debug message "delivering xxxxxx-xxxxxx-xx" is now output in verbose | |
2595 | (-v) mode. This makes the output for a verbose queue run more intelligible. | |
2596 | ||
2597 | 31. Added a use_postmaster feature to recipient callouts. | |
2598 | ||
2599 | 32. Added the $body_zerocount variable, containing the number of binary zero | |
2600 | bytes in the message body. | |
2601 | ||
2602 | 33. The time of last modification of the "new" subdirectory is now used as the | |
2603 | "mailbox time last read" when there is a quota error for a maildir | |
2604 | delivery. | |
2605 | ||
2606 | 34. Added string comparison operators lt, lti, le, lei, gt, gti, ge, gei. | |
2607 | ||
2608 | 35. Added +ignore_unknown as a special item in host lists. | |
2609 | ||
2610 | 36. Code for decoding IPv6 addresses in host lists is now included, even if | |
2611 | IPv6 support is not being compiled. This fixes a bug in which an IPv6 | |
2612 | address was recognized as an IP address, but was then not correctly decoded | |
2613 | into binary, causing unexpected and incorrect effects when compared with | |
2614 | another IP address. | |
2615 | ||
2616 | ||
2617 | Exim version 4.34 | |
2618 | ----------------- | |
2619 | ||
2620 | 1. Very minor rewording of debugging text in manualroute to say "list of | |
2621 | hosts" instead of "hostlist". | |
2622 | ||
2623 | 2. If verify=header_syntax was set, and a header line with an unqualified | |
2624 | address (no domain) and a large number of spaces between the end of the | |
2625 | name and the colon was received, the reception process suffered a buffer | |
2626 | overflow, and (when I tested it) crashed. This was caused by some obsolete | |
2627 | code that should have been removed. The fix is to remove it! | |
2628 | ||
2629 | 3. When running in the test harness, delay a bit after writing a bounce | |
2630 | message to get a bit more predictability in the log output. | |
2631 | ||
2632 | 4. Added a call to search_tidyup() just before forking a reception process. In | |
2633 | theory, someone could use a lookup in the expansion of smtp_accept_max_ | |
2634 | per_host which, without the tidyup, could leave open a database connection. | |
2635 | ||
2636 | 5. Added the variables $recipient_data and $sender_data which get set from a | |
2637 | lookup success in an ACL "recipients" or "senders" condition, or a router | |
2638 | "senders" option, similar to $domain_data and $local_part_data. | |
2639 | ||
2640 | 6. Moved the writing of debug_print from before to after the "senders" test | |
2641 | for routers. | |
2642 | ||
2643 | 7. Change 4.31/66 (moving the time when the Received: is generated) caused | |
2644 | problems for message scanning, either using a data ACL, or using | |
2645 | local_scan() because the Received: header was not generated till after they | |
2646 | were called (in order to set the time as the time of reception completion). | |
2647 | I have revised the way this works. The header is now generated after the | |
2648 | body is received, but before the ACL or local_scan() are called. After they | |
2649 | are run, the timestamp in the header is updated. | |
2650 | ||
2651 | ||
2652 | Exim version 4.33 | |
2653 | ----------------- | |
2654 | ||
2655 | 1. Change 4.24/6 introduced a bug because the SIGALRM handler was disabled | |
2656 | before starting a queue runner without re-exec. This happened only when | |
2657 | deliver_drop_privilege was set or when the Exim user was set to root. The | |
2658 | effect of the bug was that timeouts during subsequent deliveries caused | |
2659 | crashes instead of being properly handled. The handler is now left at its | |
2660 | default (and expected) setting. | |
2661 | ||
2662 | 2. The other case in which a daemon avoids a re-exec is to deliver an incoming | |
2663 | message, again when deliver_drop_privilege is set or Exim is run as root. | |
2664 | The bug described in (1) was not present in this case, but the tidying up | |
2665 | of the other signals was missing. I have made the two cases consistent. | |
2666 | ||
2667 | 3. The ignore_target_hosts setting on a manualroute router was being ignored | |
2668 | for hosts that were looked up using the /MX notation. | |
2669 | ||
2670 | 4. Added /ignore=<ip list> feature to @mx_any, @mx_primary, and @mx_secondary | |
2671 | in domain lists. | |
2672 | ||
2673 | 5. Change 4.31/55 was buggy, and broke when there was a rewriting rule that | |
2674 | operated on the sender address. After changing the $sender_address to <> | |
2675 | for the sender address verify, Exim was re-instated it as the original | |
2676 | (before rewriting) address, but remembering that it had rewritten it, so it | |
2677 | wasn't rewriting it again. This bug also had the effect of breaking the | |
2678 | sender address verification caching when the sender address was rewritten. | |
2679 | ||
2680 | 6. The ignore_target_hosts option was being ignored by the ipliteral router. | |
2681 | This has been changed so that if the ip literal address matches | |
2682 | ignore_target_hosts, the router declines. | |
2683 | ||
2684 | 7. Added expansion conditions match_domain, match_address, and match_local_ | |
2685 | part (NOT match_host). | |
2686 | ||
2687 | 8. The placeholder for the Received: header didn't have a length field set. | |
2688 | ||
2689 | 9. Added code to Exim itself and to exim_lock to test for a specific race | |
2690 | condition that could lead to file corruption when using MBX delivery. The | |
2691 | issue is with the lockfile that is created in /tmp. If this file is removed | |
2692 | after a process has opened it but before that process has acquired a lock, | |
2693 | there is the potential for a second process to recreate the file and also | |
2694 | acquire a lock. This could lead to two Exim processes writing to the file | |
2695 | at the same time. The added code performs the same test as UW imapd; it | |
2696 | checks after acquiring the lock that its file descriptor still refers to | |
2697 | the same named file. | |
2698 | ||
2699 | 10. The buffer for building added header lines was of fixed size, 8192 bytes. | |
2700 | It is now parameterized by HEADER_ADD_BUFFER_SIZE and this can be adjusted | |
2701 | when Exim is built. | |
2702 | ||
2703 | 11. Added the smtp_active_hostname option. If used, this will typically be made | |
2704 | to depend on the incoming interface address. Because $interface_address is | |
2705 | not set up until the daemon has forked a reception process, error responses | |
2706 | that can happen earlier (such as "too many connections") no longer contain | |
2707 | a host name. | |
2708 | ||
2709 | 12. If an expansion in a condition on a "warn" statement fails because a lookup | |
2710 | defers, the "warn" statement is abandoned, and the next ACL statement is | |
2711 | processed. Previously this caused the whole ACL to be aborted. | |
2712 | ||
2713 | 13. Added the iplsearch lookup type. | |
2714 | ||
2715 | 14. Added ident_timeout as a log selector. | |
2716 | ||
2717 | 15. Added tls_certificate_verified as a log selector. | |
2718 | ||
2719 | 16. Added a global option tls_require_ciphers (compare the smtp transport | |
2720 | option of the same name). This controls incoming TLS connections. | |
2721 | ||
2722 | 17. I finally figured out how to make tls_require_ciphers do a similar thing | |
2723 | in GNUtls to what it does in OpenSSL, that is, set up an appropriate list | |
2724 | before starting the TLS session. | |
2725 | ||
2726 | 18. Tabs are now shown as \t in -bP output. | |
2727 | ||
2728 | 19. If the log selector return_path_on_delivery was set, Exim crashed when | |
2729 | bouncing a message because it had too many Received: header lines. | |
2730 | ||
2731 | 20. If two routers both had headers_remove settings, and the first one included | |
2732 | a superfluous trailing colon, the final name in the first list and the | |
2733 | first name in the second list were incorrectly joined into one item (with a | |
2734 | colon in the middle). | |
2735 | ||
2736 | ||
2737 | Exim version 4.32 | |
2738 | ----------------- | |
2739 | ||
2740 | 1. Added -C and -D options to the exinext utility, mainly to make it easier | |
2741 | to include in the automated testing, but these could be helpful when | |
2742 | multiple configurations are in use. | |
2743 | ||
2744 | 2. The exinext utility was not formatting the output nicely when there was | |
2745 | an alternate port involved in the retry record key, nor when there was a | |
2746 | message id as well (for retries that were specific to a specific message | |
2747 | and a specific host). It was also confused by IPv6 addresses, because of | |
2748 | the additional colons they contain. I have fixed the IPv4 problem, and | |
2749 | patched it up to do a reasonable job for IPv6. | |
2750 | ||
2751 | 3. When there is an error after a MAIL, RCPT, or DATA SMTP command during | |
2752 | delivery, the log line now contains "pipelined" if PIPELINING was used. | |
2753 | ||
2754 | 4. An SMTP transport process used to panic and die if the bind() call to set | |
2755 | an explicit outgoing interface failed. This has been changed; it is now | |
2756 | treated in the same way as a connect() failure. | |
2757 | ||
2758 | 5. A reference to $sender_host_name in the part of a conditional expansion | |
2759 | that was being skipped was still causing a DNS lookup. This no longer | |
2760 | occurs. | |
2761 | ||
2762 | 6. The def: expansion condition was not recognizing references to header lines | |
2763 | that used bh_ and bheader_. | |
2764 | ||
2765 | 7. Added the _cache feature to named lists. | |
2766 | ||
2767 | 8. The code for checking quota_filecount in the appendfile transport was | |
2768 | allowing one more file than it should have been. | |
2769 | ||
2770 | 9. For compatibility with Sendmail, the command line option | |
2771 | ||
2772 | -prval:sval | |
2773 | ||
2774 | is equivalent to | |
2775 | ||
2776 | -oMr rval -oMs sval | |
2777 | ||
2778 | and sets the incoming protocol and host name (for trusted callers). The | |
2779 | host name and its colon can be omitted when only the protocol is to be set. | |
2780 | Note the Exim already has two private options, -pd and -ps, that refer to | |
2781 | embedded Perl. It is therefore impossible to set a protocol value of "d" or | |
2782 | "s", but I don't think that's a major issue. | |
2783 | ||
2784 | 10. A number of refactoring changes to the code, none of which should affect | |
2785 | Exim's behaviour: | |
2786 | ||
2787 | (a) The number of logging options was getting close to filling up the | |
2788 | 32-bit word that was used as a bit map. I have split them into two classes: | |
2789 | those that are passed in the argument to log_write(), and those that are | |
2790 | only ever tested independently outside of that function. These are now in | |
2791 | separate 32-bit words, so there is plenty of room for expansion again. | |
2792 | There is no change in the user interface or the logging behaviour. | |
2793 | ||
2794 | (b) When building, for example, log lines, the code previously used a | |
2795 | macro that called string_cat() twice, in order to add two strings. This is | |
2796 | not really sufficiently general. Furthermore, there was one instance where | |
2797 | it was actually wrong because one of the argument was used twice, and in | |
2798 | one call a function was used. (As it happened, calling the function twice | |
2799 | did not affect the overall behaviour.) The macro has been replaced by a | |
2800 | function that can join an arbitrary number of extra strings onto a growing | |
2801 | string. | |
2802 | ||
2803 | (c) The code for expansion conditions now uses a table and a binary chop | |
2804 | instead of a serial search (which was left over from when there were very | |
2805 | few conditions). Also, it now recognizes conditions like "pam" even when | |
2806 | the relevant support is not compiled in: a suitably worded error message is | |
2807 | given if an attempt is made to use such a condition. | |
2808 | ||
2809 | 11. Added ${time_interval:xxxxx}. | |
2810 | ||
2811 | 12. A bug was causing one of the ddress fields not to be passed back correctly | |
2812 | from remote delivery subprocesses. The field in question was not being | |
2813 | subsequently used, so this caused to problems in practice. | |
2814 | ||
2815 | 13. Added new log selectors queue_time and deliver_time. | |
2816 | ||
2817 | 14. Might have fixed a bug in maildirsizefile handling that threw up | |
2818 | "unexpected character" debug warnings, and recalculated the data | |
2819 | unnecessarily. In any case, I expanded the warning message to give more | |
2820 | information. | |
2821 | ||
2822 | 15. Added the message "Restricted characters in address" to the statements in | |
2823 | the default ACL that block characters like @ and % in local parts. | |
2824 | ||
2825 | 16. Change 71 for release 4.31 proved to be much less benign that I imagined. | |
2826 | Three changes have been made: | |
2827 | ||
2828 | (a) There was a serious bug; a negative response to MAIL caused the whole | |
2829 | recipient domain to be cached as invalid, thereby blocking all messages | |
2830 | to all local parts at the same domain, from all senders. This bug has | |
2831 | been fixed. The domain is no longer cached after a negative response to | |
2832 | MAIL if the sender used is not empty. | |
2833 | ||
2834 | (b) The default behaviour of using MAIL FROM:<> for recipient callouts has | |
2835 | been restored. | |
2836 | ||
2837 | (c) A new callout option, "use_sender" has been added for people who want | |
2838 | the modified behaviour. | |
2839 | ||
2840 | ||
2841 | Exim version 4.31 | |
2842 | ----------------- | |
2843 | ||
2844 | 1. Removed "EXTRALIBS=-lwrap" from OS/Makefile-Unixware7 on the advice of | |
2845 | Larry Rosenman. | |
2846 | ||
2847 | 2. Removed "LIBS = -lresolv" from OS/Makefile-Darwin as it is not needed, and | |
2848 | indeed breaks things for older releases. | |
2849 | ||
2850 | 3. Added additional logging to the case where there is a problem reading data | |
2851 | from a filter that is running in a subprocess using a pipe, in order to | |
2852 | try to track down a specific problem. | |
2853 | ||
2854 | 4. Testing facility fudge: when running in the test harness and attempting | |
2855 | to connect to 10.x.x.x (expecting a connection timeout) I'm now sometimes | |
2856 | getting "No route to host". Convert this to a timeout. | |
2857 | ||
2858 | 5. Define ICONV_ARG2_TYPE as "char **" for Unixware7 to avoid compiler | |
2859 | warning. | |
2860 | ||
2861 | 6. Some OS don't have socklen_t but use size_t instead. This affects the | |
2862 | fifth argument of getsockopt() amongst other things. This is now | |
2863 | configurable by a macro called SOCKLEN_T which defaults to socklen_t, but | |
2864 | can be set for individual OS. I have set it for SunOS5, OSF1, and | |
2865 | Unixware7. Current versions of SunOS5 (aka Solaris) do have socklen_t, but | |
2866 | some earlier ones do not. | |
2867 | ||
2868 | 7. Change 4.30/15 was not doing the test caselessly. | |
2869 | ||
2870 | 8. The standard form for an IPv6 address literal was being rejected by address | |
2871 | parsing in, for example, MAIL and RCPT commands. An example of this kind of | |
2872 | address is [IPv6:2002:c1ed:8229:10:202:2dff:fe07:a42a]. Exim now accepts | |
2873 | this, as well as the form without the "IPv6" on the front (but only when | |
2874 | address literals are enabled, of course). | |
2875 | ||
2876 | 9. Added some casts to avoid compiler warnings in OS/os.c-Linux. | |
2877 | ||
2878 | 10. Exim crashed if a message with an empty sender address specified by -f | |
2879 | encountered a router with an errors_to setting. This could be provoked only | |
2880 | by a command such as | |
2881 | ||
2882 | exim -f "" ... | |
2883 | ||
2884 | where an empty string was supplied; "<>" did not hit this bug. | |
2885 | ||
2886 | 11. Installed PCRE release 4.5. | |
2887 | ||
2888 | 12. If EHLO/HELO was rejected by an ACL, the value of $sender_helo_name | |
2889 | remained set. It is now erased. | |
2890 | ||
2891 | 13. exiqgrep wasn't working on MacOS X because it didn't correctly compute | |
2892 | times from message ids (which are base 36 rather than the normal 62). | |
2893 | ||
2894 | 14. "Expected" SMTP protocol errors that can arise when PIPELINING is in use | |
2895 | were being counted as actual protocol errors, and logged if the log | |
2896 | selector +smtp_protocol_error was set. One cannot be perfect in this test, | |
2897 | but now, if PIPELINING has been advertised, RCPT following a rejected MAIL, | |
2898 | and DATA following a set of rejected RCPTs do not count as protocol errors. | |
2899 | In other words, Exim assumes they were pipelined, though this may not | |
2900 | actually be the case. Of course, in all cases the client gets an | |
2901 | appropriate error code. | |
2902 | ||
2903 | 15. If a lookup fails in an ACL condition, a message about the failure may | |
2904 | be available; it is used if testing the ACL cannot continue, because most | |
2905 | such messages specify what the cause of the deferral is. However, some | |
2906 | messages (e.g. "MYSQL: no data found") do not cause a defer. There was bug | |
2907 | that caused an old message to be retained and used if a later statement | |
2908 | caused a defer, replacing the real cause of the deferral. | |
2909 | ||
2910 | 16. If an IP address had so many PTR records that the DNS lookup buffer | |
2911 | was not large enough to hold them, Exim could crash while trying to process | |
2912 | the truncated data. It now detects and logs this case. | |
2913 | ||
2914 | 17. Further to 4.21/58, another change has been made: if (and only if) the | |
2915 | first line of a message (the first header line) ends with CRLF, a bare LF | |
2916 | in a subsequent header line has a space inserted after it, so as not to | |
2917 | terminate the header. | |
2918 | ||
2919 | 18. Refactoring: tidied an ugly bit of code in appendfile that copied data | |
2920 | unnecessarily, used atoi() instead of strtol(), and didn't check the | |
2921 | termination when getting file sizes from file names by regex. | |
2922 | ||
2923 | 19. Completely re-implemented the support for maildirsize files, in the light | |
2924 | of a number of problems with the previous contributed implementation | |
2925 | (4.30/29). In particular: | |
2926 | ||
2927 | . If the quota is zero, the maildirsize file is maintained, but no quota is | |
2928 | imposed. | |
2929 | ||
2930 | . If the maildir directory does not exist, it is created before any attempt | |
2931 | to write a maildirsize file. | |
2932 | ||
2933 | . The quota value in the file is just a cache; if the quota is changed in | |
2934 | the transport, the new value overrides. | |
2935 | ||
2936 | . A regular expression is available for excluding directories from the | |
2937 | count. | |
2938 | ||
2939 | 20. The autoreply transport checks the characters in options that define the | |
2940 | message's headers; it allows continued headers, but it was checking with | |
2941 | isspace() after an embedded newline instead of explicitly looking for a | |
2942 | space or a tab. | |
2943 | ||
2944 | 21. If all the "regular" hosts to which an address was routed had passed their | |
2945 | expiry times, and had not reached their retry times, the address was | |
2946 | bounced, even if fallback hosts were defined. Now Exim should go on to try | |
2947 | the fallback hosts. | |
2948 | ||
2949 | 22. Increased buffer sizes in the callout code from 1024 to 4096 to match the | |
2950 | equivalent code in the SMTP transport. Some hosts send humungous responses | |
2951 | to HELO/EHLO, more than 1024 it seems. | |
2952 | ||
2953 | 23. Refactoring: code in filter.c used (void *) for "any old type" but this | |
2954 | gives compiler warnings in some environments. I've now done it "properly", | |
2955 | using a union. | |
2956 | ||
2957 | 24. The replacement for inet_ntoa() that is used with gcc on IRIX systems | |
2958 | (because of problems with the built-in one) was declared to return uschar * | |
2959 | instead of char *, causing compiler failure. | |
2960 | ||
2961 | 25. Fixed a file descriptor leak when processing alias/forward files. | |
2962 | ||
2963 | 26. Fixed a minor format string issue in dbfn.c. | |
2964 | ||
2965 | 27. Typo in exim.c: ("dmbnz" for "dbmnz"). | |
2966 | ||
2967 | 28. If a filter file refered to $h_xxx or $message_headers, and the headers | |
2968 | contained RFC 2047 "words", Exim's memory could, under certain conditions, | |
2969 | become corrupted. | |
2970 | ||
2971 | 29. When a sender address is verified, it is cached, to save repeating the test | |
2972 | when there is more than one recipient in a message. However, when the | |
2973 | verification involves a callout, it is possible for different callout | |
2974 | options to be set for different recipients. It is too complicated to keep | |
2975 | track of this in the cache, so now Exim always runs a verification when a | |
2976 | callout is required, relying on the callout cache for the optimization. | |
2977 | The overhead is duplication of the address routing, but this should not be | |
2978 | too great. | |
2979 | ||
2980 | 30. Fixed a bug in callout caching. If a RCPT command caused the sender address | |
2981 | to be verified with callout=postmaster, and the main callout worked but the | |
2982 | postmaster check failed, the verification correctly failed. However, if a | |
2983 | subsequent RCPT command asked for sender verification *without* the | |
2984 | postmaster check, incorrect caching caused this verification also to fail, | |
2985 | incorrectly. | |
2986 | ||
2987 | 31. Exim caches DNS lookup failures so as to avoid multiple timeouts; however, | |
2988 | it was not caching the DNS options (qualify_single, search_parents) that | |
2989 | were used when the lookup failed. A subsequent lookup with different | |
2990 | options therefore always gave the same answer, though there were cases | |
2991 | where it should not have. (Example: a "domains = !$mx_any" option on a | |
2992 | dnslookup router: the "domains" option is always processed without any | |
2993 | widening, but the router might have qualify_single set.) Now Exim uses the | |
2994 | cached value only when the same options are set. | |
2995 | ||
2996 | 32. Added John Jetmore's "exipick" utility to the distribution. | |
2997 | ||
2998 | 33. GnuTLS: When an attempt to start a TLS session fails for any reason other | |
2999 | than a timeout (e.g. a certificate is required, and is not provided), an | |
3000 | Exim server now closes the connection immediately. Previously it waited for | |
3001 | the client to close - but if the client is SSL, it seems that they each | |
3002 | wait for each other, leading to a delay before one of them times out. | |
3003 | ||
3004 | 34: GnuTLS: Updated the code to use the new GnuTLS 1.0.0 API. I have not | |
3005 | maintained 0.8.x compatibility because I don't think many are using it, and | |
3006 | it is clearly obsolete. | |
3007 | ||
3008 | 35. Added TLS support for CRLs: a tls_crl global option and one for the smtp | |
3009 | transport. | |
3010 | ||
3011 | 36. OpenSSL: $tls_certificate_verified was being set to 1 even if the | |
3012 | client certificate was expired. A simple patch fixes this, though I don't | |
3013 | understand the full logic of why the verify callback is called multiple | |
3014 | times. | |
3015 | ||
3016 | 37. OpenSSL: a patch from Robert Roselius: "Enable client-bug workaround. | |
3017 | Versions of OpenSSL as of 0.9.6d include a 'CBC countermeasure' feature, | |
3018 | which causes problems with some clients (such as the Certicom SSL Plus | |
3019 | library used by Eudora). This option, SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS, | |
3020 | disables the coutermeasure allowing Eudora to connect." | |
3021 | ||
3022 | 38. Exim was not checking that a write() to a log file succeeded. This could | |
3023 | lead to Bad Things if a log got too big, in particular if it hit a file | |
3024 | size limit. Exim now panics and dies if it cannot write to a log file, just | |
3025 | as it does if it cannot open a log file. | |
3026 | ||
3027 | 39. Modified OS/Makefile-Linux so that it now contains | |
3028 | ||
3029 | CFLAGS=-O -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE | |
3030 | ||
3031 | The two -D definitions ensure that Exim is compiled with large file | |
3032 | support, which makes it possible to handle log files that are bigger than | |
3033 | 2^31. | |
3034 | ||
3035 | 40. Fixed a subtle caching bug: if (in an ACL or a set of routers, for | |
3036 | instance) a domain was checked against a named list that involved a lookup, | |
3037 | causing $domain_data to be set, then another domain was checked against the | |
3038 | same list, then the first domain was re-checked, the value of $domain_data | |
3039 | after the final check could be wrong. In particular, if the second check | |
3040 | failed, it could be set empty. This bug probably also applied to | |
3041 | $localpart_data. | |
3042 | ||
3043 | 41. The strip_trailing_dot option was not being applied to the address given | |
3044 | with the -f command-line option. | |
3045 | ||
3046 | 42. The code for reading a message's header from the spool was incrementing | |
3047 | $received_count, but never initializing it. This meant that the value was | |
3048 | incorrect (doubled) while delivering a message in the same process in which | |
3049 | it was received. In the most common configuration of Exim, this never | |
3050 | happens - a fresh exec is done - but it can happen when | |
3051 | deliver_drop_privilege is set. | |
3052 | ||
3053 | 43. When Exim logs an SMTP synchronization error - client data sent too soon - | |
3054 | it now includes up to 150 characters of the unexpected data in the log | |
3055 | line. | |
3056 | ||
3057 | 44. The exim_dbmbuild utility uses fixed size buffers for reading input lines | |
3058 | and building data strings. The size of both of these buffers was 10 000 | |
3059 | bytes - far larger than anybody would *ever* want, thought I. Needless to | |
3060 | say, somebody hit the limit. I have increased the maximum line length to | |
3061 | 20 000 and the maximum data length of concatenated lines to 100 000. I have | |
3062 | also fixed two bugs, because there was no checking on these buffers. Tsk, | |
3063 | tsk. Now exim_dbmbuild gives a message and exits with an error code if a | |
3064 | buffer is too small. | |
3065 | ||
3066 | 45. The exim_dbmbuild utility did not support quoted keys, as Exim does in | |
3067 | lsearch lookups. Now it does. | |
3068 | ||
3069 | 46. When parsing a route_list item in a manualroute router, a fixed-length | |
3070 | buffer was used for the list of hosts. I made this 1024 bytes long, | |
3071 | thinking that nobody would ever have a list of hosts that long. Wrong. | |
3072 | Somebody had a whole pile of complicated expansion conditions, and the | |
3073 | string was silently truncated, leading to an expansion error. It turns out | |
3074 | that it is easier to change to an unlimited length (owing to other changes | |
3075 | that have happened since this code was originally written) than to build | |
3076 | structure for giving a limitation error. The length of the item that | |
3077 | expands into the list of hosts is now unlimited. | |
3078 | ||
3079 | 47. The lsearch lookup could not handle data where the length of text line was | |
3080 | more than 4095 characters. Such lines were truncated, leading to shortened | |
3081 | data being returned. It should now handle lines of any length. | |
3082 | ||
3083 | 48. Minor wording revision: "cannot test xxx in yyy ACL" becomes "cannot test | |
3084 | xxx condition in yyy ACL" (e.g. "cannot test domains condition in DATA | |
3085 | ACL"). | |
3086 | ||
3087 | 49. Cosmetic tidy to scripts like exicyclog that are generated by globally | |
3088 | replacing strings such as BIN_DIRECTORY in a source file: the replacement | |
3089 | no longer happens in comment lines. A list of replacements is now placed | |
3090 | at the head of all of the source files, except those whose only change is | |
3091 | to replace PERL_COMMAND in the very first #! line. | |
3092 | ||
3093 | 50. Replaced the slow insertion sort in queue.c, for sorting the list of | |
3094 | messages on the queue, with a bottom-up merge sort, using code contributed | |
3095 | by Michael Haardt. This should make operations like -bp somewhat faster on | |
3096 | large queues. It won't affect queue runners, except when queue_run_in_order | |
3097 | is set. | |
3098 | ||
3099 | 51. Installed eximstats 1.31 in the distribution. | |
3100 | ||
3101 | 52. Added support for SRV lookups to the dnslookup router. | |
3102 | ||
3103 | 53. If an ACL referred to $message_body or $message_body_end, the value was not | |
3104 | reset for any messages that followed in the same SMTP session. | |
3105 | ||
3106 | 54. The store-handling optimization for building very long strings was not | |
3107 | differentiating between the different store pools. I don't think this | |
3108 | actually made any difference in practice, but I've tidied it. | |
3109 | ||
3110 | 55. While running the routers to verify a sender address, $sender_address | |
3111 | was still set to the sender address. This is wrong, because when routing to | |
3112 | send a bounce to the sender, it would be empty. Therefore, I have changed | |
3113 | it so that, while verifying a sender address, $sender_address is set to <>. | |
3114 | (There is no change to what happens when verifying a recipient address.) | |
3115 | ||
3116 | 56. After finding MX (or SRV) records, Exim was doing a DNS lookup for the | |
3117 | target A or AAAA records (if not already returned) without resetting the | |
3118 | qualify_single or search_parents options of the DNS resolver. These are | |
3119 | inappropriate in this case because the targets of MX and SRV records must | |
3120 | be FQDNs. A broken DNS record could cause trouble if it happened to have a | |
3121 | target that, when qualified, matched something in the local domain. These | |
3122 | two options are now turned off when doing these lookups. | |
3123 | ||
3124 | 57. It seems that at least some releases of Reiserfs (which does not have the | |
3125 | concept of a fixed number of inodes) returns zero and not -1 for the | |
3126 | number of available inodes. This interacted badly with check_spool_inodes, | |
3127 | which assumed that -1 was the "no such thing" setting. What I have done is | |
3128 | to check that the total number of inodes is greater than zero before doing | |
3129 | the test of how many are available. | |
3130 | ||
3131 | 58. When a "warn" ACL statement has a log_message modifier, the message is | |
3132 | remembered, and not repeated. This is to avoid a lot of repetition when a | |
3133 | message has many recipients that cause the same warning to be written. | |
3134 | Howewer, Exim was preserving the list of already written lines for an | |
3135 | entire SMTP session, which doesn't seem right. The memory is now reset if a | |
3136 | new message is started. | |
3137 | ||
3138 | 59. The "rewrite" debugging flag was not showing the result of rewriting in the | |
3139 | debugging output unless log_rewrite was also set. | |
3140 | ||
3141 | 60. Avoid a compiler warning on 64-bit systems in dsearch.c by avoiding the use | |
3142 | of (int)(handle) when we know that handle contains (void *)(-1). | |
3143 | ||
3144 | 61. The Exim daemon panic-logs an error return when it closes the incoming | |
3145 | connection. However "connection reset by peer" seems to be common, and | |
3146 | isn't really an error worthy of noting specially, so that particular error | |
3147 | is no long logged. | |
3148 | ||
3149 | 62. When Exim is trying to find all the local interfaces, it used to panic and | |
3150 | die if the ioctl to get the interface flags failed. However, it seems that | |
3151 | on at least one OS (Solaris 9) it is possible to have an interface that is | |
3152 | included in the list of interfaces, but for which you get a failure error | |
3153 | for this call. This happens when the interface is not "plumbed" into a | |
3154 | protocol (i.e. neither IPv4 nor IPv6). I've changed the code so that a | |
3155 | failure of the "get flags" call assumes that the interface is down. | |
3156 | ||
3157 | 63. Added a ${eval10: operator, which assumes all numbers are decimal. This | |
3158 | makes life easier for people who are doing arithmetic on fields extracted | |
3159 | from dates, where you often get leading zeros that should not be | |
3160 | interpreted as octal. | |
3161 | ||
3162 | 64. Added qualify_domain to the redirect router, to override the global | |
3163 | setting. | |
3164 | ||
3165 | 65. If a pathologically long header line contained very many addresses (the | |
3166 | report of this problem mentioned 10 000) and each of them was rewritten, | |
3167 | Exim could use up a very large amount of memory. (It kept on making new | |
3168 | copies of the header line as it rewrote, and never released the old ones.) | |
3169 | At the expense of a bit more processing, the header rewriting function has | |
3170 | been changed so that it no longer eats memory in this way. | |
3171 | ||
3172 | 66. The generation of the Received: header has been moved from the time that a | |
3173 | message starts to be received, to the time that it finishes. The timestamp | |
3174 | in the Received: header should now be very close to that of the <= log | |
3175 | line. There are two side-effects of this change: | |
3176 | ||
3177 | (a) If a message is rejected by a DATA or non-SMTP ACL or local_scan(), the | |
3178 | logged header lines no longer include the local Received: line, because | |
3179 | it has not yet been created. The same applies to a copy of the message | |
3180 | that is returned to a non-SMTP sender when a message is rejected. | |
3181 | ||
3182 | (b) When a filter file is tested using -bf, no additional Received: header | |
3183 | is added to the test message. After some thought, I decided that this | |
3184 | is a bug fix. | |
3185 | ||
3186 | This change does not affect the value of $received_for. It is still set | |
3187 | after address rewriting, but before local_scan() is called. | |
3188 | ||
3189 | 67. Installed the latest Cygwin-specific files from the Cygwin maintainer. | |
3190 | ||
3191 | 68. GnuTLS: If an empty file is specified for tls_verify_certificates, GnuTLS | |
3192 | gave an unhelpful panic error message, and a defer error. I have managed to | |
3193 | change this behaviour so that it now rejects any supplied certificate, | |
3194 | which seems right, as the list of acceptable certificates is empty. | |
3195 | ||
3196 | 69. OpenSSL: If an empty file is specified for tls_verify_certificates, OpenSSL | |
3197 | gave an unhelpful defer error. I have not managed to make this reject any | |
3198 | supplied certificates, but the error message it gives is "no certificate | |
3199 | supplied", which is not helpful. | |
3200 | ||
3201 | 70. exigrep's output now also includes lines that are not associated with any | |
3202 | message, but which match the given pattern. Implemented by a patch from | |
3203 | Martin Sluka, which also tidied up the Perl a bit. | |
3204 | ||
3205 | 71. Recipient callout verification, like sender verification, was using <> in | |
3206 | the MAIL FROM command. This isn't really the right thing, since the actual | |
3207 | sender may affect whether the remote host accepts the recipient or not. I | |
3208 | have changed it to use the actual sender in the callout; this means that | |
3209 | the cache record is now keyed on a recipient/sender pair, not just the | |
3210 | recipient address. There doesn't seem to be a real danger of callout loops, | |
3211 | since a callout by the remote host to check the sender would use <>. | |
3212 | [SEE ABOVE: changed after hitting problems.] | |
3213 | ||
3214 | 72. Exim treats illegal SMTP error codes that do not begin with 4 or 5 as | |
3215 | temporary errors. However, in the case of such a code being given after | |
3216 | the end of a data transmission (i.e. after ".") Exim was failing to write | |
3217 | a retry record for the message. (Yes, there was some broken host that was | |
3218 | actually sending 8xx at this point.) | |
3219 | ||
3220 | 73. An unknown lookup type in a host list could cause Exim to panic-die when | |
3221 | the list was checked. (An example that provoked this was putting <; in the | |
3222 | middle of a list instead of at the start.) If this happened during a DATA | |
3223 | ACL check, a -D file could be left lying around. This kind of configuration | |
3224 | error no longer causes Exim to die; instead it causes a defer errror. The | |
3225 | incident is still logged to the main and panic logs. | |
3226 | ||
3227 | 74. Buglet left over from Exim 3 conversion. The message "too many messages | |
3228 | in one connection" was written to the rejectlog but not the mainlog, except | |
3229 | when address rewriting (yes!) was being logged. | |
3230 | ||
3231 | 75. Added write_rejectlog option. | |
3232 | ||
3233 | 76. When a system filter was run not as root (that is, when system_filter_user | |
3234 | was set), the values of the $n variables were not being returned to the | |
3235 | main process; thus, they were not subsequently available in the $sn | |
3236 | variables. | |
3237 | ||
3238 | 77. Added +return_path_on_delivery log selector. | |
3239 | ||
3240 | 78. A connection timeout was being treated differently from recipients deferred | |
3241 | when testing hosts_max_try with a message that was older than the host's | |
3242 | retry timeout. (The host should not be counted, thus allowing all hosts to | |
3243 | be tried at least once before bouncing.) This may have been the cause of an | |
3244 | occasionally reported bug whereby a message would remain on the queue | |
3245 | longer than the retry timeout, but would be bounced if a delivery was | |
3246 | forced. I say "may" because I never totally pinned down the problem; | |
3247 | setting up timeout/retry tests is difficult. See also the next item. | |
3248 | ||
3249 | 79. The ultimate address timeout was not being applied to errors that involved | |
3250 | a combination of host plus message (for example, a timeout on a MAIL | |
3251 | command). When an address resolved to a number of possible hosts, and they | |
3252 | were not all tried for each delivery (e.g. because of hosts_max_try), a | |
3253 | message could remain on the queue longer than the retry timeout. | |
3254 | ||
3255 | 80. Sieve bug: "stop" inside "elsif" was broken. Applied a patch from Michael | |
3256 | Haardt. | |
3257 | ||
3258 | 81. Fixed an obscure SMTP outgoing bug which required at least the following | |
3259 | conditions: (a) there was another message waiting for the same server; | |
3260 | (b) the server returned 5xx to all RCPT commands in the first message so | |
3261 | that the message was not completed; (c) the server dropped the connection | |
3262 | or gave a negative response to the RSET that Exim sends to abort the | |
3263 | transaction. The observed case was a dropped connection after DATA that had | |
3264 | been sent in pipelining mode. That is, the server had advertised PIPELINING | |
3265 | but was not implementing it correctly. The effect of the bug was incorrect | |
3266 | behaviour, such as trying another host, and this could lead to a crash. | |
3267 | ||
3268 | ||
3269 | Exim version 4.30 | |
3270 | ----------------- | |
3271 | ||
3272 | 1. The 3rd arguments to getsockname(), getpeername(), and accept() in exim.c | |
3273 | and daemon.c were passed as pointers to ints; they should have been | |
3274 | pointers to socklen_t variables (which are typically unsigned ints). | |
3275 | ||
3276 | 2. Some signed/unsigned type warnings in the os.c file for Linux have been | |
3277 | fixed. | |
3278 | ||
3279 | 3. Fixed a really odd bug that affected only the testing scheme; patching a | |
3280 | certain fixed string in the binary changed the value of another string that | |
3281 | happened to be identical to the end of the original first string. | |
3282 | ||
3283 | 4. When gethostbyname() (or equivalent) is passed an IP address as a "host | |
3284 | name", it returns that address as the IP address. On some operating | |
3285 | systems (e.g. Solaris), it also passes back the IP address string as the | |
3286 | "host name". However, on others (e.g. Linux), it passes back an empty | |
3287 | string. Exim wasn't checking for this, and was changing the host name to an | |
3288 | empty string, assuming it had been canonicized. | |
3289 | ||
3290 | 5. Although rare, it is permitted to have more than one PTR record for a given | |
3291 | IP address. I thought that gethostbyaddr() or getipnodebyaddr() always gave | |
3292 | all the names associated with an address, because they do in Solaris. | |
3293 | However, it seems that they do not in Linux for data that comes from the | |
3294 | DNS. If an address in /etc/hosts has multiple names, they _are_ all given. | |
3295 | I found this out when I moved to a new Linux workstation and tried to run | |
3296 | the Exim test suite. | |
3297 | ||
3298 | To get round this problem I have changed the code so that it now does its | |
3299 | own call to the DNS to look up PTR records when searching for a host name. | |
3300 | If nothing can be found in the DNS, it tries gethostbyaddr(), so that | |
3301 | addresses that are only in /etc/hosts are still found. | |
3302 | ||
3303 | This behaviour is, however, controlled by an option called host_lookup_ | |
3304 | order, which defaults to "bydns:byaddr". If people want to use the other | |
3305 | order, or indeed, just use one or the other means of lookup, they can | |
3306 | specify it in this variable. | |
3307 | ||
3308 | 6. If a PTR record yields an empty name, Exim treats it as non-existent. In | |
3309 | some operating systems, this comes back from gethostbyaddr() as an empty | |
3310 | string, and this is what Exim used to test for. However, it seems that in | |
3311 | other systems, "." is yielded. Exim now tests for this case too. | |
3312 | ||
3313 | 7. The values of check_spool_space and check_log_space are now held internally | |
3314 | as a number of kilobytes instead of an absolute number of bytes. If a | |
3315 | numbers is specified without 'K' or 'M', it is rounded up to the nearest | |
3316 | kilobyte. This means that much larger values can be stored. | |
3317 | ||
3318 | 8. Exim monitor: an attempt to get the action menu when not actually pointing | |
3319 | at a message produces an empty menu entitled "No message selected". This | |
3320 | works on Solaris (OpenWindows). However, XFree86 does not like a menu with | |
3321 | no entries in it ("Shell widget menu has zero width and/or height"). So I | |
3322 | have added a single, blank menu entry in this case. | |
3323 | ||
3324 | 9. Added ${quote_local_part. | |
3325 | ||
3326 | 10. MIME decoding is now applied to the contents of Subject: header lines when | |
3327 | they are logged. | |
3328 | ||
3329 | 11. Now that a reference to $sender_host_address automatically causes a reverse | |
3330 | lookup to occur if necessary (4.13/18), there is no need to arrange for a | |
3331 | host lookup before query-style lookups in lists that might use this | |
3332 | variable. This has therefore been abolished, and the "net-" prefix is no | |
3333 | longer necessary for query-style lookups. | |
3334 | ||
3335 | 12. The Makefile for SCO_SV contained a setting of LDFLAGS. This appears to | |
3336 | have been a typo for LFLAGS, so it has been changed. | |
3337 | ||
3338 | 13. The install script calls Exim with "-C /dev/null" in order to find the | |
3339 | version number. If ALT_CONFIG_PREFIX was set, this caused an error message | |
3340 | to be output. Howeve, since Exim outputs its version number before the | |
3341 | error, it didn't break the script. It just looked ugly. I fixed this by | |
3342 | always allowing "-C /dev/null" if the caller is root. | |
3343 | ||
3344 | 14. Ignore overlarge ACL variable number when reading spool file - insurance | |
3345 | against a later release with more variables having written the file. | |
3346 | ||
3347 | 15. The standard form for an IPv6 address literal was being rejected by EHLO. | |
3348 | Example: [IPv6:2002:c1ed:8229:10:202:2dff:fe07:a42a]. Exim now accepts | |
3349 | this, as well as the form without the "IPv6" on the front. | |
3350 | ||
3351 | 16. Added CHOWN_COMMAND=/usr/sbin/chown and LIBS=-lresolv to the | |
3352 | OS/Makefile-Darwin file. | |
3353 | ||
3354 | 17. Fixed typo in lookups/ldap.c: D_LOOKUP should be D_lookup. This applied | |
3355 | only to LDAP libraries that do not have LDAP_OPT_DEREF. | |
3356 | ||
3357 | 18. After change 4.21/52, "%ld" was used to format the contents of the $inode | |
3358 | variable. However, some OS use ints for inodes. I've added cast to long int | |
3359 | to get rid of the compiler warning. | |
3360 | ||
3361 | 19. I had forgotten to lock out "/../" in configuration file names when | |
3362 | ALT_CONFIG_PREFIX was set. | |
3363 | ||
3364 | 20. Routers used for verification do not need to specify transports. However, | |
3365 | if such a router generated a host list, and callout was configured, Exim | |
3366 | crashed, because it could not find a port number from the (non-existent) | |
3367 | transport. It now assumes port 25 in this circumstance. | |
3368 | ||
3369 | 21. Added the -t option to exigrep. | |
3370 | ||
3371 | 22. If LOOKUP_LSEARCH is defined, all three linear search methods (lsearch, | |
3372 | wildlsearch, nwildlsearch) are compiled. LOOKUP_WILDLSEARCH and LOOKUP_ | |
3373 | NWILDLSEARCH are now obsolete, but retained for compatibility. If either of | |
3374 | them is set, LOOKUP_LSEARCH is forced. | |
3375 | ||
3376 | 23. "exim -bV" now outputs a list of lookups that are included in the binary. | |
3377 | ||
3378 | 24. Added sender and host information to the "rejected by local_scan()" log | |
3379 | line; previously there was no indication of these. | |
3380 | ||
3381 | 25. Added .include_if_exists. | |
3382 | ||
3383 | 26. Change 3.952/11 added an explicit directory sync on top of a file sync for | |
3384 | Linux. It turns out that not all file systems support this. Apparently some | |
3385 | versions of NFS do not. (It's rare to put Exim's spool on NFS, but people | |
3386 | do it.) To cope with this, the error EINVAL, which means that sync-ing is | |
3387 | not supported on the file descriptor, is now ignored when Exim is trying to | |
3388 | sync a directory. This applies only to Linux. | |
3389 | ||
3390 | 27. Added -DBIND_8_COMPAT to the CLFAGS setting for Darwin. | |
3391 | ||
3392 | 28. In Darwin (MacOS X), the PAM headers are in /usr/include/pam and not in | |
3393 | /usr/include/security. There's now a flag in OS/os.h-Darwin to cope with | |
3394 | this. | |
3395 | ||
3396 | 29. Added support for maildirsize files from supplied patch (modified a bit). | |
3397 | ||
3398 | 30. The use of :fail: followed by an empty string could lead Exim to respond to | |
3399 | sender verification failures with (e.g.): | |
3400 | ||
3401 | 550 Verification failed for <xxx> | |
3402 | 550 Sender verify failed | |
3403 | ||
3404 | where the first response line was missing the '-' that indicates it is not | |
3405 | the final line of the response. | |
3406 | ||
3407 | 31. The loop for finding the name of the user that called Exim had a hardwired | |
3408 | limit of 10; it now uses the value of finduser_retries, which is used for | |
3409 | all other user lookups. | |
3410 | ||
3411 | 32. Added $received_count variable, available in data and not_smtp ACLs, and at | |
3412 | delivery time. | |
3413 | ||
3414 | 33. Exim was neglecting to zero errno before one call of strtol() when | |
3415 | expanding a string and expecting an integer value. On some systems this | |
3416 | resulted in spurious "integer overflow" errors. Also, it was casting the | |
3417 | result into an int without checking. | |
3418 | ||
3419 | 34. Testing for a connection timeout using "timeout_connect" in the retry rules | |
3420 | did not work. The code looks as if it has *never* worked, though it appears | |
3421 | to have been documented since at least releast 1.62. I have made it work. | |
3422 | ||
3423 | 35. The "timeout_DNS" error in retry rules, also documented since at least | |
3424 | 1.62, also never worked. As it isn't clear exactly what this means, and | |
3425 | clearly it isn't a major issue, I have abolished the feature by treating it | |
3426 | as "timeout", and writing a warning to the main and panic logs. | |
3427 | ||
3428 | 36. The display of retry rules for -brt wasn't always showing the error code | |
3429 | correctly. | |
3430 | ||
3431 | 37. Added new error conditions to retry rules: timeout_A, timeout_MX, | |
3432 | timeout_connect_A, timeout_connect_MX. | |
3433 | ||
3434 | 38. Rewriting the envelope sender at SMTP time did not allow it to be rewritten | |
3435 | to the empty sender. | |
3436 | ||
3437 | 39. The daemon was not analysing the content of -oX till after it had closed | |
3438 | stderr and disconnected from the controlling terminal. This meant that any | |
3439 | syntax errors were only noted on the panic log, and the return code from | |
3440 | the command was 0. By re-arranging the code a little, I've made the | |
3441 | decoding happen first, so such errors now appear on stderr, and the return | |
3442 | code is 1. However, the actual setting up of the sockets still happens in | |
3443 | the disconnected process, so errors there are still only recorded on the | |
3444 | panic log. | |
3445 | ||
3446 | 40. A daemon listener on a wildcard IPv6 socket that also accepts IPv4 | |
3447 | connections (as happens on some IP stacks) was logged at start up time as | |
3448 | just listening for IPv6. It now logs "IPv6 with IPv4". This differentiates | |
3449 | it from "IPv6 and IPv4", which means that two separate sockets are being | |
3450 | used. | |
3451 | ||
3452 | 41. The debug output for gethostbyname2() or getipnodebyname() failures now | |
3453 | says whether AF_INET or AF_INET6 was passed as an argument. | |
3454 | ||
3455 | 42. Exiwhat output was messed up when time zones were included in log | |
3456 | timestamps. | |
3457 | ||
3458 | 43. Exiwhat now gives more information about the daemon's listening ports, | |
3459 | and whether -tls-on-connect was used. | |
3460 | ||
3461 | 44. The "port" option of the smtp transport is now expanded. | |
3462 | ||
3463 | 45. A "message" modifier in a "warn" statement in a non-message ACL was being | |
3464 | silently ignored. Now an error message is written to the main and panic | |
3465 | logs. | |
3466 | ||
3467 | 46. There's a new ACL modifier called "logwrite" which writes to a log file | |
3468 | as soon as it is encountered. | |
3469 | ||
3470 | 47. Added $local_user_uid and $local_user_gid at routing time. | |
3471 | ||
3472 | 48. Exim crashed when trying to verify a sender address that was being | |
3473 | rewritten to "<>". | |
3474 | ||
3475 | 49. Exim was recognizing only a space character after ".include". It now also | |
3476 | recognizes a tab character. | |
3477 | ||
3478 | 50. Fixed several bugs in the Perl script that creates the exim.8 man page by | |
3479 | extracting the relevant information from the specification. The man page no | |
3480 | longer contains scrambled data for the -d option, and I've added a section | |
3481 | at the front about calling Exim under different names. | |
3482 | ||
3483 | 51. Added "extra_headers" argument to the "mail" command in filter files. | |
3484 | ||
3485 | 52. Redirecting mail to an unqualified address in a Sieve filter caused Exim to | |
3486 | crash. | |
3487 | ||
3488 | 53. Installed eximstats 1.29. | |
3489 | ||
3490 | 54. Added transport_filter_timeout as a generic transport option. | |
3491 | ||
3492 | 55. Exim no longer adds an empty Bcc: header to messages that have no To: or | |
3493 | Cc: header lines. This was required by RFC 822, but it not required by RFC | |
3494 | 2822. | |
3495 | ||
3496 | 56. Exim used to add From:, Date:, and Message-Id: header lines to any | |
3497 | incoming messages that did not have them. Now it does so only if the | |
3498 | message originates locally, that is, if there is no associated remote host | |
3499 | address. When Resent- header lines are present, this applies to the Resent- | |
3500 | lines rather than the non-Resent- lines. | |
3501 | ||
3502 | 57. Drop incoming SMTP connection after too many syntax or protocol errors. The | |
3503 | limit is controlled by smtp_max_synprot_errors, defaulting to 3. | |
3504 | ||
3505 | 58. Messages for configuration errors now include the name of the main | |
3506 | configuration file - useful now that there may be more than one file in a | |
3507 | list (.included file names were always shown). | |
3508 | ||
3509 | 59. Change 4.21/82 (run initgroups() when starting the daemon) causes problems | |
3510 | for those rare installations that do not start the daemon as root or run it | |
3511 | setuid root. I've cut out the call to initgroups() if the daemon is not | |
3512 | root at that time. | |
3513 | ||
3514 | 60. The Exim user and group can now be bound into the binary as text strings | |
3515 | that are looked up at the start of Exim's processing. | |
3516 | ||
3517 | 61. Applied a small patch for the Interbase code, supplied by Ard Biesheuvel. | |
3518 | ||
3519 | 62. Added $mailstore_basename variable. | |
3520 | ||
3521 | 63. Installed patch to sieve.c from Michael Haardt. | |
3522 | ||
3523 | 64. When Exim failed to open the panic log after failing to open the main log, | |
3524 | the original message it was trying to log was written to stderr and debug | |
3525 | output, but if they were not available (the usual case in production), it | |
3526 | was lost. Now it is written to syslog before the two lines that record the | |
3527 | failures to open the logs. | |
3528 | ||
3529 | 65. Users' Exim filters run in subprocesses under the user's uid. It is | |
3530 | possible for a "deliver" command or an alias in a "personal" command to | |
3531 | provoke an address rewrite. If logging of address rewriting is configured, | |
3532 | this fails because the process is not running as root or exim. There may be | |
3533 | a better way of dealing with this, but for the moment (because 4.30 needs | |
3534 | to be released), I have disabled address rewrite logging when running a | |
3535 | filter in a non-root, non-exim process. | |
3536 | ||
3537 | ||
3538 | Exim version 4.24 | |
3539 | ----------------- | |
3540 | ||
3541 | 1. The buildconfig auxiliary program wasn't quoting the value set for | |
3542 | HEADERS_CHARSET. This caused a compilation error complaining that 'ISO' was | |
3543 | not defined. This bug was masked in 4.22 by the effect that was fixed in | |
3544 | change 4.23/1. | |
3545 | ||
3546 | 2. Some messages that were rejected after a message id was allocated were | |
3547 | shown as "incomplete" by exigrep. It no longer does this for messages that | |
3548 | are rejected by local_scan() or the DATA or non-SMTP ACLs. | |
3549 | ||
3550 | 3. If a Message-ID: header used a domain literal in the ID, and Exim did not | |
3551 | have allow_domain_literals set, the ID did not get logged in the <= line. | |
3552 | Domain literals are now always recognized in Message-ID: header lines. | |
3553 | ||
3554 | 4. The first argument for a ${extract expansion item is the key name or field | |
3555 | number. Leading and trailing spaces in this item were not being ignored, | |
3556 | causing some misleading effects. | |
3557 | ||
3558 | 5. When deliver_drop_privilege was set, single queue runner processes started | |
3559 | manually (i.e. by the command "exim -q") or by the daemon (which uses the | |
3560 | same command in the process it spins off) were not dropping privilege. | |
3561 | ||
3562 | 6. When the daemon running as "exim" started a queue runner, it always | |
3563 | re-executed Exim in the spun-off process. This is a waste of effort when | |
3564 | deliver_drop_privilege is set. The new process now just calls the | |
3565 | queue-runner function directly. | |
3566 | ||
3567 | ||
3568 | Exim version 4.23 | |
3569 | ----------------- | |
3570 | ||
3571 | 1. Typo in the src/EDITME file: it referred to HEADERS_DECODE_TO instead of | |
3572 | HEADERS_CHARSET. | |
3573 | ||
3574 | 2. Change 4.21/73 introduced a bug. The pid file path set by -oP was being | |
3575 | ignored. Though the use of -oP was forcing the writing of a pid file, it | |
3576 | was always written to the default place. | |
3577 | ||
3578 | 3. If the message "no IP address found for host xxxx" is generated during | |
3579 | incoming verification, it is now followed by identification of the incoming | |
3580 | connection (so you can more easily find what provoked it). | |
3581 | ||
3582 | 4. Bug fix for Sieve filters: "stop" inside a block was not working properly. | |
3583 | ||
3584 | 5. Added some features to "harden" Exim a bit more against certain attacks: | |
3585 | ||
3586 | (a) There is now a build-time option called FIXED_NEVER_USERS that can | |
3587 | be put in Local/Makefile. This is like the never_users runtime option, | |
3588 | but it cannot be overridden. The default setting is "root". | |
3589 | ||
3590 | (b) If ALT_CONFIG_PREFIX is defined in Local/Makefile, it specifies a | |
3591 | prefix string with which any file named in a -C command line option | |
3592 | must start. | |
3593 | ||
3594 | (c) If ALT_CONFIG_ROOT_ONLY is defined in Local/Makefile, root privilege | |
3595 | is retained for -C and -D only if the caller of Exim is root. Without | |
3596 | it, the exim user may also use -C and -D and retain privilege. | |
3597 | ||
3598 | (d) If DISABLE_D_OPTION is defined in Local/Makefile, the use of the -D | |
3599 | command line option is disabled. | |
3600 | ||
3601 | 6. Macro names set by the -D option must start with an upper case letter, just | |
3602 | like macro names defined in the configuration file. | |
3603 | ||
3604 | 7. Added "dereference=" facility to LDAP. | |
3605 | ||
3606 | 8. Two instances of the typo "uknown" in the source files are fixed. | |
3607 | ||
3608 | 9. If a PERL_COMMAND setting in Local/Makefile was not at the start of a line, | |
3609 | the Configure-Makefile script screwed up while processing it. | |
3610 | ||
3611 | 10. Incorporated PCRE 4.4. | |
3612 | ||
3613 | 11. The SMTP synchronization check was not operating right at the start of an | |
3614 | SMTP session. For example, it could not catch a HELO sent before the client | |
3615 | waited for the greeting. There is now a check for outstanding input at the | |
3616 | point when the greeting is written. Because of the duplex, asynchronous | |
3617 | nature of TCP/IP, it cannot be perfect - the incorrect input may be on its | |
3618 | way, but not yet received, when the check is performed. | |
3619 | ||
3620 | 12. Added tcp_nodelay to make it possible to turn of the setting of TCP_NODELAY | |
3621 | on TCP/IP sockets, because this apparently causes some broken clients to | |
3622 | timeout. | |
3623 | ||
3624 | 13. Installed revised OS/Makefile-CYGWIN and OS/os.c-cygwin (the .h file was | |
3625 | unchanged) from the Cygwin maintainer. | |
3626 | ||
3627 | 14. The code for -bV that shows what is in the binary showed "mbx" when maildir | |
3628 | was supported instead of testing for mbx. Effectively a typo. | |
3629 | ||
3630 | 15. The spa authenticator server code was not checking that the input it | |
3631 | received was valid base64. | |