From 81a167dcadaef17ed40630c8243b9e380b506f2c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Arkadiusz=20Mi=C5=9Bkiewicz?= Date: Sun, 7 Jun 2015 12:23:27 +0200 Subject: [PATCH] - rel 4; add checkconfig to init script; fix segfault on some messages in queue --- exim-bug-1639.patch | 56 +++++++++++++++++++++++++++++++++++++++++++++ exim.init | 43 +++++++++++++++++++++++++++------- exim.spec | 4 +++- 3 files changed, 94 insertions(+), 9 deletions(-) create mode 100644 exim-bug-1639.patch diff --git a/exim-bug-1639.patch b/exim-bug-1639.patch new file mode 100644 index 0000000..4899cea --- /dev/null +++ b/exim-bug-1639.patch @@ -0,0 +1,56 @@ +From a818f67959c0f6dd23ca37280d5c4f9b9ee07125 Mon Sep 17 00:00:00 2001 +From: Jeremy Harris +Date: Fri, 5 Jun 2015 15:30:33 +0100 +Subject: [PATCH] Guard routing against a null-deref. Bug 1639 + +--- + src/src/route.c | 31 +++++++++++++++---------------- + 1 file changed, 15 insertions(+), 16 deletions(-) + +diff --git a/src/src/route.c b/src/src/route.c +index cdfa6e6..39aed90 100644 +--- a/src/src/route.c ++++ b/src/src/route.c +@@ -1920,24 +1920,23 @@ if (unseen && r->next != NULL) + /* Unset the address expansions, and return the final result. */ + + ROUTE_EXIT: +-if (yield == DEFER) { +- if ( +- ((Ustrstr(addr->message, "failed to expand") != NULL) || (Ustrstr(addr->message, "expansion of ") != NULL)) && +- ( +- Ustrstr(addr->message, "mysql") != NULL || +- Ustrstr(addr->message, "pgsql") != NULL || ++if ( yield == DEFER ++ && addr->message ++ && ( Ustrstr(addr->message, "failed to expand") != NULL ++ || Ustrstr(addr->message, "expansion of ") != NULL ++ ) ++ && ( Ustrstr(addr->message, "mysql") != NULL ++ || Ustrstr(addr->message, "pgsql") != NULL + #ifdef EXPERIMENTAL_REDIS +- Ustrstr(addr->message, "redis") != NULL || ++ || Ustrstr(addr->message, "redis") != NULL + #endif +- Ustrstr(addr->message, "sqlite") != NULL || +- Ustrstr(addr->message, "ldap:") != NULL || +- Ustrstr(addr->message, "ldapdn:") != NULL || +- Ustrstr(addr->message, "ldapm:") != NULL +- ) +- ) { +- addr->message = string_sprintf("Temporary internal error"); +- } +-} ++ || Ustrstr(addr->message, "sqlite") != NULL ++ || Ustrstr(addr->message, "ldap:") != NULL ++ || Ustrstr(addr->message, "ldapdn:") != NULL ++ || Ustrstr(addr->message, "ldapm:") != NULL ++ ) ++ ) ++ addr->message = string_sprintf("Temporary internal error"); + + deliver_set_expansions(NULL); + router_name = NULL; +-- +1.9.1 + diff --git a/exim.init b/exim.init index 7e0e7e6..6487e7c 100755 --- a/exim.init +++ b/exim.init @@ -32,6 +32,34 @@ else exit 0 fi +checkconfig() { + local details=${1:-0} ret + + RETVAL=0 + if [ $details = 1 ]; then + for CONFIG in /etc/mail/exim.conf $EXIM_EXTRA_CONFIGS; do + run_cmd "Checking exim configuration ($CONFIG)" exim -bV -C $CONFIG + ret=$? + if [ $ret != 0 ]; then + RETVAL=$ret + fi + done + else + for CONFIG in /etc/mail/exim.conf $EXIM_EXTRA_CONFIGS; do + exim -bV -C $CONFIG > /dev/null 2>&1 + ret=$? + if [ $ret != 0 ]; then + show "Checking %s configuration (%s)" "exim" "$CONFIG"; fail + RETVAL=$ret + fi + done + if [ $RETVAL != 0 ]; then + nls 'Configuration test failed. See details with %s "checkconfig"' $0 + exit $RETVAL + fi + fi +} + start() { # Start daemons. if [ -f /var/lock/subsys/exim ]; then @@ -73,6 +101,7 @@ condrestart() { return fi + checkconfig stop start } @@ -84,12 +113,10 @@ reload() { return fi - run_cmd "Checking exim configuration" /usr/bin/exim -bV - if [ $? -eq 0 ]; then - msg_reloading "Exim" - killproc exim -HUP - RETVAL=$? - fi + checkconfig + msg_reloading "Exim" + killproc exim -HUP + RETVAL=$? } RETVAL=0 @@ -102,6 +129,7 @@ case "$1" in stop ;; restart) + checkconfig stop start ;; @@ -112,8 +140,7 @@ case "$1" in reload ;; checkconfig|configtest) - exim -bV - RETVAL=$? + checkconfig 1 ;; status) status exim diff --git a/exim.spec b/exim.spec index 78c4f2c..520dffd 100644 --- a/exim.spec +++ b/exim.spec @@ -22,7 +22,7 @@ Summary(pl.UTF-8): Agent Transferu Poczty Uniwersytetu w Cambridge Summary(pt_BR.UTF-8): Servidor de correio eletrônico exim Name: exim Version: 4.85 -Release: 3 +Release: 4 Epoch: 2 License: GPL Group: Networking/Daemons/SMTP @@ -53,6 +53,7 @@ Patch3: exim-defs.patch Patch4: %{name}4-Makefile-Default.patch # http://marc.merlins.org/linux/exim/files/sa-exim-cvs/localscan_dlopen_exim_4.20_or_better.patch Patch5: localscan_dlopen_%{name}_4.20_or_better.patch +Patch6: exim-bug-1639.patch Patch8: %{name}-spam-timeout.patch Patch10: %{name}-force-sigalrm.patch Patch11: openssl_build_fix.patch @@ -171,6 +172,7 @@ Pliki nagłówkowe dla Exima. %patch3 -p1 %patch4 -p1 %patch5 -p1 +%patch6 -p2 %patch8 -p1 %patch10 -p1 %patch11 -p1 -- 2.43.0