commit:     2988c7148a532f78524820d0e40d96738940ea02
Author:     Cristian Othón Martínez Vera <cfuga <AT> cfuga <DOT> mx>
AuthorDate: Thu Apr  3 16:07:35 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Thu Apr 10 09:32:54 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2988c714

mail-mta/sendmail: bump to version 8.18.1, add myself as maintainer

* Convert ```sys-libs/db``` to an optional dependency, controlled by the 
```berkdb``` USE flag.
* Add ```eai``` USE flag to support optional Email Address 
Internationalization, like ```mail-mta/postfix```.
* Add ```tinycdb``` USE flag to compile with ```dev-db/tinycdb``` and prevent 
automagic linking with ```dev-db/cdb```.
* Add ```_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE```, to fix STARTTLS chain 
validation when the server's certificate requires intermediate certs.
* Add ```mail-filter/maildrop``` as alternative to use maildir-style mailboxes.
* Keep ```sys-libs/db``` and ```mail-filter/procmail``` as default 
dependencies, to allow seamless upgrades from previous versions.
* Fix compilation with gcc-15/-std=c23
* Clean up blockers.
* Fix some ebuild typos.
* Fix building with musl, using patches borrowed from 
```mail-filter/libmilter```. It just compiles; needs more tweaking/debugging to 
make it work.

Closes: https://bugs.gentoo.org/830525
Closes: https://bugs.gentoo.org/831999
Closes: https://bugs.gentoo.org/914272
Closes: https://bugs.gentoo.org/921521
Closes: https://bugs.gentoo.org/944822
Closes: https://bugs.gentoo.org/945726
Signed-off-by: Cristian Othón Martínez Vera <cfuga <AT> cfuga.mx>
Signed-off-by: Sam James <sam <AT> gentoo.org>

 mail-mta/sendmail/Manifest                         |   1 +
 .../sendmail/files/sendmail-8.18.1-ctime.patch     |  13 +
 mail-mta/sendmail/files/sendmail-maildir.mc        |  13 +
 .../files/sendmail-musl-disable-cdefs.patch        |  11 +
 .../sendmail/files/sendmail-musl-stack-size.patch  |  42 ++++
 mail-mta/sendmail/metadata.xml                     |  14 +-
 mail-mta/sendmail/sendmail-8.18.1.ebuild           | 280 +++++++++++++++++++++
 7 files changed, 373 insertions(+), 1 deletion(-)

diff --git a/mail-mta/sendmail/Manifest b/mail-mta/sendmail/Manifest
index 06a2a87683b6..2f205cf5d9f5 100644
--- a/mail-mta/sendmail/Manifest
+++ b/mail-mta/sendmail/Manifest
@@ -1 +1,2 @@
 DIST sendmail.8.17.1.9.tar.gz 2345302 BLAKE2B 
378f2f98ffff6457c49f934228964e792acec6f33fbabd89a8712f09f1dc7afc951b7c984a397aa7dd3773d86bdf57a946ea9ac54ae426bc0b8ea4c040e2ad4a
 SHA512 
ad8198b12bdc0037de5b64b2504bd5e0a42bf054274a4834163a7c46953b9aec23d52d58063cc6b925d90199973608f35edeb40128671ae32889f4558e5c0d4b
+DIST sendmail.8.18.1.tar.gz 2401566 BLAKE2B 
3afa36073fd611c7fdb43ef0ab9f02d5fb8ae388e9471bdc7275c6c9dcee0a654f46ddef505b70e978cb1b818b0da375250678e501676d8bace534d59ee40d90
 SHA512 
9ce713b44439d4de6faa9e3cdfa2226b44b4fbeb352a5f81584c062570e9472da244158287e489aabe258d28fe54ca4964565c7b0adc7e1763d212be42f98061

diff --git a/mail-mta/sendmail/files/sendmail-8.18.1-ctime.patch 
b/mail-mta/sendmail/files/sendmail-8.18.1-ctime.patch
new file mode 100644
index 000000000000..2db37c424652
--- /dev/null
+++ b/mail-mta/sendmail/files/sendmail-8.18.1-ctime.patch
@@ -0,0 +1,13 @@
+Bug: https://bugs.gentoo.org/945726
+
+--- a/mailstats/mailstats.c
++++ b/mailstats/mailstats.c
+@@ -65,7 +65,7 @@
+       char sfilebuf[MAXPATHLEN];
+       char buf[MAXLINE];
+       struct statistics stats;
+-      extern char *ctime();
++      extern char *ctime(const time_t *);
+       extern char *optarg;
+       extern int optind;
+ # define MSOPTS "cC:f:opP"

diff --git a/mail-mta/sendmail/files/sendmail-maildir.mc 
b/mail-mta/sendmail/files/sendmail-maildir.mc
new file mode 100644
index 000000000000..eb8a3f06c48f
--- /dev/null
+++ b/mail-mta/sendmail/files/sendmail-maildir.mc
@@ -0,0 +1,13 @@
+divert(-1)
+divert(0)dnl
+include(`/usr/share/sendmail-cf/m4/cf.m4')dnl
+VERSIONID(`$Id$')dnl
+OSTYPE(linux)dnl
+DOMAIN(generic)dnl
+FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
+FEATURE(`local_lmtp',`/usr/sbin/mail.local')dnl
+FEATURE(`local_procmail')dnl
+dnl FEATURE(`local_procmail',`/usr/bin/maildrop',`maildrop -d $u')dnl
+MAILER(local)dnl
+MAILER(smtp)dnl
+MAILER(procmail)dnl

diff --git a/mail-mta/sendmail/files/sendmail-musl-disable-cdefs.patch 
b/mail-mta/sendmail/files/sendmail-musl-disable-cdefs.patch
new file mode 100644
index 000000000000..6dc4ac63105e
--- /dev/null
+++ b/mail-mta/sendmail/files/sendmail-musl-disable-cdefs.patch
@@ -0,0 +1,11 @@
+--- a/include/sm/os/sm_os_linux.h      2020-06-09 11:57:46.789786561 +0200
++++ b/include/sm/os/sm_os_linux.h      2020-06-09 11:57:49.174781812 +0200
+@@ -33,7 +33,7 @@
+ # endif /* LINUX_VERSION_CODE */
+ #endif /* SM_CONF_SHM */
+
+-#define SM_CONF_SYS_CDEFS_H   1
++#define SM_CONF_SYS_CDEFS_H   0
+ #ifndef SM_CONF_SEM
+ # define SM_CONF_SEM  2
+ #endif /* SM_CONF_SEM */

diff --git a/mail-mta/sendmail/files/sendmail-musl-stack-size.patch 
b/mail-mta/sendmail/files/sendmail-musl-stack-size.patch
new file mode 100644
index 000000000000..9993adfece34
--- /dev/null
+++ b/mail-mta/sendmail/files/sendmail-musl-stack-size.patch
@@ -0,0 +1,42 @@
+Set default pthread stack size to 256 KB
+
+This patch tries to fix various crashes for applications depending on libmilter
+by setting the stack size for pthreads to 256 KB. The default stack size for
+musl libc is set to 80 KB whereas glibc has it set to 8 MB. This causes 
problems
+when a large amount of memory is allocated on the stack.
+
+For example, opendkim allocates blocks of 64 KB multiple times, which causes
+libmilter (and therefore opendkim) to crash. For now, a stack size of 256 KB
+looks sufficient and makes opendkim stop crashing.
+
+Fixes https://bugs.alpinelinux.org/issues/6360
+
+--- a/libmilter/libmilter.h
++++ b/libmilter/libmilter.h
+@@ -127,10 +127,10 @@
+ # define MI_SOCK_READ(s, b, l)        read(s, b, l)
+ # define MI_SOCK_READ_FAIL(x) ((x) < 0)
+ # define MI_SOCK_WRITE(s, b, l)       write(s, b, l)
+-
+-# define thread_create(ptid,wr,arg) pthread_create(ptid, NULL, wr, arg)
+ # define sthread_get_id()     pthread_self()
+
++extern int thread_create(pthread_t *ptid, void *(*wr) (void *), void *arg);
++
+ typedef pthread_mutex_t smutex_t;
+ # define smutex_init(mp)      (pthread_mutex_init(mp, NULL) == 0)
+ # define smutex_destroy(mp)   (pthread_mutex_destroy(mp) == 0)
+--- a/libmilter/main.c
++++ b/libmilter/main.c
+@@ -16,6 +16,12 @@
+ #include <fcntl.h>
+ #include <sys/stat.h>
+
++int thread_create(pthread_t *ptid, void *(*wr) (void *), void *arg) {
++      pthread_attr_t attr;
++      pthread_attr_init(&attr);
++      pthread_attr_setstacksize(&attr,256*1024);
++      return pthread_create(ptid, &attr, wr, arg);
++}
+
+ static smfiDesc_ptr smfi = NULL;

diff --git a/mail-mta/sendmail/metadata.xml b/mail-mta/sendmail/metadata.xml
index 115e9d64a669..588af3680863 100644
--- a/mail-mta/sendmail/metadata.xml
+++ b/mail-mta/sendmail/metadata.xml
@@ -1,5 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd";>
 <pkgmetadata>
-       <!-- maintainer-needed -->
+       <maintainer type="person" proxied="yes">
+               <email>[email protected]</email>
+               <name>Cristian Othón Martínez Vera</name>
+       </maintainer>
+       <maintainer type="project" proxied="proxy">
+               <email>[email protected]</email>
+               <name>Proxy Maintainers</name>
+       </maintainer>
+       <use>
+               <flag name="eai">Add support for SMTPUTF8</flag>
+               <flag name="tinycdb">Add support for using 
<pkg>dev-db/tinycdb</pkg>
+                       for lookup tables</flag>
+       </use>
 </pkgmetadata>

diff --git a/mail-mta/sendmail/sendmail-8.18.1.ebuild 
b/mail-mta/sendmail/sendmail-8.18.1.ebuild
new file mode 100644
index 000000000000..95e367ed3452
--- /dev/null
+++ b/mail-mta/sendmail/sendmail-8.18.1.ebuild
@@ -0,0 +1,280 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Note: please bump this together with mail-filter/libmilter and 
app-shells/smrsh
+
+inherit systemd toolchain-funcs
+
+DESCRIPTION="Widely-used Mail Transport Agent (MTA)"
+HOMEPAGE="https://www.sendmail.org/";
+if [[ -n $(ver_cut 4) ]] ; then
+       # Snapshots have an extra version component (e.g. 8.17.1 vs 8.17.1.9)
+       SRC_URI="https://ftp.sendmail.org/snapshots/${PN}.${PV}.tar.gz";
+fi
+SRC_URI+=" https://ftp.sendmail.org/${PN}.${PV}.tar.gz";
+SRC_URI+=" https://ftp.sendmail.org/past-releases/${PN}.${PV}.tar.gz";
+
+LICENSE="Sendmail GPL-2" # GPL-2 is here for initscript
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~hppa ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="+berkdb eai ipv6 ldap mbox nis sasl selinux sockets ssl tinycdb tcpd"
+REQUIRED_USE="|| ( berkdb tinycdb )"
+
+DEPEND="
+       acct-group/smmsp
+       >=acct-user/smmsp-0-r2
+       net-mail/mailbase
+       berkdb? ( >=sys-libs/db-3.2:= )
+       eai? ( dev-libs/icu:= )
+       elibc_musl? ( virtual/libcrypt:= )
+       ldap? ( net-nds/openldap:= )
+       nis? ( net-libs/libnsl:= )
+       sasl? ( >=dev-libs/cyrus-sasl-2.1.10 )
+       ssl? ( dev-libs/openssl:= )
+       tcpd? ( sys-apps/tcp-wrappers )
+       tinycdb? ( dev-db/tinycdb )
+"
+RDEPEND="
+       ${DEPEND}
+       >=mail-filter/libmilter-1.0.2_p2
+       !mail-mta/courier
+       !mail-mta/esmtp
+       !mail-mta/exim
+       !mail-mta/msmtp[mta]
+       !mail-mta/netqmail
+       !mail-mta/notqmail
+       !mail-mta/nullmailer
+       !mail-mta/opensmtpd
+       !mail-mta/postfix
+       !>=mail-mta/ssmtp-2.64-r2[mta]
+       selinux? ( sec-policy/selinux-sendmail )
+"
+BDEPEND="
+       sys-devel/m4
+       virtual/pkgconfig
+"
+PDEPEND="
+       !mbox? (
+               || (
+                       mail-filter/procmail
+                       mail-filter/maildrop
+               )
+       )
+"
+
+src_prepare() {
+       eapply "${FILESDIR}"/${PN}-8.16.1-build-system.patch
+       eapply "${FILESDIR}"/${PN}-8.18.1-ctime.patch
+       eapply -p0 "${FILESDIR}"/${PN}-delivered_hdr.patch
+       eapply_user
+
+       local confCCOPTS="${CFLAGS}"
+       local confENVDEF="-DMAXDAEMONS=64 -DHAS_GETHOSTBYNAME2=1"
+       local confLDOPTS="${LDFLAGS}"
+       local confLIBS=
+       local confMAPDEF="-DMAP_REGEX"
+       local conf_sendmail_LIBS=
+
+       if use berkdb; then
+               # See bug #808954 for FLOCK
+               confENVDEF+=" -DHASFLOCK=1"
+               confMAPDEF+=" -DNEWDB"
+               confLIBS+=" -ldb"
+       else
+               confMAPDEF+=" -UNEWDB"
+       fi
+
+       if use eai; then
+               confCCOPTS+=" $($(tc-getPKG_CONFIG) --cflags icu-uc)"
+               confENVDEF+=" -DUSE_EAI"
+               confLIBS+=" $($(tc-getPKG_CONFIG) --libs icu-uc)"
+       fi
+
+       if use ldap; then
+               confMAPDEF+=" -DLDAPMAP"
+               confLIBS+=" -lldap -llber"
+       fi
+
+       if use sasl; then
+               confCCOPTS+=" $($(tc-getPKG_CONFIG) --cflags libsasl2)"
+               confENVDEF+=" -DSASL=2"
+               conf_sendmail_LIBS+=" $($(tc-getPKG_CONFIG) --libs libsasl2)"
+       fi
+
+       if use ssl; then
+               # Bug #542370 - lets add support for modern crypto (PFS)
+               confCCOPTS+=" $($(tc-getPKG_CONFIG) --cflags openssl)"
+               confENVDEF+=" -DSTARTTLS -D_FFR_DEAL_WITH_ERROR_SSL"
+               confENVDEF+=" -D_FFR_TLS_1 -D_FFR_TLS_EC"
+               # Bug #944822 - fix certification chain with intermediate cert 
file
+               confENVDEF+=" -D_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE"
+               conf_sendmail_LIBS+=" $($(tc-getPKG_CONFIG) --libs openssl)"
+       fi
+
+       if use tcpd; then
+               confENVDEF+=" -DTCPWRAPPERS"
+               confLIBS+=" -lwrap"
+       fi
+
+       if use tinycdb; then
+               confMAPDEF+=" -DCDB=2"
+               confLIBS+=" -lcdb"
+       else
+               confMAPDEF+=" -UCDB"
+       fi
+
+       use ipv6 && confENVDEF+=" -DNETINET6"
+       use nis && confENVDEF+=" -DNIS"
+       use sockets && confENVDEF+=" -DSOCKETMAP"
+
+       if use elibc_musl; then
+               confENVDEF+=" -DHASSTRERROR -DHASRRESVPORT=0"
+               use ipv6 && confENVDEF+=" -DNEEDSGETIPNODE"
+
+               eapply "${FILESDIR}"/${PN}-musl-stack-size.patch
+               eapply "${FILESDIR}"/${PN}-musl-disable-cdefs.patch
+       fi
+
+       sed -e "s|@@confCC@@|$(tc-getCC)|" \
+               -e "s|@@confCCOPTS@@|${confCCOPTS}|" \
+               -e "s|@@confENVDEF@@|${confENVDEF}|" \
+               -e "s|@@confLDOPTS@@|${confLDOPTS}|" \
+               -e "s|@@confLIBS@@|${confLIBS}|" \
+               -e "s|@@confMAPDEF@@|${confMAPDEF}|" \
+               -e "s|@@conf_sendmail_LIBS@@|${conf_sendmail_LIBS}|" \
+               "${FILESDIR}"/site.config.m4 > devtools/Site/site.config.m4 \
+               || die "failed to generate site.config.m4"
+
+       echo "APPENDDEF(\`confLIBDIRS', \`-L${EPREFIX}/usr/$(get_libdir)')" \
+               >> devtools/Site/site.config.m4 || die "failed adding to 
site.config.m4"
+}
+
+src_compile() {
+       sh Build AR="$(tc-getAR)" RANLIB="$(tc-getRANLIB)" || die "compilation 
failed in main build script"
+}
+
+src_install() {
+       dodir /usr/{bin,$(get_libdir)}
+       dodir /usr/share/man/man{1,5,8} /usr/sbin /usr/share/sendmail-cf
+       dodir /var/spool/{mqueue,clientmqueue} /etc/conf.d
+
+       keepdir /var/spool/{clientmqueue,mqueue}
+
+       local emakeargs=(
+               DESTDIR="${D}" LIBDIR="/usr/$(get_libdir)"
+               MANROOT=/usr/share/man/man
+               SBINOWN=root SBINGRP=root UBINOWN=root UBINGRP=root
+               MANOWN=root MANGRP=root INCOWN=root INCGRP=root
+               LIBOWN=root LIBGRP=root GBINOWN=root GBINGRP=root
+               MSPQOWN=root CFOWN=root CFGRP=root
+       )
+
+       local dir
+       for dir in libsmutil sendmail mailstats praliases smrsh makemap 
vacation editmap; do
+               emake -j1 -C obj.*/${dir} "${emakeargs[@]}" install
+       done
+       for dir in rmail mail.local; do
+               emake -j1 -C obj.*/${dir} "${emakeargs[@]}" force-install
+       done
+
+       fowners root:smmsp /usr/sbin/sendmail
+       fperms 2555 /usr/sbin/sendmail
+       fowners smmsp:smmsp /var/spool/clientmqueue
+       fperms 770 /var/spool/clientmqueue
+       fperms 700 /var/spool/mqueue
+       dodoc FAQ KNOWNBUGS README RELEASE_NOTES doc/op/op.ps
+
+       dodoc sendmail/{SECURITY,TUNING}
+       newdoc sendmail/README README.sendmail
+       newdoc smrsh/README README.smrsh
+
+       newdoc cf/README README.cf
+       newdoc cf/cf/README README.install-cf
+
+       dodoc -r contrib
+
+       cp -pPR cf/. "${ED}"/usr/share/sendmail-cf || die
+
+       insinto /etc/mail
+       if use mbox; then
+               newins "${FILESDIR}"/sendmail.mc-r1 sendmail.mc
+       else
+               newins "${FILESDIR}"/sendmail-maildir.mc sendmail.mc
+       fi
+
+       # See discussion on bug #730890
+       m4 "${ED}"/usr/share/sendmail-cf/m4/cf.m4 \
+               <(grep -v "${EPREFIX}"/usr/share/sendmail-cf/m4/cf.m4 
"${ED}"/etc/mail/sendmail.mc) \
+               > "${ED}"/etc/mail/sendmail.cf || die "cf.m4 failed"
+
+       echo "include(\`/usr/share/sendmail-cf/m4/cf.m4')dnl" \
+               > "${ED}"/etc/mail/submit.mc || die "submit.mc echo failed"
+
+       cat "${ED}"/usr/share/sendmail-cf/cf/submit.mc \
+               >> "${ED}"/etc/mail/submit.mc || die "submit.mc cat failed"
+
+       echo "# local-host-names - include all aliases for your machine here" \
+               > "${ED}"/etc/mail/local-host-names || die "local-host-names 
echo failed"
+
+       cat <<- EOF > "${ED}"/etc/mail/trusted-users || die "trusted-users cat 
failed"
+               # trusted-users - users that can send mail as others without a 
warning
+               # apache, mailman, majordomo, uucp are good candidates
+       EOF
+
+       cat <<- EOF > "${ED}"/etc/mail/access || die "access cat failed"
+               # Check the /usr/share/sendmail-cf/README file for a description
+               # of the format of this file. (search for access_db in that 
file)
+               #
+
+       EOF
+
+       cat <<- EOF > "${ED}"/etc/conf.d/sendmail || die "sendmail cat failed"
+               # Config file for /etc/init.d/sendmail
+               # add start-up options here
+               SENDMAIL_OPTS="-bd -q30m -L sm-mta" # default daemon mode
+               CLIENTMQUEUE_OPTS="-Ac -q30m -L sm-cm" # clientmqueue
+               KILL_OPTS="" # add -9/-15/your favorite evil SIG level here
+
+       EOF
+
+       if use sasl; then
+               dodir /etc/sasl2
+               cat <<- EOF > "${ED}"/etc/sasl2/Sendmail.conf || die 
"Sendmail.conf cat failed"
+                       pwcheck_method: saslauthd
+                       mech_list: PLAIN LOGIN
+
+               EOF
+       fi
+
+       doinitd "${FILESDIR}"/sendmail
+       systemd_dounit "${FILESDIR}"/sendmail.service
+       systemd_dounit "${FILESDIR}"/sm-client.service
+}
+
+pkg_postinst() {
+       if ! use berkdb; then
+               ewarn "If your configuration relies on userdb, you should 
install"
+               ewarn "this package with USE=berkdb."
+       fi
+
+       if ! use mbox; then
+               elog "Starting with mail-mta/sendmail-8.18.1 you could use 
either"
+               elog "procmail or maildrop to use maildir-style mailbox in 
user's home directory."
+               elog ""
+               elog "If you prefer procmail (default), emerge 
mail-filter/procmail with USE=-mbox"
+               elog "and include the following lines in sendmail.mc to create 
your sendmail.cf"
+               elog "configuration file:"
+               elog "\tFEATURE(\`local_procmail')dnl"
+               elog "\tMAILER(\`procmail')dnl"
+               elog ""
+               elog "If you prefer maildrop, you'll need to ensure that you 
configure a mail"
+               elog "storage location using DEFAULT in /etc/maildroprc, for 
example:"
+               elog "\tDEFAULT=\$HOME/.maildir"
+               elog ""
+               elog "and include the following line in sendmail.mc to create 
your sendmail.cf"
+               elog "configuration file:"
+               elog 
"\tFEATURE(\`local_procmail',\`/usr/bin/maildrop',\`maildrop -d $u')dnl"
+       fi
+}

Reply via email to