1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
4 <title>exim changelogs - Version 3.10</title>
7 <body bgcolor="#FFFFFF" text="#00005A" link="#000060" alink="#E8700D" vlink="#003050">
8 <h1>Exim changelog for Version 3.10 - last non-testing release was 3.03</h1>
10 <h2>New Features and user visible changes</h2>
14 <li>The option log_queue_run_level specifies the log level for the
15 messages "Start queue run" and "End queue run". The default is 0.</li>
17 <li>Addition of forbid_lookup, forbid_existstest and forbid_perl to
18 the forwardfile director.</li>
20 <li>All directors except smartuser had current_directory and
21 home_directory options, to set values used at transport time. These
22 options have now been made generic, so now apply to all
25 <li>If SUPPORT_MOVE_FROZEN_MESSAGES is set at compile time, the new
26 option move_frozen_messages causes frozen messages and their message
27 logs to be moved from the input and msglog directories on the spool to
28 Finput and Fmsglog. There is currently no support in Exim or the
29 standard utilities for handling such moved messages and they won't
30 show up in lists generated by -bp or eximon.</li>
32 <li>If no transport is specified for a smartuser director, the
33 new_address field may now specify a comma-separated list of new
34 addresses, and :blackhole:, :defer: and :fail: can also be used
35 there. In otherwords, new_address is like a line from an alias file
36 (except that :include: is not supported).</li>
38 <li>The exigrep utility now automatically zcats any log file whose
39 name ends in COMPRESS_SUFFIX, using ZCAT_COMMAND, as defined in
42 <li>The expansion condition first_delivery is true for the first
43 delivery attempt on a message; queue_running is true when a delivery
44 attempt is caused by a queue runner.</li>
46 <li>When log_refused_recipients is set, each log line now has a reason
47 for refusal such as "(RBL)" or "(sender_reject_recipients)".</li>
49 <li>The magic string "+warn_unknown" behaves like "+allow_unknown",
50 but it writes a log line every time it lets through a host whose name
51 can't be looked up.</li>
53 <li>If EXIMON_LOG_FILE_PATH is set in the environment when eximon
54 starts up, it overrides the configuration setting. This makes it
55 possible to have eximon tailing log data that is written to syslog,
56 provided that MAIL.INFO messages are routed to a separate file.</li>
58 <li>Policy rejections of recipients can now be overridden for certain
59 senders by setting recipients_reject_except_senders.</li>
61 <li>When all deferred addresses have the same domain, it is set in
62 $domain during the expansion of delay_warning_condition. For pipes,
63 files, or autoreplies, this is the domain of the parent.</li>
65 <li>-Rr (and -Rrf, -Rrff) treat the string as a regular
68 <li>Added -S (with all variations), which works like -R except that it
69 checks the message's sender instead of the undelivered recipients. If
70 both -R and -S are given, both conditions must be satisfied.</li>
72 <li>The new expansion variable $message_age contains the length of
73 time since the message was received as a number of seconds.</li>
75 <li>The syntax of LDAP queries has been extended to allow the passing
76 of more information than is available in the LDAP URL. An LDAP query
77 may now consist of a URL preceded by any number of "name=value"
78 settings, separated by spaces. If a value contains spaces it must be
79 enclosed in double quotes, and when double quotes are used, backslash
80 is interpreted in the usual way inside them. The following names are
83 <dt>USER</dt> <dd>set the DN for authenticating the LDAP bind</dd>
84 <dt>PASS</dt> <dd>set the password </dd>
85 <dt>SIZE</dt> <dd>set the limit for the number of entries returned</dd>
86 <dt>TIME</dt> <dd>set the maximum waiting time for a query</dd>
90 <li>Callers whose gid is Exim's gid are now automatically trusted
91 (only the uid was looked at previously).</li>
93 <li>There's a new option called admin_groups. If the current or any of
94 the supplementary groups of the caller is in this list, the caller has
95 admin user privileges.</li>
97 <li>There is now support for PAM (Pluggable Authentication Modules), a
98 facility which is available in the latest releases of Solaris and in
99 some GNU/Linux distributions (see
100 <a href="http://ftp.at.kernel.org/pub/linux/libs/pam/">http://ftp.at.kernel.org/pub/linux/libs/pam/</a>).</li>
102 <li>The file that the exiwhat mechanism uses for process status
103 information is no longer bundled with the log files. Instead,
104 "exim-process.info" in the spool directory is used.</li>
106 <li>Exim can now be configured to log to syslog as well as or instead
107 of to local log files. </li>
109 <li>There's a new expansion operator called "mask" which converts an
110 IP address to binary, masks off the least significant bits, and
111 converts the result back to text, with mask appended. For example:
112 ${mask:10.111.131.206/28} returns the string
113 "10.111.131.192/28". </li>
115 <li>There exist some rare networking situations (for example, packet
116 radio) where it is helpful to be able to translate IP addresses
117 generated by normal routing mechanisms into other IP addresses, thus
118 performing a kind of manual IP routing. This should be done only if
119 the normal IP routing of the TCP/IP stack is inadequate or
120 broken. Exim now has this capability.</li>
122 <li>A new option called retry_data_expire (default 7d) specifies that
123 retry data older than this should be ignored. This means that if, for
124 example, a host hasn't been tried for 7 days, Exim will behave as if
125 it had no knowledge of past failures.</li>
127 <li>To help with formulating lookup queries, there is a new expansion
130 <tt>${quote_<lookup-type>:<string>}</tt>
132 which quotes the characters of the string in a lookup-specific way. For
133 example, the safest way to write a NIS+ query is
135 <tt>[name="${quote_nisplus:$local_part}"]</tt>
138 <li>The from_hack option in the appendfile and pipe transports has
139 been replaced by two string options, check_string and
140 escape_string. When set, the start of each line is tested for matching
141 check_string, and if it does, those characters are replaced by the
142 contents of escape_string.</li>
144 <li>The appendfile transport has a new option called file_format,
145 defaulting unset. If set, it requests the transport to check the
146 format of an existing file before adding to it.</li>
148 <li>There is a new expansion condition called crypteq, which is
149 automatically available if Exim is built to support any authentication
150 mechanisms. Otherwise, it is necessary to define SUPPORT_CRYPTEQ to
151 get it included in the binary. The crypteq condition has two
152 arguments. The first is encrypted and compared against the second,
153 which is already encrypted. Two encryption types are currently
156 <li>md5 first computes the MD5 digest of the string, and
157 then expresses this as printable characters by means of the
158 base64 encoding.</li>
160 <li>crypt calls the crypt() function as used for encrypting
161 login passwords.</li>
164 <li>There is now support for the AUTH extension to SMTP (RFC 2554),
165 both as a client and as a server.</li>
167 <li>The -bv option now runs interactively, like -bt, if no addresses
168 are given on the command line.</li>
170 <li>There is a new option called -be which is for testing string
171 expansion. If no arguments are given it runs interactively. It simply
172 does a string expansion on arguments (or data lines) and outputs the
175 <li>The GNU/Hurd operating system is now supported.</li>
177 <li>If quota is specified on an appendfile transport, then
178 quota_warn_threshold may optionally be specified as a percentage.</li>
180 <li>There's an alternative hashing function for expanded strings,
181 called "nhash" for "numeric hash". An item of the form
182 ${nhash_<n>:string} produces a number in the range 0-n, while an item
183 of the form ${nhash_<n>_<m>:string} produces two numbers, separated by
184 a '/', in the ranges 0-n and 0-m respectively, using a div/mod
187 <li>The expansion variable $host_lookup_failed contains "1" if there
188 has been an attempt to look up the sending host's name from its IP
189 address, and this has failed to find the name. Otherwise
190 $host_lookup_failed contains "0".</li>
192 <li>The exim_dbmbuild utility now warns if it encounters a duplicate
193 key. By default, only the first of a set of duplicates is used - this
194 is a change from the previous state, but it does make it compatible
195 with lsearch lookups. There is an option -lastdup which causes it to
196 use the last instead, which is compatible with what it did
197 before. There is also an option -nowarn, which stops it listing
198 duplicate keys to stderr. If any duplicates are encountered, the
199 return code is 1. For other errors, where it doesn't actually make a
200 new file, the return code is 2.</li>
202 <li>There is a new option called ldap_default_servers which can be
203 used to supply a colon-separated list of replicated LDAP servers. If
204 an LDAP lookup has no server mentioned in the URL, that is, the URL
205 begins "ldap:///...", and ldap_default_servers is set, then the query
206 is passed to each of the listed servers in turn.</li>
208 <li>There is now a variant of the dbm lookup type called dbmnz, which
209 does not include a trailing binary zero in the keystring that is
212 <li>Support for MYSQL is now available when LOOKUP_MYSQL is
215 <li>In a system filter file (but not in a user filter) a "deliver"
216 command may now be followed by "errors_to <some address>" in order to
217 change the envelope sender (and hence the error reporting) for that
220 <li>The number can now be omitted from host list net searches, in
221 which case the IP address is looked up without masking and without any
222 additional text. For example, if an item in a host list is
223 net-lsearch;/some/file and the calling host has IP address 10.9.8.7
224 then the key that is used in the lookup is "10.9.8.7".</li>
226 <li>When IPv6 addresses are used in net lookups, the separator between
227 the components is "." rather than the conventional ":" because colon
228 is the key terminator in lsearch files. The full, unabbreviated IPv6
229 address is always used.</li>
233 <h2>Version 3.10</h2>
236 1. Exim was crashing when lookup_open_max was exceeded if the type of file
237 being closed was different to the type of file being opened.
239 2. Some further tidies of the os-type and arch-type scripts.
241 3. ENOSPC is not treated in the same way as a quota error for the purposes of
244 4. The revised exigrep (3.091/26) had "gz" and "Z" built in. Change it to check
247 5. If a reverse lookup done within a message failed because the name looked up
248 had no matching forward lookup, the error text for this got obliterated at the
249 end of the message, and so if it was needed for a subsequent message on the
250 same SMTP connection, junk got logged.
256 1. The -bP option wasn't recognizing "authenticator xxx". It was recognizing
257 "auths" and "auth_list", but this abbreviation seems unexpected, so changed
258 those to use the full word.
260 2. Removed a now (since 2.12/3) useless optimization in the code for checking
261 whether two addresses have the same list of hosts.
263 3. After some calls to execv() the failure code wasn't being output.
265 4. Increased field widths in eximstats, as the numbers can be quite big on busy
268 5. Arrange for X-RBL-Warning: headers to be inserted when recipients are
269 allowed through by an exception list from an RBL domain that is set to reject.
271 6. Tidied error messages from -brw. Also, if an SMTP rewrite happens and the
272 source address isn't syntactically valid, just skip the other rewrites. Skip
273 them in any case if there are no rules with non-S flags. If there are no rules
276 7. Reworded "no valid sender in message headers" error message, because it has
277 confused people. Tidied some related messages as well.
279 8. Added USE_DB=yes to the OpenBSD configuration.
281 9. Ignore check_log_space if log_file_path just contains "syslog".
283 10. Add closelog() to the function that closes all log files. The important
284 case of this is the call just before the daemon closes all file descriptors,
285 because otherwise it is closing the syslog one behind the system's back.
287 11. Two "frozen" messages were getting written to the message log in some
290 12. Bug in 3.091/23 (fixing an earlier bug) caused a crash if a list of MX
291 records with some identical host names came in a specific order (so it only
292 showed now and again).
294 13. In the arch-type script, when uname -p gives something containing spaces,
295 try uname -m. (Previously it did this only for "" or "unknown".)
297 14. Recognize i686 in scripts/arch-type.
299 15. Re-organize the os-type and arch-type scripts so that $OSTYPE and $ARCHTYPE
300 are now tried after uname rather than before, as many shells set silly values
301 in them. Manual overrides are now provided by EXIM_OSTYPE and EXIM_ARCHTYPE.
307 1. Serious bug caused by 1-character typo: In very long messages, characters
308 could occasionally be lost (e.g. 3 lost in a 1.5M file). This bug was
309 introduced in the changes made for 3.033, so it was never in a main release.
315 1. Exim was not reporting the actual error if there was an I/O error while
316 reading a message or writing the spool file during message reception. Nor was
319 2. Some reorganization and tidying up of code for handling errors while writing
320 the spool header file.
322 3. When showing log messages for debugging, display the DIE flag when set.
324 4. Add logging of SMTP AUTH information to the "message received" log line.
326 5. Added forbid_lookup, forbid_existstest, forbid_perl to forwardfile (later
327 changed to better names forbid_filter_lookup etc.).
329 6. create_file = belowhome in appendfile could be defeated by the use of /../
330 in the name. Sigh. I'm not devious enough... Symbolic links could also defeat
331 it. These are now checked for by means of realpath(), which all the Unixes I've
332 checked do have. Also, Exim was creating any necessary directories before
333 checking create_file. It now creates directories only if it is permitted to
336 7. Add more code to ldap to remember when a bind was done and with what
337 credentials so that it doesn't repeat the bind for a subsequent lookup with the
340 8. If create_directory was set on appendfile and the directory creation failed
341 for some reason, the error was not reported, so it appeared as if
342 create_directory had been ignored.
344 9. All directors except smartuser had current_directory and home_directory
345 options, to set values used at transport time. These options have now been made
346 generic, so now apply to all directors.
348 10. If a local delivery failed and created message longer than 256 characters,
349 it got truncated when logged.
351 11. Change "all" to "one or more" in bounce and delay messages.
353 12. The convert43t conversion utility didn't work for driver names containing
356 13. Change autoreply and other generated messages to use "Reply-To" instead of
357 "Reply-to" because that's the "suggested" form in RFC 822.
359 14. Pulled some common code out of aliasfile and forwardfile and made it into a
360 separate function which they each call.
362 15. The function for writing the -H file tried to create the directory if it
363 didn't exist, but it always will, because the -H file isn't written until the
364 -D file has been successfully written. So we can save a bit of code (which in
365 fact was buggy because it didn't support sub-directories).
367 16. Added move_frozen_messages, but only if SUPPORT_MOVE_FROZEN_MESSAGES
368 is defined. There is no current support for handling such messages.
370 17. If queue_smtp or queue_remote got set via queue_only_file for an incoming
371 SMTP message received by the daemon, the flag was not being passed on to the
374 18. An explanation to the long-standing problem of eximon menus not working
375 when num-lock is set has been received, and a workaround implemented.
377 19. Address rewrites that happened during delivery (typically on new addresses
378 from forward or filter files) were causing an X-rewrote-address dummy header to
379 be added to the message each time it happened. This could get embarrassing if
380 retrying went on for a long time.
382 20. Only write "children all complete" to the msglog file if the address has no
383 parent address with the same original address. Otherwise (e.g. in cases where
384 xxx is aliased to xxx and other things, and the new xxx gets further aliased by
385 another director) it can be confusing.
387 21. After successful directing, the debugging line showed the transport field
388 from the original address, which could be misleading if copied address had been
389 queued (e.g. by smartuser). As the general queuing function now outputs this
390 info, remove it at top level.
392 22. Smartuser was showing the old rather than the new address in its debugging
395 23. If a broken MX list contained the same host more than once, Exim was coded
396 to keep only the lowest precedence, but if it saw a lower value after a higher
397 one, and had seen precedences between the two values, it screwed up the
400 24. The revision of RFC 822 increases the encouragement for collapsing source
401 routed addresses from the MAY of RFC 1123 to SHOULD. I have therefore cut out
402 all the source route handling code, with the exception of parsing and
403 collapsing. The option collapse_source_routes now has no effect - they are
404 always collapsed. This has made it possible to make some tidies in various
407 25. Rewrote the smartuser director - if no transport is specified, the
408 new_address option may now specify a list of addresses, and it may also specify
409 :blackhole:, :defer:, or :fail:.
411 26. Upgraded exigrep so that it automatically zcats compressed file.
413 27. Added expansion conditions first_delivery and queue_running.
415 28. When log_refused_recipients is set, give a reason in each log line.
417 29. Implemented +warn_unknown.
419 30. Allow EXIMON_LOG_FILE_PATH to override in eximon - useful when syslog is in
422 31. -Mg was not forcing a thaw of frozen messages (an unwanted side effect of
423 change 17 in version 2.950).
425 32. -M and other delivery forcers (e.g. -qf) were not overriding
426 queue_remote_domains and queue_smtp_domains.
428 33. Added recipients_reject_except_senders.
430 34. When all deferred addresses have the same domain, it is set in $domain
431 during the expansion of delay_warning_condition. For pipes, files, or
432 autoreplies, this is the domain of the parent.
434 35. Changed the default configuration file to lock out domain literal support.
435 This is strictly contrary to the RFCs, but people don't understand about it and
436 it has been abused by spammers seeking open relays.
438 36. -Rr (and -Rrf, -Rrff) treat the string as a regular expression.
440 37. Added -S, which works like -R except that it checks the message's sender.
442 38. Added $message_age.
444 39. Make Exim ignore -n (no aliasing), and make -oitrue the same as -oi.
446 40. Typo in ldap code could cause junk to appear in the error message if a
447 search call failed (which it normally doesn't).
449 41. Source tidies to get rid of compiler warnings for possibly uninitialized
456 1. Added additional parameters to LDAP lookups.
462 1. Callers who have exim's gid as the current gid are now trusted.
464 2. Added new option admin_groups.
466 3. There was a bug in store handling for expansions involving very large
467 strings, e.g. if message_body_size was set large and was the subject of a
468 "match" filter condition. The symptom was a bus error.
470 4. Exim wouldn't build if LOG_FILE_PATH was set to any of the new syslog
473 5. A couple more compile-time tweaks for netBSD (default USE_DB=yes and look
474 for chown in /usr/sbin).
480 1. Added support for PAM authentication.
486 1. When forwardfile defers because it doesn't like the file's permissions,
487 include the offending bits in the error message.
489 2. General tidy of error messages from directors to remove duplicated
490 information. (e.g. director names, because they are also shown in the D= item
493 3. Pulled some general outgoing SMTP code out of transports/smtp.c and put it
494 in functions in smtp_out.c. This is also used by client authenticator code; the
495 interface is now cleaner.
497 4. Added log_queue_run_level.
499 5. When a message with very long headers was rejected, and the reflection of
500 the headers to the rejectlog filled up the log buffer, the terminating
501 separator line got lost, and the entry didn't necessarily end with \n. It now
502 always puts in the separator, and adds "*** truncated ***" if something has
505 6. Updated eximon to cope with cases when syslog is being used. If only syslog
506 is being used, eximon cannot tail a log - omit that part of its window.
508 7. Updated exicyclog to cope with cases when syslog is being used. If only
509 syslog is being used, exicyclog can't cycle anything.
511 8. Fixed bug in base64 decoding function that was messing up CRAM-MD5
512 authentication for certain lengths of user name.
518 1. Moved the logging of a message's freezing to just before the -H file is
519 updated, to minimize cases when the logging happens but the file doesn't get
520 updated (an incident was observed when a system was being shut down).
522 2. Ignore SIGTERM during the tidying-up phase at the end of a delivery, to
523 minimize the chances of things being half done.
525 3. Don't bother doing an RBL lookup if the host has already matched
526 host_reject_recipients.
528 4. Added "sort | uniq" into the exiwhat script, to cut out duplicates, which
529 sometimes happen in "ps" output.
531 5. Changed the file exiwhat uses to spool/exim-process.info instead of a log
532 file. This is so that it will continue to work when syslog logging is used.
534 6. Added support for syslog, configured in log_file_path.
540 1. The debug_print option wasn't working for the smtp transport.
542 2. The responses to AUTH commands weren't being copied to debug output.
544 3. Changed the condition handling in the plaintext authenticator to allow for
545 forced DEFER returns ("", "0", "no", "false" => FAIL, "1"; "yes", "true" => OK;
546 anything else defers, text is message).
548 4. Added ${mask:} expansion operator.
550 5. Added translate_ip_address.
556 1. When a header syntax check failed, a humungously long address that was too
557 much for string_sprintf to fit in the error message caused a panic exit. This
558 could happen, for example, if a double quote was omitted in a very long list of
559 addresses in a header. It now reflects just the first 1K of the address. Put a
560 similar limit on sender addresses in verify failed messages.
566 1. Arrange for crypt.h to be included only on those OS that have it (Solaris,
567 IRIX 6, modern Linux), and for -lcrypt to be set up for those OS that need it
568 (FreeBSD, NetBSD, modern Linux).
570 2. Made MAXINTERFACES changeable in Local/Makefile.
572 3. When sending a delay warning message, quote the top-level original address
573 only, saying "an address generated from" if the actual problem is with a child.
575 4. Set a default for delay_warning_condition to skip precedence bulk/list/junk.
577 5. Allow for spaces around colons in temp_errors setting in smtp transport.
579 6. The "personal" test in filter files now checks for "list" and "junk" as well
580 as "bulk" in the Precedence: header.
582 7. Added retry_data_expire.
584 8. If a key in a partial match was very long (longer than the buffer for
585 string_sprintf()), Exim couldn't handle it.
587 9. Added expansion operator ${quote_xxx:} where xxx is a search type. Each
588 search type has its own (optional) quoting function. Added suitable functions
589 for NIS+, LDAP, and MYSQL.
591 10. Internal revision of the way the "From hack" and SMTP dot escaping is done
592 in preparation for extending appendfile. They are now unified, and are
593 therefore mutually exclusive.
595 11. The "From hack" was failing if the string "From " happened to be split
596 between two buffers when transporting the message.
598 12. If a non-SMTP message that was being read without -oi ended with "\n."
599 (no following NL) then the "." got lost.
601 13. Ensure that all non-SMTP messages have a final NL at input time, instead of
602 testing at delivery time. This simplifies the delivery code.
604 14. Replaced from_hack in appendfile and pipe by check_string and escape_string.
606 15. Added file_format to appendfile.
612 1. If remove_headers contained a "fail" expansion, it caused a crash.
614 2. The generic headers_remove option in transports is now expanded. (Seems to
615 have been an oversight.)
617 3. Changed $host_authenticated to $sender_host_authenticated (oversight).
619 4. Added server_set_id generic option to authenticators and $authenticated_id
626 1. Removed unnecessary #ifdefs from lookups which don't have private header
629 2. Added crypteq as a new expansion condition.
631 3. Make it recognise "netbsd" as equivalent to "NetBSD".
633 4. Updated the FSF's address in LICENCE and NOTICE files.
635 5. Code tidies for SMTP input to remove repetition of real and debugging
636 output by using a subroutine.
638 6. Added support for AUTH.
640 7. Source tidies of a lot of unnecessarily complicated calls to
643 8. Source tidies in lookup handling.
645 9. Set XLFLAGS empty for IRIX6 as it doesn't seem to need anything.
647 10. Typo in code for decoding quota_<time> fixed; only effect would be to fail
648 to diagnose bad syntax.
650 11. -bv now runs interactively like -bt if no addresses are given.
652 12. Added -be for string expansion tests with configuration read.
657 <h6>$Id: ChangeLog-3.10.html,v 1.3 1999/11/28 21:00:42 nigel Exp $</h6>
658 <!-- Created: Mon Aug 25 13:12:18 BST 1997 -->