Rework SPA fix to avoid overflows. Bug 2571
[users/heiko/exim.git] / doc / doc-txt / ChangeLog.0
1 Change log file for Exim from version 3.951 to 4.20
2 ---------------------------------------------------
3
4
5 Exim version 4.20
6 -----------------
7
8  1. If data for an authentication interaction was just the string "=",
9     indicating an empty string, Exim was not setting up the numerical variable
10     correctly. In some situations, this could cause a crash - in others, it
11     might have passed unnoticed.
12
13  2. Changed signal(SIGTERM, command_sigterm_handler) in smtp_in.c to use
14     os_non_restarting_signal() for tidiness; in practice this doesn't actually
15     matter because the handler terminates the process.
16
17  3. Refactoring:
18
19     (a) In some (but not all) places where Exim applies timers using alarm(),
20         it was resetting the SIGALRM handler afterwards, but sometimes to
21         SIG_IGN and sometimes to SIG_DFL. In other words, it was a mess. In
22         fact, this reset is not necessary, because after alarm(0) there is no
23         possibility of receiving a SIGLARM signal. So I've just removed them
24         all.
25
26     (b) The daemon.c module had its own SIGALRM handler, which was unnecessary.
27         I changed it to use the handler that is used (almost) everywhere else.
28
29     (c) Almost all uses of SIGALRM use the same handler, but it was being set
30         by signal() all over the place. Now it is set at the start, and it
31         resets itself every time it is called, so it remains enabled
32         throughout. The few places that use a different handler reset to the
33         "standard" one afterwards.
34
35     (d) The setting of the SIGTERM handler while reading SMTP commands was done
36         somewhat untidily. I have re-arranged the code.
37
38  4. If the building process was interrupted during the MakeLinks script, a
39     subsequent run of 'make' gave misleading errors. I've made it a bit more
40     robust against this case. If there appears to be a half-made set of links,
41     an error message suggests that the user should remove the build directory
42     and start again.
43
44  5. For compatibility with other MTAs, -f "" is now accepted as synonymous with
45     -f "<>".
46
47  6. Upgraded to PCRE 4.1.
48
49  7. If a domain list contained @mx_any, or @mx_secondary, and the DNS contained
50     secondary MX records for a domain, but all the other MX (higher priority)
51     records pointed to non-existent hosts, Exim was behaving as if the domain
52     did not match the list item. This has been fixed.
53
54  8. Upgraded eximstats to 1.27.
55
56  9. It was reported that change 4.14/46(b) caused problems on some systems with
57     older libraries. There is now an option that can be set in Local/Makefile
58     (or in a operating system Makefile):
59
60       IPV6_USE_INET_PTON=yes
61
62     If this is done, Exim reverts to using inet_pton() to convert a textual
63     IPv6 address for actual use, instead of getaddrinfo(), as it did in
64     versions before 4.14. Of course, this means that the additional
65     functionality of getaddrinfo() - recognizing scoped addresses - is lost.
66
67 10. Update for PostgreSQL to match 4.14/14: after an insert, delete, or update
68     command, the result is the number of rows affected.
69
70 11. If smtp_banner expanded to an empty string, no greeting line was sent, thus
71     causing the client to time out. An empty 220 response is now sent.
72
73 12. An empty argument was logged as a null string by the "arguments" log
74     selector. Now empty strings and arguments that contain whitespace are
75     surrounded by quotes.
76
77 13. The "arguments" log selector now also logs the current working directory
78     when Exim is called.
79
80 14. Added a couple more debugging calls to tls-openssl.
81
82 15. Changed the name of the global variable ldap_version because some LDAP
83     library uses the same name, which causes a clash. It's now called
84     eldap_version. While I was at it, I changed the other two global variables,
85     ldap_default_servers and ldap_dn.
86
87 16. If an address that is verified in an ACL is redirected to a single address,
88     Exim verifies the child (this is not new). However, the value of $address_
89     data that was being returned was the value from the parent. It is now the
90     value from the child.
91
92 17. Re-arranged the code for rda_is_filter() to make it easier to add other
93     filter types in future.
94
95 18. Removed the filter test function from filter.c and put it into its own
96     source file, again to make things easier for multiple filter types.
97
98 19. To help those people who are maintaining a patch for dynamically loaded
99     local_scan() functions, I have added
100
101       #define LOCAL_SCAN_ABI_VERSION_MAJOR 1
102       #define LOCAL_SCAN_ABI_VERSION_MINOR 0
103
104     to the local_scan.h file.
105
106 20. The variables $tls_certificate_verified, $tls_cipher, and $tls_peerdn now
107     exist even when Exim is not compiled with TLS support.
108
109 21. If an empty user name was sent by a client for a LOGIN authentication, it
110     was not put into $1; instead, the password ended up in $1 (instead of in
111     $2).
112
113 22. When creating a temporary file in the appendfile transport for a per-file
114     delivery not in maildir or mailstore format (that is, in the old Smail
115     format - I wonder if anyone uses this?), Exim was opening the file without
116     O_EXCL, which is a bit unsafe.
117
118 23. The output from the ${stat: expansion operator was being formatted using %d
119     which expects an integer; in many (most) systems size_t is off_t, which
120     is actually a long or even a longlong, and in some cases this caused
121     incorrect data to be output. The formatting is now done using %ld, with the
122     values all explicitly cast to (long).
123
124 24. Callout caching was failing to cache a negative response to a "random"
125     address check.
126
127 25. If a daemon was started with -qsomething and not -bd, and deliver_drop_
128     privilege was set, and a pid file was specified with -oP, and the pid file
129     did not previously exist, it was created with owner exim instead of owner
130     root.
131
132 26. verify=sender was not being allowed in a non-SMTP ACL.
133
134 27. Under some error conditions, the socket used for ident calls could be left
135     open.
136
137 28. Added acl_smtp_helo, because some people seem to want it.
138
139 29. For hosts that match helo_verify_hosts, the error given when a MAIL command
140     is received without HELO or EHLO has been changed from 550 to 503 (which
141     means "bad sequence of commands").
142
143 30. Installed PCRE 4.2.
144
145 31. The quota_size_regex option for the appendfile transport was broken in that
146     a terminating zero was omitted from the string that was extracted for the
147     size. If it happened that digits followed in the memory to which it was
148     copied, an incorrect (too large) size was then used.
149
150 32. Change 4.14/32 (iv) introduced a bug in the case when the "phrase" part of
151     a rewritten address did *not* contain any special characters. The
152     generated address was mangled.
153
154 33. Several items of refactoring from Michael Haardt:
155
156      . Introduction of "const" in a number of places
157      . Use memcpy() instead of strncpy() in string_cat()
158      . Add HAVE_ICONV to Linux file, for external users (Exim doesn't use it)
159        [Later: From 4.21, Exim *does* use it.]
160      . Preparation for adding additional types of filter file
161
162 34. Changed (incompatibly, but hopefully not so it affects anyone) the
163     appendfile transport in the case when it is called directly as a result of
164     a .forward or a filter file requesting a delivery to a file. Previously,
165     any settings of "file" or "directory" were ignored in this case. Now they
166     are used. The path received from the router is in $address_file (as
167     before) and can therefore be included in the expansion.
168
169 35. If a "save" command in a filter specifies a non-absolute path, the value of
170     $home/ is pre-pended. This no longer happens if $home is unset or is an
171     empty string. It is expected that the transport will complete the path (see
172     34 above). If there is an error before the path is complete, the local part
173     is logged as "save xxxx".
174
175 36. If multiple "to file" deliveries are routed to the same transport, no
176     batching ever takes place, whatever the value of batch_max.
177
178 37. If an address was redirected to an unqualified local part preceded by a
179     backslash, Exim was qualifying it with the qualify_domain, instead of with
180     the incoming domain.
181
182 38. Minor rewording: header lines can be added by MAIL as well as RCPT: the
183     debug line mentioned only RCPT.
184
185 39. DESTDIR is the more common variable that ROOT for use when installing
186     software under a different root filing system. The Exim install script now
187     recognizes DESTDIR first; if it is not set, ROOT is used.
188
189 40. If DESTDIR is set when installing Exim, it no longer prepends its value to
190     the path of the system aliases file that appears in the default
191     configuration (when a default configuration is installed). If an aliases
192     file is actually created, its name *does* use the prefix.
193
194 41. If an item in log_file_path was an empty string, Exim wrote the log to the
195     log directory in the spool directory. Now it takes notice of the
196     setting of LOG_FILE_PATH in Local/Makefile, and uses the first non-empty,
197     non-"syslog" item from that list. If there are none, it uses the ultimate
198     default of the spool directory.
199
200 42. If there is a Reply-to: header line, but it is empty, $reply_address now
201     contains the From: address instead of being empty.
202
203 43. Added -no-cpp-precomp to CFLAGS in OS/Makefile-Darwin. Without this, the
204     compiler provides a string for __DATE__ that does not conform to the
205     specification in the C standard. The option disables precompiled headers,
206     which should not have any bad effects, as pre-compiled headers are
207     supposedly just a performance enhancement at compile time.
208
209 44. Refactoring: as there is now a flag that specifies whether or not a home
210     directory that is passed with an address is already expanded, we no longer
211     need the \N...\N fudge for home directories extracted from the password
212     data.
213
214 45. Fixed an infelicity introduced by 4.14/71: The defaulting of the prefix,
215     suffix, and check string stuff in appendfile was happening when no
216     directory was supplied. Now it happens if no directory is supplied AND
217     maildir has not been specified.
218
219 46. If expansion of the serverpassword in a spa authenticator or expansion of
220     server_condition in a plaintext authenticator is forced to fail,
221     authentication now fails (previously it gave a temporary error, which is
222     what happens for other expansion failures). This brings these
223     authenticators into line with cram_md5, where expansion of server_secret
224     has always behaved like this.
225
226 46. Added new syslog facilities (courtesy Oliver Gorwits):
227
228     (i)  SYSLOG_LOGS_PID and LONG_SYSLOG_LINES in src/EDITME.
229     (ii) syslog_facility and syslog_processname main options.
230
231 47. Callout was using only the hosts from the router, ignoring the transport.
232     This has been changed. If (a) the router does not set up hosts (e.g. it's
233     an accept router) or (b) the smtp transport that is routed to has
234     hosts_override set, then the transport's hosts are used for callout
235     checking.
236
237 48. When named lists were nested, and an inner list was resolved by a lookup
238     that saved data for, e.g. $domain_data, the data was associated with just
239     the outer list, though both were cached, so if a subsequent test was done
240     for the inner list, there was no domain data. Example:
241        domainlist A = lsearch;/a/b
242        domainlist B = lsearch;/c/d
243        domainlist C = +A : +B
244     A test on +C that matched, followed by a test on +A or +B would provoke
245     this bug. Now the data is saved with both the inner and the outer lists.
246
247 49. When the log selector +address_rewrite is turned on, the log lines now
248     show where the rewritten address came from (which header line, envelope
249     field, or an SMTP command).
250
251 50. If an integer or fixed point configuration value is too big to fit in
252     a 32-bit int, Exim now writes an error to the panic log and dies.
253
254 51. Unknown SMTP commands are now assumed to be ones that need synchronization;
255     this means that a packet that contains more than one of them will cause the
256     connection to be dropped as soon as the first one is encountered.
257
258 52. The "control" feature of ACLs was not permitted for the MAIL ACL (an
259     oversight). It now is allowed.
260
261 53. Added the "discard" verb to ACLs.
262
263 54. Fixed a theoretical bug observed by reading the code: if local_scan()
264     changed the number of recipients, output from the received_recipients log
265     selector would be incorrect.
266
267 55. Added HAVE_ICONV to the os.h files for Linux, Solaris, HP-UX. This is for
268     use in the forthcoming Sieve addition to Exim.
269
270 56. The behaviour of -t in the presence of Resent- headers has been changed,
271     for compatibility with Sendmail and other MTAs. Previously, Exim gave an
272     error, because it is not clear from RFC 2822 how this might be handled. It
273     turns out that MUAs don't seem to follow what RFC 2822 says, and any MUA
274     that uses -t with Resent- ensures that there is only one set of Resent-
275     header lines (usually by renaming others to X-Resent-xxx). So now Exim will
276     take recipients from all the Resent- header lines instead of the usual
277     ones.
278
279
280 Exim version 4.14
281 -----------------
282
283  1. Found another case where SIGCHLD is being ignored (a child process for
284     handling a filter file) and so the wait() doesn't find the subprocess. This
285     came to light as a result of extra logging introduced as part of the
286     4.12/14 fix. Now Exim is careful to set SIGCHLD handling to its default
287     (i.e. to be noticed) for this particular subprocess. (It already has this
288     code for other cases where it uses subprocesses.)
289
290  2. If ${run appeared in part of a conditional item that was being skipped, the
291     actual running of the command was not being skipped.
292
293  3. A bit of code tidying (refactoring): there were two functions that built
294     strings containing a host name and ident value for logging. There is now
295     only one. It is called in some additional places where previously just the
296     host name and address were given, so the wording of some log lines has
297     changed slightly.
298
299  4. Added support for Unix domain socket connection to PostgreSQL.
300
301  5. The number of unknown SMTP commands that Exim will accept before dropping
302     a connection can now be changed by smtp_max_unknown_commands. The default
303     value is 3. Previously, a fixed value of 5 was used. The final command is
304     now included in the log line.
305
306  6. The standard place for chown and chgrp in Linux is /bin, not /usr/bin, as
307     assumed by the exicyclog script. I've implemented a "look for it" feature
308     that makes exicyclog look in /bin, /usr/bin, /usr/sbin, and /usr/etc for
309     the commands chown, chgrp, mv, and rm if configured, and turned on this
310     feature for Linux. This should cope with old Linuxes that use /usr/bin.
311
312  7. Implemented .ifdef etc.
313
314  8. Installed signal handlers for SIGSEGV, SIGILL, SIGFPE, and SIGBUS while
315     running local_scan(), so that crashes therein get caught. A temporary error
316     response is sent for an SMTP message, and the spool is cleaned up.
317     Previously, a -D file was left lying around if there was a crash in
318     local_scan().
319
320  9. The ${quote: operator has been changed so that it turns newline and
321     carriage return characters into \n and \r, respectively.
322
323 10. Added support for crypt16().
324
325 11. Some restrictions on the use of "verify" in ACLs were too restrictive, and
326     have been relaxed. In particular, "verify = sender" is now permitted in the
327     ACL for the MAIL command, as well as those for RCPT and DATA.
328
329 12. If local_scan() sets up recipient or errors_to addresses that are
330     unqualified (local parts without a domain) Exim now qualifies them using
331     the qualify_recipient domain.
332
333 13. White space at the start of continuation lines in -be input was not being
334     ignored.
335
336 14. Previously, if a MySQL query was issued that did not request any data (an
337     insert, update, or delete command), Exim gave a lookup error and deferred.
338     This case is now recognized, and the result of the lookup is now the number
339     of rows affected.
340
341 15. A configuration error is given if tls_try_verify_hosts is set and
342     tls_verify_certificates is not set. (Exim already did this for
343     tls_verify_hosts.)
344
345 16. Exim was trying to create a non-existent hints database even when it was
346     just opening it for reading. It called the creating function with the
347     O_RDONLY and O_CREAT flags. This works with many DB libraries, but it
348     not with DB 1.85, where a subsequent attempt to use the database gave the
349     error "Inappropriate file type or format". Exim now creates hints databases
350     only when it wants to open them for writing.
351
352 17. If an ACL condition test set a default "message" value without a
353     "log_message" value, and there were no overriding messages in the ACL
354     itself, no message was logged. The user message is now logged.
355
356 18. If callout made a connection, but it was dropped before the initial
357     welcome response was received, Exim logged "response to initial connection
358     was" with no further text. It now logs that the connection was dropped.
359     The wording of the logging for callout defers has been slightly changed so
360     as to reduce duplication.
361
362 19. When multiple messages were sent using TLS over one connection, the
363     additional required EHLO that follows STARTTLS was being counted as a
364     nonmail command, and thus causing a problem if there were a lot of
365     messages. Similarly, a new AUTH that followed STARTTLS was being counted.
366     It is now possible to run with smtp_accept_max_nonmail set to zero in these
367     and other "normal" circumstances.
368
369 20. During verify=sender, global rewriting rules are applied to the sender
370     address, and if it changes, $sender_address becomes the rewritten version.
371     Unfortunately, it was not getting updated until after the routers had been
372     run, so that if a router referred to $sender_address while verifying a
373     sender, the unrewritten value was used.
374
375 21. The "random address" callout test was being done after the other tests.
376     This is silly, because if the host accepts all local parts, there isn't any
377     point in doing the other, more specific, tests. I changed things around so
378     that the "random" test (if configured) is done first.
379
380 22. Expanded the wording for callout failures when MAIL FROM:<> or RCPT TO the
381     a postmaster address are rejected. Also include these words when a
382     rejection happens because of caching (when there isn't an actual SMTP
383     command/result to reflect).
384
385 23. A new router condition called "address_test" (default true) can be used to
386     skip routers when testing addresses using -bt (compare no_verify). This can
387     be a convenience when your first router sends stuff to an external scanner.
388
389 24. Testing for deliver_queue_load_max was happening inside the delivery
390     sub-process, when it could have happened outside, in the queue runner (thus
391     saving one process). This was a hangover from Exim 3, where there were
392     other load tests to be done. The code has been tidied.
393
394 25. Code tidy: the driver_info generic structure contained a field that
395     might, on 64-bit systems, not have been compatible with the fields in the
396     structures of which it is supposed to be a subset. It turns out that this
397     field and another are not actually used generically, so removing them from
398     the structure solves the problem.
399
400 26. Added server_advertise_condition to authenticators.
401
402 27. The exim_checkaccess utility wasn't sending a HELO command; this matters
403     now that it's possible to have an ACL that checks HELO/EHLO.
404
405 27. Added the ldap_version option to force a specific LDAP version.
406
407 28. Renamed the variable verify_address in exim.c as verify_address_mode,
408     because it had the same name as the verify_address() function, which was
409     confusing.
410
411 29. Added authenticated_sender to the smtp transport.
412
413 30. When the skip_syntax_errors option is applied to a filter file, it covers
414     all filtering errors, some of which may not be strictly "syntax" (for
415     example, failure to open a log file). The wording of the message has been
416     changed to use "error" instead of "syntax error", to reduce confusion. Also
417     the subject of the message sent by syntax_errors_to is now "error(s) in
418     forwarding or filtering" instead of "syntax error(s) in address expansion".
419
420 31. Added -restore-times to the exim_lock utility.
421
422 32. Changes to the handling of the "phrase" parts of email addresses:
423
424       (i) Re-organized the code to use a supplied instead of an implied buffer,
425           and a length instead of expecting a terminated string.
426
427      (ii) Changed from using the macro mac_isprint() to an explicit test for
428           ASCII non-printing characters, because the macro pays attention to
429           print_topbitchars, which is not correct here.
430
431     (iii) If a rewritten address contained a "phrase" (whether or not the "w"
432           flag was present on the rewrite rule), but the actual address was
433           unqualified (had no domain) and was expected to be qualified by the
434           "Q" flag, Exim screwed up and created an illegal address.
435
436      (iv) When a header address is rewritten by a rule that includes the "w"
437           flag, the parts of the address outside <> are now encoded according
438           to RFC 2047 if necessary (assuming ISO-8859-1 encoding).
439
440 33. Added the ${rfc2047 and ${from_utf8 expansion operators.
441
442 34. The file names used for maildir deliveries have been changed, to accomodate
443     operating systems that may re-use a PID within one second. The file name
444     now include the microsecond time fraction, and the delivery process does
445     not exit until the clock is at least one microsecond after the time used in
446     the file name. The code copes with the clock going backwards (it waits
447     till time catches up).
448
449 35. The rules for creating message ids have been changed to allow for the fact
450     that a PID may be re-used within one second. As part of this change, the
451     range of localhost_number has been reduced to 0-16 for most systems, and
452     0-10 for those with case-insensitive file systems (Cygwin, Darwin).
453
454 36. Code tidy: there was a local count of non-TCP/IP messages that duplicated
455     the global receive_messagecount (used for accept_queue_per_connection).
456
457 37. verify = header_syntax was allowing unqualified addresses in all cases. Now
458     it allows them only for locally generated messages and from hosts that
459     match sender_unqualified_hosts or recipient_unqualified_hosts,
460     respectively.
461
462 38. If PAM was called with an empty first string, it called the data function
463     to get the user name, thereby getting the second string by mistake. If this
464     was also null (empty passwords are permitted), there was an infinite loop.
465     An empty user name is not now passed to PAM; authentication is forcibly
466     failed instead. Also, if the end of the list of strings is reached, an
467     empty string is passed back just once; a subsequent call for data provokes
468     an error response.
469
470 39. If a reverse DNS lookup yields an empty string, treat it as if the lookup
471     failed. (Apparently such records have been seen. Sigh.)
472
473 40. Added the -bnq command line option to suppress automatic qualification of
474     addresses in locally submitted messages.
475
476 41. Header texts supplied by options to the autoreply transport may now contain
477     newlines that are followed by whitespace. (This was allowed from a filter,
478     but not from the transport.)
479
480 42. Patch for < > problems in eximstats 1.23.
481
482 43. Re-arranged the code to make it easier in future to add additional filter
483     types.
484
485 44. Added support for changing the connection timeout in LDAP; this is
486     something that's available in Netscape SDK 4.1. Exim uses the given value
487     if LDAP_X_OPT_CONNECT_TIMEOUT is defined.
488
489 45. When Exim was setting a daemon listener on multiple interfaces, including
490     listening on "all IPv6" and "all IPv4" interfaces, it was binding all the
491     sockets, and then calling listen() for each of them. On some IP stacks, a
492     listen for "all IPv4" fails after listening for "all IPv6" because a single
493     socket catches both kinds of call. Exim coped with this, but it turns out
494     that on a USAGI-patched Linux, this logic doesn't work unless the "listen",
495     as well as the "bind" has been done for the IPv6 socket first. The order of
496     the functions has now been changed. Instead of "bind, bind ... listen,
497     listen..." it now does "bind, listen, bind, listen, ...". Also, the failure
498     happens in the bind() rather than in the listen(), so there are now two
499     checks, which hopefully will handle all kinds of IP stack.
500
501 46. IPv6 addresses have "scopes", and a host with multiple interfaces can, in
502     principle, have the same link-local addresses on different interfaces.
503     Thus, they need to be distinguished, and a convention of using a percent
504     sign followed by something (often the interface name) is being used, for
505     example: 3ffe:2101:12:1:a00:20ff:fe86:a061%eth0. Two changes have been made
506     to accommodate this:
507
508     (a) A percent sign followed by an arbitrary string is allowed at the end of
509         an IPv6 address.
510
511     (b) Exim calls getaddrinfo() instead of inet_pton() to convert a textual
512         IPv6 address for actual use. This function recognizes the percent
513         convention in some operating systems.
514
515 47. Additional debugging inserted for the case of forced failure when expanding
516     an item in a list.
517
518 48. A new debugging selector +expand has been added. This is not included in
519     the default set of selectors. It requests detailed debugging information
520     for string expansions.
521
522 49. Failure to open the main log results in a panic-die, but the original line
523     that was being logged could be lost. It is now output to stderr if there is
524     a stderr file.
525
526 50. When Exim starts, it checks for the existence of its spool directory, and
527     creates it if necessary. Unfortunately, it was doing this after the code
528     for logging arguments. Thus, if the spool did not exist, trouble ensued.
529
530 51. The log line for an ACL warning after a sender verify callout failure was
531     not showing the details, unlike the log line for a deny. They are now shown
532     in a similar way.
533
534 52. For reasons lost in the mists of time, when a pipe transport was run, the
535     environment variable MESSAGE_ID was set to the message ID preceded by 'E'
536     (the form used in Message-ID: header lines). The 'E' has been removed.
537
538 53. Updated the QNX configuration files for QNX 6.2.0.
539
540 54. The "*@" type partial matching for single-key lookups was broken in
541     releases after 4.10. Exim looked for *@xxx but, if that failed, it wasn't
542     going on to look for "*".
543
544 55. Included eximstats 1.25 in the source tree.
545
546 56. Changed log wording from "Authentication failed" to "<name> authenticator
547     failed", where <name> is the name of the authenticator.
548
549 57. gcc 3.2.2 warned about a selection of places where string casts were
550     needed.
551
552 58. Exim monitor: the use of one_time redirection could cause addresses to be
553     displayed with incorrect "parent" addresses after the one_time
554     re-arrangement had taken place. They should be shown with no parents,
555     because the parentage has been removed.
556
557 59. Arranged to keep independent timestamps for postmaster and random checks in
558     callouts, and not to do unnecessary tests for postmaster when testing
559     individual addresses.
560
561 60. Incorporated PCRE release 4.0.
562
563 61. Added ${hex2b64: operator.
564
565 62. Added $tod_zulu.
566
567 63. Added ${strlen: operator.
568
569 64. Added ${stat: operator.
570
571 65. When Exim is receiving multiple messages on a single connection, and
572     spinning off delivery processess, it sets the SIGCHLD signal handling to
573     SIG_IGN, because it doesn't want to wait for these processes. However,
574     because on some OS this didn't work, it also has a paranoid call to
575     waitpid() in the loop to reap any children that have finished. Some
576     versions of Linux now complain (to the system log) about this "illogical"
577     call to waitpid(). I have therefore put it inside a conditional
578     compilation, and arranged for it to be omitted for Linux.
579
580 66. Added settable variables $acl_c0 - $acl_c9 and $acl_m0 - $acl_m9 for use
581     during ACL processing.
582
583 67. Added "defer" command to system filter.
584
585 68. X options such as -bg or -geometry that were added to an eximon command
586     were being lost as a result of a bug introduced by 4.12/6.
587
588 69. The "more" and "unseen" generic router options can now be expanded strings.
589
590 70. The "once_repeat" option in the autoreply transport is now an expanded
591     string.
592
593 71. If maildir_format is set on an appendfile transport that is referenced from
594     an file_transport setting in a redirect router, it forces maildir delivery,
595     even if the path given in the filter does not end with '/'.
596
597 72. Fixed three bugs in ${readsocket:
598       (i) If the operation failed, and a failure string was given, "}}" was
599           erroneously added to it.
600      (ii) If the operation succeeded, but a failure string was present, "}" was
601           added to the expanded data.
602     (iii) The alarm for the timeout was set with signal() instead of with
603           os_non_restarting_signal(), which meant that it only worked on those
604           OS whose default is not to restart an interrupted system call.
605
606 73. A complete host name (no wildcards) in a host list causes a forward lookup
607     for the IP address. If this failed, Exim was behaving as if the host didn't
608     match the list, instead of giving an error (as it does when a reverse
609     lookup fails).
610
611 74. If router_home_directory was passed on as a home directory for a local
612     transport, it was being re-expanded in the transport. This has been changed
613     so that the expanded value is passed from the router to the transport, and
614     no re-expansion takes place.
615
616 75. When a redirect router generated a pipe, file, or autoreply, the values of
617     $domain_data and $localpart_data were not being propagated to the
618     transport.
619
620 76. The macros MESSAGE_ID_LENGTH and SPOOL_DATA_START_OFFSET are now defined in
621     local_scan.h so that they are available to local_scan() functions.
622
623 77. Changes to the SMTP PIPELINING support:
624
625     (1) Exim used always to accept pipelined commands, even when it hadn't
626         advertised PIPELINING (i.e. when EHLO had not been received). Now it
627         objects unless PIPELINING has been advertised.
628
629     (2) Advertising PIPELINING to specific hosts can be disabled via the new
630         option pipelining_advertise_hosts.
631
632 78. The acl_smtp_connect ACL was not being run for -bs input when no IP address
633     was supplied via -oMa.
634
635 79. A "mail" command in a filter could cause a crash if the list of recipients
636     for the "to:" line was excessively long - this showed up in a reply to
637     a message with a ridiculously long Reply_to: header line.
638
639 80. Added allow_utf8_domains.
640
641 81. Added $rh_ and $rheader for "raw" header expansion.
642
643 82. Added smtp_accept_max_nonmail_hosts.
644
645 83. Extended ${stat (see 64 above) to add smode=symbolic mode.
646
647 84. Added default logging for host and IP lookup failures, with a log selector
648     called host_lookup_failed to turn it off.
649
650 85. Added header_maxsize and header_line_maxsize.
651
652 86. If a RCPT ACL made use of "verify = sender" without callout, followed by
653     another use with callout, and the callout failed, the caching was broken
654     such that for a subsequent RCPT command, the first callout failed
655     incorrectly. The caching of sender verification has been fixed so that it
656     now remembers that the routing succeeded even when the callout fails.
657
658 87. Added errno and strerror(errno) to the log line for a failure to lock the
659     -D file when receiving a message.
660
661 88. If router with check_local_user set up a local delivery, and no user was
662     specified on the transport, and errors_to on the router specified an
663     address whose verification also invoked check_local_user, the wrong uid/gid
664     was used for the transport. It used the uid/gid of the errors_to address
665     instead of the uid/gid of the original local part.
666
667 89. If log_file_path=:syslog was set, to use the default log path and also
668     syslog, and check_log_space was also set, Exim was confused, and refused to
669     accept messages, giving the error "cannot find slash in ".
670
671 90. If a router stripped a prefix or a suffix from a local part, and then
672     routed that address to an smtp or lmtp transport, the address that was
673     sent in the RCPT command did not have the affixes stripped.
674
675 91. For BSMTP delivery by appendfile or pipe, the address given in the RCPT
676     command did not preserve the case of the envelope address, as it is
677     supposed to.
678
679
680 Exim version 4.13
681 -----------------
682
683 There was no 4.13. I accidentally put out a fixed version of 4.12 (a typo was
684 discovered very soon after release) that verified itself as 4.13. This too was
685 hastily fixed, but it seems best not to use the number, to avoid confusion.
686
687
688 Exim version 4.12
689 -----------------
690
691  1. Update to change 4.11/82: for the max number of processes, set
692     RLIM_INFINITY if it is defined.
693
694  2. An expansion ${run{xxx}} where xxx was a successful command that produced
695     no output caused Exim to crash.
696
697  3. Some artificial delays of 1 second existed when running in the test
698     harness, to ensure repeatability of debugging output. Now that we have
699     the millisleep() function, these can be shorter.
700
701  4. Change 4.11/30 below overlooked the case when an address gets a 4xx
702     response from a server. Because this isn't a host problem, the host does
703     not get delayed, and it gets tried every time the address is OK'd for
704     routing, with the same response. However, if hosts_max_try is set, because
705     not all the hosts were tried, the address does not time out. I've changed
706     things so that if there is a 4xx response to a RCPT command, the host in
707     question does not count towards hosts_max_try if the message is older than
708     the host's maximum retry time. This means that other hosts are always tried
709     in this circumstance; if the address gets 4xx errors from all of them, it
710     will eventually time out.
711
712  5. If a retry rule for a host had no actual retry times specified, it could
713     cause a crash when checking the ultimate address timeout. (Very old bug,
714     spotted in passing, so probably never bothered anybody.)
715
716  6. Change 135 below broke the following scripts when a list of configuration
717     files was given: exicyclog, exim_checkaccess, eximon, exinext, and exiwhat.
718     In practice, if exim_path was not specified in the configuration file (a
719     common case), things would probably work OK. However, the use of
720     CONFIGURE_FILE_USE_NODE definitely did not work. These scripts have now
721     been updated to fix this problem. They now search for the configuration
722     file in the same way Exim itself does: for each name in the list, the
723     "noded" file is tried first, then the unsuffixed file.
724
725  7. If a WARN verb in an ACL did not specify an explicit "message" modifier,
726     and was triggered by a failing sender or recipient verification, the
727     response that would have been sent as an SMTP message for a DENY verb was
728     incorrectly being added to the message's headers.
729
730  8. I screwed up change 4.11/155. For lookup types whose names were prefixes of
731     other lookup types (e.g. nis and nisplus, dbm and dbmnz), the new search
732     function didn't do the correct comparison, meaning that the wrong lookup
733     type could be found.
734
735  9. Solaris seems to be one of the LDAPs that doesn't have the lud_scheme
736     member of the LDAPURLDesc structure. Since the check that is made on it
737     is only to double check that a path is given for ldapi, I've just removed
738     the test in the Solaris case.
739
740 10. The modified TextPop.c source in the Exim monitor had declarations of errno
741     and sys_nerr which never were actually referenced. The second of these
742     caused trouble on Darwin, so I've removed both of them. Why were they
743     there? Who knows? This is ancient X code...
744
745 11. The DEFER ACL verb crashed if no "message" modifier was set.
746
747 12. The check on incoming messages that gives the error "too many non-mail
748     commands" was too strict. In the case of Exim sending to Exim, when the
749     client has queued messages for the server and is using TLS, it will close
750     and re-initialize TLS between messages (because the client has to hand the
751     SMTP connection to a new process). STARTTLS was being counted as a non-mail
752     command, and therefore could cause the limit to be hit. The revised code
753     now allows for one RSET, one HELO or EHLO, and one STARTTLS between each
754     message without counting them as non-mail commands. (One RSET was
755     previously allowed - I *had* spotted that case.)
756
757 13. Some log lines for rejections by ACL were putting ident values in
758     parentheses instead of using U= after H=. (There are some other lines that
759     do use parens, typically when the host name appears without H= within a
760     message. This whole area could perhaps do with tidying up.)
761
762 14. When processing a redirection file happens in a subprocess (typically so
763     that a .forward file is processed as the user), Exim was assuming that a
764     call to wait() would always reap the subprocess, and it was failing to
765     check the result. In theory, a signal of some sort occurring at the wrong
766     time could break this assumption - the process was then left unreaped, and
767     could possibly be picked up later during deliveries, thus confusing that
768     code ("processes got out of step"). This is conjecture - I haven't got a
769     definite test of this. However, I have fixed the code to repeat the wait
770     after a signal.
771
772 15. When Exim was waiting for a remote delivery subprocess, and the waitpid()
773     call found a process that was not in the list of remote delivery processes,
774     Exim gave up waiting for remote processes. It is probably better just to
775     ignore the unexpected process (though, of course, write to the main and
776     panic logs) and to wait for another process, and so that is what now
777     happens. If the error situation is caused by failed waiting logic for
778     routing or local delivery processes, this approach will minimize bad
779     behaviour, I hope.
780
781
782 Exim version 4.11
783 -----------------
784
785  1. Ignore trailing spaces after numbers in expansion comparisons such as
786     ${if > { 5 } { 4 } ... (leading spaces were already ignored).
787
788  2. Two variables, $warnmsg_delay, and $warnmsg_recipients, had got left with
789     their old Exim 3 names, when I meant to change to "warn_message", along
790     with the warn_message_file option. They have now been changed. The old
791     names remain as synonyms, but will be undocumented in due course.
792
793  3. The message "This message was created automatically by mail delivery
794     software (Exim)." still confuses people. If they are sufficiently Internet-
795     ignorant, they think the message has come from exim.org. At first, I
796     changed thw wording to "This message was created automatically by mail
797     delivery software (Exim) running on a mail server handling mail for <the
798     qualify domain>." in the hope that that might be better. However, in
799     testing that still proved confusing on servers handling multiple domains.
800     The message has now reverted to the original, simple wording: "This message
801     was created automatically by mail delivery software."
802
803  4. It has been discovered that, under Linux, when a process and its children
804     are being traced by "strace -f", the children are stolen from the parent
805     while they are being traced. A call to waitpid(-1,&x,NOHANG), which Exim
806     uses to test for the completion of "any of my children" in a non-blocking
807     manner, returns as if there are no children in existence. Exim used treat
808     this as a serious unexpected error state. What it does now is to use
809     kill(pid,0) to check explicitly for the continued existence of any of its
810     children. If it finds any, it assumes it is being traced, and proceeds as
811     if the return from waitpid() had been "none of your children have finished
812     yet". If it can't find any children, it gives the error as before.
813
814  5. When Exim creates hints databases and their lock files as root, it needs to
815     change their ownership to exim. In Exim 3, the function to open a hints
816     database wasn't called as root very often, and the check "are we running as
817     root?" would usually fail. However, because Exim 4 eschews the use of
818     seteuid(), it runs all its routing as root, and this always calls the hints
819     database opening function. It wasn't noticing when it was actually creating
820     the database, and so it was running chmod() on all the files in the db
821     directory every time. This does no harm, of course, but wastes resources.
822     Exim now detects when the database was already in existence by opening
823     without O_CREAT at first. If this succeeds, it doesn't do the root test.
824
825  6. The line in MakeLinks that creates a link for direct.c had been
826     accidentally left in (cf 4.03/6).
827
828  7. The value of $0 in the replacement in a rewriting rule was being corrupted,
829     leading to incorrect results or error diagnostics.
830
831  8. Added support for ldapi:// URLs to the LDAP lookups (OpenLDAP only). Also,
832     re-organized the code to use ldap_initialize() with OpenLDAP in all cases
833     (it seems to be preferred).
834
835  9. With OpenLDAP 2.0.25, ldaps:// doesn't seem to work unless the LDAP
836     protocol level is set to 3. This is now standard in the Exim code, as v3
837     has been around for 5 years now. Testing ldaps:// is now included in the
838     Exim test suite. Although earlier versions claimed to support it, I rather
839     suspect that it never worked.
840
841 10. Inserted some checking of the syntax of the IP address given as the first
842     argument to the exim_checkaccess utility. This gives a better error
843     message, especially in the case when somebody gets the arguments in the
844     wrong order.
845
846 11. Improved the panic log entry if an unsupported format type is passed to
847     string_vformat() (now gives the whole format string, not just the little
848     bit that's wrong).
849
850 12. Ever since its early days, Exim has checked the syntax of non-SMTP
851     addresses according to RFC [2]822 rules, rather than the stricter RFC
852     [2]821 rules that it uses for SMTP. This allows for a wider set of
853     characters in domains. This has now caused a problem, because I forgot
854     about it when making some changes to the format of spool files (see
855     3.953/44, 4.03/10, and 4.04/1). I can't believe that anybody actually makes
856     use of this feature (which isn't documented), so I have removed it. All
857     domains must now conform to RFC [2]821 rules. A non-SMTP message with a
858     domain that would previously have been accepted will now be bounced.
859
860 13. If widening a domain in a dnslookup router made it syntactically invalid,
861     the error message quoted the original domains instead of the widened
862     domain.
863
864 14. During a queue run initiated by -R or -S (or by -i when the use of message
865     logs is disabled), if Exim encountered a message with certain
866     characteristics (including text for $local_scan_data, and the setting of
867     the "manually thawed" flag), this data was not correctly reset for
868     subsequent messages. So if they didn't have those settings themselves,
869     strange things could occur.
870
871 15. With the "percent hack" enabled for percenthack.domain, if a message had
872     two addresses such as X%some.domain@percenthack.domain and X@some.domain,
873     Exim was not recognizing the duplication, and was making two deliveries
874     instead of one.
875
876 16. The output from verification (for -bv and VRFY) used to list a child
877     address when verification was applied to children (this happens, for
878     example, for aliases that generate just a single child). Now it lists only
879     the original address.
880
881 17. Changes 34 and 35 of 4.10 did not wholly solve problems with widened
882     domains. The following bug still existed:
883
884     . A recipient address was abbreviated (e.g. one component).
885     . A dnslookup router caused it to be widened.
886     . The new domain was a local domain.
887     . The address was redirected to itself.
888
889     At this point, Exim thought it was a duplicate, and discarded it.
890
891     This whole thing turned out to be a large can of worms, so I have reworked
892     the address widening code. This should get rid of all these problems.
893     Widening now appears similar to redirection, with the unwidened address
894     becoming a proper parent address. As part of this, there has been some
895     general re-organization of the way addresses are handled.
896
897 18. When a filter generated only "unseen" deliveries, the normal delivery that
898     happened subsequently lost any value of address_data that was previously
899     set. The handling of values like that that are propagated from parents to
900     children has been reworked.
901
902 19. Added smtp_return_error_details and the check_postmaster option for address
903     verification callouts.
904
905 20. Long SMTP responses (from ACL messages or wherever) are now automatically
906     split up into multi-line responses if possible. The split happens at an
907     occurrence of ": " if present after 40 characters. Otherwise it happens at
908     the last space before 75 characters. Existing newlines in the message are
909     taken into account.
910
911 21. When verify = header_sender is set, a different error message is now given
912     if a syntax is detected, as opposed to failure to verify.
913
914 22. Extended the general mechanism for ${quote_lookuptype:...} expansions by
915     allowing for an option to be given after the lookup name, for example
916     ${quote_ldap_dn:...}. Unrecognized options cause errors.
917
918 23. Re-worked the quote_ldap expansion items to provide two different kinds of
919     quoting, since the requirements of filter strings and DNs are different.
920     Sigh. Arranged for the DN given in the USER= setting to be de-URL-quoted
921     because not all libraries do it themselves.
922
923 24. The handling of responses from LDAP searches wasn't right. It was detecting
924     situations of the form "ldap_result failed internally or couldn't provide
925     you with a message" but not "the server has reported a problem with your
926     search". This has now been tidied up (thanks, Brian). Problems of the
927     latter kind are now handled as follows:
928
929       (1) For LDAP_SIZELIMIT_EXCEEDED, the truncated list of results is
930           returned. This is what happened before.
931
932       (2) For a small set of errors that, in effect, mean "that object does
933           not, or cannot, exist in the database", the lookup fails. This is
934           also as before.
935
936       (3) For other problems, the lookup defers, giving the LDAP error.
937
938 25. Added $ldap_dn to hold the DN of the last entry retrieved in the most
939     recent LDAP lookup.
940
941 26. Exim was not checking for the LDAP_INVALID_CREDENTIALS error when
942     ldap_bind() failed during an ldapauth call. With (at least) OpenLDAP2, the
943     connection to the server doesn't happen until ldap_bind(), so failures to
944     connect were being treated as authentication failures, and given hard
945     errors. Now, all errors other than LDAP_INVALID_CREDENTIALS are treated the
946     same way for all calls to ldap_bind(), whether ldaputh or otherwise. They
947     lead to temporary errors - if there are more servers, they will be tried.
948
949 27. If there was a reference to a non-existent named list, for example, a
950     setting such as "senders = +something", but no lists of that type were
951     actually defined, Exim misbehaved. For an address list, it treated the name
952     as a domain list. For a domain list, it just didn't match. Now it gives a
953     panic error about a non-existent named list (as it always did if there were
954     named lists of the appropriate type). The error now tells you what type of
955     list it thought it was looking for.
956
957 28. When -bt or -bv is used by a non-admin user, and there is some kind of
958     DEFER (e.g. database unreachable), details of the failure are no longer
959     given, because they may include private data such as the password for an
960     LDAP lookup.
961
962 29. The logic for using a remote host name as a key for looking up retry rules
963     in preference to the domain of the email address was broken. It wouldn't
964     find such retry rules.
965
966 30. There were some problems with the action of hosts_max_try in the smtp
967     transport where there were indeed more hosts available than the limit.
968
969     (a) Exim used to time out an address out if all the hosts that were tried
970         were past their retry limits, ignoring the state of any hosts that were
971         not tried because the hosts_max_try limit was reached. Now it won't
972         time out an address unless all its hosts are actually considered and
973         are past their retry limits.
974
975     (b) Hosts that are past their retry limits are no longer counted for
976         hosts_max_try. This means that when some hosts are in this state, a
977         greater number of hosts are tried than before, but this is the only way
978         to ensure that all hosts are considered before timing out an address.
979
980     (c) When the hosts_max_try limit is reached, Exim now looks down the host
981         list to see if there is a subsequent host with a different MX. If there
982         is, that host is used next, and the current host is not counted. More
983         details in NewStuff.
984
985 31. The source for spa authentication (taken from the Samba project) used the
986     type "int16". This has caused compilation problems in some systems that
987     happen to have a different definition of it. (Naughty, naughty, non-
988     standard.) I've renamed all the defined types by adding "x" on the end.
989
990 32. When a delivery that used authentication was run with -v (which an
991     unprivileged user can use) it included the authentication data when it
992     showed the SMTP transaction. Such data is now replaced by asterisks in any
993     reflection of the SMTP commands. This also applies if the command is logged
994     as a result of an error response.
995
996 33. Some little problems in queue runs:
997
998     (a) The reading end of the synchronising pipe was being left open in the
999         delivery subprocess. This caused no harm, but used up a file
1000         descriptor till that series of deliveries was done.
1001
1002     (b) If the load level got high enough to abandon a queue run, the
1003         synchronizing pipe was accidentally not closed. Normally, this wouldn't
1004         matter, because the queue runner process would finish any way, but...
1005
1006     (c) If split_spool_directory was set without queue_run_in_order, the code
1007         for abandoning a queue run because of too high load didn't stop
1008         cleanly. Instead, it went on to look at the remaining subdirectories.
1009         Each one would then notice the high load, and abort. Not only was this
1010         a waste of time, but because of (b) above, it used up one file
1011         descriptor per subdirectory. With up to 62 subdirectories, this could
1012         hit the limit of file descriptors if it was as low as 64 (which it
1013         sometimes is).
1014
1015 34. Added SYSTEM_ALIASES_FILE to the build-time configuration, and the ability
1016     to set ROOT= when installing. Removed installation instructions for the
1017     info version of the overview document, because that document no longer
1018     exists for Exim 4.
1019
1020 35. Added a total line to exiqsumm.
1021
1022 36. convert4r4 can now handle "optional" for single-key lookups in aliasfile
1023     directors.
1024
1025 37. Change 4.03/25 (making convert4r4 double colons in require_files lists) was
1026     incomplete. It worked for routers, but not for directors.
1027
1028 38. After verify=recipient in an ACL, the value of $address_data is the last
1029     value that was set while routing the address.
1030
1031 39. Included eximstats 1.22.
1032
1033 40. If a delivery of another message over an existing SMTP connection yields
1034     DEFER, we do NOT set up retry data for the host. This covers the case when
1035     there are delays in routing the addresses in the second message that are so
1036     long that the server times out. This is alleviated by not routing addresses
1037     that previously had routing defers when handling an existing connection,
1038     but even so, this case may occur (e.g. if a previously happily routed
1039     address starts giving routing defers). If the host is genuinely down,
1040     another non-continued message delivery will notice it soon enough.
1041
1042 41. Added quota_directory to appendfile.
1043
1044 42. Changed the order of processing configuration input lines. Previously, it
1045     was comment, .include, continuation, macro expansion, comment again (in
1046     case a macro turned a logical line into a comment). This meant that macros
1047     could not be used in .include lines. The order is now macro, comment,
1048     .include, continuation. That is, macro expansion is done on physical lines,
1049     not on logical lines.
1050
1051 43. Improved the error message if an option-setting line in the configuration
1052     does not start with a letter. (It used to say 'option "" unknown'.)
1053
1054 44. Allow -D to set a macro to the empty string. Previously it would have
1055     moved on to the next commandline item. This seems pointless. Either -DXX or
1056     -DXX= sets an empty string.
1057
1058 45. Changed OS/Makefile-FreeBSD thus:
1059
1060       EXIWHAT_MULTIKILL_CMD='killall -m'
1061       EXIWHAT_MULTIKILL_ARG='^exim($$|-[0-9.]+-[0-9]+$$)'
1062
1063     This is because, with the Exim standard installation using a symbolic link,
1064     the name of the running program is not "exim" but (e.g.) "exim-4.10-1".
1065
1066 46. An Exim server now accepts AUTH or STARTTLS commands only if their
1067     availability has been advertised in response to EHLO.
1068
1069 47. A few source changes to avoid warnings from very picky compilers that don't
1070     complain about unset variables when the only setting is by passing the
1071     address to another function.
1072
1073 48. Added -d+pid to force the adding of the pid to all debug lines. Default it
1074     on when the daemon is run with any debugging turned on. (Pids are still
1075     automatically added when multiple deliveries are run in parallel.)
1076
1077 49. Included Matt Hubbard's exiqgrep utility.
1078
1079 50. Give error for two routers, transports, or authenticators with the same
1080     name. (It already caught duplicate ACLs.)
1081
1082 51. If a host has more than MAX_INTERFACES interfaces (common for hosts with a
1083     slew of virtual interfaces), and Exim had to find the list of local
1084     interfaces, it ran off the end of the list that the ioctl returned. I had
1085     assumed the length would be set to correspond to the amount of data
1086     returned - but in at least one OS it is set to the actual number of
1087     interfaces, even if they don't all fit in the buffer.
1088
1089 52. Nit-picking changes to store.c. It was assuming the length of the
1090     storeblock structure would be a multiple of the alignment, which is almost
1091     certainly "always" true. However, just in case it might not be it is now
1092     rounded up. For some long-forgotten reason, Exim was getting blocks of
1093     store of the size (8192 - alignment), which seems strange. I've changed it
1094     to plain 8192.
1095
1096 53. Added functions to compute SHA-1 digests, added the ${sha1: expansion
1097     operator, added support for {sha1} to crypteq.
1098
1099 54. When local_scan() times out, include the message size in the log line.
1100
1101 55. If a pipe transport had no command specified, and the address also had
1102     no command associated with it, the transport process crashed. Now it defers
1103     with a suitable message.
1104
1105 56. An Exim server output mangled junk if it received a HELP command on an
1106     TLS-encrypted session.
1107
1108 57. The output from -bV (and at the start of debugging) now lists the optional
1109     items included in the binary (which routers, etc). The debugging output now
1110     includes the name of the configuration file at its start.
1111
1112 58. Added support for GnuTLS as an alternative to OpenSSL.
1113
1114 59. Give a configuration error if tls_verify_hosts is set, but tls_verify_
1115     certificates is not set. It doesn't make sense to require some hosts to
1116     verify if there's nothing to verify against.
1117
1118 60. A pipe transport may now have temp_errors = * to specify that all errors
1119     are to be treated as temporary.
1120
1121 61. The lmtp transport can now handle delivery to Unix domain sockets.
1122
1123 62. Added support for flock() to appendfile, for those operating situations
1124     that need it. Not all OS support flock().
1125
1126 63. It seems that host lists obtained from MX records often turn out to have
1127     duplicate IP addresses, especially for large sites with many MXs and many
1128     hosts. Exim now removes duplicate IP addresses. (Previously, it removed
1129     only duplicate names.)
1130
1131 64. If ${readfile was inside a substring that was not part of the final
1132     expansion value (because its condition wasn't met), Exim still tried to
1133     read the file. This made an "exists" test for the file useless.
1134
1135 65. Added ${readsocket to the expansion facilities.
1136
1137 66. It is now possible to set errors_to to the empty string in routers.
1138
1139 67. Added disable_logging as a generic transport and a generic router option.
1140
1141 68. Applied Stefan Traby's patch to support threaded Perl. As I don't have a
1142     threaded Perl, I can't test that this fixed the problem, but it doesn't
1143     appear to break the non-threaded case.
1144
1145 69. For SPA (NTLM) client authentication, the options are now expanded.
1146
1147 70. Added support for SPA server authentication, courtesy of Tom Kistner.
1148
1149 71. Latest versions of TCPwrappers use the macro HAVE_IPV6 inside the tcpd.h
1150     header, it appears, and this clashes with Exim's use of that macro.
1151     Renaming it for Exim is an incompatible change, so instead I've just
1152     arranged that HAVE_IPV6 is undefined while including the tcpd.h header.
1153
1154 72. Mac OS 10.2 (Darwin) has IP option support that looks like the later
1155     versions of glibc, but without the __GLIBC__ macro setting. I've added a
1156     new macro called DARWIN_IP_OPTIONS, and tidied up the code in smtp_in.c to
1157     simplify the handling of the three different ways of doing this.
1158
1159 73. If no "subject" keyword is given for a "vacation" command in a filter, the
1160     subject now defaults to "On vacation".
1161
1162 74. Exim now counts the number of "non-mail" commands in an SMTP session, and
1163     drops the connection if there are too many. The new option
1164     smtp_accept_max_nonmail option defines "too many". This catches some DoS
1165     attempts and things like repeated failing AUTHs.
1166
1167 75. Installed configuration files for OpenUNIX.
1168
1169 76. When a TLS session was started over a TCP/IP connection for LMTP, Exim was
1170     sending EHLO instead of LHLO after the encrypted channel was established.
1171
1172 77. When an address that was being verified routed to an smtp transport whose
1173     protocol was set to LMTP, the SMTP callout used EHLO instead of LHLO.
1174
1175 78. Installed eximstats 1.23 in the distribution.
1176
1177 79. Installed a new set of Cygwin-specific files from Pierre Humblet.
1178
1179 80. Added caching for callout verification.
1180
1181 81. Added datestamped logs and $tod_logfile.
1182
1183 82. When Exim starts up with root privilege, set a high limit (1000) for the
1184     number of files that can be open and the number of processes that can be
1185     created (on systems where this is possible), in case Exim is called from a
1186     restricted environment.
1187
1188 83. Minor bugfix in appendfile: when renaming failed for a file whose name was
1189     extended with a tag, the untagged name was shown in the error message.
1190
1191 84. If Exim's retry configuration was changed so as to bounce a certain
1192     delivery failure immediately, for example to bounce quota errors:
1193
1194       *  quota
1195
1196     and there were messages on the queue that had previously been deferred
1197     because of this error, Exim crashed when trying to deliver them in a queue
1198     run. Now it will make one more delivery attempt and bounce on failure.
1199
1200 85. Fixed an obscure problem that arose when (a) an address was redirected
1201     to itself, AND (b) the message was not delivered at the first attempt, AND
1202     (c) the pattern of redirection was changed at the next delivery attempt.
1203     When an address is redirected to the same address, Exim labels the new
1204     address as "2nd generation", and so on, in order to distinguish these
1205     homonym addresses from each other. Previously, it recorded the delivery of
1206     a homonym address as a delivery of the appropriate generation. This does
1207     not work if the generation numbers change at the next delivery attempt. The
1208     symptoms can be either duplicated deliveries, or missing deliveries,
1209     depending on the configuration.
1210
1211     A real-life example is a configuration that takes "unseen" copies of
1212     messages at certain times only, because an "unseen" router in effect does a
1213     redirection to a modified address (the unseen delivery) and to the original
1214     address (for normal delivery). Thus the normal delivery can be either the
1215     1st or 2nd generation, depending on whether or not the unseen router is
1216     triggered at the time of delivery.
1217
1218     The fix is not to record a delivery to a homonym address as such, but
1219     instead to record a delivery to the original address by the final
1220     transport. If the same address is subsequently routed to the same transport
1221     (whichever generation it now is), the delivery is discarded because it has
1222     already happened. Homonym addresses that are themselves redirected are now
1223     never recorded as "done", but non-homonym addresses are unaffected, so they
1224     are marked when all their children are complete (as before), thus saving
1225     an unnecessary subsequent expansion.
1226
1227     The fix causes more routing processing to be done when homonyms are in use
1228     and a message is not delivered at the first attempt, but this is not
1229     expected to be very common, and the extra processing isn't all that much.
1230
1231 86. Make sure Exim doesn't overrun the buffer if an oversize packet is received
1232     from a nameserver.
1233
1234 87. Added argument-expanding versions of hash, length, nhash, and substr
1235     expansions.
1236
1237 88. The API for Berkeley DB changed at release 4.1. Exim now supports this
1238     release.
1239
1240 89. When a host was looked up using gethostbyname() (or the more recent
1241     getipnodebyname() on IPv6 systems), Exim was not inspecting the error code
1242     on failure. Thus, any failure was treated as "host not found". Exim now
1243     checks for temporary errors, so the behaviour of "byname" and "bydns"
1244     lookups in this respect should be the same. However, on some OS it has been
1245     observed that getipnodebyname() gives HOST_NOT_FOUND for names for which a
1246     DNS lookup gives TRY_AGAIN. See also change 125 below.
1247
1248 90. Minor rewording of ACL error for attempted header check after RCPT.
1249
1250 91. When USE_GDBM was set, exim_dbmbuild wasn't working properly (still assumed
1251     NDBM compatible interface); similarly in dbmdb lookups when ownership
1252     was being tested.
1253
1254 92. If a Reply-To: header contained newlines and was used to generate
1255     recipients for an autoreply, the log line for the autoreply "delivery" had
1256     unwanted newlines. Such newlines are now turned into spaces.
1257
1258 93. When a redirect router that has the "file" option set discovers that the
1259     file does not exist (the ENOENT error), it tries to stat() the parent
1260     directory, as a check against unmounted NFS directories. If the parent
1261     can't be statted, delivery is deferred. However, it seems wrong to do this
1262     check if ignore_enotdir is set, because that option tells Exim to ignore
1263     the error "something on the path is not a directory" (the ENOTDIR error).
1264     In fact, it seems that some operating systems give ENOENT where others give
1265     ENOTDIR, so this is a confusing area.
1266
1267 94. When the rejectlog was cycled, an existing Exim process was not noticing,
1268     and was therefore not opening a new file.
1269
1270 95. If expansion of an address_data setting was forced to fail, and debugging
1271     was enabled, a debugging statement tried to print an undefined value
1272     instead of the string that was being expanded. This could cause a crash.
1273
1274 96. When Berkeley DB version 3 or higher is in use, a callback function is now
1275     set up to log DB error messages that are passed back.
1276
1277 97. The conditions in the Makefile for rebuilding the exim_dbmbuild utility
1278     were wrong, leading to failures to rebuild when it should have done.
1279
1280 98. Added -no_chown and -no_symlink options to the exim_install script. Also
1281     arranged for the environment variable INSTALL_ARG to be passed over
1282     from "make install".
1283
1284 99. Exim sets the IPV6_V6ONLY option on IPv6 listening sockets on operating
1285     systems that support it. The call to setsockopt() to do this had SOL_SOCKET
1286     instead of IPPROTO_IPV6 as its second argument (and so wouldn't work).
1287
1288 100. When a frozen message was timed out by timeout_frozen_after, the system
1289      filter was incorrectly being run for the message before it was thrown
1290      away.
1291
1292 101. If a filter used $thisaddress in an argument to a pipe command, its value
1293      was not inserted where expected, because the expansion of a pipe command
1294      does not happen till transport time, and $thisaddress was not being saved.
1295      It is now saved (along with $1, $2, etc, which were already being saved),
1296      and reinstated at transport time.
1297
1298 102. Added host grouping for randomizing to manualroute and smtp. A host list
1299      that is randomized by manualroute is never re-randomized by smtp. Two
1300      host lists that are randomized by manualroute are now treated as "the
1301      same" when checking for possible multiple deliveries in one SMTP
1302      transaction (this was always true for MX'd host lists).
1303
1304 103. Added "randomize" and "no_randomize" options to manualroute.
1305
1306 104. Added ${hmac expansion item.
1307
1308 105. When compiling with gcc, make use of its facility for checking printf-like
1309      function calls (debug_printf and smtp_printf). This would have found the
1310      problem in 95 above. It actually found a number of missing casts to (int)
1311      in debug lines, and one spurious additional argument.
1312
1313 106. Created an ACKNOWLEDGEMENTS file, which I will endeavour to update in
1314      future.
1315
1316 107. Minor modification to Makefile: when a command that starts off "cd xxx;"
1317      is followed by another command (on the next line), put the first one in
1318      parentheses so that if a "clever" make program amalgamates them, the
1319      change of directory is turned off when it should be.
1320
1321 108. If log_timezone is set true, the timestamps in log files now include the
1322      timezone offset. A new variable $tod_zone contains the offset. The exigrep
1323      utility has been updated to handle timestamps with offsets. The eximstats
1324      version included with this release (1.23) has been patched to handle
1325      timestamps with offsets. There is also a new -utc option that specifies
1326      the timestamps are in UTC. The Exim monitor has been modified so that it
1327      omits the zone offset from its display.
1328
1329 109. If the expansion of an errors_to option is forced to fail, the option is
1330      ignored.
1331
1332 110. Added $load_average.
1333
1334 111. Added router_home_directory generic router option.
1335
1336 112. Exim crashed on an attempt to check senders or sender domains in an ACL
1337      other than after RCPT or DATA. It's now a temporary error.
1338
1339 113. \r was omitted before \n in the SMTP failure response for EHLO/HELO
1340      argument checking.
1341
1342 114. On receiving EHLO or HELO, Exim was resetting its state before checking
1343      the validity of the command. However, RFC 2821 says that the state should
1344      not be changed if an invalid EHLO/HELO is received, so Exim has been
1345      changed to conform. This applies mainly when there is more than one
1346      EHLO/HELO command in a session.
1347
1348 115. When an Exim root process wrote to a log file, and the log file did not
1349      already exist, Exim used to create it as root, and then change its
1350      ownership to exim:exim. This could lead to a race condition if several
1351      processes were trying to log things at the same time; this happens
1352      especially when the exiwhat utility is used. I've changed things so that,
1353      if an Exim root process needs to create a log file, it does so in a
1354      subprocess that is running as exim:exim.
1355
1356 116. When running filter tests (-bf and -bF) Exim now changes the current
1357      directory to "/" so that any assumptions about a particular current
1358      directory are false.
1359
1360 117. The appendfile transport was doing the quota_threshold check before
1361      actually writing the message. However, the act of writing the message
1362      could make it longer by the addition of prefix, suffix, or additional
1363      headers. This meant that quota warning could be missed if the basic length
1364      of a message kept the mailbox below the threshold, but the transport
1365      additions took it over. The warning threshold check is now done after
1366      writing the message, when an accurate size is known.
1367
1368 118. If all verifications for verify = header_sender deferred, the log was
1369      "temporarily rejected after DATA", without saying why. Now it adds "all
1370      attempts to verify a sender in a header line deferred".
1371
1372 119. Added message_id_header_domain option.
1373
1374 120. Ignore message_id_header_text forced expansion failure.
1375
1376 121. Typos: "uknown" in acl.c; missing NULL initialized in drtables.c.
1377
1378 122. When return_size_limit was set greater than zero but smaller than an Exim
1379      transport buffer size (so that only one buffer would be written), a
1380      message that was longer than the limit could be omitted from the bounce
1381      entirely under some circumstances. In other cases, the final buffer full
1382      before truncation could be omitted.
1383
1384 123. The inode variables in log.c were of type int with -1 for unset; they
1385      have been changed to ino_t with 0 for unset.
1386
1387 124. There are two Makefiles for NetBSD (for different object formats). They
1388      were originally supplied in a format where one .included the other. The
1389      problem with this has finally surfaced: when processing the Makefile to
1390      build config.h, the inclusion isn't seen. The easy way out has been taken:
1391      there are now two fully independent files. At the same time, HAVE_IPV6 has
1392      been added to both of them.
1393
1394 125. Changed the default way of finding an IP address in both the manualroute
1395      and queryprogram routers. Exim now does a DNS lookup; if that yields
1396      HOST_NOT_FOUND, it tries calling getipnodebyname() (or gethostbyname()).
1397      See also change 89 above.
1398
1399 126. Fixed a race bug in the loop that waits for a delivery subprocess to
1400      complete. After reading all the data from, and then closing, the pipe, it
1401      assumed that a call to waitpid() for the known pid would always return
1402      status for that process. An unfortunately timed signal (e.g. SIGUSR1 from
1403      exiwhat) could cause waitpid() to return -1/EINTR instead. The effect of
1404      this was to remain in the loop and call FD_SET() with an argument of -1.
1405      On Solaris it caused a crash; on other systems it might have looped.
1406
1407 127. If an ACL that was read from a file was used in more than one message in a
1408      single SMTP transaction, Exim could crash or misbehave in arbitrary ways.
1409      The problem was that the ACL was remembered in memory that was thrown away
1410      at the end of the first message. In fixing this, I've done a bit of
1411      refactoring of the way memory allocation works, to provide a non-malloc
1412      allocator for small blocks of data that must be kept for the life of the
1413      process. There's a new function store_get_perm() and I've reintroduced a
1414      second storage pool (previously dropped on the 3->4 conversion). A number
1415      of instances of malloc calls for small amounts of memory have been changed
1416      to use this instead. It might be a tad more efficient. Then again, it
1417      might not...
1418
1419 128. A similar problem to 127: memory corruption could occur for multiple
1420      messages in one SMTP connection if the data from DNS black list lookups
1421      was being used in log or user messages, e.g. references to $dnslists_text.
1422
1423 129. Blanks lines and comments are now ignored in ACLs that are read from
1424      files.
1425
1426 130. Two instances of missing \n in debug output.
1427
1428 131. The new debugging tag +timestamp causes a timestamp to be added to each
1429      debug output line.
1430
1431 132. Some debug information is written in multiple calls to debug_printf(),
1432      with a newline only on the last one. When debugging multiple simultaneous
1433      processes, the pid was added to each debug text, and for this reason, a
1434      newline was always forced. Now Exim buffers up debug output until the
1435      newline is reached, which makes things look much tidier. Also, if there
1436      are internal newlines and prefix data such as a pid or timestamp are being
1437      added, the prefix is inserted at the internal newlines.
1438
1439 133. When running in the test harness, arrange to overwrite all memory that
1440      is released or freed, so that bugs are more easily found. This picked up
1441      the following bug:
1442
1443 134. Expansion error messages were left in released store, so could have been
1444      overwritten - but in fact most are used immediately, before this happened.
1445
1446 135. A list of configuration files can be given; the first one  that exists is
1447      used.
1448
1449 136. Moved the code that ensures that newly-created hints databases and their
1450      lockfiles are owned by exim:exim so that it runs before the test for
1451      successful opening, because a case was reported where the file itself was
1452      created, but the DBM library returned an opening error.
1453
1454 137. If an address is redirected to just one child address, verification
1455      continues with the child address. However, if verification of the child
1456      failed because of (for example) a :fail: redirection, the error message
1457      did not get passed back as it would have been had the original address
1458      failed. The error information is now passed back for both fail and defer
1459      responses.
1460
1461 138. Added $rcpt_defer_count and $rcpt_fail_count.
1462
1463 139. Added "rejected_header" log selector.
1464
1465 140. Added the cannot_route_message generic router option.
1466
1467 141. Change 87 above introduced a bug in the expansion of substrings when the
1468      offset was greater than the length of the string, for example
1469      ${substr_1:}. Exim crashed instead of returning an empty string.
1470
1471 142. Added extra features to ACLs: the "drop" and "defer" verbs, and the
1472      "delay" and "control" modifiers (the latter with "freeze" and
1473      "queue_only").
1474
1475 143. If Exim failed to create a log file, it used to try to create the superior
1476      directories only if the logs were being written in the spool directory.
1477      Now it tries in all cases, but always from a process running as the exim
1478      user.
1479
1480 144. Added $authentication_failed.
1481
1482 145. Added $host_data for use in ACLs.
1483
1484 146. Added new ACLs for non-SMTP messages, SMTP connection, MAIL, and STARTTLS.
1485
1486 147. Added a number of new features to the local_scan() API:
1487        Access to debug_printf() and the local_scan debug selector
1488        Direct access to the message_id variable
1489        LOCAL_SCAN_REJECT_NOLOGHDR and LOCAL_SCAN_TEMPREJECT_NOLOGHDR
1490        Access to store_get_perm() and store_pool (see 127 above)
1491        Access to expand_string_message
1492        Option settings in the main configuration file
1493        LOCAL_SCAN_ACCEPT_FREEZE and LOCAL_SCAN_ACCEPT_QUEUE
1494        LOG_PANIC to write to the panic log
1495        Access to host_checking
1496        Supporting functions lss_match_xxx() for matching lists
1497
1498 148. Minor security problem involving pid_file_path (admin user could get root)
1499      has been fixed.
1500
1501 149. When an ACL contained a sender_domains condition with a reference to a
1502      named domain list, the result of the check was not being cached (an
1503      oversight).
1504
1505 150. Allowed for quoted keys in lsearch lookups; this makes it possible to have
1506      whitespace and colons in keys.
1507
1508 151. Added wildlsearch lookup.
1509
1510 152. Yet another new set of configuration files for Cygwin from Pierre Humblet.
1511
1512 153. Ensure that log_file_path contains at most one instance of %s and one
1513      instance of %D and no other % characters.
1514
1515 154. Added $tls_certificate_verified.
1516
1517 155. Now that the list of lookup types has got so long (and more are in
1518      prospect) arrange to search it by binary chop instead of linear search.
1519
1520 156. Added passwd lookup.
1521
1522 157. Added simple arithmetic in expansion strings.
1523
1524 158. Added the ability to vary what is appended for partial lookups.
1525
1526 159. Made base 64 encode/decode functions available to local_scan.
1527
1528
1529 Exim version 4.10
1530 -----------------
1531
1532  1. Added HAVE_SA_LEN=YES to the OS/Makefile-Darwin file, because it needs it
1533     (unsurprising, as it's based on FreeBSD).
1534
1535  2. Removed the HTML versions of the PCRE and pcretest documentation from the
1536     distribution tarbundle, and instead included them in the HTML tarbundle,
1537     linked to the overall index file.
1538
1539  3. The code for computing load averages was broken in 64-bit Solaris.
1540
1541  4. Make the default ACL refuse local parts that start with a dot.
1542
1543  5. LDAP binds with an empty password are considered anonymous regardless of
1544     the username and will succeed in most configurations. Exim has been changed
1545     so that the LDAP authentication (the ${if ldapauth... condition) always
1546     fails when an empty password is used.
1547
1548  6. Remove quoting from rbl_domains when used in an ACL by the convert4r4
1549     script.
1550
1551  7. A lookup entry in a list that had spaces after the lookup type, e.g.
1552     "lsearch; /etc/relaydomains" was including the space as part of the file
1553     name.
1554
1555  8. Give an error if EXIM_USER or EXIM_GROUP contains control characters (it
1556     happened when somebody had CRLF terminations in Local/Makefile, which
1557     messed up the "unknown user" error message).
1558
1559  9. Ensure recipient address appears in log line for internal pipe problems
1560     during redirection.
1561
1562 10. Tidies to code for calls to fork(): (a) 3 typos of "<=" that should have
1563     been "<" (but would have no actual effect). (b) 2 cases of fork() failures
1564     not being logged: during -M for multiple messages, and for auto-delivery
1565     of incoming messages.
1566
1567 11. A reference to any header line that contains addresses (e.g. $h_to:) caused
1568     a crash if the header was empty. Change 46 for 4.05 introduced this bug.
1569
1570 12. If a system filter file was defined as a non-absolute path, but system_
1571     filter_user was undefined, Exim's behaviour was undefined. It could, for
1572     example, discard all deliveries, thinking the system filter had overridden
1573     them all. Delivery is now deferred, with a message written to the panic
1574     log.
1575
1576 13. If a redirection file (or system filter file when system_filter_user was
1577     set) was defined as a non-absolute path containing no slash characters,
1578     Exim crashed.
1579
1580 14. Added $rcpt_count, containing the number of RCPT commands received during
1581     an SMTP transaction. This differs from $recipients_count when some of the
1582     RCPTs are rejected.
1583
1584 15. Added $pid, containing the pid of the current process.
1585
1586 16. Fixed uninitialized variable warning in eximstats for relayed messages when
1587     there was no sending host name (logged as H=[n.n.n.n]). There's no change
1588     of output.
1589
1590 17. The exiqusumm script failed horribly if it encountered a message that had
1591     been on the queue for 100 days or more.
1592
1593 18. Added the message_logs option for suppressing the writing of message logs.
1594
1595 19. Allow local_scan() to change the errors_to setting on recipient addresses.
1596     (This was made trivially possible because of change 10 in 4.03.)
1597
1598 20. Convert4r4 changed: if forbid_pipe is set on a forwardfile director, also
1599     set forbid_filter_run on the generated redirect router.
1600
1601 21. In the Makefile, $(INCLUDE) was preceding the -I. item that refers to
1602     Exim's own include files. This caused a conflict with an external library
1603     that also happened to have a config.h file. Exim saw the wrong file, and
1604     chaos ensued. I've moved the -I. item in the relevant lines so that it
1605     comes before $(INCLUDE).
1606
1607 22. Added $acl_verify_message to contain any existing user message when
1608     expanding the "message" modifier in an ACL.
1609
1610 23. Changed the default argument for egrep when called in exiwhat to find
1611     Exim processes. It is now ' exim( |$$|-)' instead of ' exim( |$$)' so that
1612     it works on OS where the true file name appears.
1613
1614 24. In the plaintext authenticator, server_prompts was not being expanded, as
1615     documented. It now is.
1616
1617 25. The exinext script was outputting in an incorrect format for routing
1618     delays. It said "deliver" when it should have said "route", and the layout
1619     of the text was screwed up. In fact, "deliver" is not the right word
1620     anyway. I've changed it to "transport". Also removed redundant code for
1621     "directing" delays, because these can't occur in Exim 4.
1622
1623 26. Fixed some problems concerned with retrying address errors in remote
1624     deliveries:
1625
1626       (a) I'd overlooked temporary address errors, and assumed that all the
1627           retry items would be for host errors, and therefore on the first
1628           address when multiple RCPTs were involved. Consequently, no retry
1629           record was written for second and subsequent addresses if they
1630           received a 4xx error. Thus, these addresses wouldn't be delayed
1631           after such a delivery failure.
1632
1633       (b) A temporary address error causes a routing delay; when the address
1634           is eventually tried again, and routing succeeds, the retry record is
1635           flagged for deletion. If the address gets another temporary error,
1636           the retry record got updated, and then deleted. Thus, temporary
1637           address errors were not being delayed and would be tried on every
1638           queue run.
1639
1640 27. A minor code tidy for the CRAM-MD5 authenticator.
1641
1642 28. Some OS have a command to select processes by the name of the command they
1643     are running, and send a signal to them. Linux and FreeBSD have "killall";
1644     Solaris has "pkill" (it also has "killall", but that does something
1645     disastrously different). Using such a command makes "exiwhat" more
1646     efficient, and reduces the chances of it trying to signal a non-existent
1647     process. There are now two build-time parameters, EXIWHAT_MULTIKILL_CMD and
1648     EXIWHAT_MULTIKILL_ARG, which can be set to enable this feature to be used.
1649     They are defined in the OS-specific files for Linux, FreeBSD, and Solaris.
1650     See OS/Makefile-Default for more details.
1651
1652 29. As part of tidying up for 28, changed the name of the build-time parameter
1653     EXIWHAT_KILL_ARG to EXIWHAT_KILL_SIGNAL so that its name makes more sense
1654     when used in both kinds of exiwhat processing.
1655
1656 30. By default, the daemon doesn't write a pid file if -bd is not used (i.e. if
1657     only -q is used). The -oP didn't override this - it was ignored. It now
1658     overrides the default and causes a pid file to be written.
1659
1660 31. The values of $local_part, $domain, etc. were not being set during the
1661     expansion of shadow_condition in a local transport.
1662
1663 32. The convert4r4 script failed when macros that had continuation lines were
1664     present in the Exim 3 configuration file. It inserted junk lines into the
1665     output and gave uninitialized variable errors.
1666
1667 33. The convert4r4 script discards (with a comment) a setting of "rewrite" on
1668     a smartuser director that has no setting of new_address when it turns it
1669     into an "accept" router.
1670
1671 34. When an alias generated an address with a single-component domain, and
1672     routing that domain caused it to be widened, Exim remembered only that it
1673     had delivered to the widened domain. If any other addresses were deferred,
1674     so that another delivery attempt happened later, Exim re-delivered to the
1675     widened address, because it checked only the original address. When this
1676     kind of widening happens, Exim now checks for previous delivery.
1677
1678 35. A delivery was silently discarded under the following specific
1679     circumstances:
1680       . The original address is x@a.b.c, where a.b.c is the local host;
1681       . a.b.c is recognized as a local domain, and the address is redirected
1682         to x@a;
1683       . a is not recognized as a local domain, causing the address to be
1684         processed by a dnslookup router;
1685       . the router widens the address to a.b.c, routes it, and discovers it
1686         is the local host.
1687     Exim realized that because the domain had been widened, it might have
1688     become a local domain, so it arranged to re-route from scratch, using the
1689     new domain. However, because the original address was the same address,
1690     it thought it had already dealt with it.
1691
1692 36. A space at the start of an LDAP query in an expansion (after the opening
1693     curly) was provoking a syntax error.
1694
1695 37. A syntax error in the data of an ldapauth expansion caused the condition to
1696     be false without an LDAP query even being tried. Now it causes the
1697     expansion to fail.
1698
1699 38. Ensure that an incomplete config.h is removed when the buildconfig program
1700     gives an error. Otherwise, if the error is a non-existent Exim user, and
1701     the admin fixes this by creating the user (and not modifying any files),
1702     Exim will try to use the broken config.h next time.
1703
1704 39. A call with an argument of the form "-D=xxxx" (i.e. omitting the macro
1705     name) caused Exim to loop. It now reports an error.
1706
1707 40. If an ACL tested an address for being in a named domain list (e.g.
1708     +relay_domains) and then called for recipient verification, and the
1709     recipient was rewritten, the cache for remembering matching domain lists
1710     was not being cleared after the rewrite, leading to potential routing (and
1711     therefore verification) errors. Furthermore, the rewritten address would
1712     (incorrectly) have been used for any subsequent address checking within
1713     the ACL.
1714
1715 41. If an address such as a%b@c was processed using the "percent hack" and then
1716     transmitted over SMTP, Exim was sending "RCPT TO:<a%b@c>" instead of
1717     "RCPT TO:<a@b>".
1718
1719 42. A revised Makefile-CYGWIN file from Pierre Humblet.
1720
1721 43. If local_scan() rejected a -bS message, it wasn't handling the error in the
1722     way -bS errors should be handled.
1723
1724
1725 Exim version 4.05
1726 -----------------
1727
1728  1. In the log display in Eximon, put the insert point (caret) at the start of
1729     the last line instead of at the end, because this stops unwanted horizontal
1730     scrolling when certain X libraries are used.
1731
1732  2. A malformed spool file with an incorrect number of recipients (which
1733     should never occur, of course) could cause eximon (and probably exim) to
1734     crash.
1735
1736  3. Updated Cygwin Makefile and os.h (minor tweaks).
1737
1738  4. Setting allow_domain_literals=true was not allowing domain literal
1739     addresses in the -f command line option.
1740
1741  5. Added debugging output for removing and adding header lines at transport
1742     time.
1743
1744  6. On systems where SA_NOCLDWAIT is defined, changed from using signal(
1745     SIGCHLD, SIG_DFL) to using sigaction(), with flags explicitly set zero, to
1746     ensure that SA_NOCLDWAIT is definitely off. This fixes a bug in AIX where
1747     subprocesses were disappearing without being turned into zombies for Exim
1748     to reap. There was a previous report of the error "remote delivery process
1749     count got out of step" on a Linux box that was never resolved. It is
1750     possible that this change fixes that too.
1751
1752  7. Other applications that support IPv6 have been coded to choose IPv6
1753     addresses in preference to IPv4 addresses where possible. This is
1754     encouraged, in order to speed up the use of IPv6. Exim has now been changed
1755     to do likewise when it looks up IP addresses from host names. This applies
1756     both to hosts that have more than one IP address, and to MX records with
1757     equal preference values when the hosts they point to have both IPv4 and
1758     IPv6 addresses. Within one preference value, Exim will try all the IPv6
1759     addresses before any IPv4 addresses, even when some of the IPv4 addresses
1760     belong to hosts that also have IPv6 addresses.
1761
1762  8. When Exim sent HELO after EHLO was rejected, or when it sent a second EHLO
1763     after starting a TLS session, it used the primary host name as the
1764     argument, instead of the expansion of the helo_data option.
1765
1766  9. Exim was failing to batch addresses for local delivery when errors_to was
1767     set on the router to the same string for each address, in the case when the
1768     string involved some kind of expansion (that ended up with the same value
1769     each time). If the string was fixed (i.e. no expansion) the batching was
1770     not blocked. In other words, I was testing the addresses of the strings but
1771     forgetting to compare the content. The same problem was not present for
1772     remote deliveries, but the code was written out instead of using a
1773     subroutine that now exists for this purpose, so I tidied that code.
1774
1775 10. When Exim passes a connected TCP/IP socket to a new Exim process in order
1776     to deliver another message on the same connection, it closes down TLS,
1777     because it can't pass on the state information that is required by the
1778     OpenSSL package. The new process then tries to start up TLS again.
1779     Unfortunately, not all servers handle this - and, it has to be said, it is
1780     a bit of a dubious interpretation of the RFC. (Exim as a server copes OK,
1781     needless to say.) The problem is that the server may just die or give an
1782     invalid response, causing a retry delay to occur. The option
1783     hosts_nopass_tls was invented to help with this, but an automatic way of
1784     testing has been invented. What now happens is that Exim sends a new EHLO
1785     after shutting down TLS, before passing the socket on. This in itself
1786     reduces the dubiousness of the procedure. If there isn't an OK response,
1787     Exim doesn't try to pass the socket on.
1788
1789 11. There was inconsistency in the way failures to set up TLS sessions in the
1790     smtp transport were handled when the host was not in hosts_require_tls.
1791     It deferred for 4xx responses to STARTTLS, but tried in clear if the actual
1792     TLS negotiation failed. It now does the same thing in both cases, and what
1793     this is can be controlled by the new option tls_tempfail_tryclear. This
1794     defaults true, causing a retry in clear to occur. If it is set false, these
1795     kinds of temporary failure cause a defer (for that host; if there are
1796     other hosts, they are tried).
1797
1798 12. Tidying. When starting up a new delivery process to deliver another message
1799     over an existing SMTP connection, pass over the IP address as well as the
1800     host name. This saves having to get the IP address from the socket.
1801
1802 13. Added "#define base_62 36" to OS/os.h-Darwin because the MacOS X operating
1803     system has case-insensitive file names.
1804
1805 14. Tidies to rewriting code: (1) It was getting an unnecessarily large block
1806     of memory for a rewritten header. (2) Removed some unnecessary debugging
1807     code that just duplicated log output.
1808
1809 15. In an expansion like "${if <condition> {${mask:xxxx}}{yyyy}}" Exim still
1810     tried to perform the masking operation even when the condition was false
1811     and the yield was "yyyy". This could fail when "xxxx" wasn't a valid string
1812     for the masking operation. Some other operators (e.g. base62) could fail in
1813     a similar way. All string operations are now skipped when processing the
1814     unused substring of a condition.
1815
1816 16. If a verification of a sender address in a header (caused by verify =
1817     header_sender in an ACL) caused the address in the header to be rewritten
1818     (typically because a DNS lookup had widened the domain), the newline at the
1819     end of the header got lost, thereby causing two headers to be run together.
1820     Sometimes, but not always, this caused a "spool format error".
1821
1822 17. A user wanted to use "save" in a filter file with a non-absolute path, and
1823     to set file_transport to a non-appendfile transport that made use of
1824     $address_file for its own purposes. This didn't work because Exim was
1825     distinguishing between file and autoreplies by the leading '/' of the
1826     former. It now checks for the leading '>' of the latter instead.
1827
1828 18. The "accept" router was forcing log_as_local instead of just defaulting it.
1829
1830 19. Exim crashed while verifying a recipient in an ACL if the address was
1831     verified by a dnslookup router that widened the domain.
1832
1833 20. When checking the parameters returned from an ident call, Exim was assuming
1834     that the format would be textually identical to the values it sent,
1835     including the white space. This is not always the case, causing Exim to
1836     discard returned ident data that it should have been accepting.
1837
1838 21. Typo (space missing) in "failed to expand condition" error message.
1839
1840 22. The option of specifying an individual transport in a route_data or
1841     route_list option of the manualroute router wasn't working. Such settings
1842     were being completely ignored.
1843
1844 23. The memory management was poor when building up a string from a lookup that
1845     retrieved a large number of data items that had to be concatenated, for
1846     example, an alias lookup in a database that returned thousands of
1847     addresses. In extreme cases, this could grind the host to a halt. (Compare
1848     change 8 for 4.00, which was a similar effect.) Two changes have been made
1849     to improve matters: (a) For longer strings, it extends them in bigger
1850     chunks, thus requiring fewer extensions. (b) It is now able to release some
1851     unwanted memory when a string is copied out of it into a larger block.
1852
1853 24. There was a small error in the memory sizes quoted when -d+memory was used
1854     and emptied memory blocks were released.
1855
1856 25. When helo[_try]_verify was set, Exim crashed if the reverse DNS lookup gave
1857     a temporary error when trying to look up the host name. It now tries to
1858     check with a forward DNS lookup (as it does when the reverse lookup can't
1859     find a name). For helo_verify, a temporary error is now given if
1860     verification failed, but the host name lookup gave a temporary error. (As
1861     before, a permanent error is given if there is no host name available.)
1862
1863 26. When checking quotes for maildir++ format, if the directory name was given
1864     with a trailing slash in the "directory" option of the appendfile
1865     transport, Exim got the quota calculation wrong because it scanned the
1866     final directory instead of the parent directory.
1867
1868 27. The "quota_xxx" error facility for retry rules was broken in Exim 4 if
1869     the mailbox had not been read for more than approximately 10 hours.
1870
1871 28. If a router with "unseen" had a setting of address_data, the value was not
1872     passed on to subsequent routers for the continuing processing of the
1873     address. It now is.
1874
1875 29. If a daemon was started with (e.g.) -qff15m, it omitted the second 'f' when
1876     starting queue runners. Likewise, if the flags included 'i', this was
1877     omitted.
1878
1879 30. Some operating systems log warnings if exec() happens without the standard
1880     input, output, and error file descriptors existing. The worry is that the
1881     called program will open some file which will be allocated one of these
1882     fds. Another bit of code might assume it can write an error message to
1883     stderr, or whatever. Exim was calling itself to regain privilege for
1884     delivery without these fds set, thus provoking the warning. Of course, it
1885     didn't make use of them itself, but the exposure was there for libraries it
1886     might be using. The code has been changed to ensure that, if any of the
1887     file descriptors 0, 1, or 2 does not exist at the time of a call to exec(),
1888     they are opened to /dev/null.
1889
1890 31. A delivery process could loop under the unusual combination of the
1891     following circumstances:
1892       (1) A delivery process had envelope_to_add set for its transport.
1893       (2) The delivery was for a child address of an envelope address that
1894           also had another child.
1895       (3) This other child had been discarded because it was a duplicate of a
1896           second envelope address.
1897       (4) The second envelope address had generated a child that was discarded
1898           because it was a duplicate of the first envelope address.
1899
1900 32. The -bp option was failing to notice delivered addresses that were in the
1901     -J file but had not yet made it into the -H file. (This got broken between
1902     Exim 3 and Exim 4.)
1903
1904 33. If "query" or "queries" in aliasfile director, or "route_query" or
1905     "route_queries" in a domainlist router were enclosed in quotes, the
1906     convert4r4 script was not removing the quotes before inserting the query
1907     into an expansion string, leading to invalid queries within the string.
1908
1909 34. If more than two addresses were being delivered in a batch (either local or
1910     remote deliveries), and they all had the same, non-empty value for
1911     $self_hostname, but had different domains, Exim crashed. (This is rare,
1912     because the use of "self=pass", which is the only way $self_hostname gets
1913     set, is rare.)
1914
1915 35. If $message_headers was used in a context where there were no headers (e.g.
1916     while verifying an address before receiving a message), it caused an
1917     "unknown variable" error. Now it just returns an empty string.
1918
1919 36. Exim was not diagnosing missing time units letters in times on retry
1920     rules. It was treating such malformed times as "-1", which caused the rules
1921     to misbehave.
1922
1923 37. Added some debugging output to the CRAM-MD5 server code.
1924
1925 38. In the appendfile transport, check for a file name supplied by redirection
1926     by checking for "not pipe and not autoreply" instead of looking for a
1927     leading '/' in the "address".
1928
1929 39. The os.h file for Darwin defined CRYPT_H, which apparently is wrong.
1930
1931 40. The "condition" condition in ACLs has been tightened up. Formerly, anything
1932     other than an empty string, "0", "no" or "false" was treated as "true". Now
1933     it insists on "yes", "true", or a non-zero number.
1934
1935 41. Change 22 of 4.02 has been improved; somebody mailed me the correct code
1936     to get an error message when ldap_result() doesn't set a result.
1937
1938 42. Update convert4r4 to recognize "ldap:" in require_files, and double the
1939     colon.
1940
1941 43. Added "protocol violation" to the "SMTP synchronization" error message, to
1942     make it clearer what it is complaining about.
1943
1944 44. Change 26 of 4.03 was incomplete. The same problem could arise if a lookup
1945     failed while checking the pre-conditions of a router that was subsequently
1946     run. This can happen for negated conditions such as "domains = !<lookup>".
1947
1948 45. Somebody managed to set up a configuration that crashed buildconfig such
1949     that it left a half-built config.h but did not stop the build process. I
1950     can't reproduce it, but I have added a check after building config.h to
1951     test for the presence of its last line ("/* End of config.h */").
1952
1953 46. Added a .PHONY target to the Makefile to be tidy for GNU make. (It should
1954     be ignored by other versions).
1955
1956 45. When Exim uses Berkeley DB version 3 or 4 to create a DBM file, it creates
1957     it in hashed format. Previously, it opened these files for reading in the
1958     same format. Now it opens them as "unknown", which means that other formats
1959     can be accommodated when using DB files for auxiliary data.
1960
1961 46. When concatenating header lines that may contain lists of addresses (From:,
1962     To:, etc.) as a result of references to $h_from: etc., a comma is now
1963     inserted at the concatenation point. Without it, the use of "if
1964     foranyaddress" fails on such headers, which is dangerous.
1965
1966 47. The code for ratelimiting MAIL commands was triggering on the count of
1967     messages received, instead of the number of MAIL commands (which is not the
1968     same thing if no message is accepted in a transaction). The smtp_accept_
1969     max_per_connection limit has also been changed to use the count of MAIL
1970     commands instead of the count of messages accepted.
1971
1972 48. There was a typo in the exiwhat script which broke it if the esoteric
1973     CONFIGURE_FILE_USE_NODE option was in use.
1974
1975
1976 Exim version 4.04
1977 -----------------
1978
1979  1. Fix 10 for 4.03 had a bug in it, which could cause problems when converting
1980     from an earlier 4.xx release with delayed "one_time" messages on the spool.
1981     4.03 incorrectly complains about spool format errors (and refuses to
1982     process these messages).
1983
1984  2. Changed the status of the text widgets in the monitor from Append to Edit,
1985     because this matters on some versions of X.
1986
1987  3. Change 22 for 4.03 turns out to be misguided. Luckily it is controlled by
1988     a compile-time macro. I have removed the settings from OS/os.h-Linux that
1989     made it try to use these functions.
1990
1991
1992 Exim version 4.03
1993 -----------------
1994
1995  1. Change 12 for 4.02 overlooked one case where 256 should have been replaced
1996     by MAX_LOCALHOST_NUMBER.
1997
1998  2. Timeouts (etc) in dnslist lookups were not behaving as documented; they
1999     were deferring (causing 4xx errors) instead of behaving as if the host was
2000     not in the list. This has been fixed. In addition, some new special items
2001     may appear in dns lists, to control what happens in this case. The items
2002     are +include_unknown, +exclude_unknown, and +defer_unknown.
2003
2004  3. Added #include <unix.h> to OS/os.h-QNX because it was reported that this
2005     was needed, in order to get O_NDELAY.
2006
2007  4. Added #define BASE_62 36 to OS/os.h-Cygwin.
2008
2009  5. Change 8 for 4.02 overlooked the fact that "directory" need not be set if
2010     the directory name is coming from a filter or forwarding file. The check
2011     has now been moved from initialization time to run time. Thus, it happens
2012     later, but it still helps to diagnose the problem.
2013
2014  6. The file direct.c had been accidentally left in the distribution.
2015
2016  7. When a new process was forked to deliver another message down an existing
2017     SMTP connection, a pipe file descriptor was accidentally left open. This
2018     meant that if there was a long chain of such processes, the number of open
2019     file descriptors increased by one for each process, and if there were
2020     sufficient, the limit of open descriptors could be reached, causing various
2021     problems.
2022
2023  8. When an address was being checked with -bt and the routing involved an
2024     errors_to setting whose address verification also involved an errors_to
2025     setting, Exim got into a verifying loop. It shouldn't verify an errors_to
2026     setting when already verifying, but got this wrong if it started from -bt.
2027
2028  9. Tidied up some compiler warnings when compiling with TCP wrappers.
2029
2030 10. When a child address was promoted to a toplevel address by "one_time" after
2031     a deferred delivery, it was not remembering any "errors_to" address that
2032     was set by the routers that processed the original address. Consequently,
2033     the subsequent delivery had (incorrectly) the original sender address in
2034     the envelope. Exim now remembers the "errors_to" address with the new
2035     toplevel address and reinstates it for the next delivery.
2036
2037 11. When Exim received a message other than from the daemon, there were two
2038     situations in which it did not re-exec itself for delivery: when it was
2039     running as root, or when it was running in an unprivileged mode. This was
2040     an attempt to save some resources (very early Exims ran as root more often)
2041     but has turned out to be pretty rare. A bug has been discovered in this
2042     case: if the incoming message was on a TLS session (from inetd, for
2043     example), but the outgoing delivery was on an unencrypted SMTP connection,
2044     Exim got confused. The effect was minimal: it sent two EHLO commands, but
2045     otherwise worked. Multiple EHLOs are not an error, according to the RFCs,
2046     but there was at least one broken MTA that objected. This error would have
2047     occurred only when synchronous delivery (-odi or -odf) was specified.
2048
2049     While sorting this out, I have abandoned the logic that did a delivery
2050     without forking in the interests of simplicity. This was an even rarer
2051     case: it only happened when Exim was running as root or in an unprivileged
2052     mode AND synchronous delivery was specified.
2053
2054 12. Change references to /bin/rm in the Makefile to plain rm.
2055
2056 13. If EXIM_PERL was set in Local/Makefile, but PERL_COMMAND was set to a
2057     command that was not a file, or if it was set to a non-existent file,
2058     the build process carried on trying to build Perl support, but without the
2059     relevant variables for the Perl libraries, etc., which is disastrous. In
2060     fact, the build process shouldn't have been using PERL_COMMAND; that is a
2061     value for screwing into utility scripts. The build process assumes a
2062     suitable PATH for things like rm, mv, etc., which have xxx_COMMAND
2063     variables for scripts. So I've changed it to use just "perl". It now bombs
2064     out if "perl --version" doesn't produce some output.
2065
2066 14. Changed the #includes in perl.c for the Perl headers to use <> instead of
2067     "" because this is apparently better usage.
2068
2069 15. Added local_scan_timeout to apply a timeout to local_scan().
2070
2071 16. Recognize IPv6 addresses as IP addresses, even when Exim is not compiled
2072     with IPv6 support.
2073
2074 17. When verifying a HELO/EHLO name, Exim was not checking the alias host names
2075     it obtained from calling gethostbyaddr(). In many cases, this didn't cause
2076     any unwanted rejections because as a last resort Exim does a forward lookup
2077     on the HELO name to see if any of its IP addresses matches. But it fixing
2078     the bug saves the unnecessary additional lookup.
2079
2080 18. Added "domains = ! +local_domains" to the commented-out ipliteral router in
2081     the default configuration.
2082
2083 19. Default sender_host_aliases to an empty alias list, instead of NULL. This
2084     is just for tidiness; the way it was coded, it didn't cause any problems.
2085
2086 20. Added -tls-on-connect, which starts a TLS session without waiting for
2087     STARTTLS. This supports older clients that used a different port.
2088
2089 21. Added support for the Cyrus pwcheck daemon.
2090
2091 22. Arranged to use getipnodebyaddr() instead of gethostbyaddr() in systems
2092     with IPv6 support that have this function, because gethostbyaddr() doesn't
2093     work for IPv6 addresses on all systems (it does on some).
2094
2095 23. Header lines added by "warn" statements in the ACL for RCPT are saved up to
2096     be added after the message's header has been received. Previously, Exim was
2097     saving up all added headers, from both RCPT and DATA, until the very end.
2098     Now it adds those from RCPT before the DATA ACL is obeyed, so that they can
2099     be accessed from within the DATA ACL.
2100
2101 24. Changed TLS initialization to use SSL_CTX_use_certificate_chain_file()
2102     instead of SSL_CTX_use_certificate_file(). This means that the file can
2103     contain the whole chain of certificates that authenticate the server.
2104
2105 25. Updated convert4r4 to check for colons that look as if they are part of
2106     expansion items in require_files lists (e.g. ${lc:xxxx}). In Exim 3, the
2107     whole list was expanded before splitting up, but in Exim 4, the splitting
2108     happens first, so such colons must be doubled. The conversion script now
2109     doubles such colons, and outputs a warning message. The test for one of
2110     these colons is a match against "\$\{\w+:".
2111
2112 26. If, while verifying a recipient address, a router was skipped because a
2113     lookup did not succeed, and the following router suffered a temporary
2114     failure (e.g. a timeout), the log line for the temporary rejection showed
2115     the error from the first router instead of from the second.
2116
2117 27. Exim crashed if a dnslists test was obeyed in an ACL for an SMTP message
2118     from the local host. Now it just fails to match the list.
2119
2120
2121 Exim version 4.02
2122 -----------------
2123
2124  1. Bug in string expansion: if a "fail" substring of a conditional contained
2125     another conditional that used the "fail" facility, Exim didn't swallow the
2126     right number of closing parentheses in the case when the original condition
2127     succeeded (i.e. when the condition containing the "fail" should be
2128     skipped).
2129
2130  2. helo_verify_hosts wasn't working when comparing host names.
2131
2132  3. When delivering down an existing SMTP connection, the error "Unexpectedly
2133     no free subprocess slot" was sometimes given for other addresses in the
2134     message.
2135
2136  4. Binary zeroes in the message body are now turned into spaces in the
2137     contents of $message_body and $message_body_end.
2138
2139  5. If the value of a field in a MySQL result was SQL NULL, and more than one
2140     field was selected, Exim crashed.
2141
2142  6. It seems that many OS treat 0.0.0.0 as meaning the local host, typically
2143     making it behave like 127.0.0.1. Since there have been incidents where this
2144     was found in the DNS, two changes have been made:
2145       (a) Added 0.0.0.0 to the ignore_target_hosts setting in the default
2146           configuration.
2147       (b) Unconditionally recognize 0.0.0.0 as the local host while routing.
2148
2149  7. Added helo_allow_chars so people can let in underscores if they really
2150     have to. Sigh.
2151
2152  8. Give configuration error if "maildir_format" or "mailstore_format" is
2153     specified for appendfile without specifying "directory".
2154
2155  9. When return_path was expanded in an smtp transport, the values of
2156     $local_part and $domain were not set up.
2157
2158 10. The optimization for sending multiple copies of a single message over one
2159     SMTP connection when there are lots of recipients (but too many for one
2160     copy of the message) was messing up in the case when max_rcpt was set to 1
2161     (for VERP). It would send lots of copies with one RCPT each, correctly, but
2162     because the transport was passed more than one address, $local_part and
2163     $domain weren't set. Since setting max_rcpt to 1 is almost always
2164     associated with VERP (or at least, you do it because you want to use
2165     $domain or $local_part), I've made that a special case where the
2166     optimization is disabled.
2167
2168 11. Cygwin has case-insensitive file names. Therefore, we can't use base 62
2169     numbers for Exim's identifiers. We have to use base 36 instead. Luckily 6
2170     base 36 digits are still plenty enough to hold the time for some years to
2171     come. There's now a macro that is set either to 62 or 36, but the names and
2172     documentation still talk about "base 62".
2173
2174 12. Added build-time variable MAX_LOCALHOST_NUMBER (default 256) to allow the
2175     localhost number to be traded off against the maximum number of messages
2176     one process can receive in one second. This is relevant only when
2177     localhost_number is set. It may be useful for Cygwin, where the maximum
2178     sequence number is much less when up to 256 hosts are allowed.
2179
2180 13. Extended MySQL server data to allow for the specification of an alternate
2181     Unix domain socket.
2182
2183 14. Give error if too many slashes in mysql_servers or pgsql_servers item.
2184
2185 15. Changed the wording "debug string overflowed buffer" to "debug string too
2186     long - truncated" to make it clearer that it's not a big disaster.
2187
2188 16. Now that I finally understand the difference between the resolver's returns
2189     HOST_NOT_FOUND and NO_DATA, I've optimized Exim's DNS lookup so that if an
2190     MX lookup gets HOST_NOT_FOUND, it doesn't bother to try to look up an
2191     address record. Only if it gets NO_DATA does it do that.
2192
2193 17. The contents of Envelope-To: were not correct in cases when more than one
2194     envelope address was redirected to a single delivery address via an
2195     intermediate address, because the duplication was detected at the
2196     intermediate stage, but the checking for Envelope-To: only looked at
2197     duplicates of the final address.
2198
2199 18. If a message with the -N flag was on the spool, and was selected during a
2200     queue run by -R or -S, the -N flag was incorrectly passed on to all
2201     subsequent messages, leading to their being thrown away.
2202
2203 19. Remove unnecessary check for the local host when looking up host names in
2204     host lists.
2205
2206 20. If tls_certificate is supplied, but tls_privatekey is not, assume that both
2207     are in the tls_certificate file.
2208
2209 21. If a router set transport_current_directory or transport_home_directory
2210     to something that involved an LDAP lookup, and there was more than one
2211     local delivery to be done for a single message, all but the first got
2212     deferred because the LDAP connection for those variables got opened in the
2213     superior process, but closed in the first subprocess. The second subprocess
2214     then assumed it was still open. We now ensure that each subprocess starts
2215     with a clean slate (everything closed down) so that it can open and close
2216     its own connections as needed.
2217
2218 22. After a failure of ldap_result(), Exim was calling ldap_result2error() in
2219     order to get an error message. However, it appears that it shouldn't do
2220     this if the value of result variable is NULL. As I can't find any way of
2221     getting an error message out of LDAP in this circumstance, Exim now just
2222     gives says "ldap_result failed and result is NULL".
2223
2224 23. If a message arrives over a TLS connection via inetd, close down the SSL
2225     library in the subprocess for message delivery (but don't molest the
2226     parent's SSL connection).
2227
2228
2229 Exim version 4.01
2230 -----------------
2231
2232  1. When setting TCP_NODELAY, the call to setsockopt() was using SOL_SOCKET
2233     instead of IPPROTO_TCP, which caused excessive logging on some systems.
2234
2235  2. Changed the Makefile for Cygwin to set EXIM_USER and EXIM_GROUP to 0.
2236
2237  3. The SMTP rewriting facility was broken.
2238
2239  4. There was some malformatting in the spec.txt file (the other formats were
2240     OK).
2241
2242  5. Made convert4r4 change "bydns_a" into "bydns" in route_list options, and
2243     to do the same for "bydns_mx", but in this case to comment that it won't
2244     work the same (and to suggest a workaround).
2245
2246  6. Removed redundant code in deliver.c for indicating when a reused SMTP
2247     connection had been closed in a subprocess - this was being done twice.
2248
2249  7. Change 2 of 3.164 removed Exim's explicit checking that a reverse DNS
2250     lookup yielded a name whose forwarded lookup gave the original IP address,
2251     because I thought that gethostbyaddr() did this automatically (it seems to
2252     on some systems). There is hard evidence that I was wrong, so this test has
2253     been put back, and in a better form, because it now checks alias names.
2254     This means that the verify=reverse_host_lookup condition in an ACL reduces
2255     to requiring that the host name has been looked up, since the checks it
2256     previously did are not always applied.
2257
2258  8. When sender verification fails, the error associated with it is given by
2259     default before the 550 error for the first RCPT command. Not everybody
2260     wants to see this. There is now an option (no_details) that suppresses it.
2261
2262  9. The patterns in rewriting rules with the 'S' flag were not being expanded.
2263     For consistency with other patterns (and the documentation), this has been
2264     changed.
2265
2266 10. "domainlist", "hostlist", and "addresslist" weren't recognized if the
2267     immediately following character was a tab rather than a space.
2268
2269 11. The rules for writing daemon pid files have changed. A new option -oP has
2270     been added to provide a way of specifying a pid file path on the command
2271     line. Exim now writes a pid file when -bd is used, unless -oX is specified
2272     without -oP.
2273
2274 12. The version number of OpenSSL was included in the response to the STARTTLS
2275     command - a legacy from the original contributed code that doesn't seem
2276     sensible. It no longer appears, and I took it out of the debug output as
2277     well because that was the only place left, and the code to compute it was
2278     "mysterious magic" that didn't seem worth keeping.
2279
2280 13. When another message was processed in order to send it down an existing
2281     SMTP connection, Exim was doing the routing for all the addresses. Even if
2282     called from a delivery from a queue runner, this doesn't count as "in a
2283     queue run", so retry times were not being inspected. If the message had a
2284     large number of recipients, and several of them timed out while routing,
2285     the delay could be so large that the server at the other end of the SMTP
2286     connection would time out. To avoid this happening, Exim now skips routing
2287     for any addresses that have a domain retry time set for routing, whether or
2288     not that retry time has arrived, when dealing with a pre-existing SMTP
2289     connection. This will be "right" pretty well all of the time, and even
2290     when it is "wrong", the only consequence will be some delay. (This doesn't
2291     apply to "address" retry times, because those are usually the result of 4xx
2292     errors, not timeouts.)
2293
2294 14. Added words to the initial output from -bh pointing out that no ident
2295     callback is done.
2296
2297 15. The convert4r4 script wasn't getting it quite right with an aliasfile
2298     director that had a "transport" setting. It was missing the "yes/no" in the
2299     "condition" setting.
2300
2301
2302 Exim version 4.00
2303 -----------------
2304
2305  1. Changed the name of debug_print for authenticators (3.953/38) to
2306     server_debug_print because it applies only when the authenticator is
2307     running as a server.
2308
2309  2. Forgot to change DB_ to EXIMDB_ in the Cygwin Makefile.
2310
2311  3. There were still a couple of uses of vfork() when passing a socket to a
2312     new delivery process. The use of vfork() is not recommended these days,
2313     so I changed them to fork().
2314
2315  4. Added the spa authentication mechanism, using the code contributed by Marc
2316     Prud'hommeaux (and mostly taken from the Samba project). This supports
2317     Microsoft's "Secure Password Authentication", but only as a client.
2318
2319  5. queryprogram had current_directory unset, but used "/" when it was unset.
2320     It is tidier just to make the default "/" and have done with it.
2321
2322  6. When a delivery is run with -v, the -v flag is no longer passed on to new
2323     processes that are started in order to send other messages on existing
2324     SMTP connections. This prevents non-admin users from seeing these other
2325     deliveries. Admin users can specify a higher level of debugging, and when
2326     this is done, the debugging selection is passed on.
2327
2328  7. Increased the increment for dynamic strings from 50 to 100.
2329
2330  8. When Exim was building a dynamic string for $header_xxx from a number of
2331     headers of the same name, or for $message_headers, it was using the dynamic
2332     string function which is designed for use with relatively short strings. If
2333     a pathological message had an enormous header, it chewed up memory at a
2334     ridiculous rate. The code has been rewritten so that it does not do this.
2335     With a 64K header string (there's a limit set at 64K) it now just gets one
2336     64K buffer. Previously it used a large number of megabytes to build such a
2337     string, and some system filter processing ran machines into the ground on
2338     messages with huge headers.
2339
2340  9. The work for 8 involved a small amount of other "refactoring" in the
2341     expansion functions.
2342
2343 10. If "headers add" or "headers remove" were used in a system filter, the
2344     headers didn't actually get changed when testing with -bF. This could
2345     affect later commands in the filter that referred to the headers.
2346
2347 11. Two system filter bugs: (a) The system filter was always being run as root,
2348     even if system_filter_user was set. (b) When the system filter was not run
2349     as root, changes to the header lines by "headers add" or "headers remove"
2350     were being lost. Because of (a), (b) would never have bitten.
2351
2352 12. Some "refactoring" in the daemon:
2353       (a) Removed redundant statement smtp_in=NULL.
2354       (b) The test for fork failure for a delivery process was not quite in the
2355           right place.
2356       (c) Added main and panic logging for receive and delivery fork failures.
2357       (d) Check for fdopen() failure, and don't try to continue, but ensure
2358           the sockets get closed.
2359       (e) Log fclose() failures.
2360
2361 13. Added the "/data" facility to ACL dnslists so as to make it easy to use,
2362     for example, the domain lookup of rfc-ignorant.org.
2363
2364 14. Refactored the code in the daemon to use a vector of structures instead of
2365     two separate vectors for storing the pid of a spawned accepting process and
2366     the corresponding IP address of the client. (This is to make it easier to
2367     add other things.)
2368
2369 15. If EXIM_USER or EXIM_GROUP were set to the empty string in Local/Makefile,
2370     the uid or gid were set to zero, which is unsafe. These settings now cause
2371     an error message at build time.
2372
2373 16. check_ancestor was doing its check case-sensitively, which meant that it
2374     did not work with some configurations when redirecting changed the case of
2375     the local part. Now check_ancestor respects the setting of
2376     caseful_local_part on the router which routed the ancestor address.
2377
2378 17. The check for router looping (whether the current router had previously
2379     routed the same address) was always being done case-insensitively. It
2380     should do the local part check case-sensitively when caseful_local_part is
2381     set for that router.
2382
2383 18. Added helo_try_verify_hosts, which is like helo_verify_hosts except that
2384     it doesn't reject failing HELO/EHLO. Instead the verification state can be
2385     testing in an ACL by verify=helo.
2386
2387 19. When echoing log writes from a parallel remote delivery process to the
2388     debug output, the pid of the parallel process was being omitted.
2389
2390 20. In an ACL run for a RCPT command, the values of $domain and $local_part
2391     were becoming unset after a sender or recipient verification.
2392
2393 21. Exim crashed if called with -C followed by a ridiculously long string.
2394
2395 22. Some other potential points of trouble caused by pathological input data
2396     have been defended.
2397
2398 23. If hosts_randomize was set on an smtp transport, the randomizing code had
2399     a bug which could put the delivery process into a tight loop.
2400
2401
2402
2403 Exim version 3.953
2404 ------------------
2405
2406  1. Exim was not terminating the names of named lists in memory. It got away
2407     with this on systems where newly malloc()d store is zeroed (always a bad
2408     practice). When running in its test harness, Exim now ensures that all
2409     new memory from malloc is filled with a non-zero value. This will help
2410     pick up bugs like this in future. (I haven't made it do it always, for
2411     performance reasons.)
2412
2413  2. When skip_syntax_errors was set on a redirect router, and a forward file
2414     (NOT a filter file) contained only invalid addresses, the message was
2415     discarded. The router now declines, as it does for invalid filter files.
2416     Thus, the address is passed on unless no_more is set.
2417
2418  3. When an address containing upper case letters in the local part was
2419     deferred, eximon showed the lowercased version with the caseful version
2420     as a "parent", as well as the original caseful version in its queue list.
2421
2422  4. When hide_child_in_errmsg was set on a redirect router, bounce messages
2423     still showed the failed addresses in the X-Failed-Recipients: header line.
2424
2425  5. Change 6 for 3.952 should also have included SIGTERM.
2426
2427  6. exim -bP +something was searching only the domain lists. It now searches
2428     all lists for a matching name.
2429
2430  7. If Local/Makefile contains more than one of USE_DB, USE_GDBM, or USE_TDB,
2431     give a build-time error. When it does contain one of them, arrange for any
2432     OS default for any other one to be overridden. (The code expects at most
2433     one of these to be defined.)
2434
2435  8. When a value for transport_home_directory is taken from the password
2436     information, wrap it in \N...\N so that it isn't expanded in the transport.
2437     This affects Cygwin, where home directories may contain $ characters.
2438
2439  9. Fixed an occasional crash when autoreply was sending a message created by
2440     a user's filter file. It was referencing uninitialized memory. (The
2441     prophylactic mentioned in 1 above made it a hard error.)
2442
2443 10. The "run" and "readfile" expansion items could sometimes return extra junk
2444     characters (yet another uninitialized memory bug).
2445
2446 11. The lockout options forbid_filter_existstest etc. were not propagating to
2447     the expansion of files sent as part of "mail" messages from users' filter
2448     files.
2449
2450 12. Another unterminated string bug: when an ACL was read from a file
2451     dynamically it wasn't properly terminated.
2452
2453 13. Cached pgsql connections weren't being re-used, leading to a potential
2454     build-up of open connections.
2455
2456 14. $message_headers is supposed to be limited to 64K in length, but it wasn't
2457     so limited if an individual header line was longer than 64K.
2458
2459 15. An individual header line, or concatenation of multiple identically-
2460     named header lines, inserted by $h_xxxx is supposed to be limited to 64K in
2461     length, but it wasn't so limited if the only header line was longer than
2462     64K.
2463
2464 16. A syntactically incorrect setting of -d... is now treated as a command line
2465     syntax error (message to stderr, return code 1), without any entry on the
2466     log.
2467
2468 17. Modifications to the exim_install script:
2469       (a) Scan the combined Makefile in the build directory instead of messing
2470           around scanning its individual constituent files.
2471       (b) Use sed instead of a pipe of grep, tail and cuts. This allows better
2472           control, but has to be very simple sed in order to work on Solaris.
2473       (c) Allow for the setting of EXE to add a subscript to executables for
2474           the benefit of Cygwin.
2475       (d) Use -c instead of -b with "cut" because the "cut" in BSD/OS doesn't
2476           grok -b.
2477
2478 18. Changes for Cygwin:
2479       (a) Update scripts/os-type to recognize CYGWIN.
2480       (b) Arrange (via the Uopen() macro) for all calls to open() to have
2481           the O_BINARY flag, to avoid CRLF problems.
2482       (c) If OS_INIT is defined, call it at the very start of Exim's execution.
2483       (d) When resolver debugging is enabled, set _res.options |= RES_DEBUG
2484           before calling res_init() as well as after, because that generates
2485           some debugging info during initialization.
2486
2487 19. Make the initial call to os_getloadavg() in exim.c conditional on
2488     LOAD_AVG_NEEDS_ROOT because it is done just to initialize os_getloadavg()
2489     on systems that require the first call to be done as root. It should be
2490     called only when messages are being received; it was being called
2491     unnecessarily in some cases.
2492
2493 20. If Exim failed to open its retry hints database at routing time, it crashed
2494     during a subsequent local delivery.
2495
2496 21. If Exim is neither setuid root nor called by root, there is no need to
2497     attempt to drop root privilege when it is not needed.
2498
2499 22. I'd forgotten to remove the check for the presence of %s in pid_file_path
2500     when it was set at run time.
2501
2502 23. If a transport filter crashed, or yielded a non-zero return code during an
2503     SMTP delivery, Exim was not aborting the delivery. This led to multiple
2504     partial deliveries of the message until the transport filter was fixed.
2505
2506 24. Do not try alternate hosts if a transport filter crashes or yields a
2507     non-zero return during an SMTP delivery.
2508
2509 25. When exim -be is reading input lines from stdin, backslash can now be used
2510     for continuations. This makes it easier to test expansions from a
2511     configuration file by cut and paste, and long expansions in general.
2512
2513 26. The file src/auths/xtextdecode.c was incorrectly named xtestdecode.c, but
2514     because the MakeLinks script built a symbolic link that worked, this
2515     mistake didn't actually show up.
2516
2517 27. When Exim is delivering another message down an existing connection,
2518     remote_max_parallel should be forced to 1; this wasn't happening, though
2519     it would have caused a problem only if a message had more than 100
2520     recipients routed to the host.
2521
2522 28. When there was a problem while delivering down an existing connection, such
2523     that the transport process closed the connection, this fact wasn't getting
2524     communicated to the calling delivery process, which might have tried to do
2525     more deliveries on the same connection. This would only have caused a
2526     problem if there were more than 100 recipients to the same host.
2527
2528 29. The ${extract} action, with a negative field number that selected the first
2529     field in a string, could return junk characters at the start of the
2530     extracted field.
2531
2532 30. When Exim is acting as a client, if an attempt to start a TLS session fails
2533     during the TLS negotiation phase (i.e. STARTTLS is accepted, but there's a
2534     problem such as an unrecognized certificate during TLS session startup),
2535     Exim used always to defer delivery. Now, unless the host is in
2536     hosts_require_tls, Exim makes a new connection to the host and attempts to
2537     send the message unencrypted. This avoids stuck messages for servers that
2538     advertise STARTTLS but don't actually support it properly.
2539
2540 31. Added ${address:xxx} to go with ${domain:xxx} and ${local_part:xxx} which
2541     extract from RFC 2822 addresses.
2542
2543 32. The rules for recognizing when Exim is being called from inetd have
2544     changed. Previously Exim required SMTP input, stdin to be a TCP/IP socket,
2545     and the caller to be root or the Exim user. This left a gaping hole if the
2546     caller was not root or the Exim user, because then it wouldn't do the
2547     policy checking for a remote host, because it didn't realize it was being
2548     called from inetd. (This was seen on Debian configurations). Exim now
2549     behaves as follows: if the input is SMTP and stdin is a TCP/IP socket, a
2550     call from inetd is assumed. This is allowed to proceed either if the caller
2551     is root or the Exim user, or if the port used is privileged (less than
2552     1024). Otherwise (a different user passing an unprivileged port) Exim gives
2553     a "Permission denied" error.
2554
2555 33. Removed $compile_number from the default SMTP banner line (after discussion
2556     on the mailing list). Also removed it from the default $Received: header.
2557
2558 34. # is documented as a comment character in the run time configuration only
2559     when it appears at the start of a line. In the case of boolean values,
2560     extra characters after "= true" or "= false" were being ignored, leading to
2561     a false impression that comments could appear there. This is now diagnosed
2562     as an error.
2563
2564 35. If a boolean option without a following "=" was followed by # (in the
2565     mistaken belief that this would be a comment), the error was "missing =",
2566     which was confusing. Exim now complains about extra characters.
2567
2568 36. When Exim complains about extra characters following an option setting, it
2569     now adds a comment about comments if the first extra character is #.
2570
2571 37. Output debug_print strings when testing a host using -bh.
2572
2573 38. Added server_debug_print to authenticators (compare routers and
2574     transports). This outputs when an authenticator is called as a server. It
2575     can be helpful while testing with -bh.
2576
2577 39. Added debugging output to the crypteq condition.
2578
2579 40. If a named domain or local part list used in a "domains" or "local_parts"
2580     option on a router matched by means of a lookup, the $domain_data and
2581     $local_part_data variables were set for the first router that did this, but
2582     were not set for any subsequent routers that used the same named list. The
2583     same was true for multiple tests of named domain or local parts lists in an
2584     ACL.
2585
2586 41. If the variable "build" is set when the top-level Makefile is run, the
2587     variable now propagates from the top-level Makefile to subsidiary ones.
2588     In addition, Local/Makefile-$(build) is added to the list of concatenated
2589     files that go at the start of the Makefile in the build directory.
2590
2591 42. If NO_SYMLINK is defined in Local/Makefile, the exim_install script just
2592     copies the Exim binary in with its unique name, without moving the "exim"
2593     symbolic link to it.
2594
2595 43. Added BSDI 4.2 as a BSDI variant in scripts/os-type.
2596
2597 44. The spool file format for remembering a "one_time" redirection has changed;
2598     I had forgotten to make Exim 4 capable of reading Exim 3 spool files.
2599
2600 45. Address lists are now permitted to include items of the form *@+name where
2601     "name" is a named domain list. (Note that an item of the form +name is
2602     taken as a named _address_ list.)
2603
2604 46. When Exim gives up privilege and reverts to the calling user because it was
2605     called with the -C, -D, -be, or -bi options, it now reinstates the
2606     supplementary group list as well as the uid and gid.
2607
2608 47. The crypteq condition has been extended. When the encrypted string begins
2609     with "{md5}" Exim used to assume that the digest was encoded as a base64
2610     string. Now it assumes this only if its length is 24 bytes. If the length
2611     is 32 bytes, Exim assumes a digest expressed in hex characters. If the
2612     length is neither 24 nor 32, the comparison always fails.
2613
2614 48. Updated the convert4r4 script:
2615
2616       (a) Some typos in the comments.
2617       (b) Remove kill_ip_options, log_ip_options, and refuse_ip_options, which
2618           no longer exist.
2619       (c) Move all macro definitions to the top of the output, to ensure that
2620           they precede any references to them.
2621       (d) If tls_verify_ciphers was set without tls_verify_hosts, the generated
2622           new configuration insisted on encryption ("these ciphers must be
2623           used for all connections") instead of just checking the cipher when
2624           encryption happened ("if encrypted, these ciphers must be used").
2625       (e) Address lists are now checked to see if they contain any bare lookup
2626           items and if they do, these are converted to two items, the first
2627           preceded by "*@" and the second with "partial-" removed. This makes
2628           Exim 4 behave in the way that Exim 3 used to. An explanatory comment
2629           is output.
2630       (f) Put more explanation in above the "hosts = :" test.
2631
2632 49. Write a main and panic log entry when "partial-" is ignored in a lookup
2633     that is part of an address list. (Applies when the item is a lookup for
2634     which the whole address is the key.)
2635
2636 50. Two changes to the way $original_local_part and $parent_local_part work:
2637
2638       (a) When an address that had a prefix or suffix was redirected to another
2639           address, the value of $original_local_part and $parent_local_part
2640           had the prefix or suffix stripped when referred to during the
2641           processing of the child address. This doesn't seem right, so it has
2642           been changed.
2643       (b) When an address that had a prefix or suffix was being processed,
2644           $local_part had the affix stripped, and if it was a top-level
2645           address, $original_local_part also has the affix stripped. This has
2646           been changed. Now $original_local_part contains the same value at all
2647           levels. ($parent_local_part remains empty at top level.)
2648
2649 51. A number of macros in the Exim source began with "DB_". When compiling
2650     with Berkeley DB version 4, DB_LOCK_TIMEOUT clashed with a macro set by
2651     that package. The Exim macros now all start with "EXIMDB_", and Exim
2652     therefore now supports DB version 4.
2653
2654 52. Newlines in a "freeze" text from a system filter were being sent as \n
2655     in messages created by the "freeze_tell" option. They are now converted
2656     back to newlines (in the log line they continue to appear as \n).
2657
2658 53. Added a new ACL condition "verify = reverse_host_lookup". This does a
2659     reverse lookup of the client host's IP address, then does a forward lookup
2660     for all the names it receives, and checks that at least one of the IP
2661     addresses obtained from the forward lookup matches the incoming IP address.
2662     The lookups are done with gethostbyaddr() and gethostbyname(),
2663     respectively.
2664
2665 54. A small fix to eximstats reduces its store usage substantially when it is
2666     processing very large log files: when a message's "completed" line is
2667     reached, discard the memory of the message's size.
2668
2669 55. If an address was redirected to itself more than once (e.g. by two
2670     different "redirect" routers, or because of the use of "unseen", it was
2671     incorrectly discarded as a duplicate address.
2672
2673 56. For a rewrite pattern of the form *@something, if an actual address
2674     contained @ in the local part (e.g. "a@b"@x.y), the value of $1 was set
2675     incorrectly during expansion of the replacement address (it stopped at the
2676     first @ instead of at the last one).
2677
2678 57. Added hosts_nopass_tls to the smtp transport. For any host that matches
2679     this list, a connection on which a TLS session has been started will not be
2680     passed to a new delivery process for sending another message on the same
2681     connection.
2682
2683 58. The -dropcr command line option now turns CRLF into LF, while leaving
2684     isolated CR characters alone. (Previously it removed _all_ CR characters.)
2685     There is now also a drop_cr main option which has the effect of -dropcr for
2686     all incoming non-SMTP messages.
2687
2688 59. If a configuration file macro expanded into a boolean option which was not
2689     followed by = and a value, Exim gave a spurious error for an "unknown"
2690     value for the option (typically a string from the previous line).
2691
2692
2693 Exim version 3.952
2694 ------------------
2695
2696  1. convert4r4 had an incorrect file name in its comment output.
2697
2698  2. convert4r4 was looking up $local_part instead of $domain in its generated
2699     manualroute output.
2700
2701  3. There was no check that getpeername() was giving a socket address when
2702     called on stdin passed from a previous delivery.
2703
2704  4. Fixed an old bug whereby Exim could segfault if debugging was turned on and
2705     a DNS lookup found MX records for hosts whose A records had to be looked up
2706     separately, and some of them pointed to the local host (pretty rare).
2707
2708  5. The debugging output for log writes now shows the names of any log selectors
2709     instead of the hex value of the selector word.
2710
2711  6. If a delivery subprocess is terminated by SIGKILL or SIGQUIT, do not freeze
2712     the message. This can happen during system shutdown. Other kinds of process
2713     failure indicate problems.
2714
2715  7. If a sender verification did not complete (e.g. DNS lookup timed out), the
2716     log line for the temporary RCPT rejection did not always say why (it lost
2717     the message if there had been a previous call to any lookup).
2718
2719  8. The special message about MX records that point to IP addresses instead of
2720     host names was not getting returned in the SMTP response when a
2721     verification failed. This has been fixed, and the message that is logged in
2722     this circumstance has been made less verbose.
2723
2724  9. When an SMTP callout is done, Exim tries to use the interface and port
2725     number from the transport that the address was routed to during the prior
2726     verification. If it wasn't routed to a remote transport, or if there's a
2727     problem expanding the relevant options, Exim does not use a specific
2728     interface, and it connects to port 25.
2729
2730 10. If the string "syslog" happened to occur in the log file path, eximon was
2731     failing to extract the name of the main log file correctly.
2732
2733 11. Unlike other operating systems, Linux does not sync a directory after a
2734     rename. However, we need this to happen to be sure an incoming message has
2735     been safely recorded after it has been received. I have therefore added a
2736     macro called NEED_SYNC_DIRECTORY (which is set in OS/os.h_Linux) to request
2737     Exim to do an explicit sync on the directory after the rename. If
2738     O_DIRECTORY is defined, it is used when opening the directory.
2739
2740 12. When a system filter creates any new deliveries, they are given a fake
2741     "parent" address which appears on the logs, and is necessary for pipes,
2742     files, and autoreplies, which cannot be toplevel addresses. This fake was
2743     set up with the text "system filter". It's been changed to "system-filter"
2744     because the space in the previous text could cause trouble.
2745
2746 13. The new option local_sender_retain suppresses the removal of Sender: header
2747     lines in locally-submited (non-TCP/IP) messages from untrusted users. It is
2748     required that no_local_from_check be set with local_sender_retain.
2749
2750 14. In a file interpolated into an address list, if a local part contained a
2751     # character and there was also a following comment (introduced by a #
2752     preceded by white space), the comment was not recognized.
2753
2754 15. Local part lists are now handled as address lists as far as recognition of
2755     comments in interpolated files and the processing of +caseful at the top
2756     level are concerned. In the local_parts option of a router, +caseful will
2757     restore case-sensitive matching, even when the router does not have
2758     caseful_local_part set (the default).
2759
2760 16. The key used for a dsearch lookup may not contain '/'. If it does, the
2761     lookup defers.
2762
2763 17. When starting a delivery process after receiving a message locally, discard
2764     the controlling terminal unless debugging is turned on.
2765
2766 18. The exim group was automatically trusted; this was not correct because it
2767     meant that admin users who were in the exim group were automatically
2768     trusted. If you want the exim group to be trusted, it must now be
2769     explicitly configured.
2770
2771 19. The default configuration mentioned "dns_lists" instead of "dnslists" in a
2772     comment.
2773
2774 20. Minor corrections and changes to the Exim4.upgrade document and to the
2775     OptionLists.txt document.
2776
2777 21. If a local part beginning with a pipe symbol was routed to a pipe
2778     transport, the transport got confused as to which command it should run.
2779     This could be a security exposure if unchecked local parts are routed to
2780     pipe transports.
2781
2782 22. When logging SMTP connections to the daemon from other hosts, include the
2783     connection count in the log line. Tidied up the identification of SMTP
2784     sources in logging lines.
2785
2786 23. Added "sender_domains" as a new ACL condition so that the Exim 3 setting
2787     of sender_verify_callback_domains can easily be replicated. Corrected
2788     convert4r4, which was incorrectly converting this to a "domains" setting.
2789
2790 24. The code for reading ident values was not discarding leading spaces, which
2791     some hosts seem to send.
2792
2793 25. The building process was still insisting that PID_FILE_PATH contained %s,
2794     but this is not required for Exim 4.
2795
2796 26. The logging of ETRN commands had got lost. It has been restored, and the
2797     log selector "etrn" (on by default) added to control it.
2798
2799 27. IPv6 reverse DNS lookups were originally specified as happening in the
2800     ip6.int domain, but this is being changed to ip6.arpa (and they've changed
2801     the meaning of "arpa" to "Address and Routing Parameters Area"). The only
2802     time Exim does reverse lookups directly (as opposed to calling
2803     gethostbyaddress()) is in the code for the dnsdb lookup type. This has been
2804     changed to use ip6.arpa.
2805
2806 28. Made the test programs (test_dbfn for testing DBM files, and some others)
2807     compile! Updated the help output from test_dbfn.
2808
2809 29. Changed all occurrences of "r" and "w" in fopen() fdopen() calls to "rb"
2810     and "wb". This makes no difference in Unix systems, but is apparently
2811     necessary for running Exim under Cygwin.
2812
2813 30. Three changes that make virtually no difference when Exim is run on a real
2814     Unix system, but which were asked for to make life easier when porting it
2815     to run under Cygwin:
2816
2817     (a) Changed the logic for locking a message when an Exim process is
2818         handling it. Previously, the entire -D file was locked to indicate
2819         this. Now Exim locks only the first line, which contains the name of
2820         the file. Apparently, in the Cygwin environment, a subprocess cannot
2821         read locked parts of a file, even when it is passed an open file
2822         descriptor to that file from the process that did the locking. By
2823         locking only the first line, which the subprocess does not want to read
2824         (it just needs to read the data that follows), we can get round this
2825         restriction with minimal effort.
2826
2827     (b) Added support for native gdbm function calls. GDBM is apparently the
2828         only DBM library that is currently available Cygwin, and only with its
2829         native API.
2830
2831     (c) The default modes for files, directories, and lock files in the
2832         appendfile transport can now be set in Local/Makefile at build time.
2833
2834 31. When transmitting a message using SMTP with PIPELINING, if the server gave
2835     a malformed SMTP response, the message logged by Exim didn't associate it
2836     with the pipelined SMTP command to which it referred. For example it logged
2837     "after DATA" if all the recipients had been sent. Also, if the response
2838     was an empty line (illegal), it didn't show up very clearly. The error
2839     messages are now more accurate, and point out empty lines.
2840
2841 32. Minor corrections and changes to src/configure.default.
2842
2843 33. When a host list in a route_list item that was enclosed in double quotes
2844     contained single quotes within it, the quoting was incorrectly terminated.
2845     Both the pattern and the host list in route_list items are now handled by
2846     the standard quote-processing function.
2847
2848 34. Corrected the EDITME file for eximon so that the default stripchart
2849     patterns work with the default runtime configuration for local deliveries.
2850     (Previously it matched a delivery via a director - not possible in Exim 4.)
2851
2852
2853 Exim version 3.951
2854 ------------------
2855
2856 Exim 3.951 is the first alpha testing release for Exim 4. A list the many
2857 individual changes to the code made between Exim 3.33 and Exim 3.951 was not
2858 kept. The functional changes are listed in the Exim4.upgrade file.
2859
2860 ****