Cautiously added ENABLE_DISABLE_FSYNC and disable_fsync, hedged about
[exim.git] / doc / doc-txt / NewStuff
index a24a21226a6d91c638c524913238983ba1e7ae7c..ac707ae4018a78ce146b300f159c3fed7f34c0fc 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/NewStuff,v 1.126 2007/01/15 15:59:22 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/NewStuff,v 1.129 2007/01/22 16:29:54 ph10 Exp $
 
 New Features in Exim
 --------------------
@@ -38,6 +38,154 @@ Version 4.67
     setting of 10 for smtp_accep_max_nonmail, the connection will in any case
     be aborted before 20 non-mail commands are processed.
 
+ 2. When an item in a dnslists list is followed by = and & and a list of IP
+    addresses, in order to restrict the match to specific results from the DNS
+    lookup, the behaviour was not clear when the lookup returned more than one
+    IP address. For example, consider the condition
+
+      dnslists = a.b.c=127.0.0.1
+
+    What happens if the DNS lookup for the incoming IP address yields both
+    127.0.0.1 and 127.0.0.2 by means of two separate DNS records? Is the
+    condition true because at least one given value was found, or is it false
+    because at least one of the found values was not listed? And how does this
+    affect negated conditions?
+
+    The behaviour of = and & has not been changed; however, the text below
+    documents it more clearly. In addition, two new additional conditions (==
+    and =&) have been added, to permit the "other" behaviour to be configured.
+
+    A DNS lookup may yield more than one record. Thus, the result of the lookup
+    for a dnslists check may yield more than one IP address. The question then
+    arises as to whether all the looked up addresses must be listed, or whether
+    just one is good enough. Both possibilities are provided for:
+
+    . If = or & is used, the condition is true if any one of the looked up
+      IP addresses matches one of the listed addresses. Consider:
+
+        dnslists = a.b.c=127.0.0.1
+
+      If the DNS lookup yields both 127.0.0.1 and 127.0.0.2, the condition is
+      true because 127.0.0.1 matches.
+
+    . If == or =& is used, the condition is true only if every one of the
+      looked up IP addresses matches one of the listed addresses. Consider:
+
+        dnslists = a.b.c==127.0.0.1
+
+      If the DNS lookup yields both 127.0.0.1 and 127.0.0.2, the condition is
+      false because 127.0.0.2 is not listed. You would need to have
+
+        dnslists = a.b.c==127.0.0.1,127.0.0.2
+
+      for the condition to be true.
+
+    When ! is used to negate IP address matching, it inverts the result, giving
+    the precise opposite of the behaviour above. Thus:
+
+    . If != or !& is used, the condition is true if none of the looked up IP
+      addresses matches one of the listed addresses. Consider:
+
+        dnslists = a.b.c!&0.0.0.1
+
+      If the DNS lookup yields both 127.0.0.1 and 127.0.0.2, the condition is
+      false because 127.0.0.1 matches.
+
+    . If !== or !=& is used, the condition is true there is at least one looked
+      up IP address that does not match. Consider:
+
+        dnslists = a.b.c!=&0.0.0.1
+
+      If the DNS lookup yields both 127.0.0.1 and 127.0.0.2, the condition is
+      true, because 127.0.0.2 does not match. You would need to have
+
+        dnslists = a.b.c!=&0.0.0.1,0.0.0.2
+
+      for the condition to be false.
+
+    When the DNS lookup yields only a single IP address, there is no difference
+    between = and == and between & and =&.
+
+ 3. Up till now, the only control over which cipher suites GnuTLS uses has been
+    for the cipher algorithms. New options have been added to allow some of the
+    other parameters to be varied. Here is complete documentation for the
+    available features:
+
+    GnuTLS allows the caller to specify separate lists of permitted key
+    exchange methods, main cipher algorithms, and MAC algorithms. These may be
+    used in any combination to form a specific cipher suite. This is unlike
+    OpenSSL, where complete cipher names can be passed to its control function.
+    GnuTLS also allows a list of acceptable protocols to be supplied.
+
+    For compatibility with OpenSSL, the tls_require_ciphers option can be set
+    to complete cipher suite names such as RSA_ARCFOUR_SHA, but for GnuTLS this
+    option controls only the cipher algorithms. Exim searches each item in the
+    list for the name of an available algorithm. For example, if the list
+    contains RSA_AES_SHA, then AES is recognized, and the behaviour is exactly
+    the same as if just AES were given.
+
+    There are additional options called gnutls_require_kx, gnutls_require_mac,
+    and gnutls_require_protocols that can be used to restrict the key exchange
+    methods, MAC algorithms, and protocols, respectively. These options are
+    ignored if OpenSSL is in use.
+
+    All four options are available as global options, controlling how Exim
+    behaves as a server, and also as options of the smtp transport, controlling
+    how Exim behaves as a client. All the values are string expanded. After
+    expansion, the values must be colon-separated lists, though the separator
+    can be changed in the usual way.
+
+    Each of the four lists starts out with a default set of algorithms. If the
+    first item in one of the "require" options does _not_ start with an
+    exclamation mark, all the default items are deleted. In this case, only
+    those that are explicitly specified can be used. If the first item in one
+    of the "require" items _does_ start with an exclamation mark, the defaults
+    are left on the list.
+
+    Then, any item that starts with an exclamation mark causes the relevant
+    entry to be removed from the list, and any item that does not start with an
+    exclamation mark causes a new entry to be added to the list. Unrecognized
+    items in the list are ignored. Thus:
+
+      tls_require_ciphers = !ARCFOUR
+
+    allows all the defaults except ARCFOUR, whereas
+
+      tls_require_ciphers = AES : 3DES
+
+    allows only cipher suites that use AES or 3DES. For tls_require_ciphers
+    the recognized names are AES_256, AES_128, AES (both of the preceding),
+    3DES, ARCFOUR_128, ARCFOUR_40, and ARCFOUR (both of the preceding). The
+    default list does not contain all of these; it just has AES_256, AES_128,
+    3DES, and ARCFOUR_128.
+
+    For gnutls_require_kx, the recognized names are DHE_RSA, RSA (which
+    includes DHE_RSA), DHE_DSS, and DHE (which includes both DHE_RSA and
+    DHE_DSS). The default list contains RSA, DHE_DSS, DHE_RSA.
+
+    For gnutls_require_mac, the recognized names are SHA (synonym SHA1), and
+    MD5. The default list contains SHA, MD5.
+
+    For gnutls_require_protocols, the recognized names are TLS1 and SSL3.
+    The default list contains TLS1, SSL3.
+
+    In a server, the order of items in these lists is unimportant. The server
+    will advertise the availability of all the relevant cipher suites. However,
+    in a client, the order in the tls_require_ciphers list specifies a
+    preference order for the cipher algorithms. The first one in the client's
+    list that is also advertised by the server is tried first.
+
+ 4. There is a new compile-time option called ENABLE_DISABLE_FSYNC. You must
+    not set this option unless you really, really, really understand what you
+    are doing. No pre-compiled distributions of Exim should ever set this
+    option. When it is set, Exim compiles a runtime option called
+    disable_fsync. If this is set true, Exim no longer calls fsync() to force
+    updated files' data to be written to disc. Unexpected events such as
+    crashes and power outages may cause data to be lost or scrambled. Beware.
+
+    When ENABLE_DISABLE_FSYNC is not set, a reference to disable_fsync in a
+    runtime configuration generates an "unknown option" error.
+
 
 Version 4.66
 ------------