Further tidies to the ${dlfunc code (thanks, Tony): redirect options are
[exim.git] / doc / doc-txt / NewStuff
index fc613073cdf91bc636d2af0f942db3dd131ed5ce..e6e55c7457d9b672b0955a9680b11ec221ee5786 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/NewStuff,v 1.26 2005/02/17 12:24:00 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/NewStuff,v 1.29 2005/03/22 15:02:34 ph10 Exp $
 
 New Features in Exim
 --------------------
@@ -9,6 +9,85 @@ updated when there is a relatively large batch of changes). The doc/ChangeLog
 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/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.
+
+
 Version 4.50
 ------------