Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 26 May 2023 14:18:02 GMT
From:      Kurt Jaeger <pi@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: 985788b37e14 - main - mail/exim: update 4.95 -> 4.96
Message-ID:  <202305261418.34QEI2YO022785@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by pi:

URL: https://cgit.FreeBSD.org/ports/commit/?id=985788b37e14798739af343e2f5a7dfdf7d59b62

commit 985788b37e14798739af343e2f5a7dfdf7d59b62
Author:     Kurt Jaeger <pi@FreeBSD.org>
AuthorDate: 2023-05-26 14:14:00 +0000
Commit:     Kurt Jaeger <pi@FreeBSD.org>
CommitDate: 2023-05-26 14:14:00 +0000

    mail/exim: update 4.95 -> 4.96
    
    PR:             265098
    Obtained-from:  https://salsa.debian.org/exim-team/exim4/-/blob/master/debian/patches/
    Reported-by:    vvd
    Approved-by:    fluffy
    Reviewed-by:    drs-freebsd@sieborger.nom.za
    Tested-by:      pi, drs-freebsd@sieborger.nom.za
    Changes:        https://lists.exim.org/lurker/message/20220625.141825.d6de6074.en.html
---
 UPDATING                                           |  12 +
 mail/exim/Makefile                                 |  46 +-
 mail/exim/distinfo                                 |   6 +-
 ...ng-gettimeofday-select-per-char-for-cmdli.patch | 616 --------------
 .../debian/75_32-Fix-PAM-auth.-Bug-2813.patch      |  25 -
 ...5_35-Exiqgrep-check-arg-parsing.-Bug-2821.patch |  42 -
 ...vert-all-uses-of-select-to-poll.-Bug-2831.patch | 931 ---------------------
 ...-Fix-basic-memory-use-for-SPARC.-Bug-2838.patch | 140 ----
 .../files/debian/75_43-BSD-fix-resource-leak.patch |  61 --
 ...45-Fix-bogus-error-message-copy.-Bug-2857.patch |  38 -
 ...e_directory-in-redirect-routers.-Bug-2715.patch |  62 --
 .../75_55-Specific-check-for-null-pointer.patch    |  67 --
 mail/exim/files/patch-OS__Makefile-Default         |  10 -
 mail/exim/files/patch-OS__Makefile-FreeBSD         |  20 +-
 mail/exim/files/patch-OS_os.c-FreeBSD              |  15 -
 mail/exim/files/patch-src-dmarc.c                  |  19 -
 mail/exim/files/tls/patch-tls1                     |  43 -
 mail/exim/files/tls/patch-tls2                     | 174 ----
 18 files changed, 53 insertions(+), 2274 deletions(-)

diff --git a/UPDATING b/UPDATING
index af8d5c6223df..44b8585aca63 100644
--- a/UPDATING
+++ b/UPDATING
@@ -5,6 +5,18 @@ they are unavoidable.
 You should get into the habit of checking this file for changes each time
 you update your ports collection, before attempting any port upgrades.
 
+20230526:
+  AFFECTS: users of mail/exim
+  AUTHOR: pi@FreeBSD.org
+
+  The port changes from USE_DB to USE_NDBM. Any existing configuration like
+  ${lookup{$needle}dbm{haystack.db}}
+  will need to change to
+  ${lookup{$needle}dbm{haystack}}.
+
+  Please also rename your old DBM files while the exim daemon is stopped:
+  find /var/spool/exim/db/* -not -name \*.lockfile -exec mv -i {} {}.db \;
+
 20230513:
   AFFECTS: users of www/tt-rss
   AUTHOR: dereks@lifeofadishwasher.com
diff --git a/mail/exim/Makefile b/mail/exim/Makefile
index ad06672afa63..45d5209d7a2a 100644
--- a/mail/exim/Makefile
+++ b/mail/exim/Makefile
@@ -1,6 +1,6 @@
 PORTNAME=	exim
 PORTVERSION?=	${EXIM_VERSION}
-PORTREVISION?=	7
+PORTREVISION?=	0
 CATEGORIES=	mail
 MASTER_SITES=	EXIM:exim
 MASTER_SITE_SUBDIR=	/exim4/:exim \
@@ -66,20 +66,30 @@ SQLITE_USES=	pkgconfig sqlite
 
 DEBIAN_PATCHES_PREFIX=	${FILESDIR}/debian/75
 EXTRA_PATCHES= \
-		${DEBIAN_PATCHES_PREFIX}_30-Avoid-calling-gettimeofday-select-per-char-for-cmdli.patch:-p1 \
-		${DEBIAN_PATCHES_PREFIX}_32-Fix-PAM-auth.-Bug-2813.patch:-p1 \
-		${DEBIAN_PATCHES_PREFIX}_35-Exiqgrep-check-arg-parsing.-Bug-2821.patch:-p1 \
-		${DEBIAN_PATCHES_PREFIX}_38-Convert-all-uses-of-select-to-poll.-Bug-2831.patch:-p1 \
-		${DEBIAN_PATCHES_PREFIX}_40-Fix-basic-memory-use-for-SPARC.-Bug-2838.patch:-p1 \
-		${DEBIAN_PATCHES_PREFIX}_43-BSD-fix-resource-leak.patch:-p1 \
-		${DEBIAN_PATCHES_PREFIX}_45-Fix-bogus-error-message-copy.-Bug-2857.patch:-p1 \
-		${DEBIAN_PATCHES_PREFIX}_50-Fix-include_directory-in-redirect-routers.-Bug-2715.patch:-p1 \
-		${DEBIAN_PATCHES_PREFIX}_55-Specific-check-for-null-pointer.patch:-p1
-
-TLS_PATCHES_PREFIX=	${FILESDIR}/tls/
-EXTRA_PATCHES+= \
-		${TLS_PATCHES_PREFIX}patch-tls1:-p1 \
-		${TLS_PATCHES_PREFIX}patch-tls2:-p1
+		${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 \
+		${DEBIAN_PATCHES_PREFIX}_08-Fix-regex-n-use-after-free.-Bug-2915.patch:-p1 \
+		${DEBIAN_PATCHES_PREFIX}_09-Fix-non-WITH_CONTENT_SCAN-build.patch:-p1 \
+		${DEBIAN_PATCHES_PREFIX}_10-Fix-non-WITH_CONTENT_SCAN-build-2.patch:-p1 \
+		${DEBIAN_PATCHES_PREFIX}_11-Fix-non-WITH_CONTENT_SCAN-build-3.patch:-p1 \
+		${DEBIAN_PATCHES_PREFIX}_16-GnuTLS-fix-for-clients-offering-no-TLS-extensions.patch:-p1 \
+		${DEBIAN_PATCHES_PREFIX}_18-Fix-Build-with-libopendmarc-1.4.x-fixes-2728.patch:-p1 \
+		${DEBIAN_PATCHES_PREFIX}_19-DMARC-fix-use-after-free-in-dmarc_dns_lookup.patch:-p1 \
+		${DEBIAN_PATCHES_PREFIX}_22-Fix-daemon-startup.-Bug-2930.patch:-p1 \
+		${DEBIAN_PATCHES_PREFIX}_23-Fix-reccipients-after-run.-.-Bug-2929.patch:-p1 \
+		${DEBIAN_PATCHES_PREFIX}_31-Fix-regext-substring-capture-variables-for-null-matc.patch:-p1 \
+		${DEBIAN_PATCHES_PREFIX}_32-Fix-regex-substring-capture-variables-for-null-match.patch:-p1 \
+		${DEBIAN_PATCHES_PREFIX}_34-Fix-regex-substring-capture-commentary.-Bug-2933.patch:-p1 \
+		${DEBIAN_PATCHES_PREFIX}_37-OpenSSL-when-preloading-creds-do-the-server-certs-be.patch:-p1 \
+		${DEBIAN_PATCHES_PREFIX}_38-OpenSSL-fix-double-expansion-of-tls_verify_certifica.patch:-p1 \
+		${DEBIAN_PATCHES_PREFIX}_50-Fix-logging-of-max-size-log-line.patch:-p1 \
+		${DEBIAN_PATCHES_PREFIX}_55-Fix-recursion-on-dns_again_means_nonexist.-Bug-2911.patch:-p1 \
+		${DEBIAN_PATCHES_PREFIX}_58-Close-server-smtp-socket-explicitly-on-connect-ACL-d.patch:-p1 \
+		${DEBIAN_PATCHES_PREFIX}_60-OpenSSL-fix-tls_eccurve-setting-explicit-curve-group.patch:-p1 \
+		${DEBIAN_PATCHES_PREFIX}_62-OpenSSL-Fix-tls_eccurve-on-earlier-versions-than-3.0.patch:-p1 \
+		${DEBIAN_PATCHES_PREFIX}_63-OpenSSL-log-conns-rejected-for-bad-ALPN-with-the-off.patch:-p1 \
+		${DEBIAN_PATCHES_PREFIX}_64-DANE-do-not-check-dns_again_means_nonexist-for-TLSA-.patch:-p1 \
+		${DEBIAN_PATCHES_PREFIX}_66-Fix-crash-in-expansions.patch:-p1
 
 .include <bsd.port.options.mk>
 
@@ -120,7 +130,7 @@ EXTRA_PATCHES+=	${FILESDIR}/extra-patch-Local-sa-exim.c
 EXTRA_PATCHES+=	${FILESDIR}/extra-patch-Local-sa-exim.conf
 .endif
 
-EXIM_VERSION=	4.95
+EXIM_VERSION=	4.96
 SA_EXIM_VERSION=4.2.1
 EXIM_INSTALL_ARG+=	"-no_chown" "-no_symlink"
 EXTRA_PATCHES+=	`${FIND} ${PATCHDIR} -name '74_*.patch'|${SORT} -h`
@@ -210,7 +220,7 @@ WITH_DEFAULT_CHARSET?=	ISO-8859-1
 
 # You should not need to fiddle with anything below this point.
 
-LIB_DEPENDS+=	libpcre.so:devel/pcre
+LIB_DEPENDS+=	libpcre2-posix.so:devel/pcre2
 
 .if ! ${PORT_OPTIONS:MDKIM}
 SEDLIST+=	-e 's,^\# (DISABLE_DKIM=),\1,'
@@ -601,8 +611,6 @@ do-configure:
 	@${REINPLACE_CMD} -e 's,/usr/bin/spamc,${LOCALBASE}/bin/spamc,' \
 	    ${WRKSRC}/Local/sa-exim.conf
 .endif
-	@${REINPLACE_CMD} -E -e 's/XX_STRIPCMD_XX/${STRIP_CMD:S,/,\/,g}/' \
-		${WRKSRC}/OS/Makefile-FreeBSD
 	@(cd ${WRKSRC}; ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} configure)
 
 post-build:
diff --git a/mail/exim/distinfo b/mail/exim/distinfo
index c007834ea4bb..eb6b96ef513f 100644
--- a/mail/exim/distinfo
+++ b/mail/exim/distinfo
@@ -1,5 +1,5 @@
-TIMESTAMP = 1632918983
-SHA256 (exim/exim-4.95.tar.bz2) = 7f4716cc1b3fee66930d83b249f1c7b119fa1957f6f46e3f4372805cbc97ea63
-SIZE (exim/exim-4.95.tar.bz2) = 2035738
+TIMESTAMP = 1681024359
+SHA256 (exim/exim-4.96.tar.bz2) = c7a413fec601cc44a8f5fe9e5b64cb24a7d133f3a4a976f33741d98ff0ec6b91
+SIZE (exim/exim-4.96.tar.bz2) = 2047632
 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/debian/75_30-Avoid-calling-gettimeofday-select-per-char-for-cmdli.patch b/mail/exim/files/debian/75_30-Avoid-calling-gettimeofday-select-per-char-for-cmdli.patch
deleted file mode 100644
index ac72e532ebea..000000000000
--- a/mail/exim/files/debian/75_30-Avoid-calling-gettimeofday-select-per-char-for-cmdli.patch
+++ /dev/null
@@ -1,616 +0,0 @@
-From 1843f70b733127fcba3321d9d69359e05905f8cc Mon Sep 17 00:00:00 2001
-From: Jeremy Harris <jgh146exb@wizmail.org>
-Date: Sat, 16 Oct 2021 00:12:16 +0100
-Subject: [PATCH] Avoid calling gettimeofday(), select() per char for cmdline
- message submission.  Bug 2819
-
-Broken-by: 3c55eef240
----
- doc/ChangeLog          |  4 ++
- src/exim.c                 |  7 ++-
- src/filtertest.c           | 16 +++----
- src/functions.h            |  4 ++
- src/globals.c              | 21 +++++----
- src/globals.h              |  3 ++
- src/receive.c              | 78 ++++++++++++++++++++++------------
- src/smtp_in.c              | 24 ++++++++++-
- src/tls-gnu.c              |  9 ++++
- src/tls-openssl.c          |  8 ++++
- src/transports/autoreply.c | 13 +++---
- 11 files changed, 133 insertions(+), 54 deletions(-)
-
---- a/doc/ChangeLog
-+++ b/doc/ChangeLog
-@@ -1,9 +1,13 @@
- This document describes *changes* to previous versions, that might
- affect Exim's operation, with an unchanged configuration file.  For new
- options, and new features, see the NewStuff file next to this ChangeLog.
- 
-+JH/05 Bug 2819: speed up command-line messages being read in.  Previously a
-+      time check was being done for every character; replace that with one
-+      per buffer.
-+
- 
- Exim version 4.95
- -----------------
- 
- JH/01 Bug 1329: Fix format of Maildir-format filenames to match other mail-
---- a/src/exim.c
-+++ b/src/exim.c
-@@ -5382,11 +5382,11 @@
- 
- if (smtp_input)
-   {
-   if (!f.is_inetd) set_process_info("accepting a local %sSMTP message from <%s>",
-     smtp_batched_input? "batched " : "",
--    (sender_address!= NULL)? sender_address : originator_login);
-+    sender_address ? sender_address : originator_login);
-   }
- else
-   {
-   int old_pool = store_pool;
-   store_pool = POOL_PERM;
-@@ -5432,11 +5432,12 @@
-     mac_smtp_fflush();
-     exim_exit(EXIT_SUCCESS);
-     }
-   }
- 
--/* Otherwise, set up the input size limit here. */
-+/* Otherwise, set up the input size limit here and set no stdin stdio buffer
-+(we handle buferring so as to have visibility of fill level). */
- 
- else
-   {
-   thismessage_size_limit = expand_string_integer(message_size_limit, TRUE);
-   if (expand_string_message)
-@@ -5444,10 +5445,12 @@
-       log_write(0, LOG_MAIN|LOG_PANIC_DIE, "failed to expand "
-         "message_size_limit: %s", expand_string_message);
-     else
-       log_write(0, LOG_MAIN|LOG_PANIC_DIE, "invalid value for "
-         "message_size_limit: %s", expand_string_message);
-+
-+  setvbuf(stdin, NULL, _IONBF, 0);
-   }
- 
- /* Loop for several messages when reading SMTP input. If we fork any child
- processes, we don't want to wait for them unless synchronous delivery is
- requested, so set SIGCHLD to SIG_IGN in that case. This is not necessarily the
---- a/src/filtertest.c
-+++ b/src/filtertest.c
-@@ -43,15 +43,15 @@
- s = message_body_end;
- body_len = 0;
- body_linecount = 0;
- header_size = message_size;
- 
--if (!dot_ended && !feof(stdin))
-+if (!dot_ended && !stdin_feof())
-   {
-   if (!f.dot_ends)
-     {
--    while ((ch = getc(stdin)) != EOF)
-+    while ((ch = stdin_getc(GETC_BUFFER_UNLIMITED)) != EOF)
-       {
-       if (ch == 0) body_zerocount++;
-       if (ch == '\n') body_linecount++;
-       if (body_len < message_body_visible) message_body[body_len++] = ch;
-       *s++ = ch;
-@@ -60,11 +60,11 @@
-       }
-     }
-   else
-     {
-     int ch_state = 1;
--    while ((ch = getc(stdin)) != EOF)
-+    while ((ch = stdin_getc(GETC_BUFFER_UNLIMITED)) != EOF)
-       {
-       if (ch == 0) body_zerocount++;
-       switch (ch_state)
-         {
-         case 0:                         /* Normal state */
-@@ -97,10 +97,11 @@
-       }
-     READ_END: ;
-     }
-   if (s == message_body_end || s[-1] != '\n') body_linecount++;
-   }
-+debug_printf("%s %d\n", __FUNCTION__, __LINE__);
- 
- message_body[body_len] = 0;
- message_body_size = message_size - header_size;
- 
- /* body_len stops at message_body_visible; it if got there, we may have
-@@ -248,11 +249,11 @@
-   }
- 
- /* For a filter, set up the message_body variables and the message size if this
- is the first time this function has been called. */
- 
--if (message_body == NULL) read_message_body(dot_ended);
-+if (!message_body) read_message_body(dot_ended);
- 
- /* Now pass the filter file to the function that interprets it. Because
- filter_test is not FILTER_NONE, the interpreter will output comments about what
- it is doing. No need to clean up store. Indeed, we must not, because we may be
- testing a system filter that is going to be followed by a user filter test. */
-@@ -267,14 +268,13 @@
-   f.enable_dollar_recipients = FALSE;
-   f.system_filtering = FALSE;
-   }
- else
-   {
--  yield = (filter_type == FILTER_SIEVE)?
--    sieve_interpret(filebuf, RDO_REWRITE, NULL, NULL, NULL, NULL, &generated, &error)
--    :
--    filter_interpret(filebuf, RDO_REWRITE, &generated, &error);
-+  yield = filter_type == FILTER_SIEVE
-+    ? sieve_interpret(filebuf, RDO_REWRITE, NULL, NULL, NULL, NULL, &generated, &error)
-+    : filter_interpret(filebuf, RDO_REWRITE, &generated, &error);
-   }
- 
- return yield != FF_ERROR;
- }
- 
---- a/src/functions.h
-+++ b/src/functions.h
-@@ -66,10 +66,11 @@
- extern uschar *tls_field_from_dn(uschar *, const uschar *);
- extern void    tls_free_cert(void **);
- extern int     tls_getc(unsigned);
- extern uschar *tls_getbuf(unsigned *);
- extern void    tls_get_cache(unsigned);
-+extern BOOL    tls_hasc(void);
- extern BOOL    tls_import_cert(const uschar *, void **);
- extern BOOL    tls_is_name_for_cert(const uschar *, void *);
- # ifdef USE_OPENSSL
- extern BOOL    tls_openssl_options_parse(uschar *, long *);
- # endif
-@@ -148,10 +149,11 @@
- extern uschar *b64encode(const uschar *, int);
- extern uschar *b64encode_taint(const uschar *, int, BOOL);
- extern int     b64decode(const uschar *, uschar **);
- extern int     bdat_getc(unsigned);
- extern uschar *bdat_getbuf(unsigned *);
-+extern BOOL    bdat_hasc(void);
- extern int     bdat_ungetc(int);
- extern void    bdat_flush_data(void);
- 
- extern void    bits_clear(unsigned int *, size_t, int *);
- extern void    bits_set(unsigned int *, size_t, int *);
-@@ -492,10 +494,11 @@
-                  uschar **, uschar *);
- extern BOOL    smtp_get_port(uschar *, address_item *, int *, uschar *);
- extern int     smtp_getc(unsigned);
- extern uschar *smtp_getbuf(unsigned *);
- extern void    smtp_get_cache(unsigned);
-+extern BOOL    smtp_hasc(void);
- extern int     smtp_handle_acl_fail(int, int, uschar *, uschar *);
- extern void    smtp_log_no_mail(void);
- extern void    smtp_message_code(uschar **, int *, uschar **, uschar **, BOOL);
- extern void    smtp_proxy_tls(void *, uschar *, size_t, int *, int) NORETURN;
- extern BOOL    smtp_read_response(void *, uschar *, int, int, int);
-@@ -521,10 +524,11 @@
- extern uschar *spool_sender_from_msgid(const uschar *);
- extern int     spool_write_header(uschar *, int, uschar **);
- extern int     stdin_getc(unsigned);
- extern int     stdin_feof(void);
- extern int     stdin_ferror(void);
-+extern BOOL    stdin_hasc(void);
- extern int     stdin_ungetc(int);
- 
- extern void    store_exit(void);
- extern void    store_init(void);
- extern void    store_writeprotect(int);
---- a/src/globals.c
-+++ b/src/globals.c
-@@ -169,20 +169,23 @@
- /* Input-reading functions for messages, so we can use special ones for
- incoming TCP/IP. The defaults use stdin. We never need these for any
- stand-alone tests. */
- 
- #if !defined(STAND_ALONE) && !defined(MACRO_PREDEF)
--int (*lwr_receive_getc)(unsigned) = stdin_getc;
-+int	(*lwr_receive_getc)(unsigned)	= stdin_getc;
- uschar * (*lwr_receive_getbuf)(unsigned *) = NULL;
--int (*lwr_receive_ungetc)(int) = stdin_ungetc;
--int (*receive_getc)(unsigned)  = stdin_getc;
--uschar * (*receive_getbuf)(unsigned *)  = NULL;
--void (*receive_get_cache)(unsigned)    = NULL;
--int (*receive_ungetc)(int)     = stdin_ungetc;
--int (*receive_feof)(void)      = stdin_feof;
--int (*receive_ferror)(void)    = stdin_ferror;
--BOOL (*receive_smtp_buffered)(void) = NULL;   /* Only used for SMTP */
-+int	(*lwr_receive_ungetc)(int)	= stdin_ungetc;
-+BOOL	(*lwr_receive_hasc)(void)	= stdin_hasc;
-+
-+int	(*receive_getc)(unsigned) 	= stdin_getc;
-+uschar * (*receive_getbuf)(unsigned *) 	= NULL;
-+void	(*receive_get_cache)(unsigned)	= NULL;
-+BOOL	(*receive_hasc)(void)		= stdin_hasc;
-+int	(*receive_ungetc)(int)    	= stdin_ungetc;
-+int	(*receive_feof)(void)     	= stdin_feof;
-+int	(*receive_ferror)(void)   	= stdin_ferror;
-+BOOL	(*receive_smtp_buffered)(void)	= NULL;   /* Only used for SMTP */
- #endif
- 
- 
- /* List of per-address expansion variables for clearing and saving/restoring
- when verifying one address while routing/verifying another. We have to have
---- a/src/globals.h
-+++ b/src/globals.h
-@@ -159,13 +159,16 @@
- /* Input-reading functions for messages, so we can use special ones for
- incoming TCP/IP. */
- 
- extern int (*lwr_receive_getc)(unsigned);
- extern uschar * (*lwr_receive_getbuf)(unsigned *);
-+extern BOOL (*lwr_receive_hasc)(void);
- extern int (*lwr_receive_ungetc)(int);
-+
- extern int (*receive_getc)(unsigned);
- extern uschar * (*receive_getbuf)(unsigned *);
-+extern BOOL (*receive_hasc)(void);
- extern void (*receive_get_cache)(unsigned);
- extern int (*receive_ungetc)(int);
- extern int (*receive_feof)(void);
- extern int (*receive_ferror)(void);
- extern BOOL (*receive_smtp_buffered)(void);
---- a/src/receive.c
-+++ b/src/receive.c
-@@ -42,46 +42,75 @@
- /* These are the default functions that are set up in the variables such as
- receive_getc initially. They just call the standard functions, passing stdin as
- the file. (When SMTP input is occurring, different functions are used by
- changing the pointer variables.) */
- 
-+uschar stdin_buf[4096];
-+uschar * stdin_inptr = stdin_buf;
-+uschar * stdin_inend = stdin_buf;
-+
-+static BOOL
-+stdin_refill(void)
-+{
-+size_t rc = fread(stdin_buf, 1, sizeof(stdin_buf), stdin);
-+if (rc <= 0)
-+  {
-+  if (had_data_timeout)
-+    {
-+    fprintf(stderr, "exim: timed out while reading - message abandoned\n");
-+    log_write(L_lost_incoming_connection,
-+	      LOG_MAIN, "timed out while reading local message");
-+    receive_bomb_out(US"data-timeout", NULL);   /* Does not return */
-+    }
-+  if (had_data_sigint)
-+    {
-+    if (filter_test == FTEST_NONE)
-+      {
-+      fprintf(stderr, "\nexim: %s received - message abandoned\n",
-+	had_data_sigint == SIGTERM ? "SIGTERM" : "SIGINT");
-+      log_write(0, LOG_MAIN, "%s received while reading local message",
-+	had_data_sigint == SIGTERM ? "SIGTERM" : "SIGINT");
-+      }
-+    receive_bomb_out(US"signal-exit", NULL);    /* Does not return */
-+    }
-+  return FALSE;
-+  }
-+stdin_inend = stdin_buf + rc;
-+stdin_inptr = stdin_buf;
-+return TRUE;
-+}
-+
- int
- stdin_getc(unsigned lim)
- {
--int c = getc(stdin);
-+if (stdin_inptr >= stdin_inend)
-+  if (!stdin_refill())
-+      return EOF;
-+return *stdin_inptr++;
-+}
- 
--if (had_data_timeout)
--  {
--  fprintf(stderr, "exim: timed out while reading - message abandoned\n");
--  log_write(L_lost_incoming_connection,
--            LOG_MAIN, "timed out while reading local message");
--  receive_bomb_out(US"data-timeout", NULL);   /* Does not return */
--  }
--if (had_data_sigint)
--  {
--  if (filter_test == FTEST_NONE)
--    {
--    fprintf(stderr, "\nexim: %s received - message abandoned\n",
--      had_data_sigint == SIGTERM ? "SIGTERM" : "SIGINT");
--    log_write(0, LOG_MAIN, "%s received while reading local message",
--      had_data_sigint == SIGTERM ? "SIGTERM" : "SIGINT");
--    }
--  receive_bomb_out(US"signal-exit", NULL);    /* Does not return */
--  }
--return c;
-+
-+BOOL
-+stdin_hasc(void)
-+{
-+return stdin_inptr < stdin_inend;
- }
- 
- int
- stdin_ungetc(int c)
- {
--return ungetc(c, stdin);
-+if (stdin_inptr <= stdin_buf)
-+  log_write(0, LOG_MAIN|LOG_PANIC_DIE, "buffer underflow in stdin_ungetc");
-+
-+*--stdin_inptr = c;
-+return c;
- }
- 
- int
- stdin_feof(void)
- {
--return feof(stdin);
-+return stdin_hasc() ? FALSE : feof(stdin);
- }
- 
- int
- stdin_ferror(void)
- {
-@@ -586,11 +615,11 @@
- the file copy. */
- 
- static void
- log_close_chk(void)
- {
--if (!receive_timeout)
-+if (!receive_timeout && !receive_hasc())
-   {
-   struct timeval t;
-   timesince(&t, &received_time);
-   if (t.tv_sec > 30*60)
-     mainlog_close();
-@@ -652,15 +681,10 @@
- 
- if (!f.dot_ends)
-   {
-   int last_ch = '\n';
- 
--/*XXX we do a gettimeofday before checking for every received char,
--which is hardly clever.  The function-indirection doesn't help, but
--an additional function to check for nonempty read buffer would help.
--See stdin_getc() / smtp_getc() / tls_getc() / bdat_getc(). */
--
-   for ( ;
-        log_close_chk(), (ch = (receive_getc)(GETC_BUFFER_UNLIMITED)) != EOF;
-        last_ch = ch)
-     {
-     if (ch == 0) body_zerocount++;
---- a/src/smtp_in.c
-+++ b/src/smtp_in.c
-@@ -561,10 +561,16 @@
-   if (!smtp_refill(lim))
-     return EOF;
- return *smtp_inptr++;
- }
- 
-+BOOL
-+smtp_hasc(void)
-+{
-+return smtp_inptr < smtp_inend;
-+}
-+
- uschar *
- smtp_getbuf(unsigned * len)
- {
- unsigned size;
- uschar * buf;
-@@ -743,10 +749,18 @@
-       }
-     }
-   }
- }
- 
-+BOOL
-+bdat_hasc(void)
-+{
-+if (chunking_data_left > 0)
-+  return lwr_receive_hasc();
-+return TRUE;
-+}
-+
- uschar *
- bdat_getbuf(unsigned * len)
- {
- uschar * buf;
- 
-@@ -782,40 +796,44 @@
- bdat_push_receive_functions(void)
- {
- /* push the current receive_* function on the "stack", and
- replace them by bdat_getc(), which in turn will use the lwr_receive_*
- functions to do the dirty work. */
--if (lwr_receive_getc == NULL)
-+if (!lwr_receive_getc)
-   {
-   lwr_receive_getc = receive_getc;
-   lwr_receive_getbuf = receive_getbuf;
-+  lwr_receive_hasc = receive_hasc;
-   lwr_receive_ungetc = receive_ungetc;
-   }
- else
-   {
-   DEBUG(D_receive) debug_printf("chunking double-push receive functions\n");
-   }
- 
- receive_getc = bdat_getc;
- receive_getbuf = bdat_getbuf;
-+receive_hasc = bdat_hasc;
- receive_ungetc = bdat_ungetc;
- }
- 
- static inline void
- bdat_pop_receive_functions(void)
- {
--if (lwr_receive_getc == NULL)
-+if (!lwr_receive_getc)
-   {
-   DEBUG(D_receive) debug_printf("chunking double-pop receive functions\n");
-   return;
-   }
- receive_getc = lwr_receive_getc;
- receive_getbuf = lwr_receive_getbuf;
-+receive_hasc = lwr_receive_hasc;
- receive_ungetc = lwr_receive_ungetc;
- 
- lwr_receive_getc = NULL;
- lwr_receive_getbuf = NULL;
-+lwr_receive_hasc = NULL;
- lwr_receive_ungetc = NULL;
- }
- 
- /*************************************************
- *          SMTP version of ungetc()              *
-@@ -2574,16 +2592,18 @@
- smtp_inbuffer[IN_BUFFER_SIZE-1] = '\0';
- 
- receive_getc = smtp_getc;
- receive_getbuf = smtp_getbuf;
- receive_get_cache = smtp_get_cache;
-+receive_hasc = smtp_hasc;
- receive_ungetc = smtp_ungetc;
- receive_feof = smtp_feof;
- receive_ferror = smtp_ferror;
- receive_smtp_buffered = smtp_buffered;
- lwr_receive_getc = NULL;
- lwr_receive_getbuf = NULL;
-+lwr_receive_hasc = NULL;
- lwr_receive_ungetc = NULL;
- smtp_inptr = smtp_inend = smtp_inbuffer;
- smtp_had_eof = smtp_had_error = 0;
- 
- /* Set up the message size limit; this may be host-specific */
---- a/src/tls-gnu.c
-+++ b/src/tls-gnu.c
-@@ -3136,10 +3136,11 @@
- state->xfer_buffer = store_malloc(ssl_xfer_buffer_size);
- 
- receive_getc = tls_getc;
- receive_getbuf = tls_getbuf;
- receive_get_cache = tls_get_cache;
-+receive_hasc = tls_hasc;
- receive_ungetc = tls_ungetc;
- receive_feof = tls_feof;
- receive_ferror = tls_ferror;
- receive_smtp_buffered = tls_smtp_buffered;
- 
-@@ -3738,10 +3739,11 @@
- if (!ct_ctx)	/* server */
-   {
-   receive_getc =	smtp_getc;
-   receive_getbuf =	smtp_getbuf;
-   receive_get_cache =	smtp_get_cache;
-+  receive_hasc =	smtp_hasc;
-   receive_ungetc =	smtp_ungetc;
-   receive_feof =	smtp_feof;
-   receive_ferror =	smtp_ferror;
-   receive_smtp_buffered = smtp_buffered;
-   }
-@@ -3852,10 +3854,17 @@
- /* Something in the buffer; return next uschar */
- 
- return state->xfer_buffer[state->xfer_buffer_lwm++];
- }
- 
-+BOOL
-+tls_hasc(void)
-+{
-+exim_gnutls_state_st * state = &state_server;
-+return state->xfer_buffer_lwm < state->xfer_buffer_hwm;
-+}
-+
- uschar *
- tls_getbuf(unsigned * len)
- {
- exim_gnutls_state_st * state = &state_server;
- unsigned size;
---- a/src/tls-openssl.c
-+++ b/src/tls-openssl.c
-@@ -3348,10 +3348,11 @@
- ssl_xfer_eof = ssl_xfer_error = FALSE;
- 
- receive_getc = tls_getc;
- receive_getbuf = tls_getbuf;
- receive_get_cache = tls_get_cache;
-+receive_hasc = tls_hasc;
- receive_ungetc = tls_ungetc;
- receive_feof = tls_feof;
- receive_ferror = tls_ferror;
- receive_smtp_buffered = tls_smtp_buffered;
- 
-@@ -4124,10 +4125,16 @@
- /* Something in the buffer; return next uschar */
- 
- return ssl_xfer_buffer[ssl_xfer_buffer_lwm++];
- }
- 
-+BOOL
-+tls_hasc(void)
-+{
-+return ssl_xfer_buffer_lwm < ssl_xfer_buffer_hwm;
-+}
-+
- uschar *
- tls_getbuf(unsigned * len)
- {
- unsigned size;
- uschar * buf;
-@@ -4413,10 +4420,11 @@
- #endif
- 
-   receive_getc =	smtp_getc;
-   receive_getbuf =	smtp_getbuf;
-   receive_get_cache =	smtp_get_cache;
-+  receive_hasc =	smtp_hasc;
-   receive_ungetc =	smtp_ungetc;
-   receive_feof =	smtp_feof;
-   receive_ferror =	smtp_ferror;
-   receive_smtp_buffered = smtp_buffered;
-   tls_in.active.tls_ctx = NULL;
---- a/src/transports/autoreply.c
-+++ b/src/transports/autoreply.c
-@@ -644,10 +644,11 @@
-   if (text[Ustrlen(text)-1] != '\n') fprintf(fp, "\n");
-   }
- 
- if (ff)
-   {
-+debug_printf("%s %d: ff\n", __FUNCTION__, __LINE__);
-   while (Ufgets(big_buffer, big_buffer_size, ff) != NULL)
-     {
-     if (file_expand)
-       {
-       uschar *s = expand_string(big_buffer);
-@@ -667,16 +668,16 @@
- /* Copy the original message if required, observing the return size
- limit if we are returning the body. */
- 
- if (return_message)
-   {
--  uschar *rubric = (tblock->headers_only)?
--    US"------ This is a copy of the message's header lines.\n"
--    : (tblock->body_only)?
--    US"------ This is a copy of the body of the message, without the headers.\n"
--    :
--    US"------ This is a copy of the message, including all the headers.\n";
-+debug_printf("%s %d: ret msg\n", __FUNCTION__, __LINE__);
-+  uschar *rubric = tblock->headers_only
-+    ? US"------ This is a copy of the message's header lines.\n"
-+    : tblock->body_only
-+    ? US"------ This is a copy of the body of the message, without the headers.\n"
-+    : US"------ This is a copy of the message, including all the headers.\n";
-   transport_ctx tctx = {
-     .u = {.fd = fileno(fp)},
-     .tblock = tblock,
-     .addr = addr,
-     .check_string = NULL,
diff --git a/mail/exim/files/debian/75_32-Fix-PAM-auth.-Bug-2813.patch b/mail/exim/files/debian/75_32-Fix-PAM-auth.-Bug-2813.patch
deleted file mode 100644
index 537bfed558d7..000000000000
--- a/mail/exim/files/debian/75_32-Fix-PAM-auth.-Bug-2813.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 51be321b27825c01829dffd90f11bfff256f7e42 Mon Sep 17 00:00:00 2001
-From: Adam Lackorzynski <adam@l4re.org>
-Date: Sat, 16 Oct 2021 16:30:07 +0100
-Subject: [PATCH] Fix PAM auth.  Bug 2813
-
----
- src/auths/call_pam.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/auths/call_pam.c b/src/auths/call_pam.c
-index 80bb23ec3..03b9be1a8 100644
---- a/src/auths/call_pam.c
-+++ b/src/auths/call_pam.c
-@@ -88,7 +88,7 @@ for (int i = 0; i < num_msg; i++)
- 	arg = US"";
- 	pam_arg_ended = TRUE;
- 	}
--      reply[i].resp = CS string_copy_malloc(arg); /* PAM frees resp */
-+      reply[i].resp = strdup(CCS arg); /* Use libc malloc, PAM frees resp directly*/
-       reply[i].resp_retcode = PAM_SUCCESS;
-       break;
- 
--- 
-2.34.1
-
diff --git a/mail/exim/files/debian/75_35-Exiqgrep-check-arg-parsing.-Bug-2821.patch b/mail/exim/files/debian/75_35-Exiqgrep-check-arg-parsing.-Bug-2821.patch
deleted file mode 100644
index c226354d5e8e..000000000000
--- a/mail/exim/files/debian/75_35-Exiqgrep-check-arg-parsing.-Bug-2821.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From df618101a5ea15dc90c4a2968798ef2be9dba16f Mon Sep 17 00:00:00 2001
-From: Jeremy Harris <jgh146exb@wizmail.org>
-Date: Mon, 18 Oct 2021 11:01:47 +0100
-Subject: [PATCH] Exiqgrep: check arg parsing.  Bug 2821
-
----
- src/exiqgrep.src | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/exiqgrep.src b/src/exiqgrep.src
-index c8762df47..04602da68 100644
---- a/src/exiqgrep.src
-+++ b/src/exiqgrep.src
-@@ -53,12 +53,14 @@ if ($ARGV[0] eq '--version') {
-         exit 0;
- }
- 
--getopts('hf:r:y:o:s:C:zxlibRcaG:',\%opt);
--if ($ARGV[0]) { &help; exit;}
--if ($opt{h}) { &help; exit;}
-+if (!getopts('hf:r:y:o:s:C:zxlibRcaG:E:',\%opt)) { &help; exit; }
-+if ($opt{h}) { &help; exit; }
-+if ($ARGV[0] || !($opt{f} || $opt{r} || $opt{s} || $opt{y} || $opt{o} || $opt{z} || $opt{x} || $opt{c}))
-+   { &help; exit(1); }
- if ($opt{a}) { $eargs = '-bp'; }
- if ($opt{C} && -e $opt{C} && -f $opt{C} && -R $opt{C}) { $eargs .= ' -C '.$opt{C}; }
- if ($opt{G}) { $eargs .= ' -qG'.$opt{G}; }
-+if ($opt{E}) { $exim = $opt{E}; }
- 
- # Read message queue output into hash
- &collect();
-@@ -75,6 +77,7 @@ Exim message queue display utility.
- 
- 	-h		This help message.
- 	-C		Specify which exim.conf to use.
-+	-E		Specify exim binary to use.
- 
- Selection criteria:
- 	-f <regexp>	Match sender address sender (field is "< >" wrapped)
--- 
-2.34.1
-
diff --git a/mail/exim/files/debian/75_38-Convert-all-uses-of-select-to-poll.-Bug-2831.patch b/mail/exim/files/debian/75_38-Convert-all-uses-of-select-to-poll.-Bug-2831.patch
deleted file mode 100644
index 93c99a4ef8f2..000000000000
--- a/mail/exim/files/debian/75_38-Convert-all-uses-of-select-to-poll.-Bug-2831.patch
+++ /dev/null
@@ -1,931 +0,0 @@
-From dd19ce4f24eec64177cdcfcf294b8efbb631a24b Mon Sep 17 00:00:00 2001
-From: Jeremy Harris <jgh146exb@wizmail.org>
-Date: Wed, 17 Nov 2021 17:19:54 +0000
-Subject: [PATCH] select() -> poll().  Bug 2831
-
----
- doc/ChangeLog     |   8 +++
- src/daemon.c          | 126 +++++++++++++++++++-------------------
- src/deliver.c         |  54 ++++++++--------
- src/exim.c            |   9 +--
- src/expand.c          |   6 +-
- src/functions.h       |   7 +++
- src/ip.c              |  12 +---
- src/malware.c         |   6 +-
- src/receive.c         |  15 +----
- src/smtp_in.c         |  18 +-----
- src/spam.c            |  42 ++++---------
- src/transport.c       |   4 +-
- src/transports/smtp.c |  37 ++++-------
- 13 files changed, 142 insertions(+), 202 deletions(-)
-
-diff --git a/doc/ChangeLog b/doc/ChangeLog
-index 7f6814d5e..58996c3f8 100644
---- a/doc/ChangeLog
-+++ b/doc/ChangeLog
-@@ -40,6 +40,14 @@ JH/09 Fix macro-definition during "-be" expansion testing.  The move to
-       write-protected store for macros had not accounted for these runtime
-       additions; fix by removing this protection for "-be" mode.
- 
-+JH/10 Convert all uses of select() to poll().  FreeBSD 12.2 was found to be
-+      handing out large-numbered file descriptors, violating the usual Unix
-+      assumption (and required by Posix) that the lowest possible number will be
-+      allocated by the kernel when a new one is needed.  In the daemon, and any
-+      child procesees, values higher than 1024 (being bigger than FD_SETSIZE)
-+      are not useable for FD_SET() [and hence select()] and overwrite the stack.
-+      Assorted crashes happen.
-+
- 
- Exim version 4.95
- -----------------
-diff --git a/src/daemon.c b/src/daemon.c
-index 0b8d5d595..a248a4f40 100644
---- a/src/daemon.c
-+++ b/src/daemon.c
-@@ -87,7 +87,7 @@ sigchld_seen = TRUE;
- }
- 
- 
--/* SIGTERM handler.  Try to get the damon pif file removed
-+/* SIGTERM handler.  Try to get the damon pid file removed
- before exiting. */
- 
- static void
-@@ -141,7 +141,7 @@ Uunlink(s);
- 
- static void
- close_daemon_sockets(int daemon_notifier_fd,
--  int * listen_sockets, int listen_socket_count)
-+  struct pollfd * fd_polls, int listen_socket_count)
- {
- if (daemon_notifier_fd >= 0)
-   {
-@@ -152,7 +152,7 @@ if (daemon_notifier_fd >= 0)
- #endif
-   }
- 
--for (int i = 0; i < listen_socket_count; i++) (void) close(listen_sockets[i]);
-+for (int i = 0; i < listen_socket_count; i++) (void) close(fd_polls[i].fd);
- }
- 
- 
-@@ -167,7 +167,7 @@ is required so that they can be closed in the sub-process. Take care not to
- leak store in this process - reset the stacking pool at the end.
- 
- Arguments:
--  listen_sockets        sockets which are listening for incoming calls
-+  fd_polls        sockets which are listening for incoming calls
-   listen_socket_count   count of listening sockets
-   accept_socket         socket of the current accepted call
-   accepted              socket information about the current call
-@@ -176,7 +176,7 @@ Returns:            nothing
- */
- 
- static void
--handle_smtp_call(int *listen_sockets, int listen_socket_count,
-+handle_smtp_call(struct pollfd *fd_polls, int listen_socket_count,
-   int accept_socket, struct sockaddr *accepted)
- {
- pid_t pid;
-@@ -459,7 +459,7 @@ if (pid == 0)
-   extensive comment before the reception loop in exim.c for a fuller
-   explanation of this logic. */
- 
--  close_daemon_sockets(daemon_notifier_fd, listen_sockets, listen_socket_count);
-+  close_daemon_sockets(daemon_notifier_fd, fd_polls, listen_socket_count);
- 
-   /* Set FD_CLOEXEC on the SMTP socket. We don't want any rogue child processes
-   to be able to communicate with them, under any circumstances. */
-@@ -1305,13 +1305,6 @@ return FALSE;
- 
- 
- 
--static void
--add_listener_socket(int fd, fd_set * fds, int * fd_max)
--{
--FD_SET(fd, fds);
--if (fd > *fd_max) *fd_max = fd;
--}
--
- /*************************************************
- *              Exim Daemon Mainline              *
- *************************************************/
-@@ -1339,9 +1332,8 @@ void
- daemon_go(void)
- {
- struct passwd * pw;
--int * listen_sockets = NULL;
--int listen_socket_count = 0, listen_fd_max = 0;
--fd_set select_listen;
-+struct pollfd * fd_polls, * tls_watch_poll = NULL, * dnotify_poll = NULL;
*** 1527 LINES SKIPPED ***



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