blob: 47491a2a5420002cd1979a22b718e9bf2665fe94 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
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
|