# # spec file for package exim (Version 4.64) # # Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine # package are under the same license as the package itself. # # Please submit bugfixes or comments via http://bugs.opensuse.org/ # # norootforbuild Name: exim BuildRequires: db-devel openldap2-devel pcre-devel %if %{?suse_version:1}%{?!suse_version:0} BuildRequires: tcpd-devel %if %suse_version > 910 BuildRequires: xorg-x11-devel %else BuildRequires: XFree86-devel XFree86-libs %endif %else BuildRequires: libXaw-devel libXext-devel libXt-devel openssl-devel tcp_wrappers xorg-x11-server-sdk %endif %if %{?build_with_mysql:1}0 BuildRequires: mysql-devel Provides: exim = %{version}-%{release} %endif URL: http://www.exim.org/ Conflicts: sendmail sendmail-tls postfix License: GNU General Public License (GPL) Group: Productivity/Networking/Email/Servers Autoreqprov: on provides: smtp_daemon %if %{?suse_version:%suse_version}%{?!suse_version:0} > 800 Requires: logrotate PreReq: %insserv_prereq %fillup_prereq /usr/sbin/useradd fileutils textutils %endif Version: 4.64 Release: 1 Summary: The Exim Mail Transfer Agent, a Replacement for sendmail BuildRoot: %{_tmppath}/%{name}-%{version}-build Source: exim-%{version}.tar.bz2 Source1: sysconfig.exim Source2: exim.logrotate Source11: exim.rc Source12: permissions.exim Source20: http://www.logic.univie.ac.at/~ametzler/debian/exim4manpages/exim4-manpages.tar.bz2 Source30: eximstats-html-update.py Source31: eximstats.conf Patch: exim-4.12-tail.patch Patch2: exim-4.60-external-pcre.diff %if !%{?build_with_mysql:1}0 %package -n eximon Summary: Eximon, an graphical frontend to administer Exim's mail queue Group: Productivity/Networking/Email/Servers %package -n eximstats-html Summary: Create HTML reports of exim logs Group: Productivity/Networking/Email/Servers Requires: perl-GD perl-GDGraph perl-GDTextUtil %endif %description Exim is a mail transport agent (MTA) developed at the University of Cambridge for use on Unix systems connected to the Internet. It is freely available under the terms of the GNU General Public Licence. In style, it is similar to Smail 3, but its facilities are more extensive. In particular, it has options for verifying incoming sender and recipient addresses, for refusing mail from specified hosts, networks, or senders, and for controlling mail relaying. Authors: -------- Philip Hazel %if !%{?build_with_mysql:1}0 %description -n eximon This allows administrators to view the exim agent's mail queue and logs, and perform a variety of actions on queued messages, such as freezing, bouncing and thawing messages, and even editing body and header of mails. Authors: -------- Philip Hazel %description -n eximstats-html If this package is installed alongside the exim MTA, and you enable EXIM_REPORT_WEEKLY_HTML in /etc/sysconfig/exim, logrotate/cron will create HTML reports in /srv/www/eximstats. You can edit /etc/apache2/conf.d/eximstats.conf to configure your webserver for the reports. The script /usr/sbin/eximstats-html-update.py can create the reports for log files that were rotated in the past. (You would only run this once, if at all. The rest is done by logrotate / cron.) Authors: -------- Philip Hazel %endif %prep %setup -q -n exim-%{version} %patch %patch2 -p1 # build with fPIE/pie on SUSE 10.0 or newer, or on any other platform %if %{?suse_version:%suse_version}%{?!suse_version:99999} > 930 fPIE="-fPIE" pie="-pie" %endif cat <<-EOF > Local/Makefile # see src/EDITME for comments. BIN_DIRECTORY=/usr/sbin CONFIGURE_FILE=/etc/exim/exim.conf EXIM_USER=mail EXIM_GROUP=mail SPOOL_DIRECTORY=/var/spool/exim ROUTER_ACCEPT=yes ROUTER_DNSLOOKUP=yes ROUTER_IPLITERAL=yes ROUTER_MANUALROUTE=yes ROUTER_QUERYPROGRAM=yes ROUTER_REDIRECT=yes # ROUTER_IPLOOKUP=yes TRANSPORT_APPENDFILE=yes TRANSPORT_AUTOREPLY=yes TRANSPORT_PIPE=yes TRANSPORT_SMTP=yes TRANSPORT_LMTP=yes SUPPORT_MAILDIR=yes SUPPORT_MAILSTORE=yes SUPPORT_MBX=yes LOOKUP_DBM=yes LOOKUP_LSEARCH=yes LOOKUP_CDB=yes LOOKUP_DNSDB=yes LOOKUP_DSEARCH=yes LOOKUP_LDAP=yes %if %{?build_with_mysql:1}0 LOOKUP_MYSQL=yes %endif LOOKUP_NIS=yes # LOOKUP_NISPLUS=yes # LOOKUP_ORACLE=yes LOOKUP_PASSWD=yes # LOOKUP_PGSQL=yes # LOOKUP_WHOSON=yes CYRUS_SASLAUTHD_SOCKET=/var/run/sasl2/mux LDAP_LIB_TYPE=OPENLDAP2 # LOOKUP_INCLUDE=-I /usr/local/ldap/include -I /usr/local/mysql/include -I /usr/local/pgsql/include # LOOKUP_LIBS=-L/usr/local/lib -lldap -llber -lmysqlclient -lpq LOOKUP_LIBS=-lldap -llber %if %{?build_with_mysql:1}0 LOOKUP_INCLUDE=-I /usr/include/mysql LOOKUP_LIBS=-lldap -llber -lmysqlclient %endif EXIM_MONITOR=eximon.bin WITH_CONTENT_SCAN=yes WITH_OLD_DEMIME=yes AUTH_CRAM_MD5=yes AUTH_PLAINTEXT=yes # AUTH_SPA=yes AUTH_DOVECOT=yes SUPPORT_TLS=yes TLS_LIBS=-lssl -lcrypto INFO_DIRECTORY=%{_infodir} LOG_FILE_PATH=/var/log/exim/%%s.log EXICYCLOG_MAX=10 SYSLOG_LOG_PID=yes COMPRESS_COMMAND=/bin/gzip COMPRESS_SUFFIX=gz ZCAT_COMMAND=/usr/bin/zcat # SUPPORT_PAM=yes # You probably need to add -lpam to EXTRALIBS # RADIUS_CONFIG_FILE=/etc/radiusclient/radiusclient.conf # CYRUS_PWCHECK_SOCKET=/var/pwcheck/pwcheck # USE_TCP_WRAPPERS=yes NO_SYMLINK=yes CHOWN_COMMAND=/bin/chown CHGRP_COMMAND=/bin/chgrp MV_COMMAND=/bin/mv RM_COMMAND=/bin/rm PERL_COMMAND=/usr/bin/perl # APPENDFILE_MODE=0600 # APPENDFILE_DIRECTORY_MODE=0700 # APPENDFILE_LOCKFILE_MODE=0600 # CONFIGURE_FILE_USE_NODE=yes # CONFIGURE_FILE_USE_EUID=yes # DELIVER_BUFFER_SIZE=8192 # EXIMDB_DIRECTORY_MODE=0750 # EXIMDB_MODE=0640 # EXIMDB_LOCKFILE_MODE=0640 # HEADER_MAXSIZE="(1024*1024)" # INPUT_DIRECTORY_MODE=0750 # LOG_DIRECTORY_MODE=0750 # LOG_MODE=0640 # LOOKUP_TESTDB=yes MAKE_SHELL=/bin/bash # MAX_NAMED_LIST=16 # MAXINTERFACES=250 # MSGLOG_DIRECTORY_MODE=0750 # PERL_CC= # PERL_CCOPTS= # PERL_LIBS= PID_FILE_PATH=/var/run/exim.pid # SPOOL_DIRECTORY_MODE=0750 # SPOOL_MODE=0640 SUPPORT_MOVE_FROZEN_MESSAGES=yes HAVE_IPV6=YES CFLAGS=$RPM_OPT_FLAGS -Wall -fno-strict-aliasing -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DLDAP_DEPRECATED $fPIE EXTRALIBS=-ldl -L/usr/X11R6/%{_lib} $pie EOF touch Local/eximon.conf rm -f doc/*.{orig,txt~} %build %if %{?suse_version:%suse_version}%{?!suse_version:99999} <= 800 /usr/sbin/useradd -o -g mail -u 8 -s /bin/false -c "Mailer daemon" -d /var/spool/clientmqueue mail 2> /dev/null || : %endif make %install rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT/etc/init.d mkdir -p $RPM_BUILD_ROOT/etc/logrotate.d mkdir -p $RPM_BUILD_ROOT/usr/{bin,sbin,lib} mkdir -p $RPM_BUILD_ROOT/var/log/exim mkdir -p $RPM_BUILD_ROOT/var/spool/mail/ mkdir -p $RPM_BUILD_ROOT/var/adm/fillup-templates mkdir -p $RPM_BUILD_ROOT%{_mandir}/man8 mkdir -p $RPM_BUILD_ROOT/usr/X11R6/bin make inst_dest=$RPM_BUILD_ROOT/usr/sbin \ inst_conf=$RPM_BUILD_ROOT/etc/exim/exim.conf \ inst_info=$RPM_BUILD_ROOT/%{_infodir} \ INSTALL_ARG=-no_chown install mv $RPM_BUILD_ROOT/usr/sbin/exim-%{version}* $RPM_BUILD_ROOT/usr/sbin/exim mv $RPM_BUILD_ROOT/etc/exim/exim.conf src/configure.default # with all substitutions done install -m 755 %{S:11} $RPM_BUILD_ROOT/etc/init.d/exim # aka... for i in \ /usr/lib/sendmail \ /usr/bin/runq \ /usr/bin/rsmtp \ /usr/bin/mailq \ /usr/bin/newaliases do ln -sf ../sbin/exim $RPM_BUILD_ROOT$i done ln -sf exim $RPM_BUILD_ROOT/usr/sbin/sendmail ln -sv ../../etc/init.d/exim $RPM_BUILD_ROOT/usr/sbin/rcexim %if !%{?build_with_mysql:1}0 mv $RPM_BUILD_ROOT/usr/sbin/eximon* $RPM_BUILD_ROOT/usr/X11R6/bin/ %else rm $RPM_BUILD_ROOT/usr/sbin/eximon* %endif cp -p %{S:1} $RPM_BUILD_ROOT/var/adm/fillup-templates/sysconfig.exim install -m 644 %{S:2} $RPM_BUILD_ROOT/etc/logrotate.d/exim # man pages mv doc/exim.8 $RPM_BUILD_ROOT/%{_mandir}/man8/ pod2man --center=EXIM --section=8 $RPM_BUILD_ROOT/usr/sbin/eximstats > $RPM_BUILD_ROOT/%{_mandir}/man8/eximstats.8 tar xvjf %{S:20} cp -p exim4-manpages/* $RPM_BUILD_ROOT/%{_mandir}/man8/ for i in \ sendmail \ runq \ rsmtp \ mailq \ newaliases do ln -sf exim.8.gz $RPM_BUILD_ROOT/%{_mandir}/man8/$i.8.gz done for i in \ exim_dumpdb \ exim_fixdb \ exim_tidydb do ln -sf exim_db.8.gz $RPM_BUILD_ROOT/%{_mandir}/man8/$i.8.gz done perl -pi -e 's%/usr/share/doc/exim4%/usr/share/doc/packages/exim%g' `find $RPM_BUILD_ROOT/%{_mandir}/man8 -name "*.8"` gzip -9 doc/*.txt # since 10.0, the permissions file is packaged in the 'permissions' package %if %{?suse_version:%suse_version}%{?!suse_version:99999} < 1000 install -m 0755 -d $RPM_BUILD_ROOT/etc/permissions.d install -m 0644 $RPM_SOURCE_DIR/permissions.exim $RPM_BUILD_ROOT/etc/permissions.d/exim %endif # eximstats-html files %if !%{?build_with_mysql:1}0 mkdir -p $RPM_BUILD_ROOT/srv/www/eximstats mkdir -p $RPM_BUILD_ROOT/etc/apache2/conf.d/ cp -p $RPM_SOURCE_DIR/eximstats.conf $RPM_BUILD_ROOT/etc/apache2/conf.d/ install -m 0755 $RPM_SOURCE_DIR/eximstats-html-update.py $RPM_BUILD_ROOT/%{_sbindir} %endif %if %{?suse_version:%suse_version}%{?!suse_version:99999} <= 800 %pre /usr/sbin/useradd -o -g mail -u 8 -s /bin/false -c "Mailer daemon" -d /var/spool/clientmqueue mail 2> /dev/null || : %endif %post %run_permissions if ! test -s etc/exim/exim.conf; then if test -s etc/exim.conf; then mv etc/exim.conf etc/exim/ echo moving exim.conf to /etc/exim/ else cp -p usr/share/doc/packages/exim/configure.default etc/exim/exim.conf echo copying default config file to /etc/exim/exim.conf fi fi # create logfiles if missing for i in var/log/exim/main.log var/log/exim/panic.log var/log/exim/reject.log; do if ! test -e $i; then touch $i; chown mail:mail $i; chmod 640 $i ; fi done %if %{?suse_version:%suse_version}%{?!suse_version:99999} < 800 echo "Updating /etc/rc.config..." bin/cat > var/adm/fillup-templates/rc.config.exim <<-EOF # # Start the exim mail transfer agent? (yes|no) # START_EXIM=no EOF bin/fillup -q etc/rc.config var/adm/fillup-templates/rc.config.exim bin/rm var/adm/fillup-templates/rc.config.exim bin/fillup -q etc/rc.config var/adm/fillup-templates/sysconfig.exim sbin/insserv etc/init.d/exim %else %{fillup_and_insserv exim} %endif exit 0 %if %{?suse_version:%suse_version}%{?!suse_version:0} > 820 %preun %stop_on_removal exim %endif %postun %if %{?suse_version:%suse_version}%{?!suse_version:0} > 820 %restart_on_update exim %endif %insserv_cleanup %verifyscript %verify_permissions -e /usr/sbin/exim %clean %files %defattr(-,root,root) %doc ACKNOWLEDGMENTS CHANGES LICENCE NOTICE README.UPDATING README %doc doc %doc src/configure.default %doc build-Linux-*/convert4r{3,4} %doc util %doc %{_mandir}/man8/* /usr/sbin/exicyclog /usr/sbin/exigrep /usr/sbin/exiqgrep %verify(not mode) %attr(4755,root,root) /usr/sbin/exim /usr/sbin/exim_* /usr/sbin/eximstats /usr/sbin/exinext /usr/sbin/exipick /usr/sbin/exiqsumm /usr/sbin/exiwhat %dir /etc/exim %config /etc/init.d/exim %config(noreplace) /etc/logrotate.d/exim %if %{?suse_version:%suse_version}%{?!suse_version:99999} < 1000 %config(noreplace) /etc/permissions.d/exim %endif /usr/sbin/rcexim /usr/bin/mailq /usr/bin/runq /usr/bin/rsmtp /usr/bin/newaliases /usr/sbin/sendmail /usr/lib/sendmail /var/adm/fillup-templates/sysconfig.exim %dir %attr(750,root,mail) /var/log/exim %if !%{?build_with_mysql:1}0 %files -n eximon %defattr(-,root,root) /usr/X11R6/bin/eximon /usr/X11R6/bin/eximon.bin %files -n eximstats-html %defattr(-,root,root) %attr(0750,root,www) /srv/www/eximstats /etc/apache2 /etc/apache2/conf.d /etc/apache2/conf.d/eximstats.conf %{_sbindir}/eximstats-html-update.py %endif %changelog -n exim * Wed Dec 20 2006 - poeml@suse.de - update to 4.64 TK/01 Bugzilla #401. Fix DK spooling code so that it can overwrite a leftover -K file (the existence of which was triggered by #402). While we were at it, introduced process PID as part of the -K filename. This should rule out race conditions when creating these files. TK/02 Bugzilla #402. Apply patch from Simon Arlott, speeding up DK signing processing considerably. Previous code took too long for large mails, triggering a timeout which in turn triggers #401. TK/03 Introduced HAVE_LINUX_SENDFILE to os.h-Linux. Currently only used in the DK code in transports.c. sendfile() is not really portable, hence the _LINUX specificness. TF/01 In the add_headers option to the mail command in an Exim filter, there was a bug that Exim would claim a syntax error in any header after the first one which had an odd number of characters in the field name. PH/01 If a server that rejects MAIL FROM:<> was the target of a sender callout verification, Exim cached a "reject" for the entire domain. This is correct for most verifications, but it is not correct for a recipient verification with use_sender or use_postmaster set, because in that case the callout does not use MAIL FROM:<>. Exim now distinguishes the special case of MAIL FROM:<> rejection from other early rejections (e.g. rejection of HELO). When verifying a recipient using a non-null MAIL address, the cache is ignored if it shows MAIL FROM:<> rejection. Whatever the result of the callout, the value of the domain cache is left unchanged (for any other kind of callout, getting as far as trying RCPT means that the domain itself is ok). PH/02 Tidied a number of unused variable and signed/unsigned warnings that gcc 4.1.1 threw up. PH/03 On Solaris, an unexpectedly close socket (dropped connection) can manifest itself as EPIPE rather than ECONNECT. When tidying away a session, the daemon ignores ECONNECT errors and logs others; it now ignores EPIPE as well. PH/04 Applied Nico Erfurth's refactoring patch to tidy up mime.c (quoted-printable decoding). PH/05 Applied Nico Erfurth's refactoring patch to tidy up spool_mbox.c, and later the small subsequent patch to fix an introduced bug. PH/06 Installed the latest Cygwin Makefile from the Cygwin maintainer. PH/07 There was no check for overflow in expansions such as ${if >{1}{4096M}}. PH/08 An error is now given if message_size_limit is specified negative. PH/09 Applied and tidied up Jakob Hirsch's patch for allowing ACL variables to be given (somewhat) arbitrary names. JJ/01 exipick 20060919.0, allow for arbitrary acl_ variables introduced in 4.64-PH/09. JJ/02 exipick 20060919.0, --show-vars args can now be regular expressions, miscellaneous code fixes PH/10 Added the log_reject_target ACL modifier to specify where to log rejections. PH/11 Callouts were setting the name used for EHLO/HELO from $smtp_active_ hostname. This is wrong, because it relates to the incoming message (and probably the interface on which it is arriving) and not to the outgoing callout (which could be using a different interface). This has been changed to use the value of the helo_data option from the smtp transport instead - this is what is used when a message is actually being sent. If there is no remote transport (possible with a router that sets up host addresses), $smtp_active_hostname is used. PH/12 Installed Andrey Panin's patch to add a dovecot authenticator. Various tweaks were necessary in order to get it to work (see also 21 below): (a) The code assumed that strncpy() returns a negative number on buffer overflow, which isn't the case. Replaced with Exim's string_format() function. (b) There were several signed/unsigned issues. I just did the minimum hacking in of casts. There is scope for a larger refactoring. (c) The code used strcasecmp() which is not a standard C function. Replaced with Exim's strcmpic() function. (d) The code set only $1; it now sets $auth1 as well. (e) A simple test gave the error "authentication client didn't specify service in request". It would seem that Dovecot has changed its interface. Fortunately there's a specification; I followed it and changed what the client sends and it appears to be working now. PH/13 Added $message_headers_raw to provide the headers without RFC 2047 decoding. PH/14 Corrected misleading output from -bv when -v was also used. Suppose the address A is aliased to B and C, where B exists and C does not. Without -v the output is "A verified" because verification stops after a successful redirection if more than one address is generated. However, with -v the child addresses are also verified. Exim was outputting "A failed to verify" and then showing the successful verification for C, with its parentage. It now outputs "B failed to verify", showing B's parentage before showing the successful verification of C. PH/15 Applied Michael Deutschmann's patch to allow DNS black list processing to look up a TXT record in a specific list after matching in a combined list. PH/16 It seems that the options setting for the resolver (RES_DEFNAMES and RES_DNSRCH) can affect the behaviour of gethostbyname() and friends when they consult the DNS. I had assumed they would set it the way they wanted; and indeed my experiments on Linux seem to show that in some cases they do (I could influence IPv6 lookups but not IPv4 lookups). To be on the safe side, however, I have now made the interface to host_find_byname() similar to host_find_bydns(), with an argument containing the DNS resolver options. The host_find_byname() function now sets these options at its start, just as host_find_bydns() does. The smtp transport options dns_qualify_single and dns_search_parents are passed to host_find_byname() when gethostbyname=TRUE in this transport. Other uses of host_find_byname() use the default settings of RES_DEFNAMES (qualify_single) but not RES_DNSRCH (search_parents). PH/17 Applied (a modified version of) Nico Erfurth's patch to make spool_read_header() do less string testing, by means of a preliminary switch on the second character of optional "-foo" lines. (This is overdue, caused by the large number of possibilities that now exist. Originally there were few.) While I was there, I also converted the str(n)cmp tests so they don't re-test the leading "-" and the first character, in the hope this might squeeze out yet more improvement. PH/18 Two problems with "group" syntax in header lines when verifying: (1) The flag allowing group syntax was set by the header_syntax check but not turned off, possible causing trouble later; (2) The flag was not being set at all for the header_verify test, causing "group"-style headers to be rejected. I have now set it in this case, and also caused header_ verify to ignore an empty address taken from a group. While doing this, I came across some other cases where the code for allowing group syntax while scanning a header line wasn't quite right (mostly, not resetting the flag correctly in the right place). These bugs could have caused trouble for malformed header lines. I hope it is now all correct. PH/19 The functions {pwcheck,saslauthd}_verify_password() are always called with the "reply" argument non-NULL. The code, however (which originally came from elsewhere) had *some* tests for NULL when it wrote to *reply, but it didn't always do it. This confused somebody who was copying the code for some other use. I have removed all the tests. PH/20 It was discovered that the GnuTLS code had support for RSA_EXPORT, a feature that was used to support insecure browsers during the U.S. crypto embargo. It requires special client support, and Exim is probably the only MTA that supported it -- and would never use it because real RSA is always available. This code has been removed, because it had the bad effect of slowing Exim down by computing (never used) parameters for the RSA_EXPORT functionality. PH/21 On the advice of Timo Sirainen, added a check to the dovecot authenticator to fail if there's a tab character in the incoming data (there should never be unless someone is messing about, as it's supposed to be base64-encoded). Also added, on Timo's advice, the "secured" option if the connection is using TLS or if the remote IP is the same as the local IP, and the "valid-client-cert option" if a client certificate has been verified. PH/22 As suggested by Dennis Davis, added a server_condition option to *all* authenticators. This can be used for authorization after authentication succeeds. (In the case of plaintext, it servers for both authentication and authorization.) PH/23 Testing for tls_required and lost_connection in a retry rule didn't work if any retry times were supplied. PH/24 Exim crashed if verify=helo was activated during an incoming -bs connection, where there is no client IP address to check. In this situation, the verify now always succeeds. PH/25 Applied John Jetmore's -Mset patch. PH/26 Added -bem to be like -Mset, but loading a message from a file. PH/27 In a string expansion for a processed (not raw) header when multiple headers of the same name were present, leading whitespace was being removed from all of them, but trailing whitespace was being removed only from the last one. Now trailing whitespace is removed from each header before concatenation. Completely empty headers in a concatenation (as before) are ignored. PH/28 Fixed bug in backwards-compatibility feature of PH/09 (thanks to John Jetmore). It would have mis-read ACL variables from pre-4.61 spool files. PH/29 [Removed. This was a change that I later backed out, and forgot to correct the ChangeLog entry (that I had efficiently created) before committing the later change.] PH/30 Exim was sometimes attempting to deliver messages that had suffered address errors (4xx response to RCPT) over the same connection as other messages routed to the same hosts. Such deliveries are always "forced", so retry times are not inspected. This resulted in far too many retries for the affected addresses. The effect occurred only when there were more hosts than the hosts_max_try setting in the smtp transport when it had the 4xx errors. Those hosts that it had tried were not added to the list of hosts for which the message was waiting, so if all were tried, there was no problem. Two fixes have been applied: (i) If there are any address or message errors in an SMTP delivery, none of the hosts (tried or untried) are now added to the list of hosts for which the message is waiting, so the message should not be a candidate for sending over the same connection that was used for a successful delivery of some other message. This seems entirely reasonable: after all the message is NOT "waiting for some host". This is so "obvious" that I'm not sure why it wasn't done previously. Hope I haven't missed anything, but it can't do any harm, as the worst effect is to miss an optimization. (ii) If, despite (i), such a delivery is accidentally attempted, the routing retry time is respected, so at least it doesn't keep hammering the server. PH/31 Installed Andrew Findlay's patch to close the writing end of the socket in ${readsocket because some servers need this prod. PH/32 Added some extra debug output when updating a wait-xxx database. PH/33 The hint "could be header name not terminated by colon", which has been given for certain expansion errors for a long time, was not being given for the ${if def:h_colon_omitted{... case. PH/34 The spec says: "With one important exception, whenever a domain list is being scanned, $domain contains the subject domain." There was at least one case where this was not true. PH/35 The error "getsockname() failed: connection reset by peer" was being written to the panic log as well as the main log, but it isn't really panic-worthy as it just means the connection died rather early on. I have removed the panic log writing for the ECONNRESET error when getsockname() fails. PH/36 After a 4xx response to a RCPT error, that address was delayed (in queue runs only) independently of the message's sender address. This meant that, if the 4xx error was in fact related to the sender, a different message to the same recipient with a different sender could confuse things. In particualar, this can happen when sending to a greylisting server, but other circumstances could also provoke similar problems. I have changed the default so that the retry time for these errors is now based a combination of the sender and recipient addresses. This change can be overridden by setting address_retry_include_sender=false in the smtp transport. PH/37 For LMTP over TCP/IP (the smtp transport), error responses from the remote server are returned as part of bounce messages. This was not happening for LMTP over a pipe (the lmtp transport), but now it is the same for both kinds of LMTP. PH/38 Despite being documented as not happening, Exim was rewriting addresses in header lines that were in fact CNAMEs. This is no longer the case. PH/39 If -R or -S was given with -q