]> git.pld-linux.org Git - packages/exim.git/commitdiff
- rel 4; add checkconfig to init script; fix segfault on some messages in queue
authorArkadiusz Miśkiewicz <arekm@maven.pl>
Sun, 7 Jun 2015 10:23:27 +0000 (12:23 +0200)
committerArkadiusz Miśkiewicz <arekm@maven.pl>
Sun, 7 Jun 2015 10:23:27 +0000 (12:23 +0200)
exim-bug-1639.patch [new file with mode: 0644]
exim.init
exim.spec

diff --git a/exim-bug-1639.patch b/exim-bug-1639.patch
new file mode 100644 (file)
index 0000000..4899cea
--- /dev/null
@@ -0,0 +1,56 @@
+From a818f67959c0f6dd23ca37280d5c4f9b9ee07125 Mon Sep 17 00:00:00 2001
+From: Jeremy Harris <jgh146exb@wizmail.org>
+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
+
index 7e0e7e6622e788985120ffc70ee95c1ecd81c91f..6487e7c6aba291c2381eeb55d0829e5c3ab59ae3 100755 (executable)
--- 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
index 78c4f2cdab501d6073447660dcaecdb8d2691492..520dffd0602dec1e86cd2fde16319757e05fb464 100644 (file)
--- 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
This page took 0.327313 seconds and 4 git commands to generate.