blob: 95d686a199a260c8e38be66be3b3edd3774ca475 [file] [log] [blame]
#!/bin/sh
# Copyright 2007,2008 Duncan Findlay <duncf@debian.org>
# Copyright 2008-2020 Noah Meyerhans <noahm@debian.org>
#
# Licensed under the Apache License, Version 2.0 (the "License"). You may
# not use this file except in compliance with the License. A copy of the
# License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is distributed
# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
# express or implied. See the License for the specific language governing
# permissions and limitations under the License.
# Daily maintenance script for SpamAssassin updates. This is
# typically invoked by cron or a systemd timer.
test -f /etc/default/spamassassin && . /etc/default/spamassassin
show_usage() {
cmd=$(basename "$0")
cat <<EOF
$cmd performs periodic spamassassin maintainance, including executing sa-update
and sa-compile. It is typically executed via the spamassassin-maintenance.timer
timer or cron.
$cmd takes no options
EOF
}
# If there's a problem with the ruleset or configs, print the output
# of spamassassin --lint (which will typically get emailed to root)
# and abort.
die_with_lint() {
env -i LANG="$LANG" PATH="$PATH" start-stop-daemon \
--chuid debian-spamd:debian-spamd --start \
--exec /usr/bin/spamassassin -- -D --lint 2>&1
exit 1
}
do_compile() {
if command -v re2c > /dev/null 2>&1 &&
[ -x /usr/bin/sa-compile ]; then
env -i LANG="$LANG" PATH="$PATH" start-stop-daemon \
--chuid debian-spamd:debian-spamd --start \
--exec /usr/bin/sa-compile -- --quiet
# Fixup perms -- group and other should be able to
# read and execute, but never write. Works around
# sa-compile's failure to obey umask.
runuser -u debian-spamd -- \
chmod -R go-w,go+rX /var/lib/spamassassin/compiled
fi
}
# Tell a running spamd to reload its configs and rules.
reload() {
# Reload spamd if it's running
if command -v spamd > /dev/null 2>&1 &&
[ -f /run/spamd.pid ]; then
if which invoke-rc.d >/dev/null 2>&1; then
invoke-rc.d --quiet spamd status > /dev/null && \
invoke-rc.d spamd reload > /dev/null
else
/etc/init.d/spamd reload > /dev/null
fi
fi
if [ -d /etc/spamassassin/sa-update-hooks.d ]; then
run-parts --lsbsysinit /etc/spamassassin/sa-update-hooks.d
fi
}
if [ "$#" -gt 0 ]; then
show_usage
exit 0
fi
test -x /usr/bin/sa-update || exit 0
command -v gpg > /dev/null || exit 0
# Update
umask 022
env -i LANG="$LANG" PATH="$PATH" http_proxy="$http_proxy" \
https_proxy="$https_proxy" \
start-stop-daemon --chuid debian-spamd:debian-spamd --start \
--exec /usr/bin/sa-update -- \
--gpghomedir /var/lib/spamassassin/sa-update-keys 2>&1
case $? in
0)
# got updates!
env -i LANG="$LANG" PATH="$PATH" start-stop-daemon \
--chuid debian-spamd:debian-spamd --start \
--exec /usr/bin/spamassassin -- --lint 2>&1 || die_with_lint
do_compile
reload
;;
1)
# no updates
exit 0
;;
2)
# lint failed!
die_with_lint
;;
*)
echo "sa-update failed for unknown reasons" 1>&2
exit 1
;;
esac
exit 0
# Local variables:
# mode: shell-script
# tab-width: 4
# indent-tabs-mode: nil
# end: