120 lines
3.4 KiB
Bash
Executable File
120 lines
3.4 KiB
Bash
Executable File
#!/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() {
|
|
local cmd
|
|
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 [ -x /usr/bin/re2c -a -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
|
|
if [ -d /etc/spamassassin/sa-update-hooks.d ]; then
|
|
run-parts --lsbsysinit /etc/spamassassin/sa-update-hooks.d
|
|
fi
|
|
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
|
|
;;
|
|
esac
|
|
|
|
# Local variables:
|
|
# mode: shell-script
|
|
# tab-width: 4
|
|
# indent-tabs-mode: nil
|
|
# end:
|