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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
#!/bin/sh
### BEGIN INIT INFO
# Provides: clamav-freshclam
# Required-Start: $remote_fs $syslog
# Should-Start: clamav-daemon
# Required-Stop: $remote_fs $syslog
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: ClamAV virus database updater
# Description: Clam AntiVirus virus database updater
### END INIT INFO
DAEMON=/usr/bin/freshclam
NAME=freshclam
DESC="ClamAV virus database updater"
[ -x $DAEMON ] || exit 0
CLAMAV_CONF_FILE=/etc/clamav/clamd.conf
FRESHCLAM_CONF_FILE=/etc/clamav/freshclam.conf
PIDFILE=/var/run/clamav/freshclam.pid
[ -f /var/lib/clamav/interface ] && INTERFACE=`cat /var/lib/clamav/interface`
#COMMON-FUNCTIONS#
. /lib/lsb/init-functions
slurp_config "$FRESHCLAM_CONF_FILE"
[ -n "$PidFile" ] && PIDFILE="$PidFile"
[ -n "$DataBaseDirectory" ] || DataBaseDirectory=/var/run/clamav
make_dir "$DataBaseDirectory"
make_dir $(dirname "$PidFile")
if [ -f "$PIDFILE" ]; then
PID=`pidofproc -p $PIDFILE $DAEMON`
RUNNING=$?
else
PID=`pidofproc $DAEMON`
RUNNING=$?
fi
handle_iface()
{
OPTIND=1
if [ "$1" = "stop" ] && [ "$RUNNING" != 0 ]; then
return 1
elif [ "$1" = "start" ] && [ "$RUNNING" = 0 ]; then
return 1
else
return 0
fi
IS_UP=0
MATCH=0
for inet in $INTERFACE; do
route | grep -q "$inet" && IS_UP=`expr "$IS_UP" + 1`
[ "$inet" = "$IFACE" ] && MATCH=1
done
if [ -n "$INTERFACE" ]; then # Want if-up.d handling
if [ -n "$IFACE" ]; then # Called by if-up.d - for us
if [ "$MATCH" = '1' ]; then # IFACE is ours
if [ "$IS_UP" = '1' ]; then # and is only one up
return 0
else # Either not up, or others are up
return 1
fi
else # IFACE is not ours
return 1
fi
else # Not called by if-up.d && $1='(stop|start)'
return 1
fi
else # No if-up.d handling - just return
return 0
fi
}
handle_iface $1 || exit 0
[ -z "$UpdateLogFile" ] && UpdateLogFile=/var/log/clamav/freshclam.log
[ -z "$DatabaseDirectory" ] && DatabaseDirectory=/var/lib/clamav/
[ -n "$DatabaseOwner" ] || DatabaseOwner=clamav
case "$1" in
no-daemon)
su "$DatabaseOwner" -p -s /bin/sh -c "freshclam -l $UpdateLogFile --datadir $DatabaseDirectory"
;;
start)
OPTIND=1
log_daemon_msg "Starting $DESC" "$NAME"
# If user wants it run from cron, we only accept no-daemon and stop
if [ -f /etc/cron.d/clamav-freshclam ]; then
log_warning_msg "Not starting $NAME - cron option selected"
log_warning_msg "Run the init script with the 'no-daemon' option"
log_end_msg 255
exit 0
fi
start-stop-daemon --start -o -c "$DatabaseOwner" --exec $DAEMON -- -d --quiet
log_end_msg $?
;;
stop)
OPTIND=1
log_daemon_msg "Stopping $DESC" "$NAME"
if [ -n "$PID" ]; then
kill -15 -"$PID"
ret=$?
sleep 1
if kill -0 "$PID" 2>/dev/null; then
ret=$?
log_progress_msg "Waiting . "
cnt=0
while kill -0 "$PID" 2>/dev/null; do
ret=$?
cnt=`expr "$cnt" + 1`
if [ "$cnt" -gt 15 ]; then
kill -9 "$PID"
ret=$?
break
fi
sleep 2
log_progress_msg ". "
done
fi
else
killproc -p $PIDFILE $DAEMON
ret=$?
fi
log_end_msg $ret
;;
restart|force-reload)
$0 stop
$0 start
;;
reload-log)
OPTIND=1
log_daemon_msg "Reloading $DESC" "$NAME"
if [ "$RUNNING" = 0 ] && [ -n "$PID" ]; then
kill -HUP $PID
fi
log_end_msg $?
;;
skip)
;;
status)
status_of_proc "$DAEMON" "$NAME"
exit $?
;;
*)
log_failure_msg "Usage: $0 {no-daemon|start|stop|restart|force-reload|reload-log|skip|status}" >&2
exit 1
;;
esac
exit 0
|