aboutsummaryrefslogtreecommitdiff
path: root/mail/exim
diff options
context:
space:
mode:
authorOliver Eikemeier <eik@FreeBSD.org>2004-10-11 23:48:25 +0000
committerOliver Eikemeier <eik@FreeBSD.org>2004-10-11 23:48:25 +0000
commit25bef59d893f3e009a3077be43fb0b952e5a3f7d (patch)
tree4bca9e1d9973bbc89b5a41ec766a58bdbdc628b4 /mail/exim
parent92569e4264b192d80a0d62ea72b632f08cc17a3e (diff)
downloadports-25bef59d893f3e009a3077be43fb0b952e5a3f7d.tar.gz
ports-25bef59d893f3e009a3077be43fb0b952e5a3f7d.zip
Notes
Diffstat (limited to 'mail/exim')
-rw-r--r--mail/exim/Makefile170
-rw-r--r--mail/exim/distinfo11
-rw-r--r--mail/exim/files/150.exim-tidydb.sh11
-rw-r--r--mail/exim/files/460.exim-mail-rejects.sh8
-rw-r--r--mail/exim/files/exim.sh9
-rw-r--r--mail/exim/files/xpatch-exiscan2270
-rw-r--r--mail/exim/options23
-rw-r--r--mail/exim/pkg-plist4
8 files changed, 322 insertions, 184 deletions
diff --git a/mail/exim/Makefile b/mail/exim/Makefile
index 3ae510e975a0..a5e776b190da 100644
--- a/mail/exim/Makefile
+++ b/mail/exim/Makefile
@@ -6,13 +6,15 @@
#
PORTNAME= exim
-PORTVERSION= ${EXIM_VERSION}+${EXISCAN_VERSION}
+PORTVERSION?= ${EXIM_VERSION}+${EXISCAN_VERSION}
PORTREVISION= 0
CATEGORIES= mail
-MASTER_SITES= ${MASTER_SITE_EXIM}
-MASTER_SITE_SUBDIR= exim4
+MASTER_SITES= ${MASTER_SITE_EXIM:S/$/:exim/}
+MASTER_SITE_SUBDIR= exim4/:exim
DISTNAME= ${PORTNAME}-${EXIM_VERSION}
+DISTFILES= ${DISTNAME}${EXTRACT_SUFX}:exim FAQ.txt.bz2:exim
DIST_SUBDIR= exim
+EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX}
MAINTAINER= eik@FreeBSD.org
COMMENT?= High performance MTA for Unix systems on the Internet
@@ -27,14 +29,24 @@ PATCH_DIST_STRIP= -p1
EXTRA_PATCHES+= ${PATCHDIR}/xpatch-exiscan2
.endif
-EXIM_VERSION= 4.42
-EXISCAN_VERSION=27
+.if defined(WITH_SA_EXIM)
+MASTER_SITES+= http://marc.merlins.org/linux/exim/files/:sa_exim \
+ ${MASTER_SITE_SOURCEFORGE_EXTENDED:S/$/:sa_exim/}
+MASTER_SITE_SUBDIR+= sa-exim/:sa_exim
+DISTFILES+= sa-exim-${SA_EXIM_VERSION}.tar.gz:sa_exim
+.endif
+
+EXIM_VERSION= 4.43
+EXISCAN_VERSION=28
+SA_EXIM_VERSION=4.1
+
+IGNOREFILES= FAQ.txt.bz2
.if !defined(EXIMON_ONLY)
.if defined(PKGNAMESUFFIX)
CONFLICTS+= ${PKGNAMEPREFIX}${PORTNAME}-4.*
.endif
-.for suffix in -ldap2 -mysql -postgresql
+.for suffix in -ldap2 -mysql -postgresql -sa-exim
.if !defined(PKGNAMESUFFIX) || ${PKGNAMESUFFIX} != ${suffix}
CONFLICTS+= ${PKGNAMEPREFIX}${PORTNAME}${suffix}-4.*
.endif
@@ -64,7 +76,7 @@ MAN8= exim.8
NO_INSTALL_MANPAGES= yes
.endif
-PORTDOC_BASE= ACKNOWLEDGMENTS NOTICE README.UPDATING
+PORTDOC_BASE= ACKNOWLEDGMENTS FAQ NOTICE README.UPDATING
PORTDOC_FILES= ChangeLog Exim3.upgrade Exim4.upgrade NewStuff \
OptionLists.txt README README.SIEVE dbm.discuss.txt \
filter.txt pcrepattern.txt pcretest.txt spec.txt
@@ -101,7 +113,8 @@ SED_SCRIPT= -e 's,%%PREFIX%%,${PREFIX},g' \
PLIST_SUB= EXIM_VERSION="${EXIM_VERSION}-${PORTREVISION}" \
EXIM_USER=${EXIM_USER} \
- EXIM_GROUP=${EXIM_GROUP}
+ EXIM_GROUP=${EXIM_GROUP} \
+ LOGDIR="${LOGDIR}"
# If WITH_EXIMON is defined, the eximon monitor, which requires X,
# will be made a dependency. Note that using WITH_EXIMON will cause
@@ -112,6 +125,10 @@ PLIST_SUB= EXIM_VERSION="${EXIM_VERSION}-${PORTREVISION}" \
# email content scanner support.
#WITHOUT_EXISCAN= yes
+# If WITH_SA_EXIM is defined, exim will be built with the SA-Exim
+# local_scan function (<http://marc.merlins.org/linux/exim/sa.html>)
+#WITH_SA_EXIM= yes
+
# Define WITH_TCP_WRAPPERS, WITH_MYSQL, and WITH_PGSQL to link against
# libwrap, libmysqlclient and libpq respectively. Define
# WITH_SASLAUTHD to enable use of the Cyrus SASL authentication daemon.
@@ -175,8 +192,14 @@ WITH_DEFAULT_CHARSET?= ISO-8859-1
#WITHOUT_AUTH_PLAINTEXT= yes
#WITHOUT_AUTH_SPA= yes
#
+# Enable support for authenticating via the Cyrus SASL library
+#WITH_AUTH_SASL= yes
+#
# Enable built-in Exim support for radius (RFC 2865) authentication
+# RADIUS_TYPE can either be RADLIB (to use the radius library supplied
+# with FreeBSD) or RADIUSCLIENT (to use port net/radiusclient)
#WITH_AUTH_RADIUS= yes
+#WITH_RADIUS_TYPE= RADLIB
#
# Disable built-in Exim support for additional mailbox formats.
#WITHOUT_MAILDIR= yes
@@ -204,12 +227,13 @@ WITH_DEFAULT_CHARSET?= ISO-8859-1
#WITH_WISHLIST= yes
#
# Enable Sender Policy Framework (SPF) checking in exiscan-acl
-#
#WITH_SPF= yes
#
# Enable Sender Rewriting Scheme (SRS)
-#
#WITH_SRS= yes
+#
+# Use the readline(3) library for the test expansion option
+#WITH_READLINE= yes
# You should not need to fiddle with anything below this point.
@@ -232,26 +256,26 @@ SEDLIST= -e 's,XX_PREFIX_XX,${PREFIX},' \
-e 's,XX_DEFAULT_CHARSET_XX,${WITH_DEFAULT_CHARSET},'
.if defined(WITH_EXIMON)
-SEDLIST+= -e 's,^\# EXIM_MONITOR=,EXIM_MONITOR=,'
+SEDLIST+= -e 's,^\# (EXIM_MONITOR=),\1,'
PLIST_SUB+= EXIMON=""
.else
PLIST_SUB+= EXIMON="@comment "
.endif
.if !defined(WITHOUT_TLS)
-SEDLIST+= -e 's,^\# SUPPORT_TLS=,SUPPORT_TLS=,'
+SEDLIST+= -e 's,^\# (SUPPORT_TLS=),\1,'
USE_OPENSSL= yes
.else
-SEDLIST+= -e 's,^TLS_LIBS=,\#TLS_LIBS=,'
+SEDLIST+= -e 's,^(TLS_LIBS=),\# \1,'
.endif
.if !defined(WITHOUT_PERL)
-SEDLIST+= -e 's,^\# EXIM_PERL=,EXIM_PERL=,'
+SEDLIST+= -e 's,^\# (EXIM_PERL=),\1,'
.endif
.if defined(WITH_TCP_WRAPPERS)
SEDLIST+= -e 's,XX_TCP_WRAPPERS_LIBS_XX,-lwrap,' \
- -e 's,^\# USE_TCP_WRAPPERS=,USE_TCP_WRAPPERS=,'
+ -e 's,^\# (USE_TCP_WRAPPERS=),\1,'
.else
SEDLIST+= -e 's,XX_TCP_WRAPPERS_LIBS_XX,,'
.endif
@@ -272,10 +296,10 @@ LDAP_LIB_TYPE= OPENLDAP2
SEDLIST+= -e 's,XX_LDAP_LIBS_XX,-L${LOCALBASE}/lib -llber -lldap,' \
-e 's,XX_LDAP_INCLUDE_XX,-I${LOCALBASE}/include,' \
-e 's,XX_LDAP_TYPE_XX,${LDAP_LIB_TYPE},' \
- -e 's,^\# LOOKUP_LDAP=,LOOKUP_LDAP=,'
+ -e 's,^\# (LOOKUP_LDAP=),\1,'
.else
SEDLIST+= -e 's,XX_LDAP_[^ ]*_XX,,' \
- -e 's,^LDAP_LIB_TYPE=,\#LDAP_LIB_TYPE=,'
+ -e 's,^(LDAP_LIB_TYPE=),\# \1,'
.endif
.if defined(DB_LIB_VERSION)
@@ -285,7 +309,7 @@ BROKEN= deprecated option DB_LIB_VERSION used, use WITH_BDB_VER
.if ${WITH_BDB_VER} == 1
DB_LIBS=
DB_INCLUDES=
-SEDLIST+= -e 's,^DBMLIB=,\#DBMLIB=,'
+SEDLIST+= -e 's,^(DBMLIB=),\# \1,'
.elif (${WITH_BDB_VER} == 4)
DB_LIBS= -L${LOCALBASE}/lib -ldb4
DB_INCLUDES= -I${LOCALBASE}/include/db4
@@ -314,45 +338,61 @@ WANT_MYSQL_VER= ${WITH_MYSQL_VER}
USE_MYSQL= yes
SEDLIST+= -e 's,XX_MYSQL_LIBS_XX,-L${LOCALBASE}/lib/mysql -lmysqlclient,' \
-e 's,XX_MYSQL_INCLUDE_XX,-I${LOCALBASE}/include/mysql,' \
- -e 's,^\# LOOKUP_MYSQL=,LOOKUP_MYSQL=,'
+ -e 's,^\# (LOOKUP_MYSQL=),\1,'
.else
SEDLIST+= -e 's,XX_MYSQL_[^ ]*_XX,,'
.endif
.if defined(WITH_SASLAUTHD)
RUN_DEPENDS+= ${LOCALBASE}/sbin/saslauthd:${PORTSDIR}/security/cyrus-sasl2-saslauthd
-SEDLIST+= -e 's,^\# CYRUS_SASLAUTHD_SOCKET=,CYRUS_SASLAUTHD_SOCKET=,'
+SEDLIST+= -e 's,^\# (CYRUS_SASLAUTHD_SOCKET=),\1,'
.endif
.if defined(WITH_PWCHECK)
RUN_DEPENDS+= ${LOCALBASE}/sbin/pwcheck:${PORTSDIR}/security/cyrus-sasl
-SEDLIST+= -e 's,^\# SUPPORT_CYRUS_PWCHECK=,SUPPORT_CYRUS_PWCHECK=,' \
- -e 's,^\# CYRUS_PWCHECK_SOCKET=,CYRUS_PWCHECK_SOCKET=,'
+SEDLIST+= -e 's,^\# (SUPPORT_CYRUS_PWCHECK=),\1,' \
+ -e 's,^\# (CYRUS_PWCHECK_SOCKET=),\1,'
.endif
.if !defined(WITHOUT_PAM)
SEDLIST+= -e 's,XX_PAM_LIBS_XX,-lpam,' \
- -e 's,^\# SUPPORT_PAM=,SUPPORT_PAM=,'
+ -e 's,^\# (SUPPORT_PAM=),\1,'
.else
SEDLIST+= -e 's,XX_PAM_LIBS_XX,,'
.endif
.if !defined(WITHOUT_AUTH_CRAM_MD5)
-SEDLIST+= -e 's,^\# AUTH_CRAM_MD5=,AUTH_CRAM_MD5=,'
+SEDLIST+= -e 's,^\# (AUTH_CRAM_MD5=),\1,'
.endif
.if !defined(WITHOUT_AUTH_PLAINTEXT)
-SEDLIST+= -e 's,^\# AUTH_PLAINTEXT=,AUTH_PLAINTEXT=,'
+SEDLIST+= -e 's,^\# (AUTH_PLAINTEXT=),\1,'
.endif
.if !defined(WITHOUT_AUTH_SPA)
-SEDLIST+= -e 's,^\# AUTH_SPA=,AUTH_SPA=,'
+SEDLIST+= -e 's,^\# (AUTH_SPA=),\1,'
+.endif
+
+.if defined(WITH_AUTH_SASL)
+LIB_DEPENDS= sasl2.2:${PORTSDIR}/security/cyrus-sasl2
+SEDLIST+= -e 's,^\# (AUTH_CYRUS_SASL=),\1,' \
+ -e 's,^\# (AUTH_LIBS=),\1,'
.endif
.if defined(WITH_AUTH_RADIUS)
+WITH_RADIUS_TYPE?= RADLIB
+.if ${WITH_RADIUS_TYPE:L} == radlib
+SEDLIST+= -e 's,XX_RADIUS_LIBS_XX,-lradius,' \
+ -e 's,^\# (RADIUS_CONFIG_FILE=).*,\1/etc/radius.conf,' \
+ -e 's,^\# (RADIUS_LIB_TYPE=).*,\1RADLIB,'
+.elif ${WITH_RADIUS_TYPE:L} == radiusclient
LIB_DEPENDS+= radiusclient.0:${PORTSDIR}/net/radiusclient
SEDLIST+= -e 's,XX_RADIUS_LIBS_XX,-L${LOCALBASE}/lib -lradiusclient,' \
- -e 's,^\# RADIUS_CONFIG_FILE=,RADIUS_CONFIG_FILE=${LOCALBASE},'
+ -e 's,^\# (RADIUS_CONFIG_FILE=).*,\1${LOCALBASE}/radiusclient.conf,' \
+ -e 's,^\# (RADIUS_LIB_TYPE=).*,\1RADIUSCLIENT,'
+.else
+IGNORE= WITH_RADIUS_TYPE must be either RADLIB or RADIUSCLIENT
+.endif
.else
SEDLIST+= -e 's,XX_RADIUS_LIBS_XX,,'
.endif
@@ -367,59 +407,59 @@ POSTGRESQL_PORT?= databases/postgresql7
LIB_DEPENDS+= pq.3:${PORTSDIR}/${POSTGRESQL_PORT}
SEDLIST+= -e 's,XX_PGSQL_LIBS_XX,-L${LOCALBASE}/lib -lpq,' \
-e 's,XX_PGSQL_INCLUDE_XX,-I${LOCALBASE}/include/pgsql,' \
- -e 's,^\# LOOKUP_PGSQL=,LOOKUP_PGSQL=,'
+ -e 's,^\# (LOOKUP_PGSQL=),\1,'
.else
SEDLIST+= -e 's,XX_PGSQL_[^ ]*_XX,,'
.endif
.if !defined(WITH_PGSQL) && !defined(WITH_MYSQL) && !defined(LDAP_LIB_TYPE) && \
${WITH_BDB_VER} == 1
-SEDLIST+= -e 's,^LOOKUP_LIBS=,\#LOOKUP_LIBS=,' \
- -e 's,^LOOKUP_INCLUDE=,\#LOOKUP_INCLUDE=,'
+SEDLIST+= -e 's,^(LOOKUP_LIBS=),\# \1,' \
+ -e 's,^(LOOKUP_INCLUDE=),\# \1,'
.endif
.if !defined(WITHOUT_DNSDB)
-SEDLIST+= -e 's,^\# LOOKUP_DNSDB=,LOOKUP_DNSDB=,'
+SEDLIST+= -e 's,^\# (LOOKUP_DNSDB=),\1,'
.endif
.if !defined(WITHOUT_MAILDIR)
-SEDLIST+= -e 's,^\# SUPPORT_MAILDIR=,SUPPORT_MAILDIR=,'
+SEDLIST+= -e 's,^\# (SUPPORT_MAILDIR=),\1,'
.endif
.if !defined(WITHOUT_MAILSTORE)
-SEDLIST+= -e 's,^\# SUPPORT_MAILSTORE=,SUPPORT_MAILSTORE=,'
+SEDLIST+= -e 's,^\# (SUPPORT_MAILSTORE=),\1,'
.endif
.if !defined(WITHOUT_MBX)
-SEDLIST+= -e 's,^\# SUPPORT_MBX=,SUPPORT_MBX=,'
+SEDLIST+= -e 's,^\# (SUPPORT_MBX=),\1,'
.endif
.if !defined(WITHOUT_CDB)
-SEDLIST+= -e 's,^\# LOOKUP_CDB=,LOOKUP_CDB=,'
+SEDLIST+= -e 's,^\# (LOOKUP_CDB=),\1,'
.endif
.if !defined(WITHOUT_DSEARCH)
-SEDLIST+= -e 's,^\# LOOKUP_DSEARCH=,LOOKUP_DSEARCH=,'
+SEDLIST+= -e 's,^\# (LOOKUP_DSEARCH=),\1,'
.endif
.if defined(WITHOUT_LSEARCH)
-SEDLIST+= -e 's,^LOOKUP_LSEARCH=,\#LOOKUP_LSEARCH=,'
+SEDLIST+= -e 's,^(LOOKUP_LSEARCH=),\# \1,'
.endif
.if !defined(WITHOUT_NIS)
-SEDLIST+= -e 's,^\# LOOKUP_NIS=,LOOKUP_NIS=,'
+SEDLIST+= -e 's,^\# (LOOKUP_NIS=),\1,'
.endif
.if !defined(WITHOUT_PASSWD)
-SEDLIST+= -e 's,^\# LOOKUP_PASSWD=,LOOKUP_PASSWD=,'
+SEDLIST+= -e 's,^\# (LOOKUP_PASSWD=),\1,'
.endif
.if !defined(WITHOUT_LMTP)
-SEDLIST+= -e 's,^\# TRANSPORT_LMTP=,TRANSPORT_LMTP=,'
+SEDLIST+= -e 's,^\# (TRANSPORT_LMTP=),\1,'
.endif
.if defined(WITHOUT_ALT_CONFIG_PREFIX)
-SEDLIST+= -e 's,^ALT_CONFIG_PREFIX=,\# ALT_CONFIG_PREFIX=,'
+SEDLIST+= -e 's,^(ALT_CONFIG_PREFIX=),\# \1,'
.endif
.if defined(WITH_SPF) && !defined(WITHOUT_EXISCAN)
@@ -440,6 +480,17 @@ SEDLIST+= -e 's,XX_SRS_FLAGS_XX,,' \
-e 's,XX_SRS_LIBS_XX,,'
.endif
+.if defined(WITH_SA_EXIM)
+RUN_DEPENDS+= ${LOCALBASE}/bin/spamc:${PORTSDIR}/mail/p5-Mail-SpamAssassin
+PLIST_SUB+= SA_EXIM=""
+.else
+PLIST_SUB+= SA_EXIM="@comment "
+.endif
+
+.if defined(WITH_READLINE)
+SEDLIST+= -e 's,^\# (USE_READLINE=),\1,'
+.endif
+
.include <bsd.port.pre.mk>
.if defined(EXIMON_ONLY) && ${MASTERDIR} == ${PKGDIR}
@@ -471,7 +522,7 @@ WITHOUT_IPV6= yes
.endif
.if !defined(WITHOUT_IPV6)
-SEDLIST+= -e 's,^\# HAVE_IPV6=,HAVE_IPV6=,'
+SEDLIST+= -e 's,^\# (HAVE_IPV6=),\1,'
.endif
pre-everything::
@@ -483,19 +534,39 @@ pre-everything::
@${ECHO} ''
.endif
+post-extract:
+ @${BZCAT} ${_DISTDIR}/FAQ.txt.bz2 > ${WRKSRC}/FAQ
+.if defined(WITH_SA_EXIM)
+ @cd ${WRKDIR} && ${GZIP_CMD} ${EXTRACT_BEFORE_ARGS} ${_DISTDIR}/sa-exim-${SA_EXIM_VERSION}.tar.gz ${EXTRACT_AFTER_ARGS}
+.endif
+
do-configure:
@${MKDIR} ${WRKSRC}/Local
- @${SED} ${SEDLIST} ${WRKSRC}/src/EDITME > ${WRKSRC}/Local/Makefile
+ @${SED} -E ${SEDLIST} ${WRKSRC}/src/EDITME > ${WRKSRC}/Local/Makefile
.if defined(WITH_EXIMON)
@${CP} ${WRKSRC}/exim_monitor/EDITME ${WRKSRC}/Local/eximon.conf
.endif
@[ ! -f ${PKGDIR}/pkg-install ] || ${SED} ${SED_SCRIPT} ${PKGDIR}/pkg-install > ${PKGINSTALL}
- @${REINPLACE_CMD} ${SEDLIST} ${WRKSRC}/src/configure.default
+ @${REINPLACE_CMD} -E ${SEDLIST} ${WRKSRC}/src/configure.default
@${REINPLACE_CMD} -e 's/"(Exim $$version_number)\\n\\t"/"(Exim $$version_number (${OPSYS}))\\n\\t"/' \
${WRKSRC}/src/globals.c
+ @${REINPLACE_CMD} -e 's/Exim version %s \(#%s \)\{0,1\}/&(${OPSYS} ${OSREL}) /' ${WRKSRC}/src/exim.c
@${REINPLACE_CMD} -e 's/^#include "cnumber\.h"$$/${PORTREVISION}/' ${WRKSRC}/src/version.c
- @${REINPLACE_CMD} -e 's/^PERL_COMMAND=.*/PERL_COMMAND=${PERL:S,/,\/,g}/' \
- -e 's/^CC=.*/CC=${CC:S,/,\/,g}/' ${WRKSRC}/OS/Makefile-Default
+ @${REINPLACE_CMD} -E -e 's/^(PERL_COMMAND=).*/\1${PERL:S,/,\/,g}/' \
+ -e 's/^(CC=).*/\1${CC:S,/,\/,g}/' ${WRKSRC}/OS/Makefile-Default
+.if defined(WITH_SA_EXIM)
+ @${REINPLACE_CMD} -E -e 's/^(LOCAL_SCAN_SOURCE=).*/\1Local\/sa-exim.c/' \
+ ${WRKSRC}/OS/Makefile-Default
+ @${CP} ${WRKDIR}/sa-exim-${SA_EXIM_VERSION}/sa-exim.c ${WRKSRC}/Local
+ @{ \
+ ${ECHO_CMD} "char *version=\"${SA_EXIM_VERSION}\";"; \
+ ${ECHO_CMD} "#define DLOPEN_LOCAL_SCAN 1"; \
+ ${ECHO_CMD} "#define SPAMC_LOCATION \"${LOCALBASE}/bin/spamc\""; \
+ ${ECHO_CMD} "#define SPAMASSASSIN_CONF \"${PREFIX}/etc/exim/sa-exim.conf\""; \
+ } > ${WRKSRC}/Local/sa-exim.h
+ @${REINPLACE_CMD} -e 's,/usr/bin/spamc,${LOCALBASE}/bin/spamc,' \
+ ${WRKDIR}/sa-exim-${SA_EXIM_VERSION}/sa-exim.conf
+.endif
@(cd ${WRKSRC}; ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} configure)
post-build:
@@ -545,6 +616,13 @@ post-install:
@${INSTALL_SCRIPT} ${WRKSRC}/build-${OPSYS}-${ARCH}/${example} ${DESTDIR}${EXAMPLESDIR}
.endfor
.endif
+.if defined(WITH_SA_EXIM)
+ @${INSTALL_DATA} ${WRKDIR}/sa-exim-${SA_EXIM_VERSION}/sa-exim.conf \
+ ${DESTDIR}${PREFIX}/etc/exim/sa-exim.conf.default
+ @[ -f ${DESTDIR}${PREFIX}/etc/exim/sa-exim.conf ] || \
+ ${CP} ${DESTDIR}${PREFIX}/etc/exim/sa-exim.conf.default \
+ ${DESTDIR}${PREFIX}/etc/exim/sa-exim.conf
+.endif
@${CAT} ${PKGMESSAGE}
@${SETENV} PKG_PREFIX="${PREFIX}" PKG_DESTDIR="${DESTDIR}" ${SH} ${PKGINSTALL} ${PKGNAME} POST-INSTALL
diff --git a/mail/exim/distinfo b/mail/exim/distinfo
index acc24a5b31e4..50797da93f87 100644
--- a/mail/exim/distinfo
+++ b/mail/exim/distinfo
@@ -1,4 +1,7 @@
-MD5 (exim/exim-4.42.tar.bz2) = eb6a06e70a78a03200b4e4aefbb7b0aa
-SIZE (exim/exim-4.42.tar.bz2) = 1360728
-MD5 (exim/exiscan-acl-4.42-27.patch.bz2) = bc81a47009d24433a282e5c3a668fcb3
-SIZE (exim/exiscan-acl-4.42-27.patch.bz2) = 83039
+MD5 (exim/exim-4.43.tar.bz2) = f8f646d4920660cb5579becd9265a3bf
+SIZE (exim/exim-4.43.tar.bz2) = 1388183
+MD5 (exim/sa-exim-4.1.tar.gz) = e2ab67741daa08f7df5bc2152bc4aef5
+SIZE (exim/sa-exim-4.1.tar.gz) = 59441
+MD5 (exim/exiscan-acl-4.43-28.patch.bz2) = b2c629ee8f7edf7c0641e3cff4a602f6
+SIZE (exim/exiscan-acl-4.43-28.patch.bz2) = 83405
+MD5 (exim/FAQ.txt.bz2) = IGNORE
diff --git a/mail/exim/files/150.exim-tidydb.sh b/mail/exim/files/150.exim-tidydb.sh
index 5239368204ee..1fbfb8388f70 100644
--- a/mail/exim/files/150.exim-tidydb.sh
+++ b/mail/exim/files/150.exim-tidydb.sh
@@ -14,17 +14,18 @@ if [ -r /etc/defaults/periodic.conf ]; then
source_periodic_confs
fi
-exim_tidydb_enable=${exim_tidydb_enable:-"YES"}
-exim_tidydb=${exim_tidydb:-"/usr/local/sbin/exim_tidydb"}
-exim_dbdir=${exim_dbdir:-"/var/spool/exim"}
+: ${exim_tidydb_enable="YES"}
+: ${exim_tidydb="%%PREFIX%%/sbin/exim_tidydb"}
+: ${exim_dbdir="/var/spool/exim"}
case "$exim_tidydb_enable" in
[Yy][Ee][Ss])
echo ""
echo "Tidying Exim hints databases:"
for db in "$exim_dbdir"/db/*.lockfile; do
- echo ""
- "$exim_tidydb" "$exim_dbdir" `basename $db .lockfile`
+ [ "$db" = "$exim_dbdir/db/*.lockfile" ] && continue
+ echo
+ "$exim_tidydb" "$exim_dbdir" `basename "$db" .lockfile`
done
rc=1;;
diff --git a/mail/exim/files/460.exim-mail-rejects.sh b/mail/exim/files/460.exim-mail-rejects.sh
index 4cffe0737d2a..3a680875b638 100644
--- a/mail/exim/files/460.exim-mail-rejects.sh
+++ b/mail/exim/files/460.exim-mail-rejects.sh
@@ -16,9 +16,9 @@ then
source_periodic_confs
fi
-exim_status_mail_rejects_enable=${exim_status_mail_rejects_enable:-"YES"}
-exim_status_mail_rejects_logs=${exim_status_mail_rejects_logs:-2}
-exim_rejectlog=${exim_rejectlog:-"%%LOGDIR%%/rejectlog"}
+: ${exim_status_mail_rejects_enable="YES"}
+: ${exim_status_mail_rejects_logs=2}
+: ${exim_rejectlog="%%LOGDIR%%/rejectlog"}
case "$exim_status_mail_rejects_enable" in
[Yy][Ee][Ss])
@@ -34,7 +34,7 @@ case "$exim_status_mail_rejects_enable" in
rc=2
else
echo
- echo Checking for rejected mail:
+ echo "Checking for rejected mail:"
start=`date -v-1d '+%Y-%m-%d'`
n=$(($exim_status_mail_rejects_logs - 2))
diff --git a/mail/exim/files/exim.sh b/mail/exim/files/exim.sh
index 58254cfab384..a71611712716 100644
--- a/mail/exim/files/exim.sh
+++ b/mail/exim/files/exim.sh
@@ -55,10 +55,9 @@ stop_postcmd()
rm -f $pidfile
}
-# set defaults
-
-exim_enable=${exim_enable:-"NO"}
-exim_flags=${exim_flags:-"-bd -q30m"}
-
+# read settings, set default values
load_rc_config $name
+: ${exim_enable="NO"}
+: ${exim_flags="-bd -q30m"}
+
run_rc_command "$1"
diff --git a/mail/exim/files/xpatch-exiscan2 b/mail/exim/files/xpatch-exiscan2
index 925453a892bc..534f6b8dbc7b 100644
--- a/mail/exim/files/xpatch-exiscan2
+++ b/mail/exim/files/xpatch-exiscan2
@@ -1,7 +1,7 @@
diff -u scripts/MakeLinks scripts/MakeLinks
--- scripts/MakeLinks Sat Jul 17 11:12:00 2004
+++ scripts/MakeLinks Sat Jul 17 11:34:48 2004
-@@ -185,7 +185,7 @@
+@@ -187,7 +187,7 @@
ln -s ../src/osfunctions.h osfunctions.h
ln -s ../src/spam.h spam.h
ln -s ../src/spf.h spf.h
@@ -13,7 +13,7 @@ diff -u scripts/MakeLinks scripts/MakeLinks
diff -u src/expand.c src/expand.c
--- src/expand.c Sat Jul 17 11:12:00 2004
+++ src/expand.c Sat Jul 17 11:37:42 2004
-@@ -452,8 +452,6 @@
+@@ -454,8 +454,6 @@
#endif
{ "spool_directory", vtype_stringptr, &spool_directory },
#ifdef SRS
@@ -25,7 +25,7 @@ diff -u src/expand.c src/expand.c
diff -u src/globals.c src/globals.c
--- src/globals.c Sat Jul 17 11:12:00 2004
+++ src/globals.c Sat Jul 17 11:38:52 2004
-@@ -975,9 +975,12 @@
+@@ -987,9 +987,12 @@
uschar *spool_directory = US SPOOL_DIRECTORY
"\0<--------------Space to patch spool_directory->";
#ifdef SRS
@@ -44,7 +44,7 @@ diff -u src/globals.c src/globals.c
diff -u src/globals.h src/globals.h
--- src/globals.h Sat Jul 17 11:12:00 2004
+++ src/globals.h Sat Jul 17 11:43:06 2004
-@@ -590,13 +590,16 @@
+@@ -596,13 +596,16 @@
#endif
extern uschar *spool_directory; /* Name of spool directory */
#ifdef SRS
@@ -71,7 +71,7 @@ diff -u src/globals.h src/globals.h
diff -u src/readconf.c src/readconf.c
--- src/readconf.c Sat Jul 17 11:12:00 2004
+++ src/readconf.c Sat Jul 17 11:44:21 2004
-@@ -321,7 +321,12 @@
+@@ -325,7 +325,12 @@
{ "split_spool_directory", opt_bool, &split_spool_directory },
{ "spool_directory", opt_stringptr, &spool_directory },
#ifdef SRS
@@ -88,29 +88,32 @@ diff -u src/readconf.c src/readconf.c
diff -u src/routers/redirect.c src/routers/redirect.c
--- src/routers/redirect.c Sat Jul 17 11:12:00 2004
+++ src/routers/redirect.c Sat Jul 17 12:26:47 2004
-@@ -98,11 +98,7 @@
+@@ -98,13 +98,7 @@
(void *)offsetof(redirect_router_options_block, skip_syntax_errors) },
#ifdef SRS
{ "srs", opt_stringptr,
- (void *)offsetof(redirect_router_options_block, srs) },
+- { "srs_alias", opt_stringptr,
+- (void *)offsetof(redirect_router_options_block, srs_alias) },
- { "srs_condition", opt_stringptr,
-- (void *)offsetof(redirect_router_options_block, srs) },
+- (void *)offsetof(redirect_router_options_block, srs_condition) },
- { "srs_db", opt_stringptr,
- (void *)offsetof(redirect_router_options_block, srs_db) },
+ (void *)offsetof(redirect_router_options_block, srs) },
#endif
{ "syntax_errors_text", opt_stringptr,
(void *)offsetof(redirect_router_options_block, syntax_errors_text) },
-@@ -139,8 +135,6 @@
+@@ -141,9 +135,6 @@
NULL, /* owngroups */
#ifdef SRS
NULL, /* srs */
- NULL, /* srs_condition */
- NULL, /* srs_db */
+- NULL, /* srs_alias */
#endif
022, /* modemask */
RDO_REWRITE, /* bit_options */
-@@ -535,39 +529,33 @@
+@@ -538,39 +532,33 @@
ugid.gid_set = TRUE;
}
@@ -169,7 +172,7 @@ diff -u src/routers/redirect.c src/routers/redirect.c
/* Call the function that interprets redirection data, either inline or from a
file. This is a separate function so that the system filter can use it. It will
run the function in a subprocess if necessary. If qualify_preserve_domain is
-@@ -795,28 +783,23 @@
+@@ -798,33 +789,23 @@
#ifdef SRS
/* On successful redirection, check for SRS forwarding and adjust sender */
@@ -185,13 +188,18 @@ diff -u src/routers/redirect.c src/routers/redirect.c
- if((Ustrcmp(ob->srs, "forward") == 0 || Ustrcmp(ob->srs, "reverseandforward") == 0) && !verify)
- {
- uschar *res;
+- uschar *usedomain;
- int n_srs;
-
- srs_orig_sender = sender_address;
- eximsrs_init();
- if(ob->srs_db)
- eximsrs_db_set(FALSE, ob->srs_db);
-- if((n_srs = eximsrs_forward(&res, sender_address, deliver_domain)) != OK)
+-
+- if(ob->srs_alias != NULL ? (usedomain = expand_string(ob->srs_alias)) == NULL : 1)
+- usedomain = deliver_domain;
+-
+- if((n_srs = eximsrs_forward(&res, sender_address, usedomain)) != OK)
- return n_srs;
- sender_address = res;
- DEBUG(D_any)
@@ -217,23 +225,24 @@ diff -u src/routers/redirect.c src/routers/redirect.c
diff -u src/routers/redirect.h src/routers/redirect.h
--- src/routers/redirect.h Sat Jul 17 11:12:00 2004
+++ src/routers/redirect.h Sat Jul 17 11:55:47 2004
-@@ -33,8 +33,6 @@
+@@ -33,9 +33,6 @@
#ifdef SRS
uschar *srs;
- uschar *srs_condition;
- uschar *srs_db;
+- uschar *srs_alias;
#endif
int modemask;
diff -u src/srs.c src/srs.c
--- src/srs.c Sat Jul 17 11:12:00 2004
+++ src/srs.c Sat Jul 17 12:28:31 2004
-@@ -5,205 +5,125 @@
+@@ -5,205 +5,127 @@
/* This file is an extension to Exim and is not part of the standard
Exim distribution */
--/* (C)2004 Miles Wilton <miles@mirtol.com> */
+-/* (c)2004 Miles Wilton <miles@mirtol.com> */
+/* (c) 2004 Shevek
+ * Based on work by Miles Wilton <miles@mirtol.com>
+ * Updated by Shevek to use libsrs2
@@ -248,11 +257,11 @@ diff -u src/srs.c src/srs.c
#ifdef SRS
-#include <srs_alt.h>
--
--#include "exim.h"
--#include "srs.h"
+#include <srs2.h>
+-#include "exim.h"
+ #include "srs.h"
+
-srs_t *srs = NULL;
-uschar *srs_db_forward = NULL;
-uschar *srs_db_reverse = NULL;
@@ -262,19 +271,112 @@ diff -u src/srs.c src/srs.c
+ DEBUG(D_any) \
+ debug_printf("srs: %s\n", srs_strerror(__ret)); \
+ } while(0)
-
++
+srs_t *srs = NULL;
++
++int
++eximsrs_init()
++{
++ char sbuf[1024];
++ uschar *list;
++ int co;
++
++ char *secret;
++
++ if (srs == NULL) {
++ srs = srs_new();
++
++ if (srs_secrets == NULL) {
++ log_write(0, LOG_MAIN | LOG_PANIC,
++ "SRS: No secrets specified");
++ return DEFER;
++ }
++
++ /* Get config */
++ list = srs_secrets;
++
++ co = 0;
++ while ((secret = string_nextinlist(&list, &co,
++ sbuf, sizeof(sbuf))) != NULL) {
++ SRS_WARN_UNLESS(srs_add_secret(srs, secret));
++ }
++
++ SRS_WARN_UNLESS(srs_set_alwaysrewrite(srs, srs_alwaysrewrite));
++ if (srs_hashlength != -1)
++ SRS_WARN_UNLESS(srs_set_hashlength(srs, srs_hashlength));
++ if (srs_hashmin != -1)
++ SRS_WARN_UNLESS(srs_set_hashmin(srs, srs_hashmin));
++ if (srs_maxage != -1)
++ SRS_WARN_UNLESS(srs_set_maxage(srs, srs_maxage));
++ if (srs_separator != NULL)
++ SRS_WARN_UNLESS(srs_set_separator(srs, srs_separator[0]));
++
++ DEBUG(D_any)
++ debug_printf("SRS initialised\n");
++ }
++
++ return OK;
++}
++
++int
++eximsrs_done()
++{
++ if (srs != NULL)
++ srs_free(srs);
++ srs = NULL;
++ return OK;
++}
++
++int
++eximsrs_forward(uschar **result, uschar *sender, uschar *domain)
++{
++ char res[1024];
++ int ret;
++
++ ret = srs_forward(srs, res, sizeof(res), sender, domain);
++ if (ret != SRS_SUCCESS) {
++ DEBUG(D_any)
++ debug_printf("srs_forward failed (%s, %s): %s\n",
++ sender, domain, srs_strerror(ret));
++ return DEFER;
++ }
++
++ *result = string_copy(res);
++ return OK;
++}
++
++int
++eximsrs_reverse(uschar **result, uschar *sender)
++{
++ char res[1024];
++ int ret;
++
++ ret = srs_reverse(srs, res, sizeof(res), sender);
++ if (ret != SRS_SUCCESS) {
++ switch (SRS_ERROR_TYPE(ret)) {
++ case SRS_ERRTYPE_CONFIG:
++ /* This should never happen */
++ return DEFER;
++ case SRS_ERRTYPE_INPUT:
++ /* This should never happen */
++ return DEFER;
++ case SRS_ERRTYPE_SYNTAX:
++ return DECLINE;
++ case SRS_ERRTYPE_SRS:
++ return FAIL;
++ }
++ }
+
++ *result = string_copy(res);
-/* srs_init just initialises libsrs and creates (if necessary)
- an srs object to use for all srs calls in this instance */
-
-int eximsrs_init()
-+int
-+eximsrs_init()
- {
+-{
- int co;
- uschar *list = srs_config;
-- char secret_buf[32];
+- char secret_buf[SRS_MAX_SECRET_LENGTH];
- char *secret;
- char sbuf[4];
- char *sbufp;
@@ -294,7 +396,7 @@ diff -u src/srs.c src/srs.c
- // Get config
- co = 0;
- if((secret = string_nextinlist(&list, &co, secret_buf,
-- sizeof(secret_buf))) == NULL)
+- SRS_MAX_SECRET_LENGTH)) == NULL)
- {
- log_write(0, LOG_MAIN | LOG_PANIC,
- "SRS Configuration Error: No secret specified");
@@ -311,10 +413,7 @@ diff -u src/srs.c src/srs.c
- "SRS Configuration Error: Invalid maximum timestamp age");
- return DEFER;
- }
-+ char sbuf[1024];
-+ uschar *list;
-+ int co;
-
+-
- if((sbufp = string_nextinlist(&list, &co, sbuf, sizeof(sbuf))) == NULL)
- hashlen = 6;
- else
@@ -327,72 +426,42 @@ diff -u src/srs.c src/srs.c
- }
-
-
-- if((srs = srs_open(secret, strnlen(secret, sizeof(secret)),
+- if((srs = srs_open(secret, strnlen(secret, SRS_MAX_SECRET_LENGTH),
- maxage, hashlen, hashlen)) == NULL)
- {
- log_write(0, LOG_MAIN | LOG_PANIC,
- "Failed to allocate SRS memory");
- return DEFER;
- }
-+ char *secret;
-
-+ if (srs == NULL) {
-+ srs = srs_new();
-
+-
+-
- if((sbufp = string_nextinlist(&list, &co, sbuf, sizeof(sbuf))) != NULL)
- srs_set_option(srs, SRS_OPTION_USETIMESTAMP, atoi(sbuf));
-
- if((sbufp = string_nextinlist(&list, &co, sbuf, sizeof(sbuf))) != NULL)
- srs_set_option(srs, SRS_OPTION_USEHASH, atoi(sbuf));
-+ if (srs_secrets == NULL) {
-+ log_write(0, LOG_MAIN | LOG_PANIC,
-+ "SRS: No secrets specified");
-+ return DEFER;
-+ }
-
+-
- DEBUG(D_any)
- debug_printf("SRS initialized\n");
- }
-+ /* Get config */
-+ list = srs_secrets;
-
+-
- return OK;
-}
-+ co = 0;
-+ while ((secret = string_nextinlist(&list, &co,
-+ sbuf, sizeof(sbuf))) != NULL) {
-+ SRS_WARN_UNLESS(srs_add_secret(srs, secret));
-+ }
-
-+ SRS_WARN_UNLESS(srs_set_alwaysrewrite(srs, srs_alwaysrewrite));
-+ if (srs_hashlength != -1)
-+ SRS_WARN_UNLESS(srs_set_hashlength(srs, srs_hashlength));
-+ if (srs_hashmin != -1)
-+ SRS_WARN_UNLESS(srs_set_hashmin(srs, srs_hashmin));
-+ if (srs_maxage != -1)
-+ SRS_WARN_UNLESS(srs_set_maxage(srs, srs_maxage));
-+ if (srs_separator != NULL)
-+ SRS_WARN_UNLESS(srs_set_separator(srs, srs_separator[0]));
-
+-
+-
-int eximsrs_done()
-{
- if(srs)
- srs_close(srs);
-
- srs = NULL;
-+ DEBUG(D_any)
-+ debug_printf("SRS initialised\n");
-+ }
-
+-
- return OK;
-+ return OK;
- }
-
+-}
+-
-
-int eximsrs_forward(uschar **result, uschar *orig_sender, uschar *domain)
-+int
-+eximsrs_done()
- {
+-{
- char res[512];
- int n;
-
@@ -405,17 +474,11 @@ diff -u src/srs.c src/srs.c
-
- *result = string_copy(res);
- return OK;
-+ if (srs != NULL)
-+ srs_free(srs);
-+ srs = NULL;
-+ return OK;
- }
-
+-}
+-
-
-int eximsrs_reverse(uschar **result, uschar *address)
-+int
-+eximsrs_forward(uschar **result, uschar *sender, uschar *domain)
- {
+-{
- char res[512];
- int n;
-
@@ -432,18 +495,10 @@ diff -u src/srs.c src/srs.c
-
- *result = string_copy(res);
- return OK;
--}
-+ char res[1024];
-+ int ret;
-
-+ ret = srs_forward(srs, res, sizeof(res), sender, domain);
-+ if (ret != SRS_SUCCESS) {
-+ DEBUG(D_any)
-+ debug_printf("srs_forward failed (%s, %s): %s\n",
-+ sender, domain, srs_strerror(ret));
-+ return DEFER;
-+ }
-
++ return OK;
+ }
+-
+-
-int eximsrs_db_set(BOOL reverse, uschar *srs_db)
-{
- if(reverse)
@@ -455,15 +510,11 @@ diff -u src/srs.c src/srs.c
- return DEFER;
-
- return OK;
-+ *result = string_copy(res);
-+ return OK;
- }
-
+-}
+-
-
-srs_result eximsrs_db_insert(srs_t *srs, char *data, uint data_len, char *result, uint result_len)
-+int
-+eximsrs_reverse(uschar **result, uschar *sender)
- {
+-{
- uschar *res;
- char buf[64];
-
@@ -484,28 +535,11 @@ diff -u src/srs.c src/srs.c
- return SRS_RESULT_OK;
-}
-
-+ char res[1024];
-+ int ret;
-
+-
-srs_result eximsrs_db_lookup(srs_t *srs, char *data, uint data_len, char *result, uint result_len)
-{
- uschar *res;
-+ ret = srs_reverse(srs, res, sizeof(res), sender);
-+ if (ret != SRS_SUCCESS) {
-+ switch (SRS_ERROR_TYPE(ret)) {
-+ case SRS_ERRTYPE_CONFIG:
-+ /* This should never happen */
-+ return DEFER;
-+ case SRS_ERRTYPE_INPUT:
-+ /* This should never happen */
-+ return DEFER;
-+ case SRS_ERRTYPE_SYNTAX:
-+ return DECLINE;
-+ case SRS_ERRTYPE_SRS:
-+ return FAIL;
-+ }
-+ }
-
+-
- srs_db_key = string_copyn(data, data_len);
- if((res = expand_string(srs_db_reverse)) == NULL)
- return SRS_RESULT_DBERROR;
@@ -514,11 +548,9 @@ diff -u src/srs.c src/srs.c
- return SRS_RESULT_ADDRESSTOOLONG;
-
- strncpy(result, res, result_len);
-+ *result = string_copy(res);
-
+-
- return SRS_RESULT_OK;
-+ return OK;
- }
+-}
-
-
#endif
diff --git a/mail/exim/options b/mail/exim/options
index 75bf84258c19..622a24c8a951 100644
--- a/mail/exim/options
+++ b/mail/exim/options
@@ -10,6 +10,9 @@
#WITH_EXISCAN
# Exim will be built with exiscan email content scanner support.
+#WITHOUT_SA_EXIM
+# SA-Exim support (<http://marc.merlins.org/linux/exim/sa.html>)
+
#WITH_BDB_VER= 1, 4, 41, 42
# BDB_VER is the version of the Berkeley DB library to use, and
# may be 1, which corresponds to version 1.85 in the base system, 4,
@@ -65,6 +68,9 @@
# Microsoft "Secure Password Authentication" authentication mechanisms,
# used for SMTP AUTH.
+#WITHOUT_AUTH_SASL
+# Enable the use of the Cyrus SASL authentication library.
+
#WITHOUT_SASLAUTHD
# Enable the use of the Cyrus SASL authentication daemon.
@@ -75,7 +81,9 @@
# THIS MECHANISM IS DEPRECATED!
#WITHOUT_AUTH_RADIUS
-# Link against libradius to support radius (RFC 2865) authentication.
+# Link against a radius library o support radius (RFC 2865) authentication.
+#WITH_RADIUS_TYPE= RADLIB, RADIUSCLIENT
+# Choose between the system library (RADLIB) or port net/freeradius (RADIUSCLIENT).
#! optional features
@@ -134,6 +142,9 @@
# FreeBSD 5.x only: Install the rc.subr(8) script to /etc/rc.d to participate
# in rcorder(8).
+#WITHOUT_READLINE
+# readline(3) library for the test expansion option.
+
## AUTOMATICALLY GENERATED FILE - DO NOT CHANGE ANYTHING BELOW THIS LINE ##
# use `make config' to edit the local configuration
# use `make makeconfig' to edit the defaults (MAINTAINER only)
@@ -142,6 +153,9 @@ _OPTIONSNG_READ?=default
.ifndef WITHOUT_EXISCAN
WITH_EXISCAN?=yes
.endif
+.ifndef WITH_SA_EXIM
+WITHOUT_SA_EXIM?=yes
+.endif
WITH_BDB_VER?=1
WITH_DEFAULT_CHARSET?=ISO-8859-1
.ifndef WITHOUT_PERL
@@ -189,6 +203,9 @@ WITH_AUTH_PLAINTEXT?=yes
.ifndef WITHOUT_AUTH_SPA
WITH_AUTH_SPA?=yes
.endif
+.ifndef WITH_AUTH_SASL
+WITHOUT_AUTH_SASL?=yes
+.endif
.ifndef WITH_SASLAUTHD
WITHOUT_SASLAUTHD?=yes
.endif
@@ -198,6 +215,7 @@ WITHOUT_PWCHECK?=yes
.ifndef WITH_AUTH_RADIUS
WITHOUT_AUTH_RADIUS?=yes
.endif
+WITH_RADIUS_TYPE?=RADLIB
.ifndef WITHOUT_TLS
WITH_TLS?=yes
.endif
@@ -237,3 +255,6 @@ WITHOUT_WISHLIST?=yes
.ifndef WITH_RCORDER
WITHOUT_RCORDER?=yes
.endif
+.ifndef WITH_READLINE
+WITHOUT_READLINE?=yes
+.endif
diff --git a/mail/exim/pkg-plist b/mail/exim/pkg-plist
index a8542ba4ff3d..4a09049e85c6 100644
--- a/mail/exim/pkg-plist
+++ b/mail/exim/pkg-plist
@@ -19,6 +19,7 @@ sbin/exiwhat
%%EXIMON%%sbin/eximon
%%EXIMON%%sbin/eximon.bin
%%PORTDOCS%%%%DOCSDIR%%/ACKNOWLEDGMENTS
+%%PORTDOCS%%%%DOCSDIR%%/FAQ
%%PORTDOCS%%%%DOCSDIR%%/NOTICE
%%PORTDOCS%%%%DOCSDIR%%/README.UPDATING
%%PORTDOCS%%%%DOCSDIR%%/ChangeLog
@@ -50,6 +51,9 @@ etc/periodic/daily/460.exim-mail-rejects
@unexec if cmp -s %D/etc/exim/configure %D/etc/exim/configure.default; then rm -f %D/etc/exim/configure; fi
etc/exim/configure.default
@exec [ -f %B/configure ] || cp %B/%f %B/configure
+%%SA_EXIM%%@unexec if cmp -s %D/etc/exim/sa-exim.conf %D/etc/exim/sa-exim.conf.default; then rm -f %D/etc/exim/sa-exim.conf; fi
+%%SA_EXIM%%etc/exim/sa-exim.conf.default
+%%SA_EXIM%%@exec [ -f %B/sa-exim.conf ] || cp %B/%f %B/sa-exim.conf
@unexec rmdir %B 2>/dev/null || true
%%RCORDER%%@cwd /
etc/rc.d/exim%%RC_SUFX%%