X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/b5aea5e16720f8b17bcbbf54af966ba034432db9..f656d13573661ac5a0d4fc49b932a3c961ee3eca:/doc/doc-txt/NewStuff diff --git a/doc/doc-txt/NewStuff b/doc/doc-txt/NewStuff index 827c5d1dc..2df222c99 100644 --- a/doc/doc-txt/NewStuff +++ b/doc/doc-txt/NewStuff @@ -1,4 +1,4 @@ -$Cambridge: exim/doc/doc-txt/NewStuff,v 1.27 2005/03/08 11:38:21 ph10 Exp $ +$Cambridge: exim/doc/doc-txt/NewStuff,v 1.38 2005/04/28 13:29:27 ph10 Exp $ New Features in Exim -------------------- @@ -12,32 +12,163 @@ file contains a listing of all changes, including bug fixes. Version 4.51 ------------ -PH/01. The format in which GnuTLS parameters are written to the gnutls-param - file in the spool directory has been changed. This change has been made - to alleviate problems that some people had with the generation of the - parameters by Exim when /dev/random was exhausted. In this situation, - Exim would hang until /dev/random acquired some more entropy. - - The new code exports and imports the DH and RSA parameters in PEM - format. This means that the parameters can be generated externally using - the certtool command that is part of GnuTLS. - - To replace the parameters with new ones, instead of deleting the file - and letting Exim re-create it, you can generate new parameters using - certtool and, when this has been done, replace Exim's cache file by - renaming. The relevant commands are something like this: - - # rm -f new.params - # touch new.params - # chown exim:exim new.params - # chmod 0400 new.params - # certtool --generate-privkey --bits 512 >new.params - # echo "" >>new.params - # certtool --generate-dh-params --bits 1024 >> new.params - # mv new.params params - - If Exim never has to generate the parameters itself, the possibility of - stalling is removed. +PH/01 The format in which GnuTLS parameters are written to the gnutls-param + file in the spool directory has been changed. This change has been made + to alleviate problems that some people had with the generation of the + parameters by Exim when /dev/random was exhausted. In this situation, + Exim would hang until /dev/random acquired some more entropy. + + The new code exports and imports the DH and RSA parameters in PEM + format. This means that the parameters can be generated externally using + the certtool command that is part of GnuTLS. + + To replace the parameters with new ones, instead of deleting the file + and letting Exim re-create it, you can generate new parameters using + certtool and, when this has been done, replace Exim's cache file by + renaming. The relevant commands are something like this: + + # rm -f new.params + # touch new.params + # chown exim:exim new.params + # chmod 0400 new.params + # certtool --generate-privkey --bits 512 >new.params + # echo "" >>new.params + # certtool --generate-dh-params --bits 1024 >> new.params + # mv new.params params + + If Exim never has to generate the parameters itself, the possibility of + stalling is removed. + +PH/02 A new expansion item for dynamically loading and calling a locally- + written C function is now provided, if Exim is compiled with + + EXPAND_DLFUNC=yes + + set in Local/Makefile. The facility is not included by default (a + suitable error is given if you try to use it when it is not there.) + + If you enable EXPAND_DLFUNC, you should also be aware of the new redirect + router option forbid_filter_dlfunc. If you have unprivileged users on + your system who are permitted to create filter files, you might want to + set forbid_filter_dlfunc=true in the appropriate router, to stop them + using ${dlfunc to run code within Exim. + + You load and call an external function like this: + + ${dlfunc{/some/file}{function}{arg1}{arg2}...} + + Once loaded, Exim remembers the dynamically loaded object so that it + doesn't reload the same object file in the same Exim process (but of + course Exim does start new processes frequently). + + There may be from zero to eight arguments to the function. When compiling + a local function that is to be called in this way, local_scan.h should be + included. The Exim variables and functions that are defined by that API + are also available for dynamically loaded functions. The function itself + must have the following type: + + int dlfunction(uschar **yield, int argc, uschar *argv[]) + + Where "uschar" is a typedef for "unsigned char" in local_scan.h. The + function should return one of the following values: + + OK Success. The string that is placed in "yield" is put into + the expanded string that is being built. + + FAIL A non-forced expansion failure occurs, with the error + message taken from "yield", if it is set. + + FAIL_FORCED A forced expansion failure occurs, with the error message + taken from "yield" if it is set. + + ERROR Same as FAIL, except that a panic log entry is written. + + When compiling a function that is to be used in this way with gcc, + you need to add -shared to the gcc command. Also, in the Exim build-time + configuration, you must add -export-dynamic to EXTRALIBS. + +TF/01 $received_time is a new expansion variable containing the time and date + as a number of seconds since the start of the Unix epoch when the + current message was received. + +PH/03 There is a new value for RADIUS_LIB_TYPE that can be set in + Local/Makefile. It is RADIUSCLIENTNEW, and it requests that the new API, + in use from radiusclient 0.4.0 onwards, be used. It does not appear to be + possible to detect the different versions automatically. + +PH/04 There is a new option called acl_not_smtp_mime that allows you to scan + MIME parts in non-SMTP messages. It operates in exactly the same way as + acl_smtp_mime + +PH/05 It is now possible to redefine a macro within the configuration file. + The macro must have been previously defined within the configuration (or + an included file). A definition on the command line using the -D option + causes all definitions and redefinitions within the file to be ignored. + In other words, -D overrides any values that are set in the file. + Redefinition is specified by using '==' instead of '='. For example: + + MAC1 = initial value + ... + MAC1 == updated value + + Redefinition does not alter the order in which the macros are applied to + the subsequent lines of the configuration file. It is still the same + order in which the macros were originally defined. All that changes is + the macro's value. Redefinition makes it possible to accumulate values. + For example: + + MAC1 = initial value + ... + MAC1 == MAC1 and something added + + This can be helpful in situations where the configuration file is built + from a number of other files. + +PH/06 Macros may now be defined or redefined between router, transport, + authenticator, or ACL definitions, as well as in the main part of the + configuration. They may not, however, be changed within an individual + driver or ACL, or in the local_scan, retry, or rewrite sections of the + configuration. + +PH/07 $acl_verify_message is now set immediately after the failure of a + verification in an ACL, and so is available in subsequent modifiers. In + particular, the message can be preserved by coding like this: + + warn !verify = sender + set acl_m0 = $acl_verify_message + + Previously, $acl_verify_message was set only while expanding "message" + and "log_message" when a very denied access. + +PH/08 The redirect router has two new options, sieve_useraddress and + sieve_subaddress. These are passed to a Sieve filter to specify the :user + and :subaddress parts of an address. Both options are unset by default. + However, when a Sieve filter is run, if sieve_useraddress is unset, the + entire original local part (including any prefix or suffix) is used for + :user. An unset subaddress is treated as an empty subaddress. + +PH/09 Quota values can be followed by G as well as K and M. + +PH/10 $message_linecount is a new variable that contains the total number of + lines in the header and body of the message. Compare $body_linecount, + which is the count for the body only. During the DATA and + content-scanning ACLs, $message_linecount contains the number of lines + received. Before delivery happens (that is, before filters, routers, and + transports run) the count is increased to include the Received: header + line that Exim standardly adds, and also any other header lines that are + added by ACLs. The blank line that separates the message header from the + body is not counted. Here is an example of the use of this variable in a + DATA ACL: + + deny message = Too many lines in message header + condition = \ + ${if <{250}{${eval: $message_linecount - $body_linecount}}} + + In the MAIL and RCPT ACLs, the value is zero because at that stage the + message has not yet been received. + +PH/11 In a ${run expansion, the variable $value (which contains the standard + output) is now also usable in the "else" string. Version 4.50