mirror of
https://git.FreeBSD.org/ports.git
synced 2025-02-05 11:35:01 +00:00
mail/exim*: update to 4.98 release (+)
Reported by: VVD (via IRC)
This commit is contained in:
parent
469c3748a9
commit
a509d8ed3c
@ -1,5 +1,5 @@
|
||||
PORTNAME= exim
|
||||
PORTVERSION= 4.97.1
|
||||
PORTVERSION= 4.98
|
||||
CATEGORIES= mail
|
||||
MASTER_SITES= EXIM
|
||||
MASTER_SITE_SUBDIR= /exim4/ \
|
||||
|
@ -1,7 +1,7 @@
|
||||
TIMESTAMP = 1704499920
|
||||
SHA256 (exim/exim-html-4.97.1.tar.bz2) = 9e2cc6b39f4480ee7f575946466d025331fc21368c873a8685b66fdb1919693c
|
||||
SIZE (exim/exim-html-4.97.1.tar.bz2) = 647718
|
||||
SHA256 (exim/exim-pdf-4.97.1.tar.bz2) = 9761ab9f6099bb865b9838ecf3d62008683cadd2ba2ae6fbb9640139044640ba
|
||||
SIZE (exim/exim-pdf-4.97.1.tar.bz2) = 2176843
|
||||
SHA256 (exim/exim-postscript-4.97.1.tar.bz2) = a01809e46d2c6283482788822445187299325d6e909611f6496d2e5ad1f1d14b
|
||||
SIZE (exim/exim-postscript-4.97.1.tar.bz2) = 1144052
|
||||
TIMESTAMP = 1721038337
|
||||
SHA256 (exim/exim-html-4.98.tar.bz2) = 89a4f17a18461f7156d0f7779a292612a547cedb13e5eb10fc70b0973d0a1001
|
||||
SIZE (exim/exim-html-4.98.tar.bz2) = 650008
|
||||
SHA256 (exim/exim-pdf-4.98.tar.bz2) = 90def6b48a47d3dab0513dcb61b5a7c896eeca8f233b1d412d441b1067ca7e0d
|
||||
SIZE (exim/exim-pdf-4.98.tar.bz2) = 2186363
|
||||
SHA256 (exim/exim-postscript-4.98.tar.bz2) = 8d405ef9024d72255534c7ab7af3da98d5e1a83acbf528d97cbddfb014e24a5c
|
||||
SIZE (exim/exim-postscript-4.98.tar.bz2) = 1150095
|
||||
|
@ -1,4 +1,3 @@
|
||||
PORTREVISION= 1
|
||||
PKGNAMESUFFIX= -ldap2
|
||||
MASTERDIR= ${.CURDIR}/../exim
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
PORTNAME= exim
|
||||
PORTVERSION?= ${EXIM_VERSION}
|
||||
PORTREVISION?= 5
|
||||
PORTREVISION?= 0
|
||||
CATEGORIES= mail
|
||||
MASTER_SITES= EXIM:exim
|
||||
MASTER_SITE_SUBDIR= /exim4/:exim \
|
||||
@ -109,7 +109,7 @@ EXTRA_PATCHES+= ${FILESDIR}/extra-patch-Local-sa-exim.c
|
||||
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-Local-sa-exim.conf
|
||||
.endif
|
||||
|
||||
EXIM_VERSION= 4.97.1
|
||||
EXIM_VERSION= 4.98
|
||||
SA_EXIM_VERSION=4.2.1
|
||||
EXIM_INSTALL_ARG+= "-no_chown" "-no_symlink"
|
||||
EXTRA_PATCHES+= `${FIND} ${PATCHDIR} -name '74_*.patch'|${SORT} -h`
|
||||
|
@ -1,5 +1,5 @@
|
||||
TIMESTAMP = 1704046714
|
||||
SHA256 (exim/exim-4.97.1.tar.bz2) = 3a9614ac5b5d10dd98bfc7594561503a51a89c2ccbc52bca3153ee98af1cb37a
|
||||
SIZE (exim/exim-4.97.1.tar.bz2) = 2071215
|
||||
TIMESTAMP = 1721038320
|
||||
SHA256 (exim/exim-4.98.tar.bz2) = acfd93f6e4a38e4887867614770ea062b2453ed93e355772adeae6c6598b0d92
|
||||
SIZE (exim/exim-4.98.tar.bz2) = 2099901
|
||||
SHA256 (exim/sa-exim-4.2.1.tar.gz) = 24d4bf7b0fdddaea11f132981cebb6a86a4ab20ef54111a8ebd481b421c6e2c1
|
||||
SIZE (exim/sa-exim-4.2.1.tar.gz) = 68933
|
||||
|
@ -1,212 +0,0 @@
|
||||
From ced0bbf43860a2e4ddc88e3ba20ae731324586c5 Mon Sep 17 00:00:00 2001
|
||||
From: Jeremy Harris <jgh146exb@wizmail.org>
|
||||
Date: Fri, 15 Dec 2023 21:05:32 +0000
|
||||
Subject: [PATCH] Fix periodic queue runs. Bug 3046
|
||||
|
||||
Broken-by: 7d5055276a22
|
||||
---
|
||||
doc/ChangeLog | 5 ++++
|
||||
src/daemon.c | 58 ++++++++++++++++++++++++++++---------------
|
||||
src/structs.h | 2 +-
|
||||
3 files changed, 44 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog
|
||||
index 85064cc8d..c46f3b8c0 100644
|
||||
--- doc/ChangeLog
|
||||
+++ doc/ChangeLog
|
||||
@@ -53,6 +53,11 @@ JH/10 Bug 3058: Ensure that a failing expansion in a router "set" option defers
|
||||
the routing operation. Previously it would silently stop routing the
|
||||
message.
|
||||
|
||||
+JH/11 Bug 3046: Fix queue-runs. Previously, the arrivel of a notification or
|
||||
+ info-request event close in time to a scheduled run timer could result in
|
||||
+ the latter being missed, and no further queue scheduled runs being
|
||||
+ initiated. This ouwld be more likely on high-load systems.
|
||||
+
|
||||
|
||||
|
||||
Exim version 4.97
|
||||
diff --git a/src/src/daemon.c b/src/src/daemon.c
|
||||
index f2183c735..aff05120a 100644
|
||||
--- src/daemon.c
|
||||
+++ src/daemon.c
|
||||
@@ -1258,10 +1258,9 @@ static const uschar * queuerun_msg_qname;
|
||||
|
||||
/* The notifier socket has something to read. Pull the message from it, decode
|
||||
and do the action.
|
||||
+*/
|
||||
|
||||
-Return TRUE if a sigalrm should be emulated */
|
||||
-
|
||||
-static BOOL
|
||||
+static void
|
||||
daemon_notification(void)
|
||||
{
|
||||
uschar buf[256], cbuf[256];
|
||||
@@ -1277,8 +1276,8 @@ struct msghdr msg = { .msg_name = &sa_un,
|
||||
ssize_t sz;
|
||||
|
||||
buf[sizeof(buf)-1] = 0;
|
||||
-if ((sz = recvmsg(daemon_notifier_fd, &msg, 0)) <= 0) return FALSE;
|
||||
-if (sz >= sizeof(buf)) return FALSE;
|
||||
+if ((sz = recvmsg(daemon_notifier_fd, &msg, 0)) <= 0) return;
|
||||
+if (sz >= sizeof(buf)) return;
|
||||
|
||||
#ifdef notdef
|
||||
debug_printf("addrlen %d\n", msg.msg_namelen);
|
||||
@@ -1351,7 +1350,7 @@ switch (buf[0])
|
||||
: !buf[1+MESSAGE_ID_LENGTH+1]
|
||||
)
|
||||
{ queuerun_msg_qname = q->name; break; }
|
||||
- return TRUE;
|
||||
+ return;
|
||||
#endif
|
||||
|
||||
case NOTIFY_QUEUE_SIZE_REQ:
|
||||
@@ -1373,7 +1372,7 @@ switch (buf[0])
|
||||
regex_at_daemon(buf);
|
||||
break;
|
||||
}
|
||||
-return FALSE;
|
||||
+return;
|
||||
}
|
||||
|
||||
|
||||
@@ -1432,7 +1431,7 @@ for (qrunner * q = qrunners, * next; q; q = next)
|
||||
if (sorted)
|
||||
{
|
||||
qrunner ** p = &sorted;
|
||||
- for (qrunner * qq; qq = *p; p = &(qq->next))
|
||||
+ for (qrunner * qq; qq = *p; p = &qq->next)
|
||||
if ( q->next_tick < qq->next_tick
|
||||
|| q->next_tick == qq->next_tick && q->interval < qq->interval
|
||||
)
|
||||
@@ -1451,6 +1450,13 @@ qrunners = sorted;
|
||||
return qrunners ? qrunners->next_tick - time(NULL) : 0;
|
||||
}
|
||||
|
||||
+/* See if we can do a queue run. If policy limit permit, kick one off.
|
||||
+If both notification and timer events are present, handle the former
|
||||
+and leave the timer outstanding.
|
||||
+
|
||||
+Return the number of seconds until the next due runner.
|
||||
+*/
|
||||
+
|
||||
static int
|
||||
daemon_qrun(int local_queue_run_max, struct pollfd * fd_polls, int listen_socket_count)
|
||||
{
|
||||
@@ -1464,13 +1470,16 @@ DEBUG(D_any) debug_printf("%s received\n",
|
||||
enough queue runners on the go. If we are not running as root, a re-exec is
|
||||
required. In the calling process, restart the alamr timer for the next run. */
|
||||
|
||||
-if (is_multiple_qrun())
|
||||
+if (is_multiple_qrun()) /* we are managing periodic runs */
|
||||
if (local_queue_run_max <= 0 || queue_run_count < local_queue_run_max)
|
||||
{
|
||||
qrunner * q = NULL;
|
||||
|
||||
#ifndef DISABLE_QUEUE_RAMP
|
||||
- if (*queuerun_msgid) /* See if we can start another runner for this queue */
|
||||
+ /* If this is a triggered run for a specific message, see if we can start
|
||||
+ another runner for this queue. */
|
||||
+
|
||||
+ if (*queuerun_msgid)
|
||||
{
|
||||
for (qrunner * qq = qrunners; qq; qq = qq->next)
|
||||
if (qq->name == queuerun_msg_qname)
|
||||
@@ -1481,13 +1490,13 @@ if (is_multiple_qrun())
|
||||
}
|
||||
else
|
||||
#endif
|
||||
- /* In order of run priority, find the first queue for which we can start
|
||||
- a runner */
|
||||
+ /* Normal periodic runL in order of run priority, find the first queue
|
||||
+ for which we can start a runner */
|
||||
|
||||
for (q = qrunners; q; q = q->next)
|
||||
if (q->run_count < q->run_max) break;
|
||||
|
||||
- if (q)
|
||||
+ if (q) /* found a queue to run */
|
||||
{
|
||||
pid_t pid;
|
||||
|
||||
@@ -1619,19 +1628,23 @@ if (is_multiple_qrun())
|
||||
}
|
||||
}
|
||||
|
||||
-sigalrm_seen = FALSE;
|
||||
+/* The queue run has been initiated (unless we were already running enough) */
|
||||
+
|
||||
#ifndef DISABLE_QUEUE_RAMP
|
||||
-if (*queuerun_msgid) /* it was a fast-ramp kick */
|
||||
+if (*queuerun_msgid) /* it was a fast-ramp kick; dealt with */
|
||||
*queuerun_msgid = 0;
|
||||
else /* periodic or one-time queue run */
|
||||
#endif
|
||||
- { /* Impose a minimum 1s tick, even when a run was outstanding */
|
||||
+ /* Set up next timer callback. Impose a minimum 1s tick,
|
||||
+ even when a run was outstanding */
|
||||
+ {
|
||||
int interval = next_qrunner_interval();
|
||||
if (interval <= 0) interval = 1;
|
||||
|
||||
+ sigalrm_seen = FALSE;
|
||||
if (qrunners) /* there are still periodic qrunners */
|
||||
{
|
||||
- ALARM(interval);
|
||||
+ ALARM(interval); /* set up next qrun tick */
|
||||
return interval;
|
||||
}
|
||||
}
|
||||
@@ -2612,7 +2625,7 @@ for (;;)
|
||||
|
||||
The other option is that we have an inetd wait timeout specified to -bw. */
|
||||
|
||||
- if (sigalrm_seen)
|
||||
+ if (sigalrm_seen || *queuerun_msgid)
|
||||
if (inetd_wait_timeout > 0)
|
||||
daemon_inetd_wtimeout(last_connection_time); /* Might not return */
|
||||
else
|
||||
@@ -2641,7 +2654,9 @@ for (;;)
|
||||
select() was interrupted so that we reap the child. This might still leave
|
||||
a small window when a SIGCHLD could get lost. However, since we use SIGCHLD
|
||||
only to do the reaping more quickly, it shouldn't result in anything other
|
||||
- than a delay until something else causes a wake-up. */
|
||||
+ than a delay until something else causes a wake-up.
|
||||
+ For the normal case, wait for either a pollable fd (eg. new connection) or
|
||||
+ or a SIGALRM (for a periodic queue run) */
|
||||
|
||||
if (sigchld_seen)
|
||||
{
|
||||
@@ -2706,10 +2721,13 @@ for (;;)
|
||||
break; /* to top of daemon loop */
|
||||
}
|
||||
#endif
|
||||
+ /* Handle the daemon-notifier socket. If it was a fast-ramp
|
||||
+ notification then queuerun_msgid will have a nonzerolength string. */
|
||||
+
|
||||
if (dnotify_poll && dnotify_poll->revents & POLLIN)
|
||||
{
|
||||
dnotify_poll->revents = 0;
|
||||
- sigalrm_seen = daemon_notification();
|
||||
+ daemon_notification();
|
||||
break; /* to top of daemon loop */
|
||||
}
|
||||
for (struct pollfd * p = fd_polls; p < fd_polls + listen_socket_count;
|
||||
diff --git a/src/src/structs.h b/src/src/structs.h
|
||||
index 209d657c6..256560ef8 100644
|
||||
--- src/structs.h
|
||||
+++ src/structs.h
|
||||
@@ -964,7 +964,7 @@ typedef struct qrunner {
|
||||
struct qrunner * next; /* list sorted by next tick */
|
||||
|
||||
uschar * name; /* NULL for the default queue */
|
||||
- unsigned interval; /* tick rate, seconds */
|
||||
+ unsigned interval; /* tick rate, seconds. Zero for a one-time run */
|
||||
time_t next_tick; /* next run should, or should have, start(ed) */
|
||||
unsigned run_max; /* concurrent queue runner limit */
|
||||
unsigned run_count; /* current runners */
|
||||
--
|
||||
2.30.2
|
||||
|
@ -1,66 +0,0 @@
|
||||
From 79670d3c32ccb37fe06f25d8192943b58606a32a Mon Sep 17 00:00:00 2001
|
||||
From: Jeremy Harris <jgh146exb@wizmail.org>
|
||||
Date: Fri, 17 Nov 2023 16:55:17 +0000
|
||||
Subject: [PATCH] Lookups: Fix dnsdb lookup of multi-chunk TXT. Bug 3054
|
||||
|
||||
Broken=by: f6b1f8e7d642
|
||||
Source: https://git.exim.org/exim.git/patch/79670d3c32cc
|
||||
|
||||
--- src/lookups/dnsdb.c.orig 2023-11-04 13:55:49.000000000 +0100
|
||||
+++ src/lookups/dnsdb.c 2023-11-17 21:34:25.986385000 +0100
|
||||
@@ -387,38 +387,31 @@
|
||||
}
|
||||
|
||||
/* Other kinds of record just have one piece of data each, but there may be
|
||||
- several of them, of course. */
|
||||
+ several of them, of course. TXT & SPF can have data in multiple chunks. */
|
||||
|
||||
if (yield->ptr) yield = string_catn(yield, outsep, 1);
|
||||
|
||||
if (type == T_TXT || type == T_SPF)
|
||||
- {
|
||||
- if (!outsep2) /* output only the first item of data */
|
||||
+ for (unsigned data_offset = 0; data_offset + 1 < rr->size; )
|
||||
{
|
||||
- uschar n = (rr->data)[0];
|
||||
- /* size byte + data bytes must not excced the RRs length */
|
||||
- if (n + 1 <= rr->size)
|
||||
- yield = string_catn(yield, US (rr->data+1), n);
|
||||
- }
|
||||
- else
|
||||
- for (unsigned data_offset = 0; data_offset < rr->size; )
|
||||
- {
|
||||
- uschar chunk_len = (rr->data)[data_offset];
|
||||
- int remain = rr->size - data_offset;
|
||||
+ uschar chunk_len = (rr->data)[data_offset];
|
||||
+ int remain;
|
||||
|
||||
- /* Apparently there are resolvers that do not check RRs before passing
|
||||
- them on, and glibc fails to do so. So every application must...
|
||||
- Check for chunk len exceeding RR */
|
||||
+ if (outsep2 && *outsep2 && data_offset != 0)
|
||||
+ yield = string_catn(yield, outsep2, 1);
|
||||
|
||||
- if (chunk_len > remain)
|
||||
- chunk_len = remain;
|
||||
+ /* Apparently there are resolvers that do not check RRs before passing
|
||||
+ them on, and glibc fails to do so. So every application must...
|
||||
+ Check for chunk len exceeding RR */
|
||||
|
||||
- if (*outsep2 && data_offset != 0)
|
||||
- yield = string_catn(yield, outsep2, 1);
|
||||
- yield = string_catn(yield, US ((rr->data) + ++data_offset), --chunk_len);
|
||||
- data_offset += chunk_len;
|
||||
- }
|
||||
- }
|
||||
+ remain = rr->size - ++data_offset;
|
||||
+ if (chunk_len > remain)
|
||||
+ chunk_len = remain;
|
||||
+ yield = string_catn(yield, US ((rr->data) + data_offset), chunk_len);
|
||||
+ data_offset += chunk_len;
|
||||
+
|
||||
+ if (!outsep2) break; /* output only the first chunk of the RR */
|
||||
+ }
|
||||
else if (type == T_TLSA)
|
||||
if (rr->size < 3)
|
||||
continue;
|
@ -1,11 +0,0 @@
|
||||
--- src/tls-openssl.c.orig 2023-11-07 21:07:29.239948000 +0100
|
||||
+++ src/tls-openssl.c 2023-11-07 21:08:03.517118000 +0100
|
||||
@@ -2605,7 +2605,7 @@
|
||||
asking for certificate-status under DANE, so this callback won't run for
|
||||
that combination. It still will for non-DANE. */
|
||||
|
||||
-#ifdef EXIM_HAVE_OPENSSL_OCSP_RESP_GET0_SIGNER
|
||||
+#if defined(EXIM_HAVE_OPENSSL_OCSP_RESP_GET0_SIGNER) && defined(SUPPORT_DANE)
|
||||
X509 * signer;
|
||||
|
||||
if ( tls_out.dane_verified
|
Loading…
x
Reference in New Issue
Block a user