diff options
author | Jamie Lenehan <lenehan@twibble.org> | 2006-09-13 23:16:01 +0000 |
---|---|---|
committer | Jamie Lenehan <lenehan@twibble.org> | 2006-09-13 23:16:01 +0000 |
commit | 506afe9fc6e1a8c2edfad0702797f3a66b8bb605 (patch) | |
tree | 867fc2457ada654401fd05f5f047928e5086b65e /packages/clamav/files/clamav-freshclam.init | |
parent | 672d04d32f12b96b47dd6d16293f7ff8e96c3d97 (diff) |
clamav: New package for the CLAM anti-virus toolkit for UNIX. It
includes a multi-threaded daemon, a command line scanner, a tool for
automatic updating via Internet and a shared library implementation
for the scanner. Tested on sh4 and i486.
Diffstat (limited to 'packages/clamav/files/clamav-freshclam.init')
-rw-r--r-- | packages/clamav/files/clamav-freshclam.init | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/packages/clamav/files/clamav-freshclam.init b/packages/clamav/files/clamav-freshclam.init new file mode 100644 index 0000000000..47491a2a54 --- /dev/null +++ b/packages/clamav/files/clamav-freshclam.init @@ -0,0 +1,145 @@ +#!/bin/sh +# This is a modified version of the debian clamav-freshclam init script +set -e +DAEMON=/usr/bin/freshclam +NAME=freshclam +DESC="ClamAV virus database updater" + +[ -x $DAEMON ] || exit 0 + +CLAMAV_CONF_FILE=/etc/clamd.conf +FRESHCLAM_CONF_FILE=/etc/freshclam.conf +PIDFILE=/var/run/clamav/freshclam.pid + +slurp_config() +{ + CLAMAVCONF="$1" + + if [ -e "$CLAMAVCONF" ]; then + for variable in `egrep -v '^[[:space:]]*(#|$)' "$CLAMAVCONF" | awk '{print $1}'`; do + if [ "$variable" = 'DatabaseMirror' ]; then + if [ -z "$DatabaseMirror" ]; then + for i in `grep ^$variable $CLAMAVCONF | awk '{print $2}'`; do + value="$i $value" + done + else + continue + fi + elif [ "$variable" = 'VirusEvent' -o "$variable" = 'OnUpdateExecute' -o "$variable" = 'OnErrorExecute' ]; then + value=`grep ^$variable $CLAMAVCONF | head -n1 | sed -e s/$variable\ //` + else + value=`grep ^$variable $CLAMAVCONF | head -n1 | awk '{print $2}'` + fi + if ! [ "$value" = "$variable" -o "$value" = "" ]; then + export "$variable"="$value" + else + export "$variable"="true" + fi + unset value + done + fi +} + + +slurp_config "$FRESHCLAM_CONF_FILE" + +for inet in $INTERFACE; do + if route | grep -q "$inet"; then + IS_UP=true + break + else + IS_UP=false + fi +done +for inet in $INTERFACE; do + if [ "$inet" = "$IFACE" ]; then + match=true + break + else + match=false + fi +done + +# We don't want to always start/stop if running from if-up/down.d +if ! [ "$1" = "start" -o "$1" = "stop" ]; then # Exempt restart/reload/etc from checks + if [ -n "$INTERFACE" ]; then # Want it only run from if-up.d + if [ -z "$IFACE" ]; then # Is not called by if-up.d + if [ "$IS_UP" = false ]; then # And route isn't up (e.g., upgrade) + echo "Interface not up. Exiting." + exit 0 + fi + elif [ "$match" != 'true' ]; then # IFACE coming up is not the one selected + echo "Interface not up. Exiting." + exit 0 + fi + fi +fi + +# If user wants it run from cron, we only accept no-daemon and stop +if [ -f /etc/cron.d/clamav-freshclam ]; then + if ! [ "$1" = "no-daemon" -o "$1" = "stop" ]; then + echo "Cron option has been selected for running freshclam" + echo "Please either run freshclam directly, or run the init" + echo "script with the 'no-daemon' option" + exit 0 + fi +fi + +[ -z "$UpdateLogFile" ] && UpdateLogFile=/var/log/clamav/freshclam.log + +if [ -z "$DatabaseDirectory" ]; then + [ -r "$CLAMAV_CONF_FILE" ] && DatabaseDirectory=$(grep 'DataDirectory' "$CLAMAV_CONF_FILE" | awk '{print $2}') + [ -z "$DatabaseDirectory" ] && DatabaseDirectory=/var/lib/clamav/ +fi + +[ -e "$PIDFILE" ] && PID=`cat $PIDFILE` +[ "$PID" = '1' ] && unset PID + +# Make sure dirs exist and are correct +for i in /var/run/clamav /var/log/clamav $DatabaseDirectory +do + [ ! -d $i ] && mkdir -p $i && chown clamav:clamav $i +done + +case "$1" in + no-daemon) + echo "It takes freshclam ~3min to timeout and try the next mirror in the list" + freshclam -l "$UpdateLogFile" --datadir "$DatabaseDirectory" + ;; + start) + echo -n "Starting $DESC: " + start-stop-daemon -S -x $DAEMON -- -d --quiet -p $PIDFILE + echo "$NAME" + ;; + stop) + echo -n "Stopping $DESC: " + start-stop-daemon -o -K -q -p $PIDFILE $DAEMON + if [ -n "$PID" ]; then + sleep 1 + if kill -0 "$PID" 2>/dev/null; then + echo -n "Waiting . " + cnt=0 + while kill -0 "$PID" 2>/dev/null; do + cnt=`expr "$cnt" + 1` + if [ "$cnt" -gt 60 ]; then + echo -n " Failed.. " + break + fi + sleep 2 + echo -n ". " + done + fi + fi + echo "$NAME" + ;; + restart|force-reload) + $0 stop + $0 start + ;; + *) + echo "Usage: $0 {no-daemon|start|stop|restart|force-reload}" >&2 + exit 1 + ;; +esac + +exit 0 |