Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 25 Aug 2015 22:31:16 +0000 (UTC)
From:      Vsevolod Stakhov <vsevolod@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r395319 - in head/mail/exim: . files
Message-ID:  <201508252231.t7PMVGat095010@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: vsevolod
Date: Tue Aug 25 22:31:15 2015
New Revision: 395319
URL: https://svnweb.freebsd.org/changeset/ports/395319

Log:
  Import the patch to fix segfault during delivery from exim git [1].
  
  [1]: https://bugs.exim.org/show_bug.cgi?id=1671

Added:
  head/mail/exim/files/patch-post-transport-crash   (contents, props changed)
Modified:
  head/mail/exim/Makefile

Modified: head/mail/exim/Makefile
==============================================================================
--- head/mail/exim/Makefile	Tue Aug 25 22:24:02 2015	(r395318)
+++ head/mail/exim/Makefile	Tue Aug 25 22:31:15 2015	(r395319)
@@ -3,6 +3,7 @@
 
 PORTNAME=	exim
 PORTVERSION?=	${EXIM_VERSION}
+PORTREVISION=	1
 CATEGORIES=	mail ipv6
 MASTER_SITES=	EXIM/exim4/:exim
 DISTNAME=	${PORTNAME}-${EXIM_VERSION}

Added: head/mail/exim/files/patch-post-transport-crash
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/mail/exim/files/patch-post-transport-crash	Tue Aug 25 22:31:15 2015	(r395319)
@@ -0,0 +1,82 @@
+diff --git src/deliver.c.orig src/src/deliver.c
+index 0e7cea3..b5aa9b9 100644
+--- src/deliver.c.orig
++++ src/deliver.c
+@@ -9,6 +9,7 @@
+ 
+ 
+ #include "exim.h"
++#include <assert.h>
+ 
+ 
+ /* Data block for keeping track of subprocesses for parallel remote
+@@ -7914,17 +7915,36 @@ if (!regex_IGNOREQUOTA) regex_IGNOREQUOTA =
+ uschar *
+ deliver_get_sender_address (uschar * id)
+ {
++int rc;
++uschar * new_sender_address,
++       * save_sender_address;
++
+ if (!spool_open_datafile(id))
+   return NULL;
+ 
++/* Save and restore the global sender_address.  I'm not sure if we should
++not save/restore all the other global variables too, because
++spool_read_header() may change all of them. But OTOH, when this
++deliver_get_sender_address() gets called, the current message is done
++already and nobody needs the globals anymore. (HS12, 2015-08-21) */
++
+ sprintf(CS spoolname, "%s-H", id);
+-if (spool_read_header(spoolname, TRUE, TRUE) != spool_read_OK)
++save_sender_address = sender_address;
++
++rc = spool_read_header(spoolname, TRUE, TRUE);
++
++new_sender_address = sender_address;
++sender_address = save_sender_address;
++
++if (rc != spool_read_OK)
+   return NULL;
+ 
++assert(new_sender_address);
++
+ (void)close(deliver_datafile);
+ deliver_datafile = -1;
+ 
+-return sender_address;
++return new_sender_address;
+ }
+ 
+ /* vi: aw ai sw=2
+diff --git src/transports/smtp.c.orig src/transports/smtp.c
+index 609dba3..c93f2ef 100644
+--- src/transports/smtp.c.orig
++++ src/transports/smtp.c
+@@ -1274,14 +1274,19 @@ we will veto this new message.  */
+ static BOOL
+ smtp_are_same_identities(uschar * message_id, smtp_compare_t * s_compare)
+ {
+-uschar * save_sender_address = sender_address;
+-uschar * current_local_identity =
++
++uschar * message_local_identity,
++       * current_local_identity,
++       * new_sender_address;
++
++current_local_identity =
+   smtp_local_identity(s_compare->current_sender_address, s_compare->tblock);
+-uschar * new_sender_address = deliver_get_sender_address(message_id);
+-uschar * message_local_identity =
+-  smtp_local_identity(new_sender_address, s_compare->tblock);
+ 
+-sender_address = save_sender_address;
++if (!(new_sender_address = deliver_get_sender_address(message_id)))
++    return 0;
++
++message_local_identity =
++  smtp_local_identity(new_sender_address, s_compare->tblock);
+ 
+ return Ustrcmp(current_local_identity, message_local_identity) == 0;
+ }
+



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201508252231.t7PMVGat095010>