| 1 | This document contains information about upgrading Exim to the last of the 3.xx |
| 2 | releases. It is provided to help anybody who is upgrading to release 4.xx from |
| 3 | a release that is earlier than 3.33. It goes back as far as release 2.12. If |
| 4 | you are upgrading to release 4.xx from an even earlier release, it is probably |
| 5 | best to start again from the default configuration. |
| 6 | |
| 7 | |
| 8 | Upgrading from release 3.16 |
| 9 | --------------------------- |
| 10 | |
| 11 | 1. The way LDAP returns values for multiple attributes has been changed to be |
| 12 | the same as the NIS+ lookup. |
| 13 | |
| 14 | If you specify multiple attributes, they are returned as space-separated |
| 15 | strings, quoted if necessary. |
| 16 | |
| 17 | e.g. ldap:///o=base?attr1,attr2?sub?(uid=fred) |
| 18 | |
| 19 | used to give: attr1=value one, attr2=value2 |
| 20 | now gives: attr1="value one" attr2=value2 |
| 21 | |
| 22 | If you don't specify any attributes in the search, you now get them in |
| 23 | the tagged format as well. |
| 24 | |
| 25 | e.g. ldap:///o=base??sub?(uid=fred) |
| 26 | |
| 27 | used to give: top, value one, value2 |
| 28 | now gives: objectClass=top attr1="value one" attr2=value2 |
| 29 | |
| 30 | The reason for these changes is so that the results can be safely parsed - |
| 31 | in fact, the existing ${extract{key}{val}} function does this nicely. |
| 32 | This in turn allows a single LDAP query to be reused - one query can return |
| 33 | the destination delivery address, the quota, and so forth. |
| 34 | |
| 35 | This is NOT a backwards compatible change, so there is a compile-time option |
| 36 | to reverse it in the src/lookups/ldap.c module, for use in emergency. But it is |
| 37 | not thought that the old behaviour was particularly useful as it stood, because |
| 38 | a field that contained ',' or '=' would make the result unparseable. |
| 39 | |
| 40 | In the common case where you explicitly ask for a single attribute in your |
| 41 | LDAP query, the behaviour is unchanged - the result is not quoted, and if there |
| 42 | are multiple values they are comma-separated. |
| 43 | |
| 44 | 2. The hosts_max_try option in the smtp transport limits the number of IP |
| 45 | addresses that will actually be tried during one delivery attempt. The default |
| 46 | is 5. Previously, all available addresses were tried. |
| 47 | |
| 48 | 3. The extension of the "extract" expansion item has resulted in a change to |
| 49 | the way Exim decides between the keyed form and the numeric form. If the first |
| 50 | argument consists entirely of digits, the numeric form is assumed. This means |
| 51 | that it is impossible to have keys that are digit strings, without manipulating |
| 52 | the data first (e.g. by using ${sg} to add a letter to each key). |
| 53 | |
| 54 | |
| 55 | Upgrading from release 3.15 |
| 56 | --------------------------- |
| 57 | |
| 58 | 1. The handling of "freeze" and "fail" in system filter files has changed. |
| 59 | Previously, any deliveries set up by a filter that ended with "freeze" or |
| 60 | "fail" were discarded. This no longer happens; such deliveries are honoured. |
| 61 | A consequence of this is that first_delivery becomes false after freezing in a |
| 62 | system filter; previously it remained true until a real delivery attempt |
| 63 | happened. |
| 64 | |
| 65 | |
| 66 | Upgrading from release 3.13 |
| 67 | --------------------------- |
| 68 | |
| 69 | 1. The handling of maildir_tag has been changed (see NewStuff). There are two |
| 70 | small incompatibilities: (a) Exim now inserts a leading colon only if the |
| 71 | string begins with an alphanumeric character. So if you were using a string |
| 72 | starting with a special character, you will have to add the leading colon to |
| 73 | it to remain compatible. (b) The expansion of maildir_tag now happens after the |
| 74 | file has been written, and $message_size is updated to the correct file size |
| 75 | before the expansion. The tag is not used on the temporary file (it was |
| 76 | previously). |
| 77 | |
| 78 | 2. The handling of Exim's configuration has changed in two ways: |
| 79 | |
| 80 | (a) Any line may be continued by ending it with a backslash. Trailing white |
| 81 | space after the backslash, and leading white space on continuation lines is |
| 82 | ignored. This means that quotes are no longer needed just to make it possible |
| 83 | to continue an option setting. The difference between quoted and non-quoted |
| 84 | strings is that quoted strings are processed for internal backslashed items |
| 85 | such as \n. The only possible incompatibility of this change is if any |
| 86 | existing configuration has a non-quoted line ended in backslash, which seems |
| 87 | a very remote possibility. |
| 88 | |
| 89 | (b) All lists, with the exception of log_file_path, can now use a different |
| 90 | character to colon as the separator. This is specified by starting the list |
| 91 | with <x where x is any punctuation character. For example: |
| 92 | |
| 93 | local_interfaces = <; 127.0.0.1 ; ::1 |
| 94 | |
| 95 | The new feature is provided to make life easier with IPv6 addresses. It is |
| 96 | recommended that its use be confined to circumstances where it really is |
| 97 | needed, and that colon be used in most cases. I don't believe this change |
| 98 | is incompatible, because I don't think any list item can legitimately begin |
| 99 | with a '<' character. |
| 100 | |
| 101 | 3. Previously, Exim took no action to ensure that the timestamps in its log |
| 102 | files were "wall clock time". If the TZ environment variable was set when Exim |
| 103 | was called, it could cause strange times to be logged. For the majority of |
| 104 | operating systems, I have been able to fix this problem by deleting the entire |
| 105 | environment. However, this doesn't work in some systems, and a macro called |
| 106 | HANDS_OFF_ENVIRONMENT is defined in their OS/os.h files to suppress the action. |
| 107 | These OS are: AIX, DGUX, HP-UX, IRIX, and SCO, and their behaviour should be |
| 108 | unchanged from previous releases. On any other OS, if you find you are getting |
| 109 | weird timestamps, it may be that your OS needs HANDS_OFF_ENVIRONMENT. |
| 110 | |
| 111 | 4. As a result of the change described in 3, there may be some cases where Exim |
| 112 | runs an external program that previously got passed the environment, and now do |
| 113 | not. This does *not* apply to the pipe transport, where the environment has |
| 114 | always been set up specifically, as described in the manual. |
| 115 | |
| 116 | 5. The way in which Exim scans its queue when split_spool_directory is set has |
| 117 | changed, but this shouldn't make any noticeable difference. See doc/NewStuff |
| 118 | for defails. |
| 119 | |
| 120 | |
| 121 | Upgrading from release 3.03 |
| 122 | --------------------------- |
| 123 | |
| 124 | The from_hack option in the appendfile and pipe transports has been replace by |
| 125 | two string options, check_string and escape_string. If your configuration |
| 126 | contains any references to from_hack they should be replaced. Exim continues to |
| 127 | recognize from_hack as a transitional measure. If no_from_hack is specified in |
| 128 | an appendfile transport, the two new options are forced to be unset. Otherwise |
| 129 | the setting of from_hack is ignored. |
| 130 | |
| 131 | |
| 132 | Upgrading from release 3.02 |
| 133 | --------------------------- |
| 134 | |
| 135 | The exim_dbmbuild utility has been changed to write a warning to stderr on |
| 136 | encountering a duplicate key, and to return a value of 1. Formerly, it ignored |
| 137 | all but the last of a set of duplicates; now it ignores all but the first, to |
| 138 | make dbm-searched files behave the same way as lsearch-searched files. However, |
| 139 | there is an option -lastdup which makes it behave as before. The -nowarn option |
| 140 | suppresses the individual warnings, but the number of duplicates is always |
| 141 | listed on stdout at the end. |
| 142 | |
| 143 | |
| 144 | Updating from a release prior to 3.00 |
| 145 | ------------------------------------- |
| 146 | |
| 147 | Prior to release 3.00 a lot of options which contained lists of various kinds |
| 148 | came in groups such as sender_accept, sender_reject, sender_reject_except. This |
| 149 | style of configuration has been abolished. Instead, it is now possible to put |
| 150 | negative entries in such lists, so that a single option is all that is |
| 151 | required. In addition to this, net lists have been abolished, and instead, |
| 152 | host lists can now contain items that specify networks as well as hosts. The |
| 153 | names of some of these options have also been changed. |
| 154 | |
| 155 | As a result of these changes, most configuration files used for earlier |
| 156 | versions of Exim need to be changed. The opportunity has therefore been taken |
| 157 | to remove a number of other obsolete features and options. |
| 158 | |
| 159 | A Perl script is built in the file util/convert4r3 to assist in updating Exim |
| 160 | configuration files. It reads a configuration file on the standard input, |
| 161 | writes a modified file on the standard output, and writes comments about what |
| 162 | it has done to the standard error file. It assumes that the input is a valid |
| 163 | Exim configuration file. A typical call to the conversion script might be |
| 164 | |
| 165 | util/convert4r3 </opt/exim/configure >/opt/exim/configure.new |
| 166 | |
| 167 | The way the script merges an accept/reject/reject_except triple into a single |
| 168 | accept option is to put the reject_except list first, followed by the reject |
| 169 | list with every item negated, followed by the accept list. For example, if an |
| 170 | old configuration file contains |
| 171 | |
| 172 | sender_host_accept_relay = *.c.d : e.f.g |
| 173 | sender_host_reject_relay = *.b.c.d |
| 174 | sender_host_reject_relay_except = a.b.c.d |
| 175 | |
| 176 | the new configuration will contain |
| 177 | |
| 178 | host_accept_relay = a.b.c.d : ! *.b.c.d : *.c.d : e.f.g |
| 179 | |
| 180 | The same ordering is used to merge a triple into a reject option, but this time |
| 181 | the first and third sublists are negated. For example, if an old configuration |
| 182 | file contains |
| 183 | |
| 184 | sender_host_accept = *.c.d : e.f.g |
| 185 | sender_host_reject = *.b.c.d |
| 186 | sender_host_reject_except = a.b.c.d |
| 187 | |
| 188 | the new configuration file will contain |
| 189 | |
| 190 | host_reject = ! a.b.c.d : *.b.c.d : ! *.c.d : ! e.f.g : * |
| 191 | |
| 192 | The output file should be checked before trying to use it. Each option change |
| 193 | is preceded by an identifying comment. There are several specific things that |
| 194 | you should look out for when checking: |
| 195 | |
| 196 | (1) If you are using macros to contain lists of items, and these have to be |
| 197 | negated in the new world, convert4r3 won't get it right. For example, if |
| 198 | the old configuration contains |
| 199 | |
| 200 | ACCEPTHOSTS = *.c.d : e.f.g |
| 201 | sender_host_reject = ACCEPTHOSTS |
| 202 | |
| 203 | then the rewritten configuration will be |
| 204 | |
| 205 | ACCEPTHOSTS = *.c.d : e.f.g |
| 206 | host_reject = !ACCEPTHOSTS |
| 207 | |
| 208 | but because this is just textual macro handling, that is equivalent to |
| 209 | |
| 210 | host_reject = !*.c.d : e.f.g |
| 211 | |
| 212 | which is not the correct translation, because the second item is not |
| 213 | negated. There is unfortunately no easy way to use a macro to provide a |
| 214 | list of things that are sometimes negated. |
| 215 | |
| 216 | (2) The conversion adds some settings of file_transport, pipe_transport, and |
| 217 | reply_transport to aliasfile and forwardfile directors. This is done |
| 218 | because the global implicit defaults for these options have been removed. |
| 219 | The default configuration now contains explicit settings, so convert4r3 |
| 220 | makes these additions to be compatible with that. If your aliasfile and |
| 221 | forwardfile directors do not make use of the pipe, file, or autoreply |
| 222 | facilities, you can remove these new settings. |
| 223 | |
| 224 | (3) If you are using +allow_unknown in a host list which also has an exception |
| 225 | list, you may need to move +allow_unknown in the new configuration. For |
| 226 | example, if the old configuration contains |
| 227 | |
| 228 | sender_host_reject = +allow_unknown : *.b.c |
| 229 | sender_host_reject_except = *.a.b.c |
| 230 | |
| 231 | then the rewritten configuration will be |
| 232 | |
| 233 | host_reject = ! *.a.b.c : +allow_unknown : *.b.c |
| 234 | |
| 235 | Because the negated item contains a wild card, the reverse lookup for the |
| 236 | host name will occur before +allow_unknown is encountered, and therefore |
| 237 | +allow_unknown will have no effect. It should be moved to the start of the |
| 238 | list. |
| 239 | |
| 240 | One way of upgrading Exim from a pre-3.00 release to a post-3.00 release is as |
| 241 | follows: |
| 242 | |
| 243 | 1. Suppose your configuration file is called /opt/exim/configure, and you want |
| 244 | to continue with this name after upgrading. The first thing to do is to make |
| 245 | another copy of this file called, say, /opt/exim/configure.pre-3.00. |
| 246 | |
| 247 | 2. Rebuild your existing Exim to use the copy of the configuration file instead |
| 248 | of the standard file. Install this version of Exim under a special name such |
| 249 | as exim-2.12, and point a symbolic link called "exim" at it. Then HUP your |
| 250 | daemon. You can check on the name of the configuration file by running |
| 251 | |
| 252 | exim -bP configure_file |
| 253 | |
| 254 | Ensure that everything is running smoothly. |
| 255 | |
| 256 | 3. Build the new release, configured to use the standard configuration file. |
| 257 | |
| 258 | 4. Use the convert4r3 utility to upgrade your configuration file for the new |
| 259 | release. After running it, check the file by hand. |
| 260 | |
| 261 | 5. If any of the options that convert4r3 rewrote contained regular expressions |
| 262 | that had backslashes in them, and were not previously in quotes, they will |
| 263 | need modification if convert4r3 has put them into quotes. Either re-arrange |
| 264 | the option to remove the quoting, or escape each backslash. For example, if |
| 265 | you had |
| 266 | |
| 267 | sender_reject_recipients = ^\d{8}@ |
| 268 | sender_reject_except = ^\d{8}@x.y.z |
| 269 | |
| 270 | convert4r3 will have combined the two settings into |
| 271 | |
| 272 | sender_reject_recipients = "! ^\d{8}@x.y.z : \ |
| 273 | ^\d{8}@" |
| 274 | |
| 275 | This must be changed to |
| 276 | |
| 277 | sender_reject_recipients = ! ^\d{8}@x.y.z : ^\d{8}@ |
| 278 | or |
| 279 | sender_reject_recipients = "! ^\\d{8}@x.y.z : ^\\d{8}@" |
| 280 | |
| 281 | In the second case, the quoted string could of course still be split |
| 282 | over several lines. |
| 283 | |
| 284 | 6. If your configuration refers to any external lists of networks, check them |
| 285 | to ensure that all the masks are in the single-number form, because Exim no |
| 286 | longer recognizes the dotted quad form of mask. For example, if an item in |
| 287 | a netlist file is |
| 288 | |
| 289 | 131.111.8.0/255.255.255.0 |
| 290 | |
| 291 | you must change it to |
| 292 | |
| 293 | 131.111.8.0/24 |
| 294 | |
| 295 | Otherwise Exim will not recognize it as a masked IP address, and will treat |
| 296 | it as a host name. The convert4r3 utility makes this conversion for networks |
| 297 | that are mentioned inline in the configuration, but it does not handle |
| 298 | referenced files. |
| 299 | |
| 300 | 7. Check the newly-built Exim as much as possible without installing; you can, |
| 301 | for example, use a command such as |
| 302 | |
| 303 | ./exim -bV |
| 304 | |
| 305 | in the build directory to test that it successfully reads the new |
| 306 | configuration file. You can also do tests using -bt and -bh. |
| 307 | |
| 308 | 8. Install the new release under a special name such as exim-3.00. |
| 309 | |
| 310 | 9. You can then easily change between the new and old releases simply by moving |
| 311 | the symbolic link and HUPping your daemon. |
| 312 | |
| 313 | |
| 314 | Details of syntax changes at 3.00 |
| 315 | ================================= |
| 316 | |
| 317 | 1. A bare file name without a preceding search type may appear in a domain |
| 318 | list; this causes each line of the file to be read and processed as if it were |
| 319 | an item in the list, except that it cannot itself be a bare file name (that is, |
| 320 | this facility cannot be used recursively). Wild cards and regular expressions |
| 321 | may be used in the lines of the file just as in the main list. |
| 322 | For example, if |
| 323 | |
| 324 | local_domains = /etc/local-domains |
| 325 | |
| 326 | then the file could contain lines like |
| 327 | |
| 328 | *.mydomain.com |
| 329 | |
| 330 | This is different to an lsearch file, which operates like any other lookup type |
| 331 | and does an exact search for the key. If a # character appears anywhere in a |
| 332 | line of the file, it and all following characters are ignored. Blank lines are |
| 333 | also ignored. |
| 334 | |
| 335 | 2. Any item in a domain list (including a bare file name) can be preceded by an |
| 336 | exclamation mark character, to indicate negation. White space after the ! is |
| 337 | ignored. If the domain matches the rest of the item, it is *not* in the set of |
| 338 | domains that the option is defining. If the end of the list is reached, the |
| 339 | domain is accepted if the last item was a negative one, but not if it was a |
| 340 | positive one. If ! precedes a bare file name, then all items in the file are |
| 341 | negated, unless they are preceded by another exclamation mark. For example: |
| 342 | |
| 343 | relay_domains = !a.b.c : *.b.c |
| 344 | |
| 345 | sets up a.b.c as an exception to the more general item *.b.c, because lists are |
| 346 | processed from left to right. If the domain that is being checked matches |
| 347 | neither a.b.c nor *.b.c, then it is not accepted as a relay domain, because the |
| 348 | last item in the list is a positive item. However, if the option were just |
| 349 | |
| 350 | relay_domains = !a.b.c |
| 351 | |
| 352 | then all domains other than a.b.c would be relay domains, because the last item |
| 353 | in the list is a negative item. In effect, a list that ends with a negative |
| 354 | item has ": *" appended to it. |
| 355 | |
| 356 | 3. Negation and bare file names are available as above in lists of local parts |
| 357 | (e.g. in local_parts options) and complete addresses (address lists). For the |
| 358 | special "@@" lookup form in address lists, negation also can be used in the |
| 359 | list of local parts that is looked up for the domain. For example, with |
| 360 | |
| 361 | sender_reject_recipients = @@dbm;/etc/reject-by-domain |
| 362 | |
| 363 | the file could contain lines like this: |
| 364 | |
| 365 | baddomain.com: !postmaster : !hostmaster : * |
| 366 | |
| 367 | If a local part that actually begins with ! is required, it has to be specified |
| 368 | using a regular expression. Because local parts may legitimately contain # |
| 369 | characters, a comment in the file is recognized only if # is followed by white |
| 370 | space or the end of the line. |
| 371 | |
| 372 | 4. Host lists may now contain network items, as in the former net list options, |
| 373 | which have all been abolished. The only form of network masking is the /n |
| 374 | variety. Negation and bare file names can appear in host lists, and there is a |
| 375 | new type of item which allows masked network numbers to be used as keys in |
| 376 | lookups, thus making it possible to used DBM files for faster checking when the |
| 377 | list of networks is large. |
| 378 | |
| 379 | The complete list of types of item which can now appear in a host list is: |
| 380 | |
| 381 | . An item may be a bare file name; each line of the file may take the form of |
| 382 | any of the items below, but it may not itself be another bare file name. If |
| 383 | the file name is preceded by ! then all items in the file are negated, unless |
| 384 | they are preceded by another exclamation mark. Comments in the file are |
| 385 | introduced by # and blank lines are ignored. |
| 386 | |
| 387 | . If the entire item is "*" it matches any host. |
| 388 | |
| 389 | . If the item is in the form of an IP address, it is matched against the IP |
| 390 | address of the incoming call. |
| 391 | |
| 392 | . If the item is in the form of an IP address followed by a slash and a mask |
| 393 | length (e.g. 131.111.0.0/16) then it is matched against the IP address of the |
| 394 | incoming call, subject to the mask. |
| 395 | |
| 396 | . If the item is of the form "net<number>-<search-type>;<search-data>", for |
| 397 | example: |
| 398 | |
| 399 | net24-dbm;/networks.db |
| 400 | |
| 401 | then the IP address of the incoming call is masked using <number> as the mask |
| 402 | length; a textual string is then constructed from the masked value, followed |
| 403 | by the mask, and this is then used as the key for the lookup. For example, if |
| 404 | the incoming IP address is 192.152.34.6 then the key that is looked up for |
| 405 | the above example is "192.152.34.0/24". |
| 406 | |
| 407 | . If the entire item is "@" the primary host name is used as the the match |
| 408 | item, and the following applies: |
| 409 | |
| 410 | . If the item is a plain domain name, then a forward DNS lookup is done on that |
| 411 | name to find its IP address(es), and the result is compared with the IP |
| 412 | address of the incoming call. |
| 413 | |
| 414 | The remaining items require the host name to be obtained by a reverse DNS |
| 415 | lookup. If the lookup fails, Exim takes a hard line by default and access is |
| 416 | not permitted. If the list is an "accept" list, Exim behaves as if the current |
| 417 | host is not in the set defined by the list, whereas if it is a "reject" list, |
| 418 | it behaves as if it is. |
| 419 | |
| 420 | To change this behaviour, the special item "+allow_unknown" may appear in the |
| 421 | list (at top level - it is not recognized in an indirected file); if any |
| 422 | subsequent items require a host name, and the reverse DNS lookup fails, Exim |
| 423 | permits the access, that is, its behaviour is the opposite to the default. |
| 424 | |
| 425 | . If the item starts with "*" then the remainder of the item must match the end |
| 426 | of the host name. For example, *.b.c matches all hosts whose names end in |
| 427 | .b.c. This special simple form is provided because this is a very common |
| 428 | requirement. Other kinds of wildcarding require the use of a regular |
| 429 | expression. |
| 430 | |
| 431 | . If the item starts with "^" then it is taken to be a regular expression which |
| 432 | is matched against the host name. For example, ^(a|b)\.c\.d$ matches either |
| 433 | of the two hosts a.c.d or b.c.d. If the option string in which this occurs is |
| 434 | given in quotes, then the backslash characters must be doubled, because they |
| 435 | are significant in quoted strings. The following two settings are exactly |
| 436 | equivalent: |
| 437 | |
| 438 | host_accept = ^(a|b)\.c\.d$ |
| 439 | host_accept = "^(a|b)\\.c\\.d$" |
| 440 | |
| 441 | . If the item is of the form <search-type>;<filename or query>, for example |
| 442 | |
| 443 | dbm;/host/accept/list |
| 444 | |
| 445 | then the host name is looked up using the search type and file name or query |
| 446 | (as appropriate). The actual data that is looked up is not used. |
| 447 | |
| 448 | 5. Early versions of Exim required commas and semicolons to terminate option |
| 449 | settings in drivers. This hasn't been the case for quite some time. The code to |
| 450 | handle them has now been removed. |
| 451 | |
| 452 | |
| 453 | Details of option changes at 3.00 |
| 454 | ================================= |
| 455 | |
| 456 | Main options |
| 457 | ------------ |
| 458 | |
| 459 | * address_directory_transport, address_directory2_transport, |
| 460 | address_file_transport, address_pipe_transport, and address_reply_transport |
| 461 | have been abolished as obsolete. The aliasfile and forwardfile directors |
| 462 | have been able for some time to set the transports they want to use for |
| 463 | these special kinds of delivery; there seems little need for global |
| 464 | defaults. The default configuration has been altered to add settings for |
| 465 | file_transport and pipe_transport to the aliasfile and forwardfile |
| 466 | directors, and to add reply_transport to forwardfile. |
| 467 | |
| 468 | * check_dns_names, a deprecated synonym for dns_check_names, has been |
| 469 | abolished. |
| 470 | |
| 471 | * helo_accept_junk_nets is abolished; nets can now appear in |
| 472 | helo_accept_junk_hosts. |
| 473 | |
| 474 | * helo_verify_except_hosts and helo_verify_except_nets have been abolished, |
| 475 | and helo_verify has been changed from a boolean to a host list, listing |
| 476 | those hosts for which HELO verification is required. |
| 477 | |
| 478 | * the obsolete option helo_verify_nets (a synonym for host_lookup_nets) has |
| 479 | been abolished. Note that host_lookup_nets itself has been replaced by |
| 480 | host_lookup. |
| 481 | |
| 482 | * hold_domains_except has been abolished. Use negated items in hold_domains. |
| 483 | |
| 484 | * host_lookup_nets has been replaced by host_lookup, which can contain hosts |
| 485 | and nets. |
| 486 | |
| 487 | * ignore_fromline_nets has been replaced by ignore_fromline_hosts. |
| 488 | |
| 489 | * If message_filter is set and the filter generates any deliveries to files, |
| 490 | pipes, or any autoreplies, then the appropriate message_filter_*_transport |
| 491 | options must be set to define the transports, following the abolition of |
| 492 | the global defaults (see above). |
| 493 | |
| 494 | * queue_remote and queue_remote_except have been abolished and replaced by |
| 495 | queue_remote_domains, which lists those domains that should be queued. The |
| 496 | effect of queue_remote=true is now obtained by queue_remote_domains=*. |
| 497 | |
| 498 | * queue_smtp and queue_smtp_except have been abolished and replaced by |
| 499 | queue_smtp_domains, which lists those domains that should be queued after |
| 500 | routing. The effect of queue_smtp=true is now obtained by |
| 501 | queue_smtp_domains=*. |
| 502 | |
| 503 | * rbl_except_nets has been abolished and replaced by rbl_hosts, which can |
| 504 | contain hosts and nets. This defaults to "*" and defines the set of hosts |
| 505 | for which RBL checking is done. |
| 506 | |
| 507 | * receiver_unqualified_nets is abolished; nets can now appear in |
| 508 | receiver_unqualified_hosts. |
| 509 | |
| 510 | * receiver_verify_except_hosts and receiver_verify_except_nets have been |
| 511 | abolished and replaced by receiver_verify_hosts, which defaults to "*". |
| 512 | This is used, however, only when receiver_verify is set - together with the |
| 513 | other conditions (receiver_verify_addresses, receiver_verify_senders). |
| 514 | |
| 515 | * receiver_verify_senders_except has been abolished; the functionality is now |
| 516 | available by using negation in receiver_verify_senders. |
| 517 | |
| 518 | * rfc1413_except_hosts and rfc1413_except_nets have been abolished, and |
| 519 | replaced by rfc1413_hosts, which defaults to "*". |
| 520 | |
| 521 | * sender_accept, sender_accept_recipients and sender_reject_except have |
| 522 | been abolished; the functionality is now available via sender_reject and |
| 523 | sender_reject_recipients. |
| 524 | |
| 525 | * sender_host_accept, sender_net_accept, sender_host_reject, |
| 526 | sender_net_reject, sender_host_reject_except, sender_net_reject_except, |
| 527 | sender_host_reject_recipients and sender_net_reject_recipients |
| 528 | have all been abolished, and replaced by the options host_reject and |
| 529 | host_reject_recipients. |
| 530 | |
| 531 | * sender_host_accept_relay, sender_net_accept_relay, |
| 532 | sender_host_reject_relay, sender_host_reject_relay_except, |
| 533 | sender_net_reject_relay, and sender_net_reject_relay_except are abolished, |
| 534 | and replaced by host_accept_relay. This defaults unset, and this means that |
| 535 | all relaying is now by default locked out in the Exim binary. Previously, |
| 536 | if no relaying options were set, relaying was permitted. |
| 537 | |
| 538 | * sender_unqualified_nets has been abolished; nets can now appear in |
| 539 | sender_unqualified_hosts. |
| 540 | |
| 541 | * sender_verify_except_hosts and sender_verify_except_nets have been |
| 542 | abolished and replaced by sender_verify_hosts, which defaults to "*". This |
| 543 | is used, however, only when sender_verify is set (to make it similar to |
| 544 | receiver_verify, even though there aren't at present any other conditions.) |
| 545 | |
| 546 | * sender_verify_log_details has been abolished. This was a little-used |
| 547 | debugging option. |
| 548 | |
| 549 | * smtp_etrn_nets has been abolished; nets can now appear in smtp_etrn_hosts. |
| 550 | |
| 551 | * smtp_expn_nets has been abolished; nets can now appear in smtp_expn_hosts. |
| 552 | |
| 553 | * smtp_log_connections, a deprecated synonym for log_smtp_connections, has |
| 554 | been abolished. |
| 555 | |
| 556 | * smtp_reserve_nets is abolished; nets can now appear in smtp_reserve_hosts. |
| 557 | |
| 558 | Generic director and router options |
| 559 | ----------------------------------- |
| 560 | |
| 561 | * except_domains, except_local_parts, and except_senders have been abolished. |
| 562 | Use negated items in domains, local_parts, and senders instead, for |
| 563 | example, replace |
| 564 | |
| 565 | except_domains = a.b.c |
| 566 | |
| 567 | with |
| 568 | |
| 569 | domains = !a.b.c |
| 570 | |
| 571 | If you already have a domains setting, add any negative items to the front |
| 572 | of it. |
| 573 | |
| 574 | The aliasfile director |
| 575 | ---------------------- |
| 576 | |
| 577 | * The option "directory", an obsolete synonym for home_directory, has been |
| 578 | abolished. |
| 579 | |
| 580 | The forwardfile director |
| 581 | ------------------------ |
| 582 | |
| 583 | * The option "directory", an obsolete synonym for file_directory, has been |
| 584 | abolished. |
| 585 | |
| 586 | * The option forbid_filter_log, an obsolete synonym for |
| 587 | forbid_filter_logwrite, has been abolished. |
| 588 | |
| 589 | The localuser director |
| 590 | ---------------------- |
| 591 | |
| 592 | * The option "directory", an obsolete synonym for match_directory, has been |
| 593 | abolished. |
| 594 | |
| 595 | The lookuphost router |
| 596 | --------------------- |
| 597 | |
| 598 | * mx_domains_except and its obsolete old name non_mx_domains have been |
| 599 | abolished. Use negated items in mx_domains. |
| 600 | |
| 601 | The pipe transport |
| 602 | ------------------ |
| 603 | |
| 604 | * The option "directory", an obsolete synonym for home_directory, has been |
| 605 | abolished. |
| 606 | |
| 607 | The smtp transport |
| 608 | ------------------ |
| 609 | |
| 610 | * mx_domains_except and its obsolete old name non_mx_domains have been |
| 611 | abolished. Use negated items in mx_domains. |
| 612 | |
| 613 | * serialize_nets has been abolished; nets may now appear in serialize_hosts. |
| 614 | |
| 615 | |
| 616 | Other items relevant to upgrading from Exim 2.12 |
| 617 | ================================================ |
| 618 | |
| 619 | 1. RFC 2505 (Anti-Spam Recommendations for SMTP MTAs) recommends that the |
| 620 | checking of addresses for spam blocks should be done entirely caselessly. |
| 621 | Previously, although Exim retained the case of the local part, in accordance |
| 622 | with the RFC 821 rule that local parts are case sensitive, some of the string |
| 623 | comparisons were nevertheless done caselessly, but file lookups used the |
| 624 | unmodified address. |
| 625 | |
| 626 | The way addresses are compared with options whose values are address lists has |
| 627 | been changed. At the start of the comparison, both the local part and the |
| 628 | domain are now forced to lower case, and any comparisons that are done with |
| 629 | in-line strings are done caselessly. For example, |
| 630 | |
| 631 | sender_reject = A@b.c |
| 632 | |
| 633 | rejects both A@b.c and a@b.c. Any lookups that occur use lowercased strings as |
| 634 | their keys. If the @@ lookup facility is used, the lookup is done on the lower |
| 635 | cased domain name, but any subsequent string comparisons on local parts are |
| 636 | done caselessly. |
| 637 | |
| 638 | To retain possibility of caseful matching, the pseudo-item "+caseful" can |
| 639 | appear in an address list. It causes any subsequent items to do caseful matches |
| 640 | on local parts. The domain, however, remains lower cased. |
| 641 | |
| 642 | 2. The handling of incoming batched SMTP has been re-worked so as to behave in |
| 643 | a more useful way in cases of error: |
| 644 | |
| 645 | (i) The option sender_verify_batch now defaults false. |
| 646 | (ii) EOF is no longer interpreted as end-of-message; the "." line must be |
| 647 | present. |
| 648 | (iii) Exim stops immediately in cases of error, writing information to stdout |
| 649 | and stderr, and setting the return code to 1 if some messages have been |
| 650 | accepted, and 2 otherwise. |
| 651 | |
| 652 | 3. The first message delivered by -R, and all messages delivered by -Rf and -qf |
| 653 | are "forced" in the sense that retry information is over-ridden. Previously, |
| 654 | Exim also forcibly thawed any of these messages that was frozen. This no longer |
| 655 | happens. Additional options -Rff and -qff have been implemented to force |
| 656 | thawing as well as delivery. |
| 657 | |
| 658 | 4. When recipients are being rejected because the sending host is in an RBL |
| 659 | list, Exim used just to show the RBL text, if any, as part of the rejection |
| 660 | response. Now, if prohibition_message is set, it expands that string instead, |
| 661 | with the RBL message available in $rbl_text, and $prohibition_reason set to |
| 662 | "rbl_reject". |
| 663 | |
| 664 | 5. When a trusted caller passed a message to Exim, it used to check the From: |
| 665 | header against the caller's login (even though the caller was trusted) unless |
| 666 | the -f option had been used to supply a different sender. This has been changed |
| 667 | so that From: is never checked if the caller is trusted. |
| 668 | |
| 669 | Philip Hazel |
| 670 | May 1999 |
| 671 | |