Add Alex Dupre's patch for SpamAssassin integration, conditional

on the WITH_SPAMASSASSIN knob.

PR:		58503
Submitted by:	Alex Dupre <sysadmin@alexdupre.com>
This commit is contained in:
Peter Pentchev 2003-10-31 17:24:01 +00:00
parent 450b648c54
commit f4a88d4c6c
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=92729
8 changed files with 270 additions and 70 deletions

View file

@ -55,6 +55,7 @@ CONFIGURE_ARGS= --enable-qmaildir=${QMAIL_DIR} \
# WITHOUT_USERS_BIG_DIR - disables using big directories for users
# WITHOUT_SEEKABLE - disables vdelivermail's attempt to make its input seekable
# WITH_DOMAIN_QUOTAS - enable domain quotas
# WITH_SPAMASSASSIN - enable SpamAssassin checks before Maildir delivery
#
# Set these to the values you'd prefer
#
@ -116,6 +117,33 @@ HARDQUOTA?= 10000000
RELAYCLEAR?= 30
LOGLEVEL?= y
.if defined(WITH_MYSQL)
USE_MYSQL= yes
CONFIGURE_ARGS+= --enable-mysql=y \
--enable-incdir=${LOCALBASE}/include/mysql \
--enable-libdir=${LOCALBASE}/lib/mysql
.if defined(WITH_MYSQL_REPLICATION)
CONFIGURE_ARGS+= --enable-mysql-replication=y
.endif
.if defined(WITH_MYSQL_LOG)
CONFIGURE_ARGS+= --enable-mysql-logging=y
.endif
.if defined(WITH_MYSQL_LIMITS)
CONFIGURE_ARGS+= --enable-mysql-limits=y
.endif
WITH_MYSQL_SERVER?= localhost
WITH_MYSQL_READ_SERVER?= ${WITH_MYSQL_SERVER}
WITH_MYSQL_UPDATE_SERVER?= ${WITH_MYSQL_SERVER}
WITH_MYSQL_USER?= vpopmail
WITH_MYSQL_READ_USER?= ${WITH_MYSQL_USER}
WITH_MYSQL_UPDATE_USER?= ${WITH_MYSQL_USER}
WITH_MYSQL_PASSWD?= secret
WITH_MYSQL_READ_PASSWD?= ${WITH_MYSQL_PASSWD}
WITH_MYSQL_UPDATE_PASSWD?= ${WITH_MYSQL_PASSWD}
WITH_MYSQL_DB?= vpopmail
.endif
.include <bsd.port.pre.mk>
.if exists(${LOCALBASE}/qmail/bin/qmail-send)
@ -168,33 +196,6 @@ CONFIGURE_ARGS+= --enable-clear-passwd=n
CONFIGURE_ARGS+= --enable-learn-passwords=y
.endif
.if defined(WITH_MYSQL)
USE_MYSQL= yes
CONFIGURE_ARGS+= --enable-mysql=y \
--enable-incdir=${LOCALBASE}/include/mysql \
--enable-libdir=${LOCALBASE}/lib/mysql
.if defined(WITH_MYSQL_REPLICATION)
CONFIGURE_ARGS+= --enable-mysql-replication=y
.endif
.if defined(WITH_MYSQL_LOG)
CONFIGURE_ARGS+= --enable-mysql-logging=y
.endif
.if defined(WITH_MYSQL_LIMITS)
CONFIGURE_ARGS+= --enable-mysql-limits=y
.endif
WITH_MYSQL_SERVER?= localhost
WITH_MYSQL_READ_SERVER?= ${WITH_MYSQL_SERVER}
WITH_MYSQL_UPDATE_SERVER?= ${WITH_MYSQL_SERVER}
WITH_MYSQL_USER?= vpopmail
WITH_MYSQL_READ_USER?= ${WITH_MYSQL_USER}
WITH_MYSQL_UPDATE_USER?= ${WITH_MYSQL_USER}
WITH_MYSQL_PASSWD?= secret
WITH_MYSQL_READ_PASSWD?= ${WITH_MYSQL_PASSWD}
WITH_MYSQL_UPDATE_PASSWD?= ${WITH_MYSQL_PASSWD}
WITH_MYSQL_DB?= vpopmail
.endif
.if defined(WITH_SYBASE)
CONFIGURE_ARGS+= --enable-sybase=y
.endif
@ -240,6 +241,11 @@ CONFIGURE_ARGS+= --enable-make-seekable=n
CONFIGURE_ARGS+= --enable-domainquotas=y
.endif
.if defined(WITH_SPAMASSASSIN)
BUILD_DEPENDS= spamc:${PORTSDIR}/mail/p5-Mail-SpamAssassin
CONFIGURE_ARGS+= --enable-spamassassin=${LOCALBASE}/bin/spamc
.endif
# autoconf and automake can remove our patches to the configure scripts.
post-patch:
@ -309,5 +315,11 @@ post-install:
>> ${PREFIX}/vpopmail/etc/vpopmail.mysql
.endif
${CHOWN} -R vpopmail:vchkpw ${PREFIX}/vpopmail/bin/ ${PREFIX}/vpopmail/etc/
.if defined(WITH_SPAMASSASSIN)
${ECHO_CMD} "***********************************************************************"
${ECHO_CMD} "Now you should add the following options to your spamd.sh startup file:"
${ECHO_CMD} "-v -u vpopmail"
${ECHO_CMD} "***********************************************************************"
.endif
.include <bsd.port.post.mk>

View file

@ -0,0 +1,12 @@
--- config.h.in.orig Fri Oct 24 18:43:20 2003
+++ config.h.in Fri Oct 24 18:43:45 2003
@@ -89,6 +89,9 @@
#undef QMAILNEWU
/* */
+#undef SPAMC
+
+/* */
#undef QMAILINJECT
/* */

View file

@ -1,6 +1,15 @@
--- configure.orig Thu Aug 28 21:09:47 2003
+++ configure Fri Sep 5 00:13:14 2003
@@ -1317,7 +1317,7 @@
--- configure.orig Fri Oct 17 01:12:22 2003
+++ configure Sat Oct 25 01:18:27 2003
@@ -20,6 +20,8 @@
ac_help="$ac_help
--enable-qmail-newmrh=path Full path to qmail-newmrh program"
ac_help="$ac_help
+ --enable-spamassassin=path Enable SpamAssassin. Full path to spamc program. default /usr/local/bin/spamc"
+ac_help="$ac_help
--enable-vpopuser=vpopmail user vchkpw was installed as."
ac_help="$ac_help
--enable-vpopgroup=vchkpw group vchkpw was installed as."
@@ -1317,7 +1319,7 @@
;;
esac
@ -9,7 +18,35 @@
then
echo "configure: warning: === vpopmail must be configured as root. ===" 1>&2
echo "configure: warning: === please switch to the root user and ===" 1>&2
@@ -1601,15 +1601,6 @@
@@ -1446,6 +1448,27 @@
EOF
+# Check whether --enable-spamassassin or --disable-spamassassin was given.
+if test "${enable_spamassassin+set}" = set; then
+ enableval="$enable_spamassassin"
+ spamc="$enableval"
+
+ case $spamc in
+ 1*|y*|Y*)
+ spamc="/usr/local/bin/spamc"
+ ;;
+ esac
+
+ if test ! -f "$spamc"
+ then
+ { echo "configure: error: Unable to find your spamc file, specify --enable-spamassassin=/full/path/to/spamc" 1>&2; exit 1; }
+ fi
+
+ cat >> confdefs.h <<EOF
+#define SPAMC "$spamc"
+EOF
+fi
+
vpopuser="vpopmail"
# Check whether --enable-vpopuser or --disable-vpopuser was given.
@@ -1601,15 +1624,6 @@
EOF
@ -25,7 +62,7 @@
# Check whether --enable-roaming-users or --disable-roaming-users was given.
if test "${enable_roaming_users+set}" = set; then
enableval="$enable_roaming_users"
@@ -1671,17 +1662,7 @@
@@ -1671,17 +1685,7 @@
if test "${enable_tcpserver_file+set}" = set; then
enableval="$enable_tcpserver_file"
tcpserver_file="$enableval"

View file

@ -1,6 +1,6 @@
--- vdelivermail.c.orig Sat Nov 2 22:34:39 2002
+++ vdelivermail.c Sat Nov 2 22:35:20 2002
@@ -263,7 +263,7 @@
--- vdelivermail.c.orig Mon Oct 20 20:59:57 2003
+++ vdelivermail.c Fri Oct 24 18:31:45 2003
@@ -257,7 +257,7 @@
/* check for wildcard if there's no match */
if(tmpstr == NULL) {
@ -9,3 +9,42 @@
if(TheUser[i-1]=='-') {
tmpuser[0] = '\0';
strncat(tmpuser,TheUser,i);
@@ -444,6 +444,7 @@
int inject = 0;
FILE *fs;
char tmp_file[256];
+ int pim[2];
/* check if the email is looping to this user */
if ( is_looping( address ) == 1 ) {
@@ -631,6 +632,30 @@
}
}
+#ifdef SPAMC
+ /* fork the SpamAssassin client - patch by Alex Dupre */
+ if (!pipe(pim)) {
+ pid = vfork();
+ switch (pid) {
+ case -1:
+ close(pim[0]);
+ close(pim[1]);
+ break;
+ case 0:
+ close(pim[0]);
+ dup2(pim[1], 1);
+ close(pim[1]);
+ if (execl(SPAMC, SPAMC, "-u", maildir_to_email(address), 0) == -1) {
+ while ((file_count=read(0, msgbuf, MSG_BUF_SIZE)) > 0)
+ write(1, msgbuf, file_count);
+ _exit(0);
+ }
+ }
+ close(pim[1]);
+ dup2(pim[0], 0);
+ close(pim[0]);
+ }
+#endif
/* read it in chunks and write it to the new file */
while((file_count=read(0,msgbuf,MSG_BUF_SIZE))>0) {

View file

@ -55,6 +55,7 @@ CONFIGURE_ARGS= --enable-qmaildir=${QMAIL_DIR} \
# WITHOUT_USERS_BIG_DIR - disables using big directories for users
# WITHOUT_SEEKABLE - disables vdelivermail's attempt to make its input seekable
# WITH_DOMAIN_QUOTAS - enable domain quotas
# WITH_SPAMASSASSIN - enable SpamAssassin checks before Maildir delivery
#
# Set these to the values you'd prefer
#
@ -116,6 +117,33 @@ HARDQUOTA?= 10000000
RELAYCLEAR?= 30
LOGLEVEL?= y
.if defined(WITH_MYSQL)
USE_MYSQL= yes
CONFIGURE_ARGS+= --enable-mysql=y \
--enable-incdir=${LOCALBASE}/include/mysql \
--enable-libdir=${LOCALBASE}/lib/mysql
.if defined(WITH_MYSQL_REPLICATION)
CONFIGURE_ARGS+= --enable-mysql-replication=y
.endif
.if defined(WITH_MYSQL_LOG)
CONFIGURE_ARGS+= --enable-mysql-logging=y
.endif
.if defined(WITH_MYSQL_LIMITS)
CONFIGURE_ARGS+= --enable-mysql-limits=y
.endif
WITH_MYSQL_SERVER?= localhost
WITH_MYSQL_READ_SERVER?= ${WITH_MYSQL_SERVER}
WITH_MYSQL_UPDATE_SERVER?= ${WITH_MYSQL_SERVER}
WITH_MYSQL_USER?= vpopmail
WITH_MYSQL_READ_USER?= ${WITH_MYSQL_USER}
WITH_MYSQL_UPDATE_USER?= ${WITH_MYSQL_USER}
WITH_MYSQL_PASSWD?= secret
WITH_MYSQL_READ_PASSWD?= ${WITH_MYSQL_PASSWD}
WITH_MYSQL_UPDATE_PASSWD?= ${WITH_MYSQL_PASSWD}
WITH_MYSQL_DB?= vpopmail
.endif
.include <bsd.port.pre.mk>
.if exists(${LOCALBASE}/qmail/bin/qmail-send)
@ -168,33 +196,6 @@ CONFIGURE_ARGS+= --enable-clear-passwd=n
CONFIGURE_ARGS+= --enable-learn-passwords=y
.endif
.if defined(WITH_MYSQL)
USE_MYSQL= yes
CONFIGURE_ARGS+= --enable-mysql=y \
--enable-incdir=${LOCALBASE}/include/mysql \
--enable-libdir=${LOCALBASE}/lib/mysql
.if defined(WITH_MYSQL_REPLICATION)
CONFIGURE_ARGS+= --enable-mysql-replication=y
.endif
.if defined(WITH_MYSQL_LOG)
CONFIGURE_ARGS+= --enable-mysql-logging=y
.endif
.if defined(WITH_MYSQL_LIMITS)
CONFIGURE_ARGS+= --enable-mysql-limits=y
.endif
WITH_MYSQL_SERVER?= localhost
WITH_MYSQL_READ_SERVER?= ${WITH_MYSQL_SERVER}
WITH_MYSQL_UPDATE_SERVER?= ${WITH_MYSQL_SERVER}
WITH_MYSQL_USER?= vpopmail
WITH_MYSQL_READ_USER?= ${WITH_MYSQL_USER}
WITH_MYSQL_UPDATE_USER?= ${WITH_MYSQL_USER}
WITH_MYSQL_PASSWD?= secret
WITH_MYSQL_READ_PASSWD?= ${WITH_MYSQL_PASSWD}
WITH_MYSQL_UPDATE_PASSWD?= ${WITH_MYSQL_PASSWD}
WITH_MYSQL_DB?= vpopmail
.endif
.if defined(WITH_SYBASE)
CONFIGURE_ARGS+= --enable-sybase=y
.endif
@ -240,6 +241,11 @@ CONFIGURE_ARGS+= --enable-make-seekable=n
CONFIGURE_ARGS+= --enable-domainquotas=y
.endif
.if defined(WITH_SPAMASSASSIN)
BUILD_DEPENDS= spamc:${PORTSDIR}/mail/p5-Mail-SpamAssassin
CONFIGURE_ARGS+= --enable-spamassassin=${LOCALBASE}/bin/spamc
.endif
# autoconf and automake can remove our patches to the configure scripts.
post-patch:
@ -309,5 +315,11 @@ post-install:
>> ${PREFIX}/vpopmail/etc/vpopmail.mysql
.endif
${CHOWN} -R vpopmail:vchkpw ${PREFIX}/vpopmail/bin/ ${PREFIX}/vpopmail/etc/
.if defined(WITH_SPAMASSASSIN)
${ECHO_CMD} "***********************************************************************"
${ECHO_CMD} "Now you should add the following options to your spamd.sh startup file:"
${ECHO_CMD} "-v -u vpopmail"
${ECHO_CMD} "***********************************************************************"
.endif
.include <bsd.port.post.mk>

View file

@ -0,0 +1,12 @@
--- config.h.in.orig Fri Oct 24 18:43:20 2003
+++ config.h.in Fri Oct 24 18:43:45 2003
@@ -89,6 +89,9 @@
#undef QMAILNEWU
/* */
+#undef SPAMC
+
+/* */
#undef QMAILINJECT
/* */

View file

@ -1,6 +1,15 @@
--- configure.orig Thu Aug 28 21:09:47 2003
+++ configure Fri Sep 5 00:13:14 2003
@@ -1317,7 +1317,7 @@
--- configure.orig Fri Oct 17 01:12:22 2003
+++ configure Sat Oct 25 01:18:27 2003
@@ -20,6 +20,8 @@
ac_help="$ac_help
--enable-qmail-newmrh=path Full path to qmail-newmrh program"
ac_help="$ac_help
+ --enable-spamassassin=path Enable SpamAssassin. Full path to spamc program. default /usr/local/bin/spamc"
+ac_help="$ac_help
--enable-vpopuser=vpopmail user vchkpw was installed as."
ac_help="$ac_help
--enable-vpopgroup=vchkpw group vchkpw was installed as."
@@ -1317,7 +1319,7 @@
;;
esac
@ -9,7 +18,35 @@
then
echo "configure: warning: === vpopmail must be configured as root. ===" 1>&2
echo "configure: warning: === please switch to the root user and ===" 1>&2
@@ -1601,15 +1601,6 @@
@@ -1446,6 +1448,27 @@
EOF
+# Check whether --enable-spamassassin or --disable-spamassassin was given.
+if test "${enable_spamassassin+set}" = set; then
+ enableval="$enable_spamassassin"
+ spamc="$enableval"
+
+ case $spamc in
+ 1*|y*|Y*)
+ spamc="/usr/local/bin/spamc"
+ ;;
+ esac
+
+ if test ! -f "$spamc"
+ then
+ { echo "configure: error: Unable to find your spamc file, specify --enable-spamassassin=/full/path/to/spamc" 1>&2; exit 1; }
+ fi
+
+ cat >> confdefs.h <<EOF
+#define SPAMC "$spamc"
+EOF
+fi
+
vpopuser="vpopmail"
# Check whether --enable-vpopuser or --disable-vpopuser was given.
@@ -1601,15 +1624,6 @@
EOF
@ -25,7 +62,7 @@
# Check whether --enable-roaming-users or --disable-roaming-users was given.
if test "${enable_roaming_users+set}" = set; then
enableval="$enable_roaming_users"
@@ -1671,17 +1662,7 @@
@@ -1671,17 +1685,7 @@
if test "${enable_tcpserver_file+set}" = set; then
enableval="$enable_tcpserver_file"
tcpserver_file="$enableval"

View file

@ -1,6 +1,6 @@
--- vdelivermail.c.orig Sat Nov 2 22:34:39 2002
+++ vdelivermail.c Sat Nov 2 22:35:20 2002
@@ -263,7 +263,7 @@
--- vdelivermail.c.orig Mon Oct 20 20:59:57 2003
+++ vdelivermail.c Fri Oct 24 18:31:45 2003
@@ -257,7 +257,7 @@
/* check for wildcard if there's no match */
if(tmpstr == NULL) {
@ -9,3 +9,42 @@
if(TheUser[i-1]=='-') {
tmpuser[0] = '\0';
strncat(tmpuser,TheUser,i);
@@ -444,6 +444,7 @@
int inject = 0;
FILE *fs;
char tmp_file[256];
+ int pim[2];
/* check if the email is looping to this user */
if ( is_looping( address ) == 1 ) {
@@ -631,6 +632,30 @@
}
}
+#ifdef SPAMC
+ /* fork the SpamAssassin client - patch by Alex Dupre */
+ if (!pipe(pim)) {
+ pid = vfork();
+ switch (pid) {
+ case -1:
+ close(pim[0]);
+ close(pim[1]);
+ break;
+ case 0:
+ close(pim[0]);
+ dup2(pim[1], 1);
+ close(pim[1]);
+ if (execl(SPAMC, SPAMC, "-u", maildir_to_email(address), 0) == -1) {
+ while ((file_count=read(0, msgbuf, MSG_BUF_SIZE)) > 0)
+ write(1, msgbuf, file_count);
+ _exit(0);
+ }
+ }
+ close(pim[1]);
+ dup2(pim[0], 0);
+ close(pim[0]);
+ }
+#endif
/* read it in chunks and write it to the new file */
while((file_count=read(0,msgbuf,MSG_BUF_SIZE))>0) {