# # spec file for package exim # # Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed # upon. The license for this file, and modifications and additions to the # file, is the same license as for the pristine package itself (unless the # license for the pristine package is not an Open Source License, in which # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. # Please submit bugfixes or comments via http://bugs.opensuse.org/ # # norootforbuild # Conditional build (--with/--without option) # --without ipv6 # --with mysql # --with pgsql # --with sqlite # --without nis # --with nisplus # --with spf2 # --without openldap # --without eximon # --without eximstats # --with perl # --with dlfunc # --with lmtp_extern # --with experimental_user_unknown_fail # --with experimental_rfc2231_support # --with experimental_rfc2047_utf8_fix # --with experimental_rfc2047_mimelen # --with spamd_next_try # --with expand_primary_hostname # --with hide_ldap_pass # --with hide_ldap_error # --with hide_expand_error # --with alt_config_prefix # --with disable_d_option Name: exim BuildRequires: db-devel pcre-devel %if %{!?_without_openldap:1}%{?_without_openldap:0} BuildRequires: openldap2-devel %endif %if %{?suse_version:1}%{?!suse_version:0} BuildRequires: tcpd-devel %if %{!?_without_eximon:1}%{?_without_eximon:0} %if %suse_version > 910 BuildRequires: xorg-x11-devel %else BuildRequires: XFree86-devel XFree86-libs %endif %endif %else %if %{!?_without_eximon:1}%{?_without_eximon:0} BuildRequires: libXaw-devel libXext-devel libXt-devel xorg-x11-server-sdk %endif BuildRequires: tcp_wrappers %endif BuildRequires: openssl-devel %if %{?_with_mysql:1}%{!?_with_mysql:0} BuildRequires: mysql-devel %endif %if %{?_with_sqlite:1}%{!?_with_sqlite:0} BuildRequires: sqlite3-devel %endif %if %{?_with_pgsql:1}%{!?_with_pgsql:0} BuildRequires: postgresql-devel %endif %if %{!?_with_spf2:0}%{?_with_spf2:1} BuildRequires: libspf2-devel >= 1.2.0 %endif Provides: exim Url: http://www.exim.org/ Conflicts: sendmail sendmail-tls postfix License: GPLv2+ 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.74 #Release: 4.2 Release: 4.2.corvax 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 Source13: apparmor.usr.sbin.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 Patch1: aa097c4c00f62487128d74f65c521f9e877b184f.diff %if %{!?_with_perl:0}%{?_with_perl:1} #Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version)) BuildRequires: perl(ExtUtils::Embed) %endif Patch74: patch-src::dnsdb-spf.patch %if %{!?_with_hide_expand_error:0}%{?_with_hide_expand_error:1} Patch75: patch-src::hide_expand_error.patch %else %if %{!?_with_hide_ldap_error:0}%{?_with_hide_ldap_error:1} Patch76: patch-src::hide_ldap_error.patch %else %if %{!?_with_hide_ldap_pass:0}%{?_with_hide_ldap_pass:1} Patch77: patch-src::hide_ldap_pass.patch %endif %endif %endif %if %{!?_with_experimental_rfc2047_mimelen:0}%{?_with_experimental_rfc2047_mimelen:1} Patch78: patch-src::rfc2047-mimelen.patch %endif %if %{!?_with_expand_primary_hostname:0}%{?_with_expand_primary_hostname:1} Patch79: patch-src::expand-primary_hostname.patch %endif %if %{!?_with_spamd_next_try:0}%{?_with_spamd_next_try:1} Patch80: patch-src::spamd-next-try.patch %endif %if %{!?_with_experimental_rfc2047_utf8_fix:0}%{?_with_experimental_rfc2047_utf8_fix:1} Patch81: patch-src::rfc2047-utf8-fix.patch %endif %if %{!?_with_experimental_rfc2231_support:0}%{?_with_experimental_rfc2231_support:1} Patch82: patch-src::rfc2231.patch %endif %if %{!?_with_experimental_user_unknown_fail:0}%{?_with_experimental_user_unknown_fail:1} Patch83: patch-src::user-unknown-defer2fail.patch %endif Patch84: patch-src::remove_header.patch Patch88: patch-src::recursive-acl.patch Patch89: patch-src::spool_mbox.patch %if %{!?_with_lmtp_extern:0}%{?_with_lmtp_extern:1} Patch95: patch-src::lmtp-extern-4.63.patch %endif #%if %{!?_with_dsn:0}%{?_with_dsn:1} #Patch97: patch-src::dsn_1_3-4.63.patch #Patch98: patch-src::eximdsnlocal.patch #%endif Patch99: exim.rc.patch %if %{!?_without_eximon:1}%{?_without_eximon:0} %package -n eximon License: GPLv2+ Summary: Eximon, an graphical frontend to administer Exim's mail queue Group: Productivity/Networking/Email/Servers %endif %if %{!?_without_eximstats:1}%{?_without_eximstats:0} %package -n eximstats-html License: GPLv2+ 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 %{!?_without_eximon:1}%{?_without_eximon: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. %endif Authors: -------- Philip Hazel %if %{!?_without_eximstats:1}%{?_without_eximstats:0} %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 %patch1 -p1 %patch74 -p0 -b .spf %if %{!?_with_hide_expand_error:0}%{?_with_hide_expand_error:1} %patch75 -p0 -b .hide_expand_error %else %if %{!?_with_hide_ldap_error:0}%{?_with_hide_ldap_error:1} %patch76 -p0 -b .hide_ldap_error %else %if %{!?_with_hide_ldap_pass:0}%{?_with_hide_ldap_pass:1} %patch77 -p0 -b .hide_ldap_pass %endif %endif %endif %if %{!?_with_experimental_rfc2047_mimelen:0}%{?_with_experimental_rfc2047_mimelen:1} %patch78 -p0 -b .rfc2047-mimelen %endif %if %{!?_with_expand_primary_hostname:0}%{?_with_expand_primary_hostname:1} %patch79 -p0 -b .expand_primary_hostname %endif %if %{!?_with_spamd_next_try:0}%{?_with_spamd_next_try:1} %patch80 -p0 -b .next-try %endif %if %{!?_with_experimental_rfc2047_utf8_fix:0}%{?_with_experimental_rfc2047_utf8_fix:1} %patch81 -p0 -b .rfc2047 %endif %if %{!?_with_experimental_rfc2231_support:0}%{?_with_experimental_rfc2231_support:1} %patch82 -p0 -b .rfc2231 %endif %if %{!?_with_experimental_user_unknown_fail:0}%{?_with_experimental_user_unknown_fail:1} %patch83 -p0 -b .defer2fail %endif %patch84 -p0 -b .remove_header %patch88 -p0 -b .resursion %patch89 -p0 -b .expand %if %{!?_with_lmtp_extern:0}%{?_with_lmtp_extern:1} %patch95 -p0 -b .extern %endif #%if %{!?_with_dsn:0}%{?_with_dsn:1} #%patch97 -p0 -b .dsn #%patch98 -p0 -b .dsnlocal #%endif # 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 %if %{!?_without_openldap:1}%{?_without_openldap:0} LOOKUP_INCLUDE_LDAP="" LOOKUP_LIBS_LDAP="-lldap -llber" %endif %if %{?_with_mysql:1}%{!?_with_mysql:0} LOOKUP_INCLUDE_MYSQL="-I /usr/include/mysql" LOOKUP_LIBS_MYSQL="-lmysqlclient" %endif %if %{?_with_sqlite:1}%{!?_with_sqlite:0} LOOKUP_INCLUDE_SQLITE="-I /usr/include/sqlite3" LOOKUP_LIBS_SQLITE="-lsqlite3" %endif %if %{?_with_pgsql:1}%{!?_with_pgsql:0} LOOKUP_INCLUDE_PGSQL="-I /usr/include/pgsql" LOOKUP_LIBS_PGSQL="-lpq" %endif %if %{!?_with_spf2:0}%{?_with_spf2:1} LDFLAGS_SPF2="-lspf2" %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 %if %{!?_without_openldap:1}%{?_without_openldap:0} LOOKUP_LDAP=yes %endif %if %{?_with_mysql:1}%{!?_with_mysql:0} LOOKUP_MYSQL=yes %endif %if %{?_with_sqlite:1}%{!?_with_sqlite:0} LOOKUP_SQLITE=yes %endif %if %{?_with_pgsql:1}%{!?_with_pgsql:0} LOOKUP_PGSQL=yes %endif %if %{?_without_nis:0}%{!?_without_nis:1} LOOKUP_NIS=yes %endif %if %{!?_with_nisplus:0}%{?_with_nisplus:1} LOOKUP_NISPLUS=yes %endif # LOOKUP_ORACLE=yes LOOKUP_PASSWD=yes # LOOKUP_PGSQL=yes # LOOKUP_WHOSON=yes CYRUS_SASLAUTHD_SOCKET=/var/run/sasl2/mux %if %{?_with_mysql:1}%{!?_with_mysql:0} LDAP_LIB_TYPE=OPENLDAP2 %endif # 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 #LOOKUP_INCLUDE=-I /usr/include/mysql #LOOKUP_LIBS=-lldap -llber -lmysqlclient LOOKUP_INCLUDE=$LOOKUP_INCLUDE_LDAP $LOOKUP_INCLUDE_MYSQL $LOOKUP_INCLUDE_SQLITE $LOOKUP_INCLUDE_PGSQL LOOKUP_LIBS=$LOOKUP_LIBS_LDAP $LOOKUP_LIBS_MYSQL $LOOKUP_LIBS_SQLITE $LOOKUP_LIBS_PGSQL %if %{!?_without_eximon:1}%{?_without_eximon:0} eximonITOR=eximon.bin %endif WITH_CONTENT_SCAN=yes WITH_OLD_DEMIME=yes %if %{!?_with_spf2:0}%{?_with_spf2:1} EXPERIMENTAL_SPF=yes %endif %if %{!?_with_alt_config_prefix:0}%{?_with_alt_config_prefix:1} ALT_CONFIG_PREFIX=%{_sysconfdir}/exim/ %endif %if %{!?_with_disable_d_option:0}%{?_with_disable_d_option:1} DISABLE_D_OPTION=yes %endif LDFLAGS=$LDFLAGS_SPF2 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 %if %{!?_with_perl:0}%{?_with_perl:1} EXIM_PERL=perl.o %endif %if %{!?_with_dlfunc:0}%{?_with_dlfunc:1} EXPAND_DLFUNC=yes %endif # 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 %if %{!?_without_ipv6:1}%{?_without_ipv6:0} HAVE_IPV6=YES %endif 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 %if %{!?_without_eximon:1}%{?_without_eximon:0} touch Local/eximon.conf %endif rm -f doc/*.{orig,txt~} %build make %install 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/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 patch < $RPM_SOURCE_DIR/exim.rc.patch $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 %{!?_without_eximon:1}%{?_without_eximon:0} mv $RPM_BUILD_ROOT/usr/sbin/eximon* $RPM_BUILD_ROOT/usr/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/ %if %{!?_without_eximstats:1}%{?_without_eximstats:0} pod2man --center=EXIM --section=8 $RPM_BUILD_ROOT/usr/sbin/eximstats > $RPM_BUILD_ROOT/%{_mandir}/man8/eximstats.8 %endif 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 # # package the utilities without executable permissions, to silence rpmlint warnings chmod 644 util/*.{pl,sh} src/convert4r* # # 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 %{!?_without_eximstats:1}%{?_without_eximstats: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 # apparmor profile install -D -m 0644 $RPM_SOURCE_DIR/apparmor.usr.sbin.exim $RPM_BUILD_ROOT/etc/apparmor/profiles/extras/usr.sbin.exim %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/%{name}/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 %{fillup_and_insserv exim} 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_* %if %{!?_without_eximstats:1}%{?_without_eximstats:0} /usr/sbin/eximstats %endif /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 %dir /etc/apparmor %dir /etc/apparmor/profiles %dir /etc/apparmor/profiles/extras %config(noreplace) /etc/apparmor/profiles/extras/usr.sbin.exim /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 %{!?_without_eximon:1}%{?_without_eximon:0} %files -n eximon %defattr(-,root,root) /usr/bin/eximon /usr/bin/eximon.bin %endif %if %{!?_without_eximstats:1}%{?_without_eximstats:0} %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 * Fri Feb 4 2011 lars@samba.org - Workround for PCRE version dependancy in version reporting; (beo#1073). * Fri Feb 4 2011 lars@samba.org - update to 4.74 - Failure to get a lock on a hints database can have serious consequences so log it to the panic log. - Log LMTP confirmation messages in the same way as SMTP, controlled using the smtp_confirmation log selector. - Include the error message when we fail to unlink a spool file. - Bugzilla 139: Support dynamically loaded lookups as modules. - Bugzilla 139: Documentation and portability issues. Avoid GNU Makefile-isms, let Exim continue to build on BSD. Handle per-OS dynamic-module compilation flags. - Let /dev/null have normal permissions. The 4.73 fixes were a little too stringent and complained about the permissions on /dev/null. Exempt it from some checks. - Report version information for many libraries, including Exim version information for dynamically loaded libraries. Created version.h, now support a version extension string for distributors who patch heavily. Dynamic module ABI change. - CVE-2011-0017 - check return value of setuid/setgid. This is a privilege escalation vulnerability whereby the Exim run-time user can cause root to append content of the attacker's choosing to arbitrary files. - Bugzilla 1041: merged DCC maintainer's fixes for return code. - Bugzilla 1071: fix delivery logging with untrusted macros. If dropping privileges for untrusted macros, we disabled normal logging on the basis that it would fail; for the Exim run-time user, this is not the case, and it resulted in successful deliveries going unlogged. - update to 4.73 - Date: & Message-Id: revert to normally being appended to a message, only prepend for the Resent-* case. Fixes regression introduced in Exim 4.70 by NM/22 for Bugzilla 607. - Include check_rfc2047_length in configure.default because we're seeing increasing numbers of administrators be bitten by this. - Added DISABLE_DKIM and comment to src/EDITME - Bugzilla 994: added openssl_options main configuration option. - Bugzilla 995: provide better SSL diagnostics on failed reads. - Bugzilla 834: provide a permit_coredump option for pipe transports. - Adjust NTLM authentication to handle SASL Initial Response. - If TLS negotiated an anonymous cipher, we could end up with SSL but without a peer certificate, leading to a segfault because of an assumption that peers always have certificates. Be a little more paranoid. Problem reported by Martin Tscholak. - Bugzilla 926: switch ClamAV to use the new zINSTREAM API for content filtering; old API available if built with WITH_OLD_CLAMAV_STREAM=yes NB: ClamAV planning to remove STREAM in "middle of 2010". CL also introduces -bmalware, various -d+acl logging additions and more caution in buffer sizes. - Implemented reverse_ip expansion operator. - Bugzilla 937: provide a "debug" ACL control. - Bugzilla 922: Documentation dusting, patch provided by John Horne. - Bugzilla 973: Implement --version. - Bugzilla 752: Refuse to build/run if Exim user is root/0. - Build without WITH_CONTENT_SCAN. Path from Andreas Metzler. - Bugzilla 816: support multiple condition rules on Routers. - Add bool_lax{} expansion operator and use that for combining multiple condition rules, instead of bool{}. Make both bool{} and bool_lax{} ignore trailing whitespace. - prevent non-panic DKIM error from being sent to paniclog - added tcp_wrappers_daemon_name to allow host entries other than "exim" to be used - Fix malware regression for cmdline scanner introduced in PP/08. Notification from Dr Andrew Aitchison. - Change ClamAV response parsing to be more robust and to handle ClamAV's ExtendedDetectionInfo response format. Notification from John Horne. - OpenSSL 1.0.0a compatibility const-ness change, should be backwards compatible. - Added a CONTRIBUTING file. Fixed the documentation build to use http: XSL and documented dependency on system catalogs, with examples of how it normally works. - Added Valgrind hooks in store.c to help it capture out-of-bounds store access. - Bugzilla 1044: CVE-2010-4345 - partial fix: restrict default behaviour of CONFIGURE_OWNER and CONFIGURE_GROUP options to no longer allow a configuration file which is writeable by the Exim user or group. - Bugzilla 1044: CVE-2010-4345 - part two: extend checks for writeability of configuration files to cover files specified with the -C option if they are going to be used with root privileges, not just the default configuration file. - Bugzilla 1044: CVE-2010-4345 - part three: remove ALT_CONFIG_ROOT_ONLY option (effectively making it always true). - Add TRUSTED_CONFIG_PREFIX_FILE option to allow alternative configuration files to be used while preserving root privileges. - Set FD_CLOEXEC on SMTP sockets after forking in the daemon, to ensure that rogue child processes cannot use them. - Bugzilla 1047: change the default for system_filter_user to be the Exim run-time user, instead of root. - Add WHITELIST_D_MACROS option to let some macros be overriden by the Exim run-time user without dropping privileges. - Remove use of va_copy() which breaks pre-C99 systems. Duplicate the result string, instead of calling string_vformat() twice with the same arguments. - Allow TRUSTED_CONFIG_PREFIX_FILE only for Exim or CONFIGURE_OWNER, not for other users. Others should always drop root privileges if they use - C on the command line, even for a whitelisted configure file. - Turn TRUSTED_CONFIG_PREFIX_FILE into TRUSTED_CONFIG_FILE. No prefixes. - Fixed bug #1002 - Message loss when using multiple deliveries * Fri Feb 4 2011 lars@samba.org - Check return values of setgid/setuid; CVE-2011-0017; (bnc#668599). * Fri Dec 10 2010 lars@samba.org - Fix memory corruption in string_format code for pre-11.3 systems; CVE-2010-4344; (beo#787); (bnc#658731). - Fix remote root vulnerability; CVE-2010-4345; (bnc#658731). * Wed Jul 14 2010 dmueller@suse.de - fix mysql provides to be versioned again * Tue Jun 8 2010 poeml@cmdline.net - update to 4.72 - installed exipick 20100104.1, adding $max_received_linelength, $data_path, and $header_path variables; fixed documentation bugs and typos - installed exipick 20100222.0, added --input-dir and --finput to allow exipick to access non-standard spools, including the "frozen" queue (Finput) - Bugzilla 965: Support mysql stored procedures. Patch from Alain Williams - Bugzilla 961: Spacing fix (syntax error) on Makefile directives for NetBSD - Bugzilla 955: Documentation fix for max_rcpts. Patch from Andreas Metzler - Bugzilla 954: Fix for unknown responses from Dovecot authenticator. Patch from Kirill Miazine - Bugzilla 671: Added umask to procmail example. - installed exipick 20100323.0, fixing doc bug - Bugzilla 988: CVE-2010-2023 - prevent hardlink attack on sticky mail directory. Notification and patch from Dan Rosenberg. - PDKIM: Upgrade PolarSSL files to upstream version 0.12.1. - Improve log output when DKIM signing operation fails. - Treat the transport option dkim_domain as a colon separated list, not as a single string, and sign the message with each element, omitting multiple occurences of the same signer. - Null terminate DKIM strings, Null initialise DKIM variable Bugzilla 985, 986. Patch by Simon Arlott - Bugzilla 967. dnsdb DNS TXT record bug fix (DKIM-related) Patch by Simon Arlott - Bugzilla 989: CVE-2010-2024 - work round race condition on MBX locking. Notification from Dan Rosenberg. * Wed May 26 2010 poeml@cmdline.net - fix build of exim-mysql package by correcting path in postinstall script; patch kindly provided by Christian Schweingruber * Tue Nov 24 2009 poeml@cmdline.net - update to 4.71 Bugfixes over 4.70: * Bugzilla 912: Fix DKIM segfault on empty headers/body * Bugzilla 913: Documentation fix for gnutls_* options. * Bugzilla 722: Documentation for randint. Better randomness defaults. * Bugzilla 847: Enable DNSDB lookup by default. * Bugzilla 915: Flag broken perl installation during build. * Sat Nov 14 2009 poeml@cmdline.net - update to 4.70 This release is a combination feature and bug fix release. The major new features are:- * Native DKIM support without an external library. * Experimental DCC support via dccifd (contributed by Wolfgang Breyha). Other changes:- * PCRE is no longer included with the Exim distribution. You will need a separate PCRE library (and matching headers) to compile Exim. You will need to change your Local/Makefile to support this. Most modern systems have a packaged PCRE library, alternatively PCRE can be found at http://www.pcre.org/ * Experimental Yahoo! Domainkeys support dropped in favor of native DKIM support. * The documentation has been updated and regenerated. As usual, all changes are in the doc/ChangeLog file: http://vcs.exim.org/viewvc/exim/exim-doc/doc-txt/ChangeLog?view=markup&pathrev=exim_4_70 * Tue Jun 9 2009 poeml@suse.de - silence some rpmlint warnings, by removing executable permissions from utilities packaged under documentation. - in the exim-mysql package, remove the versioned Provides, because rpmlint doesn't like it at all. * Wed Oct 29 2008 poeml@suse.de - add Required-Stop to init script, as required by LSB. * Wed Aug 20 2008 poeml@suse.de - also add "spamd postgresql mysql" to should-start and should-stop in the LSB headers of /etc/init.d/exim * Mon Aug 18 2008 poeml@suse.de - fix init script LSB headers -- Should-Stop added * Sun Jun 15 2008 poeml@suse.de - fix logic of decision (in logrotate snippet) whether to send the weekly reports * Fri Jan 25 2008 meissner@suse.de - fixed an array overflow spotted by gcc4.3. * Thu Jan 10 2008 poeml@suse.de - update to 4.69, which is mainly a bug fix release (although there is also preliminary DKIM support available if compiled with appropriate flags, which we don't do). The major change is an update to the embedded PCRE library in response to security issues, which are not relevant here, since we link against the system pcre library, assuming that it has been fixed already. TK/01 Add preliminary DKIM support. Currently requires a forked version of ALT-N's libdkim that I have put here: http://duncanthrax.net/exim-experimental/ Note to Michael Haardt: I had to rename some vars in sieve.c. They were called 'true' and it seems that C99 defines that as a reserved keyword to be used with 'bool' variable types. That means you could not include C99-style headers which use bools without triggering build errors in sieve.c. NM/01 Bugzilla 592: --help option is handled incorrectly if exim is invoked as mailq or other aliases. Changed the --help handling significantly to do whats expected. exim_usage() emits usage/help information. SC/01 Added the -bylocaldomain option to eximstats. NM/02 Bugzilla 619: Defended against bad data coming back from gethostbyaddr NM/03 Bugzilla 613: Documentation fix for acl_not_smtp NM/04 Bugzilla 628: PCRE update to 7.4 (work done by John Hall) * Thu Sep 27 2007 poeml@suse.de - add #include to apparmor profile, to allow for interactive usage (mailq, exim -M, ...) * Thu Aug 30 2007 poeml@suse.de - update to 4.68 PH/01 Another patch from the Sieve maintainer. PH/02 When an IPv6 address is converted to a string for single-key lookup in an address list (e.g. for an item such as "net24-dbm;/net/works"), dots are used instead of colons so that keys in lsearch files need not contain colons. This was done some time before quoting was made available in lsearch files. However, iplsearch files do require colons in IPv6 keys (notated using the quote facility) so as to distinguish them from IPv4 keys. This meant that lookups for IP addresses in host lists did not work for iplsearch lookups. This has been fixed by arranging for IPv6 addresses to be expressed with colons if the lookup type is iplsearch. This is not incompatible, because previously such lookups could never work. The situation is now rather anomolous, since one *can* have colons in ordinary lsearch keys. However, making the change in all cases is incompatible and would probably break a number of configurations. TK/01 Change PRVS address formatting scheme to reflect latests BATV draft version. MH/01 The "spam" ACL condition code contained a sscanf() call with a %%s conversion specification without a maximum field width, thereby enabling a rogue spamd server to cause a buffer overflow. While nobody in their right mind would setup Exim to query an untrusted spamd server, an attacker that gains access to a server running spamd could potentially exploit this vulnerability to run arbitrary code as the Exim user. TK/02 Bugzilla 502: Apply patch to make the SPF-Received: header use $primary_hostname instead of what libspf2 thinks the hosts name is. MH/02 The dsearch lookup now uses lstat(2) instead of stat(2) to look for a directory entry by the name of the lookup key. Previously, if a symlink pointed to a non-existing file or a file in a directory that Exim lacked permissions to read, a lookup for a key matching that symlink would fail. Now it is enough that a matching directory entry exists, symlink or not. (Bugzilla 503.) PH/03 The body_linecount and body_zerocount variables are now exported in the local_scan API. PH/04 Added the $dnslist_matched variable. PH/05 Unset $tls_cipher and $tls_peerdn before making a connection as a client. This means they are set thereafter only if the connection becomes encrypted. PH/06 Added the client_condition to authenticators so that some can be skipped by clients under certain conditions. PH/07 The error message for a badly-placed control=no_multiline_responses left "_responses" off the end of the name. PH/08 Added -Mvc to output a copy of a message in RFC 2822 format. PH/09 Tidied the code for creating ratelimiting keys, creating them explicitly (without spaces) instead of just copying the configuration text. PH/10 Added the /noupdate option to the ratelimit ACL condition. PH/11 Added $max_received_linelength. PH/12 Added +ignore_defer and +include_defer to host lists. PH/13 Installed PCRE version 7.2. This needed some changes because of the new way in which PCRE > 7.0 is built. PH/14 Implemented queue_only_load_latch. PH/15 Removed an incorrect (int) cast when reading the value of SIZE in a MAIL command. The effect was to mangle the value on 64-bit systems. PH/16 Another patch from the Sieve maintainer. PH/17 Added the NOTQUIT ACL, based on a patch from Ted Cooper. PH/18 If a system quota error occurred while trying to create the file for a maildir delivery, the message "Mailbox is full" was not appended to the bounce if the delivery eventually timed out. Change 4.67/27 below applied only to a quota excession during the actual writing of the file. PH/19 It seems that peer DN values may contain newlines (and other non-printing characters?) which causes problems in log lines. The DN values are now passed through string_printing() before being added to log lines. PH/20 Added the "servers=" facility to MySQL and PostgreSQL lookups. (Oracle and InterBase are left for another time.) PH/21 Added message_body_newlines option. PH/22 Guard against possible overflow in moan_check_errorcopy(). PH/23 POSIX allows open() to be a macro; guard against that. PH/24 If the recipient of an error message contained an @ in the local part (suitably quoted, of course), incorrect values were put in $domain and $local_part during the evaluation of errors_copy. * Fri Aug 24 2007 poeml@suse.de - "Novell apparmor" doesn't own /etc/apparmor and /etc/apparmor/profiles... fix build in autobuild * Thu Aug 23 2007 poeml@suse.de - do not install apparmor profile by default [#285727] * Fri Jul 13 2007 poeml@suse.de - use the LSB equivalent Should-Start instead of X-UnitedLinux-Should-Start [#285553] * Fri Jul 13 2007 poeml@suse.de - init script: add amavis to Should-Start [#285553] * Thu May 31 2007 poeml@suse.de - improve apparmor profile: use abstractions/user-mail; allow procmail and cyrus deliver (assuming that their profiles are in effect as well) * Thu May 24 2007 poeml@suse.de - add apparmor profile, active in "complain" mode once installed. Use logprof to check for needed adjustments. Use "enforce /usr/sbin/exim" to put the profile into effect. - remove support for building on and updating from SuSE Linux 7.3 and older * Tue Apr 17 2007 poeml@suse.de - update to 4.67 MH/01 Fix for bug #448, segfault in Dovecot authenticator when interface_address is unset (happens when testing with -bh and -oMi isn't used). Thanks to Jan Srzednicki. PH/01 Added a new log selector smtp_no_mail, to log SMTP sessions that do not issue a MAIL command. PH/02 In an ACL statement such as deny dnslists = X!=127.0.0.2 : X=127.0.0.2 if a client was not listed at all, or was listed with a value other than 127.0.0.2, in the X list, but was listed with 127.0.0.2 in the Y list, the condition was not true (as it should be), so access was not denied. The bug was that the ! inversion was incorrectly passed on to the second item. This has been fixed. PH/03 Added additional dnslists conditions == and =& which are different from = and & when the dns lookup returns more than one IP address. PH/04 Added gnutls_require_{kx,mac,protocols} to give more control over the cipher suites used by GnuTLS. These options are ignored by OpenSSL. PH/05 After discussion on the list, added a compile time option ENABLE_DISABLE_ FSYNC, which compiles an option called disable_fsync that allows for bypassing fsync(). The documentation is heavily laced with warnings. SC/01 Updated eximstats to collate all SpamAssassin rejects into one bucket. PH/06 Some tidies to the infrastructure of the Test Suite that is concerned with the auxiliary C programs that it uses: (1) Arrange for BIND_8_COMPAT to be defined when compiling on OSX (Darwin); (2) Tidies to the Makefile, including adding "make clean"; (3) Added -fPIC when compiling the test dynamically loaded module, to get rid of a warning. MH/02 Fix for bug #451, causing paniclog entries to be written if a bounce message fails, move_frozen_messages = true and ignore_bounce_errors_after = 0s. The bug is otherwise harmless. PH/07 There was a bug in the dovecot authenticator such that the value of $auth1 could be overwritten, and so not correctly preserved, after a successful authentication. This usually meant that the value preserved by the server_setid option was incorrect. PH/08 Added $smtp_count_at_connection_start, deliberately with a long name. PH/09 Installed PCRE release 7.0. PH/10 The acl_not_smtp_start ACL was, contrary to the documentation, not being run for batched SMTP input. It is now run at the start of every message in the batch. While fixing this I discovered that the process information (output by running exiwhat) was not always getting set for -bs and -bS input. This is fixed, and it now also says "batched" for BSMTP. PH/11 Added control=no_pipelining. PH/12 Added $sending_ip_address and $sending_port (mostly Magnus Holmgren's patch, slightly modified), and move the expansion of helo_data till after the connection is made in the smtp transport (so it can use these values). PH/13 Added ${rfc2047d: to decoded RFC 2047 strings. PH/14 Added log_selector = +pid. PH/15 Flush SMTP output before delaying, unless control=no_delay_flush is set. PH/16 Add ${if forany and ${if forall. PH/17 Added dsn_from option to vary the From: line in DSNs. PH/18 Flush SMTP output before performing a callout, unless control = no_callout_flush is set. PH/19 Change 4.64/PH/36 introduced a bug: when address_retry_include_sender was true (the default) a successful delivery failed to delete the retry item, thus causing premature timeout of the address. The bug is now fixed. PH/20 Added hosts_avoid_pipelining to the smtp transport. PH/21 Long custom messages for fakedefer and fakereject are now split up into multiline reponses in the same way that messages for "deny" and other ACL rejections are. PH/22 Applied Jori Hamalainen's speed-up changes and typo fixes to exigrep, with slight modification. PH/23 Applied sieve patches from the maintainer "tracking the latest notify draft, changing the syntax and factoring some duplicate code". PH/24 When the log selector "outgoing_port" was set, the port was shown as -1 for deliveries of the second and subsequent messages over the same SMTP connection. PH/25 Applied Magnus Holmgren's patch for ${addresses, ${map, ${filter, and ${reduce, with only minor "tidies". SC/02 Applied Daniel Tiefnig's patch to improve the '($parent) =' pattern match. PH/26 Added a "continue" ACL modifier that does nothing, for the benefit of its expansion side effects. PH/27 When a message times out after an over-quota error from an Exim-imposed quota, the bounce message says "mailbox is full". This message was not being given when it was a system quota that was exceeded. It now should be the same. MH/03 Made $recipients available in local_scan(). local_scan() already has better access to the recipient list through recipients_list[], but $recipients can be useful in postmaster-provided expansion strings. PH/28 The $smtp_command and $smtp_command_argument variables were not correct in the case of a MAIL command with additional options following the address, for example: MAIL FROM: SIZE=1234. The option settings were accidentally chopped off. PH/29 SMTP synchronization checks are implemented when a command is read - there is a check that no more input is waiting when there shouldn't be any. However, for some commands, a delay in an ACL can mean that it is some time before the response is written. In this time, more input might arrive, invalidly. So now there are extra checks after an ACL has run for HELO/EHLO and after the predata ACL, and likewise for MAIL and RCPT when pipelining has not been advertised. PH/30 MH's patch to allow iscntrl() characters to be list separators. PH/31 Unlike :fail:, a custom message specified with :defer: was not being returned in the SMTP response when smtp_return_error_details was false. This has been fixed. PH/32 Change the Dovecot authenticator to use read() and write() on the socket instead of the C I/O that was originally supplied, because problems were reported on Solaris. PH/33 Compile failed with OpenSSL 0.9.8e. This was due to a coding error in Exim which did not show up earlier: it was assuming that a call to SSL_CTX_set_info_callback() might give an error value. In fact, there is no error. In previous releases of OpenSSL, SSL_CTX_set_info_callback() was a macro that became an assignment, so it seemed to work. This has changed to a proper function call with a void return, hence the compile error. Exim's code has been fixed. PH/34 Change HDA_SIZE in oracle.c from 256 to 512. This is needed for 64-bit cpus. PH/35 Applied a patch from the Sieve maintainer which fixes a bug in "notify". PH/36 Applied John Jetmore's patch to add -v functionality to exigrep. PH/37 If a message is not accepted after it has had an id assigned (e.g. because it turns out to be too big or there is a timeout) there is no "Completed" line in the log. When some messages of this type were selected by exigrep, they were listed as "not completed". Others were picked up by some special patterns. I have improved the selection criteria to be more general. PH/38 The host_find_failed option in the manualroute router can now be set to "ignore", to completely ignore a host whose IP address cannot be found. If all hosts are ignored, the behaviour is controlled by the new host_all_ignored option. PH/39 In a list of hosts for manualroute, if one item (either because of multi- homing or because of multiple MX records with /mx) generated more than one IP address, and the following item turned out to be the local host, all the secondary addresses of the first item were incorrectly removed from the list, along with the local host and any following hosts (which is what is supposed to happen). PH/40 When Exim receives a message, it writes the login name, uid, and gid of whoever called Exim into the -H file. In the case of the daemon it was behaving confusingly. When first started, it used values for whoever started the daemon, but after a SIGHUP it used the Exim user (because it calls itself on a restart). I have changed the code so that it now always uses the Exim user. PH/41 (Following a suggestion from Tony Finch) If all the RCPT commands in a message are rejected with the same error (e.g. no authentication or bad sender address), and a DATA command is nevertheless sent (as can happen with PIPELINING or a stupid MUA), the error message that was given to the RCPT commands is included in the rejection of the DATA command. This is intended to be helpful for MUAs that show only the final error to their users. PH/42 Another patch from the Sieve maintainer. SC/02 Eximstats - Differentiate between permanent and temporary rejects. Eximstats - Fixed some broken HTML links and added missing column headers (Jez Hancock). Eximstats - Fixed Grand Total Summary Domains, Edomains, and Email columns for Rejects, Temp Rejects, Ham, and Spam rows. SC/03 Eximstats - V1.58 Fix to get <> and blackhole to show in edomain tables. PH/43 Yet another patch from the Sieve maintainer. PH/44 I found a way to check for a TCP/IP connection going away before sending the response to the final '.' that terminates a message, but only in the case where the client has not sent further data following the '.' (unfortunately, this is allowed). However, in many cases there won't be any further data because there won't be any more messages to send. A call to select() can be used: if it shows that the input is "ready", there is either input waiting, or the socket has been closed. An attempt to read the next input character can distinguish the two cases. Previously, Exim would have sent an OK response which the client would never have see. This could lead to message repetition. This fix should cure that, at least in a lot of common cases. PH/45 Do not advertise STARTTLS in response to HELP unless it would be advertised in response to EHLO. * Fri Mar 9 2007 poeml@suse.de - build fix for openssl-0.9.8e: SSL_CTX_set_info_callback is now a function with void return - sync buildservice package with autobuild * Thu Jan 25 2007 sndirsch@suse.de - move from /usr/X11R6 to /usr * Tue Jan 9 2007 poeml@suse.de - update to 4.66 PH/01 Two more bugs that were introduced by 4.64/PH/07, in addition to the one fixed by 4.65/MH/01 (is this a record?) are fixed: (i) An empty string was always treated as zero by the numeric comparison operators. This behaviour has been restored. (ii) It is documented that the numeric comparison operators always treat their arguments as decimal numbers. This was broken in that numbers starting with 0 were being interpreted as octal. While fixing these problems I realized that there was another issue that hadn't been noticed. Values of message_size_limit (both the global option and the transport option) were treated as octal if they started with 0. The documentation was vague. These values are now always treated as decimal, and I will make that clear in the documentation. * Tue Jan 2 2007 poeml@suse.de - update to 4.65 TK/01 Disable default definition of HAVE_LINUX_SENDFILE. Clashes with Linux large file support (_FILE_OFFSET_BITS=64) on older glibc versions. (#438) MH/01 Don't check that the operands of numeric comparison operators are integers when their expansion is in "skipping" mode (fixes bug introduced by 4.64-PH/07). PH/01 If a system filter or a router generates more than SHRT_MAX (32767) child addresses, Exim now panics and dies. Previously, because the count is held in a short int, deliveries were likely to be lost. As such a large number of recipients for a single message is ridiculous (performance will be very, very poor), I have chosen to impose a limit rather than extend the field. * 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