#!/bin/ksh93 # description: start/stop Clam AntiVirus filter for sendmail # # default: S/K40 0/K40 1/K40 2/S87 # License: CDDL 1.0 - see http://www.opensource.org/licenses/CDDL-1.0 # Copyright (c) 2006-2014 Jens Elkner. All rights reserved. # $Id$ # default milter configuration file to use CONF=/etc/clamav/milter.conf NAME='Clam AntiVirus mail filter daemon' SPATH=@CLIENT_BASEDIR@/sbin DAEMON='clamav-milter' . /lib/svc/share/smf_include.sh function getSvcProp { typeset -n RES=$2 typeset VAL="${ svcprop -p "$1" ${SMF_FMRI} 2>/dev/null ; }" [[ ${VAL} != '""' && -n ${VAL} ]] && RES="${VAL}" || RES="$3" } [[ -z ${SMF_FMRI} ]] && SMF_FMRI='clammilter:default' case "$1" in start) getSvcProp config/file CONF "${CONF}" if [[ ! -r ${CONF} ]]; then print -u2 "Unable to read config file '${CONF}'." exit ${SMF_EXIT_ERR_CONFIG} fi # in case FixStaleSocket is not enabled, not doing this would # prevent the filter to work on the next start SOCKET='' while read KEY VAL TAIL ; do [[ ${KEY} == 'MilterSocket' ]] && SOCKET="${VAL}" && break done < "${CONF}" if [[ -n ${SOCKET} && -r ${SOCKET} ]]; then if ! rm -f "${SOCKET}" ; then print -u2 "Unable to remove ${SOCKET} - as long as it exist, ${DAEMON} would not start. So remove it manually, please." exit ${SMF_EXIT_ERR_PERM} fi fi print "Starting ${NAME} ..." if ! ${SPATH}/${DAEMON} -c "${CONF}" ; then print -u2 "'${SPATH}/${DAEMON} -c ${CONF}' failed." exit ${SMF_EXIT_ERR_FATAL} fi print 'done.' ;; stop) integer CID getSvcProp restarter/contract CID 0 if (( ! CID )); then print -u2 "${SMF_FMRI} is not running." else SIG='KILL' print "Sending SIG${SIG} to contract ${CID} ..." smf_kill_contract "${CID}" "${SIG}" print 'done.' fi ;; *) print -u2 "Usage: $0 { start | stop }" exit ${SMF_EXIT_ERR_FATAL} ;; esac exit ${SMF_EXIT_OK}