diff options
author | eik <eik@FreeBSD.org> | 2004-10-11 23:48:25 +0000 |
---|---|---|
committer | eik <eik@FreeBSD.org> | 2004-10-11 23:48:25 +0000 |
commit | 89486ee4a68fa34c54643ce456fc591a094194cf (patch) | |
tree | 81500e21d0b3fc694cd3ea1619c5746fff70c6a2 /mail/exim | |
parent | 48b1fb1d6d2db7c69f3f0a8c16f61e951fdbef73 (diff) | |
download | FreeBSD-ports-89486ee4a68fa34c54643ce456fc591a094194cf.zip FreeBSD-ports-89486ee4a68fa34c54643ce456fc591a094194cf.tar.gz |
- update to Exim 4.43 and exiscan 28
- add support for the SA-Exim local_scan function
+ http://marc.merlins.org/linux/exim/sa.html
- new options WITH_SA_EXIM, WITH_AUTH_SASL, WITH_RADIUS_TYPE
- fix 150.exim-tidydb.sh when Exim is installed, but not run [1]
Submitted by: Brian Somers <brian@Awfulhak.org> [1]
Diffstat (limited to 'mail/exim')
-rw-r--r-- | mail/exim/Makefile | 170 | ||||
-rw-r--r-- | mail/exim/distinfo | 11 | ||||
-rw-r--r-- | mail/exim/files/150.exim-tidydb.sh | 11 | ||||
-rw-r--r-- | mail/exim/files/460.exim-mail-rejects.sh | 8 | ||||
-rw-r--r-- | mail/exim/files/exim.sh | 9 | ||||
-rw-r--r-- | mail/exim/files/xpatch-exiscan2 | 270 | ||||
-rw-r--r-- | mail/exim/options | 23 | ||||
-rw-r--r-- | mail/exim/pkg-plist | 4 |
8 files changed, 322 insertions, 184 deletions
diff --git a/mail/exim/Makefile b/mail/exim/Makefile index 3ae510e..a5e776b 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 acc24a5..50797da9 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 5239368..1fbfb83 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 4cffe07..3a68087 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 58254cf..a716117 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 925453a..534f6b8 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 75bf842..622a24c 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 a8542ba..4a09049 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%% |