mirror of
https://git.freebsd.org/ports.git
synced 2025-07-18 17:59:20 -04:00
Import the patch to fix segfault during delivery from exim git [1].
[1]: https://bugs.exim.org/show_bug.cgi?id=1671
This commit is contained in:
parent
d2c18343c9
commit
02e3320c23
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=395319
2 changed files with 83 additions and 0 deletions
|
@ -3,6 +3,7 @@
|
|||
|
||||
PORTNAME= exim
|
||||
PORTVERSION?= ${EXIM_VERSION}
|
||||
PORTREVISION= 1
|
||||
CATEGORIES= mail ipv6
|
||||
MASTER_SITES= EXIM/exim4/:exim
|
||||
DISTNAME= ${PORTNAME}-${EXIM_VERSION}
|
||||
|
|
82
mail/exim/files/patch-post-transport-crash
Normal file
82
mail/exim/files/patch-post-transport-crash
Normal file
|
@ -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;
|
||||
}
|
||||
|
Loading…
Add table
Reference in a new issue