فهرست منبع

new package: milter-sa 0.3.1 (Mail Filter for Spam Filtering via SpamAssassin)

Ralf S. Engelschall 19 سال پیش
والد
کامیت
b806abfd28
4فایلهای تغییر یافته به همراه299 افزوده شده و 0 حذف شده
  1. 16 0
      milter-sa/fsl.milter-sa
  2. 76 0
      milter-sa/milter-sa.patch
  3. 142 0
      milter-sa/milter-sa.spec
  4. 65 0
      milter-sa/rc.milter-sa

+ 16 - 0
milter-sa/fsl.milter-sa

@@ -0,0 +1,16 @@
+##
+##  fsl.milter-sa -- OSSP fsl configuration
+##
+
+ident (spamass-milter)/.+ q{
+    prefix(
+        prefix="%b %d %H:%M:%S %N <%L> $1[%P]: "
+    )
+    -> {
+        debug: file(
+            path="@l_prefix@/var/milter-sa/milter-sa.log",
+            perm=0644
+        )
+    }
+};
+

+ 76 - 0
milter-sa/milter-sa.patch

@@ -0,0 +1,76 @@
+Index: spamass-milter.1.in
+--- spamass-milter.1.in.orig	2004-03-18 19:37:08 +0100
++++ spamass-milter.1.in	2006-12-30 18:09:16 +0100
+@@ -199,6 +199,9 @@
+ Requires the
+ .Fl u
+ flag.  
++.It Fl a
++Causes spamass-milter to pass through unchecked any messages from connections
++established using SMTP authentication.  This is useful for sites with remote users.
+ .It Fl - Ar spamc flags ...
+ Pass all remaining options to spamc. 
+ This allows you to connect to a remote spamd with
+Index: spamass-milter.cpp
+--- spamass-milter.cpp.orig	2006-03-23 22:41:36 +0100
++++ spamass-milter.cpp	2006-12-30 18:09:16 +0100
+@@ -170,6 +170,7 @@
+ bool flag_full_email = false;		/* pass full email address to spamc */
+ bool flag_expand = false;	/* alias/virtusertable expansion */
+ bool warnedmacro = false;	/* have we logged that we couldn't fetch a macro? */
++bool auth = false;		/* don't scan authenticated users */
+ 
+ #if defined(__FreeBSD__) /* popen bug - see PR bin/50770 */
+ static pthread_mutex_t popen_mutex = PTHREAD_MUTEX_INITIALIZER;
+@@ -181,7 +182,7 @@
+ main(int argc, char* argv[])
+ {
+    int c, err = 0;
+-   const char *args = "fd:mMp:P:r:u:D:i:b:B:e:x";
++   const char *args = "fd:mMp:P:r:u:D:i:b:B:e:xa";
+    char *sock = NULL;
+    bool dofork = false;
+    char *pidfilename = NULL;
+@@ -196,6 +197,9 @@
+ 	/* Process command line options */
+ 	while ((c = getopt(argc, argv, args)) != -1) {
+ 		switch (c) {
++			case 'a':
++				auth = true;
++				break;
+ 			case 'f':
+ 				dofork = true;
+ 				break;
+@@ -281,7 +285,7 @@
+       cout << "SpamAssassin Sendmail Milter Plugin" << endl;
+       cout << "Usage: spamass-milter -p socket [-b|-B bucket] [-d xx[,yy...]] [-D host]" << endl;
+       cout << "                      [-e defaultdomain] [-f] [-i networks] [-m] [-M]" << endl;
+-      cout << "                      [-P pidfile] [-r nn] [-u defaultuser] [-x]" << endl;
++      cout << "                      [-P pidfile] [-r nn] [-u defaultuser] [-x] [-a]" << endl;
+       cout << "                      [-- spamc args ]" << endl;
+       cout << "   -p socket: path to create socket" << endl;
+       cout << "   -b bucket: redirect spam to this mail address.  The orignal" << endl;
+@@ -302,6 +306,7 @@
+       cout << "   -u defaultuser: pass the recipient's username to spamc.\n"
+               "          Uses 'defaultuser' if there are multiple recipients." << endl;
+       cout << "   -x: pass email address through alias and virtusertable expansion." << endl;
++      cout << "   -a: don't scan messages over an authenticated connection." << endl;
+       cout << "   -- spamc args: pass the remaining flags to spamc." << endl;
+               
+       exit(EX_USAGE);
+@@ -783,6 +788,15 @@
+   }
+   /* debug(D_ALWAYS, "ZZZ got private context %p", sctx); */
+ 
++  if (auth) {
++    const char *auth_type = smfi_getsymval(ctx, "{auth_type}");
++
++    if (auth_type) {
++      debug(D_MISC, "auth_type=%s", auth_type);
++      return SMFIS_ACCEPT;
++    }
++  }
++
+   debug(D_FUNC, "mlfi_envfrom: enter");
+   try {
+     // launch new SpamAssassin

+ 142 - 0
milter-sa/milter-sa.spec

@@ -0,0 +1,142 @@
+##
+##  milter-sa.spec -- OpenPKG RPM Package Specification
+##  Copyright (c) 2000-2006 OpenPKG Foundation e.V. <http://openpkg.net/>
+##  Copyright (c) 2000-2006 Ralf S. Engelschall <http://engelschall.com/>
+##
+##  Permission to use, copy, modify, and distribute this software for
+##  any purpose with or without fee is hereby granted, provided that
+##  the above copyright notice and this permission notice appear in all
+##  copies.
+##
+##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 AUTHORS AND COPYRIGHT HOLDERS AND THEIR
+##  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.
+##
+
+#   package information
+Name:         milter-sa
+Summary:      Mail Filter for Spam Filtering via SpamAssassin
+URL:          http://savannah.nongnu.org/projects/spamass-milt/
+Vendor:       Georg C. F. Greve et al.
+Packager:     OpenPKG Foundation e.V.
+Distribution: OpenPKG Community
+Class:        EVAL
+Group:        Mail
+License:      GPL
+Version:      0.3.1
+Release:      20061230
+
+#   package options
+%option       with_fsl  yes
+
+#   list of sources
+Source0:      http://download.savannah.nongnu.org/releases/spamass-milt/spamass-milter-%{version}.tar.gz
+Source1:      rc.milter-sa
+Source2:      fsl.milter-sa
+Patch0:       milter-sa.patch
+
+#   build information
+Prefix:       %{l_prefix}
+BuildRoot:    %{l_buildroot}
+BuildPreReq:  OpenPKG, openpkg >= 20060823
+PreReq:       OpenPKG, openpkg >= 20060823, spamassassin
+BuildPreReq:  milter, MTA
+PreReq:       milter, MTA
+%if "%{with_fsl}" == "yes"
+BuildPreReq:  fsl >= 1.2.0
+PreReq:       fsl >= 1.2.0
+%endif
+AutoReq:      no
+AutoReqProv:  no
+
+%description
+    This package contains spamass-milter(1), a mail filtering gateway
+    between the MTA and SpamAssassin, based on the MILTER API.
+
+%track
+    prog milter-sa = {
+        version   = %{version}
+        url       = http://download.savannah.nongnu.org/releases/spamass-milt/
+        regex     = spamass-milter-(__VER__)\.tar\.gz
+    }
+
+%prep
+    %setup -q -n spamass-milter-%{version}
+    %patch -p0
+
+%build
+    #   configure program
+    %{l_shtool} subst \
+        -e 's;libmilter/mfapi;milter/mfapi;g' \
+        configure
+    CC="%{l_cc}" \
+    CXX="%{l_cxx}" \
+    CFLAGS="%{l_cflags -O}" \
+    CXXFLAGS="%{l_cxxflags -O}" \
+    CPPFLAGS="%{l_cppflags}" \
+    LDFLAGS="%{l_ldflags} %{l_fsl_ldflags}" \
+    LIBS="%{l_fsl_libs}" \
+    ./configure \
+        --prefix=%{l_prefix}
+
+    #   build program
+    %{l_make} %{l_mflags -O}
+
+%install
+    #   install program
+    rm -rf $RPM_BUILD_ROOT
+    %{l_make} %{l_mflags} install AM_MAKEFLAGS="DESTDIR=$RPM_BUILD_ROOT"
+
+    #   strip down installation
+    strip $RPM_BUILD_ROOT%{l_prefix}/sbin/* >/dev/null 2>&1 || true
+
+    #   install run-command script
+    %{l_shtool} mkdir -f -p -m 755 \
+        $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d
+    %{l_shtool} install -c -m 755 %{l_value -s -a} \
+        %{SOURCE rc.milter-sa} $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d/
+
+    #   install OSSP fsl configuration
+    %{l_shtool} mkdir -f -p -m 755 \
+        $RPM_BUILD_ROOT%{l_prefix}/etc/fsl
+    %{l_shtool} install -c -m 644 %{l_value -s -a} \
+        %{SOURCE fsl.milter-sa} $RPM_BUILD_ROOT%{l_prefix}/etc/fsl/
+
+    #   create run-time directory
+    %{l_shtool} mkdir -f -p -m 755 \
+        $RPM_BUILD_ROOT%{l_prefix}/var/milter-sa
+
+    #   determine installation files
+    %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT \
+        %{l_files_std} \
+        '%config %{l_prefix}/etc/fsl/*' \
+        '%attr(755,%{l_rusr},%{l_mgrp}) %{l_prefix}/var/milter-sa'
+
+%files -f files
+
+%clean
+    rm -rf $RPM_BUILD_ROOT
+
+%post
+    #   after upgrade, restart service
+    [ $1 -eq 2 ] || exit 0
+    eval `%{l_rc} milter-sa status 2>/dev/null`
+    [ ".$milter_sa_active" = .yes ] && %{l_rc} milter-sa restart
+    exit 0
+
+%preun
+    #   before erase, stop service and remove log files
+    [ $1 -eq 0 ] || exit 0
+    %{l_rc} milter-sa stop 2>/dev/null
+    rm -f $RPM_INSTALL_PREFIX/var/milter-sa/* >/dev/null 2>&1 || true
+    exit 0
+

+ 65 - 0
milter-sa/rc.milter-sa

@@ -0,0 +1,65 @@
+#!@l_prefix@/bin/openpkg rc
+##
+##  rc.milter-sa -- Run-Commands
+##
+
+%config
+    milter_sa_enable="$openpkg_rc_def"
+    milter_sa_flags="-a"
+    milter_sa_prolog="true"
+    milter_sa_epilog="true"
+    milter_sa_numfiles="10"
+    milter_sa_minsize="1M"
+    milter_sa_complevel="9"
+
+%common
+    milter_sa_pidfile="@l_prefix@/var/milter-sa/milter-sa.pid"
+    milter_sa_logfile="@l_prefix@/var/milter-sa/milter-sa.log"
+    milter_sa_socket="@l_prefix@/var/milter-sa/milter-sa.socket"
+    milter_sa_signal () {
+        [ -f $milter_sa_pidfile ] && kill -$1 `cat $milter_sa_pidfile`
+    }
+
+%status -u @l_susr@ -o
+    milter_sa_usable="unknown"
+    milter_sa_active="no"
+    rcService milter-sa enable yes && \
+        milter_sa_signal 0 && milter_sa_active="yes"
+    echo "milter_sa_enable=\"$milter_sa_enable\""
+    echo "milter_sa_usable=\"$milter_sa_usable\""
+    echo "milter_sa_active=\"$milter_sa_active\""
+
+%start -u @l_rusr@
+    rcService milter-sa enable yes || exit 0
+    rcService milter-sa active yes && exit 0
+    rm -f $milter_sa_socket >/dev/null 2>&2 || true
+    ( umask 002
+      export PATH=@l_prefix@/bin:$PATH
+      @l_prefix@/sbin/spamass-milter \
+           -f -p local:$milter_sa_socket \
+           -P $milter_sa_pidfile \
+           $milter_sa_flags
+    ) || exit $?
+
+%stop -u @l_rusr@
+    rcService milter-sa enable yes || exit 0
+    rcService milter-sa active no  && exit 0
+    milter_sa_signal TERM
+    sleep 2
+    rm -f $milter_sa_pidfile >/dev/null 2>&1 || true
+    rm -f $milter_sa_socket  >/dev/null 2>&1 || true
+
+%restart -u @l_susr@
+    rcService milter-sa enable yes || exit 0
+    rcService milter-sa active no  && exit 0
+    rc milter-sa stop start
+
+%daily -u @l_susr@
+    rcService milter-sa enable yes || exit 0
+    shtool rotate -f \
+        -n $milter_sa_numfiles -s $milter_sa_minsize -d \
+        -z $milter_sa_complevel -m 644 -o @l_rusr@ -g @l_rgrp@ \
+        -P "$milter_sa_prolog" \
+        -E "$milter_sa_epilog; rc milter-sa restart" \
+        $milter_sa_logfile
+