Package: spamassassin
Version: 3.2.4-1
Severity: wishlist
Tags: patch

The attached patch extends cronjob to support multiple/alternate daemons.

Kind regards,

 - Jonas


-- System Information:
Debian Release: lenny/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.25-2-amd64 (SMP w/2 CPU cores)
Locale: LANG=da_DK.UTF-8, LC_CTYPE=da_DK.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages spamassassin depends on:
pn  libarchive-tar-perl           <none>     (no description available)
ii  libdigest-sha1-perl           2.11-2+b1  NIST SHA-1 message digest algorith
ii  libhtml-parser-perl           3.56-1+b1  A collection of modules that parse
ii  libnet-dns-perl               0.63-1+b1  Perform DNS queries from a Perl sc
pn  libsocket6-perl               <none>     (no description available)
ii  libsys-hostname-long-perl     1.4-2      Figure out the long (fully-qualifi
ii  libwww-perl                   5.812-1    WWW client/server library for Perl
ii  perl                          5.10.0-10  Larry Wall's Practical Extraction 
ii  perl-modules [libio-zlib-perl 5.10.0-10  Core Perl modules

Versions of packages spamassassin recommends:
ii  gcc                           4:4.3.0-8  The GNU C compiler
ii  gnupg                         1.4.9-2    GNU privacy guard - a free PGP rep
ii  libc6-dev                     2.7-12     GNU C Library: Development Librari
pn  libmail-spf-perl              <none>     (no description available)
pn  libsys-syslog-perl            <none>     (no description available)
ii  make                          3.81-5     The GNU version of the "make" util
pn  re2c                          <none>     (no description available)
pn  spamc                         <none>     (no description available)
diff -u spamassassin-3.2.4/debian/spamassassin.default 
spamassassin-3.2.4/debian/spamassassin.default
--- spamassassin-3.2.4/debian/spamassassin.default
+++ spamassassin-3.2.4/debian/spamassassin.default
@@ -5,6 +5,7 @@
 # There may be security risks.
 
 # Change to one to enable spamd
+# (CRON_* and SA_UPDATE_* options below is unaffected by this setting)
 ENABLED=0
 
 # Options
@@ -31,0 +33,32 @@
+
+# Cronjob bayes token expiry
+# Set to anything but 0 to enable the cron job to automatically expire
+# old bayes tokens with the nightly cronjob
+# Dependent daemons will be fully stopped during the bayes token expiry
+# You should also disable bayes_auto_expire in /etc/spamassassin/local.cf
+CRON_BAYES_EXPIRE=0
+
+# switch (using su) to and invoke sa-update for each of these users
+# If undefined, sa-update is invoked for root
+#SA_UPDATE_USERS="amavis"
+
+# Daemons
+# Set to list of SysV daemons to be reloaded after a ruleset update.
+# If CRON_BAYES_EXPIRE enabled the daemons are instead stopped as listed
+# here and started again in reverse order
+CRON_DAEMONS="spamassassin"
+#CRON_DAEMONS="exim4 amavis"
+
+# sa-update options
+# Options passed to sa-update in cronjob
+SA_UPDATE_OPTIONS=""
+#SA_UPDATE_OPTIONS="--gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 
--channel saupdates.openprotect.com --channel updates.spamassassin.org"
+
+# sa-compile options
+# Options passed to sa-compile in cronjob
+SA_COMPILE_OPTIONS=""
+
+# sa-compile options
+# Options passed to sa-compile in cronjob
+SA_LEARN_OPTIONS=""
+#SA_LEARN_OPTIONS="--force-expire"
diff -u spamassassin-3.2.4/debian/spamassassin.cron.daily 
spamassassin-3.2.4/debian/spamassassin.cron.daily
--- spamassassin-3.2.4/debian/spamassassin.cron.daily
+++ spamassassin-3.2.4/debian/spamassassin.cron.daily
@@ -9,11 +9,16 @@
 set -e
 
 CRON=0
+CRON_BAYES_EXPIRE=0
+CRON_DAEMONS="spamassassin"
+SA_UPDATE_USERS=""
+SA_UPDATE_OPTIONS=""
+SA_COMPILE_OPTIONS=""
+SA_LEARN_OPTIONS="--force-expire"
 
 test -f /etc/default/spamassassin && . /etc/default/spamassassin
 
 test -x /usr/bin/sa-update || exit 0
-test -x /etc/init.d/spamassassin || exit 0
 
 if [ "$CRON" = "0" ] ; then
     exit 0
@@ -29,15 +34,46 @@
 
-# Update
-sa-update || exit 0
+# Update, and catch errorlevel
+( set +e; sa-update $SA_UPDATE_OPTIONS ); sa_update_error=$?
+
+# Stop here if no update and no other tasks
+[ $sa_update_error -gt 0 ] && [ "$CRON_BAYES_EXPIRE" = "0" ] && exit 0
 
 # Compile, if rules have previously been compiled, and it's possible
-if [ -x /usr/bin/re2c -a -x /usr/bin/sa-compile -a -d 
/var/lib/spamassassin/compiled ]; then
-    sa-compile > /dev/null 2>&1
+if [ $sa_update_error -eq 0 ] && [ -x /usr/bin/re2c ] && [ -x 
/usr/bin/sa-compile ] && [ -d /var/lib/spamassassin/compiled ]; then
+    sa-compile $SA_COMPILE_OPTIONS > /dev/null 2>&1
 fi
 
-# Reload
-if which invoke-rc.d >/dev/null 2>&1; then
-    invoke-rc.d spamassassin reload > /dev/null 2>&1
+
+invoke_rc_d_silent() {
+    daemon="$1"
+    action="$2"
+    if which invoke-rc.d >/dev/null 2>&1; then
+       invoke-rc.d $daemon $action > /dev/null 2>&1
+    else
+       /etc/init.d/$daemon $action > /dev/null 2>&1
+    fi
+}
+
+if [ "$CRON_BAYES_EXPIRE" = "0" ]; then
+    # Reload spamassassin-dependent daemons
+    for daemon in $CRON_DAEMONS; do
+       invoke_rc_d_silent $daemon reload
+    done
 else
-    /etc/init.d/spamassassin reload > /dev/null 2>&1
+    # Expire old Bayes tokens and restart spamassassin-dependent daemons
+    daemons_stopped=""
+    for daemon in $CRON_DAEMONS; do
+       invoke_rc_d_silent $daemon stop
+       daemons_stopped="$daemon $daemons_stopped"
+    done
+    if [ -n "$SA_UPDATE_USERS" ]; then
+       for user in $SA_UPDATE_USERS; do
+           su -s /bin/sh -c "sa-learn $SA_LEARN_OPTIONS" $user > /dev/null 2>&1
+       done
+    else
+       sa-learn $SA_LEARN_OPTIONS > /dev/null 2>&1
+    fi
+    for daemon in $daemons_stopped; do
+       invoke_rc_d_silent $daemon start
+    done
 fi

Reply via email to