diff --git a/mail/exim-doc-html/Makefile b/mail/exim-doc-html/Makefile
index ca43854331e7..43a994de4171 100644
--- a/mail/exim-doc-html/Makefile
+++ b/mail/exim-doc-html/Makefile
@@ -1,67 +1,67 @@
PORTNAME= exim
-PORTVERSION= 4.97.1
+PORTVERSION= 4.98
CATEGORIES= mail
MASTER_SITES= EXIM
MASTER_SITE_SUBDIR= /exim4/ \
/exim4/old/
PKGNAMESUFFIX= -doc-${DOCFORMAT}
DISTNAME= exim-${DISTDOCFORMAT}-${PORTVERSION}
DISTFILES= ${DISTNAME}${EXTRACT_SUFX}
DIST_SUBDIR= exim
MAINTAINER= fluffy@FreeBSD.org
COMMENT= Documentation for the Exim MTA in multiple formats
WWW= https://www.exim.org/
USES= tar:bzip2
DOCFORMAT?= html
DISTDOCFORMAT?= ${DOCFORMAT}
AVAILABLE_FORMATS= html \
pdf \
postscript
NO_BUILD= yes
OPTIONS_DEFINE= DOCS
.if make(makesum) && !defined(FETCH_ALL)
.error "You forgot to define FETCH_ALL to create the sane distinfo"
.endif
.if defined(FETCH_ALL)
. for _df in ${AVAILABLE_FORMATS}
. if ${_df} != ${DOCFORMAT}
DISTFILES+= exim-${_df}-${PORTVERSION}${EXTRACT_SUFX}
. endif
. endfor
.endif
.if ${DOCFORMAT} == "html"
PORTDOCS= html
.elif ${DOCFORMAT} == "pdf"
PORTDOCS= *.pdf
.elif ${DOCFORMAT} == "postscript"
PORTDOCS= *.ps
.elif ${DOCFORMAT} == "info"
IGNORE= exim no longer provides documentation in info format
.else
pre-everything::
@ ${ECHO} 'ERROR: invalid value for DOCFORMAT: "${DOCFORMAT}"'
@ ${ECHO} 'Possible values are "html", "pdf", and "postscript".'
@ ${FALSE}
.endif
do-install:
@ ${MKDIR} ${STAGEDIR}${DOCSDIR}
.if ${DOCFORMAT} == "html"
${TAR} -C ${WRKSRC}/exim-html-current/doc -cf - html | \
${TAR} --unlink -C ${STAGEDIR}${DOCSDIR} -xf -
.elif ${DOCFORMAT} == "pdf"
@ ${INSTALL_DATA} ${WRKSRC}/doc/*.pdf ${STAGEDIR}${DOCSDIR}
.elif ${DOCFORMAT} == "postscript"
@ ${INSTALL_DATA} ${WRKSRC}/doc/*.ps ${STAGEDIR}${DOCSDIR}
.else
@${FALSE}
.endif
.include
diff --git a/mail/exim-doc-html/distinfo b/mail/exim-doc-html/distinfo
index 26cad29c5fb1..5442787163fc 100644
--- a/mail/exim-doc-html/distinfo
+++ b/mail/exim-doc-html/distinfo
@@ -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
diff --git a/mail/exim-ldap2/Makefile b/mail/exim-ldap2/Makefile
index a2078c6faa88..0619677e438f 100644
--- a/mail/exim-ldap2/Makefile
+++ b/mail/exim-ldap2/Makefile
@@ -1,7 +1,6 @@
-PORTREVISION= 1
PKGNAMESUFFIX= -ldap2
MASTERDIR= ${.CURDIR}/../exim
OPTIONS_SLAVE= OPENLDAP
.include "${MASTERDIR}/Makefile"
diff --git a/mail/exim/Makefile b/mail/exim/Makefile
index 3fc8b7e82928..2a9c9578667b 100644
--- a/mail/exim/Makefile
+++ b/mail/exim/Makefile
@@ -1,653 +1,653 @@
PORTNAME= exim
PORTVERSION?= ${EXIM_VERSION}
-PORTREVISION?= 5
+PORTREVISION?= 0
CATEGORIES= mail
MASTER_SITES= EXIM:exim
MASTER_SITE_SUBDIR= /exim4/:exim \
/exim4/fixes/:exim \
/exim4/old/:exim
DISTNAME= ${PORTNAME}-${EXIM_VERSION}
DISTFILES= ${DISTNAME}${EXTRACT_SUFX}:exim
DIST_SUBDIR= exim
EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX}
MAINTAINER= fluffy@FreeBSD.org
COMMENT?= High performance MTA for Unix systems on the Internet
WWW= https://www.exim.org/
LICENSE= GPLv2
BUILD_DEPENDS= p5-File-FcntlLock>0:devel/p5-File-FcntlLock
RUN_DEPENDS= p5-File-FcntlLock>0:devel/p5-File-FcntlLock
USES= compiler cpe tar:bzip2 perl5
USE_CSTD= c99
# Exim build system is job unsafe atm
MAKE_JOBS_UNSAFE= yes
# One can tune the following "hidden" knobs:
# - EXIM_USER: user exim is running as;
# - EXIM_GROUP: ditto for the group;
# - LOGDIR: where Exim logs will be put;
# - LOG_FILE_PATH: path where '%s' will be substituted with
# the target name (main, reject, etc);
# - CONFIG_FILE_PATH: path to the default configuration file;
# - ALT_CONFIG_PREFIX: path to the default prefix for all
# configuration files, excluding the main one;
# will be effective only when WITH_ALT_CONFIG_PREFIX
# will be set via OPTIONS.
.if make(makesum) && !defined(FETCH_ALL)
.error "You forgot to define FETCH_ALL to create the sane distinfo"
.endif
.include "options"
OPTIONS_SUB= yes
AUTH_SASL_LIB_DEPENDS= libsasl2.so:security/cyrus-sasl2
BDB_USES= bdb
DMARC_LIB_DEPENDS= libopendmarc.so:mail/opendmarc
EXIMON_USES= xorg
EXIMON_USE= xorg=x11,xaw,xext,xmu,xt
GNUTLS_LIB_DEPENDS= libgnutls.so:security/gnutls
ICONV_USES= iconv:lib,build
INTERNATIONAL_LIB_DEPENDS= libidn.so:dns/libidn
LMDB_LIB_DEPENDS= liblmdb.so:databases/lmdb
MYSQL_USES= mysql
OPENLDAP_USES= ldap
PGSQL_LIB_DEPENDS= libicudata.so:devel/icu
PGSQL_USES= pgsql pkgconfig
REDIS_LIB_DEPENDS= libhiredis.so:databases/hiredis
SASLAUTHD_RUN_DEPENDS= ${LOCALBASE}/sbin/saslauthd:security/cyrus-sasl2-saslauthd
SA_EXIM_RUN_DEPENDS= ${LOCALBASE}/bin/spamc:mail/spamassassin
SPF_LIB_DEPENDS= libspf2.so:mail/libspf2
SQLITE_LIB_DEPENDS= libicudata.so:devel/icu
SQLITE_USES= pkgconfig sqlite
#DEBIAN_PATCHES_PREFIX= ${FILESDIR}/debian/75
#EXTRA_PATCHES= \
# ${DEBIAN_PATCHES_PREFIX}_01-Fix-exit-on-attempt-to-rewrite-a-malformed-address.-.patch:-p1 \
# ${DEBIAN_PATCHES_PREFIX}_05-SPF-fix-memory-accounting-for-error-case.patch:-p1
.include
# OCSP is supported for openssl only
.if ${PORT_OPTIONS:MOCSP}
.if ! ${PORT_OPTIONS:MTLS}
IGNORE= you cannot enable OCSP stapling without TLS support
.elif ${PORT_OPTIONS:MGNUTLS}
IGNORE= you cannot enable OCSP stapling with gnutls
.endif
.endif
# DMARC implies SPF and DKIM
.if ${PORT_OPTIONS:MDMARC}
.if ! ${PORT_OPTIONS:MSPF} || ! ${PORT_OPTIONS:MDKIM}
IGNORE= you cannot enable DMARC without SPF and DKIM support
.endif
.endif
# ARC implies SPF and DKIM
.if ${PORT_OPTIONS:MARC}
.if ! ${PORT_OPTIONS:MSPF} || ! ${PORT_OPTIONS:MDKIM}
IGNORE= you cannot enable ARC without SPF and DKIM support
.endif
.endif
# DANE implies DNSSEC
.if ${PORT_OPTIONS:MDANE}
.if ! ${PORT_OPTIONS:MDNSSEC} || ! ${PORT_OPTIONS:MTLS}
IGNORE= you cannot enable DANE without DNSSEC support or without TLS support
.endif
.endif
.if ${PORT_OPTIONS:MSA_EXIM} || defined(FETCH_ALL)
MASTER_SITES+= http://marc.merlins.org/linux/exim/files/:sa_exim \
SF/sa-exim/sa-exim/${SA_EXIM_VERSION}:sa_exim
DISTFILES+= sa-exim-${SA_EXIM_VERSION}.tar.gz:sa_exim
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`
.if !defined(EXIMON_ONLY)
PLIST_SUB+= EXIM=""
.if defined(PKGNAMESUFFIX)
CONFLICTS+= ${PKGNAMEPREFIX}${PORTNAME}-4.*
.endif
.for suffix in -ldap2 -mysql -postgresql -sa-exim -sqlite
.if !defined(PKGNAMESUFFIX) || ${PKGNAMESUFFIX} != ${suffix}
CONFLICTS+= ${PKGNAMEPREFIX}${PORTNAME}${suffix}-4.*
.endif
.endfor
.if ${PORT_OPTIONS:MEXIMON}
CONFLICTS+= ${PKGNAMEPREFIX}${PORTNAME}-monitor-4.*
.endif
PKGMESSAGE= ${WRKDIR}/POST-INSTALL-NOTES
.else # !EXIMON_ONLY
PLIST_SUB+= EXIM="@comment "
PORT_OPTIONS+= EXIMON
PKGMESSAGE= ${WRKDIR}/pkg-message
EXIM_INSTALL_ARG+= "eximon" "eximon.bin"
.endif # !EXIMON_ONLY
PORTDOC_BASE= ACKNOWLEDGMENTS NOTICE README.UPDATING
PORTDOC_FILES= ChangeLog Exim3.upgrade Exim4.upgrade NewStuff \
OptionLists.txt README README.SIEVE dbm.discuss.txt \
experimental-spec.txt filter.txt spec.txt
PORT_EXAMPLES= convert4r3 convert4r4 transport-filter.pl
DAILY_SCRIPTS= 150.exim-tidydb 460.exim-mail-rejects
MAKE_ENV+= OSTYPE="${OPSYS}" ARCHTYPE="${ARCH}" DUMMY_LDFLAGS="${DUMMY_LDFLAGS}" STRIP_COMMAND="${STRIP_CMD}"
EXIM_USER?= mailnull
EXIM_GROUP?= mail
# Default user/group are system ones, so we don't want to check them
.if ${EXIM_USER} != "mailnull"
USERS= ${EXIM_USER}
.endif
.if ${EXIM_GROUP} != "mail"
GROUPS= ${EXIM_GROUP}
.endif
LOGDIR?= /var/log/exim
LOG_FILE_PATH?= ${LOGDIR}/%slog
CONFIG_FILE_PATH?= ${PREFIX}/etc/exim/configure
ALT_CONFIG_PREFIX?= ${PREFIX}/etc/exim/
EXIM_DYNAMIC_LDFLAGS= -fPIC -rdynamic -Wl,--export-dynamic
SED_SCRIPT= -e 's,%%PREFIX%%,${PREFIX},g' \
-e 's,%%DOCSDIR%%,${DOCSDIR},g' \
-e 's,%%EXAMPLESDIR%%,${EXAMPLESDIR},g' \
-e 's,%%EXIM_USER%%,${EXIM_USER},g' \
-e 's,%%EXIM_GROUP%%,${EXIM_GROUP},g' \
-e 's,%%LOGDIR%%,${LOGDIR},g'
SEDLIST+= -e 's,XX_CFLAGS_XX,${CFLAGS:S/,/\\,/g},' \
-e 's,XX_PREFIX_XX,${PREFIX:S/,/\\,/g},' \
-e 's,XX_LOCALBASE_XX,${LOCALBASE:S/,/\\,/g},' \
-e 's,XX_LOG_FILE_PATH_XX,${LOG_FILE_PATH:S/,/\\,/g},' \
-e 's,XX_CONFIG_FILE_PATH_XX,${CONFIG_FILE_PATH:S/,/\\,/g},' \
-e 's,XX_ALT_CONFIG_PREFIX_XX,${ALT_CONFIG_PREFIX:S/,/\\,/g},' \
-e 's,XX_EXIM_USER_XX,${EXIM_USER:S/,/\\,/g},' \
-e 's,XX_EXIM_GROUP_XX,${EXIM_GROUP:S/,/\\,/g},' \
-e 's,XX_DEFAULT_CHARSET_XX,${WITH_DEFAULT_CHARSET:S/,/\\,/g},' \
-e 's,XX_DYNAMIC_LDFLAGS_XX,${EXIM_DYNAMIC_LDFLAGS:S/,/\\,/g},'
PLIST_SUB+= EXIM_VERSION="${EXIM_VERSION}-${PORTREVISION}" \
EXIM_USER=${EXIM_USER} \
EXIM_GROUP=${EXIM_GROUP} \
LOGDIR="${LOGDIR:S/^\///}"
# Exim refuses to run local deliveries as root by default. You can
# add other users to this colon-separated list that cannot be
# overridden at runtime below, but are advised not to remove "root".
#WITH_FIXED_NEVER_USERS= root:daemon:bin
# When Exim is decoding MIME "words" in header lines it converts any foreign
# character sets to the one that is set in the headers_charset option.
# The default setting is defined by this setting:
WITH_DEFAULT_CHARSET?= ISO-8859-1
# You should not need to fiddle with anything below this point.
LIB_DEPENDS+= libpcre2-posix.so:devel/pcre2
.if ! ${PORT_OPTIONS:MDKIM}
SEDLIST+= -e 's,^\# (DISABLE_DKIM=),\1,'
.endif
.if ${PORT_OPTIONS:MLISTMATCH_RHS}
SEDLIST+= -e 's,^\# (EXPAND_LISTMATCH_RHS=),\1,'
.endif
.if ${PORT_OPTIONS:MDCC}
SEDLIST+= -e 's,^\# (EXPERIMENTAL_DCC=),\1,'
.endif
.if ${PORT_OPTIONS:MPROXY}
SEDLIST+= -e 's,^\# (SUPPORT_PROXY=),\1,'
.endif
.if ${PORT_OPTIONS:MCERTNAMES}
SEDLIST+= -e 's,^\# (EXPERIMENTAL_CERTNAMES=),\1,'
.endif
.if ${PORT_OPTIONS:MDSN}
SEDLIST+= -e 's,^\# (EXPERIMENTAL_DSN=),\1,'
.endif
.if !${PORT_OPTIONS:MDANE}
SEDLIST+= -e 's,^(SUPPORT_DANE=),\#\1,'
.endif
.if ${PORT_OPTIONS:MARC}
SEDLIST+= -e 's,^\# (EXPERIMENTAL_ARC=),\1,'
.endif
.if !${PORT_OPTIONS:MEVENT}
SEDLIST+= -e 's,^\# (DISABLE_EVENT=),\1,'
.endif
.if ${PORT_OPTIONS:MINTERNATIONAL}
SEDLIST+= -e 's,^\# (SUPPORT_I18N=),\1,' \
-e 's,XX_IDN_LIBS_XX,-L${LOCALBASE}/lib -lidn,'
.else
SEDLIST+= -e 's,XX_IDN_LIBS_XX,,'
.endif
.if ${PORT_OPTIONS:MSOCKS}
SEDLIST+= -e 's,^\# (SUPPORT_SOCKS=),\1,'
.endif
.if !${PORT_OPTIONS:MPRDR}
SEDLIST+= -e 's,^\# (DISABLE_PRDR=),\1,'
.endif
.if !${PORT_OPTIONS:MOCSP}
SEDLIST+= -e 's,^\# (DISABLE_OCSP=),\1,'
.endif
.if !${PORT_OPTIONS:MDNSSEC}
SEDLIST+= -e 's,^\# (DISABLE_DNSSEC=),\1,'
.endif
.if ${PORT_OPTIONS:MDMARC}
SEDLIST+= -e 's,XX_DMARC_LIBS_XX,-L${LOCALBASE}/lib -lopendmarc,' \
-e 's,^\# (SUPPORT_DMARC=),\1,'
.else
SEDLIST+= -e 's,XX_DMARC_LIBS_XX,,'
.endif
.if ${PORT_OPTIONS:MWISHLIST}
EXTRA_PATCHES+= `${FIND} ${PATCHDIR} -name 'wishlist-*.patch'`
.endif
.if ${PORT_OPTIONS:MFIXED_NEVER_USERS}
SEDLIST+= -e 's,^(FIXED_NEVER_USERS=).*,\1${WITH_FIXED_NEVER_USERS:S/,/\\,/g},'
.endif
.if ${PORT_OPTIONS:MEXIMON}
SEDLIST+= -e 's,^\# (EXIM_MONITOR=),\1,'
.endif
.if ${PORT_OPTIONS:MTLS}
.if ! ${PORT_OPTIONS:MGNUTLS}
USES+= ssl
SEDLIST+= -e 's,^\# (USE_OPENSSL=),\1,'
SEDLIST+= -e 's,^\# (TLS_LIBS=.*-lssl[[:space:]]),\1,'
BROKEN_SSL= openssl31
BROKEN_SSL_REASON= error: token is not a valid binary operator in a preprocessor subexpression
.else
SEDLIST+= -e 's,^\# (USE_GNUTLS=),\1,'
SEDLIST+= -e 's,^\# (TLS_LIBS=.*-lgnutls[[:space:]]),\1,'
.endif
.else # TLS support
SEDLIST+= -e 's,^\# (DISABLE_TLS=),\1,'
.endif
.if ${PORT_OPTIONS:MEMBEDDED_PERL}
SEDLIST+= -e 's,^\# (EXIM_PERL=),\1,'
.endif
.if ${PORT_OPTIONS:MTCP_WRAPPERS}
SEDLIST+= -e 's,XX_TCP_WRAPPERS_LIBS_XX,-lwrap,' \
-e 's,^\# (USE_TCP_WRAPPERS=),\1,'
.else
SEDLIST+= -e 's,XX_TCP_WRAPPERS_LIBS_XX,,'
.endif
.if ${PORT_OPTIONS:MICONV}
SEDLIST+= -e 's,XX_ICONV_LIBS_XX,-L${LOCALBASE:S/,/\\,/g}/lib ${ICONV_LIB},' \
-e 's,^\# (HAVE_ICONV=),\1,'
.else
SEDLIST+= -e 's,XX_ICONV_LIBS_XX,,'
.endif
.if ${PORT_OPTIONS:MOPENLDAP}
LDAP_LIB_TYPE= OPENLDAP2
SEDLIST+= -e 's,XX_LDAP_LIBS_XX,-L${LOCALBASE:S/,/\\,/g}/lib -llber -lldap,' \
-e 's,XX_LDAP_INCLUDE_XX,-I${LOCALBASE:S/,/\\,/g}/include,' \
-e 's,XX_LDAP_TYPE_XX,${LDAP_LIB_TYPE:S/,/\\,/g},' \
-e 's,^\# (LOOKUP_LDAP=),\1,'
.else
SEDLIST+= -e 's,XX_LDAP_[^ ]*_XX,,' \
-e 's,^(LDAP_LIB_TYPE=),\# \1,'
.endif
.if ${PORT_OPTIONS:MBDB}
INVALID_BDB_VER= 2 3 6 18
DB_LIBS= -L${BDB_LIB_DIR} -l${BDB_LIB_NAME}
DB_INCLUDES= -I${BDB_INCLUDE_DIR}
.else
DB_LIBS=
DB_INCLUDES=
SEDLIST+= -e 's,^(DBMLIB=),\# \1,'
.endif
SEDLIST+= -e 's,XX_DB_LIBS_XX,${DB_LIBS:S/,/\\,/g},' \
-e 's,XX_DB_INCLUDES_XX,${DB_INCLUDES:S/,/\\,/g},'
.if ${PORT_OPTIONS:MLMDB}
_LMDB_LIBS= -L${LOCALBASE}/lib -llmdb
_LMDB_INCLUDES= -I${LOCALBASE}/include
SEDLIST+= -e 's,^\# (EXPERIMENTAL_LMDB=),\1,'
.else
_LMDB_LIBS=
_LMDB_INCLUDES=
.endif
SEDLIST+= -e 's,XX_LMDB_LIBS_XX,${_LMDB_LIBS:S/,/\\,/g},' \
-e 's,XX_LMDB_INCLUDES_XX,${_LMDB_INCLUDES:S/,/\\,/g},'
.if ${PORT_OPTIONS:MMYSQL}
SEDLIST+= -e 's,XX_MYSQL_LIBS_XX,-L${LOCALBASE:S/,/\\,/g}/lib/mysql -l${_MYSQL_SHLIB:S/lib//},' \
-e 's,XX_MYSQL_INCLUDE_XX,-I${LOCALBASE:S/,/\\,/g}/include/mysql,' \
-e 's,^\# (LOOKUP_MYSQL=),\1,'
.else
SEDLIST+= -e 's,XX_MYSQL_[^ ]*_XX,,'
.endif
.if ${PORT_OPTIONS:MSASLAUTHD}
SASLAUTHD_SOCKET?= /var/run/saslauthd/mux
SEDLIST+= -e 's,^\# (CYRUS_SASLAUTHD_SOCKET=).*,\1${SASLAUTHD_SOCKET:S/,/\\,/g},'
.endif
.if ${PORT_OPTIONS:MPAM}
SEDLIST+= -e 's,XX_PAM_LIBS_XX,-lpam,' \
-e 's,^\# (SUPPORT_PAM=),\1,'
.else
SEDLIST+= -e 's,XX_PAM_LIBS_XX,,'
.endif
.if ${PORT_OPTIONS:MAUTH_CRAM_MD5}
SEDLIST+= -e 's,^\# (AUTH_CRAM_MD5=),\1,'
.endif
.if ${PORT_OPTIONS:MAUTH_PLAINTEXT}
SEDLIST+= -e 's,^\# (AUTH_PLAINTEXT=),\1,'
.endif
.if ${PORT_OPTIONS:MAUTH_DOVECOT}
SEDLIST+= -e 's,^\# (AUTH_DOVECOT=),\1,'
.endif
.if ${PORT_OPTIONS:MAUTH_SPA}
SEDLIST+= -e 's,^\# (AUTH_SPA=),\1,'
.endif
.if ${PORT_OPTIONS:MAUTH_SASL}
SEDLIST+= -e 's,^\# (AUTH_CYRUS_SASL=),\1,' \
-e 's,^\# (AUTH_LIBS=.*-lsasl2),\1,'
.endif
.if ${PORT_OPTIONS:MAUTH_TLS}
SEDLIST+= -e 's,^\# (AUTH_TLS=),\1,'
.endif
.if ${PORT_OPTIONS:MAUTH_RADIUS}
WITH_RADIUS_TYPE?= RADLIB
.if ${WITH_RADIUS_TYPE:tl} == radlib
SEDLIST+= -e 's,XX_RADIUS_LIBS_XX,-lradius,' \
-e 's,^\# (RADIUS_CONFIG_FILE=).*,\1/etc/radius.conf,' \
-e 's,^\# (RADIUS_LIB_TYPE=).*,\1RADLIB,'
.elif ${WITH_RADIUS_TYPE:tl} == radiusclient
LIB_DEPENDS+= libfreeradius-client.so:net/freeradius-client
SEDLIST+= -e 's,XX_RADIUS_LIBS_XX,-L${LOCALBASE:S/,/\\,/g}/lib -lfreeradius-client,' \
-e 's,^\# (RADIUS_CONFIG_FILE=).*,\1${LOCALBASE:S/,/\\,/g}/etc/radiusclient/radiusclient.conf,' \
-e 's,^\# (RADIUS_LIB_TYPE=).*,\1RADIUSCLIENTNEW,'
.else
IGNORE= the variable WITH_RADIUS_TYPE must be either RADLIB or RADIUSCLIENT
.endif
.else
SEDLIST+= -e 's,XX_RADIUS_LIBS_XX,,'
.endif
.if ${PORT_OPTIONS:MPGSQL}
SEDLIST+= -e 's,XX_PGSQL_LIBS_XX,-L${LOCALBASE:S/,/\\,/g}/lib -lpq,' \
-e 's,XX_PGSQL_INCLUDE_XX,-I${LOCALBASE:S/,/\\,/g}/include/pgsql,' \
-e 's,^\# (LOOKUP_PGSQL=),\1,'
.else
SEDLIST+= -e 's,XX_PGSQL_[^ ]*_XX,,'
.endif
.if ! ${PORT_OPTIONS:MPGSQL} && ! ${PORT_OPTIONS:MMYSQL} && !defined(LDAP_LIB_TYPE) && \
! ${PORT_OPTIONS:MBDB} && ! ${PORT_OPTIONS:MLMDB}
SEDLIST+= -e 's,^(LOOKUP_LIBS=),\# \1,' \
-e 's,^(LOOKUP_INCLUDE=),\# \1,'
.endif
.if ! ${PORT_OPTIONS:MDNSDB}
SEDLIST+= -e 's,^(LOOKUP_DNSDB=),\# \1,'
.endif
.if ${PORT_OPTIONS:MMAILDIR}
SEDLIST+= -e 's,^\# (SUPPORT_MAILDIR=),\1,'
.endif
.if ${PORT_OPTIONS:MMAILSTORE}
SEDLIST+= -e 's,^\# (SUPPORT_MAILSTORE=),\1,'
.endif
.if ${PORT_OPTIONS:MMBX}
SEDLIST+= -e 's,^\# (SUPPORT_MBX=),\1,'
.endif
.if ${PORT_OPTIONS:MCDB}
SEDLIST+= -e 's,^\# (LOOKUP_CDB=),\1,'
.endif
.if ${PORT_OPTIONS:MDSEARCH}
SEDLIST+= -e 's,^\# (LOOKUP_DSEARCH=),\1,'
.endif
.if ! ${PORT_OPTIONS:MLSEARCH}
SEDLIST+= -e 's,^(LOOKUP_LSEARCH=),\# \1,'
.endif
.if ${PORT_OPTIONS:MNIS}
SEDLIST+= -e 's,^\# (LOOKUP_NIS=),\1,'
.endif
.if ${PORT_OPTIONS:MPASSWD}
SEDLIST+= -e 's,^\# (LOOKUP_PASSWD=),\1,'
.endif
.if ${PORT_OPTIONS:MSQLITE}
SEDLIST+= -e 's,XX_SQLITE_LIBS_XX,`pkg-config --static --libs sqlite3`,' \
-e 's,XX_SQLITE_FLAGS_XX,`pkg-config --cflags sqlite3`,' \
-e 's,^\# (LOOKUP_SQLITE=),\1,'
.else
SEDLIST+= -e 's,XX_SQLITE_LIBS_XX,,' \
-e 's,XX_SQLITE_FLAGS_XX,,'
.endif
.if ${PORT_OPTIONS:MREDIS}
SEDLIST+= -e 's,XX_REDIS_LIBS_XX,-L${LOCALBASE}/lib -lhiredis,' \
-e 's,^\# (LOOKUP_REDIS=),\1,' \
-e 's,^\# (REDIS=),\1,'
.else
SEDLIST+= -e 's,XX_REDIS_LIBS_XX,,'
.endif
.if ${PORT_OPTIONS:MLMTP}
SEDLIST+= -e 's,^\# (TRANSPORT_LMTP=),\1,'
.endif
.if ! ${PORT_OPTIONS:MALT_CONFIG_PREFIX}
SEDLIST+= -e 's,^(ALT_CONFIG_PREFIX=),\# \1,'
.endif
.if ${PORT_OPTIONS:MSPF}
SEDLIST+= -e 's,XX_SPF_FLAGS_XX,-DSPF,' \
-e 's,XX_SPF_LIBS_XX,-L${LOCALBASE}/lib -lspf2 -lpthread,' \
-e 's,^\# (SUPPORT_SPF=),\1,'
.else
SEDLIST+= -e 's,XX_SPF_FLAGS_XX,,' \
-e 's,XX_SPF_LIBS_XX,,'
.endif
.if ${PORT_OPTIONS:MSRS}
SEDLIST+= -e 's,XX_SRS_FLAGS_XX,-DSUPPORT_SRS,' \
-e 's,XX_SRS_LIBS_XX,,'
.elif ${PORT_OPTIONS:MOLD_SRS}
LIB_DEPENDS+= libsrs_alt.so:mail/libsrs_alt
SEDLIST+= -e 's,XX_SRS_FLAGS_XX,-DEXPERIMENTAL_SRS_ALT,' \
-e 's,XX_SRS_LIBS_XX,-L${LOCALBASE}/lib -lsrs_alt,'
.else
SEDLIST+= -e 's,XX_SRS_FLAGS_XX,,' \
-e 's,XX_SRS_LIBS_XX,,'
.endif
.if ${PORT_OPTIONS:MREADLINE}
SEDLIST+= -e 's,^\# (USE_READLINE=),\1,'
.endif
.if ${PORT_OPTIONS:MCONTENT_SCAN}
SEDLIST+= -e 's,^\# (WITH_CONTENT_SCAN=),\1,'
.endif
.if !defined(EXIMON_ONLY) && ${PORT_OPTIONS:MDAEMON}
USE_RC_SUBR= exim
PLIST_SUB+= EXIMDAEMON=""
SUB_LIST+= LOGDIR="${LOGDIR}"
.else
PLIST_SUB+= EXIMDAEMON="@comment "
.endif
.if ${PORT_OPTIONS:MIPV6}
SEDLIST+= -e 's,^\# (HAVE_IPV6=),\1,'
.endif
.if ${PORT_OPTIONS:MDISABLE_D_OPT}
SEDLIST+= -e 's,^\# (DISABLE_D_OPTION=),\1,'
.else
.if defined(WHITELIST_D_MACROS)
SEDLIST+= -e 's,^\# (WHITELIST_D_MACROS=).*$$,\1${WHITELIST_D_MACROS:S/,/\\,/g},'
.endif
.endif
.if defined(TRUSTED_CONFIG_LIST)
SEDLIST+= -e 's,^\# (TRUSTED_CONFIG_LIST=).*$$,\1${TRUSTED_CONFIG_LIST:S/,/\\,/g},'
.endif
.if ${PORT_OPTIONS:MQUEUEFILE}
SEDLIST+= -e 's,^\# (EXPERIMENTAL_QUEUEFILE=),\1,'
.endif
MAKE_ENV+= INSTALL_ARG="${EXIM_INSTALL_ARG}"
DUMMY_LDFLAGS!= ${ECHO_CMD} ${LDFLAGS} | ${SED} -e 's|-Wl,-rpath|-Wl,-DUMMYrpath|g; s|-rpath|-Wl,-rpath|g; s|-DUMMYrpath|-rpath|g'
pre-everything::
@${ECHO} 'Exim now drops privileges when alternate configuration'
@${ECHO} 'files are used. You can set make variable TRUSTED_CONFIG_LIST'
@${ECHO} 'to specify the list of configuration files for which'
@${ECHO} 'root privileges will be retained.'
@${ECHO} ''
@${ECHO} 'You can whitelist some macros using the make variable'
@${ECHO} 'WHITELIST_D_MACROS. This is useful if you are running'
@${ECHO} 'with DISABLE_D_OPT set, but macros whitelisting will be'
@${ECHO} 'removed in some future Exim release, so it is better'
@${ECHO} 'to use TRUSTED_CONFIG_LIST to set the list of trusted'
@${ECHO} 'configuration files.'
.if empty(.MAKEFLAGS:M-s) && ${PORT_OPTIONS:MWISHLIST}
@${ECHO} ''
@${ECHO} 'Included extra patches:'
@${FIND} ${PATCHDIR} -name 'wishlist-*.patch' \
-exec ${SED} -ne 's,^# , ,p' {} \;
@${ECHO} ''
.endif
post-extract:
.if ${PORT_OPTIONS:MSA_EXIM}
@cd ${WRKDIR} && ${TAR} ${EXTRACT_BEFORE_ARGS} ${_DISTDIR}/sa-exim-${SA_EXIM_VERSION}.tar.gz ${EXTRACT_AFTER_ARGS}
@@${CP} ${WRKDIR}/sa-exim-${SA_EXIM_VERSION}/sa-exim.c ${WRKSRC}/Local
@@${CP} ${WRKDIR}/sa-exim-${SA_EXIM_VERSION}/sa-exim.conf ${WRKSRC}/Local
.endif
do-configure:
@${MKDIR} ${WRKSRC}/Local
@${SED} -E ${SEDLIST} ${WRKSRC}/src/EDITME > ${WRKSRC}/Local/Makefile
.if ${PORT_OPTIONS:MEXIMON}
@${CP} ${WRKSRC}/exim_monitor/EDITME ${WRKSRC}/Local/eximon.conf
.endif
@${REINPLACE_CMD} -E ${SEDLIST} ${WRKSRC}/src/configure.default
@${REINPLACE_CMD} -e 's!$$(LDFLAGS)!$$(DUMMY_LDFLAGS) -L$${LOCALBASE}/lib!' ${WRKSRC}/OS/Makefile-Base
@${REINPLACE_CMD} -e 's/"(Exim $$version_number)\\n\\t"/"(Exim $$version_number (${OPSYS}))\\n\\t"/' \
${WRKSRC}/src/globals.c
@${REINPLACE_CMD} -e 's/Exim version %s \(#%s \)\{0,1\}/&(${OPSYS} ${OSREL}) /' ${WRKSRC}/src/exim.c
@${REINPLACE_CMD} -e 's/^#include "cnumber\.h"$$/${PORTREVISION}/' ${WRKSRC}/src/version.c
@${REINPLACE_CMD} -E -e 's/^(PERL_COMMAND=).*/\1${PERL:S,/,\/,g}/' \
-e 's/^(CC=).*/\1${CC:S,/,\/,g}/' ${WRKSRC}/OS/Makefile-Default
.if ${PORT_OPTIONS:MSA_EXIM}
@${REINPLACE_CMD} -E -e 's/^\# (HAVE_LOCAL_SCAN=).*/\1yes/' \
${WRKSRC}/OS/Makefile-Default
@${REINPLACE_CMD} -E -e 's/^(LOCAL_SCAN_SOURCE=).*/\1Local\/sa-exim.c/' \
${WRKSRC}/OS/Makefile-Default
@{ \
${ECHO_CMD} "char *version=\"${SA_EXIM_VERSION}\";"; \
${ECHO_CMD} "#define SPAMC_LOCATION \"${LOCALBASE}/bin/spamc\""; \
${ECHO_CMD} "#define SPAMASSASSIN_CONF \"${PREFIX}/etc/exim/sa-exim.conf\""; \
} > ${WRKSRC}/Local/sa-exim.h
@${REINPLACE_CMD} -e 's,/usr/bin/spamc,${LOCALBASE}/bin/spamc,' \
${WRKSRC}/Local/sa-exim.conf
.endif
@(cd ${WRKSRC}; ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} configure)
post-build:
.for script in ${DAILY_SCRIPTS}
@${SED} ${SED_SCRIPT} ${FILESDIR}/${script}.sh > ${WRKDIR}/${script}.sh
.endfor
@${SED} ${SED_SCRIPT} ${FILESDIR}/POST-INSTALL-NOTES > \
${WRKDIR}/POST-INSTALL-NOTES
@${SED} ${SED_SCRIPT} ${FILESDIR}/POST-INSTALL-NOTES.clamd > ${WRKDIR}/POST-INSTALL-NOTES.clamd
@${SED} ${SED_SCRIPT} ${FILESDIR}/POST-INSTALL-NOTES > ${WRKDIR}/POST-INSTALL-NOTES
@[ ! -f ${PKGDIR}/pkg-message ] || ${SED} ${SED_SCRIPT} ${PKGDIR}/pkg-message > ${WRKDIR}/pkg-message
.if !defined(EXIMON_ONLY)
post-install:
.if ${PORT_OPTIONS:MDAEMON}
${MKDIR} ${STAGEDIR}${PREFIX}/etc/periodic/daily
.for script in ${DAILY_SCRIPTS}
${INSTALL_SCRIPT} ${WRKDIR}/${script}.sh ${STAGEDIR}${PREFIX}/etc/periodic/daily/${script}
.endfor
.endif
@${MKDIR} -m 750 ${STAGEDIR}${LOGDIR}
${INSTALL_MAN} ${WRKSRC}/doc/exim.8 ${STAGEDIR}${PREFIX}/share/man/man8
.if ${PORT_OPTIONS:MDOCS}
@${MKDIR} ${STAGEDIR}${DOCSDIR}
${INSTALL_DATA} ${WRKDIR}/POST-INSTALL-NOTES ${STAGEDIR}${DOCSDIR}
${INSTALL_DATA} ${WRKDIR}/POST-INSTALL-NOTES.clamd ${STAGEDIR}${DOCSDIR}
.for docfile in ${PORTDOC_BASE}
${INSTALL_DATA} ${WRKSRC}/${docfile} ${STAGEDIR}${DOCSDIR}
.endfor
.for docfile in ${PORTDOC_FILES}
${INSTALL_DATA} ${WRKSRC}/doc/${docfile} ${STAGEDIR}${DOCSDIR}
.endfor
@${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
.for example in ${PORT_EXAMPLES}
${INSTALL_SCRIPT} ${WRKSRC}/build-${OPSYS}-${ARCH}/${example} ${STAGEDIR}${EXAMPLESDIR}
.endfor
.endif
.if ${PORT_OPTIONS:MSA_EXIM}
${INSTALL_DATA} ${WRKSRC}/Local/sa-exim.conf \
${STAGEDIR}${PREFIX}/etc/exim/sa-exim.conf.sample
.endif
.endif # ! defined(EXIMON_ONLY)
.include
# If using clang, avoid too many warnings due to Exim code style
.if ${CHOSEN_COMPILER_TYPE} == "clang"
EXIM_WARN_FLAGS?= -Wno-logical-op-parentheses -Wno-macro-redefined -Wno-parentheses -Wno-dangling-else
.endif
CFLAGS+= ${EXIM_WARN_FLAGS}
.include
diff --git a/mail/exim/distinfo b/mail/exim/distinfo
index f3c9f86041e0..5a49e8ab04d2 100644
--- a/mail/exim/distinfo
+++ b/mail/exim/distinfo
@@ -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
diff --git a/mail/exim/files/patch-periodic-queue-runs b/mail/exim/files/patch-periodic-queue-runs
deleted file mode 100644
index b19336269151..000000000000
--- a/mail/exim/files/patch-periodic-queue-runs
+++ /dev/null
@@ -1,212 +0,0 @@
-From ced0bbf43860a2e4ddc88e3ba20ae731324586c5 Mon Sep 17 00:00:00 2001
-From: Jeremy Harris
-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
-
diff --git a/mail/exim/files/patch-src-lookups-dnsdb.c b/mail/exim/files/patch-src-lookups-dnsdb.c
deleted file mode 100644
index 2e8438c122ec..000000000000
--- a/mail/exim/files/patch-src-lookups-dnsdb.c
+++ /dev/null
@@ -1,66 +0,0 @@
-From 79670d3c32ccb37fe06f25d8192943b58606a32a Mon Sep 17 00:00:00 2001
-From: Jeremy Harris
-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;
diff --git a/mail/exim/files/patch-src_tls-openssl.c b/mail/exim/files/patch-src_tls-openssl.c
deleted file mode 100644
index 9306c0a193a0..000000000000
--- a/mail/exim/files/patch-src_tls-openssl.c
+++ /dev/null
@@ -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