Commit | Line | Data |
---|---|---|
55ee9ee3 | 1 | $Cambridge: exim/doc/doc-txt/ChangeLog,v 1.51 2004/12/21 11:28:38 ph10 Exp $ |
495ae4b0 PH |
2 | |
3 | Change log file for Exim from version 4.21 | |
4 | ------------------------------------------- | |
5 | ||
f7b63901 | 6 | Exim version 4.50 |
495ae4b0 PH |
7 | ----------------- |
8 | ||
5fe762f6 PH |
9 | 1. Minor wording change to the doc/README.SIEVE file. |
10 | ||
139059f6 | 11 | 2. Change 4.43/35 introduced a bug: if quota_filecount was set, the |
5fe762f6 | 12 | computation of the current number of files was incorrect. |
495ae4b0 | 13 | |
7086e875 PH |
14 | 3. Closing a stable door: arrange to panic-die if setitimer() ever fails. The |
15 | bug fixed in 4.43/37 would have been diagnosed quickly if this had been in | |
16 | place. | |
17 | ||
35af9f61 PH |
18 | 4. Give more explanation in the error message when the command for a transport |
19 | filter fails to execute. | |
20 | ||
b668c215 PH |
21 | 5. There are several places where Exim runs a non-Exim command in a |
22 | subprocess. The SIGUSR1 signal should be disabled for these processes. This | |
23 | was being done only for the command run by the queryprogram router. It is | |
24 | now done for all such subprocesses. The other cases are: ${run, transport | |
25 | filters, and the commands run by the lmtp and pipe transports. | |
26 | ||
a494b1e1 PH |
27 | 6. Added CONFIGURE_GROUP build-time option. |
28 | ||
29 | 7. Some older OS have a limit of 256 on the maximum number of file | |
30 | descriptors. Exim was using setrlimit() to set 1000 as a large value | |
31 | unlikely to be exceeded. Change 4.43/17 caused a lot of logging on these | |
32 | systems. I've change it so that if it can't get 1000, it tries for 256. | |
35edf2ff | 33 | |
c5fcb476 PH |
34 | 8. "control=submission" was allowed, but had no effect, in a DATA ACL. This |
35 | was an oversight, and furthermore, ever since the addition of extra | |
36 | controls (e.g. 4.43/32), the checks on when to allow different forms of | |
37 | "control" were broken. There should now be diagnostics for all cases when a | |
38 | control that does not make sense is encountered. | |
39 | ||
69358f02 PH |
40 | 9. Added the /retain_sender option to "control=submission". |
41 | ||
5be20824 PH |
42 | 10. $recipients is now available in the predata ACL (oversight). |
43 | ||
eb2c0248 PH |
44 | 11. Tidy the search cache before the fork to do a delivery from a message |
45 | received from the command line. Otherwise the child will trigger a lookup | |
46 | failure and thereby defer the delivery if it tries to use (for example) a | |
47 | cached ldap connection that the parent has called unbind on. | |
48 | ||
2a3eea10 PH |
49 | 12. If verify=recipient was followed by verify=sender in a RCPT ACL, the value |
50 | of $address_data from the recipient verification was clobbered by the | |
51 | sender verification. | |
52 | ||
53 | 13. The value of address_data from a sender verification is now available in | |
54 | $sender_address_data in subsequent conditions in the ACL statement. | |
55 | ||
23c7ff99 PH |
56 | 14. Added forbid_sieve_filter and forbid_exim_filter to the redirect router. |
57 | ||
4deaf07d PH |
58 | 15. Added a new option "connect=<time>" to callout options, to set a different |
59 | connection timeout. | |
60 | ||
926e1192 PH |
61 | 16. If FIXED_NEVER_USERS was defined, but empty, Exim was assuming the uid 0 |
62 | was its contents. (It was OK if the option was not defined at all.) | |
63 | ||
650edc6f PH |
64 | 17. A "Completed" log line is now written for messages that are removed from |
65 | the spool by the -Mrm option. | |
66 | ||
2c7db3f5 PH |
67 | 18. New variables $sender_verify_failure and $recipient_verify_failure contain |
68 | information about exactly what failed. | |
69 | ||
3d235903 PH |
70 | 19. Added -dd to debug only the daemon process. |
71 | ||
7c7ad977 PH |
72 | 20. Incorporated Michael Haardt's patch to ldap.c for improving the way it |
73 | handles timeouts, both on the server side and network timeouts. Renamed the | |
74 | CONNECT parameter as NETTIMEOUT (but kept the old name for compatibility). | |
75 | ||
981756db PH |
76 | 21. The rare case of EHLO->STARTTLS->HELO was setting the protocol to "smtp". |
77 | It is now set to "smtps". | |
78 | ||
d4eb88df PH |
79 | 22. $host_address is now set to the target address during the checking of |
80 | ignore_target_hosts. | |
81 | ||
82 | 23. When checking ignore_target_hosts for an ipliteral router, no host name was | |
83 | being passed; this would have caused $sender_host_name to have been used if | |
84 | matching the list had actually called for a host name (not very likely, | |
85 | since this list is usually IP addresses). A host name is now passed as | |
86 | "[x.x.x.x]". | |
87 | ||
7d468ab8 PH |
88 | 24. Changed the calls that set up the SIGCHLD handler in the daemon to use the |
89 | code that specifies a non-restarting handler (typically sigaction() in | |
90 | modern systems) in an attempt to fix a rare and obscure crash bug. | |
91 | ||
92 | 25. Narrowed the window for a race in the daemon that could cause it to ignore | |
93 | SIGCHLD signals. This is not a major problem, because they are used only to | |
94 | wake it up if nothing else does. | |
95 | ||
62c0818f PH |
96 | 26. A malformed maildirsize file could cause Exim to calculate negative values |
97 | for the mailbox size or file count. Odd effects could occur as a result. | |
98 | The maildirsize information is now recalculated if the size or filecount | |
99 | end up negative. | |
100 | ||
26034054 PH |
101 | 27. Added HAVE_SYS_STATVFS_H to the os.h file for Linux, as it has had this |
102 | support for a long time. Removed HAVE_SYS_VFS_H. | |
103 | ||
af66f652 PH |
104 | 28. Installed the latest version of exipick from John Jetmore. |
105 | ||
90af77f4 PH |
106 | 29. In an address list, if the pattern was not a regular expression, an empty |
107 | subject address (from a bounce message) matched only if the pattern was an | |
108 | empty string. Non-empty patterns were not even tested. This was the wrong | |
109 | because it is perfectly reasonable to use an empty address as part of a | |
110 | database query. An empty address is now tested by patterns that are | |
111 | lookups. However, all the other forms of pattern expect the subject to | |
112 | contain a local part and a domain, and therefore, for them, an empty | |
113 | address still always fails if the pattern is not itself empty. | |
114 | ||
d8ef3577 PH |
115 | 30. Exim went into a mad DNS loop when attempting to do a callout where the |
116 | host was specified on an smtp transport, and looking it up yielded more | |
117 | than one IP address. | |
118 | ||
5cb8cbc6 PH |
119 | 31. Re-factored the code for checking spool and log partition space into a |
120 | function that finds that data and another that does the check. The former | |
121 | is then used to implement four new variables: $spool_space, $log_space, | |
122 | $spool_inodes, and $log_inodes. | |
123 | ||
14702f5b PH |
124 | 32. The RFC2047 encoding function was originally intended for short strings |
125 | such as real names; it was not keeping to the 75-character limit for | |
126 | encoded words that the RFC imposes. It now respects the limit, and | |
127 | generates multiple encoded words if necessary. To be on the safe side, I | |
128 | have increased the buffer size for the ${rfc2047: expansion operator from | |
129 | 1024 to 2048 bytes. | |
130 | ||
063b1e99 PH |
131 | 33. It is now permitted to omit both strings after an "if" condition; if the |
132 | condition is true, the result is "true". As before, when the second string | |
133 | is omitted, a false condition yields an empty string. This makes it less | |
134 | cumbersome to write custom ACL and router conditions. | |
135 | ||
652e1b65 PH |
136 | 34. Failure to deliver a bounce message always caused it to be frozen, even if |
137 | there was an errors_to setting on the router. The errors_to setting is now | |
138 | respected. | |
139 | ||
6f0c9a4f PH |
140 | 35. If an IPv6 address is given for -bh or -bhc, it is now converted to the |
141 | canonical form (fully expanded) before being placed in | |
142 | $sender_host_address. | |
143 | ||
33397d19 PH |
144 | 36. The table in the code that translates DNS record types into text (T_A to |
145 | "A" for instance) was missing entries for NS and CNAME. It is just possible | |
146 | that this could have caused confusion if both these types were looked up | |
147 | for the same domain, because the text type is used as part of Exim's | |
148 | per-process caching. But the chance of anyone hitting this buglet seems | |
149 | very small. | |
150 | ||
7bb56e1f PH |
151 | 37. The dnsdb lookup has been extended in a number of ways. |
152 | ||
153 | (1) There is a new type, "zns", which walks up the domain tree until it | |
154 | finds some nameserver records. It should be used with care. | |
155 | ||
ea3bc19b PH |
156 | (2) There is a new type, "mxh", which is like "mx" except that it returns |
157 | just the host names, not the priorities. | |
158 | ||
159 | (3) It is now possible to give a list of domains (or IP addresses) to be | |
ff4dbb19 PH |
160 | looked up. The behaviour when one of the lookups defers can be |
161 | controlled by a keyword. | |
7bb56e1f | 162 | |
ea3bc19b | 163 | (4) It is now possible to specify the separator character for use when |
7bb56e1f | 164 | multiple records are returned. |
33397d19 | 165 | |
0bcb2a0e PH |
166 | 38. The dnslists ACL condition has been extended: it is now possible to supply |
167 | a list of IP addresses and/or domains to be looked up in a particular DNS | |
168 | domain. | |
169 | ||
2ac0e484 PH |
170 | 39. Added log_selector=+queue_time_overall. |
171 | ||
4e1fde53 PH |
172 | 40. When running the queue in the test harness, wait just a tad after forking a |
173 | delivery process, to get repeatability of debugging output. | |
174 | ||
de365ded PH |
175 | 41. Include certificate and key file names in error message when GnuTLS fails |
176 | to set them up, because the GnuTLS error message doesn't include the name | |
177 | of the failing file when there is a problem reading it. | |
178 | ||
f05da2e8 PH |
179 | 42. Allow both -bf and -bF in the same test run. |
180 | ||
d6453af2 PH |
181 | 43. Did the same fix as 41 above for OpenSSL, which had the same infelicity. |
182 | ||
f7b63901 PH |
183 | 44. The "Exiscan patch" is now merged into the mainline Exim source. |
184 | ||
185 | 45. Sometimes the final signoff response after QUIT could fail to get | |
186 | transmitted in the non-TLS case. Testing !tls_active instead of tls_active | |
187 | < 0 before doing a fflush(). This bug looks as though it goes back to the | |
188 | introduction of TLS in release 3.20, but "sometimes" must have been rare | |
189 | because the tests only now provoked it. | |
190 | ||
a444213a PH |
191 | 46. Reset the locale to "C" after calling embedded Perl, in case it was changed |
192 | (this can affect the format of dates). | |
193 | ||
0ec020ea PH |
194 | 47. exim_tidydb, when checking for the continued existence of a message for |
195 | which it has found a message-specific retry record, was not finding | |
196 | messages that were in split spool directories. Consequently, it was | |
197 | deleting retry records that should have stayed in existence. | |
198 | ||
b1206957 PH |
199 | 48. Steve fixed some bugs in eximstats. |
200 | ||
201 | 49. The SPA authentication driver was not abandoning authentication and moving | |
202 | on to the next authenticator when an expansion was forced to fail, | |
203 | contradicting the general specification for all authenticators. Instead it | |
204 | was generating a temporary error. It now behaves as specified. | |
205 | ||
26dd5a95 PH |
206 | 50. The default ordering of permitted cipher suites for GnuTLS was pessimal |
207 | (the order specifies the preference for clients). The order is now AES256, | |
208 | AES128, 3DES, ARCFOUR128. | |
209 | ||
343b2385 PH |
210 | 51. Small patch to Sieve code - explicitly set From: when generating an |
211 | autoreply. | |
212 | ||
1c5466b9 PH |
213 | 52. Exim crashed if a remote delivery caused a very long error message to be |
214 | recorded - for instance if somebody sent an entire SpamAssassin report back | |
215 | as a large number of 550 error lines. This bug was coincidentally fixed by | |
216 | increasing the size of one of Exim's internal buffers (big_buffer) that | |
217 | happened as part of the Exiscan merge. However, to be on the safe side, I | |
218 | have made the code more robust (and fixed the comments that describe what | |
219 | is going on). | |
220 | ||
55ee9ee3 PH |
221 | 53. Now that there can be additional text after "Completed" in log lines (if |
222 | the queue_time_overall log selector is set), a one-byte patch to exigrep | |
223 | was needed to allow it to recognize "Completed" as not the last thing in | |
224 | the line. | |
225 | ||
495ae4b0 PH |
226 | |
227 | Exim version 4.43 | |
228 | ----------------- | |
229 | ||
230 | 1. Fixed a longstanding but relatively impotent bug: a long time ago, before | |
231 | PIPELINING, the function smtp_write_command() used to return TRUE or FALSE. | |
232 | Now it returns an integer. A number of calls were still expecting a T/F | |
233 | return. Fortuitously, in all cases, the tests worked in OK situations, | |
234 | which is the norm. However, things would have gone wrong on any write | |
235 | failures on the smtp file descriptor. This function is used when sending | |
236 | messages over SMTP and also when doing verify callouts. | |
237 | ||
238 | 2. When Exim is called to do synchronous delivery of a locally submitted | |
239 | message (the -odf or -odi options), it no longer closes stderr before doing | |
240 | the delivery. | |
241 | ||
242 | 3. Implemented the mua_wrapper option. | |
243 | ||
244 | 4. Implemented mx_fail_domains and srv_fail_domains for the dnslookup router. | |
245 | ||
246 | 5. Implemented the functions header_remove(), header_testname(), | |
247 | header_add_at_position(), and receive_remove_recipient(), and exported them | |
248 | to local_scan(). | |
249 | ||
250 | 6. If an ACL "warn" statement specified the addition of headers, Exim already | |
251 | inserted X-ACL-Warn: at the start if there was no header name. However, it | |
252 | was not making this test for the second and subsequent header lines if | |
253 | there were newlines in the string. This meant that an invalid header could | |
254 | be inserted if Exim was badly configured. | |
255 | ||
256 | 7. Allow an ACL "warn" statement to add header lines at the start or after all | |
257 | the Received: headers, as well as at the end. | |
258 | ||
259 | 8. Added the rcpt_4xx retry error code. | |
260 | ||
261 | 9. Added postmaster_mailfrom=xxx to callout verification option. | |
262 | ||
263 | 10. Added mailfrom=xxxx to the callout verification option, for verify= | |
264 | header_sender only. | |
265 | ||
266 | 11. ${substr_1_:xxxx} and ${substr__3:xxxx} are now diagnosed as syntax errors | |
267 | (they previously behaved as ${substr_1_0:xxxx} and ${substr:_0_3:xxxx}). | |
268 | ||
269 | 12. Inserted some casts to stop certain compilers warning when using pointer | |
270 | differences as field lengths or precisions in printf-type calls (mostly | |
271 | affecting debugging statements). | |
272 | ||
273 | 13. Added optional readline() support for -be (dynamically loaded). | |
274 | ||
275 | 14. Obscure bug fix: if a message error (e.g. 4xx to MAIL) happened within the | |
276 | same clock tick as a message's arrival, so that its received time was the | |
277 | same as the "first fail" time on the retry record, and that message | |
278 | remained on the queue past the ultimate address timeout, every queue runner | |
279 | would try a delivery (because it was past the ultimate address timeout) but | |
280 | after another failure, the ultimate address timeout, which should have then | |
281 | bounced the address, did not kick in. This was a "< instead of <=" error; | |
282 | in most cases the first failure would have been in the next clock tick | |
283 | after the received time, and all would be well. | |
284 | ||
285 | 15. The special items beginning with @ in domain lists (e.g. @mx_any) were not | |
286 | being recognized when the domain list was tested by the match_domain | |
287 | condition in an expansion string. | |
288 | ||
289 | 16. Added the ${str2b64: operator. | |
290 | ||
291 | 17. Exim was always calling setrlimit() to set a large limit for the number of | |
292 | processes, without checking whether the existing limit was already | |
293 | adequate. (It did check for the limit on file descriptors.) Furthermore, | |
294 | errors from getrlimit() and setrlimit() were being ignored. Now they are | |
295 | logged to the main and panic logs, but Exim does carry on, to try to do its | |
296 | job under whatever limits there are. | |
297 | ||
298 | 18. Imported PCRE 5.0. | |
299 | ||
300 | 19. Trivial typo in log message " temporarily refused connection" (the leading | |
301 | space). | |
302 | ||
303 | 20. If the log selector return_path_on_delivery was set and an address was | |
304 | redirected to /dev/null, the delivery process crashed because it assumed | |
305 | that a return path would always be set for a "successful" delivery. In this | |
306 | case, the whole delivery is bypassed as an optimization, and therefore no | |
307 | return path is set. | |
308 | ||
309 | 21. Internal re-arrangement: the function for sending a challenge and reading | |
310 | a response while authentication was assuming a zero-terminated challenge | |
311 | string. It's now changed to take a pointer and a length, to allow for | |
312 | binary data in such strings. | |
313 | ||
314 | 22. Added the cyrus_sasl authenticator (code supplied by MBM). | |
315 | ||
316 | 23. Exim was not respecting finduser_retries when seeking the login of the | |
317 | uid under which it was called; it was always trying 10 times. (The default | |
318 | setting of finduser_retries is zero.) Also, it was sleeping after the final | |
319 | failure, which is pointless. | |
320 | ||
321 | 24. Implemented tls_on_connect_ports. | |
322 | ||
323 | 25. Implemented acl_smtp_predata. | |
324 | ||
325 | 26. If the domain in control=submission is set empty, Exim assumes that the | |
326 | authenticated id is a complete email address when it generates From: or | |
327 | Sender: header lines. | |
328 | ||
329 | 27. Added "#define SOCKLEN_T int" to OS/os.h-SCO and OS/os.h-SCO_SV. Also added | |
330 | definitions to OS/Makefile-SCO and OS/Makefile-SCO_SV that put basename, | |
331 | chown and chgrp in /bin and hostname in /usr/bin. | |
332 | ||
333 | 28. Exim was keeping the "process log" file open after each use, just as it | |
334 | does for the main log. This opens the possibility of it remaining open for | |
335 | long periods when the USR1 signal hits a daemon. Occasional processlog | |
336 | errors were reported, that could have been caused by this. Anyway, it seems | |
337 | much more sensible not to leave this file open at all, so that is what now | |
338 | happens. | |
339 | ||
340 | 29. The long-running daemon process does not normally write to the log once it | |
341 | has entered its main loop, and it closes the log before doing so. This is | |
342 | so that log files can straightforwardly be renamed and moved. However, | |
343 | there are a couple of unusual error situations where the daemon does write | |
344 | log entries, and I had neglected to close the log afterwards. | |
345 | ||
346 | 30. The text of an SMTP error response that was received during a remote | |
347 | delivery was being truncated at 512 bytes. This is too short for some of | |
348 | the long messages that one sometimes sees. I've increased the limit to | |
349 | 1024. | |
350 | ||
351 | 31. It is now possible to make retry rules that apply only when a message has a | |
352 | specific sender, in particular, an empty sender. | |
353 | ||
354 | 32. Added "control = enforce_sync" and "control = no_enforce_sync". This makes | |
355 | it possible to be selective about when SMTP synchronization is enforced. | |
356 | ||
357 | 33. Added "control = caseful_local_part" and "control = "caselower_local_part". | |
358 | ||
359 | 32. Implemented hosts_connection_nolog. | |
360 | ||
361 | 33. Added an ACL for QUIT. | |
362 | ||
363 | 34. Setting "delay_warning=" to disable warnings was not working; it gave a | |
364 | syntax error. | |
365 | ||
366 | 35. Added mailbox_size and mailbox_filecount to appendfile. | |
367 | ||
368 | 36. Added control = no_multiline_responses to ACLs. | |
369 | ||
370 | 37. There was a bug in the logic of the code that waits for the clock to tick | |
371 | in the case where the clock went backwards by a substantial amount such | |
372 | that the microsecond fraction of "now" was more than the microsecond | |
373 | fraction of "then" (but the whole seconds number was less). | |
374 | ||
375 | 38. Added support for the libradius Radius client library this is found on | |
376 | FreeBSD (previously only the radiusclient library was supported). | |
377 | ||
378 | ||
379 | Exim version 4.42 | |
380 | ----------------- | |
381 | ||
382 | 1. When certain lookups returned multiple values in the form name=value, the | |
383 | quoting of the values was not always being done properly. Specifically: | |
384 | (a) If the value started with a double quote, but contained no whitespace, | |
385 | it was not quoted. | |
386 | (b) If the value contained whitespace other than a space character (i.e. | |
387 | tabs or newlines or carriage returns) it was not quoted. | |
388 | This fix has been applied to the mysql and pgsql lookups by writing a | |
389 | separate quoting function and calling it from the lookup code. The fix | |
390 | should probably also be applied to nisplus, ibase and oracle lookups, but | |
391 | since I cannot test any of those, I have not disturbed their existing code. | |
392 | ||
393 | 2. A hit in the callout cache for a specific address caused a log line with no | |
394 | reason for rejecting RCPT. Now it says "Previous (cached) callout | |
395 | verification failure". | |
396 | ||
397 | 3. There was an off-by-one bug in the queryprogram router. An over-long | |
398 | return line was truncated at 256 instead of 255 characters, thereby | |
399 | overflowing its buffer with the terminating zero. As well as fixing this, I | |
400 | have increased the buffer size to 1024 (and made a note to document this). | |
401 | ||
402 | 4. If an interrupt, such as the USR1 signal that is send by exiwhat, arrives | |
403 | when Exim is waiting for an SMTP response from a remote server, Exim | |
404 | restarts its select() call on the socket, thereby resetting its timeout. | |
405 | This is not a problem when such interrupts are rare. Somebody set up a cron | |
406 | job to run exiwhat every 2 minutes, which is less than the normal select() | |
407 | timeout (5 or 10 minutes). This meant that the select() timeout never | |
408 | kicked in because it was always reset. I have fixed this by comparing the | |
409 | time when an interrupt arrives with the time at the start of the first call | |
410 | to select(). If more time than the timeout has elapsed, the interrupt is | |
411 | treated as a timeout. | |
412 | ||
413 | 5. Some internal re-factoring in preparation for the addition of Sieve | |
414 | extensions (by MH). In particular, the "personal" test is moved to a | |
415 | separate function, and given an option for scanning Cc: and Bcc: (which is | |
416 | not set for Exim filters). | |
417 | ||
418 | 6. When Exim created an email address using the login of the caller as the | |
419 | local part (e.g. when creating a From: or Sender: header line), it was not | |
420 | quoting the local part when it contained special characters such as @. | |
421 | ||
422 | 7. Installed new OpenBSD configuration files. | |
423 | ||
424 | 8. Reworded some messages for syntax errors in "and" and "or" conditions to | |
425 | try to make them clearer. | |
426 | ||
427 | 9. Callout options, other than the timeout value, were being ignored when | |
428 | verifying sender addresses in header lines. For example, when using | |
429 | ||
430 | verify = header_sender/callout=no_cache | |
431 | ||
432 | the cache was (incorrectly) being used. | |
433 | ||
434 | 10. Added a missing instance of ${EXE} to the exim_install script; this affects | |
435 | only the Cygwin environment. | |
436 | ||
437 | 11. When return_path_on_delivery was set as a log selector, if different remote | |
438 | addresses in the same message used different return paths and parallel | |
439 | remote delivery occurred, the wrong values would sometimes be logged. | |
440 | (Whenever a remote delivery process finished, the return path value from | |
441 | the most recently started remote delivery process was logged.) | |
442 | ||
443 | 12. RFC 3848 specifies standard names for the "with" phrase in Received: header | |
444 | lines when AUTH and/or TLS are in use. This is the "received protocol" | |
445 | field. Exim used to use "asmtp" for authenticated SMTP, without any | |
446 | indication (in the protocol name) for TLS use. Now it follows the RFC and | |
447 | uses "esmtpa" if the connection is authenticated, "esmtps" if it is | |
448 | encrypted, and "esmtpsa" if it is both encrypted and authenticated. These | |
449 | names appear in log lines as well as in Received: header lines. | |
450 | ||
451 | 13. Installed MH's patches for Sieve to add the "copy" and "vacation" | |
452 | extensions, and comparison tests, and to fix some bugs. | |
453 | ||
454 | 14. Changes to the "personal" filter test: | |
455 | ||
456 | (1) The test was buggy in that it was just doing the equivalent of | |
457 | "contains" tests on header lines. For example, if a user's address was | |
458 | anne@some.where, the "personal" test would incorrectly be true for | |
459 | ||
460 | To: susanne@some.where | |
461 | ||
462 | This test is now done by extracting each address from the header in turn, | |
463 | and checking the entire address. Other tests that are part of "personal" | |
464 | are now done using regular expressions (for example, to check local parts | |
465 | of addresses in From: header lines). | |
466 | ||
467 | (2) The list of non-personal local parts in From: addresses has been | |
468 | extended to include "listserv", "majordomo", "*-request", and "owner-*", | |
469 | taken from the Sieve specification recommendations. | |
470 | ||
471 | (3) If the message contains any header line starting with "List-" it is | |
472 | treated as non-personal. | |
473 | ||
474 | (4) The test for "circular" in the Subject: header line has been removed | |
475 | because it now seems ill-conceived. | |
476 | ||
477 | 15. Minor typos in src/EDITME comments corrected. | |
478 | ||
479 | 16. Installed latest exipick from John Jetmore. | |
480 | ||
481 | 17. If headers_add on a router specified a text string that was too long for | |
482 | string_sprintf() - that is, longer than 8192 bytes - Exim panicked. The use | |
483 | of string_sprintf() is now avoided. | |
484 | ||
485 | 18. $message_body_size was not set (it was always zero) when running the DATA | |
486 | ACL and the local_scan() function. | |
487 | ||
488 | 19. For the "mail" command in an Exim filter, no default was being set for | |
489 | the once_repeat time, causing a random time value to be used if "once" was | |
490 | specified. (If the value happened to be <= 0, no repeat happened.) The | |
491 | default is now 0s, meaning "never repeat". The "vacation" command was OK | |
492 | (its default is 7d). It's somewhat surprising nobody ever noticed this bug | |
493 | (I found it when inspecting the code). | |
494 | ||
495 | 20. There is now an overall timeout for performing a callout verification. It | |
496 | defaults to 4 times the callout timeout, which applies to individual SMTP | |
497 | commands during the callout. The overall timeout applies when there is more | |
498 | than one host that can be tried. The timeout is checked before trying the | |
499 | next host. This prevents very long delays if there are a large number of | |
500 | hosts and all are timing out (e.g. when the network connections are timing | |
501 | out). The value of the overall timeout can be changed by specifying an | |
502 | additional sub-option for "callout", called "maxwait". For example: | |
503 | ||
504 | verify = sender/callout=5s,maxwait=20s | |
505 | ||
506 | 21. Add O_APPEND to the open() call for maildirsize files (Exim already seeks | |
507 | to the end before writing, but this should make it even safer). | |
508 | ||
509 | 22. Exim was forgetting that it had advertised PIPELINING for the second and | |
510 | subsequent messages on an SMTP connection. It was also not resetting its | |
511 | memory on STARTTLS and an internal HELO. | |
512 | ||
513 | 23. When Exim logs an SMTP synchronization error within a session, it now | |
514 | records whether PIPELINING has been advertised or not. | |
515 | ||
516 | 24. Added 3 instances of "(long int)" casts to time_t variables that were being | |
517 | formatted using %ld, because on OpenBSD (and perhaps others), time_t is int | |
518 | rather than long int. | |
519 | ||
520 | 25. Installed the latest Cygwin configuration files from the Cygwin maintainer. | |
521 | ||
522 | 26. Added the never_mail option to autoreply. | |
523 | ||
524 | ||
525 | Exim version 4.41 | |
526 | ----------------- | |
527 | ||
528 | 1. A reorganization of the code in order to implement 4.40/8 caused a daemon | |
529 | crash if the getsockname() call failed; this can happen if a connection is | |
530 | closed very soon after it is established. The problem was simply in the | |
531 | order in which certain operations were done, causing Exim to try to write | |
532 | to the SMTP stream before it had set up the file descriptor. The bug has | |
533 | been fixed by making things happen in the correct order. | |
534 | ||
535 | ||
536 | Exim version 4.40 | |
537 | ----------------- | |
538 | ||
539 | 1. If "drop" was used in a DATA ACL, the SMTP output buffer was not flushed | |
540 | before the connection was closed, thus losing the rejection response. | |
541 | ||
542 | 2. Commented out the definition of SOCKLEN_T in os.h-SunOS5. It is needed for | |
543 | some early Solaris releases, but causes trouble in current releases where | |
544 | socklen_t is defined. | |
545 | ||
546 | 3. When std{in,out,err} are closed, re-open them to /dev/null so that they | |
547 | always exist. | |
548 | ||
549 | 4. Minor refactoring of os.c-Linux to avoid compiler warning when IPv6 is not | |
550 | configured. | |
551 | ||
552 | 5. Refactoring in expand.c to improve memory usage. Pre-allocate a block so | |
553 | that releasing the top of it at the end releases what was used for sub- | |
554 | expansions (unless the block got too big). However, discard this block if | |
555 | the first thing is a variable or header, so that we can use its block when | |
556 | it is dynamic (useful for very large $message_headers, for example). | |
557 | ||
558 | 6. Lookups now cache *every* query, not just the most recent. A new, separate | |
559 | store pool is used for this. It can be recovered when all lookup caches are | |
560 | flushed. Lookups now release memory at the end of their result strings. | |
561 | This has involved some general refactoring of the lookup sources. | |
562 | ||
563 | 7. Some code has been added to the store_xxx() functions to reduce the amount | |
564 | of flapping under certain conditions. | |
565 | ||
566 | 8. log_incoming_interface used to affect only the <= reception log lines. Now | |
567 | it causes the local interface and port to be added to several more SMTP log | |
568 | lines, for example "SMTP connection from", and rejection lines. | |
569 | ||
570 | 9. The Sieve author supplied some patches for the doc/README.SIEVE file. | |
571 | ||
572 | 10. Added a conditional definition of _BSD_SOCKLEN_T to os.h-Darwin. | |
573 | ||
574 | 11. If $host_data was set by virtue of a hosts lookup in an ACL, its value | |
575 | could be overwritten at the end of the current message (or the start of a | |
576 | new message if it was set in a HELO ACL). The value is now preserved for | |
577 | the duration of the SMTP connection. | |
578 | ||
579 | 12. If a transport had a headers_rewrite setting, and a matching header line | |
580 | contained an unqualified address, that address was qualified, even if it | |
581 | did not match any rewriting rules. The underlying bug was that the values | |
582 | of the flags that permit the existence of unqualified sender and recipient | |
583 | addresses in header lines (set by {sender,recipient}_unqualified_hosts for | |
584 | non-local messages, and by -bnq for local messages) were not being | |
585 | preserved with the message after it was received. | |
586 | ||
587 | 13. When Exim was logging an SMTP synchronization error, it could sometimes log | |
588 | "next input=" as part of the text comprising the host identity instead of | |
589 | the correct text. The code was using the same buffer for two different | |
590 | strings. However, depending on which order the printing function evaluated | |
591 | its arguments, the bug did not always show up. Under Linux, for example, my | |
592 | test suite worked just fine. | |
593 | ||
594 | 14. Exigrep contained a use of Perl's "our" scoping after change 4.31/70. This | |
595 | doesn't work with some older versions of Perl. It has been changed to "my", | |
596 | which in any case is probably the better facility to use. | |
597 | ||
598 | 15. A really picky compiler found some instances of statements for creating | |
599 | error messages that either had too many or two few arguments for the format | |
600 | string. | |
601 | ||
602 | 16. The size of the buffer for calls to the DNS resolver has been increased | |
603 | from 1024 to 2048. A larger buffer is needed when performing PTR lookups | |
604 | for addresses that have a lot of PTR records. This alleviates a problem; it | |
605 | does not fully solve it. | |
606 | ||
607 | 17. A dnsdb lookup for PTR records that receives more data than will fit in the | |
608 | buffer now truncates the list and logs the incident, which is the same | |
609 | action as happens when Exim is looking up a host name and its aliases. | |
610 | Previously in this situation something unpredictable would happen; | |
611 | sometimes it was "internal error: store_reset failed". | |
612 | ||
613 | 18. If a server dropped the connection unexpectedly when an Exim client was | |
614 | using GnuTLS and trying to read a response, the client delivery process | |
615 | crashed while trying to generate an error log message. | |
616 | ||
617 | 19. If a "warn" verb in an ACL added multiple headers to a message in a single | |
618 | string, for example: | |
619 | ||
620 | warn message = H1: something\nH2: something | |
621 | ||
622 | the text was added as a single header line from Exim's point of view | |
623 | though it ended up OK in the delivered message. However, searching for the | |
624 | second and subsequent header lines using $h_h2: did not work. This has been | |
625 | fixed. Similarly, if a system filter added multiple headers in this way, | |
626 | the routers could not see them. | |
627 | ||
628 | 20. Expanded the error message when iplsearch is called with an invalid key to | |
629 | suggest using net-iplsearch in a host list. | |
630 | ||
631 | 21. When running tests using -bh, any delays imposed by "delay" modifiers in | |
632 | ACLs are no longer actually imposed (and a message to that effect is | |
633 | output). | |
634 | ||
635 | 22. If a "gecos" field in a passwd entry contained escaped characters, in | |
636 | particular, if it contained a \" sequence, Exim got it wrong when building | |
637 | a From: or a Sender: header from that name. A second bug also caused | |
638 | incorrect handling when an unquoted " was present following a character | |
639 | that needed quoting. | |
640 | ||
641 | 23. "{crypt}" as a password encryption mechanism for a "crypteq" expansion item | |
642 | was not being matched caselessly. | |
643 | ||
644 | 24. Arranged for all hyphens in the exim.8 source to be escaped with | |
645 | backslashes. | |
646 | ||
647 | 25. Change 16 of 4.32, which reversed 71 or 4.31 didn't quite do the job | |
648 | properly. Recipient callout cache records were still being keyed to include | |
649 | the sender, even when use_sender was set false. This led to far more | |
650 | callouts that were necessary. The sender is no longer included in the key | |
651 | when use_sender is false. | |
652 | ||
653 | 26. Added "control = submission" modifier to ACLs. | |
654 | ||
655 | 27. Added the ${base62d: operator to decode base 62 numbers. | |
656 | ||
657 | 28. dnsdb lookups can now access SRV records. | |
658 | ||
659 | 29. CONFIGURE_OWNER can be set at build time to define an alternative owner for | |
660 | the configuration file. | |
661 | ||
662 | 30. The debug message "delivering xxxxxx-xxxxxx-xx" is now output in verbose | |
663 | (-v) mode. This makes the output for a verbose queue run more intelligible. | |
664 | ||
665 | 31. Added a use_postmaster feature to recipient callouts. | |
666 | ||
667 | 32. Added the $body_zerocount variable, containing the number of binary zero | |
668 | bytes in the message body. | |
669 | ||
670 | 33. The time of last modification of the "new" subdirectory is now used as the | |
671 | "mailbox time last read" when there is a quota error for a maildir | |
672 | delivery. | |
673 | ||
674 | 34. Added string comparison operators lt, lti, le, lei, gt, gti, ge, gei. | |
675 | ||
676 | 35. Added +ignore_unknown as a special item in host lists. | |
677 | ||
678 | 36. Code for decoding IPv6 addresses in host lists is now included, even if | |
679 | IPv6 support is not being compiled. This fixes a bug in which an IPv6 | |
680 | address was recognized as an IP address, but was then not correctly decoded | |
681 | into binary, causing unexpected and incorrect effects when compared with | |
682 | another IP address. | |
683 | ||
684 | ||
685 | Exim version 4.34 | |
686 | ----------------- | |
687 | ||
688 | 1. Very minor rewording of debugging text in manualroute to say "list of | |
689 | hosts" instead of "hostlist". | |
690 | ||
691 | 2. If verify=header_syntax was set, and a header line with an unqualified | |
692 | address (no domain) and a large number of spaces between the end of the | |
693 | name and the colon was received, the reception process suffered a buffer | |
694 | overflow, and (when I tested it) crashed. This was caused by some obsolete | |
695 | code that should have been removed. The fix is to remove it! | |
696 | ||
697 | 3. When running in the test harness, delay a bit after writing a bounce | |
698 | message to get a bit more predictability in the log output. | |
699 | ||
700 | 4. Added a call to search_tidyup() just before forking a reception process. In | |
701 | theory, someone could use a lookup in the expansion of smtp_accept_max_ | |
702 | per_host which, without the tidyup, could leave open a database connection. | |
703 | ||
704 | 5. Added the variables $recipient_data and $sender_data which get set from a | |
705 | lookup success in an ACL "recipients" or "senders" condition, or a router | |
706 | "senders" option, similar to $domain_data and $local_part_data. | |
707 | ||
708 | 6. Moved the writing of debug_print from before to after the "senders" test | |
709 | for routers. | |
710 | ||
711 | 7. Change 4.31/66 (moving the time when the Received: is generated) caused | |
712 | problems for message scanning, either using a data ACL, or using | |
713 | local_scan() because the Received: header was not generated till after they | |
714 | were called (in order to set the time as the time of reception completion). | |
715 | I have revised the way this works. The header is now generated after the | |
716 | body is received, but before the ACL or local_scan() are called. After they | |
717 | are run, the timestamp in the header is updated. | |
718 | ||
719 | ||
720 | Exim version 4.33 | |
721 | ----------------- | |
722 | ||
723 | 1. Change 4.24/6 introduced a bug because the SIGALRM handler was disabled | |
724 | before starting a queue runner without re-exec. This happened only when | |
725 | deliver_drop_privilege was set or when the Exim user was set to root. The | |
726 | effect of the bug was that timeouts during subsequent deliveries caused | |
727 | crashes instead of being properly handled. The handler is now left at its | |
728 | default (and expected) setting. | |
729 | ||
730 | 2. The other case in which a daemon avoids a re-exec is to deliver an incoming | |
731 | message, again when deliver_drop_privilege is set or Exim is run as root. | |
732 | The bug described in (1) was not present in this case, but the tidying up | |
733 | of the other signals was missing. I have made the two cases consistent. | |
734 | ||
735 | 3. The ignore_target_hosts setting on a manualroute router was being ignored | |
736 | for hosts that were looked up using the /MX notation. | |
737 | ||
738 | 4. Added /ignore=<ip list> feature to @mx_any, @mx_primary, and @mx_secondary | |
739 | in domain lists. | |
740 | ||
741 | 5. Change 4.31/55 was buggy, and broke when there was a rewriting rule that | |
742 | operated on the sender address. After changing the $sender_address to <> | |
743 | for the sender address verify, Exim was re-instated it as the original | |
744 | (before rewriting) address, but remembering that it had rewritten it, so it | |
745 | wasn't rewriting it again. This bug also had the effect of breaking the | |
746 | sender address verification caching when the sender address was rewritten. | |
747 | ||
748 | 6. The ignore_target_hosts option was being ignored by the ipliteral router. | |
749 | This has been changed so that if the ip literal address matches | |
750 | ignore_target_hosts, the router declines. | |
751 | ||
752 | 7. Added expansion conditions match_domain, match_address, and match_local_ | |
753 | part (NOT match_host). | |
754 | ||
755 | 8. The placeholder for the Received: header didn't have a length field set. | |
756 | ||
757 | 9. Added code to Exim itself and to exim_lock to test for a specific race | |
758 | condition that could lead to file corruption when using MBX delivery. The | |
759 | issue is with the lockfile that is created in /tmp. If this file is removed | |
760 | after a process has opened it but before that process has acquired a lock, | |
761 | there is the potential for a second process to recreate the file and also | |
762 | acquire a lock. This could lead to two Exim processes writing to the file | |
763 | at the same time. The added code performs the same test as UW imapd; it | |
764 | checks after acquiring the lock that its file descriptor still refers to | |
765 | the same named file. | |
766 | ||
767 | 10. The buffer for building added header lines was of fixed size, 8192 bytes. | |
768 | It is now parameterized by HEADER_ADD_BUFFER_SIZE and this can be adjusted | |
769 | when Exim is built. | |
770 | ||
771 | 11. Added the smtp_active_hostname option. If used, this will typically be made | |
772 | to depend on the incoming interface address. Because $interface_address is | |
773 | not set up until the daemon has forked a reception process, error responses | |
774 | that can happen earlier (such as "too many connections") no longer contain | |
775 | a host name. | |
776 | ||
777 | 12. If an expansion in a condition on a "warn" statement fails because a lookup | |
778 | defers, the "warn" statement is abandoned, and the next ACL statement is | |
779 | processed. Previously this caused the whole ACL to be aborted. | |
780 | ||
781 | 13. Added the iplsearch lookup type. | |
782 | ||
783 | 14. Added ident_timeout as a log selector. | |
784 | ||
785 | 15. Added tls_certificate_verified as a log selector. | |
786 | ||
787 | 16. Added a global option tls_require_ciphers (compare the smtp transport | |
788 | option of the same name). This controls incoming TLS connections. | |
789 | ||
790 | 17. I finally figured out how to make tls_require_ciphers do a similar thing | |
791 | in GNUtls to what it does in OpenSSL, that is, set up an appropriate list | |
792 | before starting the TLS session. | |
793 | ||
794 | 18. Tabs are now shown as \t in -bP output. | |
795 | ||
796 | 19. If the log selector return_path_on_delivery was set, Exim crashed when | |
797 | bouncing a message because it had too many Received: header lines. | |
798 | ||
799 | 20. If two routers both had headers_remove settings, and the first one included | |
800 | a superfluous trailing colon, the final name in the first list and the | |
801 | first name in the second list were incorrectly joined into one item (with a | |
802 | colon in the middle). | |
803 | ||
804 | ||
805 | Exim version 4.32 | |
806 | ----------------- | |
807 | ||
808 | 1. Added -C and -D options to the exinext utility, mainly to make it easier | |
809 | to include in the automated testing, but these could be helpful when | |
810 | multiple configurations are in use. | |
811 | ||
812 | 2. The exinext utility was not formatting the output nicely when there was | |
813 | an alternate port involved in the retry record key, nor when there was a | |
814 | message id as well (for retries that were specific to a specific message | |
815 | and a specific host). It was also confused by IPv6 addresses, because of | |
816 | the additional colons they contain. I have fixed the IPv4 problem, and | |
817 | patched it up to do a reasonable job for IPv6. | |
818 | ||
819 | 3. When there is an error after a MAIL, RCPT, or DATA SMTP command during | |
820 | delivery, the log line now contains "pipelined" if PIPELINING was used. | |
821 | ||
822 | 4. An SMTP transport process used to panic and die if the bind() call to set | |
823 | an explicit outgoing interface failed. This has been changed; it is now | |
824 | treated in the same way as a connect() failure. | |
825 | ||
826 | 5. A reference to $sender_host_name in the part of a conditional expansion | |
827 | that was being skipped was still causing a DNS lookup. This no longer | |
828 | occurs. | |
829 | ||
830 | 6. The def: expansion condition was not recognizing references to header lines | |
831 | that used bh_ and bheader_. | |
832 | ||
833 | 7. Added the _cache feature to named lists. | |
834 | ||
835 | 8. The code for checking quota_filecount in the appendfile transport was | |
836 | allowing one more file than it should have been. | |
837 | ||
838 | 9. For compatibility with Sendmail, the command line option | |
839 | ||
840 | -prval:sval | |
841 | ||
842 | is equivalent to | |
843 | ||
844 | -oMr rval -oMs sval | |
845 | ||
846 | and sets the incoming protocol and host name (for trusted callers). The | |
847 | host name and its colon can be omitted when only the protocol is to be set. | |
848 | Note the Exim already has two private options, -pd and -ps, that refer to | |
849 | embedded Perl. It is therefore impossible to set a protocol value of "d" or | |
850 | "s", but I don't think that's a major issue. | |
851 | ||
852 | 10. A number of refactoring changes to the code, none of which should affect | |
853 | Exim's behaviour: | |
854 | ||
855 | (a) The number of logging options was getting close to filling up the | |
856 | 32-bit word that was used as a bit map. I have split them into two classes: | |
857 | those that are passed in the argument to log_write(), and those that are | |
858 | only ever tested independently outside of that function. These are now in | |
859 | separate 32-bit words, so there is plenty of room for expansion again. | |
860 | There is no change in the user interface or the logging behaviour. | |
861 | ||
862 | (b) When building, for example, log lines, the code previously used a | |
863 | macro that called string_cat() twice, in order to add two strings. This is | |
864 | not really sufficiently general. Furthermore, there was one instance where | |
865 | it was actually wrong because one of the argument was used twice, and in | |
866 | one call a function was used. (As it happened, calling the function twice | |
867 | did not affect the overall behaviour.) The macro has been replaced by a | |
868 | function that can join an arbitrary number of extra strings onto a growing | |
869 | string. | |
870 | ||
871 | (c) The code for expansion conditions now uses a table and a binary chop | |
872 | instead of a serial search (which was left over from when there were very | |
873 | few conditions). Also, it now recognizes conditions like "pam" even when | |
874 | the relevant support is not compiled in: a suitably worded error message is | |
875 | given if an attempt is made to use such a condition. | |
876 | ||
877 | 11. Added ${time_interval:xxxxx}. | |
878 | ||
879 | 12. A bug was causing one of the ddress fields not to be passed back correctly | |
880 | from remote delivery subprocesses. The field in question was not being | |
881 | subsequently used, so this caused to problems in practice. | |
882 | ||
883 | 13. Added new log selectors queue_time and deliver_time. | |
884 | ||
885 | 14. Might have fixed a bug in maildirsizefile handling that threw up | |
886 | "unexpected character" debug warnings, and recalculated the data | |
887 | unnecessarily. In any case, I expanded the warning message to give more | |
888 | information. | |
889 | ||
890 | 15. Added the message "Restricted characters in address" to the statements in | |
891 | the default ACL that block characters like @ and % in local parts. | |
892 | ||
893 | 16. Change 71 for release 4.31 proved to be much less benign that I imagined. | |
894 | Three changes have been made: | |
895 | ||
896 | (a) There was a serious bug; a negative response to MAIL caused the whole | |
897 | recipient domain to be cached as invalid, thereby blocking all messages | |
898 | to all local parts at the same domain, from all senders. This bug has | |
899 | been fixed. The domain is no longer cached after a negative response to | |
900 | MAIL if the sender used is not empty. | |
901 | ||
902 | (b) The default behaviour of using MAIL FROM:<> for recipient callouts has | |
903 | been restored. | |
904 | ||
905 | (c) A new callout option, "use_sender" has been added for people who want | |
906 | the modified behaviour. | |
907 | ||
908 | ||
909 | Exim version 4.31 | |
910 | ----------------- | |
911 | ||
912 | 1. Removed "EXTRALIBS=-lwrap" from OS/Makefile-Unixware7 on the advice of | |
913 | Larry Rosenman. | |
914 | ||
915 | 2. Removed "LIBS = -lresolv" from OS/Makefile-Darwin as it is not needed, and | |
916 | indeed breaks things for older releases. | |
917 | ||
918 | 3. Added additional logging to the case where there is a problem reading data | |
919 | from a filter that is running in a subprocess using a pipe, in order to | |
920 | try to track down a specific problem. | |
921 | ||
922 | 4. Testing facility fudge: when running in the test harness and attempting | |
923 | to connect to 10.x.x.x (expecting a connection timeout) I'm now sometimes | |
924 | getting "No route to host". Convert this to a timeout. | |
925 | ||
926 | 5. Define ICONV_ARG2_TYPE as "char **" for Unixware7 to avoid compiler | |
927 | warning. | |
928 | ||
929 | 6. Some OS don't have socklen_t but use size_t instead. This affects the | |
930 | fifth argument of getsockopt() amongst other things. This is now | |
931 | configurable by a macro called SOCKLEN_T which defaults to socklen_t, but | |
932 | can be set for individual OS. I have set it for SunOS5, OSF1, and | |
933 | Unixware7. Current versions of SunOS5 (aka Solaris) do have socklen_t, but | |
934 | some earlier ones do not. | |
935 | ||
936 | 7. Change 4.30/15 was not doing the test caselessly. | |
937 | ||
938 | 8. The standard form for an IPv6 address literal was being rejected by address | |
939 | parsing in, for example, MAIL and RCPT commands. An example of this kind of | |
940 | address is [IPv6:2002:c1ed:8229:10:202:2dff:fe07:a42a]. Exim now accepts | |
941 | this, as well as the form without the "IPv6" on the front (but only when | |
942 | address literals are enabled, of course). | |
943 | ||
944 | 9. Added some casts to avoid compiler warnings in OS/os.c-Linux. | |
945 | ||
946 | 10. Exim crashed if a message with an empty sender address specified by -f | |
947 | encountered a router with an errors_to setting. This could be provoked only | |
948 | by a command such as | |
949 | ||
950 | exim -f "" ... | |
951 | ||
952 | where an empty string was supplied; "<>" did not hit this bug. | |
953 | ||
954 | 11. Installed PCRE release 4.5. | |
955 | ||
956 | 12. If EHLO/HELO was rejected by an ACL, the value of $sender_helo_name | |
957 | remained set. It is now erased. | |
958 | ||
959 | 13. exiqgrep wasn't working on MacOS X because it didn't correctly compute | |
960 | times from message ids (which are base 36 rather than the normal 62). | |
961 | ||
962 | 14. "Expected" SMTP protocol errors that can arise when PIPELINING is in use | |
963 | were being counted as actual protocol errors, and logged if the log | |
964 | selector +smtp_protocol_error was set. One cannot be perfect in this test, | |
965 | but now, if PIPELINING has been advertised, RCPT following a rejected MAIL, | |
966 | and DATA following a set of rejected RCPTs do not count as protocol errors. | |
967 | In other words, Exim assumes they were pipelined, though this may not | |
968 | actually be the case. Of course, in all cases the client gets an | |
969 | appropriate error code. | |
970 | ||
971 | 15. If a lookup fails in an ACL condition, a message about the failure may | |
972 | be available; it is used if testing the ACL cannot continue, because most | |
973 | such messages specify what the cause of the deferral is. However, some | |
974 | messages (e.g. "MYSQL: no data found") do not cause a defer. There was bug | |
975 | that caused an old message to be retained and used if a later statement | |
976 | caused a defer, replacing the real cause of the deferral. | |
977 | ||
978 | 16. If an IP address had so many PTR records that the DNS lookup buffer | |
979 | was not large enough to hold them, Exim could crash while trying to process | |
980 | the truncated data. It now detects and logs this case. | |
981 | ||
982 | 17. Further to 4.21/58, another change has been made: if (and only if) the | |
983 | first line of a message (the first header line) ends with CRLF, a bare LF | |
984 | in a subsequent header line has a space inserted after it, so as not to | |
985 | terminate the header. | |
986 | ||
987 | 18. Refactoring: tidied an ugly bit of code in appendfile that copied data | |
988 | unnecessarily, used atoi() instead of strtol(), and didn't check the | |
989 | termination when getting file sizes from file names by regex. | |
990 | ||
991 | 19. Completely re-implemented the support for maildirsize files, in the light | |
992 | of a number of problems with the previous contributed implementation | |
993 | (4.30/29). In particular: | |
994 | ||
995 | . If the quota is zero, the maildirsize file is maintained, but no quota is | |
996 | imposed. | |
997 | ||
998 | . If the maildir directory does not exist, it is created before any attempt | |
999 | to write a maildirsize file. | |
1000 | ||
1001 | . The quota value in the file is just a cache; if the quota is changed in | |
1002 | the transport, the new value overrides. | |
1003 | ||
1004 | . A regular expression is available for excluding directories from the | |
1005 | count. | |
1006 | ||
1007 | 20. The autoreply transport checks the characters in options that define the | |
1008 | message's headers; it allows continued headers, but it was checking with | |
1009 | isspace() after an embedded newline instead of explicitly looking for a | |
1010 | space or a tab. | |
1011 | ||
1012 | 21. If all the "regular" hosts to which an address was routed had passed their | |
1013 | expiry times, and had not reached their retry times, the address was | |
1014 | bounced, even if fallback hosts were defined. Now Exim should go on to try | |
1015 | the fallback hosts. | |
1016 | ||
1017 | 22. Increased buffer sizes in the callout code from 1024 to 4096 to match the | |
1018 | equivalent code in the SMTP transport. Some hosts send humungous responses | |
1019 | to HELO/EHLO, more than 1024 it seems. | |
1020 | ||
1021 | 23. Refactoring: code in filter.c used (void *) for "any old type" but this | |
1022 | gives compiler warnings in some environments. I've now done it "properly", | |
1023 | using a union. | |
1024 | ||
1025 | 24. The replacement for inet_ntoa() that is used with gcc on IRIX systems | |
1026 | (because of problems with the built-in one) was declared to return uschar * | |
1027 | instead of char *, causing compiler failure. | |
1028 | ||
1029 | 25. Fixed a file descriptor leak when processing alias/forward files. | |
1030 | ||
1031 | 26. Fixed a minor format string issue in dbfn.c. | |
1032 | ||
1033 | 27. Typo in exim.c: ("dmbnz" for "dbmnz"). | |
1034 | ||
1035 | 28. If a filter file refered to $h_xxx or $message_headers, and the headers | |
1036 | contained RFC 2047 "words", Exim's memory could, under certain conditions, | |
1037 | become corrupted. | |
1038 | ||
1039 | 29. When a sender address is verified, it is cached, to save repeating the test | |
1040 | when there is more than one recipient in a message. However, when the | |
1041 | verification involves a callout, it is possible for different callout | |
1042 | options to be set for different recipients. It is too complicated to keep | |
1043 | track of this in the cache, so now Exim always runs a verification when a | |
1044 | callout is required, relying on the callout cache for the optimization. | |
1045 | The overhead is duplication of the address routing, but this should not be | |
1046 | too great. | |
1047 | ||
1048 | 30. Fixed a bug in callout caching. If a RCPT command caused the sender address | |
1049 | to be verified with callout=postmaster, and the main callout worked but the | |
1050 | postmaster check failed, the verification correctly failed. However, if a | |
1051 | subsequent RCPT command asked for sender verification *without* the | |
1052 | postmaster check, incorrect caching caused this verification also to fail, | |
1053 | incorrectly. | |
1054 | ||
1055 | 31. Exim caches DNS lookup failures so as to avoid multiple timeouts; however, | |
1056 | it was not caching the DNS options (qualify_single, search_parents) that | |
1057 | were used when the lookup failed. A subsequent lookup with different | |
1058 | options therefore always gave the same answer, though there were cases | |
1059 | where it should not have. (Example: a "domains = !$mx_any" option on a | |
1060 | dnslookup router: the "domains" option is always processed without any | |
1061 | widening, but the router might have qualify_single set.) Now Exim uses the | |
1062 | cached value only when the same options are set. | |
1063 | ||
1064 | 32. Added John Jetmore's "exipick" utility to the distribution. | |
1065 | ||
1066 | 33. GnuTLS: When an attempt to start a TLS session fails for any reason other | |
1067 | than a timeout (e.g. a certificate is required, and is not provided), an | |
1068 | Exim server now closes the connection immediately. Previously it waited for | |
1069 | the client to close - but if the client is SSL, it seems that they each | |
1070 | wait for each other, leading to a delay before one of them times out. | |
1071 | ||
1072 | 34: GnuTLS: Updated the code to use the new GnuTLS 1.0.0 API. I have not | |
1073 | maintained 0.8.x compatibility because I don't think many are using it, and | |
1074 | it is clearly obsolete. | |
1075 | ||
1076 | 35. Added TLS support for CRLs: a tls_crl global option and one for the smtp | |
1077 | transport. | |
1078 | ||
1079 | 36. OpenSSL: $tls_certificate_verified was being set to 1 even if the | |
1080 | client certificate was expired. A simple patch fixes this, though I don't | |
1081 | understand the full logic of why the verify callback is called multiple | |
1082 | times. | |
1083 | ||
1084 | 37. OpenSSL: a patch from Robert Roselius: "Enable client-bug workaround. | |
1085 | Versions of OpenSSL as of 0.9.6d include a 'CBC countermeasure' feature, | |
1086 | which causes problems with some clients (such as the Certicom SSL Plus | |
1087 | library used by Eudora). This option, SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS, | |
1088 | disables the coutermeasure allowing Eudora to connect." | |
1089 | ||
1090 | 38. Exim was not checking that a write() to a log file succeeded. This could | |
1091 | lead to Bad Things if a log got too big, in particular if it hit a file | |
1092 | size limit. Exim now panics and dies if it cannot write to a log file, just | |
1093 | as it does if it cannot open a log file. | |
1094 | ||
1095 | 39. Modified OS/Makefile-Linux so that it now contains | |
1096 | ||
1097 | CFLAGS=-O -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE | |
1098 | ||
1099 | The two -D definitions ensure that Exim is compiled with large file | |
1100 | support, which makes it possible to handle log files that are bigger than | |
1101 | 2^31. | |
1102 | ||
1103 | 40. Fixed a subtle caching bug: if (in an ACL or a set of routers, for | |
1104 | instance) a domain was checked against a named list that involved a lookup, | |
1105 | causing $domain_data to be set, then another domain was checked against the | |
1106 | same list, then the first domain was re-checked, the value of $domain_data | |
1107 | after the final check could be wrong. In particular, if the second check | |
1108 | failed, it could be set empty. This bug probably also applied to | |
1109 | $localpart_data. | |
1110 | ||
1111 | 41. The strip_trailing_dot option was not being applied to the address given | |
1112 | with the -f command-line option. | |
1113 | ||
1114 | 42. The code for reading a message's header from the spool was incrementing | |
1115 | $received_count, but never initializing it. This meant that the value was | |
1116 | incorrect (doubled) while delivering a message in the same process in which | |
1117 | it was received. In the most common configuration of Exim, this never | |
1118 | happens - a fresh exec is done - but it can happen when | |
1119 | deliver_drop_privilege is set. | |
1120 | ||
1121 | 43. When Exim logs an SMTP synchronization error - client data sent too soon - | |
1122 | it now includes up to 150 characters of the unexpected data in the log | |
1123 | line. | |
1124 | ||
1125 | 44. The exim_dbmbuild utility uses fixed size buffers for reading input lines | |
1126 | and building data strings. The size of both of these buffers was 10 000 | |
1127 | bytes - far larger than anybody would *ever* want, thought I. Needless to | |
1128 | say, somebody hit the limit. I have increased the maximum line length to | |
1129 | 20 000 and the maximum data length of concatenated lines to 100 000. I have | |
1130 | also fixed two bugs, because there was no checking on these buffers. Tsk, | |
1131 | tsk. Now exim_dbmbuild gives a message and exits with an error code if a | |
1132 | buffer is too small. | |
1133 | ||
1134 | 45. The exim_dbmbuild utility did not support quoted keys, as Exim does in | |
1135 | lsearch lookups. Now it does. | |
1136 | ||
1137 | 46. When parsing a route_list item in a manualroute router, a fixed-length | |
1138 | buffer was used for the list of hosts. I made this 1024 bytes long, | |
1139 | thinking that nobody would ever have a list of hosts that long. Wrong. | |
1140 | Somebody had a whole pile of complicated expansion conditions, and the | |
1141 | string was silently truncated, leading to an expansion error. It turns out | |
1142 | that it is easier to change to an unlimited length (owing to other changes | |
1143 | that have happened since this code was originally written) than to build | |
1144 | structure for giving a limitation error. The length of the item that | |
1145 | expands into the list of hosts is now unlimited. | |
1146 | ||
1147 | 47. The lsearch lookup could not handle data where the length of text line was | |
1148 | more than 4095 characters. Such lines were truncated, leading to shortened | |
1149 | data being returned. It should now handle lines of any length. | |
1150 | ||
1151 | 48. Minor wording revision: "cannot test xxx in yyy ACL" becomes "cannot test | |
1152 | xxx condition in yyy ACL" (e.g. "cannot test domains condition in DATA | |
1153 | ACL"). | |
1154 | ||
1155 | 49. Cosmetic tidy to scripts like exicyclog that are generated by globally | |
1156 | replacing strings such as BIN_DIRECTORY in a source file: the replacement | |
1157 | no longer happens in comment lines. A list of replacements is now placed | |
1158 | at the head of all of the source files, except those whose only change is | |
1159 | to replace PERL_COMMAND in the very first #! line. | |
1160 | ||
1161 | 50. Replaced the slow insertion sort in queue.c, for sorting the list of | |
1162 | messages on the queue, with a bottom-up merge sort, using code contributed | |
1163 | by Michael Haardt. This should make operations like -bp somewhat faster on | |
1164 | large queues. It won't affect queue runners, except when queue_run_in_order | |
1165 | is set. | |
1166 | ||
1167 | 51. Installed eximstats 1.31 in the distribution. | |
1168 | ||
1169 | 52. Added support for SRV lookups to the dnslookup router. | |
1170 | ||
1171 | 53. If an ACL referred to $message_body or $message_body_end, the value was not | |
1172 | reset for any messages that followed in the same SMTP session. | |
1173 | ||
1174 | 54. The store-handling optimization for building very long strings was not | |
1175 | differentiating between the different store pools. I don't think this | |
1176 | actually made any difference in practice, but I've tidied it. | |
1177 | ||
1178 | 55. While running the routers to verify a sender address, $sender_address | |
1179 | was still set to the sender address. This is wrong, because when routing to | |
1180 | send a bounce to the sender, it would be empty. Therefore, I have changed | |
1181 | it so that, while verifying a sender address, $sender_address is set to <>. | |
1182 | (There is no change to what happens when verifying a recipient address.) | |
1183 | ||
1184 | 56. After finding MX (or SRV) records, Exim was doing a DNS lookup for the | |
1185 | target A or AAAA records (if not already returned) without resetting the | |
1186 | qualify_single or search_parents options of the DNS resolver. These are | |
1187 | inappropriate in this case because the targets of MX and SRV records must | |
1188 | be FQDNs. A broken DNS record could cause trouble if it happened to have a | |
1189 | target that, when qualified, matched something in the local domain. These | |
1190 | two options are now turned off when doing these lookups. | |
1191 | ||
1192 | 57. It seems that at least some releases of Reiserfs (which does not have the | |
1193 | concept of a fixed number of inodes) returns zero and not -1 for the | |
1194 | number of available inodes. This interacted badly with check_spool_inodes, | |
1195 | which assumed that -1 was the "no such thing" setting. What I have done is | |
1196 | to check that the total number of inodes is greater than zero before doing | |
1197 | the test of how many are available. | |
1198 | ||
1199 | 58. When a "warn" ACL statement has a log_message modifier, the message is | |
1200 | remembered, and not repeated. This is to avoid a lot of repetition when a | |
1201 | message has many recipients that cause the same warning to be written. | |
1202 | Howewer, Exim was preserving the list of already written lines for an | |
1203 | entire SMTP session, which doesn't seem right. The memory is now reset if a | |
1204 | new message is started. | |
1205 | ||
1206 | 59. The "rewrite" debugging flag was not showing the result of rewriting in the | |
1207 | debugging output unless log_rewrite was also set. | |
1208 | ||
1209 | 60. Avoid a compiler warning on 64-bit systems in dsearch.c by avoiding the use | |
1210 | of (int)(handle) when we know that handle contains (void *)(-1). | |
1211 | ||
1212 | 61. The Exim daemon panic-logs an error return when it closes the incoming | |
1213 | connection. However "connection reset by peer" seems to be common, and | |
1214 | isn't really an error worthy of noting specially, so that particular error | |
1215 | is no long logged. | |
1216 | ||
1217 | 62. When Exim is trying to find all the local interfaces, it used to panic and | |
1218 | die if the ioctl to get the interface flags failed. However, it seems that | |
1219 | on at least one OS (Solaris 9) it is possible to have an interface that is | |
1220 | included in the list of interfaces, but for which you get a failure error | |
1221 | for this call. This happens when the interface is not "plumbed" into a | |
1222 | protocol (i.e. neither IPv4 nor IPv6). I've changed the code so that a | |
1223 | failure of the "get flags" call assumes that the interface is down. | |
1224 | ||
1225 | 63. Added a ${eval10: operator, which assumes all numbers are decimal. This | |
1226 | makes life easier for people who are doing arithmetic on fields extracted | |
1227 | from dates, where you often get leading zeros that should not be | |
1228 | interpreted as octal. | |
1229 | ||
1230 | 64. Added qualify_domain to the redirect router, to override the global | |
1231 | setting. | |
1232 | ||
1233 | 65. If a pathologically long header line contained very many addresses (the | |
1234 | report of this problem mentioned 10 000) and each of them was rewritten, | |
1235 | Exim could use up a very large amount of memory. (It kept on making new | |
1236 | copies of the header line as it rewrote, and never released the old ones.) | |
1237 | At the expense of a bit more processing, the header rewriting function has | |
1238 | been changed so that it no longer eats memory in this way. | |
1239 | ||
1240 | 66. The generation of the Received: header has been moved from the time that a | |
1241 | message starts to be received, to the time that it finishes. The timestamp | |
1242 | in the Received: header should now be very close to that of the <= log | |
1243 | line. There are two side-effects of this change: | |
1244 | ||
1245 | (a) If a message is rejected by a DATA or non-SMTP ACL or local_scan(), the | |
1246 | logged header lines no longer include the local Received: line, because | |
1247 | it has not yet been created. The same applies to a copy of the message | |
1248 | that is returned to a non-SMTP sender when a message is rejected. | |
1249 | ||
1250 | (b) When a filter file is tested using -bf, no additional Received: header | |
1251 | is added to the test message. After some thought, I decided that this | |
1252 | is a bug fix. | |
1253 | ||
1254 | This change does not affect the value of $received_for. It is still set | |
1255 | after address rewriting, but before local_scan() is called. | |
1256 | ||
1257 | 67. Installed the latest Cygwin-specific files from the Cygwin maintainer. | |
1258 | ||
1259 | 68. GnuTLS: If an empty file is specified for tls_verify_certificates, GnuTLS | |
1260 | gave an unhelpful panic error message, and a defer error. I have managed to | |
1261 | change this behaviour so that it now rejects any supplied certificate, | |
1262 | which seems right, as the list of acceptable certificates is empty. | |
1263 | ||
1264 | 69. OpenSSL: If an empty file is specified for tls_verify_certificates, OpenSSL | |
1265 | gave an unhelpful defer error. I have not managed to make this reject any | |
1266 | supplied certificates, but the error message it gives is "no certificate | |
1267 | supplied", which is not helpful. | |
1268 | ||
1269 | 70. exigrep's output now also includes lines that are not associated with any | |
1270 | message, but which match the given pattern. Implemented by a patch from | |
1271 | Martin Sluka, which also tidied up the Perl a bit. | |
1272 | ||
1273 | 71. Recipient callout verification, like sender verification, was using <> in | |
1274 | the MAIL FROM command. This isn't really the right thing, since the actual | |
1275 | sender may affect whether the remote host accepts the recipient or not. I | |
1276 | have changed it to use the actual sender in the callout; this means that | |
1277 | the cache record is now keyed on a recipient/sender pair, not just the | |
1278 | recipient address. There doesn't seem to be a real danger of callout loops, | |
1279 | since a callout by the remote host to check the sender would use <>. | |
1280 | [SEE ABOVE: changed after hitting problems.] | |
1281 | ||
1282 | 72. Exim treats illegal SMTP error codes that do not begin with 4 or 5 as | |
1283 | temporary errors. However, in the case of such a code being given after | |
1284 | the end of a data transmission (i.e. after ".") Exim was failing to write | |
1285 | a retry record for the message. (Yes, there was some broken host that was | |
1286 | actually sending 8xx at this point.) | |
1287 | ||
1288 | 73. An unknown lookup type in a host list could cause Exim to panic-die when | |
1289 | the list was checked. (An example that provoked this was putting <; in the | |
1290 | middle of a list instead of at the start.) If this happened during a DATA | |
1291 | ACL check, a -D file could be left lying around. This kind of configuration | |
1292 | error no longer causes Exim to die; instead it causes a defer errror. The | |
1293 | incident is still logged to the main and panic logs. | |
1294 | ||
1295 | 74. Buglet left over from Exim 3 conversion. The message "too many messages | |
1296 | in one connection" was written to the rejectlog but not the mainlog, except | |
1297 | when address rewriting (yes!) was being logged. | |
1298 | ||
1299 | 75. Added write_rejectlog option. | |
1300 | ||
1301 | 76. When a system filter was run not as root (that is, when system_filter_user | |
1302 | was set), the values of the $n variables were not being returned to the | |
1303 | main process; thus, they were not subsequently available in the $sn | |
1304 | variables. | |
1305 | ||
1306 | 77. Added +return_path_on_delivery log selector. | |
1307 | ||
1308 | 78. A connection timeout was being treated differently from recipients deferred | |
1309 | when testing hosts_max_try with a message that was older than the host's | |
1310 | retry timeout. (The host should not be counted, thus allowing all hosts to | |
1311 | be tried at least once before bouncing.) This may have been the cause of an | |
1312 | occasionally reported bug whereby a message would remain on the queue | |
1313 | longer than the retry timeout, but would be bounced if a delivery was | |
1314 | forced. I say "may" because I never totally pinned down the problem; | |
1315 | setting up timeout/retry tests is difficult. See also the next item. | |
1316 | ||
1317 | 79. The ultimate address timeout was not being applied to errors that involved | |
1318 | a combination of host plus message (for example, a timeout on a MAIL | |
1319 | command). When an address resolved to a number of possible hosts, and they | |
1320 | were not all tried for each delivery (e.g. because of hosts_max_try), a | |
1321 | message could remain on the queue longer than the retry timeout. | |
1322 | ||
1323 | 80. Sieve bug: "stop" inside "elsif" was broken. Applied a patch from Michael | |
1324 | Haardt. | |
1325 | ||
1326 | 81. Fixed an obscure SMTP outgoing bug which required at least the following | |
1327 | conditions: (a) there was another message waiting for the same server; | |
1328 | (b) the server returned 5xx to all RCPT commands in the first message so | |
1329 | that the message was not completed; (c) the server dropped the connection | |
1330 | or gave a negative response to the RSET that Exim sends to abort the | |
1331 | transaction. The observed case was a dropped connection after DATA that had | |
1332 | been sent in pipelining mode. That is, the server had advertised PIPELINING | |
1333 | but was not implementing it correctly. The effect of the bug was incorrect | |
1334 | behaviour, such as trying another host, and this could lead to a crash. | |
1335 | ||
1336 | ||
1337 | Exim version 4.30 | |
1338 | ----------------- | |
1339 | ||
1340 | 1. The 3rd arguments to getsockname(), getpeername(), and accept() in exim.c | |
1341 | and daemon.c were passed as pointers to ints; they should have been | |
1342 | pointers to socklen_t variables (which are typically unsigned ints). | |
1343 | ||
1344 | 2. Some signed/unsigned type warnings in the os.c file for Linux have been | |
1345 | fixed. | |
1346 | ||
1347 | 3. Fixed a really odd bug that affected only the testing scheme; patching a | |
1348 | certain fixed string in the binary changed the value of another string that | |
1349 | happened to be identical to the end of the original first string. | |
1350 | ||
1351 | 4. When gethostbyname() (or equivalent) is passed an IP address as a "host | |
1352 | name", it returns that address as the IP address. On some operating | |
1353 | systems (e.g. Solaris), it also passes back the IP address string as the | |
1354 | "host name". However, on others (e.g. Linux), it passes back an empty | |
1355 | string. Exim wasn't checking for this, and was changing the host name to an | |
1356 | empty string, assuming it had been canonicized. | |
1357 | ||
1358 | 5. Although rare, it is permitted to have more than one PTR record for a given | |
1359 | IP address. I thought that gethostbyaddr() or getipnodebyaddr() always gave | |
1360 | all the names associated with an address, because they do in Solaris. | |
1361 | However, it seems that they do not in Linux for data that comes from the | |
1362 | DNS. If an address in /etc/hosts has multiple names, they _are_ all given. | |
1363 | I found this out when I moved to a new Linux workstation and tried to run | |
1364 | the Exim test suite. | |
1365 | ||
1366 | To get round this problem I have changed the code so that it now does its | |
1367 | own call to the DNS to look up PTR records when searching for a host name. | |
1368 | If nothing can be found in the DNS, it tries gethostbyaddr(), so that | |
1369 | addresses that are only in /etc/hosts are still found. | |
1370 | ||
1371 | This behaviour is, however, controlled by an option called host_lookup_ | |
1372 | order, which defaults to "bydns:byaddr". If people want to use the other | |
1373 | order, or indeed, just use one or the other means of lookup, they can | |
1374 | specify it in this variable. | |
1375 | ||
1376 | 6. If a PTR record yields an empty name, Exim treats it as non-existent. In | |
1377 | some operating systems, this comes back from gethostbyaddr() as an empty | |
1378 | string, and this is what Exim used to test for. However, it seems that in | |
1379 | other systems, "." is yielded. Exim now tests for this case too. | |
1380 | ||
1381 | 7. The values of check_spool_space and check_log_space are now held internally | |
1382 | as a number of kilobytes instead of an absolute number of bytes. If a | |
1383 | numbers is specified without 'K' or 'M', it is rounded up to the nearest | |
1384 | kilobyte. This means that much larger values can be stored. | |
1385 | ||
1386 | 8. Exim monitor: an attempt to get the action menu when not actually pointing | |
1387 | at a message produces an empty menu entitled "No message selected". This | |
1388 | works on Solaris (OpenWindows). However, XFree86 does not like a menu with | |
1389 | no entries in it ("Shell widget menu has zero width and/or height"). So I | |
1390 | have added a single, blank menu entry in this case. | |
1391 | ||
1392 | 9. Added ${quote_local_part. | |
1393 | ||
1394 | 10. MIME decoding is now applied to the contents of Subject: header lines when | |
1395 | they are logged. | |
1396 | ||
1397 | 11. Now that a reference to $sender_host_address automatically causes a reverse | |
1398 | lookup to occur if necessary (4.13/18), there is no need to arrange for a | |
1399 | host lookup before query-style lookups in lists that might use this | |
1400 | variable. This has therefore been abolished, and the "net-" prefix is no | |
1401 | longer necessary for query-style lookups. | |
1402 | ||
1403 | 12. The Makefile for SCO_SV contained a setting of LDFLAGS. This appears to | |
1404 | have been a typo for LFLAGS, so it has been changed. | |
1405 | ||
1406 | 13. The install script calls Exim with "-C /dev/null" in order to find the | |
1407 | version number. If ALT_CONFIG_PREFIX was set, this caused an error message | |
1408 | to be output. Howeve, since Exim outputs its version number before the | |
1409 | error, it didn't break the script. It just looked ugly. I fixed this by | |
1410 | always allowing "-C /dev/null" if the caller is root. | |
1411 | ||
1412 | 14. Ignore overlarge ACL variable number when reading spool file - insurance | |
1413 | against a later release with more variables having written the file. | |
1414 | ||
1415 | 15. The standard form for an IPv6 address literal was being rejected by EHLO. | |
1416 | Example: [IPv6:2002:c1ed:8229:10:202:2dff:fe07:a42a]. Exim now accepts | |
1417 | this, as well as the form without the "IPv6" on the front. | |
1418 | ||
1419 | 16. Added CHOWN_COMMAND=/usr/sbin/chown and LIBS=-lresolv to the | |
1420 | OS/Makefile-Darwin file. | |
1421 | ||
1422 | 17. Fixed typo in lookups/ldap.c: D_LOOKUP should be D_lookup. This applied | |
1423 | only to LDAP libraries that do not have LDAP_OPT_DEREF. | |
1424 | ||
1425 | 18. After change 4.21/52, "%ld" was used to format the contents of the $inode | |
1426 | variable. However, some OS use ints for inodes. I've added cast to long int | |
1427 | to get rid of the compiler warning. | |
1428 | ||
1429 | 19. I had forgotten to lock out "/../" in configuration file names when | |
1430 | ALT_CONFIG_PREFIX was set. | |
1431 | ||
1432 | 20. Routers used for verification do not need to specify transports. However, | |
1433 | if such a router generated a host list, and callout was configured, Exim | |
1434 | crashed, because it could not find a port number from the (non-existent) | |
1435 | transport. It now assumes port 25 in this circumstance. | |
1436 | ||
1437 | 21. Added the -t option to exigrep. | |
1438 | ||
1439 | 22. If LOOKUP_LSEARCH is defined, all three linear search methods (lsearch, | |
1440 | wildlsearch, nwildlsearch) are compiled. LOOKUP_WILDLSEARCH and LOOKUP_ | |
1441 | NWILDLSEARCH are now obsolete, but retained for compatibility. If either of | |
1442 | them is set, LOOKUP_LSEARCH is forced. | |
1443 | ||
1444 | 23. "exim -bV" now outputs a list of lookups that are included in the binary. | |
1445 | ||
1446 | 24. Added sender and host information to the "rejected by local_scan()" log | |
1447 | line; previously there was no indication of these. | |
1448 | ||
1449 | 25. Added .include_if_exists. | |
1450 | ||
1451 | 26. Change 3.952/11 added an explicit directory sync on top of a file sync for | |
1452 | Linux. It turns out that not all file systems support this. Apparently some | |
1453 | versions of NFS do not. (It's rare to put Exim's spool on NFS, but people | |
1454 | do it.) To cope with this, the error EINVAL, which means that sync-ing is | |
1455 | not supported on the file descriptor, is now ignored when Exim is trying to | |
1456 | sync a directory. This applies only to Linux. | |
1457 | ||
1458 | 27. Added -DBIND_8_COMPAT to the CLFAGS setting for Darwin. | |
1459 | ||
1460 | 28. In Darwin (MacOS X), the PAM headers are in /usr/include/pam and not in | |
1461 | /usr/include/security. There's now a flag in OS/os.h-Darwin to cope with | |
1462 | this. | |
1463 | ||
1464 | 29. Added support for maildirsize files from supplied patch (modified a bit). | |
1465 | ||
1466 | 30. The use of :fail: followed by an empty string could lead Exim to respond to | |
1467 | sender verification failures with (e.g.): | |
1468 | ||
1469 | 550 Verification failed for <xxx> | |
1470 | 550 Sender verify failed | |
1471 | ||
1472 | where the first response line was missing the '-' that indicates it is not | |
1473 | the final line of the response. | |
1474 | ||
1475 | 31. The loop for finding the name of the user that called Exim had a hardwired | |
1476 | limit of 10; it now uses the value of finduser_retries, which is used for | |
1477 | all other user lookups. | |
1478 | ||
1479 | 32. Added $received_count variable, available in data and not_smtp ACLs, and at | |
1480 | delivery time. | |
1481 | ||
1482 | 33. Exim was neglecting to zero errno before one call of strtol() when | |
1483 | expanding a string and expecting an integer value. On some systems this | |
1484 | resulted in spurious "integer overflow" errors. Also, it was casting the | |
1485 | result into an int without checking. | |
1486 | ||
1487 | 34. Testing for a connection timeout using "timeout_connect" in the retry rules | |
1488 | did not work. The code looks as if it has *never* worked, though it appears | |
1489 | to have been documented since at least releast 1.62. I have made it work. | |
1490 | ||
1491 | 35. The "timeout_DNS" error in retry rules, also documented since at least | |
1492 | 1.62, also never worked. As it isn't clear exactly what this means, and | |
1493 | clearly it isn't a major issue, I have abolished the feature by treating it | |
1494 | as "timeout", and writing a warning to the main and panic logs. | |
1495 | ||
1496 | 36. The display of retry rules for -brt wasn't always showing the error code | |
1497 | correctly. | |
1498 | ||
1499 | 37. Added new error conditions to retry rules: timeout_A, timeout_MX, | |
1500 | timeout_connect_A, timeout_connect_MX. | |
1501 | ||
1502 | 38. Rewriting the envelope sender at SMTP time did not allow it to be rewritten | |
1503 | to the empty sender. | |
1504 | ||
1505 | 39. The daemon was not analysing the content of -oX till after it had closed | |
1506 | stderr and disconnected from the controlling terminal. This meant that any | |
1507 | syntax errors were only noted on the panic log, and the return code from | |
1508 | the command was 0. By re-arranging the code a little, I've made the | |
1509 | decoding happen first, so such errors now appear on stderr, and the return | |
1510 | code is 1. However, the actual setting up of the sockets still happens in | |
1511 | the disconnected process, so errors there are still only recorded on the | |
1512 | panic log. | |
1513 | ||
1514 | 40. A daemon listener on a wildcard IPv6 socket that also accepts IPv4 | |
1515 | connections (as happens on some IP stacks) was logged at start up time as | |
1516 | just listening for IPv6. It now logs "IPv6 with IPv4". This differentiates | |
1517 | it from "IPv6 and IPv4", which means that two separate sockets are being | |
1518 | used. | |
1519 | ||
1520 | 41. The debug output for gethostbyname2() or getipnodebyname() failures now | |
1521 | says whether AF_INET or AF_INET6 was passed as an argument. | |
1522 | ||
1523 | 42. Exiwhat output was messed up when time zones were included in log | |
1524 | timestamps. | |
1525 | ||
1526 | 43. Exiwhat now gives more information about the daemon's listening ports, | |
1527 | and whether -tls-on-connect was used. | |
1528 | ||
1529 | 44. The "port" option of the smtp transport is now expanded. | |
1530 | ||
1531 | 45. A "message" modifier in a "warn" statement in a non-message ACL was being | |
1532 | silently ignored. Now an error message is written to the main and panic | |
1533 | logs. | |
1534 | ||
1535 | 46. There's a new ACL modifier called "logwrite" which writes to a log file | |
1536 | as soon as it is encountered. | |
1537 | ||
1538 | 47. Added $local_user_uid and $local_user_gid at routing time. | |
1539 | ||
1540 | 48. Exim crashed when trying to verify a sender address that was being | |
1541 | rewritten to "<>". | |
1542 | ||
1543 | 49. Exim was recognizing only a space character after ".include". It now also | |
1544 | recognizes a tab character. | |
1545 | ||
1546 | 50. Fixed several bugs in the Perl script that creates the exim.8 man page by | |
1547 | extracting the relevant information from the specification. The man page no | |
1548 | longer contains scrambled data for the -d option, and I've added a section | |
1549 | at the front about calling Exim under different names. | |
1550 | ||
1551 | 51. Added "extra_headers" argument to the "mail" command in filter files. | |
1552 | ||
1553 | 52. Redirecting mail to an unqualified address in a Sieve filter caused Exim to | |
1554 | crash. | |
1555 | ||
1556 | 53. Installed eximstats 1.29. | |
1557 | ||
1558 | 54. Added transport_filter_timeout as a generic transport option. | |
1559 | ||
1560 | 55. Exim no longer adds an empty Bcc: header to messages that have no To: or | |
1561 | Cc: header lines. This was required by RFC 822, but it not required by RFC | |
1562 | 2822. | |
1563 | ||
1564 | 56. Exim used to add From:, Date:, and Message-Id: header lines to any | |
1565 | incoming messages that did not have them. Now it does so only if the | |
1566 | message originates locally, that is, if there is no associated remote host | |
1567 | address. When Resent- header lines are present, this applies to the Resent- | |
1568 | lines rather than the non-Resent- lines. | |
1569 | ||
1570 | 57. Drop incoming SMTP connection after too many syntax or protocol errors. The | |
1571 | limit is controlled by smtp_max_synprot_errors, defaulting to 3. | |
1572 | ||
1573 | 58. Messages for configuration errors now include the name of the main | |
1574 | configuration file - useful now that there may be more than one file in a | |
1575 | list (.included file names were always shown). | |
1576 | ||
1577 | 59. Change 4.21/82 (run initgroups() when starting the daemon) causes problems | |
1578 | for those rare installations that do not start the daemon as root or run it | |
1579 | setuid root. I've cut out the call to initgroups() if the daemon is not | |
1580 | root at that time. | |
1581 | ||
1582 | 60. The Exim user and group can now be bound into the binary as text strings | |
1583 | that are looked up at the start of Exim's processing. | |
1584 | ||
1585 | 61. Applied a small patch for the Interbase code, supplied by Ard Biesheuvel. | |
1586 | ||
1587 | 62. Added $mailstore_basename variable. | |
1588 | ||
1589 | 63. Installed patch to sieve.c from Michael Haardt. | |
1590 | ||
1591 | 64. When Exim failed to open the panic log after failing to open the main log, | |
1592 | the original message it was trying to log was written to stderr and debug | |
1593 | output, but if they were not available (the usual case in production), it | |
1594 | was lost. Now it is written to syslog before the two lines that record the | |
1595 | failures to open the logs. | |
1596 | ||
1597 | 65. Users' Exim filters run in subprocesses under the user's uid. It is | |
1598 | possible for a "deliver" command or an alias in a "personal" command to | |
1599 | provoke an address rewrite. If logging of address rewriting is configured, | |
1600 | this fails because the process is not running as root or exim. There may be | |
1601 | a better way of dealing with this, but for the moment (because 4.30 needs | |
1602 | to be released), I have disabled address rewrite logging when running a | |
1603 | filter in a non-root, non-exim process. | |
1604 | ||
1605 | ||
1606 | Exim version 4.24 | |
1607 | ----------------- | |
1608 | ||
1609 | 1. The buildconfig auxiliary program wasn't quoting the value set for | |
1610 | HEADERS_CHARSET. This caused a compilation error complaining that 'ISO' was | |
1611 | not defined. This bug was masked in 4.22 by the effect that was fixed in | |
1612 | change 4.23/1. | |
1613 | ||
1614 | 2. Some messages that were rejected after a message id was allocated were | |
1615 | shown as "incomplete" by exigrep. It no longer does this for messages that | |
1616 | are rejected by local_scan() or the DATA or non-SMTP ACLs. | |
1617 | ||
1618 | 3. If a Message-ID: header used a domain literal in the ID, and Exim did not | |
1619 | have allow_domain_literals set, the ID did not get logged in the <= line. | |
1620 | Domain literals are now always recognized in Message-ID: header lines. | |
1621 | ||
1622 | 4. The first argument for a ${extract expansion item is the key name or field | |
1623 | number. Leading and trailing spaces in this item were not being ignored, | |
1624 | causing some misleading effects. | |
1625 | ||
1626 | 5. When deliver_drop_privilege was set, single queue runner processes started | |
1627 | manually (i.e. by the command "exim -q") or by the daemon (which uses the | |
1628 | same command in the process it spins off) were not dropping privilege. | |
1629 | ||
1630 | 6. When the daemon running as "exim" started a queue runner, it always | |
1631 | re-executed Exim in the spun-off process. This is a waste of effort when | |
1632 | deliver_drop_privilege is set. The new process now just calls the | |
1633 | queue-runner function directly. | |
1634 | ||
1635 | ||
1636 | Exim version 4.23 | |
1637 | ----------------- | |
1638 | ||
1639 | 1. Typo in the src/EDITME file: it referred to HEADERS_DECODE_TO instead of | |
1640 | HEADERS_CHARSET. | |
1641 | ||
1642 | 2. Change 4.21/73 introduced a bug. The pid file path set by -oP was being | |
1643 | ignored. Though the use of -oP was forcing the writing of a pid file, it | |
1644 | was always written to the default place. | |
1645 | ||
1646 | 3. If the message "no IP address found for host xxxx" is generated during | |
1647 | incoming verification, it is now followed by identification of the incoming | |
1648 | connection (so you can more easily find what provoked it). | |
1649 | ||
1650 | 4. Bug fix for Sieve filters: "stop" inside a block was not working properly. | |
1651 | ||
1652 | 5. Added some features to "harden" Exim a bit more against certain attacks: | |
1653 | ||
1654 | (a) There is now a build-time option called FIXED_NEVER_USERS that can | |
1655 | be put in Local/Makefile. This is like the never_users runtime option, | |
1656 | but it cannot be overridden. The default setting is "root". | |
1657 | ||
1658 | (b) If ALT_CONFIG_PREFIX is defined in Local/Makefile, it specifies a | |
1659 | prefix string with which any file named in a -C command line option | |
1660 | must start. | |
1661 | ||
1662 | (c) If ALT_CONFIG_ROOT_ONLY is defined in Local/Makefile, root privilege | |
1663 | is retained for -C and -D only if the caller of Exim is root. Without | |
1664 | it, the exim user may also use -C and -D and retain privilege. | |
1665 | ||
1666 | (d) If DISABLE_D_OPTION is defined in Local/Makefile, the use of the -D | |
1667 | command line option is disabled. | |
1668 | ||
1669 | 6. Macro names set by the -D option must start with an upper case letter, just | |
1670 | like macro names defined in the configuration file. | |
1671 | ||
1672 | 7. Added "dereference=" facility to LDAP. | |
1673 | ||
1674 | 8. Two instances of the typo "uknown" in the source files are fixed. | |
1675 | ||
1676 | 9. If a PERL_COMMAND setting in Local/Makefile was not at the start of a line, | |
1677 | the Configure-Makefile script screwed up while processing it. | |
1678 | ||
1679 | 10. Incorporated PCRE 4.4. | |
1680 | ||
1681 | 11. The SMTP synchronization check was not operating right at the start of an | |
1682 | SMTP session. For example, it could not catch a HELO sent before the client | |
1683 | waited for the greeting. There is now a check for outstanding input at the | |
1684 | point when the greeting is written. Because of the duplex, asynchronous | |
1685 | nature of TCP/IP, it cannot be perfect - the incorrect input may be on its | |
1686 | way, but not yet received, when the check is performed. | |
1687 | ||
1688 | 12. Added tcp_nodelay to make it possible to turn of the setting of TCP_NODELAY | |
1689 | on TCP/IP sockets, because this apparently causes some broken clients to | |
1690 | timeout. | |
1691 | ||
1692 | 13. Installed revised OS/Makefile-CYGWIN and OS/os.c-cygwin (the .h file was | |
1693 | unchanged) from the Cygwin maintainer. | |
1694 | ||
1695 | 14. The code for -bV that shows what is in the binary showed "mbx" when maildir | |
1696 | was supported instead of testing for mbx. Effectively a typo. | |
1697 | ||
1698 | 15. The spa authenticator server code was not checking that the input it | |
1699 | received was valid base64. | |
1700 | ||
1701 | 16. The debug output line for the "set" modifier in ACLs was not showing the | |
1702 | name of the variable that was being set. | |
1703 | ||
1704 | 17. Code tidy: the variable type "vtype_string" was never used. Removed it. | |
1705 | ||
1706 | 18. Previously, a reference to $sender_host_name did not cause a DNS reverse | |
1707 | lookup on its own. Something else was needed to trigger the lookup. For | |
1708 | example, a match in host_lookup or the need for a host name in a host list. | |
1709 | Now, if $sender_host_name is referenced and the host name has not yet been | |
1710 | looked up, a lookup is performed. If the lookup fails, the variable remains | |
1711 | empty, and $host_lookup_failed is set to "1". | |
1712 | ||
1713 | 19. Added "eqi" as a case-independent comparison operator. | |
1714 | ||
1715 | 20. The saslauthd authentication condition could segfault if neither service | |
1716 | nor realm was specified. | |
1717 | ||
1718 | 21. If an overflowing value such as "2048M" was set for message_size_limit, the | |
1719 | error message that was logged was misleading, and incoming SMTP | |
1720 | connections were dropped. The message is now more accurate, and temporary | |
1721 | errors are given to SMTP connections. | |
1722 | ||
1723 | 22. In some error situations (such as 21 above) Exim rejects all SMTP commands | |
1724 | (except RSET) with a 421 error, until QUIT is received. However, it was | |
1725 | failing to send a response to QUIT. | |
1726 | ||
1727 | 23. The HELO ACL was being run before the code for helo_try_verify_hosts, | |
1728 | which made it impossible to use "verify = helo" in the HELO ACL. The HELO | |
1729 | ACL is now run after the helo_try_verify_hosts code. | |
1730 | ||
1731 | 24. "{MD5}" and "{SHA1}" are now recognized as equivalent to "{md5"} and | |
1732 | "{sha1}" in the "crypteq" expansion condition (in fact the comparison is | |
1733 | case-independent, so other case variants are also recognized). Apparently | |
1734 | some systems use these upper case variants. | |
1735 | ||
1736 | 25. If more than two messages were waiting for the same host, and a transport | |
1737 | filter was specified for the transport, Exim sent two messages over the | |
1738 | same TCP/IP connection, and then failed with "socket operation on non- | |
1739 | socket" when it tried to send the third. | |
1740 | ||
1741 | 26. Added Exim::debug_write and Exim::log_write for embedded Perl use. | |
1742 | ||
1743 | 27. The extern definition of crypt16() in expand.c was not being excluded when | |
1744 | the OS had its own crypt16() function. | |
1745 | ||
1746 | 28. Added bounce_return_body as a new option, and bounce_return_size_limit | |
1747 | as a preferred synonym for return_size_limit, both as an option and as an | |
1748 | expansion variable. | |
1749 | ||
1750 | 29. Added LIBS=-liconv to OS/Makefile-OSF1. | |
1751 | ||
1752 | 30. Changed the default configuration ACL to relax the local part checking rule | |
1753 | for addresses that are not in any local domains. For these addresses, | |
1754 | slashes and pipe symbols are allowed within local parts, but the sequence | |
1755 | /../ is explicitly forbidden. | |
1756 | ||
1757 | 31. SPA server authentication was not clearing the challenge buffer before | |
1758 | using it. | |
1759 | ||
1760 | 32. log_message in a "warn" ACL statement was writing to the reject log as | |
1761 | well as to the main log, which contradicts the documentation and doesn't | |
1762 | seem right (because no rejection is happening). So I have stopped it. | |
1763 | ||
1764 | 33. Added Ard Biesheuvel's lookup code for accessing an Interbase database. | |
1765 | However, I am unable to do any testing of this. | |
1766 | ||
1767 | 34. Fixed an infelicity in the appendfile transport. When checking directories | |
1768 | for a mailbox, to see if any needed to be created, it was accidentally | |
1769 | using path names with one or more superfluous leading slashes; tracing | |
1770 | would show up entries such as stat("///home/ph10", 0xFFBEEA48). | |
1771 | ||
1772 | 35. If log_message is set on a "discard" verb in a MAIL or RCPT ACL, its | |
1773 | contents are added to the log line that is written for every discarded | |
1774 | recipient. (Previously a log_message setting was ignored.) | |
1775 | ||
1776 | 36. The ${quote: operator now quotes the string if it is empty. | |
1777 | ||
1778 | 37. The install script runs exim in order to find its version number. If for | |
1779 | some reason other than non-existence or emptiness, which it checks, it | |
1780 | could not run './exim', it was installing it with an empty version number, | |
1781 | i.e. as "exim-". This error state is now caught, and the installation is | |
1782 | aborted. | |
1783 | ||
1784 | 38. An argument was missing from the function that creates an error message | |
1785 | when Exim fails to connect to the socket for saslauthd authentication. | |
1786 | This could cause Exim to crash, or give a corrupted message. | |
1787 | ||
1788 | 39. Added isip, isip4, and isip6 to ${if conditions. | |
1789 | ||
1790 | 40. The ACL variables $acl_xx are now saved with the message, and can be | |
1791 | accessed later in routers, transports, and filters. | |
1792 | ||
1793 | 41. The new lookup type nwildlsearch is like wildlsearch, except that the key | |
1794 | strings in the file are not string-expanded. | |
1795 | ||
1796 | 42. If a MAIL command specified a SIZE value that was too large to fit into an | |
1797 | int variable, the check against message_size_limit failed. Such values are | |
1798 | now forced to INT_MAX, which is around 2Gb for a 32-bit variable. Maybe one | |
1799 | day this will have to be increased, but I don't think I want to be around | |
1800 | when emails are that large. | |
1801 | ||
1802 | ||
1803 | ||
1804 | Exim version 4.22 | |
1805 | ----------------- | |
1806 | ||
1807 | 1. Removed HAVE_ICONV=yes from OS/Makefile-FreeBSD, since it seems that | |
1808 | iconv() is not standard in FreeBSD. | |
1809 | ||
1810 | 2. Change 4.21/17 was buggy and could cause stack overwriting on a system with | |
1811 | IPv6 enabled. The observed symptom was a segmentation fault on return from | |
1812 | the function os_common_find_running_interfaces() in src/os.c. | |
1813 | ||
1814 | 3. In the check_special_case() function in daemon.c I had used "errno" as an | |
1815 | argument name, which causes warnings on some systems. This was basically a | |
1816 | typo, since it was named "eno" in the comments! | |
1817 | ||
1818 | 4. The code that waits for the clock to tick (at a resolution of some fraction | |
1819 | of a second) so as to ensure message-id uniqueness was always waiting for | |
1820 | at least one whole tick, when it could have waited for less. [This is | |
1821 | almost certainly not relevant at current processor speeds, where it is | |
1822 | unlikely to ever wait at all. But we try to future-proof.] | |
1823 | ||
1824 | 5. The function that sleeps for a time interval that includes fractions of a | |
1825 | second contained a race. It did not block SIGALRM between setting the | |
1826 | timer, and suspending (a couple of lines later). If the interval was short | |
1827 | and the sigsuspend() was delayed until after it had expired, the suspension | |
1828 | never ended. On busy systems this could lead to processes getting stuck for | |
1829 | ever. | |
1830 | ||
1831 | 6. Some uncommon configurations may cause a lookup to happen in a queue runner | |
1832 | process, before it forks any delivery processes. The open lookup caching | |
1833 | mechanism meant that the open file or database connection was passed into | |
1834 | the delivery process. The problem was that delivery processes always tidy | |
1835 | up cached lookup data. This could cause a problem for the next delivery | |
1836 | process started by the queue runner, because the external queue runner | |
1837 | process does not know about the closure. So the next delivery process | |
1838 | still has data in the lookup cache. In the case of a file lookup, there was | |
1839 | no problem because closing a file descriptor in a subprocess doesn't affect | |
1840 | the parent. However, if the lookup was caching a connection to a database, | |
1841 | the connection was closed, and the second delivery process was likely to | |
1842 | see errors such as "PGSQL: query failed: server closed the connection | |
1843 | unexpectedly". The problem has been fixed by closing all cached lookups | |
1844 | in a queue runner before running a delivery process. | |
1845 | ||
1846 | 7. Compiler warning on Linux for the second argument of iconv(), which doesn't | |
1847 | seem to have the "const" qualifier which it has on other OS. I've | |
1848 | parameterised it. | |
1849 | ||
1850 | 8. Change 4.21/2 was too strict. It is only if there are two authenticators | |
1851 | *of the same type* (client or server) with the same public name that an | |
1852 | error should be diagnosed. | |
1853 | ||
1854 | 9. When Exim looked up a host name for an IP address, but failed to find the | |
1855 | original IP address when looking up the host name (a safety check), it | |
1856 | output the message "<ip address> does not match any IP for NULL", which was | |
1857 | confusing, to say the least. The bug was that the host name should have | |
1858 | appeared instead of "NULL". | |
1859 | ||
1860 | 10. Since release 3.03, if Exim is called by a uid other than root or the Exim | |
1861 | user that is built into the binary, and the -C or -D options is used, root | |
1862 | privilege is dropped before the configuration file is read. In addition, | |
1863 | logging is switched to stderr instead of the normal log files. If the | |
1864 | configuration then re-defines the Exim user, the unprivileged environment | |
1865 | is probably not what is expected, so Exim logs a panic warning message (but | |
1866 | proceeds). | |
1867 | ||
1868 | However, if deliver_drop_privilege is set, the unprivileged state may well | |
1869 | be exactly what is intended, so the warning has been cut out in that case, | |
1870 | and Exim is allowed to try to write to its normal log files. | |
1871 | ||
1872 | ||
1873 | Exim version 4.21 | |
1874 | ----------------- | |
1875 | ||
1876 | 1. smtp_return_error_details was not giving details for temporary sender | |
1877 | or receiver verification errors. | |
1878 | ||
1879 | 2. Diagnose a configuration error if two authenticators have the same public | |
1880 | name. | |
1881 | ||
1882 | 3. Exim used not to create the message log file for a message until the first | |
1883 | delivery attempt. This could be confusing when incoming messages were held | |
1884 | for policy or load reasons. The message log file is now created at the time | |
1885 | the message is received, and an initial "Received" line is written to it. | |
1886 | ||
1887 | 4. The automatically generated man page for command line options had a minor | |
1888 | bug that caused no ill effects; however, a more serious problem was that | |
1889 | the procedure for building the man page automatically didn't always | |
1890 | operate. Consequently, release 4.20 contains an out-of-date version. This | |
1891 | shouldn't happen again. | |
1892 | ||
1893 | 5. When building Exim with embedded Perl support, the script that builds the | |
1894 | Makefile was calling 'perl' to find its compile-time parameters, ignoring | |
1895 | any setting of PERL_COMMAND in Local/Makefile. This is now fixed. | |
1896 | ||
1897 | 6. The freeze_tell option was not being used for messages that were frozen on | |
1898 | arrival, either by an ACL or by local_scan(). | |
1899 | ||
1900 | 7. Added the smtp_incomplete_transaction log selector. | |
1901 | ||
1902 | 8. After STARTTLS, Exim was not forgetting that it had advertised AUTH, so it | |
1903 | was accepting AUTH without a new EHLO. | |
1904 | ||
1905 | 9. Added tls_remember_esmtp to cope with YAEB. This allows AUTH and other | |
1906 | ESMTP extensions after STARTTLS without a new EHLO, in contravention of the | |
1907 | RFC. | |
1908 | ||
1909 | 10. Logging of TCP/IP connections (when configured) now happens in the main | |
1910 | daemon process instead of the child process, so that the TCP/IP connection | |
1911 | count is more accurate (but it can never be perfect). | |
1912 | ||
1913 | 11. The use of "drop" in a nested ACL was not being handled correctly in the | |
1914 | outer ACL. Now, if condition failure induced by the nested "drop" causes | |
1915 | the outer ACL verb to deny access ("accept" or "discard" after "endpass", | |
1916 | or "require"), the connection is dropped. | |
1917 | ||
1918 | 12. Similarly, "discard" in a nested ACL wasn't being handled. A nested ACL | |
1919 | that yield "discard" can now be used with an "accept" or a "discard" verb, | |
1920 | but an error is generated for any others (because I can't see a useful way | |
1921 | to define what should happen). | |
1922 | ||
1923 | 13. When an ACL is read dynamically from a file (or anywhere else), the lines | |
1924 | are now processed in the same way as lines in the Exim configuration file. | |
1925 | In particular, continuation lines are supported. | |
1926 | ||
1927 | 14. Added the "dnslists = a.b.c!=n.n.n.n" feature. | |
1928 | ||
1929 | 15. Added -ti meaning -t -i. | |
1930 | ||
1931 | 16. Check for letters, digits, hyphens, and dots in the names of dnslist | |
1932 | domains, and warn by logging if others are found. | |
1933 | ||
1934 | 17. At least on BSD, alignment is not guarenteed for the array of ifreq's | |
1935 | returned from GIFCONF when Exim is trying to find the list of interfaces on | |
1936 | a host. The code in os.c has been modified to copy each ifreq to an aligned | |
1937 | structure in all cases. | |
1938 | ||
1939 | Also, in some cases, the returned ifreq's were being copied to a 'struct | |
1940 | ifreq' on the stack, which was subsequently passed to host_ntoa(). That | |
1941 | means the last couple of bytes of an IPv6 address could be chopped if the | |
1942 | ifreq contained only a normal sockaddr (14 bytes storage). | |
1943 | ||
1944 | 18. Named domain lists were not supported in the hosts_treat_as_local option. | |
1945 | An entry such as +xxxx was not recognized, and was treated as a literal | |
1946 | domain name. | |
1947 | ||
1948 | 19. Ensure that header lines added by a DATA ACL are included in the reject log | |
1949 | if the ACL subsequently rejects the message. | |
1950 | ||
1951 | 20. Upgrade the cramtest.pl utility script to use Digest::MD5 instead of just | |
1952 | MD5 (which is deprecated). | |
1953 | ||
1954 | 21. When testing a filter file using -bf, Exim was writing a message when it | |
1955 | took the sender from a "From " line in the message, but it was not doing so | |
1956 | when it took $return_path from a Return-Path: header line. It now does. | |
1957 | ||
1958 | 22. If the contents of a "message" modifier for a "warn" ACL verb do not begin | |
1959 | with a valid header line field name (a series of printing characters | |
1960 | terminated by a colon, Exim now inserts X-ACL-Warn: at the beginning. | |
1961 | ||
1962 | 23. Changed "disc" in the source to "disk" to conform to the documentation and | |
1963 | the book and for uniformity. | |
1964 | ||
1965 | 24. Ignore Sendmail's -Ooption=value command line item. | |
1966 | ||
1967 | 25. When execve() failed while trying to run a command in a pipe transport, | |
1968 | Exim was returning EX_UNAVAILBLE (69) from the subprocess. However, this | |
1969 | could be confused with a return value of 69 from the command itself. This | |
1970 | has been changed to 127, the value the shell returns if it is asked to run | |
1971 | a non-existent command. The wording for the related log line suggests a | |
1972 | non-existent command as the problem. | |
1973 | ||
1974 | 26. If received_header_text expands to an empty string, do not add a Received: | |
1975 | header line to the message. (Well, it adds a token one on the spool, but | |
1976 | marks it "old" so that it doesn't get used or transmitted.) | |
1977 | ||
1978 | 27. Installed eximstats 1.28 (addition of -nt option). | |
1979 | ||
1980 | 28. There was no check for failure on the call to getsockname() in the daemon | |
1981 | code. This can fail if there is a shortage of resources on the system, with | |
1982 | ENOMEM, for example. A temporary error is now given on failure. | |
1983 | ||
1984 | 29. Contrary to the C standard, it seems that in some environments, the | |
1985 | equivalent of setlocale(LC_ALL, "C") is not obeyed at the start of a C | |
1986 | program. Exim now does this explicitly; it affects the formatting of | |
1987 | timestamps using strftime(). | |
1988 | ||
1989 | 30. If exiqsumm was given junk data, it threw up some uninitialized variable | |
1990 | complaints. I've now initialized all the variables, to avoid this. | |
1991 | ||
1992 | 32. Header lines added by a system filter were not being "seen" during | |
1993 | transport-time rewrites. | |
1994 | ||
1995 | 33. The info_callback() function passed to OpenSSL is set up with type void | |
1996 | (*)(SSL *, int, int), as described somewhere. However, when calling the | |
1997 | function (actually a macro) that sets it up, the type void(*)() is | |
1998 | expected. I've put in a cast to prevent warnings from picky compilers. | |
1999 | ||
2000 | 34. If a DNS black list lookup found a CNAME record, but there were no A | |
2001 | records associated with the domain it pointed at, Exim crashed. | |
2002 | ||
2003 | 35. If a DNS black list lookup returned more than one A record, Exim ignored | |
2004 | all but the first. It now scans all returned addresses if a particular IP | |
2005 | value is being sought. In this situation, the contents of the | |
2006 | $dnslist_value variable are a list of all the addresses, separated by a | |
2007 | comma and a space. | |
2008 | ||
2009 | 36. Tightened up the rules for host name lookups using reverse DNS. Exim used | |
2010 | to accept a host name and all its aliases if the forward lookup for any of | |
2011 | them yielded the IP address of the incoming connection. Now it accepts only | |
2012 | those names whose forward lookup yields the correct IP address. Any other | |
2013 | names are discarded. This closes a loophole whereby a rogue DNS | |
2014 | administrator could create reverse DNS records to break through a | |
2015 | wildcarded host restriction in an ACL. | |
2016 | ||
2017 | 37. If a user filter or a system filter that ran in a subprocess used any of | |
2018 | the numerical variables ($1, $2 etc), or $thisaddress, in a pipe command, | |
2019 | the wrong values were passed to the pipe command ($thisaddress had the | |
2020 | value of $0, $0 had the value of $1, etc). This bug was introduced by | |
2021 | change 4.11/101, and not discovered because I wrote an inadequate test. :-( | |
2022 | ||
2023 | 38. Improved the line breaking for long SMTP error messages from ACLs. | |
2024 | Previously, if there was no break point between 40 and 75 characters, Exim | |
2025 | left the rest of the message alone. Two changes have been made: (a) I've | |
2026 | reduced the minimum length to 35 characters; (b) if it can't find a break | |
2027 | point between 35 and 75 characters, it looks ahead and uses the first one | |
2028 | that it finds. This may give the occasional overlong line, but at least the | |
2029 | remaining text gets split now. | |
2030 | ||
2031 | 39. Change 82 of 4.11 was unimaginative. It assumed the limit on the number of | |
2032 | file descriptors might be low, and that setting 1000 would always raise it. | |
2033 | It turns out that in some environments, the limit is already over 1000 and | |
2034 | that lowering it causes trouble. So now Exim takes care not to decrease it. | |
2035 | ||
2036 | 40. When delivering a message, the value of $return_path is set to $sender_ | |
2037 | address at the start of routing (routers may change the value). By an | |
2038 | oversight, this default was not being set up when an address was tested by | |
2039 | -bt or -bv, which affected the outcome if any router or filter referred to | |
2040 | $return_path. | |
2041 | ||
2042 | 41. The idea of the "warn" ACL verb is that it adds a header or writes to the | |
2043 | log only when "message" or "log_message" are set. However, if one of the | |
2044 | conditions was an address verification, or a call to a nested ACL, the | |
2045 | messages generated by the underlying test were being passed through. This | |
2046 | no longer happens. The underlying message is available in $acl_verify_ | |
2047 | message for both "message" and "log_message" expansions, so it can be | |
2048 | passed through if needed. | |
2049 | ||
2050 | 42. Added RFC 2047 interpretation of header lines for $h_ expansions, with a | |
2051 | new expansion $bh_ to give the encoded byte string without charset | |
2052 | translation. Translation happens only if iconv() is available; HAVE_ICONV | |
2053 | indicates this at build time. HEADERS_CHARSET gives the charset to | |
2054 | translate to; headers_charset can change it in the configuration, and | |
2055 | "headers charset" can change it in an individual filter file. | |
2056 | ||
2057 | 43. Now that we have a default RFC 2047 charset (see above), the code in Exim | |
2058 | that creates RFC 2047 encoded "words" labels them as that charset instead | |
2059 | of always using iso-8859-1. The cases are (i) the explicit ${rfc2047: | |
2060 | expansion operator; (ii) when Exim creates a From: line for a local | |
2061 | message; (iii) when a header line is rewritten to include a "phrase" part. | |
2062 | ||
2063 | 44. Nasty bug in exiqsumm: the regex to skip already-delivered addresses was | |
2064 | buggy, causing it to skip the first lines of messages whose message ID | |
2065 | ended in 'D'. This would not have bitten before Exim release 4.14, because | |
2066 | message IDs were unlikely to end in 'D' before then. The effect was to have | |
2067 | incorrect size information for certain domains. | |
2068 | ||
2069 | 45. #include "config.h" was missing at the start of the crypt16.c module. This | |
2070 | caused trouble on Tru64 (aka OSF1) systems, because HAVE_CRYPT16 was not | |
2071 | noticed. | |
2072 | ||
2073 | 46. If there was a timeout during a "random" callout check, Exim treated it as | |
2074 | a failure of the random address, and carried on sending RSET and the real | |
2075 | address. If the delay was just some slowness somewhere, the response to the | |
2076 | original RCPT would be taken as a response to RSET and so on, causing | |
2077 | mayhem of various kinds. | |
2078 | ||
2079 | 47. Change 50 for 4.20 was a heap of junk. I don't know what I was thinking | |
2080 | when I implemented it. It didn't allow for the fact that some option values | |
2081 | may legitimatetly be negative (e.g. size_addition), and it didn't even do | |
2082 | the right test for positive values. | |
2083 | ||
2084 | 48. Domain names in DNS records are case-independent. Exim always looks them up | |
2085 | in lower case. Some resolvers return domain names in exactly the case they | |
2086 | appear in the zone file, that is, they may contain uppercase letters. Not | |
2087 | all resolvers do this - some return always lower case. Exim was treating a | |
2088 | change of case by a resolver as a change of domain, similar to a widening | |
2089 | of a domain abbreviation. This triggered its re-routing code and so it was | |
2090 | trying to route what was effectively the same domain again. This normally | |
2091 | caused routing to fail (because the router wouldn't handle the domain | |
2092 | twice). Now Exim checks for this case specially, and just changes the | |
2093 | casing of the domain that it ultimately uses when it transmits the message | |
2094 | envelope. | |
2095 | ||
2096 | 49. Added Sieve (RFC 3028) support, courtesy of Michael Haardt's contributed | |
2097 | module. | |
2098 | ||
2099 | 50. If a filter generated a file delivery with a non-absolute name (possible if | |
2100 | no home directory exists for the router), the forbid_file option was not | |
2101 | forbidding it. | |
2102 | ||
2103 | 51. Added '&' feature to dnslists, to provide bit mask matching in addition to | |
2104 | the existing equality matching. | |
2105 | ||
2106 | 52. Exim was using ints instead of ino_t variables in some places where it was | |
2107 | dealing with inode numbers. | |
2108 | ||
2109 | 53. If TMPDIR is defined in Local/Makefile (default in src/EDITME is | |
2110 | TMPDIR="/tmp"), Exim checks for the presence of an environment variable | |
2111 | called TMPDIR, and if it finds it is different, it changes its value. | |
2112 | ||
2113 | 54. The smtp_printf() function is now made available to local_scan() so | |
2114 | additional output lines can be written before returning. There is also an | |
2115 | smtp_fflush() function to enable the detection of a dropped connection. | |
2116 | The variables smtp_input and smtp_batched_input are exported to | |
2117 | local_scan(). | |
2118 | ||
2119 | 55. Changed the default runtime configuration: the message "Unknown user" | |
2120 | has been removed from the ACL, and instead placed on the localuser router, | |
2121 | using the cannot_route_message feature. This means that any verification | |
2122 | failures that generate their own messages won't get overridden. Similarly, | |
2123 | the "Unrouteable address" message that was in the ACL for unverifiable | |
2124 | relay addresses has also been removed. | |
2125 | ||
2126 | 56. Added hosts_avoid_esmtp to the smtp transport. | |
2127 | ||
2128 | 57. The exicyclog script was not checking for the esoteric option | |
2129 | CONFIGURE_FILE_USE_EUID in the Local/Makefile. It now does this, but it | |
2130 | will work only if exicyclog is run under the appropriate euid. | |
2131 | ||
2132 | 58. Following a discussion on the list, the rules by which Exim recognises line | |
2133 | endings on incoming messages have been changed. The -dropcr and drop_cr | |
2134 | options are now no-ops, retained only for backwards compatibility. The | |
2135 | following line terminators are recognized: LF CRLF CR. However, special | |
2136 | processing applies to CR: | |
2137 | ||
2138 | (i) The sequence CR . CR does *not* terminate an incoming SMTP message, | |
2139 | nor a local message in the state where . is a terminator. | |
2140 | ||
2141 | (ii) If a bare CR is encountered in a header line, an extra space is added | |
2142 | after the line terminator so as not to end the header. The reasoning | |
2143 | behind this is that bare CRs in header lines are most likely either | |
2144 | to be mistakes, or people trying to play silly games. | |
2145 | ||
2146 | 59. The size of a message, as listed by "-bp" or in the Exim monitor window, | |
2147 | was being incorrectly given as 18 bytes larger than it should have been. | |
2148 | This is a VOB (very old bug). | |
2149 | ||
2150 | 60. This may never have affected anything current, but just in case it has: | |
2151 | When the local host is found other than at the start of a list of hosts, | |
2152 | the local host, those with the same MX, and any that follow, are discarded. | |
2153 | When the list in question was part of a longer list of hosts, the following | |
2154 | hosts (not currently being processed) were also being discarded. This no | |
2155 | longer happens. I'm not sure if this situation could ever has previously | |
2156 | arisen. | |
2157 | ||
2158 | 61. Added the "/MX" feature to lists of hosts in the manualroute and query | |
2159 | program routers. | |
2160 | ||
2161 | 62. Whenever Exim generates a new message, it now adds an Auto-Submitted: | |
2162 | header. This is something that is recommended in a new Internet Draft, and | |
2163 | is something that is documented as being done by Sendmail. There are two | |
2164 | possible values. For messages generated by the autoreply transport, Exim | |
2165 | adds: | |
2166 | ||
2167 | Auto-Submitted: auto-replied | |
2168 | ||
2169 | whereas for all other generated messages (e.g. bounces) it adds | |
2170 | ||
2171 | Auto-Submitted: auto-generated | |
2172 | ||
2173 | 63. The "personal" condition in filters now includes a test for the | |
2174 | Auto-Submitted: header. If it contains the string "auto-" the message it | |
2175 | not considered personal. | |
2176 | ||
2177 | 64. Added rcpt_include_affixes as a generic transport option. | |
2178 | ||
2179 | 65. Added queue_only_override (default true). | |
2180 | ||
2181 | 66. Added the syslog_duplication option. | |
2182 | ||
2183 | 67. If what should have been the first header line of a message consisted of | |
2184 | a space followed by a colon, Exim was mis-interpreting it as a header line. | |
2185 | It isn't of course - it is syntactically invalid and should therefore be | |
2186 | treated as the start of the message body. The misbehaviour could have | |
2187 | caused a number of strange effects, including loss of data in subsequent | |
2188 | header lines, and spool format errors. | |
2189 | ||
2190 | 68. Formerly, the AUTH parameter on a MAIL command was trusted only if the | |
2191 | client host had authenticated. This control can now be exercised by an ACL | |
2192 | for more flexibility. | |
2193 | ||
2194 | 69. By default, callouts do not happen when testing with -bh. There is now a | |
2195 | variant, -bhc, which does actually run the callout code, including | |
2196 | consulting and updating the callout cache. | |
2197 | ||
2198 | 70. Added support for saslauthd authentication, courtesy of Alexander | |
2199 | Sabourenkov. | |
2200 | ||
2201 | 71. If statvfs() failed on the spool or log directories while checking their | |
2202 | size for availability, Exim confusingly gave the error "space shortage". | |
2203 | Furthermore, in debugging mode it crashed with a floating point exception. | |
2204 | These checks are done if check_{spool,log}_{space,inodes} are set, and when | |
2205 | an SMTP message arrives with SIZE= on the MAIL command. As this is a really | |
2206 | serious problem, Exim now writes to the main and panic logs when this | |
2207 | happens, with details of the failure. It then refuses to accept the | |
2208 | incoming message, giving the message "spool directory problem" or "log | |
2209 | directory problem" with a 421 code for SMTP messages. | |
2210 | ||
2211 | 72. When Exim is about to re-exec itself, it ensures that the file descriptors | |
2212 | 0, 1, and 2 exist, because some OS complain for execs without them (see | |
2213 | ChangeLog 4.05/30). If necessary, Exim opens /dev/null to use for these | |
2214 | descriptors. However, the code omitted to check that the open succeeded, | |
2215 | causing mysterious errors if for some reason the permissions on /dev/null | |
2216 | got screwed. Now Exim writes a message to the main and panic logs, and | |
2217 | bombs out if it can't open /dev/null. | |
2218 | ||
2219 | 73. Re-vamped the way daemon_smtp_port, local_interfaces, and -oX work and | |
2220 | interact so that it is all more flexible. It is supposed to remain | |
2221 | backwards compatible. Also added extra_local_interfaces. | |
2222 | ||
2223 | 74. Invalid data sent to a SPA (NTLM) server authenticator could cause the code | |
2224 | to bomb out with an assertion failure - to the client this appears as a | |
2225 | connection drop. This problem occurs in the part of the code that was taken | |
2226 | from the Samba project. Fortunately, the assertion is in a very simple | |
2227 | function, so I have fixed this by reproducing the function inline in the | |
2228 | one place where it is called, and arranging for authentication to fail | |
2229 | instead of killing the process with assert(). | |
2230 | ||
2231 | 75. The SPA client code was not working when the server requested OEM rather | |
2232 | than Unicode encoding. | |
2233 | ||
2234 | 76. Added code to make require_files with a specific uid setting more usable in | |
2235 | the case where statting the file as root fails - usually a non-root-mounted | |
2236 | NFS file system. When this happens and the failure is EACCES, Exim now | |
2237 | forks a subprocess and does the per-uid checking as the relevant uid. | |
2238 | ||
2239 | 77. Added process_log_path. | |
2240 | ||
2241 | 78. If log_file_path was not explicitly set, a setting of check_log_space or | |
2242 | check_log_inodes was ignored. | |
2243 | ||
2244 | 79. If a space check for the spool or log partitions fails, the incident is now | |
2245 | logged. Of course, in the latter case the data may get lost... | |
2246 | ||
2247 | 80. Added the %p formatting code to string_format() so that it can be used to | |
2248 | print addresses in debug_print(). Adjusted all the address printing in the | |
2249 | debugging in store.c to use %p rather than %d. | |
2250 | ||
2251 | 81. There was a concern that a line of code in smtp_in.c could overflow a | |
2252 | buffer if a HELO/EHLO command was given followed by 500 or so spaces. As | |
2253 | initially expressed, the concern was not well-founded, because trailing | |
2254 | spaces are removed early. However, if the trailing spaces were followed by | |
2255 | a NULL, they did not get removed, so the overflow was possible. Two fixes | |
2256 | were applied: | |
2257 | ||
2258 | (a) I re-wrote the offending code in a cleaner fashion. | |
2259 | (b) If an incoming SMTP command contains a NULL character, it is rejected | |
2260 | as invalid. | |
2261 | ||
2262 | 82. When Exim changes uid/gid to the Exim user at daemon start time, it now | |
2263 | runs initgroups(), so that if the Exim user is in any additional groups, | |
2264 | they will be used during message reception. | |
2265 | ||
2266 | ||
2267 | Exim version 4.20 | |
2268 | ----------------- | |
2269 | ||
2270 | The change log for 4.20 and earlier releases has been archived. | |
2271 | ||
2272 | **** |