1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050
|
This document contains detailed information about changes and incompatibilities
that might be encountered when upgrading from one release of Exim to another.
The information is in reverse order of release numbers. Mostly these are
relatively small points, and the configuration file is normally upwards
compatible, but there has been one big upheaval...
**************************************************************************
* There was a big reworking of the way domain/host/net/address lists are *
* handled at release 3.00. The opportunity was taken to remove a number *
* of other obsolete features and options. Anybody upgrading from pre-3.00*
* should read the 3.00 notes below carefully. *
**************************************************************************
Upgrading from release 3.16
---------------------------
1. The way LDAP returns values for multiple attributes has been changed to be
the same as the NIS+ lookup.
If you specify multiple attributes, they are returned as space-separated
strings, quoted if necessary.
e.g. ldap:///o=base?attr1,attr2?sub?(uid=fred)
used to give: attr1=value one, attr2=value2
now gives: attr1="value one" attr2=value2
If you don't specify any attributes in the search, you now get them in
the tagged format as well.
e.g. ldap:///o=base??sub?(uid=fred)
used to give: top, value one, value2
now gives: objectClass=top attr1="value one" attr2=value2
The reason for these changes is so that the results can be safely parsed -
in fact, the existing ${extract{key}{val}} function does this nicely.
This in turn allows a single LDAP query to be reused - one query can return
the destination delivery address, the quota, and so forth.
This is NOT a backwards compatible change, so there is a compile-time option
to reverse it in the src/lookups/ldap.c module, for use in emergency. But it is
not thought that the old behaviour was particularly useful as it stood, because
a field that contained ',' or '=' would make the result unparseable.
In the common case where you explicitly ask for a single attribute in your
LDAP query, the behaviour is unchanged - the result is not quoted, and if there
are multiple values they are comma-separated.
2. The hosts_max_try option in the smtp transport limits the number of IP
addresses that will actually be tried during one delivery attempt. The default
is 5. Previously, all available addresses were tried.
3. The extension of the "extract" expansion item has resulted in a change to
the way Exim decides between the keyed form and the numeric form. If the first
argument consists entirely of digits, the numeric form is assumed. This means
that it is impossible to have keys that are digit strings, without manipulating
the data first (e.g. by using ${sg} to add a letter to each key).
Upgrading from release 3.15
---------------------------
1. The handling of "freeze" and "fail" in system filter files has changed.
Previously, any deliveries set up by a filter that ended with "freeze" or
"fail" were discarded. This no longer happens; such deliveries are honoured.
A consequence of this is that first_delivery becomes false after freezing in a
system filter; previously it remained true until a real delivery attempt
happened.
Upgrading from release 3.13
---------------------------
1. The handling of maildir_tag has been changed (see NewStuff). There are two
small incompatibilities: (a) Exim now inserts a leading colon only if the
string begins with an alphanumeric character. So if you were using a string
starting with a special character, you will have to add the leading colon to
it to remain compatible. (b) The expansion of maildir_tag now happens after the
file has been written, and $message_size is updated to the correct file size
before the expansion. The tag is not used on the temporary file (it was
previously).
2. The handling of Exim's configuration has changed in two ways:
(a) Any line may be continued by ending it with a backslash. Trailing white
space after the backslash, and leading white space on continuation lines is
ignored. This means that quotes are no longer needed just to make it possible
to continue an option setting. The difference between quoted and non-quoted
strings is that quoted strings are processed for internal backslashed items
such as \n. The only possible incompatibility of this change is if any
existing configuration has a non-quoted line ended in backslash, which seems
a very remote possibility.
(b) All lists, with the exception of log_file_path, can now use a different
character to colon as the separator. This is specified by starting the list
with <x where x is any punctuation character. For example:
local_interfaces = <; 127.0.0.1 ; ::1
The new feature is provided to make life easier with IPv6 addresses. It is
recommended that its use be confined to circumstances where it really is
needed, and that colon be used in most cases. I don't believe this change
is incompatible, because I don't think any list item can legitimately begin
with a '<' character.
3. Previously, Exim took no action to ensure that the timestamps in its log
files were "wall clock time". If the TZ environment variable was set when Exim
was called, it could cause strange times to be logged. For the majority of
operating systems, I have been able to fix this problem by deleting the entire
environment. However, this doesn't work in some systems, and a macro called
HANDS_OFF_ENVIRONMENT is defined in their OS/os.h files to suppress the action.
These OS are: AIX, DGUX, HP-UX, IRIX, and SCO, and their behaviour should be
unchanged from previous releases. On any other OS, if you find you are getting
weird timestamps, it may be that your OS needs HANDS_OFF_ENVIRONMENT.
4. As a result of the change described in 3, there may be some cases where Exim
runs an external program that previously got passed the environment, and now do
not. This does *not* apply to the pipe transport, where the environment has
always been set up specifically, as described in the manual.
5. The way in which Exim scans its queue when split_spool_directory is set has
changed, but this shouldn't make any noticeable difference. See doc/NewStuff
for defails.
Upgrading from release 3.03
---------------------------
The from_hack option in the appendfile and pipe transports has been replace by
two string options, check_string and escape_string. If your configuration
contains any references to from_hack they should be replaced. Exim continues to
recognize from_hack as a transitional measure. If no_from_hack is specified in
an appendfile transport, the two new options are forced to be unset. Otherwise
the setting of from_hack is ignored.
Upgrading from release 3.02
---------------------------
The exim_dbmbuild utility has been changed to write a warning to stderr on
encountering a duplicate key, and to return a value of 1. Formerly, it ignored
all but the last of a set of duplicates; now it ignores all but the first, to
make dbm-searched files behave the same way as lsearch-searched files. However,
there is an option -lastdup which makes it behave as before. The -nowarn option
suppresses the individual warnings, but the number of duplicates is always
listed on stdout at the end.
Updating from a release prior to 3.00
-------------------------------------
Prior to release 3.00 a lot of options which contained lists of various kinds
came in groups such as sender_accept, sender_reject, sender_reject_except. This
style of configuration has been abolished. Instead, it is now possible to put
negative entries in such lists, so that a single option is all that is
required. In addition to this, net lists have been abolished, and instead,
host lists can now contain items that specify networks as well as hosts. The
names of some of these options have also been changed.
As a result of these changes, most configuration files used for earlier
versions of Exim need to be changed. The opportunity has therefore been taken
to remove a number of other obsolete features and options.
A Perl script is installed as /usr/sbin/exim-upgrade-to-r3 to assist in updating
Exim configuration files. It reads a configuration file on the standard input,
writes a modified file on the standard output, and writes comments about what
it has done to the standard error file. It assumes that the input is a valid
Exim configuration file. A typical call to the conversion script might be
exim-upgrade-to-r3 </opt/exim/configure >/opt/exim/configure.new
However, if you upgraded from an older debian package, this will have been done
for you by the install script.
The way the script merges an accept/reject/reject_except triple into a single
accept option is to put the reject_except list first, followed by the reject
list with every item negated, followed by the accept list. For example, if an
old configuration file contains
sender_host_accept_relay = *.c.d : e.f.g
sender_host_reject_relay = *.b.c.d
sender_host_reject_relay_except = a.b.c.d
the new configuration will contain
host_accept_relay = a.b.c.d : ! *.b.c.d : *.c.d : e.f.g
The same ordering is used to merge a triple into a reject option, but this time
the first and third sublists are negated. For example, if an old configuration
file contains
sender_host_accept = *.c.d : e.f.g
sender_host_reject = *.b.c.d
sender_host_reject_except = a.b.c.d
the new configuration file will contain
host_reject = ! a.b.c.d : *.b.c.d : ! *.c.d : ! e.f.g : *
The output file should be checked before trying to use it. Each option change
is preceded by an identifying comment. There are several specific things that
you should look out for when checking:
(1) If you are using macros to contain lists of items, and these have to be
negated in the new world, convert4r3 won't get it right. For example, if
the old configuration contains
ACCEPTHOSTS = *.c.d : e.f.g
sender_host_reject = ACCEPTHOSTS
then the rewritten configuration will be
ACCEPTHOSTS = *.c.d : e.f.g
host_reject = !ACCEPTHOSTS
but because this is just textual macro handling, that is equivalent to
host_reject = !*.c.d : e.f.g
which is not the correct translation, because the second item is not
negated. There is unfortunately no easy way to use a macro to provide a
list of things that are sometimes negated.
(2) The conversion adds some settings of file_transport, pipe_transport, and
reply_transport to aliasfile and forwardfile directors. This is done
because the global implicit defaults for these options have been removed.
The default configuration now contains explicit settings, so convert4r3
makes these additions to be compatible with that. If your aliasfile and
forwardfile directors do not make use of the pipe, file, or autoreply
facilities, you can remove these new settings.
(3) If you are using +allow_unknown in a host list which also has an exception
list, you may need to move +allow_unknown in the new configuration. For
example, if the old configuration contains
sender_host_reject = +allow_unknown : *.b.c
sender_host_reject_except = *.a.b.c
then the rewritten configuration will be
host_reject = ! *.a.b.c : +allow_unknown : *.b.c
Because the negated item contains a wild card, the reverse lookup for the
host name will occur before +allow_unknown is encountered, and therefore
+allow_unknown will have no effect. It should be moved to the start of the
list.
One way of upgrading Exim from a pre-3.00 release to a post-3.00 release is as
follows:
1. Suppose your configuration file is called /opt/exim/configure, and you want
to continue with this name after upgrading. The first thing to do is to make
another copy of this file called, say, /opt/exim/configure.pre-3.00.
2. Rebuild your existing Exim to use the copy of the configuration file instead
of the standard file. Install this version of Exim under a special name such
as exim-2.12, and point a symbolic link called "exim" at it. Then HUP your
daemon. You can check on the name of the configuration file by running
exim -bP configure_file
Ensure that everything is running smoothly.
3. Build the new release, configured to use the standard configuration file.
4. Use the convert4r3 utility to upgrade your configuration file for the new
release. After running it, check the file by hand.
5. If any of the options that convert4r3 rewrote contained regular expressions
that had backslashes in them, and were not previously in quotes, they will
need modification if convert4r3 has put them into quotes. Either re-arrange
the option to remove the quoting, or escape each backslash. For example, if
you had
sender_reject_recipients = ^\d{8}@
sender_reject_except = ^\d{8}@x.y.z
convert4r3 will have combined the two settings into
sender_reject_recipients = "! ^\d{8}@x.y.z : \
^\d{8}@"
This must be changed to
sender_reject_recipients = ! ^\d{8}@x.y.z : ^\d{8}@
or
sender_reject_recipients = "! ^\\d{8}@x.y.z : ^\\d{8}@"
In the second case, the quoted string could of course still be split
over several lines.
6. If your configuration refers to any external lists of networks, check them
to ensure that all the masks are in the single-number form, because Exim no
longer recognizes the dotted quad form of mask. For example, if an item in
a netlist file is
131.111.8.0/255.255.255.0
you must change it to
131.111.8.0/24
Otherwise Exim will not recognize it as a masked IP address, and will treat
it as a host name. The convert4r3 utility makes this conversion for networks
that are mentioned inline in the configuration, but it does not handle
referenced files.
7. Check the newly-built Exim as much as possible without installing; you can,
for example, use a command such as
./exim -bV
in the build directory to test that it successfully reads the new
configuration file. You can also do tests using -bt and -bh.
8. Install the new release under a special name such as exim-3.00.
9. You can then easily change between the new and old releases simply by moving
the symbolic link and HUPping your daemon.
Details of syntax changes at 3.00
=================================
1. A bare file name without a preceding search type may appear in a domain
list; this causes each line of the file to be read and processed as if it were
an item in the list, except that it cannot itself be a bare file name (that is,
this facility cannot be used recursively). Wild cards and regular expressions
may be used in the lines of the file just as in the main list.
For example, if
local_domains = /etc/local-domains
then the file could contain lines like
*.mydomain.com
This is different to an lsearch file, which operates like any other lookup type
and does an exact search for the key. If a # character appears anywhere in a
line of the file, it and all following characters are ignored. Blank lines are
also ignored.
2. Any item in a domain list (including a bare file name) can be preceded by an
exclamation mark character, to indicate negation. White space after the ! is
ignored. If the domain matches the rest of the item, it is *not* in the set of
domains that the option is defining. If the end of the list is reached, the
domain is accepted if the last item was a negative one, but not if it was a
positive one. If ! precedes a bare file name, then all items in the file are
negated, unless they are preceded by another exclamation mark. For example:
relay_domains = !a.b.c : *.b.c
sets up a.b.c as an exception to the more general item *.b.c, because lists are
processed from left to right. If the domain that is being checked matches
neither a.b.c nor *.b.c, then it is not accepted as a relay domain, because the
last item in the list is a positive item. However, if the option were just
relay_domains = !a.b.c
then all domains other than a.b.c would be relay domains, because the last item
in the list is a negative item. In effect, a list that ends with a negative
item has ": *" appended to it.
3. Negation and bare file names are available as above in lists of local parts
(e.g. in local_parts options) and complete addresses (address lists). For the
special "@@" lookup form in address lists, negation also can be used in the
list of local parts that is looked up for the domain. For example, with
sender_reject_recipients = @@dbm;/etc/reject-by-domain
the file could contain lines like this:
baddomain.com: !postmaster : !hostmaster : *
If a local part that actually begins with ! is required, it has to be specified
using a regular expression. Because local parts may legitimately contain #
characters, a comment in the file is recognized only if # is followed by white
space or the end of the line.
4. Host lists may now contain network items, as in the former net list options,
which have all been abolished. The only form of network masking is the /n
variety. Negation and bare file names can appear in host lists, and there is a
new type of item which allows masked network numbers to be used as keys in
lookups, thus making it possible to used DBM files for faster checking when the
list of networks is large.
The complete list of types of item which can now appear in a host list is:
. An item may be a bare file name; each line of the file may take the form of
any of the items below, but it may not itself be another bare file name. If
the file name is preceded by ! then all items in the file are negated, unless
they are preceded by another exclamation mark. Comments in the file are
introduced by # and blank lines are ignored.
. If the entire item is "*" it matches any host.
. If the item is in the form of an IP address, it is matched against the IP
address of the incoming call.
. If the item is in the form of an IP address followed by a slash and a mask
length (e.g. 131.111.0.0/16) then it is matched against the IP address of the
incoming call, subject to the mask.
. If the item is of the form "net<number>-<search-type>;<search-data>", for
example:
net24-dbm;/networks.db
then the IP address of the incoming call is masked using <number> as the mask
length; a textual string is then constructed from the masked value, followed
by the mask, and this is then used as the key for the lookup. For example, if
the incoming IP address is 192.152.34.6 then the key that is looked up for
the above example is "192.152.34.0/24".
. If the entire item is "@" the primary host name is used as the the match
item, and the following applies:
. If the item is a plain domain name, then a forward DNS lookup is done on that
name to find its IP address(es), and the result is compared with the IP
address of the incoming call.
The remaining items require the host name to be obtained by a reverse DNS
lookup. If the lookup fails, Exim takes a hard line by default and access is
not permitted. If the list is an "accept" list, Exim behaves as if the current
host is not in the set defined by the list, whereas if it is a "reject" list,
it behaves as if it is.
To change this behaviour, the special item "+allow_unknown" may appear in the
list (at top level - it is not recognized in an indirected file); if any
subsequent items require a host name, and the reverse DNS lookup fails, Exim
permits the access, that is, its behaviour is the opposite to the default.
. If the item starts with "*" then the remainder of the item must match the end
of the host name. For example, *.b.c matches all hosts whose names end in
.b.c. This special simple form is provided because this is a very common
requirement. Other kinds of wildcarding require the use of a regular
expression.
. If the item starts with "^" then it is taken to be a regular expression which
is matched against the host name. For example, ^(a|b)\.c\.d$ matches either
of the two hosts a.c.d or b.c.d. If the option string in which this occurs is
given in quotes, then the backslash characters must be doubled, because they
are significant in quoted strings. The following two settings are exactly
equivalent:
host_accept = ^(a|b)\.c\.d$
host_accept = "^(a|b)\\.c\\.d$"
. If the item is of the form <search-type>;<filename or query>, for example
dbm;/host/accept/list
then the host name is looked up using the search type and file name or query
(as appropriate). The actual data that is looked up is not used.
5. Early versions of Exim required commas and semicolons to terminate option
settings in drivers. This hasn't been the case for quite some time. The code to
handle them has now been removed.
Details of option changes at 3.00
=================================
Main options
------------
* address_directory_transport, address_directory2_transport,
address_file_transport, address_pipe_transport, and address_reply_transport
have been abolished as obsolete. The aliasfile and forwardfile directors
have been able for some time to set the transports they want to use for
these special kinds of delivery; there seems little need for global
defaults. The default configuration has been altered to add settings for
file_transport and pipe_transport to the aliasfile and forwardfile
directors, and to add reply_transport to forwardfile.
* check_dns_names, a deprecated synonym for dns_check_names, has been
abolished.
* helo_accept_junk_nets is abolished; nets can now appear in
helo_accept_junk_hosts.
* helo_verify_except_hosts and helo_verify_except_nets have been abolished,
and helo_verify has been changed from a boolean to a host list, listing
those hosts for which HELO verification is required.
* the obsolete option helo_verify_nets (a synonym for host_lookup_nets) has
been abolished. Note that host_lookup_nets itself has been replaced by
host_lookup.
* hold_domains_except has been abolished. Use negated items in hold_domains.
* host_lookup_nets has been replaced by host_lookup, which can contain hosts
and nets.
* ignore_fromline_nets has been replaced by ignore_fromline_hosts.
* If message_filter is set and the filter generates any deliveries to files,
pipes, or any autoreplies, then the appropriate message_filter_*_transport
options must be set to define the transports, following the abolition of
the global defaults (see above).
* queue_remote and queue_remote_except have been abolished and replaced by
queue_remote_domains, which lists those domains that should be queued. The
effect of queue_remote=true is now obtained by queue_remote_domains=*.
* queue_smtp and queue_smtp_except have been abolished and replaced by
queue_smtp_domains, which lists those domains that should be queued after
routing. The effect of queue_smtp=true is now obtained by
queue_smtp_domains=*.
* rbl_except_nets has been abolished and replaced by rbl_hosts, which can
contain hosts and nets. This defaults to "*" and defines the set of hosts
for which RBL checking is done.
* receiver_unqualified_nets is abolished; nets can now appear in
receiver_unqualified_hosts.
* receiver_verify_except_hosts and receiver_verify_except_nets have been
abolished and replaced by receiver_verify_hosts, which defaults to "*".
This is used, however, only when receiver_verify is set - together with the
other conditions (receiver_verify_addresses, receiver_verify_senders).
* receiver_verify_senders_except has been abolished; the functionality is now
available by using negation in receiver_verify_senders.
* rfc1413_except_hosts and rfc1413_except_nets have been abolished, and
replaced by rfc1413_hosts, which defaults to "*".
* sender_accept, sender_accept_recipients and sender_reject_except have
been abolished; the functionality is now available via sender_reject and
sender_reject_recipients.
* sender_host_accept, sender_net_accept, sender_host_reject,
sender_net_reject, sender_host_reject_except, sender_net_reject_except,
sender_host_reject_recipients and sender_net_reject_recipients
have all been abolished, and replaced by the options host_reject and
host_reject_recipients.
* sender_host_accept_relay, sender_net_accept_relay,
sender_host_reject_relay, sender_host_reject_relay_except,
sender_net_reject_relay, and sender_net_reject_relay_except are abolished,
and replaced by host_accept_relay. This defaults unset, and this means that
all relaying is now by default locked out in the Exim binary. Previously,
if no relaying options were set, relaying was permitted.
* sender_unqualified_nets has been abolished; nets can now appear in
sender_unqualified_hosts.
* sender_verify_except_hosts and sender_verify_except_nets have been
abolished and replaced by sender_verify_hosts, which defaults to "*". This
is used, however, only when sender_verify is set (to make it similar to
receiver_verify, even though there aren't at present any other conditions.)
* sender_verify_log_details has been abolished. This was a little-used
debugging option.
* smtp_etrn_nets has been abolished; nets can now appear in smtp_etrn_hosts.
* smtp_expn_nets has been abolished; nets can now appear in smtp_expn_hosts.
* smtp_log_connections, a deprecated synonym for log_smtp_connections, has
been abolished.
* smtp_reserve_nets is abolished; nets can now appear in smtp_reserve_hosts.
Generic director and router options
-----------------------------------
* except_domains, except_local_parts, and except_senders have been abolished.
Use negated items in domains, local_parts, and senders instead, for
example, replace
except_domains = a.b.c
with
domains = !a.b.c
If you already have a domains setting, add any negative items to the front
of it.
The aliasfile director
----------------------
* The option "directory", an obsolete synonym for home_directory, has been
abolished.
The forwardfile director
------------------------
* The option "directory", an obsolete synonym for file_directory, has been
abolished.
* The option forbid_filter_log, an obsolete synonym for
forbid_filter_logwrite, has been abolished.
The localuser director
----------------------
* The option "directory", an obsolete synonym for match_directory, has been
abolished.
The lookuphost router
---------------------
* mx_domains_except and its obsolete old name non_mx_domains have been
abolished. Use negated items in mx_domains.
The pipe transport
------------------
* The option "directory", an obsolete synonym for home_directory, has been
abolished.
The smtp transport
------------------
* mx_domains_except and its obsolete old name non_mx_domains have been
abolished. Use negated items in mx_domains.
* serialize_nets has been abolished; nets may now appear in serialize_hosts.
Other items relevant to upgrading from Exim 2.12
================================================
1. RFC 2505 (Anti-Spam Recommendations for SMTP MTAs) recommends that the
checking of addresses for spam blocks should be done entirely caselessly.
Previously, although Exim retained the case of the local part, in accordance
with the RFC 821 rule that local parts are case sensitive, some of the string
comparisons were nevertheless done caselessly, but file lookups used the
unmodified address.
The way addresses are compared with options whose values are address lists has
been changed. At the start of the comparison, both the local part and the
domain are now forced to lower case, and any comparisons that are done with
in-line strings are done caselessly. For example,
sender_reject = A@b.c
rejects both A@b.c and a@b.c. Any lookups that occur use lowercased strings as
their keys. If the @@ lookup facility is used, the lookup is done on the lower
cased domain name, but any subsequent string comparisons on local parts are
done caselessly.
To retain possibility of caseful matching, the pseudo-item "+caseful" can
appear in an address list. It causes any subsequent items to do caseful matches
on local parts. The domain, however, remains lower cased.
2. The handling of incoming batched SMTP has been re-worked so as to behave in
a more useful way in cases of error:
(i) The option sender_verify_batch now defaults false.
(ii) EOF is no longer interpreted as end-of-message; the "." line must be
present.
(iii) Exim stops immediately in cases of error, writing information to stdout
and stderr, and setting the return code to 1 if some messages have been
accepted, and 2 otherwise.
3. The first message delivered by -R, and all messages delivered by -Rf and -qf
are "forced" in the sense that retry information is over-ridden. Previously,
Exim also forcibly thawed any of these messages that was frozen. This no longer
happens. Additional options -Rff and -qff have been implemented to force
thawing as well as delivery.
4. When recipients are being rejected because the sending host is in an RBL
list, Exim used just to show the RBL text, if any, as part of the rejection
response. Now, if prohibition_message is set, it expands that string instead,
with the RBL message available in $rbl_text, and $prohibition_reason set to
"rbl_reject".
5. When a trusted caller passed a message to Exim, it used to check the From:
header against the caller's login (even though the caller was trusted) unless
the -f option had been used to supply a different sender. This has been changed
so that From: is never checked if the caller is trusted.
Philip Hazel
May 1999
Upgrading from Exim 2.05
------------------------
The local_parts and domains options in directors and routers are now expanded.
This means that if you previously had any $ characters in the settings, these
now need to be escaped with \. For example
local_parts = ^[^-_.].*$
should be changed to
local_parts = ^[^-_.].*\$
Philip Hazel
December 1998
Upgrading from Exim 1.92
------------------------
1. The transport options delivery_date_add, envelope_to_add, and
return_path_add, which were private to the appendfile and pipe transports, have
been made generic on all transports. The default settings are always FALSE,
whereas previously they were TRUE for appendfile. The default configuration
file now sets them on for the appendfile transports it defines. Any existing
configuration files which did not set these explicitly on appendfile transports
must be amended to maintain compatibility. It does no harm to set them for the
previous releases.
2. The code of the appendfile transport is now arranged so that the maildir
support is included only if SUPPORT_MAILDIR is set in the build-time
configuration.
3. All options that specify file mode values are now assumed to be octal, since
this is the common usage. If there are any configuration files which actually
specify such values in decimal, they must be changed.
4. The queue_list_requires_admin option, default TRUE, restricts the use of the
-bp option to admin users. If a non-admin user uses it, only messages that that
user has submitted are displayed. Previously there was no restriction on the
use of -bp.
5. The check_dns_names option, default TRUE, checks domain names for illegal
characters before passing them to the DNS resolver, because some resolvers give
temporary errors for bad names. Exim assumes non-existence for domain names
containing any characters other than letters, digits, full stops, and hyphens.
Note that in particular, domain names containing underscores are treated as
non-existent when this option is set.
Philip Hazel
July 1998
Upgrading from Exim 1.82
------------------------
1. The code is now arranged so that different lookup types (lsearch, dbm, etc.)
are coded in separate modules that can be included or omitted as required. The
old build-time configuration options HAVE_NIS and HAVE_NISPLUS have been
abolished, and instead there is a full set of new options called
LOOKUP_LSEARCH
LOOKUP_DBM
LOOKUP_NIS
LOOKUP_NISPLUS
which match the previously-supported lookup types, together with some new ones:
LOOKUP_DNSDB use DNS TXT records as a "database"
LOOKUP_LDAP do LDAP lookups
LOOKUP_TESTDB for testing Exim; not of general use
The default configuration file (src/EDITME) defines LOOKUP_LSEARCH and
LOOKUP_DBM by default, but anybody who is upgrading from an earlier version by
copying their previous Local/Makefile must add the relevant LOOKUP_xxx
definitions to that file. The options for NIS, NISPLUS, and LDAP should only be
set if you have installed the relevant software on your machine.
2. The handling of unqualified local parts preceded by \ in forward and alias
files has been changed. Previously, the \ was simply ignored, and the local
part got qualified with the value of qualify_recipient. Now it is always
qualified with the same domain as the incoming address. This can make a
difference if there are several local domains sharing the same set of
directors.
3. The add_headers and remove_headers generic transport options have been
renamed headers_add and headers_remove, to make them more like the new filter
commands "headers add" and "headers remove". However, the old names remain as
synonyms.
4. The exicyclog script now uses extensions of the form 01, 02, etc. instead of
just 1, 2, etc., so that files list in a more sensible order. If it finds a
file with the extension .1 it runs special code to rename all the old ones to
the new form.
5. On Solaris 2 systems, the system version number is used in creating the name
of the build directory, e.g. build-SunOS5-5.5.1-sparc, to enable different
binaries to be built for Solaris 2.5 and 2.6 from the same sources. The other
configuration files continue to use just "SunOS5" and are the same for all
Solaris versions.
6. The new option smtp_etrn_serialize permits only one ETRN-started queue run
for a given text string at once. I've made this option on by default, since
that is the safer state.
7. The default timeout for RFC 1413 ident calls has been reduced from 60 to 30
seconds because firewalls seem to be in the habit of letting such calls time
out instead of refusing the connection immediately. This meant that sending
MTAs behind firewalls could themselves time out while waiting for the SMTP
banner line to arrive from an Exim host.
Philip Hazel
March 1998
Upgrading from Exim 1.82
------------------------
1. The code is now arranged so that different lookup types (lsearch, dbm, etc.)
are coded in separate modules that can be included or omitted as required. The
old build-time configuration options HAVE_NIS and HAVE_NISPLUS have been
abolished, and instead there is a full set of new options called
LOOKUP_LSEARCH
LOOKUP_DBM
LOOKUP_NIS
LOOKUP_NISPLUS
which match the previously-supported lookup types, together with some new ones:
LOOKUP_DNSDB use DNS TXT records as a "database"
LOOKUP_LDAP do LDAP lookups
LOOKUP_TESTDB for testing Exim; not of general use
The default configuration file (src/EDITME) defines LOOKUP_LSEARCH and
LOOKUP_DBM by default, but anybody who is upgrading from an earlier version by
copying their previous Local/Makefile must add the relevant LOOKUP_xxx
definitions to that file. The options for NIS, NISPLUS, and LDAP should only be
set if you have installed the relevant software on your machine.
2. The handling of unqualified local parts preceded by \ in forward and alias
files has been changed. Previously, the \ was simply ignored, and the local
part got qualified with the value of qualify_recipient. Now it is always
qualified with the same domain as the incoming address. This can make a
difference if there are several local domains sharing the same set of
directors.
3. The add_headers and remove_headers generic transport options have been
renamed headers_add and headers_remove, to make them more like the new filter
commands "headers add" and "headers remove". However, the old names remain as
synonyms.
4. The exicyclog script now uses extensions of the form 01, 02, etc. instead of
just 1, 2, etc., so that files list in a more sensible order. If it finds a
file with the extension .1 it runs special code to rename all the old ones to
the new form.
5. On Solaris 2 systems, the system version number is used in creating the name
of the build directory, e.g. build-SunOS5-5.5.1-sparc, to enable different
binaries to be built for Solaris 2.5 and 2.6 from the same sources. The other
configuration files continue to use just "SunOS5" and are the same for all
Solaris versions.
6. The new option smtp_etrn_serialize permits only one ETRN-started queue run
for a given text string at once. I've made this option on by default, since
that is the safer state.
7. The default timeout for RFC 1413 ident calls has been reduced from 60 to 30
seconds because firewalls seem to be in the habit of letting such calls time
out instead of refusing the connection immediately. This meant that sending
MTAs behind firewalls could themselves time out while waiting for the SMTP
banner line to arrive from an Exim host.
Philip Hazel
March 1998
Upgrading from Exim 1.73
------------------------
1. The option called "helo_verify_nets" has been renamed "host_lookup_nets"
because the old name no longer properly describes its function. The old name
continues to be recognized in configuration files, but the new name is
displayed in option listings. There is a new option called "helo_verify",
turned off by default, which causes Exim to refuse a message if there is no
HELO (or EHLO) command, or if the name given in that command does not match the
host name from a reverse IP lookup. This contravenes the RFC, which is why it
is turned off by default.
2. The confusion between the real name of a calling host and the name given in
a HELO or EHLO command has been sorted out. The variable sender_host_name now
contains a host name as looked up from the IP address; the name given in a HELO
or EHLO command is now stored in sender_helo_name. The sender_fullhost
variable, which is what is used to construct log lines, contains one of the
following forms:
host-name [ip address]
sender_host_name and sender_helo_name are the same
host-name (helo-name) [ip address]
sender_host_name and sender_helo_name are not the same
(helo-name) [ip address]
no lookup of the IP address was done, or it failed
[ip address]
no lookup of the IP address was done, or it failed, and no HELO or EHLO
command has been received.
The eximstats utility gets its data from the log, and for a host name it takes
the first thing it finds after H= in a log entry, so it may now produce names
in parentheses.
Exim can be forced to try an IP address lookup for all incoming calls by
setting host_lookup_nets. This option replaces helo_verify_nets (whose name
remains for compatibiity). Otherwise it only does such a lookup if a HELO or
EHLO command quotes the primary host name or one of the local domains.
3. The (modified) Henry Spencer regular expression routines have been replaced
by PCRE, a library that provides regular expressions that are compatible with
Perl 5. This shouldn't make any difference to any existing expressions, but
there just might be some odd cases where it does.
4. I fixed what I decided was a bug: if a message has two or more envelope
recipients that result in a single delivery because they are the same, or
because they alias to the same secondary address, all the original addresses
are now shown in an Envelope-to: header that Exim generates.
5. The generic "self" router option was introduced in version 0.57 (about a
year ago), superseding the private "self_mx" option in the lookuphost router.
The old option was retained for compatibility, but the documentation for it
stated that it would be removed in some future version. This threatened action
has now come to pass.
6. A host specified by IP address in the "hosts" or "fallback_hosts" options of
the smtp transport was not being checked for being the local host (those
specified by name were checked). This has been rectified, and an error now
occurs. However, it is known that some people were exploiting this bug in
esoteric configurations; for their benefit, a new option called
"allow_localhost" has been implemented which allows the transport to carry on
in this circumstance. Of course, this should be set only when the configuration
is such that a loop is avoided.
7. The means of locking Exim's hints databases has been changed. Instead of
trying to lock on an open database, Exim opens an entirely separate file whose
name ends in "lockfile" and takes out a lock on that, before attempting to open
the database. This avoids problems with DBM libraries that do their own
locking, and should also fix some crashes that are suspected of being caused by
DBM libraries doing something at open time before they could be locked. This
change should be invisible, apart from the appearance of the new lock files in
the db directory. Once created, they do not get deleted.
8. The syntax of the configuration file for the various drivers has been
relaxed. Lines now need no terminator (comma and semicolon are just ignored),
and there is no requirement on the order of options, other than that the
"driver" option must appear before any private options.
9. The default setting of the search_parents option in the lookuphost router
has been changed from TRUE to FALSE, because too many people were getting
caught by the nasty effect it caused with wildcard MX records.
Philip Hazel
December 1997
Upgrading from Exim 1.62
------------------------
(1) There is a minor difference in the regular expression handling. I have
added some Perl-compatible features, which means that { and } are now
metacharacters. I have also removed the \> and \< escapes that previously
existed, to keep the syntax compatible with Perl, though it is only a small
subset. If you were using \> or \< (which I judge to be unlikely) in a regular
expression, you will have to change to the \b escape instead, and if you were
using { or } (also unlikely, I feel), they now have to be escaped with \.
(2). The -M option now requires an admin user (to make it like the -q option).
However, there is an option called no_prod_requires_admin which relaxes the
restriction in both cases.
(3) The main difference has to do with dbm files.
First Change
------------
If you have not changed the default configuration settings of DB_LOCK_RETRIES
or DB_LOCK_SLEEP then this will not affect you. Skip to the next section.
These parameters were previously used in all cases when trying to lock a hints
database. Where possible, the newer code does a blocking lock instead, with a
timeout that is controlled by DB_LOCK_TIMEOUT. The old parameters are still
used for gdbm (because it does its own locking, so its open fails with EAGAIN
on a locked file) and in the case of a Berkeley DB file that hasn't been
written yet (because that also fails on open).
Second Change
-------------
If you are using Berkeley DB or gdbm or any other dbm library that uses only a
single file, this will not affect you, and you need read no more.
If you are using ndbm or any other library that uses two files (with .dir and
.pag extensions), then read on. Note that gdbm appears to use two files with
these names, but in fact they are hard links to the same file, so it doesn't
count.
The problem is concerned with getting a file descriptor for locking. Exim was
developed using ndbm, and I just used the macro dbm_pagfno() to get a
suitable fd. It was a poor choice, because Berkeley DB 1.x provides only
dbm_dirfno(); consequently when people started to use this library, I fudged
things up with an option to chose which to use.
The situation has now got complicated with people wanting to use gdbm and
the arrival of Berkeley DB 2.x. I have decided to grasp the nettle and abolish
the messy scheme for deciding between dbm_pagfno() and dbm_dirfno() in favour
of using dbm_dirfno() all the time. I should have done this earlier, but
chickened out. Sorry about that.
The only effect this change will have is when changing over from an old version
of Exim to a new one (or vice versa). If two different versions of Exim are
running simultaneously, then they will fail to interlock against each other
when updating the hints databases.
Even if they clash, it isn't a major disaster, since the databases are only
hints, but there is a chance of corruption of a database, which would be worse
than just losing an update. There are two possible approaches:
(1) Take a chance and just upgrade, choosing a quiet time of day. I think there
is a good chance you will get away with this, even on moderately busy systems.
I did. If you do this, run exim_dumpdb after a while just to check that the
databases are ok. If there's any trouble, just delete them.
(2) Follow the following procedure to be absolutely safe:
. Kill your listening daemon so no new external mail is accepted, and
no queue runs are done. If using inetd, you will have to kill or
reconfigure it instead.
. Set queue_only in the configuration file, so no deliveries are done
from locally-generated messages.
. List all running Exim processes, and wait till they have completed. You
do not need to worry about new processes, which will only be receiving
local messages. Strictly, all you need to wait for are processes that are
doing deliveries, which you can find with exiwhat. It this is taking too
long (slow remote delivery, for example) you can kill the delivery
processes. The delivery will get retried later.
. Install the new Exim binary.
. Remove queue_only from the configuration file.
. Restart the daemon (or reconfigure/restart inetd).
As stated above, this is necessary *only* for systems running with ndbm, or any
other dbm library that uses two different files called .dir and .pag.
Philip Hazel
November 2000
|