summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mail/Makefile1
-rw-r--r--mail/sendmail-devel/Makefile382
-rw-r--r--mail/sendmail-devel/distinfo3
-rw-r--r--mail/sendmail-devel/files/CYRUS_LOOKUP79
-rw-r--r--mail/sendmail-devel/files/cyruslookup.patch161
-rw-r--r--mail/sendmail-devel/files/mailer.conf10
-rw-r--r--mail/sendmail-devel/files/patch-FreeBSD11
-rw-r--r--mail/sendmail-devel/files/patch-Makefile.m410
-rw-r--r--mail/sendmail-devel/files/patch-blacklist.c60
-rw-r--r--mail/sendmail-devel/files/patch-blacklist_client.h60
-rw-r--r--mail/sendmail-devel/files/patch-bsd4.4.m48
-rw-r--r--mail/sendmail-devel/files/patch-cfhead.m412
-rw-r--r--mail/sendmail-devel/files/patch-daemon.c11
-rw-r--r--mail/sendmail-devel/files/patch-doc-op-Makefile11
-rw-r--r--mail/sendmail-devel/files/patch-mail.local.857
-rw-r--r--mail/sendmail-devel/files/patch-mail.local.c97
-rw-r--r--mail/sendmail-devel/files/patch-makeinfo.sh11
-rw-r--r--mail/sendmail-devel/files/patch-readcf.c26
-rw-r--r--mail/sendmail-devel/files/patch-rmail.c14
-rw-r--r--mail/sendmail-devel/files/patch-sendmail.814
-rw-r--r--mail/sendmail-devel/files/patch-sendmail.h24
-rw-r--r--mail/sendmail-devel/files/patch-smrsh.827
-rw-r--r--mail/sendmail-devel/files/patch-srvrsmtp.c92
-rw-r--r--mail/sendmail-devel/files/patch-usersmtp.c26
-rw-r--r--mail/sendmail-devel/files/site.config.m410
-rw-r--r--mail/sendmail-devel/files/site.config.m4.blacklistd2
-rw-r--r--mail/sendmail-devel/files/site.config.m4.gdbm4
-rw-r--r--mail/sendmail-devel/files/site.config.m4.ipv63
-rw-r--r--mail/sendmail-devel/files/site.config.m4.ldap25
-rw-r--r--mail/sendmail-devel/files/site.config.m4.milter2
-rw-r--r--mail/sendmail-devel/files/site.config.m4.pre42
-rw-r--r--mail/sendmail-devel/files/site.config.m4.sasl24
-rw-r--r--mail/sendmail-devel/files/site.config.m4.smtputf82
-rw-r--r--mail/sendmail-devel/files/site.config.m4.ssl4
-rw-r--r--mail/sendmail-devel/files/site.config.m4.tls2
-rw-r--r--mail/sendmail-devel/files/smtputf8.patch600
-rw-r--r--mail/sendmail-devel/files/tls-install.sh93
-rw-r--r--mail/sendmail-devel/pkg-descr11
-rw-r--r--mail/sendmail-devel/pkg-message33
-rw-r--r--mail/sendmail-devel/pkg-plist35
40 files changed, 2039 insertions, 0 deletions
diff --git a/mail/Makefile b/mail/Makefile
index 2fce0e0ed3b4..60dfe392c222 100644
--- a/mail/Makefile
+++ b/mail/Makefile
@@ -634,6 +634,7 @@
SUBDIR += sa-utils
SUBDIR += scam-backscatter
SUBDIR += sendmail
+ SUBDIR += sendmail-devel
SUBDIR += sendok
SUBDIR += sentinel
SUBDIR += serialmail
diff --git a/mail/sendmail-devel/Makefile b/mail/sendmail-devel/Makefile
new file mode 100644
index 000000000000..720880b01b9a
--- /dev/null
+++ b/mail/sendmail-devel/Makefile
@@ -0,0 +1,382 @@
+# $FreeBSD$
+
+PORTNAME= sendmail
+PORTVERSION= 8.16.0.41
+PORTREVISION= 0
+CATEGORIES= mail ipv6
+MASTER_SITES= ftp://ftp.sendmail.org/pub/sendmail/snapshots/
+PKGNAMESUFFIX?= -devel${PKGNAMESUFFIX2}
+DISTNAME= ${PORTNAME}.${PORTVERSION}
+
+MAINTAINER= dinoex@FreeBSD.org
+COMMENT= Reliable, highly configurable mail transfer agent with utilities
+
+LICENSE= Sendmail
+LICENSE_NAME= Sendmail License
+LICENSE_FILE= ${WRKSRC}/LICENSE
+LICENSE_PERMS= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
+
+CONFLICTS?= courier-0.* postfix-1.* postfix-2.* smail-3.* zmailer-2.* opensmtpd-*
+
+USERS= smmsp
+GROUPS= smmsp
+
+USES= cpe uidfix groff
+MAKE_ARGS= UBINOWN=${UID} UBINGRP=${GID} \
+ SBINOWN=${UID} SBINGRP=${GID} \
+ GBINOWN=${UID} GBINGRP=${GID} \
+ MANOWN=${UID} MANGRP=${GID} \
+ CFOWN=${UID} CFGRP=${GID} \
+ MSPQOWN=${UID} \
+ LIBMODE=0644 UBINMODE=0755 GBINMODE=2755
+WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION}
+DOCS= KNOWNBUGS LICENSE PGPKEYS README RELEASE_NOTES \
+ sendmail/TRACEFLAGS sendmail/SECURITY sendmail/TUNING
+PLIST_SUB+= PREFIX=${PREFIX:S=${PREFIX}/==} \
+ MANPREFIX=${MANPREFIX:S=$=/=:S=${PREFIX}==:S=^/==}
+PKGMESSAGE= ${WRKSRC}/pkg-message
+
+WCONF= ${WRKSRC}/devtools/Site
+SITE= ${FILESDIR}/site.config.m4.pre4
+PLIST= ${WRKDIR}/.PLIST.more
+LMAN1= mailq.1 newaliases.1 vacation.1
+LMAN5= aliases.5
+LMAN8= sendmail.8 mailstats.8 makemap.8 praliases.8 smrsh.8 \
+ mail.local.8 rmail.8 editmap.8
+SENDMAIL= ${PREFIX}/sbin/sendmail
+BASEMAIL= /usr/libexec/sendmail/sendmail
+MILTER_SOVER?= 6
+
+OPTIONS_DEFINE?= SHMEM SEM LA NIS IPV6 TLS SASL SASLAUTHD LDAP BDB \
+ GDBM SOCKETMAP CYRUSLOOKUP BLACKLISTD SMTPUTF8 \
+ PICKY_HELO_CHECK MILTER DOCS
+OPTIONS_DEFAULT?= SHMEM SEM LA NIS TLS SASL SASLAUTHD BDB1 \
+ BLACKLISTD PICKY_HELO_CHECK MILTER
+NO_OPTIONS_SORT=yes
+SHMEM_DESC= System V shared memory support
+LA_DESC= load averages support
+TLS_DESC= SMTP-TLS and SMTPS support
+SASLAUTHD_DESC= SASLAUTHD support
+BDB_DESC= Berkeley DB version 4+ support
+GDBM_DESC= GNU dbm library support (option COMPAT needed)
+SOCKETMAP_DESC= Enable socketmap feature
+BLACKLISTD_DESC= Enable blacklistd support
+CYRUSLOOKUP_DESC= Enable cyruslookup feature
+PICKY_HELO_CHECK_DESC= Enable picky HELO check
+MILTER_DESC= Enable milter support
+SMTPUTF8_DESC= Enable unicode address support
+
+TLS_USES= ssl
+SASL_LIB_DEPENDS= libsasl2.so:security/cyrus-sasl2
+SASLAUTHD_RUN_DEPENDS= ${LOCALBASE}/sbin/saslauthd:security/cyrus-sasl2-saslauthd
+LDAP_USE= OPENLDAP=yes
+BDB_USES= bdb
+GDBM_LIB_DEPENDS= libgdbm.so:databases/gdbm
+GDBM_CONFIGURE_WITH= compat
+SMTPUTF8_LIB_DEPENDS= libidn2.so:dns/libidn2 libicui18n.so:devel/icu
+
+.include <bsd.port.options.mk>
+.if ${PORT_OPTIONS:MSHMEM} && !defined(BUILDING_INDEX)
+IPCCHECK!= ipcrm -q 0 2>&1 || true
+.if ${IPCCHECK:Mimplemented}
+IGNORE= your system does not support sysvipc
+.endif
+.endif
+
+.if ${PORT_OPTIONS:MBDB}
+BDB_SUFFIX= +${BDB_INCLUDE_DIR:S,^${LOCALBASE}/include/,,}
+CONFLICTS+= sendmail-ldap-8.* sendmail-sasl2-8.* sendmail-tls-8.*
+.endif
+.if ${PORT_OPTIONS:MLDAP}
+LDAP_SUFFIX?= +ldap
+CONFLICTS+= sendmail-sasl2-8.* sendmail-tls-8.*
+.endif
+.if ${PORT_OPTIONS:MSASL}
+SASL_SUFFIX?= +sasl2
+CONFLICTS+= sendmail-ldap-8.* sendmail-tls-8.*
+.endif
+.if ${PORT_OPTIONS:MCYRUSLOOKUP}
+.if ! ${PORT_OPTIONS:MSOCKETMAP}
+IGNORE= option CYRUSLOOKUP requires option SOCKETMAP
+.else
+EXTRA_PATCHES+= ${FILESDIR}/cyruslookup.patch
+.endif
+.endif
+.if ${PORT_OPTIONS:MSMTPUTF8}
+EXTRA_PATCHES+= ${FILESDIR}/smtputf8.patch
+.endif
+.if ${PORT_OPTIONS:MTLS}
+TLS_SUFFIX?= +tls
+CONFLICTS+= sendmail-ldap-8.* sendmail-sasl2-8.*
+.endif
+
+MAKE_PKGNAMES= for i in "" +tls; do \
+ for j in "" +sasl2; do \
+ for k in "" +ldap; do \
+ for l in "" +db48 +db5 +db6; do \
+ echo "sendmail$${i}$${j}$${k}$${l}-8.*" ;\
+ done done done done
+
+ALL_PKGNAMES!= ${MAKE_PKGNAMES}
+CONFLICTS2!= ${MAKE_PKGNAMES} | ${GREP} -v "${PORTNAME}${PKGNAMESUFFIX:S|${PKGNAMESUFFIX2}||}-8."
+CONFLICTS+= ${CONFLICTS2}
+
+# Build site.config.m4
+SITE+= ${FILESDIR}/site.config.m4
+.if ${PORT_OPTIONS:MIPV6}
+SITE+= ${FILESDIR}/site.config.m4.ipv6
+.endif
+.if ${PORT_OPTIONS:MSASL}
+SITE+= ${FILESDIR}/site.config.m4.sasl2
+.endif
+.if ${PORT_OPTIONS:MLDAP}
+SITE+= ${FILESDIR}/site.config.m4.ldap
+.endif
+.if ${PORT_OPTIONS:MBLACKLISTD}
+SITE+= ${FILESDIR}/site.config.m4.blacklistd
+.endif
+.if ${PORT_OPTIONS:MSMTPUTF8}
+SITE+= ${FILESDIR}/site.config.m4.smtputf8
+.endif
+.if ${PORT_OPTIONS:MMILTER}
+SITE+= ${FILESDIR}/site.config.m4.milter
+.endif
+.if ${PORT_OPTIONS:MGDBM}
+NO_PACKAGE= GPLv3 license conflict
+SITE+= ${FILESDIR}/site.config.m4.gdbm
+.endif
+
+SED_SCRIPT= -e "s|\`-O'|\`${CFLAGS}'|" \
+ -e 's|%%CC%%|${CC}|' -e 's|%%LD%%|${LD}|'
+
+.if ! ${PORT_OPTIONS:MNIS}
+SED_SCRIPT+= -e "s;-DNIS ;;"
+.endif
+
+post-patch:
+ @${SED} -e "s=%%PREFIX%%=${PREFIX}=g" \
+ -e "s=%%LOCALBASE%%=${LOCALBASE}=g" \
+ -e "s=%%PORTSDIR%%=${PORTSDIR}=g" \
+ ${PKGDIR}/pkg-message > ${WRKSRC}/pkg-message
+
+do-configure:
+.if ${PORT_OPTIONS:MGDBM}
+ @(if [ ! -e "${LOCALBASE}/lib/libgdbm_compat.so" ] ; then \
+ ${ECHO_MSG} "===> option COMPAT is missing in databases/gdbm."; \
+ ${FALSE}; \
+ fi)
+.endif
+.if ${PORT_OPTIONS:MBLACKLISTD}
+ @(if [ ! -e "${DESTDIR}/usr/lib/libblacklist.so" ] ; then \
+ ${ECHO_MSG} "===> libblacklist.so not found. Please update to FreeBSD 11"; \
+ ${FALSE}; \
+ fi)
+.endif
+ ${REINPLACE_CMD} ${SED_SCRIPT} ${WRKSRC}/devtools/OS/FreeBSD
+ ${SED} -e "s=%%PREFIX%%=${PREFIX}=g" \
+ -e "s=%%LOCALBASE%%=${LOCALBASE}=g" \
+ ${SITE} > ${WCONF}/site.config.m4
+.if ${PORT_OPTIONS:MBDB}
+ ${ECHO_CMD} \
+ 'APPENDDEF(`confENVDEF'\'', `-I${BDB_INCLUDE_DIR}'\'')' \
+ >> ${WCONF}/site.config.m4
+ ${ECHO_CMD} \
+ 'APPENDDEF(`confLIBDIRS'\'', `-L${LOCALBASE}/lib'\'')' \
+ >> ${WCONF}/site.config.m4
+.for i in sendmail editmap makemap praliases vacation
+ ${ECHO_CMD} \
+ 'APPENDDEF(`conf_${i}_LIBS'\'', `-l${BDB_LIB_NAME}'\'')' \
+ >> ${WCONF}/site.config.m4
+.endfor
+.endif
+.if ${PORT_OPTIONS:MSOCKETMAP}
+ ${ECHO_CMD} \
+ 'APPENDDEF(`conf_sendmail_ENVDEF'\'', `-DSOCKETMAP'\'')' \
+ >> ${WCONF}/site.config.m4
+.endif
+.if ${PORT_OPTIONS:MPICKY_HELO_CHECK}
+ ${ECHO_CMD} \
+ 'APPENDDEF(`conf_sendmail_ENVDEF'\'', `-DPICKY_HELO_CHECK'\'')' \
+ >> ${WCONF}/site.config.m4
+.endif
+.if ! ${PORT_OPTIONS:MSHMEM}
+ ${ECHO_CMD} \
+ 'APPENDDEF(`confENVDEF'\'', `-DSM_CONF_SHM=0'\'')' \
+ >> ${WCONF}/site.config.m4
+.endif
+.if ! ${PORT_OPTIONS:MSEM}
+ ${ECHO_CMD} \
+ 'APPENDDEF(`confENVDEF'\'', `-DSM_CONF_SEM=0'\'')' \
+ >> ${WCONF}/site.config.m4
+.endif
+.if ! ${PORT_OPTIONS:MLA}
+ ${ECHO_CMD} \
+ 'APPENDDEF(`confENVDEF'\'', `-DLA_TYPE=LA_ZERO'\'')' \
+ >> ${WCONF}/site.config.m4
+.endif
+
+post-build:
+ (cd ${WRKSRC}/doc/op && \
+ ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} op.txt)
+
+pre-install:
+ ${MKDIR} ${STAGEDIR}/etc/mail
+ @${CAT} ${PKGDIR}/pkg-plist >${PLIST}
+ @cd ${WRKSRC} && ${FIND} cf -type f | \
+ ${AWK} '{print "share/sendmail/" $$1}' >>${PLIST}
+.if ${PORT_OPTIONS:MDOCS}
+.for i in ${DOCS}
+ @${ECHO_CMD} `${BASENAME} ${i}` | \
+ ${AWK} '{print "%%DOCSDIR%%/" $$1}' >>${PLIST}
+.endfor
+.if ${PORT_OPTIONS:MCYRUSLOOKUP}
+ @${ECHO_CMD} "share/doc/sendmail/CYRUS_LOOKUP" >>${PLIST}
+.endif
+.endif
+ ${MKDIR} ${STAGEDIR}${PREFIX}/etc/mail
+ @${SED} \
+ -e "s=\([ ]\)/.*$$=\\1${SENDMAIL}=" \
+ ${FILESDIR}/mailer.conf \
+ > ${STAGEDIR}${PREFIX}/etc/mail/mailer.conf.sendmail
+
+# We want mail.local and rmail for our system.
+# the build install catmans only, we have to fix this.
+post-install:
+ (cd ${WRKSRC}/mail.local && \
+ ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} force-install)
+ (cd ${WRKSRC}/rmail && \
+ ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} force-install)
+.for i in ${LMAN8}
+ ${INSTALL_MAN} ${WRKSRC}/*/${i} ${STAGEDIR}${MANPREFIX}/man/man8/
+.endfor
+.for i in ${LMAN5}
+ ${INSTALL_MAN} ${WRKSRC}/*/${i} ${STAGEDIR}${MANPREFIX}/man/man5/
+.endfor
+.for i in ${LMAN1}
+ ${INSTALL_MAN} ${WRKSRC}/*/${i} ${STAGEDIR}${MANPREFIX}/man/man1/
+.endfor
+ ${MKDIR} ${STAGEDIR}${PREFIX}/share/sendmail
+ ${TAR} -C ${WRKSRC} -cf - cf | \
+ ${TAR} -C ${STAGEDIR}${PREFIX}/share/sendmail -xf -
+ ${RM} ${STAGEDIR}${PREFIX}/man/cat*/*
+# final perm of sendmail is 2555 (see plist), needed for strip cmd
+ ${CHMOD} 755 ${STAGEDIR}${PREFIX}/sbin/sendmail
+ ${RM} ${STAGEDIR}/etc/mail/submit.cf
+ ${RMDIR} ${STAGEDIR}/var/spool/clientmqueue
+
+ ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/vacation
+ ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/rmail
+ ${STRIP_CMD} ${STAGEDIR}${PREFIX}/sbin/*
+ ${STRIP_CMD} ${STAGEDIR}${PREFIX}/libexec/*
+
+post-install-DOCS-on:
+ ${MKDIR} ${STAGEDIR}${DOCSDIR}
+ cd ${WRKSRC} && ${INSTALL_DATA} ${DOCS} ${STAGEDIR}${DOCSDIR}/
+ ${INSTALL_DATA} ${WRKSRC}/doc/op/op.ps ${STAGEDIR}${DOCSDIR}/op.ps
+ ${INSTALL_DATA} ${WRKSRC}/doc/op/op.txt ${STAGEDIR}${DOCSDIR}/op.txt
+ ${INSTALL_DATA} ${WRKSRC}/devtools/README ${STAGEDIR}${DOCSDIR}/DEVTOOLS
+ ${INSTALL_DATA} ${WRKSRC}/sendmail/README ${STAGEDIR}${DOCSDIR}/SENDMAIL
+ ${INSTALL_DATA} ${WRKSRC}/mail.local/README ${STAGEDIR}${DOCSDIR}/MAIL.LOCAL
+ ${INSTALL_DATA} ${WRKSRC}/smrsh/README ${STAGEDIR}${DOCSDIR}/SMRSH
+.if ${PORT_OPTIONS:MCYRUSLOOKUP}
+ ${INSTALL_DATA} ${FILESDIR}/CYRUS_LOOKUP ${STAGEDIR}${DOCSDIR}/CYRUS_LOOKUP
+.endif
+
+mailer.base:
+ @${SED} \
+ -e "s=^sendmail[ ]*/.*$$=sendmail ${BASEMAIL}=" \
+ -e "s=^send-mail[ ]*/.*$$=send-mail ${BASEMAIL}=" \
+ -e "s=^mailq[ ]*/.*$$=mailq ${BASEMAIL}=" \
+ -e "s=^newaliases[ ]*/.*$$=newaliases ${BASEMAIL}=" \
+ -e "s=^hoststat[ ]*/.*$$=hoststat ${BASEMAIL}=" \
+ -e "s=^purgestat[ ]*/.*$$=purgestat ${BASEMAIL}=" \
+ ${DESTDIR}/etc/mail/mailer.conf > ${DESTDIR}/etc/mail/mailer.conf.new
+ ${MV} ${DESTDIR}/etc/mail/mailer.conf.new \
+ ${DESTDIR}/etc/mail/mailer.conf
+
+mailer.conf:
+.if exists(${DESTDIR}${PREFIX}/etc/mail/mailer.conf.sendmail)
+ @${CP} -v ${DESTDIR}${PREFIX}/etc/mail/mailer.conf.sendmail \
+ ${DESTDIR}${PREFIX}/etc/mail/mailer.conf
+.else
+ @${MKDIR} ${DESTDIR}${PREFIX}/etc/mail
+ @${SED} \
+ -e "s=\([ ]\)/.*$$=\\1${SENDMAIL}=" \
+ ${FILESDIR}/mailer.conf \
+ > ${DESTDIR}${PREFIX}/etc/mail/mailer.conf
+.endif
+
+# create sumbit.cf on older systems
+#
+submit.cf: ${DESTDIR}/etc/mail/submit.cf
+
+${DESTDIR}/etc/mail/submit.mc:
+ ${INSTALL_DATA} ${PREFIX}/share/sendmail/cf/cf/submit.mc \
+ ${DESTDIR}/etc/mail/submit.mc
+
+${DESTDIR}/etc/mail/submit.cf: ${DESTDIR}/etc/mail/submit.mc
+ @( cd ${DESTDIR}/etc/mail && ${MAKE} \
+ SENDMAIL_CF_DIR=${PREFIX}/share/sendmail/cf \
+ SENDMAIL_MC=submit )
+
+# create basics for smtp-auth
+#
+howto-sasldb:
+ @${ECHO_CMD} "# Links:"
+ @${ECHO_CMD} "#"
+ @${ECHO_CMD} "# http://www.sendmail.org/~gshapiro/"
+ @${ECHO_CMD} "# http://www.sendmail.org/~ca/email/auth.html"
+ @${ECHO_CMD} "# http://www.bme.ogi.edu/~pchytil/linux/sendmail/"
+ @${ECHO_CMD} "# http://blue-labs.org/software/sm-pgsql/"
+ @${ECHO_CMD} "# http://www.falkotimme.com/howtos/sendmail_smtp_auth_tls/"
+ @${ECHO_CMD} "#"
+
+# create certificates for TLS/SSL
+#
+tls-install:
+ ${SETENV} DESTDIR=${DESTDIR} FILESDIR=${FILESDIR} \
+ ${SH} ${FILESDIR}/tls-install.sh
+
+help:
+ @${ECHO_CMD} "# additional targets:"
+ @${ECHO_CMD} "#"
+ @${ECHO_CMD} "# configure ${DESTDIR}/etc/mail/mailer.conf"
+ @${ECHO_CMD} "# for sendmail from ports"
+ @${ECHO_CMD} "make mailer.conf"
+ @${ECHO_CMD} "# for sendmail in the base"
+ @${ECHO_CMD} "make mailer.base"
+ @${ECHO_CMD} "#"
+ @${ECHO_CMD} "# show howto for configuring sasldb"
+ @${ECHO_CMD} "make howto-sasldb"
+ @${ECHO_CMD} "#"
+ @${ECHO_CMD} "# create a self-signed certificate"
+ @${ECHO_CMD} "make tls-install"
+ @${ECHO_CMD} "#"
+
+.include <bsd.port.pre.mk>
+
+.if ${PORT_OPTIONS:MTLS}
+.if ${SSL_DEFAULT} != base
+SITE+= ${FILESDIR}/site.config.m4.ssl
+.endif
+SITE+= ${FILESDIR}/site.config.m4.tls
+.endif
+
+.if exists(${FILESDIR}/site.config.m4.local)
+SITE+= ${FILESDIR}/site.config.m4.local
+.endif
+
+.if ${PREFIX} == "/usr"
+pre-everything::
+ @${ECHO_CMD} "#"
+ @${ECHO_CMD} "# You can't override the base sendmail this way."
+ @${ECHO_CMD} "# your version FreeBSD use mailwrapper."
+ @${ECHO_CMD} "#"
+ @${ECHO_CMD} "# Please install with normal PREFIX"
+ @${ECHO_CMD} "# and activate the port version with"
+ @${ECHO_CMD} "# cd ${PORTSDIR}/mail/sendmail && make mailer.conf"
+ @${ECHO_CMD} "#"
+ @${FALSE}
+.endif
+
+.include <bsd.port.post.mk>
diff --git a/mail/sendmail-devel/distinfo b/mail/sendmail-devel/distinfo
new file mode 100644
index 000000000000..aed42a7a1f0b
--- /dev/null
+++ b/mail/sendmail-devel/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1553765712
+SHA256 (sendmail.8.16.0.41.tar.gz) = e01b73de900e419248a5ff0ab38b9dc4873847fba70e98e4ce994452936ffdc2
+SIZE (sendmail.8.16.0.41.tar.gz) = 2262860
diff --git a/mail/sendmail-devel/files/CYRUS_LOOKUP b/mail/sendmail-devel/files/CYRUS_LOOKUP
new file mode 100644
index 000000000000..ff36ee7ee72c
--- /dev/null
+++ b/mail/sendmail-devel/files/CYRUS_LOOKUP
@@ -0,0 +1,79 @@
+
+ CYRUS MAILBOX LOOKUP FOR SENDMAIL
+ ---------------------------------
+
+You have enabled modifications for sendmail for looking up
+whether a cyrus (2.2.3+) mailbox exists and is under quota
+before accepting any mail to be relayed to cyrus.
+
+They are based on the idea and work by
+
+Andrzej Filip, http://anfi.homeunix.net/sendmail/rtcyrus2.html
+and
+Mike Boev, http://tric.ru/users/mike/ckuser_cyrus/
+
+Please, use these urls to learn all configuration details
+(although a quick recipe is provided below) and may be to give
+credits to the authors.
+******************************************************************
+IMPORTANT:
+Now that the mrs_cyrus.m4 has been updated, you may need to adjust
+the modifications you made to your .mc file if you used the old one!
+See http://anfi.homeunix.net/sendmail/rtcyrus2.html for current
+installation instructions.
+******************************************************************
+
+HOW TO :
+---------
+
+0. Build the `mail/sendmail' sendmail port with
+ SENDMAIL_WITH_SOCKETMAP=yes SENDMAIL_WITH_CYRUSLOOKUP=yes
+ This is what you've just obviously done, unless you are just browsing the
+ ports tree. To stick with these settings, you can place something like
+ the following in your `/etc/make.conf'.
+
+PORTSDIR?= /usr/ports
+.if ${.CURDIR} == ${PORTSDIR}/mail/sendmail
+SENDMAIL_WITH_CYRUSLOOKUP= yes
+SENDMAIL_WITH_SOCKETMAP= yes
+# possibly other sendmail knobs here too.
+.endif
+
+ You should have also installed and configured Cyrus IMAP server,
+ version 2.2.3 or higher. Not the worst idea is to utilize the
+ `mail/cyrus-imapd22' port.
+
+1. Insert the following lines to the SERVICES sections of `cyrus.conf'.
+ By default, the port installs it to `/usr/local/etc'.
+
+ # Sendmail socket map smmapd(8)
+ smmap cmd="smmapd" listen="/var/imap/socket/smmapd" prefork=0
+
+ A SIGHUP would make the Cyrus master(8) process catch this change
+ on-the-fly. Please, also note, that if sendmail and cyrus run on
+ separate machines, you will obviously need to modify this line
+ and a couple of others.
+
+2. As per the `install-configure' from Cyrus IMAP server's documentation,
+ in the simplest case, you added:
+
+ define(`confLOCAL_MAILER', `cyrusv2')dnl
+ MAILER(`cyrusv2')dnl
+
+ to your sendmail's .mc file to make local delivery to Cyrus mailboxes.
+ Now, simply add (somewhere near other FEATURES, before MAILER lines):
+
+ FEATURE(`ckuser_cyrus')dnl
+
+ for sendmail to start rejecting local addresses for nonexisting and
+ full mailboxes. Rebuild your sendmail.cf, restart sendmail, and enjoy!
+
+ If your configuration is more complicated than just defining Cyrus
+ as your local mailer, read Andrzej's article. It covers more of the
+ other cases.
+
+******************************************************************
+
+2004, September 16th
+Michael O. Boev,
+mike@tric.ru.
diff --git a/mail/sendmail-devel/files/cyruslookup.patch b/mail/sendmail-devel/files/cyruslookup.patch
new file mode 100644
index 000000000000..a321b6a4a70e
--- /dev/null
+++ b/mail/sendmail-devel/files/cyruslookup.patch
@@ -0,0 +1,161 @@
+diff -ruN cf.orig/feature/ckuser_cyrus.m4 cf/feature/ckuser_cyrus.m4
+--- cf.orig/feature/ckuser_cyrus.m4 Thu Jan 1 07:00:00 1970
++++ cf/feature/ckuser_cyrus.m4 Wed Sep 22 19:53:53 2004
+@@ -0,0 +1,34 @@
++divert(-1)
++# Written by Mike Boev <mike@tric.ru>, 2004.
++# Homepage: http://tric.ru/users/mike/ckuser_cyrus/
++# Inspired by: mrs_cyrus.m4 by Andrzej Adam Filip
++#
++# By using this file, you agree to the terms and conditions set
++# forth in the LICENSE file which can be found at the top level of
++# the sendmail distribution.
++#
++divert(0)
++VERSIONID(`Id: ckuser_cyrus.m4,v 1.4 2004/09/21 19:02:17 m Exp ')
++divert(-1)
++define(`CYRUS_SMMAPD_SOCKET',
++ ifelse(len(X`'_ARG_), `1', `local:/var/imap/socket/smmapd', _ARG_))
++
++MODIFY_MAILER_FLAGS(`CYRUSV2',`+5')
++
++LOCAL_CONFIG
++# Cyrus smmapd(8)'s map for verifying mailboxes of local recipients
++Kcyrus socket -a<OK> -T<TMPF> CYRUS_SMMAPD_SOCKET
++
++LOCAL_RULESETS
++SLocal_localaddr
++R$+ $: $> "ckuser_cyrus" $1
++
++Sckuser_cyrus
++#Query smmapd(8)
++R$+ $: <!> $1 $| $(cyrus $1 $: $)
++#Cyrus OK, skip
++R<!> $* $| $* <OK> $@ $1
++#Over quota or lookup failure
++R<!> $* $| $* <TMPF> $# error $@ 4.3.0 $: "451 TEMPFAIL."
++#Mailbox doesn't exist or its ACL forbids posting
++R<!> $* $| $* $# error $@ 5.1.1 $: "550 Mailbox is not available."
+diff -ruN cf.orig/feature/mrs.m4 cf/feature/mrs.m4
+--- cf.orig/feature/mrs.m4 Thu Jan 1 07:00:00 1970
++++ cf/feature/mrs.m4 Wed Sep 22 19:54:56 2004
+@@ -0,0 +1,25 @@
++divert(-1)
++dnl
++dnl Updates: http://anfi.webhop.net/sendmail/mrs.html
++dnl
++dnl By using this file, you agree to the terms and conditions set
++dnl forth in the LICENSE file which can be found at the top level of
++dnl the sendmail distribution (sendmail-8.12).
++dnl
++dnl Contributed by Andrzej Filip
++dnl
++dnl THE FEATURE REQUIRES PATCHING cf/m4/proto.m4
++dnl SEE THE LINK AFTER "Updates:"
++dnl
++dnl Log: mrs.m4,v
++dnl Revision 8.3 2004/03/18 21:39:22 anfi
++dnl Changed comments prefixes to dnl to avoid m4 expansions
++dnl
++dnl Revision 8.2 2004/03/15 09:14:28 anfi
++dnl Added "Updates:" web link.
++dnl
++divert(0)
++VERSIONID(`Id: mrs.m4,v 8.3 2004/03/18 21:39:22 anfi Exp ')
++divert(-1)
++
++define(`_MRS_RELAY_', `')
+diff -ruN cf.orig/feature/mrs_cyrus.m4 cf/feature/mrs_cyrus.m4
+--- cf.orig/feature/mrs_cyrus.m4 Thu Jan 1 07:00:00 1970
++++ cf/feature/mrs_cyrus.m4 Wed Sep 22 19:55:05 2004
+@@ -0,0 +1,77 @@
++divert(-1)
++dnl
++dnl Updates: http://anfi.homeunix.net/sendmail/rtcyrus2.html
++dnl
++dnl By using this file, you agree to the terms and conditions set
++dnl forth in the LICENSE file which can be found at the top level of
++dnl the sendmail distribution (sendmail-8.12).
++dnl
++dnl Contributed by Andrzej Filip
++dnl
++dnl Log: mrs_cyrus.m4,v
++dnl Revision 8.8 2004/08/11 18:20:05 anfi
++dnl "stipdom" replaced by "dummy"
++dnl
++dnl Revision 8.7 2004/04/01 14:29:50 anfi
++dnl Added "stripdom" handling in mrs_cyrus_user.
++dnl Fully defined error mailer details.
++dnl
++dnl Revision 8.6 2004/03/18 23:17:57 anfi
++dnl Fundamental rewrite.
++dnl
++ifdef(`_MRS_RELAY_',`',
++ `errprint(`*** ERROR: FEATURE(mrs_cyrus) requires FEATURE(mrs)
++')')
++ifdef(`_MRS_CYRUS_',
++ `errprint(`*** ERROR: There can be only one FEATURE(mrs_cyrus*)
++')')
++define(`_MRS_CYRUS_',`')
++
++divert(0)
++VERSIONID(`Id: mrs_cyrus.m4,v 8.8 2004/08/11 18:20:05 anfi Exp ')
++divert(-1)
++define(`CYRUS_SMMAPD_SOCKET',
++ ifelse(len(X`'_ARG_), `1', `/var/imap/socket/smmapd', _ARG_))
++define(`CYRUS_SMMAPD_SOCKET_TYPE',
++ ifelse(len(X`'_ARG2_), `1', `local', _ARG2_))
++LOCAL_CONFIG
++# Add 3 mrs_cyrus rule sets to list of valid mrs rule sets
++C{MRS}mrs_cyrus_user mrs_cyrus_mailertable mrs_cyrus_stickyhub
++# map for checking cyrus imap mailbox existence
++Kcyrus socket -a<OK> -T<TMPF> CYRUS_SMMAPD_SOCKET_TYPE:CYRUS_SMMAPD_SOCKET
++
++LOCAL_RULESETS
++######################################################################
++### feature mrs_cyrus rulesets to be used by feature mrs
++######################################################################
++
++Smrs_cyrus_user
++R<$*> $+ <@$+.> $: <$1> $2 <@ $3 >
++R<$*> $+ <@$*> $: <$1> $2 <@$3> $| $(cyrus $2 $: $)
++R<$*> $+ <@$*> $| $* <TMPF> $# error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."
++R<$*> $+ <@$*> $| $* <OK> $# cyrusv2 $@ dummy $: $4
++R<$*> $+ <@$*> $| $* $: <$1> $2 <@$3>
++R<dummy> $+ <@dummy> $@ $1
++R< $~[ : $* > $* $>MailerToTriple < $1 : $2 > $3
++R< $+ > $* $>MailerToTriple < $1 > $2
++R< > $* $# error $@ 5.1.1 $: "550 User unknown"
++
++Smrs_cyrus_mailertable
++R<$*> $+ <@$+.> $: <$1> $2 <@ $3 >
++R<$*> $+ <@$+> $: <$1> $2 <@$3> $| $(cyrus $2@$3 $: $)
++R<$*> $+ <@$+> $| $* <TMPF> $# error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."
++R<$*> $+ <@$+> $| $* <OK> $# cyrusv2d $@ dummy $: $2 <@$3>
++R<$*> $+ <@$*> $| $* $: <$1> $2 <@$3>
++R< $~[ : $* > $* $>MailerToTriple < $1 : $2 > $3
++R< $+ > $* $>MailerToTriple < $1 > $2
++R< > $* $# error $@ 5.1.1 $: "550 User unknown"
++
++Smrs_cyrus_stickyhub
++R<dummy> $+ <@$+.> $: <dummy> $1 <@ $2 >
++R<dummy> $* <@dummy> $@ $1
++R<dummy> $+ <@$={VirtCyrus}> $: <dummy> $1 <@$2> $| $(cyrus $1@$2 $: $)
++R<dummy> $+ <@$={VirtCyrus}> $| $* <TMPF> $# error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."
++R<dummy> $+ <@$={VirtCyrus}> $| $* <OK> $# cyrusv2d $@ dummy $: $1 <@$2>
++R<dummy> $+ <@$={VirtCyrus}> $| $* $# error $@ 5.1.1 $: "550 User unknown"
++R<dummy> $=L <@$*> $# ifdef(`confLOCAL_MAILER',confLOCAL_MAILER,`local') $: @$1
++R<dummy> $* <@$*> $# ifdef(`confLOCAL_MAILER',confLOCAL_MAILER,`local') $: $1
+diff -ruN cf.orig/m4/proto.m4 cf/m4/proto.m4
+--- cf.orig/m4/proto.m4 Wed Sep 22 20:15:04 2004
++++ cf/m4/proto.m4 Wed Sep 22 19:52:41 2004
+@@ -1315,6 +1315,9 @@
+ R< error : $- : $+ > $* $#error $@ $(dequote $1 $) $: $2
+ R< error : $+ > $* $#error $: $1
+ R< local : $* > $* $>CanonLocal < $1 > $2
++ifdef(`_MRS_RELAY_',`dnl
++R< $={MRS} : $* > $* $@ $> $1 < $2 > $3
++dnl')
+ dnl it is $~[ instead of $- to avoid matches on IPv6 addresses
+ R< $~[ : $+ @ $+ > $*<$*>$* $# $1 $@ $3 $: $2<@$3> use literal user
+ R< $~[ : $+ > $* $# $1 $@ $2 $: $3 try qualified mailer
diff --git a/mail/sendmail-devel/files/mailer.conf b/mail/sendmail-devel/files/mailer.conf
new file mode 100644
index 000000000000..e95ad3d5039c
--- /dev/null
+++ b/mail/sendmail-devel/files/mailer.conf
@@ -0,0 +1,10 @@
+# $FreeBSD$
+#
+# Execute the "real" sendmail program, named /usr/local/sbin/sendmail
+#
+sendmail /usr/local/sbin/sendmail
+send-mail /usr/local/sbin/sendmail
+mailq /usr/local/sbin/sendmail
+newaliases /usr/local/sbin/sendmail
+hoststat /usr/local/sbin/sendmail
+purgestat /usr/local/sbin/sendmail
diff --git a/mail/sendmail-devel/files/patch-FreeBSD b/mail/sendmail-devel/files/patch-FreeBSD
new file mode 100644
index 000000000000..774593e6bc7a
--- /dev/null
+++ b/mail/sendmail-devel/files/patch-FreeBSD
@@ -0,0 +1,11 @@
+--- devtools/OS/FreeBSD.orig 2014-03-05 00:59:45 UTC
++++ devtools/OS/FreeBSD
+@@ -6,7 +6,7 @@ dnl Place personal settings in devtools/
+ define(`confMAPDEF', `-DNEWDB -DNIS -DMAP_REGEX')
+ define(`confLIBS', `-lutil')
+
+-define(`confLD', `cc')
++define(`confCC', `%%CC%%')
+ define(`confMTLDOPTS', `-pthread')
+ define(`confMTCCOPTS', `-D_THREAD_SAFE')
+ define(`confLDOPTS_SO', `-shared')
diff --git a/mail/sendmail-devel/files/patch-Makefile.m4 b/mail/sendmail-devel/files/patch-Makefile.m4
new file mode 100644
index 000000000000..efdea226d13f
--- /dev/null
+++ b/mail/sendmail-devel/files/patch-Makefile.m4
@@ -0,0 +1,10 @@
+--- sendmail/Makefile.m4.orig 2019-02-15 10:30:19 UTC
++++ sendmail/Makefile.m4
+@@ -7,6 +7,7 @@ bldPRODUCT_START(`executable', `sendmail
+ define(`bldBIN_TYPE', `G')
+ define(`bldINSTALL_DIR', `')
+ define(`bldSOURCES', `main.c alias.c arpadate.c bf.c collect.c conf.c control.c convtime.c daemon.c deliver.c domain.c envelope.c err.c headers.c macro.c map.c mci.c milter.c mime.c parseaddr.c queue.c ratectrl.c readcf.c recipient.c sasl.c savemail.c sfsasl.c shmticklib.c sm_resolve.c srvrsmtp.c stab.c stats.c sysexits.c timers.c tlsh.c tls.c trace.c udb.c usersmtp.c util.c version.c ')
++APPENDDEF(`bldSOURCES',`blacklist.c ')
+ PREPENDDEF(`confENVDEF', `confMAPDEF')
+ bldPUSH_SMLIB(`sm')
+ bldPUSH_SMLIB(`smutil')
diff --git a/mail/sendmail-devel/files/patch-blacklist.c b/mail/sendmail-devel/files/patch-blacklist.c
new file mode 100644
index 000000000000..59782a08473e
--- /dev/null
+++ b/mail/sendmail-devel/files/patch-blacklist.c
@@ -0,0 +1,60 @@
+--- sendmail/blacklist.c.orig 2018-01-02 20:16:44 UTC
++++ sendmail/blacklist.c
+@@ -0,0 +1,57 @@
++/*-
++ * Copyright (c) 2016 The FreeBSD Foundation
++ * All rights reserved.
++ *
++ * This software was developed by Kurt Lidl under sponsorship from the
++ * FreeBSD Foundation.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
++ * SUCH DAMAGE. */
++
++/* $FreeBSD$ */
++
++#ifdef USE_BLACKLIST
++#include <sm/gen.h>
++#include <sendmail.h> /* for EXTERN UseBlacklist */
++
++#include <blacklist.h>
++#include "blacklist_client.h"
++
++static struct blacklist *blstate;
++
++void
++blacklist_init(void)
++{
++
++ if (UseBlacklist)
++ blstate = blacklist_open();
++}
++
++void
++blacklist_notify(int action, int fd, const char *msg)
++{
++
++ if (blstate == NULL)
++ return;
++ (void)blacklist_r(blstate, action, fd, msg);
++}
++
++#endif /* USE_BLACKLIST */
diff --git a/mail/sendmail-devel/files/patch-blacklist_client.h b/mail/sendmail-devel/files/patch-blacklist_client.h
new file mode 100644
index 000000000000..6f8c130045c3
--- /dev/null
+++ b/mail/sendmail-devel/files/patch-blacklist_client.h
@@ -0,0 +1,60 @@
+--- sendmail/blacklist_client.h.orig 2018-01-02 20:16:44 UTC
++++ sendmail/blacklist_client.h
+@@ -0,0 +1,57 @@
++/*-
++ * Copyright (c) 2016 The FreeBSD Foundation
++ * All rights reserved.
++ *
++ * This software was developed by Kurt Lidl under sponsorship from the
++ * FreeBSD Foundation.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
++ * SUCH DAMAGE. */
++
++/* $FreeBSD$ */
++
++#ifndef BLACKLIST_CLIENT_H
++#define BLACKLIST_CLIENT_H
++
++#ifndef BLACKLIST_API_ENUM
++enum {
++ BLACKLIST_AUTH_OK = 0,
++ BLACKLIST_AUTH_FAIL,
++ BLACKLIST_ABUSIVE_BEHAVIOR,
++ BLACKLIST_BAD_USER
++};
++#endif
++
++#ifdef USE_BLACKLIST
++void blacklist_init(void);
++void blacklist_notify(int, int, const char *);
++
++#define BLACKLIST_INIT() blacklist_init()
++#define BLACKLIST_NOTIFY(x, y, msg) blacklist_notify(x, y, msg)
++
++#else
++
++#define BLACKLIST_INIT()
++#define BLACKLIST_NOTIFY(x, y, msg)
++
++#endif
++
++#endif /* BLACKLIST_CLIENT_H */
diff --git a/mail/sendmail-devel/files/patch-bsd4.4.m4 b/mail/sendmail-devel/files/patch-bsd4.4.m4
new file mode 100644
index 000000000000..135523583a20
--- /dev/null
+++ b/mail/sendmail-devel/files/patch-bsd4.4.m4
@@ -0,0 +1,8 @@
+--- cf/ostype/bsd4.4.m4.orig 2014-03-05 00:59:45 UTC
++++ cf/ostype/bsd4.4.m4
+@@ -17,4 +17,5 @@ divert(0)
+ VERSIONID(`$Id: bsd4.4.m4,v 8.15 2013-11-22 20:51:15 ca Exp $')
+ ifdef(`STATUS_FILE',, `define(`STATUS_FILE', `/var/log/sendmail.st')')dnl
+ ifdef(`LOCAL_MAILER_PATH',, `define(`LOCAL_MAILER_PATH', /usr/libexec/mail.local)')dnl
++ifdef(`LOCAL_MAILER_ARGS',, `define(`LOCAL_MAILER_ARGS', `mail $u')')dnl
+ ifdef(`UUCP_MAILER_ARGS',, `define(`UUCP_MAILER_ARGS', `uux - -r -z -a$g $h!rmail ($u)')')dnl
diff --git a/mail/sendmail-devel/files/patch-cfhead.m4 b/mail/sendmail-devel/files/patch-cfhead.m4
new file mode 100644
index 000000000000..8eacc7528521
--- /dev/null
+++ b/mail/sendmail-devel/files/patch-cfhead.m4
@@ -0,0 +1,12 @@
+--- cf/m4/cfhead.m4.orig 2019-02-15 10:30:19 UTC
++++ cf/m4/cfhead.m4
+@@ -278,7 +278,8 @@ define(`_REC_AUTH_', `$.$?{auth_type}(au
+ define(`_REC_FULL_AUTH_', `$.$?{auth_type}(user=${auth_authen} $?{auth_author}author=${auth_author} $.mech=${auth_type}')
+ define(`_REC_HDR_', `$?sfrom $s $.$?_($?s$|from $.$_)')
+ define(`_REC_END_', `for $u; $|;
+- $.$b')
++ $.$b$?g
++ (envelope-from $g)$.')
+ define(`_REC_TLS_', `(version=${tls_version} cipher=${cipher} bits=${cipher_bits} verify=${verify})$.$?u')
+ define(`_REC_BY_', `$.by $j ($v/$Z)$?r with $r$. id $i$?{tls_version}')
+ define(`confRECEIVED_HEADER', `_REC_HDR_
diff --git a/mail/sendmail-devel/files/patch-daemon.c b/mail/sendmail-devel/files/patch-daemon.c
new file mode 100644
index 000000000000..a0a223365692
--- /dev/null
+++ b/mail/sendmail-devel/files/patch-daemon.c
@@ -0,0 +1,11 @@
+--- sendmail/daemon.c.orig 2015-02-28 00:50:03 UTC
++++ sendmail/daemon.c
+@@ -754,6 +754,8 @@ getrequests(e)
+ anynet_ntoa(&RealHostAddr));
+ }
+
++ BLACKLIST_INIT();
++
+ if (pipefd[0] != -1)
+ {
+ auto char c;
diff --git a/mail/sendmail-devel/files/patch-doc-op-Makefile b/mail/sendmail-devel/files/patch-doc-op-Makefile
new file mode 100644
index 000000000000..1e75f91c0c09
--- /dev/null
+++ b/mail/sendmail-devel/files/patch-doc-op-Makefile
@@ -0,0 +1,11 @@
+--- doc/op/Makefile.orig 2014-03-05 00:59:45 UTC
++++ doc/op/Makefile
+@@ -12,7 +12,7 @@ PS2PDF_CMD= ps2pdf
+ PIC= ${PIC_CMD} -C
+ EQNASCII= ${EQN_CMD} -C -Tascii
+ EQNPS= ${EQN_CMD} -C -Tps
+-ROFFASCII= ${ROFF_CMD} -Tascii ${MACROS}
++ROFFASCII= ${ROFF_CMD} -P-c -Tascii ${MACROS}
+ ROFFPS= ${ROFF_CMD} -Tps -mps ${MACROS}
+ ULASCII= ${UL_CMD} -t dumb
+ PS2PDF= ${PS2PDF_CMD}
diff --git a/mail/sendmail-devel/files/patch-mail.local.8 b/mail/sendmail-devel/files/patch-mail.local.8
new file mode 100644
index 000000000000..f8cbe1618c06
--- /dev/null
+++ b/mail/sendmail-devel/files/patch-mail.local.8
@@ -0,0 +1,57 @@
+--- mail.local/mail.local.8.orig 2014-03-05 00:59:45 UTC
++++ mail.local/mail.local.8
+@@ -16,9 +16,9 @@ mail.local
+ \- store mail in a mailbox
+ .SH SYNOPSIS
+ .B mail.local
+-.RB [ \-7 "] [" \-b "] [" \-d "] [" \-D
++.RB [ \-7 "] [" \-b "] [" \-B "] [" \-d "] [" \-D
+ .IR mbdb ]
+-.RB [ \-l "] [" \-f
++.RB [ \-l "] [" \-s "] [" \-f
+ \fIfrom\fR|\fB\-r\fR
+ .IR from ]
+ .RB [ \-h
+@@ -38,6 +38,11 @@ The options are as follows:
+ .B \-7
+ Do not advertise 8BITMIME support in LMTP mode.
+ .TP
++.B \-B
++Turn off the attempts to notify the
++.Dq biff
++service.
++.TP
+ .B \-b
+ Return a permanent error instead of a temporary error
+ if a mailbox exceeds quota.
+@@ -56,6 +61,13 @@ Specify the sender's name.
+ .TP
+ .B \-l
+ Turn on LMTP mode.
++.TP
++.B \-s
++Turn off the
++.Xr fsync 2
++call that forces the mailbox to be committed to disk before returning a
++.Dq success
++status.
+ .TP
+ .BI \-r " from"
+ Specify the sender's name (for backward compatibility).
+@@ -120,7 +132,7 @@ Used to set the appropriate time zone on
+ .SH FILES
+ .PD 0.2v
+ .TP 2.2i
+-/tmp/local.XXXXXX
++/var/tmp/local.XXXXXX
+ temporary files
+ .TP
+ /var/mail/user
+@@ -131,7 +143,6 @@ lock file for a user's default mailbox
+ .PD
+ .SH SEE ALSO
+ mail(1),
+-xsend(1),
+ flock(2),
+ getservbyname(3),
+ comsat(8),
diff --git a/mail/sendmail-devel/files/patch-mail.local.c b/mail/sendmail-devel/files/patch-mail.local.c
new file mode 100644
index 000000000000..5e7b7daaa652
--- /dev/null
+++ b/mail/sendmail-devel/files/patch-mail.local.c
@@ -0,0 +1,97 @@
+--- mail.local/mail.local.c.orig 2014-06-12 17:30:47 UTC
++++ mail.local/mail.local.c
+@@ -153,6 +153,8 @@ int ExitVal = EX_OK; /* sysexits.h erro
+ bool HoldErrs = false; /* Hold errors in ErrBuf */
+ bool LMTPMode = false;
+ bool BounceQuota = false; /* permanent error when over quota */
++bool NoBiff = false;
++bool NoFsync = false;
+ bool CloseMBDB = false;
+ char *HomeMailFile = NULL; /* store mail in homedir */
+
+@@ -234,12 +236,12 @@ main(argc, argv)
+ sm_exit(EX_CONFIG);
+ }
+ #if HASHSPOOL
+- while ((ch = getopt(argc, argv, "7bdD:f:h:r:lH:p:n")) != -1)
++ while ((ch = getopt(argc, argv, "7bBdD:f:h:r:lsH:p:n")) != -1)
+ #else /* HASHSPOOL */
+ # if _FFR_SPOOL_PATH
+- while ((ch = getopt(argc, argv, "7bdD:f:h:r:lp:")) != -1)
++ while ((ch = getopt(argc, argv, "7bBdD:f:h:r:lsp:")) != -1)
+ # else /* _FFR_SPOOL_PATH */
+- while ((ch = getopt(argc, argv, "7bdD:f:h:r:l")) != -1)
++ while ((ch = getopt(argc, argv, "7bBdD:f:h:r:ls")) != -1)
+ # endif /* _FFR_SPOOL_PATH */
+ #endif /* HASHSPOOL */
+ {
+@@ -249,6 +251,10 @@ main(argc, argv)
+ EightBitMime = false;
+ break;
+
++ case 'B':
++ NoBiff = true;
++ break;
++
+ case 'b': /* bounce mail when over quota. */
+ BounceQuota = true;
+ break;
+@@ -342,6 +348,10 @@ main(argc, argv)
+ break;
+ #endif /* HASHSPOOL || _FFR_SPOOL_PATH */
+
++ case 's':
++ NoFsync = true;
++ break;
++
+ case '?':
+ default:
+ usage();
+@@ -351,7 +361,8 @@ main(argc, argv)
+ argv += optind;
+
+ /* initialize biff structures */
+- notifybiff(NULL);
++ if (!NoBiff)
++ notifybiff(NULL);
+
+ err = sm_mbdb_initialize(mbdbname);
+ if (err != EX_OK)
+@@ -1273,6 +1284,7 @@ tryagain:
+
+ /* Get the starting offset of the new message */
+ curoff = lseek(mbfd, (off_t) 0, SEEK_END);
++ if (!NoBiff)
+ (void) sm_snprintf(biffmsg, sizeof(biffmsg), "%s@%lld\n",
+ name, (LONGLONG_T) curoff);
+
+@@ -1335,7 +1347,7 @@ tryagain:
+ }
+
+ /* Flush to disk, don't wait for update. */
+- if (fsync(mbfd) < 0)
++ if (!NoFsync && fsync(mbfd) < 0)
+ {
+ mailerr("450 4.2.0", "%s: %s", path, sm_errstring(errno));
+ err3:
+@@ -1402,7 +1414,7 @@ err0: (void) setreuid(0, 0);
+ /* Attempt to truncate back to pre-write size */
+ goto err3;
+ }
+- else
++ else if (!NoBiff)
+ notifybiff(biffmsg);
+
+ if (setreuid(0, 0) < 0)
+@@ -1582,9 +1594,9 @@ usage()
+ {
+ ExitVal = EX_USAGE;
+ # if _FFR_SPOOL_PATH
+- mailerr(NULL, "usage: mail.local [-7] [-b] [-d] [-l] [-f from|-r from] [-h filename] [-p path] user ...");
++ mailerr(NULL, "usage: mail.local [-7] [-b] [-B] [-d] [-l] [-s] [-f from|-r from] [-h filename] [-p path] user ...");
+ # else /* _FFR_SPOOL_PATH */
+- mailerr(NULL, "usage: mail.local [-7] [-b] [-d] [-l] [-f from|-r from] [-h filename] user ...");
++ mailerr(NULL, "usage: mail.local [-7] [-b] [-B] [-d] [-l] [-s] [-f from|-r from] [-h filename] user ...");
+ # endif /* _FFR_SPOOL_PATH */
+ sm_exit(ExitVal);
+ }
diff --git a/mail/sendmail-devel/files/patch-makeinfo.sh b/mail/sendmail-devel/files/patch-makeinfo.sh
new file mode 100644
index 000000000000..c3a668f80c76
--- /dev/null
+++ b/mail/sendmail-devel/files/patch-makeinfo.sh
@@ -0,0 +1,11 @@
+--- cf/sh/makeinfo.sh.orig 2014-03-05 00:59:45 UTC
++++ cf/sh/makeinfo.sh
+@@ -52,7 +52,7 @@ then
+ else
+ host=`uname -n`
+ fi
+-echo '#####' built by $user@$host on `date`
++echo '#####' built by $user@$host on `LC_TIME=C date`
+ echo '#####' in `pwd` | sed 's/\/tmp_mnt//'
+ echo '#####' using $1 as configuration include directory | sed 's/\/tmp_mnt//'
+ echo "define(\`__HOST__', $host)dnl"
diff --git a/mail/sendmail-devel/files/patch-readcf.c b/mail/sendmail-devel/files/patch-readcf.c
new file mode 100644
index 000000000000..2753468c16d7
--- /dev/null
+++ b/mail/sendmail-devel/files/patch-readcf.c
@@ -0,0 +1,26 @@
+--- sendmail/readcf.c.orig 2019-02-15 10:30:19 UTC
++++ sendmail/readcf.c
+@@ -2988,6 +2988,10 @@ static struct optioninfo
+ { "ClientCACertPath", O_CLTCACERTPATH, OI_NONE },
+ #endif
+
++#if USE_BLACKLIST
++# define O_BLACKLIST 0xf2
++ { "UseBlacklist", O_BLACKLIST, OI_NONE },
++#endif
+ { NULL, '\0', OI_NONE }
+ };
+
+@@ -4661,6 +4665,12 @@ setoption(opt, val, safe, sticky, e)
+ break;
+ #endif
+
++#if USE_BLACKLIST
++ case O_BLACKLIST:
++ UseBlacklist = atobool(val);
++ break;
++#endif
++
+ default:
+ if (tTd(37, 1))
+ {
diff --git a/mail/sendmail-devel/files/patch-rmail.c b/mail/sendmail-devel/files/patch-rmail.c
new file mode 100644
index 000000000000..0a2e4b53e5ff
--- /dev/null
+++ b/mail/sendmail-devel/files/patch-rmail.c
@@ -0,0 +1,14 @@
+--- rmail/rmail.c.orig 2014-03-05 00:59:45 UTC
++++ rmail/rmail.c
+@@ -276,7 +276,11 @@ main(argc, argv)
+ args[i++] = _PATH_SENDMAIL; /* Build sendmail's argument list. */
+ args[i++] = "-G"; /* relay submission */
+ args[i++] = "-oee"; /* No errors, just status. */
++#ifdef QUEUE_ONLY
+ args[i++] = "-odq"; /* Queue it, don't try to deliver. */
++#else
++ args[i++] = "-odi"; /* Deliver in foreground. */
++#endif
+ args[i++] = "-oi"; /* Ignore '.' on a line by itself. */
+
+ /* set from system and protocol used */
diff --git a/mail/sendmail-devel/files/patch-sendmail.8 b/mail/sendmail-devel/files/patch-sendmail.8
new file mode 100644
index 000000000000..447c4dd7cdb5
--- /dev/null
+++ b/mail/sendmail-devel/files/patch-sendmail.8
@@ -0,0 +1,14 @@
+--- sendmail/sendmail.8.orig 2014-06-13 14:57:59 UTC
++++ sendmail/sendmail.8
+@@ -537,6 +537,11 @@ for this amount of time,
+ failed messages will be returned to the sender.
+ The default is five days.
+ .TP
++UseBlacklist
++If set, send authentication failure and success notifications to the
++.BR blacklistd (8)
++daemon.
++.TP
+ .RI UserDatabaseSpec= userdatabase
+ If set, a user database is consulted to get forwarding information.
+ You can consider this an adjunct to the aliasing mechanism,
diff --git a/mail/sendmail-devel/files/patch-sendmail.h b/mail/sendmail-devel/files/patch-sendmail.h
new file mode 100644
index 000000000000..448f0d15ddce
--- /dev/null
+++ b/mail/sendmail-devel/files/patch-sendmail.h
@@ -0,0 +1,24 @@
+--- sendmail/sendmail.h.orig 2019-02-15 10:30:19 UTC
++++ sendmail/sendmail.h
+@@ -61,6 +61,10 @@ SM_UNUSED(static char SmailId[]) = "@(#)
+ #endif /* _DEFINE */
+
+ #include "bf.h"
++#if USE_BLACKLIST
++#include <blacklist.h>
++#endif
++#include "blacklist_client.h"
+ #include "timers.h"
+ #include <sm/exc.h>
+ #include <sm/heap.h>
+@@ -2513,6 +2517,10 @@ EXTERN int Hacks; /* bit field of run-ti
+
+ EXTERN int ConnectionRateWindowSize;
+
++#if USE_BLACKLIST
++EXTERN bool UseBlacklist;
++#endif
++
+ /*
+ ** Declarations of useful functions
+ */
diff --git a/mail/sendmail-devel/files/patch-smrsh.8 b/mail/sendmail-devel/files/patch-smrsh.8
new file mode 100644
index 000000000000..5ca6c4c08f98
--- /dev/null
+++ b/mail/sendmail-devel/files/patch-smrsh.8
@@ -0,0 +1,27 @@
+--- smrsh/smrsh.8.orig 2014-03-05 00:59:45 UTC
++++ smrsh/smrsh.8
+@@ -39,7 +39,7 @@ Briefly,
+ .I smrsh
+ limits programs to be in a single directory,
+ by default
+-/usr/adm/sm.bin,
++/usr/libexec/sm.bin,
+ allowing the system administrator to choose the set of acceptable commands,
+ and to the shell builtin commands ``exec'', ``exit'', and ``echo''.
+ It also rejects any commands with the characters
+@@ -50,13 +50,12 @@ It allows ``||'' and ``&&'' to enable co
+ ``"|exec /usr/local/bin/filter || exit 75"''
+ .PP
+ Initial pathnames on programs are stripped,
+-so forwarding to ``/usr/ucb/vacation'',
+-``/usr/bin/vacation'',
++so forwarding to ``/usr/bin/vacation'',
+ ``/home/server/mydir/bin/vacation'',
+ and
+ ``vacation''
+ all actually forward to
+-``/usr/adm/sm.bin/vacation''.
++``/usr/libexec/sm.bin/vacation''.
+ .PP
+ System administrators should be conservative about populating
+ the sm.bin directory.
diff --git a/mail/sendmail-devel/files/patch-srvrsmtp.c b/mail/sendmail-devel/files/patch-srvrsmtp.c
new file mode 100644
index 000000000000..5ffa4eec4dbd
--- /dev/null
+++ b/mail/sendmail-devel/files/patch-srvrsmtp.c
@@ -0,0 +1,92 @@
+--- sendmail/srvrsmtp.c.orig 2019-02-15 10:30:19 UTC
++++ sendmail/srvrsmtp.c
+@@ -878,6 +878,9 @@ smtp(nullserver, d_flags, e)
+ #if _FFR_BADRCPT_SHUTDOWN
+ int n_badrcpts_adj;
+ #endif
++#ifdef USE_BLACKLIST
++ int saved_bl_fd;
++#endif
+
+ RESET_AUTH_FAIL_LOG_USER;
+ SevenBitInput_Saved = SevenBitInput;
+@@ -1377,6 +1380,7 @@ smtp(nullserver, d_flags, e)
+ (int) tp.tv_sec +
+ (tp.tv_usec >= 500000 ? 1 : 0)
+ );
++ BLACKLIST_NOTIFY(BLACKLIST_AUTH_FAIL, fd, "pre-greeting traffic");
+ }
+ }
+ }
+@@ -1479,6 +1483,10 @@ smtp(nullserver, d_flags, e)
+ SmtpPhase = "server cmd read";
+ sm_setproctitle(true, e, "server %s cmd read", CurSmtpClient);
+
++#ifdef USE_BLACKLIST
++ saved_bl_fd = dup(sm_io_getinfo(InChannel, SM_IO_WHAT_FD, NULL));
++#endif
++
+ /* handle errors */
+ if (sm_io_error(OutChannel) ||
+ (p = sfgets(inp, sizeof(inp), InChannel,
+@@ -1792,8 +1800,11 @@ smtp(nullserver, d_flags, e)
+ #define LOGAUTHFAIL \
+ do \
+ { \
++ int fd; \
+ SET_AUTH_USER_CONDITIONALLY \
+ message("535 5.7.0 authentication failed"); \
++ fd = sm_io_getinfo(InChannel, SM_IO_WHAT_FD, NULL); \
++ BLACKLIST_NOTIFY(BLACKLIST_AUTH_FAIL, fd, "AUTH FAIL"); \
+ if (LogLevel >= 9) \
+ sm_syslog(LOG_WARNING, e->e_id, \
+ "AUTH failure (%s): %s (%d) %s%s%.*s, relay=%.100s", \
+@@ -1943,6 +1954,9 @@ smtp(nullserver, d_flags, e)
+ DELAY_CONN("AUTH");
+ if (!sasl_ok || n_mechs <= 0)
+ {
++ int fd;
++ fd = sm_io_getinfo(InChannel, SM_IO_WHAT_FD, NULL);
++ BLACKLIST_NOTIFY(BLACKLIST_AUTH_FAIL, fd, "AUTH LOGIN FAIL");
+ message("503 5.3.3 AUTH not available");
+ break;
+ }
+@@ -3546,10 +3560,17 @@ doquit:
+ ** timeouts for the same connection.
+ */
+
++#ifdef USE_BLACKLIST
++ /* no immediate BLACKLIST_ABUSIVE_BEHAVIOR */
++ BLACKLIST_NOTIFY(BLACKLIST_AUTH_FAIL, saved_bl_fd, "no command issued");
++#endif
+ sm_syslog(LOG_INFO, e->e_id,
+ "%s did not issue MAIL/EXPN/VRFY/ETRN during connection to %s",
+ CurSmtpClient, d);
+ }
++#ifdef USE_BLACKLIST
++ close(saved_bl_fd);
++#endif
+ if (tTd(93, 100))
+ {
+ /* return to handle next connection */
+@@ -3607,7 +3628,10 @@ doquit:
+ #if MAXBADCOMMANDS > 0
+ if (++n_badcmds > MAXBADCOMMANDS)
+ {
++ int fd;
+ stopattack:
++ fd = sm_io_getinfo(InChannel, SM_IO_WHAT_FD, NULL);
++ BLACKLIST_NOTIFY(BLACKLIST_ABUSIVE_BEHAVIOR, fd, "too many bad commands");
+ message("421 4.7.0 %s Too many bad commands; closing connection",
+ MyHostName);
+
+@@ -3659,6 +3683,9 @@ doquit:
+ #if SASL
+ }
+ #endif
++#ifdef USE_BLACKLIST
++ close(saved_bl_fd);
++#endif
+ }
+ SM_EXCEPT(exc, "[!F]*")
+ {
diff --git a/mail/sendmail-devel/files/patch-usersmtp.c b/mail/sendmail-devel/files/patch-usersmtp.c
new file mode 100644
index 000000000000..a50a11f3787e
--- /dev/null
+++ b/mail/sendmail-devel/files/patch-usersmtp.c
@@ -0,0 +1,26 @@
+--- sendmail/usersmtp.c.orig 2014-12-05 15:42:28 UTC
++++ sendmail/usersmtp.c
+@@ -1825,6 +1825,9 @@ attemptauth(m, mci, e, sai)
+
+ if (saslresult != SASL_OK && saslresult != SASL_CONTINUE)
+ {
++ int fd = sm_io_getinfo(mci->mci_in, SM_IO_WHAT_FD, NULL);
++ BLACKLIST_NOTIFY(BLACKLIST_AUTH_FAIL, fd, "AUTH FAIL");
++
+ if (tTd(95, 5))
+ sm_dprintf("AUTH FAIL=%s (%d)\n",
+ sasl_errstring(saslresult, NULL, NULL),
+@@ -1970,9 +1973,11 @@ smtpauth(m, mci, e)
+ do
+ {
+ result = attemptauth(m, mci, e, &(mci->mci_sai));
+- if (result == EX_OK)
++ if (result == EX_OK) {
++ int fd = sm_io_getinfo(mci->mci_in, SM_IO_WHAT_FD, NULL);
++ BLACKLIST_NOTIFY(BLACKLIST_AUTH_OK, fd, "AUTH OK");
+ mci->mci_sasl_auth = true;
+- else if (result == EX_TEMPFAIL || result == EX_NOPERM)
++ } else if (result == EX_TEMPFAIL || result == EX_NOPERM)
+ {
+ mci->mci_saslcap = removemech((mci->mci_sai)[SASL_MECH],
+ mci->mci_saslcap,
diff --git a/mail/sendmail-devel/files/site.config.m4 b/mail/sendmail-devel/files/site.config.m4
new file mode 100644
index 000000000000..6fca36fdda64
--- /dev/null
+++ b/mail/sendmail-devel/files/site.config.m4
@@ -0,0 +1,10 @@
+define(`confEBINDIR',`%%PREFIX%%/libexec')
+define(`confMANROOT',`%%PREFIX%%/man/cat')
+define(`confMANROOTMAN',`%%PREFIX%%/man/man')
+define(`confMBINDIR',`%%PREFIX%%/sbin')
+define(`confSBINDIR',`%%PREFIX%%/sbin')
+define(`confUBINDIR',`%%PREFIX%%/bin')
+define(`confNO_STATISTICS_INSTALL',`True')
+define(`confHFDIR', `%%PREFIX%%/share/sendmail')
+APPENDDEF(`conf_sendmail_ENVDEF', `-DTCPWRAPPERS')
+APPENDDEF(`conf_sendmail_LIBS', `-lwrap')"
diff --git a/mail/sendmail-devel/files/site.config.m4.blacklistd b/mail/sendmail-devel/files/site.config.m4.blacklistd
new file mode 100644
index 000000000000..bc3a46e40d60
--- /dev/null
+++ b/mail/sendmail-devel/files/site.config.m4.blacklistd
@@ -0,0 +1,2 @@
+APPENDDEF(`conf_sendmail_ENVDEF', `-DUSE_BLACKLIST')
+APPENDDEF(`conf_sendmail_LIBS', `-lblacklist')
diff --git a/mail/sendmail-devel/files/site.config.m4.gdbm b/mail/sendmail-devel/files/site.config.m4.gdbm
new file mode 100644
index 000000000000..0210aab3851c
--- /dev/null
+++ b/mail/sendmail-devel/files/site.config.m4.gdbm
@@ -0,0 +1,4 @@
+APPENDDEF(`confMAPDEF', `-DNDBM')
+APPENDDEF(`confINCDIRS', `-I%%LOCALBASE%%/include')
+APPENDDEF(`confLIBDIRS', `-L%%LOCALBASE%%/lib')
+APPENDDEF(`confLIBS', `-lgdbm_compat -lgdbm')
diff --git a/mail/sendmail-devel/files/site.config.m4.ipv6 b/mail/sendmail-devel/files/site.config.m4.ipv6
new file mode 100644
index 000000000000..5040616c1823
--- /dev/null
+++ b/mail/sendmail-devel/files/site.config.m4.ipv6
@@ -0,0 +1,3 @@
+APPENDDEF(`conf_sendmail_ENVDEF', `-DNETINET6')
+APPENDDEF(`conf_libmilter_ENVDEF', `-DNETINET6')
+APPENDDEF(`conf_libsm_ENVDEF', `-DNETINET6')
diff --git a/mail/sendmail-devel/files/site.config.m4.ldap b/mail/sendmail-devel/files/site.config.m4.ldap
new file mode 100644
index 000000000000..0a67a5a29d35
--- /dev/null
+++ b/mail/sendmail-devel/files/site.config.m4.ldap
@@ -0,0 +1,25 @@
+APPENDDEF(`confLIBDIRS', `-L%%LOCALBASE%%/lib')
+APPENDDEF(`conf_libsm_ENVDEF', `-I%%LOCALBASE%%/include')
+APPENDDEF(`conf_libsm_ENVDEF', `-DLDAPMAP')
+APPENDDEF(`conf_libsm_LIBS', `-lldap')
+APPENDDEF(`conf_libsm_LIBS', `-llber')
+APPENDDEF(`conf_sendmail_ENVDEF', `-I%%LOCALBASE%%/include')
+APPENDDEF(`conf_sendmail_ENVDEF', `-DLDAPMAP')
+APPENDDEF(`conf_sendmail_LIBS', `-lldap')
+APPENDDEF(`conf_sendmail_LIBS', `-llber')
+APPENDDEF(`conf_editmap_LIBS', `-lldap')
+APPENDDEF(`conf_editmap_LIBS', `-llber')
+APPENDDEF(`conf_mail_local_LIBS', `-lldap')
+APPENDDEF(`conf_mail_local_LIBS', `-llber')
+APPENDDEF(`conf_mailstats_LIBS', `-lldap')
+APPENDDEF(`conf_mailstats_LIBS', `-llber')
+APPENDDEF(`conf_makemap_LIBS', `-lldap')
+APPENDDEF(`conf_makemap_LIBS', `-llber')
+APPENDDEF(`conf_praliases_LIBS', `-lldap')
+APPENDDEF(`conf_praliases_LIBS', `-llber')
+APPENDDEF(`conf_rmail_LIBS', `-lldap')
+APPENDDEF(`conf_rmail_LIBS', `-llber')
+APPENDDEF(`conf_smrsh_LIBS', `-lldap')
+APPENDDEF(`conf_smrsh_LIBS', `-llber')
+APPENDDEF(`conf_vacation_LIBS', `-lldap')
+APPENDDEF(`conf_vacation_LIBS', `-llber')
diff --git a/mail/sendmail-devel/files/site.config.m4.milter b/mail/sendmail-devel/files/site.config.m4.milter
new file mode 100644
index 000000000000..de11295aa6f3
--- /dev/null
+++ b/mail/sendmail-devel/files/site.config.m4.milter
@@ -0,0 +1,2 @@
+APPENDDEF(`conf_libmilter_ENVDEF', `-DMILTER')
+APPENDDEF(`conf_sendmail_ENVDEF', `-DMILTER')
diff --git a/mail/sendmail-devel/files/site.config.m4.pre4 b/mail/sendmail-devel/files/site.config.m4.pre4
new file mode 100644
index 000000000000..99835cc669c5
--- /dev/null
+++ b/mail/sendmail-devel/files/site.config.m4.pre4
@@ -0,0 +1,2 @@
+APPENDDEF(`conf_smrsh_ENVDEF', `-DCMDDIR="\"%%PREFIX%%/libexec/sm.bin\""')
+APPENDDEF(`conf_smrsh_ENVDEF', `-DPATH="\"/bin:/usr/bin\""')
diff --git a/mail/sendmail-devel/files/site.config.m4.sasl2 b/mail/sendmail-devel/files/site.config.m4.sasl2
new file mode 100644
index 000000000000..bf1d85f38035
--- /dev/null
+++ b/mail/sendmail-devel/files/site.config.m4.sasl2
@@ -0,0 +1,4 @@
+APPENDDEF(`conf_sendmail_ENVDEF', `-I%%LOCALBASE%%/include')
+APPENDDEF(`conf_sendmail_ENVDEF', `-DSASL=2')
+APPENDDEF(`confLIBDIRS', `-L%%LOCALBASE%%/lib')
+APPENDDEF(`conf_sendmail_LIBS', `-lsasl2')
diff --git a/mail/sendmail-devel/files/site.config.m4.smtputf8 b/mail/sendmail-devel/files/site.config.m4.smtputf8
new file mode 100644
index 000000000000..0668f6dfb941
--- /dev/null
+++ b/mail/sendmail-devel/files/site.config.m4.smtputf8
@@ -0,0 +1,2 @@
+APPENDDEF(`confLIBS', `-licui18n -licuuc -licudata')
+APPENDDEF(`conf_sendmail_ENVDEF', `-D_FFR_EAI')
diff --git a/mail/sendmail-devel/files/site.config.m4.ssl b/mail/sendmail-devel/files/site.config.m4.ssl
new file mode 100644
index 000000000000..6ccb80597c4e
--- /dev/null
+++ b/mail/sendmail-devel/files/site.config.m4.ssl
@@ -0,0 +1,4 @@
+APPENDDEF(`confLIBDIRS', `-L%%LOCALBASE%%/lib')
+APPENDDEF(`confLDOPTS', ``-Wl,-rpath=%%LOCALBASE%%/lib'')
+APPENDDEF(`confINCDIRS', `-I%%LOCALBASE%%/include')
+APPENDDEF(`conf_sendmail_ENVDEF', `-DHASSRANDOMDEV')
diff --git a/mail/sendmail-devel/files/site.config.m4.tls b/mail/sendmail-devel/files/site.config.m4.tls
new file mode 100644
index 000000000000..ec8a57bdbee1
--- /dev/null
+++ b/mail/sendmail-devel/files/site.config.m4.tls
@@ -0,0 +1,2 @@
+APPENDDEF(`conf_sendmail_ENVDEF', `-DSTARTTLS -DTLS_EC')
+APPENDDEF(`conf_sendmail_LIBS', `-lssl -lcrypto')
diff --git a/mail/sendmail-devel/files/smtputf8.patch b/mail/sendmail-devel/files/smtputf8.patch
new file mode 100644
index 000000000000..b6eeccdc643e
--- /dev/null
+++ b/mail/sendmail-devel/files/smtputf8.patch
@@ -0,0 +1,600 @@
+diff --git a/sendmail/conf.c b/sendmail/conf.c
+index c73334e..28328e6 100644
+--- sendmail/conf.c.orig
++++ sendmail/conf.c
+@@ -314,6 +314,9 @@ setdefaults(e)
+ e->e_xfqgrp = NOQGRP;
+ e->e_xfqdir = NOQDIR;
+ e->e_ctime = curtime();
++#if _FFR_EAI
++ e->e_smtputf8 = false;
++#endif
+ SevenBitInput = false; /* option 7 */
+ MaxMciCache = 1; /* option k */
+ MciCacheTimeout = 5 MINUTES; /* option K */
+@@ -5746,6 +5749,9 @@ char *CompileOptions[] =
+ "DNSMAP",
+ # endif
+ #endif
++#if _FFR_EAI
++ "EAI",
++#endif
+ #if EGD
+ "EGD",
+ #endif
+@@ -6590,3 +6596,6 @@ char *FFRCompileOptions[] =
+ NULL
+ };
+
++#if _FFR_EAI && _FFR_EIGHT_BIT_ADDR_OK
++#error "Cannot enable both of these FFRs"
++#endif
+diff --git a/sendmail/domain.c b/sendmail/domain.c
+index 4d1b92d..adaa6ac 100644
+--- sendmail/domain.c.orig
++++ sendmail/domain.c
+@@ -13,6 +13,9 @@
+
+ #include <sendmail.h>
+ #include "map.h"
++#if _FFR_EAI
++#include <unicode/uidna.h>
++#endif
+
+ #if NAMED_BIND
+ SM_RCSID("@(#)$Id: domain.c,v 8.205 2013-11-22 20:51:55 ca Exp $ (with name server)")
+@@ -236,6 +239,26 @@ getmxrr(host, mxhosts, mxprefs, droplocalhost, rcode, tryfallback, pttl)
+ if (host[0] == '[')
+ goto punt;
+
++#if _FFR_EAI
++ if (!addr_is_ascii(host))
++ {
++ char buf[1024];
++ UErrorCode error = U_ZERO_ERROR;
++ UIDNAInfo info = UIDNA_INFO_INITIALIZER;
++ UIDNA *idna;
++ int anl;
++
++ idna = uidna_openUTS46(UIDNA_NONTRANSITIONAL_TO_ASCII, &error);
++ anl = uidna_nameToASCII_UTF8(idna,
++ host, strlen(host),
++ buf, sizeof(buf) - 1,
++ &info,
++ &error);
++ uidna_close(idna);
++ host = sm_rpool_strdup_x(CurEnv->e_rpool, buf);
++ }
++#endif /* _FFR_EAI */
++
+ /*
+ ** If we don't have MX records in our host switch, don't
+ ** try for MX records. Note that this really isn't "right",
+diff --git a/sendmail/err.c b/sendmail/err.c
+index 0594eb9..67d0d09 100644
+--- sendmail/err.c.orig
++++ sendmail/err.c
+@@ -1010,15 +1010,23 @@ fmtmsg(eb, to, num, enhsc, eno, fmt, ap)
+ (void) sm_strlcpyn(eb, spaceleft, 2,
+ shortenstring(to, MAXSHORTSTR), "... ");
+ spaceleft -= strlen(eb);
++#if _FFR_EAI
++ eb += strlen(eb);
++#else
+ while (*eb != '\0')
+ *eb++ &= 0177;
++#endif
+ }
+
+ /* output the message */
+ (void) sm_vsnprintf(eb, spaceleft, fmt, ap);
+ spaceleft -= strlen(eb);
++#if _FFR_EAI
++ eb += strlen(eb);
++#else
+ while (*eb != '\0')
+ *eb++ &= 0177;
++#endif
+
+ /* output the error code, if any */
+ if (eno != 0)
+diff --git a/sendmail/main.c b/sendmail/main.c
+index 38eebbf..43e17a5 100644
+--- sendmail/main.c.orig
++++ sendmail/main.c
+@@ -1854,6 +1854,9 @@ main(argc, argv, envp)
+
+ /* MIME message/xxx subtypes that can be treated as messages */
+ setclass('s', "rfc822");
++#ifdef _FFR_EAI
++ setclass('s', "global");
++#endif
+
+ /* MIME Content-Transfer-Encodings that can be encoded */
+ setclass('e', "7bit");
+diff --git a/sendmail/parseaddr.c b/sendmail/parseaddr.c
+index 2adb39c..9ab0729 100644
+--- sendmail/parseaddr.c.orig
++++ sendmail/parseaddr.c
+@@ -273,12 +273,14 @@ invalidaddr(addr, delimptr, isrcpt)
+ }
+ for (; *addr != '\0'; addr++)
+ {
++#ifndef _FFR_EAI
+ if (!EightBitAddrOK && (*addr & 0340) == 0200)
+ {
+ setstat(EX_USAGE);
+ result = true;
+ *addr = BAD_CHAR_REPLACEMENT;
+ }
++#endif
+ if (++len > MAXNAME - 1)
+ {
+ char saved = *addr;
+@@ -350,7 +352,7 @@ hasctrlchar(addr, isrcpt, complain)
+ }
+ result = "too long";
+ }
+- if (!EightBitAddrOK && !quoted && (*addr < 32 || *addr == 127))
++ if (!quoted && ((unsigned char)*addr < 32 || *addr == 127))
+ {
+ result = "non-printable character";
+ *addr = BAD_CHAR_REPLACEMENT;
+@@ -368,6 +370,7 @@ hasctrlchar(addr, isrcpt, complain)
+ break;
+ }
+ }
++#ifndef _FFR_EAI
+ if (!EightBitAddrOK && (*addr & 0340) == 0200)
+ {
+ setstat(EX_USAGE);
+@@ -375,6 +378,7 @@ hasctrlchar(addr, isrcpt, complain)
+ *addr = BAD_CHAR_REPLACEMENT;
+ continue;
+ }
++#endif
+ }
+ if (quoted)
+ result = "unbalanced quote"; /* unbalanced quote */
+diff --git a/sendmail/queue.c b/sendmail/queue.c
+index a323301..95344d3 100644
+--- sendmail/queue.c.orig
++++ sendmail/queue.c
+@@ -665,6 +665,10 @@ queueup(e, announce, msync)
+ *p++ = 'n';
+ if (bitset(EF_SPLIT, e->e_flags))
+ *p++ = 's';
++#if _FFR_EAI
++ if (e->e_smtputf8)
++ *p++ = 'e';
++#endif
+ *p++ = '\0';
+ if (buf[0] != '\0')
+ (void) sm_io_fprintf(tfp, SM_TIME_DEFAULT, "F%s\n", buf);
+@@ -4285,6 +4289,12 @@ readqf(e, openonly)
+ case 'w': /* warning sent */
+ e->e_flags |= EF_WARNING;
+ break;
++
++#if _FFR_EAI
++ case 'e': /* message requires EAI */
++ e->e_smtputf8 = true;
++ break;
++#endif /* _FFR_EAI */
+ }
+ }
+ break;
+@@ -4550,6 +4560,23 @@ readqf(e, openonly)
+ /* other checks? */
+ #endif /* _FFR_QF_PARANOIA */
+
++#if _FFR_EAI
++ /*
++ ** If this message originates from something other than
++ ** srvrsmtp.c, then it might use UTF8 addresses but not be
++ ** marked. We'll just add the mark so we're sure that it
++ ** either can be delivered or will be returned.
++ */
++ if (!e->e_smtputf8) {
++ ADDRESS *q;
++ for (q = e->e_sendqueue; q != NULL; q = q->q_next)
++ if (!addr_is_ascii(q->q_paddr) && !e->e_smtputf8)
++ e->e_smtputf8 = true;
++ if (!addr_is_ascii(e->e_from.q_paddr) && !e->e_smtputf8)
++ e->e_smtputf8 = true;
++ }
++#endif /* _FFR_EAI */
++
+ /* possibly set ${dsn_ret} macro */
+ if (bitset(EF_RET_PARAM, e->e_flags))
+ {
+diff --git a/sendmail/recipient.c b/sendmail/recipient.c
+index 3fad957..09eac64 100644
+--- sendmail/recipient.c.orig
++++ sendmail/recipient.c
+@@ -508,6 +508,11 @@ recipient(new, sendq, aliaslevel, e)
+ p = e->e_from.q_mailer->m_addrtype;
+ if (p == NULL)
+ p = "rfc822";
++#ifdef _FFR_EAI
++ if (sm_strcasecmp(p, "rfc822") == 0 &&
++ !addr_is_ascii(q->q_user))
++ p = "utf-8";
++#endif
+ if (sm_strcasecmp(p, "rfc822") != 0)
+ {
+ (void) sm_snprintf(frbuf, sizeof(frbuf), "%s; %.800s",
+diff --git a/sendmail/savemail.c b/sendmail/savemail.c
+index 6de8f2f..8a9df36 100644
+--- sendmail/savemail.c.orig
++++ sendmail/savemail.c
+@@ -744,6 +744,34 @@ returntosender(msg, returnq, flags, e)
+ return ret;
+ }
+
++
++/*
++** DSNTYPENAME -- Returns the DSN name of the addrtype for this address
++**
++** Sendmail's addrtypes are largely in different universes, and
++** 'fred' may be a valid address in different addrtype
++** universes.
++**
++** EAI extends the rfc822 universe rather than introduce a new
++** universe. Because of that, sendmail uses the rfc822 addrtype,
++** but names it utf-8 when the EAI DSN extension requires that.
++*/
++
++const char *
++dsntypename(addrtype, addr)
++ const char * addrtype;
++ const char * addr;
++{
++ if (sm_strcasecmp(addrtype, "rfc822") != 0)
++ return addrtype;
++#ifdef _FFR_EAI
++ if (!addr_is_ascii(addr))
++ return "utf-8";
++#endif
++ return "rfc822";
++}
++
++
+ /*
+ ** ERRBODY -- output the body of an error message.
+ **
+@@ -1082,7 +1110,13 @@ errbody(mci, e, separator)
+ (void) sm_strlcpyn(buf, sizeof(buf), 2, "--", e->e_msgboundary);
+ if (!putline("", mci) ||
+ !putline(buf, mci) ||
++#ifdef _FFR_EAI
++ !putline(e->e_parent->e_smtputf8
++ ? "Content-Type: message/global-delivery-status"
++ : "Content-Type: message/delivery-status", mci) ||
++#else
+ !putline("Content-Type: message/delivery-status", mci) ||
++#endif
+ !putline("", mci))
+ goto writeerr;
+
+@@ -1223,7 +1257,8 @@ errbody(mci, e, separator)
+ (void) sm_snprintf(actual,
+ sizeof(actual),
+ "%s; %.700s@%.100s",
+- p, q->q_user,
++ dsntypename(p, q->q_user),
++ q->q_user,
+ MyHostName);
+ }
+ else
+@@ -1231,7 +1266,8 @@ errbody(mci, e, separator)
+ (void) sm_snprintf(actual,
+ sizeof(actual),
+ "%s; %.800s",
+- p, q->q_user);
++ dsntypename(p, q->q_user),
++ q->q_user);
+ }
+ }
+
+@@ -1248,6 +1284,21 @@ errbody(mci, e, separator)
+ actual);
+ }
+
++#ifdef _FFR_EAI
++ if (sm_strncasecmp("rfc822;", q->q_finalrcpt, 7) == 0 &&
++ !addr_is_ascii(q->q_user)) {
++ char utf8rcpt[1024];
++ char * a;
++ a = strchr(q->q_finalrcpt, ';');
++ while(*a == ';' || *a == ' ')
++ a++;
++ sm_snprintf(utf8rcpt, 1023,
++ "utf-8; %.800s", a);
++ q->q_finalrcpt = sm_rpool_strdup_x(e->e_rpool,
++ utf8rcpt);
++ }
++#endif
++
+ if (q->q_finalrcpt != NULL)
+ {
+ (void) sm_snprintf(buf, sizeof(buf),
+@@ -1373,9 +1424,21 @@ errbody(mci, e, separator)
+
+ if (!putline(buf, mci))
+ goto writeerr;
++#ifdef _FFR_EAI
++ if (e->e_parent->e_smtputf8)
++ (void) sm_strlcpyn(buf, sizeof(buf), 2,
++ "Content-Type: message/global",
++ sendbody ? "" : "-headers");
++ else
++ (void) sm_strlcpyn(buf, sizeof(buf), 2,
++ "Content-Type: ",
++ sendbody ? "message/rfc822"
++ : "text/rfc822-headers");
++#else
+ (void) sm_strlcpyn(buf, sizeof(buf), 2, "Content-Type: ",
+ sendbody ? "message/rfc822"
+ : "text/rfc822-headers");
++#endif
+ if (!putline(buf, mci))
+ goto writeerr;
+
+diff --git a/sendmail/sendmail.h b/sendmail/sendmail.h
+index b2d0211..63a2378 100644
+--- sendmail/sendmail.h.orig
++++ sendmail/sendmail.h
+@@ -781,8 +781,13 @@ MCI
+ #else
+ # define MCIF_NOTSTICKY 0
+ #endif
++#if _FFR_EAI
++#define MCIF_EAI 0x40000000 /* SMTPUTF8 supported */
++#else
++#define MCIF_EAI 0x00000000 /* for MCIF_EXTENS */
++#endif /* _FFR_EAI */
+
+-#define MCIF_EXTENS (MCIF_EXPN|MCIF_SIZE|MCIF_8BITMIME|MCIF_DSN|MCIF_8BITOK|MCIF_AUTH|MCIF_ENHSTAT|MCIF_PIPELINED|MCIF_VERB|MCIF_TLS|MCIF_DLVR_BY|MCIF_AUTH2)
++#define MCIF_EXTENS (MCIF_EXPN|MCIF_SIZE|MCIF_8BITMIME|MCIF_DSN|MCIF_8BITOK|MCIF_AUTH|MCIF_ENHSTAT|MCIF_PIPELINED|MCIF_VERB|MCIF_TLS|MCIF_DLVR_BY|MCIF_AUTH2|MCIF_EAI)
+
+ /* states */
+ #define MCIS_CLOSED 0 /* no traffic on this connection */
+@@ -921,6 +926,9 @@ struct envelope
+ ADDRESS e_from; /* the person it is from */
+ char *e_sender; /* e_from.q_paddr w comments stripped */
+ char **e_fromdomain; /* the domain part of the sender */
++#if _FFR_EAI
++ bool e_smtputf8; /* whether the sender demanded SMTPUTF8 */
++#endif
+ ADDRESS *e_sendqueue; /* list of message recipients */
+ ADDRESS *e_errorqueue; /* the queue for error responses */
+
+@@ -1928,6 +1936,9 @@ struct termescape
+ #define D_CANONREQ 'c' /* canonification required (cf) */
+ #define D_IFNHELO 'h' /* use if name for HELO */
+ #define D_FQMAIL 'f' /* fq sender address required (cf) */
++#if _FFR_EAI
++#define D_EAI 'I' /* EAI supported */
++#endif
+ #define D_FQRCPT 'r' /* fq recipient address required (cf) */
+ #define D_SMTPS 's' /* SMTP over SSL (smtps) */
+ #define D_UNQUALOK 'u' /* unqualified address is ok (cf) */
+@@ -2355,7 +2366,7 @@ EXTERN bool ForkQueueRuns; /* fork for each job when running the queue */
+ EXTERN bool FromFlag; /* if set, "From" person is explicit */
+ EXTERN bool FipsMode;
+ EXTERN bool GrabTo; /* if set, get recipients from msg */
+-EXTERN bool EightBitAddrOK; /* we'll let 8-bit addresses through */
++EXTERN bool EightBitAddrOK; /* we'll let 8-bit addresses through */
+ EXTERN bool HasEightBits; /* has at least one eight bit input byte */
+ EXTERN bool HasWildcardMX; /* don't use MX records when canonifying */
+ EXTERN bool HoldErrs; /* only output errors to transcript */
+@@ -2855,6 +2866,10 @@ extern bool xtextok __P((char *));
+ extern int xunlink __P((char *));
+ extern char *xuntextify __P((char *));
+
++#if _FFR_EAI
++extern bool addr_is_ascii __P((const char *));
++#endif
++
+ #if _FFR_RCPTFLAGS
+ extern bool newmodmailer __P((ADDRESS *, int));
+ #endif
+diff --git a/sendmail/srvrsmtp.c b/sendmail/srvrsmtp.c
+index b05348d..91e6956 100644
+--- sendmail/srvrsmtp.c.orig
++++ sendmail/srvrsmtp.c
+@@ -65,6 +65,9 @@ static bool NotFirstDelivery = false;
+ #define SRV_REQ_AUTH 0x0400 /* require AUTH */
+ #define SRV_REQ_SEC 0x0800 /* require security - equiv to AuthOptions=p */
+ #define SRV_TMP_FAIL 0x1000 /* ruleset caused a temporary failure */
++#if _FFR_EAI
++# define SRV_OFFER_EAI 0x2000 /* offer SMTPUTF* */
++#endif
+
+ static unsigned int srvfeatures __P((ENVELOPE *, char *, unsigned int));
+
+@@ -122,6 +125,29 @@ extern ENVELOPE BlankEnvelope;
+ #define SKIP_SPACE(s) while (isascii(*s) && isspace(*s)) \
+ (s)++
+
++#if _FFR_EAI
++/*
++** ADDR_IS_ASCII -- check whether an address is 100% printable ASCII
++**
++** Parameters:
++** a -- an address (or other string)
++**
++** Returns:
++** TRUE if a is non-NULL and points to only printable ASCII
++** FALSE if a is NULL and points to printable ASCII
++** FALSE if a is non-NULL and points to something containing 8-bittery
++*/
++
++bool
++addr_is_ascii(a)
++ const char * a;
++{
++ while (a != NULL && *a != '\0' && *a >= ' ' && (unsigned char)*a < 127)
++ a++;
++ return (a != NULL && *a == '\0');
++}
++#endif
++
+ /*
+ ** PARSE_ESMTP_ARGS -- parse EMSTP arguments (for MAIL, RCPT)
+ **
+@@ -722,10 +748,21 @@ do \
+ #else
+ # define auth_active false
+ #endif
++#ifdef _FFR_EAI
++#define GET_PROTOCOL() \
++ (e->e_smtputf8 \
++ ? (auth_active \
++ ? (tls_active ? "UTF8SMTPSA" : "UTF8SMTPA") \
++ : (tls_active ? "UTF8SMTPS" : "UTF8SMTP")) \
++ : (auth_active \
++ ? (tls_active ? "ESMTPSA" : "ESMTPA") \
++ : (tls_active ? "ESMTPS" : "ESMTP")))
++#else
+ #define GET_PROTOCOL() \
+ (auth_active \
+ ? (tls_active ? "ESMTPSA" : "ESMTPA") \
+ : (tls_active ? "ESMTPS" : "ESMTP"))
++#endif
+
+ static bool SevenBitInput_Saved; /* saved version of SevenBitInput */
+
+@@ -898,6 +935,9 @@ smtp(nullserver, d_flags, e)
+ | (bitset(TLS_I_NO_VRFY, TLS_Srv_Opts) ? SRV_NONE
+ : SRV_VRFY_CLT)
+ #endif /* STARTTLS */
++#if _FFR_EAI
++ | SRV_OFFER_EAI
++#endif /* _FFR_EAI */
+ ;
+ if (nullserver == NULL)
+ {
+@@ -2523,6 +2563,10 @@ smtp(nullserver, d_flags, e)
+ if (SendMIMEErrors && bitset(SRV_OFFER_DSN, features))
+ message("250-DSN");
+ #endif
++#if _FFR_EAI
++ if (bitset(SRV_OFFER_EAI, features))
++ message("250-SMTPUTF8");
++#endif /* _FFR_EAI */
+ if (bitset(SRV_OFFER_ETRN, features))
+ message("250-ETRN");
+ #if SASL
+@@ -2696,6 +2740,18 @@ smtp(nullserver, d_flags, e)
+ if (Errors > 0)
+ sm_exc_raisenew_x(&EtypeQuickAbort, 1);
+
++#if _FFR_EAI
++ if (e->e_smtputf8) {
++ protocol = GET_PROTOCOL();
++ macdefine(&e->e_macro, A_PERM, 'r', protocol);
++ }
++ /* UTF8 addresses are only legal with SMTPUTF8 */
++ if (!e->e_smtputf8 && !addr_is_ascii(e->e_from.q_paddr)) {
++ usrerr("553 5.6.7 That address requires SMTPUTF8");
++ sm_exc_raisenew_x(&EtypeQuickAbort, 1);
++ }
++#endif
++
+ #if SASL
+ # if _FFR_AUTH_PASSING
+ /* set the default AUTH= if the sender didn't */
+@@ -2933,6 +2989,13 @@ smtp(nullserver, d_flags, e)
+ usrerr("501 5.0.0 Missing recipient");
+ goto rcpt_done;
+ }
++#if _FFR_EAI
++ if (!e->e_smtputf8 && !addr_is_ascii(a->q_paddr))
++ {
++ usrerr("553 5.6.7 Address requires SMTPUTF8");
++ goto rcpt_done;
++ }
++#endif
+
+ if (delimptr != NULL && *delimptr != '\0')
+ *delimptr++ = '\0';
+@@ -4820,6 +4883,17 @@ mail_esmtp_args(a, kp, vp, e)
+
+ /* XXX: check whether more characters follow? */
+ }
++#if _FFR_EAI
++ else if (sm_strcasecmp(kp, "smtputf8") == 0)
++ {
++ if (!bitset(SRV_OFFER_EAI, e->e_features))
++ {
++ usrerr("504 5.7.0 Sorry, SMTPUTF8 not supported/enabled");
++ /* NOTREACHED */
++ }
++ e->e_smtputf8 = true;
++ }
++#endif
+ else
+ {
+ usrerr("555 5.5.4 %s parameter unrecognized", kp);
+@@ -5174,6 +5248,9 @@ static struct
+ { 'C', SRV_REQ_SEC },
+ { 'D', SRV_OFFER_DSN },
+ { 'E', SRV_OFFER_ETRN },
++#if _FFR_EAI
++ { 'I', SRV_OFFER_EAI },
++#endif
+ { 'L', SRV_REQ_AUTH },
+ #if PIPELINING
+ # if _FFR_NO_PIPE
+diff --git a/sendmail/usersmtp.c b/sendmail/usersmtp.c
+index 24d38ee..cbc6bb7 100644
+--- sendmail/usersmtp.c.orig
++++ sendmail/usersmtp.c
+@@ -465,6 +465,10 @@ helo_options(line, firstline, m, mci, e)
+ mci->mci_flags |= MCIF_PIPELINED;
+ else if (sm_strcasecmp(line, "verb") == 0)
+ mci->mci_flags |= MCIF_VERB;
++#if _FFR_EAI
++ else if (sm_strcasecmp(line, "smtputf8") == 0)
++ mci->mci_flags |= MCIF_EAI;
++#endif /* _FFR_EAI */
+ #if STARTTLS
+ else if (sm_strcasecmp(line, "starttls") == 0)
+ mci->mci_flags |= MCIF_TLS;
+@@ -2027,6 +2031,19 @@ smtpmailfrom(m, mci, e)
+ return EX_TEMPFAIL;
+ }
+
++#if _FFR_EAI
++ /*
++ ** Abort right away if the message needs SMTPUTF8 and the
++ ** server does not advertise SMTPUTF8.
++ */
++
++ if (e->e_smtputf8 && !bitset(MCIF_EAI, mci->mci_flags)) {
++ usrerrenh("5.6.7", "%s does not support SMTPUTF8", CurHostName);
++ mci_setstat(mci, EX_NOTSTICKY, "5.6.7", NULL);
++ return EX_DATAERR;
++ }
++#endif /* _FFR_EAI */
++
+ /* set up appropriate options to include */
+ if (bitset(MCIF_SIZE, mci->mci_flags) && e->e_msgsize > 0)
+ {
+@@ -2040,6 +2057,14 @@ smtpmailfrom(m, mci, e)
+ bufp = optbuf;
+ }
+
++#if _FFR_EAI
++ if (e->e_smtputf8) {
++ (void) sm_snprintf(bufp, SPACELEFT(optbuf, bufp),
++ " SMTPUTF8");
++ bufp += strlen(bufp);
++ }
++#endif /* _FFR_EAI */
++
+ bodytype = e->e_bodytype;
+ if (bitset(MCIF_8BITMIME, mci->mci_flags))
+ {
diff --git a/mail/sendmail-devel/files/tls-install.sh b/mail/sendmail-devel/files/tls-install.sh
new file mode 100644
index 000000000000..4e93182246d0
--- /dev/null
+++ b/mail/sendmail-devel/files/tls-install.sh
@@ -0,0 +1,93 @@
+#!/bin/sh
+#
+CADIR="${CADIR-${DESTDIR}/etc/mail/certs/CA}"
+FILSEDIR="${FILESDIR-/usr/ports/mail/sendmail/files}"
+REALM=`hostname`
+
+echo "creating: ${CADIR} on ${REALM}"
+for i in certs crl newcerts private ../private
+do
+ if test ! -d "${CADIR}/${i}"
+ then
+ mkdir -p "${CADIR}/${i}"
+ fi
+done
+chmod 0700 "${CADIR}/private" "${CADIR}/../private"
+cd "${CADIR}" || exit 65
+
+if test ! -f openssl.cnf
+then
+ echo "generating: openssl.cnf"
+ sed -e "s=./demoCA=${CADIR}=" /etc/ssl/openssl.cnf > "openssl.cnf"
+fi
+
+if test ! -f "serial"
+then
+ echo "generating: serial"
+ umask 0022
+ echo "01" > "serial"
+fi
+
+if test ! -f "index.txt"
+then
+ echo "generating: index.txt"
+ umask 0022
+ cp /dev/null "index.txt"
+fi
+
+if test ! -f "cacert.pem"
+then
+ echo "generating CA"
+ umask 0077
+ openssl req -new -x509 -config openssl.cnf \
+ -keyout private/cakey.pem \
+ -out cacert.pem
+fi
+
+if test ! -f "../sendmailcert.pem"
+then
+ if test ! -f "../private/sendmailkey.pem"
+ then
+ echo "creating cert signing request"
+ umask 0066
+ openssl req -nodes -new -x509 -config openssl.cnf \
+ -keyout ../private/sendmailkey.pem \
+ -out ../private/sendmailkey.pem
+ fi
+ if test ! -f "newcsr.pem"
+ then
+ echo "self signing cert"
+ umask 0066
+ openssl x509 -x509toreq \
+ -in ../private/sendmailkey.pem \
+ -signkey ../private/sendmailkey.pem \
+ -out newcsr.pem
+ fi
+ if test ! -f "sendmailcert.pem"
+ then
+ echo "signing cert"
+ openssl ca -config openssl.cnf -policy policy_anything \
+ -out ../sendmailcert.pem \
+ -infiles newcsr.pem
+ rm -f newcsr.pem
+ fi
+fi
+
+sed 's/^X//' << 'END-of-files/tls.m4'
+X# links:
+X# http://www.sendmail.org/~gshapiro/
+X# http://www.sendmail.org/~ca/email/starttls.html
+X# http://www.ofb.net/~jheiss/sendmail/tlsandrelay.shtml
+X#
+X# You may need to add this to your sendmail.mc file:
+X
+Xdefine(`confCACERT_PATH', `MAIL_SETTINGS_DIR`'certs/verify')dnl
+Xdefine(`confCACERT', `MAIL_SETTINGS_DIR`'certs/chain.pem')dnl
+Xdefine(`confSERVER_CERT', `MAIL_SETTINGS_DIR`'certs/sendmailcert.pem')dnl
+Xdefine(`confSERVER_KEY', `MAIL_SETTINGS_DIR`'certs/private/sendmailkey.pem')dnl
+Xdefine(`confCLIENT_CERT', `MAIL_SETTINGS_DIR`'certs/sendmailcert.pem')dnl
+Xdefine(`confCLIENT_KEY', `MAIL_SETTINGS_DIR`'certs/private/sendmailkey.pem')dnl
+Xdefine(`confDH_PARAMETERS', `MAIL_SETTINGS_DIR`'certs/dhparam')dnl
+X
+END-of-files/tls.m4
+exit
diff --git a/mail/sendmail-devel/pkg-descr b/mail/sendmail-devel/pkg-descr
new file mode 100644
index 000000000000..21e2ecf498f9
--- /dev/null
+++ b/mail/sendmail-devel/pkg-descr
@@ -0,0 +1,11 @@
+Sendmail implements a general purpose internetwork mail routing facility
+under the UNIX operating system. It is not tied to any one transport
+protocol - its function may be likened to a crossbar switch, relaying
+messages from one domain into another. In the process, it can do a limited
+amount of message header editing to put the message into a format that is
+appropriate for the receiving domain. All of this is done under the
+control of a configuration file.
+
+Sendmail is a trademark of Sendmail, Inc.
+
+WWW: http://www.sendmail.org/
diff --git a/mail/sendmail-devel/pkg-message b/mail/sendmail-devel/pkg-message
new file mode 100644
index 000000000000..02cf98c6d1d9
--- /dev/null
+++ b/mail/sendmail-devel/pkg-message
@@ -0,0 +1,33 @@
+---------------------------------------------------
+
+you should add in /etc/make.conf:
+SENDMAIL_CF_DIR= %%PREFIX%%/share/sendmail/cf
+
+To deliver all local mail to your mailhub, edit the last line of submit.mc:
+FEATURE(`msp','[mailhub.do.main]`)dnl
+
+To update your configuration look at %%PREFIX%%/share/sendmail/cf/README.
+---------------------------------------------------
+To use the binaries supplied by the port you should add the following lines
+to your sendmail.mc file before any mailer or feature definition:
+
+define(`confEBINDIR', `%%PREFIX%%/libexec')dnl
+define(`UUCP_MAILER_PATH', `%%LOCALBASE%%/bin/uux')dnl
+
+---------------------------------------------------
+To activate sendmail as your default mailer, call the target 'mailer.conf':
+$ cd %%PORTSDIR%%/mail/sendmail && make mailer.conf
+
+Your '%%PREFIX%%/etc/mail/mailer.conf' should look like this:
+#
+# Execute the "real" sendmail program, named /usr/libexec/sendmail/sendmail
+#
+sendmail %%PREFIX%%/sbin/sendmail
+send-mail %%PREFIX%%/sbin/sendmail
+mailq %%PREFIX%%/sbin/sendmail
+newaliases %%PREFIX%%/sbin/sendmail
+hoststat %%PREFIX%%/sbin/sendmail
+purgestat %%PREFIX%%/sbin/sendmail
+
+You may also need to update /etc/rc.conf.
+---------------------------------------------------
diff --git a/mail/sendmail-devel/pkg-plist b/mail/sendmail-devel/pkg-plist
new file mode 100644
index 000000000000..aab34346deca
--- /dev/null
+++ b/mail/sendmail-devel/pkg-plist
@@ -0,0 +1,35 @@
+@comment cannot use @dir because this is home directory of smmsp
+@postexec chmod 770 /var/spool/clientmqueue
+bin/hoststat
+bin/mailq
+bin/newaliases
+bin/purgestat
+bin/rmail
+bin/vacation
+etc/mail/mailer.conf.sendmail
+libexec/mail.local
+libexec/smrsh
+%%MANPREFIX%%man/man1/mailq.1.gz
+%%MANPREFIX%%man/man1/newaliases.1.gz
+%%MANPREFIX%%man/man1/vacation.1.gz
+%%MANPREFIX%%man/man5/aliases.5.gz
+%%MANPREFIX%%man/man8/sendmail.8.gz
+%%MANPREFIX%%man/man8/mailstats.8.gz
+%%MANPREFIX%%man/man8/makemap.8.gz
+%%MANPREFIX%%man/man8/praliases.8.gz
+%%MANPREFIX%%man/man8/smrsh.8.gz
+%%MANPREFIX%%man/man8/mail.local.8.gz
+%%MANPREFIX%%man/man8/rmail.8.gz
+%%MANPREFIX%%man/man8/editmap.8.gz
+sbin/editmap
+sbin/mailstats
+sbin/makemap
+sbin/praliases
+@(root,smmsp,2555) sbin/sendmail
+share/sendmail/helpfile
+%%PORTDOCS%%%%DOCSDIR%%/op.ps
+%%PORTDOCS%%%%DOCSDIR%%/op.txt
+%%PORTDOCS%%%%DOCSDIR%%/DEVTOOLS
+%%PORTDOCS%%%%DOCSDIR%%/SENDMAIL
+%%PORTDOCS%%%%DOCSDIR%%/MAIL.LOCAL
+%%PORTDOCS%%%%DOCSDIR%%/SMRSH