| #!/sbin/runscript |
| # Copyright 1999-2013 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| # $Id$ |
| |
| daemon_clamd="/usr/sbin/clamd" |
| daemon_freshclam="/usr/bin/freshclam" |
| daemon_milter="/usr/sbin/clamav-milter" |
| |
| extra_commands="logfix" |
| |
| depend() { |
| use net |
| provide antivirus |
| } |
| |
| get_config() { |
| clamconf | sed 's/["=]//g' | \ |
| awk "{ |
| if(\$0==\"Config file: $1.conf\") S=1 |
| if(S==1&&\$0==\"\") { |
| print \"$3\" |
| exit |
| } |
| if(S==1&&\$1~\"^$2\$\") { |
| print \$2!=\"disabled\"?\$2:\"$3\" |
| exit |
| } |
| }" |
| } |
| |
| start() { |
| # populate variables and fix log file permissions |
| logfix |
| |
| if [ "${START_CLAMD}" = "yes" ]; then |
| checkpath --quiet --mode 755 \ |
| --owner "${clamd_user}":"${clamd_user}" \ |
| --directory `dirname ${clamd_socket}` |
| if [ -S "${clamd_socket}" ]; then |
| rm -f ${clamd_socket} |
| fi |
| ebegin "Starting clamd" |
| start-stop-daemon --start --quiet \ |
| --nicelevel ${CLAMD_NICELEVEL:-0} \ |
| --ionice ${IONICE_LEVEL:-0} \ |
| --exec ${daemon_clamd} |
| eend $? "Failed to start clamd" |
| fi |
| |
| if [ "${START_FRESHCLAM}" = "yes" ]; then |
| checkpath --quiet --mode 755 \ |
| --owner "${clamd_user}":"${clamd_user}" \ |
| --directory `dirname ${clamd_socket}` |
| ebegin "Starting freshclam" |
| start-stop-daemon --start --quiet \ |
| --nicelevel ${FRESHCLAM_NICELEVEL:-0} \ |
| --ionice ${IONICE_LEVEL:-0} \ |
| --exec ${daemon_freshclam} -- -d |
| retcode=$? |
| if [ ${retcode} = 1 ]; then |
| eend 0 |
| einfo "Virus databases are already up to date." |
| else |
| eend ${retcode} "Failed to start freshclam" |
| fi |
| fi |
| |
| if [ "${START_MILTER}" = "yes" ]; then |
| if [ -z "${MILTER_CONF_FILE}" ]; then |
| MILTER_CONF_FILE="/etc/clamav-milter.conf" |
| fi |
| |
| ebegin "Starting clamav-milter" |
| start-stop-daemon --start --quiet \ |
| --nicelevel ${MILTER_NICELEVEL:-0} \ |
| --ionice ${IONICE_LEVEL:-0} \ |
| --exec ${daemon_milter} -- -c ${MILTER_CONF_FILE} |
| eend $? "Failed to start clamav-milter" |
| fi |
| } |
| |
| stop() { |
| if [ "${START_CLAMD}" = "yes" ]; then |
| ebegin "Stopping clamd" |
| start-stop-daemon --stop --quiet --name clamd |
| eend $? "Failed to stop clamd" |
| fi |
| if [ "${START_FRESHCLAM}" = "yes" ]; then |
| ebegin "Stopping freshclam" |
| start-stop-daemon --stop --quiet --name freshclam |
| eend $? "Failed to stop freshclam" |
| fi |
| if [ "${START_MILTER}" = "yes" ]; then |
| ebegin "Stopping clamav-milter" |
| start-stop-daemon --stop --quiet --name clamav-milter |
| eend $? "Failed to stop clamav-milter" |
| fi |
| } |
| |
| logfix() { |
| clamd_socket=$(get_config clamd LocalSocket /run/clamav/clamd.sock) |
| clamd_user=$(get_config clamd User clamav) |
| freshclam_user=$(get_config freshclam DatabaseOwner clamav) |
| |
| if [ "${START_CLAMD}" = "yes" ]; then |
| # fix clamd log permissions |
| # (might be clobbered by logrotate or something) |
| local logfile=$(get_config clamd LogFile) |
| if [ -n "${logfile}" ]; then |
| checkpath --quiet \ |
| --owner "${clamd_user}":"${clamd_user}" \ |
| --mode 640 \ |
| --file ${logfile} |
| fi |
| fi |
| |
| if [ "${START_FRESHCLAM}" = "yes" ]; then |
| # fix freshclam log permissions |
| # (might be clobbered by logrotate or something) |
| local logfile=$(get_config freshclam UpdateLogFile) |
| if [ -n "${logfile}" ]; then |
| checkpath --quiet \ |
| --owner "${freshclam_user}":"${freshclam_user}" \ |
| --mode 640 \ |
| --file ${logfile} |
| fi |
| fi |
| } |