#!/sbin/openrc-run # Copyright 1999-2013 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 depend() { use logger need net before mta } checkconfig() { if [ ! -f "/etc/dcc/dcc_conf" ]; then eerror "You need a DCC configuration in /etc/dcc/dcc_conf" return 1 fi for i in DCCD_ENABLE GREY_ENABLE DCCM_ENABLE DCCM_ARGS DCCIFD_ENABLE DCC_LIBEXEC DCC_RUNDIR \ SOCKET_USER SOCKET_GROUP SOCKET_MODE; do read -r ${i} <<-EOF $( grep ^[[:space:]]*${i} /etc/dcc/dcc_conf | sed s/.*=// ) EOF done DCC_RUNDIR="${DCC_RUNDIR:-/var/run/dcc}" if [ ! -d "${DCC_RUNDIR}" ]; then checkpath -q -d -o root:root -m 0755 "${DCC_RUNDIR}" || return 1 fi } start() { checkconfig || return 1 local atleastone="${DCCD_ENABLE}${GREY_ENABLE}${DCCM_ENABLE}${DCCIFD_ENABLE}" atleastone=$( echo ${atleastone} | tr -d 'off' ) if [ -z "${atleastone}" ]; then eend 1 "At least one service should be 'on' in /etc/dcc/dcc_conf" return 1 fi if [ "${DCCD_ENABLE}" = "on" ] && [ -x "${DCC_LIBEXEC}/start-dccd" ]; then ebegin "Starting dccd" ${DCC_LIBEXEC}/start-dccd >/dev/null 2>&1 eend ${?} fi if [ "${GREY_ENABLE}" = "on" ] && [ -x "${DCC_LIBEXEC}/start-grey" ]; then ebegin "Starting grey" ${DCC_LIBEXEC}/start-grey >/dev/null 2>&1 eend ${?} fi if [ "${DCCM_ENABLE}" = "on" ] && [ -x "${DCC_LIBEXEC}/start-dccm" ]; then ebegin "Starting dccm" ${DCC_LIBEXEC}/start-dccm >/dev/null 2>&1 eend ${?} if !(echo ${DCCM_ARGS}|grep -q "^\-p\|[[:space:]]\-p"); then local dccmtimeout=0 while [ ${dccmtimeout} -le 20 ] ; do if [ -S "${DCC_RUNDIR}/dccm" ] || [ -r "${DCC_RUNDIR}/dccm" ]; then break else sleep 1 dccmtimeout=$(($dccmtimeout + 1)) fi done chown ${SOCKET_USER:-milter}:${SOCKET_GROUP:-milter} ${DCC_RUNDIR}/dccm 1>/dev/null 2>&1 chmod ${SOCKET_MODE:-664} ${DCC_RUNDIR}/dccm 1>/dev/null 2>&1 fi sed -i -e "s:^\-::" ${DCC_RUNDIR}/dccm.pid 1>/dev/null 2>&1 || return 1 fi if [ "${DCCIFD_ENABLE}" = "on" ] && [ -x "${DCC_LIBEXEC}/start-dccifd" ]; then ebegin "Starting dccif" ${DCC_LIBEXEC}/start-dccifd >/dev/null 2>&1 eend ${?} fi } stop() { checkconfig || return 1 if [ -r "${DCC_RUNDIR}/dccifd.pid" ]; then ebegin "Stopping dccif" kill -s 15 $(cat ${DCC_RUNDIR}/dccifd.pid) 2>/dev/null eend ${?} fi if [ -r "${DCC_RUNDIR}/dccm.pid" ]; then ebegin "Stopping dccm" kill -s 15 $(cat ${DCC_RUNDIR}/dccm.pid) 2>/dev/null eend ${?} fi if (pidof dccd >/dev/null 2>&1) && [ -x "${DCC_LIBEXEC}/stop-dccd" ]; then ebegin "Stopping dccd" ${DCC_LIBEXEC}/stop-dccd >/dev/null 2>&1 eend ${?} fi if (pidof dccd >/dev/null 2>&1) && [ -x "${DCC_LIBEXEC}/stop-dccd" ]; then ebegin "Stopping grey" ${DCC_LIBEXEC}/stop-dccd -G >/dev/null 2>&1 eend ${?} fi }