Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package exim for openSUSE:Factory checked in 
at 2024-01-03 12:25:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/exim (Old)
 and      /work/SRC/openSUSE:Factory/.exim.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "exim"

Wed Jan  3 12:25:47 2024 rev:79 rq:1135763 version:4.97.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/exim/exim.changes        2023-11-07 
21:27:44.854582717 +0100
+++ /work/SRC/openSUSE:Factory/.exim.new.28375/exim.changes     2024-01-03 
12:25:50.913363813 +0100
@@ -0,0 +1,7 @@
+-------------------------------------------------------------------
+Sat Dec 30 15:35:31 UTC 2023 - Dirk Müller <dmuel...@suse.com>
+
+- update to 4.97.1 (bsc#1218387, CVE-2023-51766):
+  * Fixes for the smtp protocol smuggling (CVE-2023-51766)
+
+-------------------------------------------------------------------

Old:
----
  exim-4.97.tar.bz2
  exim-4.97.tar.bz2.asc

New:
----
  exim-4.97.1.tar.bz2
  exim-4.97.1.tar.bz2.asc

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ exim.spec ++++++
--- /var/tmp/diff_new_pack.bU3lnS/_old  2024-01-03 12:25:51.865398599 +0100
+++ /var/tmp/diff_new_pack.bU3lnS/_new  2024-01-03 12:25:51.865398599 +0100
@@ -18,66 +18,85 @@
 
 #Compat macro for new _fillupdir macro introduced in Nov 2017
 %if ! %{defined _fillupdir}
-  %define _fillupdir /var/adm/fillup-templates
+  %define _fillupdir %{_localstatedir}/adm/fillup-templates
 %endif
-
 %bcond_without  mysql
 %bcond_without  pgsql
 %bcond_without  sqlite
 %bcond_without  ldap
 %bcond_without  i18n
-
 %if 0%{?suse_version} > 1199 || 0%{?centos_version} > 599 || 0%{?rhel_version} 
> 599
 %bcond_without  dane
 %else
 %bcond_with     dane
 %endif
-
 Name:           exim
+Version:        4.97.1
+Release:        0
+Summary:        The Exim Mail Transfer Agent, a Replacement for sendmail
+License:        GPL-2.0-or-later
+Group:          Productivity/Networking/Email/Servers
+URL:            https://www.exim.org/
+Source:         https://ftp.exim.org/pub/exim/exim4/exim-%{version}.tar.bz2
+Source1:        sysconfig.exim
+Source2:        exim.logrotate
+Source3:        https://ftp.exim.org/pub/exim/exim4/exim-%{version}.tar.bz2.asc
+# http://ftp.exim.org/pub/exim/Exim-Maintainers-Keyring.asc
+Source4:        exim.keyring
+Source11:       exim.rc
+Source12:       permissions.exim
+Source13:       apparmor.usr.sbin.exim
+Source30:       eximstats-html-update.py
+Source31:       eximstats.conf
+Source32:       eximstats.conf-2.2
+Source40:       exim.service
+Source41:       exim_db.8.gz
+Patch0:         exim-tail.patch
+Patch1:         gnu_printf.patch
 BuildRequires:  cyrus-sasl-devel
 BuildRequires:  db-devel
 BuildRequires:  libidn-devel
-%if 0%{?suse_version} >= 1330 && 0%{?suse_version} < 1599
-BuildRequires:  libnsl-devel
-%endif
 BuildRequires:  libspf2-devel
 BuildRequires:  pam-devel
-%if %{with_ldap}
-BuildRequires:  openldap2-devel
-%endif
 BuildRequires:  pcre2-devel
+BuildRequires:  pkgconfig
 BuildRequires:  tcpd-devel
 BuildRequires:  pkgconfig(libcrypto)
 BuildRequires:  pkgconfig(libssl)
 BuildRequires:  pkgconfig(xaw7)
 BuildRequires:  pkgconfig(xmu)
 BuildRequires:  pkgconfig(xt)
-URL:            http://www.exim.org/
 Conflicts:      postfix
 Conflicts:      sendmail
 Conflicts:      sendmail-tls
 Provides:       smtp_daemon
+%if 0%{?suse_version} >= 1330 && 0%{?suse_version} < 1599
+BuildRequires:  libnsl-devel
+%endif
+%if %{with_ldap}
+BuildRequires:  openldap2-devel
+%endif
 %if %{?suse_version:%suse_version}%{?!suse_version:0} > 800
-Requires:       logrotate
 BuildRequires:  perl-File-FcntlLock
+Requires:       logrotate
 Requires:       perl-File-FcntlLock
+Requires(pre):  %fillup_prereq
+Requires(pre):  fileutils
+Requires(pre):  permissions
+Requires(pre):  textutils
 %if 0%{?suse_version} > 1220
 BuildRequires:  pkgconfig(systemd)
 %{?systemd_requires}
 %else
 Requires(pre):  %insserv_prereq
 %endif
-Requires(pre):  %fillup_prereq permissions
 %if 0%{?suse_version} >= 1330
 BuildRequires:  group(mail)
 BuildRequires:  user(mail)
-Requires(pre):  user(mail)
 Requires(pre):  group(mail)
+Requires(pre):  user(mail)
 %endif
-Requires(pre):  fileutils textutils
 %endif
-Version:        4.97
-Release:        0
 %if %{with_mysql}
 BuildRequires:  mysql-devel
 %endif
@@ -87,26 +106,6 @@
 %if %{with_sqlite}
 BuildRequires:  sqlite3-devel
 %endif
-Summary:        The Exim Mail Transfer Agent, a Replacement for sendmail
-License:        GPL-2.0-or-later
-Group:          Productivity/Networking/Email/Servers
-BuildRoot:      %{_tmppath}/%{name}-%{version}-build
-Source:         http://ftp.exim.org/pub/exim/exim4/exim-%{version}.tar.bz2
-Source3:        http://ftp.exim.org/pub/exim/exim4/exim-%{version}.tar.bz2.asc
-# http://ftp.exim.org/pub/exim/Exim-Maintainers-Keyring.asc
-Source4:        exim.keyring
-Source1:        sysconfig.exim
-Source2:        exim.logrotate
-Source11:       exim.rc
-Source12:       permissions.exim
-Source13:       apparmor.usr.sbin.exim
-Source30:       eximstats-html-update.py
-Source31:       eximstats.conf
-Source32:       eximstats.conf-2.2
-Source40:       exim.service
-Source41:       exim_db.8.gz
-Patch0:         exim-tail.patch
-Patch1:         gnu_printf.patch
 
 %package -n eximon
 Summary:        Eximon, an graphical frontend to administer Exim's mail queue
@@ -136,13 +135,13 @@
 
 %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
+EXIM_REPORT_WEEKLY_HTML in %{_sysconfdir}/sysconfig/exim, logrotate/cron will
 create HTML reports in /srv/www/eximstats.
 
-You can edit /etc/apache2/conf.d/eximstats.conf to configure your
+You can edit %{_sysconfdir}/apache2/conf.d/eximstats.conf to configure your
 webserver for the reports.
 
-The script /usr/sbin/eximstats-html-update.py can create the reports
+The script %{_sbindir}/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.)
 
@@ -160,11 +159,11 @@
 %endif
 cat <<-EOF > Local/Makefile
        # see src/EDITME for comments.
-       BIN_DIRECTORY=/usr/sbin
-       CONFIGURE_FILE=/etc/exim/exim.conf
+       BIN_DIRECTORY=%{_sbindir}
+       CONFIGURE_FILE=%{_sysconfdir}/exim/exim.conf
        EXIM_USER=ref:mail
        EXIM_GROUP=ref:mail
-       SPOOL_DIRECTORY=/var/spool/exim
+       SPOOL_DIRECTORY=%{_localstatedir}/spool/exim
        ROUTER_ACCEPT=yes
        ROUTER_DNSLOOKUP=yes
        ROUTER_IPLITERAL=yes
@@ -206,21 +205,21 @@
        # LOOKUP_NISPLUS=yes
        LOOKUP_PASSWD=yes
        # LOOKUP_WHOSON=yes
-       CYRUS_SASLAUTHD_SOCKET=/var/run/sasl2/mux
+       CYRUS_SASLAUTHD_SOCKET=%{_localstatedir}/run/sasl2/mux
 %if %{with_ldap}
        LDAP_LIB_TYPE=OPENLDAP2
        LOOKUP_LIBS+=-llber -lldap
 %endif
 %if %{with_mysql}
-       LOOKUP_INCLUDE+=-I /usr/include/mysql
+       LOOKUP_INCLUDE+=-I %{_includedir}/mysql
        LOOKUP_LIBS+=-L %{_libdir}/mysql -lmysqlclient
 %endif
 %if %{with_pgsql}
-       LOOKUP_INCLUDE+=-I /usr/include/pgsql
+       LOOKUP_INCLUDE+=-I %{_includedir}/pgsql
        LOOKUP_LIBS+=-lpq
 %endif
 %if %{with_sqlite}
-       LOOKUP_INCLUDE+=-I /usr/include/sqlite3
+       LOOKUP_INCLUDE+=-I %{_includedir}/sqlite3
        LOOKUP_LIBS+=-lsqlite3
 %endif
        EXIM_MONITOR=eximon.bin
@@ -236,24 +235,24 @@
     USE_OPENSSL=yes
        TLS_LIBS=-lssl -lcrypto
        INFO_DIRECTORY=%{_infodir}
-       LOG_FILE_PATH=/var/log/exim/%%s.log
+       LOG_FILE_PATH=%{_localstatedir}/log/exim/%%s.log
        EXICYCLOG_MAX=10
        SYSLOG_LOG_PID=yes
     SYSLOG_LONG_LINES=yes
        COMPRESS_COMMAND=/bin/gzip
        COMPRESS_SUFFIX=gz
-       ZCAT_COMMAND=/usr/bin/zcat
+       ZCAT_COMMAND=%{_bindir}/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
+       # RADIUS_CONFIG_FILE=%{_sysconfdir}/radiusclient/radiusclient.conf
+       # CYRUS_PWCHECK_SOCKET=%{_localstatedir}/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
+       PERL_COMMAND=%{_bindir}/perl
        # APPENDFILE_MODE=0600
        # APPENDFILE_DIRECTORY_MODE=0700
        # APPENDFILE_LOCKFILE_MODE=0600
@@ -275,7 +274,7 @@
        # PERL_CC=
        # PERL_CCOPTS=
        # PERL_LIBS=
-       PID_FILE_PATH=/var/run/exim.pid
+       PID_FILE_PATH=%{_localstatedir}/run/exim.pid
        # SPOOL_DIRECTORY_MODE=0750
        # SPOOL_MODE=0640
        SUPPORT_MOVE_FROZEN_MESSAGES=yes
@@ -289,7 +288,7 @@
        EXPERIMENTAL_PROXY=yes
        EXPERIMENTAL_CERTNAMES=yes
        EXPERIMENTAL_DSN=yes
-       SYSTEM_ALIASES_FILE=/etc/aliases
+       SYSTEM_ALIASES_FILE=%{_sysconfdir}/aliases
     # enable SRS
     SUPPORT_SRS=yes
 %if %{with dane}
@@ -300,73 +299,73 @@
        EXPERIMENTAL_INTERNATIONAL=yes
 %endif
        LDFLAGS += -lidn
-       CFLAGS=$RPM_OPT_FLAGS -std=gnu99 -Wall $CFLAGS_OPT_WERROR 
-fno-strict-aliasing -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 
-DLDAP_DEPRECATED $fPIE
+       CFLAGS=%{optflags} -std=gnu99 -Wall $CFLAGS_OPT_WERROR 
-fno-strict-aliasing -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 
-DLDAP_DEPRECATED $fPIE
        EXTRALIBS=-ldl -lpam -L/usr/X11R6/%{_lib} $pie
 EOF
 touch Local/eximon.conf
 rm -f doc/*.{orig,txt~}
 
 %build
-make
+%make_build
 
 %install
 %if 0%{?suse_version} > 1220
-mkdir -p $RPM_BUILD_ROOT/%{_unitdir}
+mkdir -p %{buildroot}/%{_unitdir}
 %else
-mkdir -p $RPM_BUILD_ROOT/etc/init.d
+mkdir -p %{buildroot}%{_initddir}
 %endif
 %if 0%{?suse_version} > 1500
-mkdir -p $RPM_BUILD_ROOT%{_distconfdir}/logrotate.d
+mkdir -p %{buildroot}%{_distconfdir}/logrotate.d
 %else
-mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d
+mkdir -p %{buildroot}%{_sysconfdir}/logrotate.d
 %endif
-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/
-ln -s spool/mail $RPM_BUILD_ROOT/var
-mkdir -p $RPM_BUILD_ROOT%{_fillupdir}
-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} \
+mkdir -p %{buildroot}%{_prefix}/{bin,sbin,lib}
+mkdir -p %{buildroot}%{_localstatedir}/log/exim
+mkdir -p %{buildroot}%{_localstatedir}/spool/mail/
+ln -s spool/mail %{buildroot}%{_localstatedir}
+mkdir -p %{buildroot}%{_fillupdir}
+mkdir -p %{buildroot}%{_mandir}/man8
+mkdir -p %{buildroot}%{_bindir}
+make   inst_dest=%{buildroot}%{_sbindir} \
+       inst_conf=%{buildroot}%{_sysconfdir}/exim/exim.conf \
+       inst_info=%{buildroot}/%{_infodir} \
        INSTALL_ARG=-no_chown   install
 #mv $RPM_BUILD_ROOT/usr/sbin/exim-%{version}* $RPM_BUILD_ROOT/usr/sbin/exim
-mv $RPM_BUILD_ROOT/usr/sbin/exim-4.9* $RPM_BUILD_ROOT/usr/sbin/exim
-mv $RPM_BUILD_ROOT/etc/exim/exim.conf src/configure.default # with all 
substitutions done
+mv %{buildroot}%{_sbindir}/exim-4.9* %{buildroot}%{_sbindir}/exim
+mv %{buildroot}%{_sysconfdir}/exim/exim.conf src/configure.default # with all 
substitutions done
 %if 0%{?suse_version} > 1220
-install -m 0644 %{S:40} $RPM_BUILD_ROOT/%{_unitdir}/exim.service
+install -m 0644 %{SOURCE40} %{buildroot}/%{_unitdir}/exim.service
 %else
-install -m 0755 %{S:11} $RPM_BUILD_ROOT/etc/init.d/exim
+install -m 0755 %{SOURCE11} %{buildroot}%{_initddir}/exim
 %endif
 # aka...
 for i in \
-       /usr/lib/sendmail \
-       /usr/bin/runq \
-       /usr/bin/rsmtp \
-       /usr/bin/mailq \
-       /usr/bin/newaliases
+       %{_prefix}/lib/sendmail \
+       %{_bindir}/runq \
+       %{_bindir}/rsmtp \
+       %{_bindir}/mailq \
+       %{_bindir}/newaliases
 do
        ln -sf ../sbin/exim $RPM_BUILD_ROOT$i
 done
-ln -sf exim $RPM_BUILD_ROOT/usr/sbin/sendmail
+ln -sf exim %{buildroot}%{_sbindir}/sendmail
 %if 0%{?suse_version} > 1220
-ln -sv service $RPM_BUILD_ROOT/usr/sbin/rcexim
+ln -sv service %{buildroot}%{_sbindir}/rcexim
 %else
-ln -sv ../../etc/init.d/exim $RPM_BUILD_ROOT/usr/sbin/rcexim
+ln -sv ../..%{_initddir}/exim %{buildroot}%{_sbindir}/rcexim
 %endif
-mv $RPM_BUILD_ROOT/usr/sbin/eximon* $RPM_BUILD_ROOT/usr/bin/
-cp -p %{S:1} $RPM_BUILD_ROOT%{_fillupdir}/sysconfig.exim
+mv %{buildroot}%{_sbindir}/eximon* %{buildroot}%{_bindir}/
+cp -p %{SOURCE1} %{buildroot}%{_fillupdir}/sysconfig.exim
 %if 0%{?suse_version} > 1500
-install -m 0644 %{S:2} $RPM_BUILD_ROOT%{_distconfdir}/logrotate.d/exim
+install -m 0644 %{SOURCE2} %{buildroot}%{_distconfdir}/logrotate.d/exim
 %else
-install -m 0644 %{S:2} $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/exim
+install -m 0644 %{SOURCE2} %{buildroot}%{_sysconfdir}/logrotate.d/exim
 %endif
 # man pages
-mv doc/exim.8 $RPM_BUILD_ROOT/%{_mandir}/man8/
-cp $RPM_SOURCE_DIR/exim_db.8.gz $RPM_BUILD_ROOT/%{_mandir}/man8
-gunzip $RPM_BUILD_ROOT/%{_mandir}/man8/exim_db.8.gz
-pod2man --center=EXIM --section=8 $RPM_BUILD_ROOT/usr/sbin/eximstats > 
$RPM_BUILD_ROOT/%{_mandir}/man8/eximstats.8
+mv doc/exim.8 %{buildroot}/%{_mandir}/man8/
+cp $RPM_SOURCE_DIR/exim_db.8.gz %{buildroot}/%{_mandir}/man8
+gunzip %{buildroot}/%{_mandir}/man8/exim_db.8.gz
+pod2man --center=EXIM --section=8 %{buildroot}%{_sbindir}/eximstats > 
%{buildroot}/%{_mandir}/man8/eximstats.8
 for i in \
        sendmail \
        runq \
@@ -374,32 +373,32 @@
        mailq \
        newaliases
 do
-       ln -sf exim.8.gz $RPM_BUILD_ROOT/%{_mandir}/man8/$i.8.gz
+       ln -sf exim.8.gz %{buildroot}/%{_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
+       ln -sf exim_db.8.gz %{buildroot}/%{_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"`
+sed -i -e 's,%{_datadir}/doc/exim4,%{_docdir}/exim,g' $(find 
%{buildroot}/%{_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*
 #
 # eximstats-html files
-mkdir -p $RPM_BUILD_ROOT/srv/www/eximstats
-mkdir -p $RPM_BUILD_ROOT/etc/apache2/conf.d/
+mkdir -p %{buildroot}/srv/www/eximstats
+mkdir -p %{buildroot}%{_sysconfdir}/apache2/conf.d/
 %if 0%{?suse_version} == 0 || 0%{?suse_version} > 1310
-       cp -p %{S:31} $RPM_BUILD_ROOT/etc/apache2/conf.d/
+       cp -p %{SOURCE31} %{buildroot}%{_sysconfdir}/apache2/conf.d/
 %else
-       cp -p %{S:32} $RPM_BUILD_ROOT/etc/apache2/conf.d/eximstats.conf
+       cp -p %{SOURCE32} 
%{buildroot}%{_sysconfdir}/apache2/conf.d/eximstats.conf
 %endif
-install -m 0755 $RPM_SOURCE_DIR/eximstats-html-update.py 
$RPM_BUILD_ROOT/%{_sbindir}
+install -m 0755 $RPM_SOURCE_DIR/eximstats-html-update.py 
%{buildroot}/%{_sbindir}
 # apparmor profile
-install -D -m 0644 $RPM_SOURCE_DIR/apparmor.usr.sbin.exim 
$RPM_BUILD_ROOT/usr/share/apparmor/extra-profiles/usr.sbin.exim
+install -D -m 0644 $RPM_SOURCE_DIR/apparmor.usr.sbin.exim 
%{buildroot}%{_datadir}/apparmor/extra-profiles/usr.sbin.exim
 
 %pretrans -p <lua>
 docdir = rpm.expand('%{_docdir}')
@@ -441,26 +440,25 @@
 %if 0%{?suse_version} < 1131
 %run_permissions
 %else
-%set_permissions /usr/sbin/exim
+%set_permissions %{_sbindir}/exim
 %endif
 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/
+               echo moving exim.conf to %{_sysconfdir}/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
+               echo copying default config file to 
%{_sysconfdir}/exim/exim.conf
        fi
 fi
 %if 0%{?suse_version} > 1220
-%{fillup_only}
+%fillup_only
 %service_add_post exim.service
 %else
 %{fillup_and_insserv exim}
 %endif
 exit 0
 %if %{?suse_version:1}%{?!suse_version:0}
-
 %preun
 %if 0%{?suse_version} > 1220
 %service_del_preun exim.service
@@ -480,32 +478,32 @@
 %endif
 
 %verifyscript
-%verify_permissions -e /usr/sbin/exim
+%verify_permissions -e %{_sbindir}/exim
 
 %files
-%defattr(-,root,root)
 %ghost %{_docdir}/%{name}/doc/cve-2019-13917.rpmmoved
-%doc ACKNOWLEDGMENTS CHANGES LICENCE NOTICE README.UPDATING README
+%license LICENCE
+%doc ACKNOWLEDGMENTS CHANGES 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
+%{_mandir}/man8/*
+%{_sbindir}/exicyclog
+%{_sbindir}/exigrep
+%{_sbindir}/exiqgrep
+%verify(not mode) %attr(4755,root,root) %{_sbindir}/exim
+%{_sbindir}/exim_*
+%{_sbindir}/eximstats
+%{_sbindir}/exinext
+%{_sbindir}/exipick
+%{_sbindir}/exiqsumm
+%{_sbindir}/exiwhat
+%dir %{_sysconfdir}/exim
 %if 0%{?suse_version} > 1220
 %{_unitdir}/exim.service
 %else
-%config /etc/init.d/exim
+%config %{_initddir}/exim
 %endif
 %if 0%{?suse_version} > 1500
 %{_distconfdir}/logrotate.d/exim
@@ -513,33 +511,31 @@
 %config(noreplace) %{_sysconfdir}/logrotate.d/exim
 %endif
 %if %{?suse_version:%suse_version}%{?!suse_version:99999} < 1000
-%config(noreplace) /etc/permissions.d/exim
+%config(noreplace) %{_sysconfdir}/permissions.d/exim
 %endif
-%dir /usr/share/apparmor
-%dir /usr/share/apparmor/extra-profiles
-%config(noreplace) /usr/share/apparmor/extra-profiles/usr.sbin.exim
-/usr/sbin/rcexim
-/usr/bin/mailq
-/usr/bin/runq
-/usr/bin/rsmtp
-/usr/bin/newaliases
-/usr/sbin/sendmail
-/usr/lib/sendmail
+%dir %{_datadir}/apparmor
+%dir %{_datadir}/apparmor/extra-profiles
+%config(noreplace) %{_datadir}/apparmor/extra-profiles/usr.sbin.exim
+%{_sbindir}/rcexim
+%{_bindir}/mailq
+%{_bindir}/runq
+%{_bindir}/rsmtp
+%{_bindir}/newaliases
+%{_sbindir}/sendmail
+%{_prefix}/lib/sendmail
 %{_fillupdir}/sysconfig.exim
-%dir %attr(750,mail,mail) /var/log/exim
-%dir %attr(1777,root,root) /var/spool/mail
-/var/mail
+%dir %attr(750,mail,mail) %{_localstatedir}/log/exim
+%dir %attr(1777,root,root) %{_localstatedir}/spool/mail
+%{_localstatedir}/mail
 
 %files -n eximon
-%defattr(-,root,root)
-/usr/bin/eximon
-/usr/bin/eximon.bin
+%{_bindir}/eximon
+%{_bindir}/eximon.bin
 
 %files -n eximstats-html
-%defattr(-,root,root)
 %attr(0750,root,www) /srv/www/eximstats
-%dir /etc/apache2
-%dir /etc/apache2/conf.d
-%config /etc/apache2/conf.d/eximstats.conf
+%dir %{_sysconfdir}/apache2
+%dir %{_sysconfdir}/apache2/conf.d
+%config %{_sysconfdir}/apache2/conf.d/eximstats.conf
 %{_sbindir}/eximstats-html-update.py
 

++++++ exim-4.97.tar.bz2 -> exim-4.97.1.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/exim-4.97/doc/ChangeLog new/exim-4.97.1/doc/ChangeLog
--- old/exim-4.97/doc/ChangeLog 2023-11-04 13:55:49.000000000 +0100
+++ new/exim-4.97.1/doc/ChangeLog       2023-12-25 19:42:52.000000000 +0100
@@ -2,6 +2,15 @@
 affect Exim's operation, with an unchanged configuration file.  For new
 options, and new features, see the NewStuff file next to this ChangeLog.
 
+Since Exim version 4.97
+-----------------------
+
+JH/s1 Refuse to accept a line "dot, LF" as end-of-DATA unless operating in
+      LF-only mode (as detected from the first header line).  Previously we did
+      accept that in (normal) CRLF mode; this has been raised as a possible
+      attack scenario (under the name "smtp smuggling", CVE-2023-51766).
+
+
 Exim version 4.97
 -----------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/exim-4.97/doc/cve-2023-51766 
new/exim-4.97.1/doc/cve-2023-51766
--- old/exim-4.97/doc/cve-2023-51766    1970-01-01 01:00:00.000000000 +0100
+++ new/exim-4.97.1/doc/cve-2023-51766  2023-12-25 19:42:52.000000000 +0100
@@ -0,0 +1,69 @@
+CVE ID:     CVE-2023-51766
+Date:       2016-12-15
+Credits:    
https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/
+Version(s): all up to 4.97 inclusive
+Issue:      Given a buggy relay, Exim can be induced to accept a second 
message embedded
+            as part of the body of a first message
+
+Conditions
+==========
+
+If *all* the following conditions are met
+
+    Runtime options
+    ---------------
+
+    * Exim offers PIPELINING on incoming connections
+
+    * Exim offers CHUNKING on incoming connections
+
+    Operation
+    ---------
+
+    * DATA (as opposed to BDAT) is used for a message reception
+
+    * The relay host sends to the Exim MTA message data including
+      one of "LF . LF" or "CR LF . LF" or "LF . CR LF".
+
+    * Exim interprets the sequence as signalling the end of data for
+      the SMTP DATA command, and hence a first message.
+
+    * Exim interprets further input which the relay had as message body
+      data, as SMTP commands and data. This could include a MAIL, RCPT,
+      BDAT (etc) sequence, resulting in a further message acceptance.
+
+Impact
+======
+
+One or more messages can be accepted by Exim that have not been
+properly validated by the buggy relay.
+
+Fix
+===
+
+Install a fixed Exim version:
+
+    4.98 (once available)
+    4.97.1
+
+If you can't install one of the above versions, ask your package
+maintainer for a version containing the backported fix. On request and
+depending on our resources we will support you in backporting the fix.
+(Please note, that Exim project officially doesn't support versions
+prior the current stable version.)
+
+
+Workaround
+==========
+
+  Disable CHUNKING advertisement for incoming connections.
+
+  An attempt to "smuggle" a DATA command will trip a syncronisation
+  check.
+
+*or*
+
+  Disable PIPELINING advertisement for incoming connections.
+
+  The "smuggled" MAIL FROM command will then trip a syncronisation
+  check.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/exim-4.97/doc/filter.txt 
new/exim-4.97.1/doc/filter.txt
--- old/exim-4.97/doc/filter.txt        2023-11-04 14:02:13.000000000 +0100
+++ new/exim-4.97.1/doc/filter.txt      2023-12-25 19:54:28.000000000 +0100
@@ -4,7 +4,7 @@
 
 Copyright (c) 2023 The Exim Maintainers
 
-Revision 4.97  04 Nov 2023 PH
+Revision 4.97.1  25 Dec 2023 PH
 
 -------------------------------------------------------------------------------
 
@@ -72,7 +72,7 @@
 
 This document describes the user interfaces to Exim's in-built mail filtering
 facilities, and is copyright (c) The Exim Maintainers 2023. It corresponds to
-Exim version 4.97.
+Exim version 4.97.1.
 
 
 1.1 Introduction
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/exim-4.97/doc/spec.txt new/exim-4.97.1/doc/spec.txt
--- old/exim-4.97/doc/spec.txt  2023-11-04 14:02:13.000000000 +0100
+++ new/exim-4.97.1/doc/spec.txt        2023-12-25 19:54:28.000000000 +0100
@@ -4,7 +4,7 @@
 
 Copyright (c) 2023 The Exim Maintainers
 
-Revision 4.97  04 Nov 2023 EM
+Revision 4.97.1  25 Dec 2023 EM
 
 -------------------------------------------------------------------------------
 
@@ -634,7 +634,7 @@
 1.1 Exim documentation
 ----------------------
 
-This edition of the Exim specification applies to version 4.97 of Exim.
+This edition of the Exim specification applies to version 4.97.1 of Exim.
 Substantive changes from the 4.96 edition are marked in some renditions of this
 document; this paragraph is so marked if the rendition is capable of showing a
 change indicator.
@@ -1762,7 +1762,7 @@
 
 Exim is distributed as a gzipped or bzipped tar file which, when unpacked,
 creates a directory with the name of the current release (for example,
-exim-4.97) into which the following files are placed:
+exim-4.97.1) into which the following files are placed:
 
     ACKNOWLEDGMENTS contains some acknowledgments
     CHANGES         contains a reference to where changes are documented
@@ -2379,7 +2379,7 @@
 For the utility programs, old versions are renamed by adding the suffix .O to
 their names. The Exim binary itself, however, is handled differently. It is
 installed under a name that includes the version number and the compile number,
-for example, exim-4.97-1. The script then arranges for a symbolic link called
+for example, exim-4.97.1-1. The script then arranges for a symbolic link called
 exim to point to the binary. If you are updating a previous version of Exim,
 the script takes care to ensure that the name exim is never absent from the
 directory (as seen by other processes).
@@ -33667,8 +33667,6 @@
 other MTAs, the way Exim handles line endings for all messages is now as
 follows:
 
-  * LF not preceded by CR is treated as a line ending.
-
   * CR is treated as a line ending; if it is immediately followed by LF, the LF
     is ignored.
 
@@ -33683,7 +33681,10 @@
 
   * If the first header line received in a message ends with CRLF, a subsequent
     bare LF in a header line is treated in the same way as a bare CR in a
-    header line.
+    header line and a bare LF in a body line is replaced with a space.
+
+  * If the first header line received in a message does not end with CRLF, a
+    subsequent LF not preceded by CR is treated as a line ending.
 
 
 48.3 Unqualified addresses
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/exim-4.97/src/receive.c new/exim-4.97.1/src/receive.c
--- old/exim-4.97/src/receive.c 2023-11-04 13:55:49.000000000 +0100
+++ new/exim-4.97.1/src/receive.c       2023-12-25 19:42:52.000000000 +0100
@@ -829,100 +829,114 @@
 well, so that there are no CRs in spooled messages. However, the message
 terminating dot is not recognized between two bare CRs.
 
+Dec 2023: getting a site to send a body including an "LF . LF" sequence
+followed by SMTP commands is a possible "smtp smuggling" attack.  If
+the first (header) line for the message has a proper CRLF then enforce
+that for the body: convert bare LF to a space.
+
 Arguments:
-  fout      a FILE to which to write the message; NULL if skipping
+  fout         a FILE to which to write the message; NULL if skipping
+  strict_crlf  require full CRLF sequence as a line ending
 
 Returns:    One of the END_xxx values indicating why it stopped reading
 */
 
 static int
-read_message_data_smtp(FILE *fout)
+read_message_data_smtp(FILE * fout, BOOL strict_crlf)
 {
-int ch_state = 0;
-int ch;
-int linelength = 0;
+enum { s_linestart, s_normal, s_had_cr, s_had_nl_dot, s_had_dot_cr } ch_state =
+             s_linestart;
+int linelength = 0, ch;
 
 while ((ch = (receive_getc)(GETC_BUFFER_UNLIMITED)) != EOF)
   {
   if (ch == 0) body_zerocount++;
   switch (ch_state)
     {
-    case 0:                             /* After LF or CRLF */
-    if (ch == '.')
-      {
-      ch_state = 3;
-      continue;                         /* Don't ever write . after LF */
-      }
-    ch_state = 1;
+    case s_linestart:                  /* After LF or CRLF */
+      if (ch == '.')
+       {
+       ch_state = s_had_nl_dot;
+       continue;                       /* Don't ever write . after LF */
+       }
+      ch_state = s_normal;
 
-    /* Else fall through to handle as normal uschar. */
+      /* Else fall through to handle as normal uschar. */
 
-    case 1:                             /* Normal state */
-    if (ch == '\n')
-      {
-      ch_state = 0;
-      body_linecount++;
+    case s_normal:                     /* Normal state */
+      if (ch == '\r')
+       {
+       ch_state = s_had_cr;
+       continue;                       /* Don't write the CR */
+       }
+      if (ch == '\n')                  /* Bare LF at end of line */
+       if (strict_crlf)
+         ch = ' ';                     /* replace LF with space */
+       else
+         {                             /* treat as line ending */
+         ch_state = s_linestart;
+         body_linecount++;
+         if (linelength > max_received_linelength)
+           max_received_linelength = linelength;
+         linelength = -1;
+         }
+      break;
+
+    case s_had_cr:                     /* After (unwritten) CR */
+      body_linecount++;                        /* Any char ends line */
       if (linelength > max_received_linelength)
-        max_received_linelength = linelength;
+       max_received_linelength = linelength;
       linelength = -1;
-      }
-    else if (ch == '\r')
-      {
-      ch_state = 2;
-      continue;
-      }
-    break;
+      if (ch == '\n')                  /* proper CRLF */
+       ch_state = s_linestart;
+      else
+       {
+       message_size++;         /* convert the dropped CR to a stored NL */
+       if (fout && fputc('\n', fout) == EOF) return END_WERROR;
+       cutthrough_data_put_nl();
+       if (ch == '\r')                 /* CR; do not write */
+         continue;
+       ch_state = s_normal;            /* not LF or CR; process as standard */
+       }
+      break;
 
-    case 2:                             /* After (unwritten) CR */
-    body_linecount++;
-    if (linelength > max_received_linelength)
-      max_received_linelength = linelength;
-    linelength = -1;
-    if (ch == '\n')
-      {
-      ch_state = 0;
-      }
-    else
-      {
-      message_size++;
-      if (fout != NULL && fputc('\n', fout) == EOF) return END_WERROR;
-      cutthrough_data_put_nl();
-      if (ch != '\r') ch_state = 1; else continue;
-      }
-    break;
+    case s_had_nl_dot:                 /* After [CR] LF . */
+      if (ch == '\n')                  /* [CR] LF . LF */
+       if (strict_crlf)
+         ch = ' ';                     /* replace LF with space */
+       else
+         return END_DOT;
+      else if (ch == '\r')             /* [CR] LF . CR */
+       {
+       ch_state = s_had_dot_cr;
+       continue;                       /* Don't write the CR */
+       }
+      /* The dot was removed on reaching s_had_nl_dot. For a doubled dot, here,
+      reinstate it to cutthrough. The current ch, dot or not, is passed both to
+      cutthrough and to file below. */
+      else if (ch == '.')
+       {
+       uschar c = ch;
+       cutthrough_data_puts(&c, 1);
+       }
+      ch_state = s_normal;
+      break;
 
-    case 3:                             /* After [CR] LF . */
-    if (ch == '\n')
-      return END_DOT;
-    if (ch == '\r')
-      {
-      ch_state = 4;
-      continue;
-      }
-    /* The dot was removed at state 3. For a doubled dot, here, reinstate
-    it to cutthrough. The current ch, dot or not, is passed both to cutthrough
-    and to file below. */
-    if (ch == '.')
-      {
-      uschar c= ch;
-      cutthrough_data_puts(&c, 1);
-      }
-    ch_state = 1;
-    break;
+    case s_had_dot_cr:                 /* After [CR] LF . CR */
+      if (ch == '\n')
+       return END_DOT;                 /* Preferred termination */
 
-    case 4:                             /* After [CR] LF . CR */
-    if (ch == '\n') return END_DOT;
-    message_size++;
-    body_linecount++;
-    if (fout != NULL && fputc('\n', fout) == EOF) return END_WERROR;
-    cutthrough_data_put_nl();
-    if (ch == '\r')
-      {
-      ch_state = 2;
-      continue;
-      }
-    ch_state = 1;
-    break;
+      message_size++;          /* convert the dropped CR to a stored NL */
+      body_linecount++;
+      if (fout && fputc('\n', fout) == EOF) return END_WERROR;
+      cutthrough_data_put_nl();
+      if (ch == '\r')
+       {
+       ch_state = s_had_cr;
+       continue;                       /* CR; do not write */
+       }
+      ch_state = s_normal;
+      break;
     }
 
   /* Add the character to the spool file, unless skipping; then loop for the
@@ -1138,7 +1152,7 @@
 {
 if (message_ended >= END_NOTENDED)
   message_ended = chunking_state <= CHUNKING_OFFERED
-     ? read_message_data_smtp(NULL)
+     ? read_message_data_smtp(NULL, FALSE)
      : read_message_bdat_smtp_wire(NULL);
 }
 
@@ -1960,8 +1974,10 @@
 
   if (ch == '\n')
     {
-    if (first_line_ended_crlf == TRUE_UNSET) first_line_ended_crlf = FALSE;
-      else if (first_line_ended_crlf) receive_ungetc(' ');
+    if (first_line_ended_crlf == TRUE_UNSET)
+      first_line_ended_crlf = FALSE;
+    else if (first_line_ended_crlf)
+      receive_ungetc(' ');
     goto EOL;
     }
 
@@ -1970,14 +1986,20 @@
   This implements the dot-doubling rule, though header lines starting with
   dots aren't exactly common. They are legal in RFC 822, though. If the
   following is CRLF or LF, this is the line that that terminates the
+
   entire message. We set message_ended to indicate this has happened (to
   prevent further reading), and break out of the loop, having freed the
   empty header, and set next = NULL to indicate no data line. */
 
   if (f.dot_ends && ptr == 0 && ch == '.')
     {
+    /* leading dot while in headers-read mode */
     ch = (receive_getc)(GETC_BUFFER_UNLIMITED);
-    if (ch == '\r')
+    if (ch == '\n' && first_line_ended_crlf == TRUE /* and not TRUE_UNSET */ )
+               /* dot, LF  but we are in CRLF mode.  Attack? */
+      ch = ' ';        /* replace the LF with a space */
+
+    else if (ch == '\r')
       {
       ch = (receive_getc)(GETC_BUFFER_UNLIMITED);
       if (ch != '\n')
@@ -2013,7 +2035,8 @@
     ch = (receive_getc)(GETC_BUFFER_UNLIMITED);
     if (ch == '\n')
       {
-      if (first_line_ended_crlf == TRUE_UNSET) first_line_ended_crlf = TRUE;
+      if (first_line_ended_crlf == TRUE_UNSET)
+       first_line_ended_crlf = TRUE;
       goto EOL;
       }
 
@@ -3161,7 +3184,7 @@
 
 
 /* Open a new spool file for the data portion of the message. We need
-to access it both via a file descriptor and a stream. Try to make the
+to access it both via a file descriptor and a stdio stream. Try to make the
 directory if it isn't there. */
 
 spool_name = spool_fname(US"input", message_subdir, message_id, US"-D");
@@ -3230,7 +3253,7 @@
   if (smtp_input)
     {
     message_ended = chunking_state <= CHUNKING_OFFERED
-      ? read_message_data_smtp(spool_data_file)
+      ? read_message_data_smtp(spool_data_file, first_line_ended_crlf)
       : spool_wireformat
       ? read_message_bdat_smtp_wire(spool_data_file)
       : read_message_bdat_smtp(spool_data_file);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/exim-4.97/src/smtp_in.c new/exim-4.97.1/src/smtp_in.c
--- old/exim-4.97/src/smtp_in.c 2023-11-04 13:55:49.000000000 +0100
+++ new/exim-4.97.1/src/smtp_in.c       2023-12-25 19:42:52.000000000 +0100
@@ -5102,12 +5102,12 @@
        }
 
       if (chunking_state > CHUNKING_OFFERED)
-       rc = OK;                        /* No predata ACL or go-ahead output 
for BDAT */
+       rc = OK;        /* There is no predata ACL or go-ahead output for BDAT 
*/
       else
        {
-       /* If there is an ACL, re-check the synchronization afterwards, since 
the
-       ACL may have delayed.  To handle cutthrough delivery enforce a dummy 
call
-       to get the DATA command sent. */
+       /* If there is a predata-ACL, re-check the synchronization afterwards,
+       since the ACL may have delayed.  To handle cutthrough delivery enforce a
+       dummy call to get the DATA command sent. */
 
        if (!acl_smtp_predata && cutthrough.cctx.sock < 0)
          rc = OK;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/exim-4.97/src/version.h new/exim-4.97.1/src/version.h
--- old/exim-4.97/src/version.h 2023-11-04 14:02:02.000000000 +0100
+++ new/exim-4.97.1/src/version.h       2023-12-25 19:54:17.000000000 +0100
@@ -1,5 +1,5 @@
 /* automatically generated file - see ../scripts/reversion */
-#define EXIM_RELEASE_VERSION "4.97"
+#define EXIM_RELEASE_VERSION "4.97.1"
 #ifdef EXIM_VARIANT_VERSION
 #define EXIM_VERSION_STR EXIM_RELEASE_VERSION "-" EXIM_VARIANT_VERSION
 #else
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/exim-4.97/src/version.sh 
new/exim-4.97.1/src/version.sh
--- old/exim-4.97/src/version.sh        2023-11-04 14:02:02.000000000 +0100
+++ new/exim-4.97.1/src/version.sh      2023-12-25 19:54:17.000000000 +0100
@@ -1,3 +1,3 @@
 # automatically generated file - see ../scripts/reversion
-EXIM_RELEASE_VERSION="4.97"
+EXIM_RELEASE_VERSION="4.97.1"
 EXIM_COMPILE_NUMBER="1"

Reply via email to