rendered paste bodyl#!/bin/sh -e## spampd SpamPD is a spamdetection proxy daemon for SMTP and LMTP## This script was written for debian# by Sven Mueller <debian@incase.de>## Version: 2.0 22-Aug-2005 debian@incase.de#### BEGIN INIT INFO# Provides: spampd# Required-Start: $syslog $network $named $time# Required-Stop: $syslog $network $named $time# Default-Start: 2 3 4 5# Default-Stop: S 0 1 6# Short-Description: spam detection proxy for SMTP and LMTP# Description: SpamAssassin based perl proxy for SMTP and LMTP# which marks mails as spam/nonspam based on SpamAssassin# results### END INIT INFOPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbinDESC='spam checking proxy daemon'NAME='spampd'PROGRAM=/usr/sbin/spampd#EXECUTABLE=`head -n 1 $PROGRAM | sed -e 's,^#![ ]*/,/,;s,[ ].*$,,'`EXECUTABLE=/usr/bin/perlPIDFILE=/var/run/spampd.pid. /lib/lsb/init-functions# set some important defaults (overridable via /etc/default/spampd)USERID=spampdGRPID=spampdif [ "$EUID" != "0" ]; then log_failure_msg "ERROR: Insufficient privileges. Retry as root" # LSB 3.0 says that return value of 4 indicates insufficient privileges exit 4fiif [ -f /etc/default/$NAME ]; then . /etc/default/$NAMEfi istrue () { ANS=$(echo $1 | tr A-Z a-z) [ "$ANS" = 'yes' -o "$ANS" = 'true' -o "$ANS" = 'enable' -o "$ANS" = '1' ]}## find out wether to start spampd or not#istrue ${STARTSPAMPD} && STARTSPAMPD='true'## Check wether the program is actually there## return 5 as demanded by LSB 2.1 when program isn't installed.[ -x $PROGRAM ] || exit 5# # Calculate final commandline#S_TAGALL=''S_AWL=''S_LOCALONLY=''istrue "$TAGALL" \&& S_TAGALL='--tagall'istrue "$AUTOWHITELIST" \&& S_AWL='--auto-whitelist'istrue "$LOCALONLY" \&& S_LOCALONLY='--L'istrue "$LOGINET" \&& LOGTARGET="inet" \|| LOGTARGET="unix"ARGS="${S_LOCALONLY} ${S_AWL} ${S_TAGALL} "[ -n "${LISTENPORT}" ] && ARGS="${ARGS} --port=${LISTENPORT}"[ -n "${LISTENHOST}" ] && ARGS="${ARGS} --host=${LISTENHOST}"[ -n "${DESTPORT}" ] && ARGS="${ARGS} --relayport=${DESTPORT}"[ -n "${DESTHOST}" ] && ARGS="${ARGS} --relayhost=${DESTHOST}"[ -n "${PIDFILE}" ] && ARGS="${ARGS} --pid=${PIDFILE}"[ -n "${CHILDREN}" ] && ARGS="${ARGS} --children=${CHILDREN}"[ -n "${USERID}" ] && ARGS="${ARGS} --user=${USERID}"[ -n "${GRPID}" ] && ARGS="${ARGS} --group=${GRPID}"[ -n "${LOGTARGET}" ] && ARGS="${ARGS} --logsock=${LOGTARGET}"[ -n "${ADDOPTS}" ] && ARGS="${ARGS} ${ADDOPTS}"function check_pid () { # $1 : process name # $2 : pid file # $3 : (optional) verbosity [ "$3" = "verbose" ] && VERBOSE=1 if [ -f $2 ]; then kill -0 `cat $2` > /dev/null 2>&1 RETVAL=$? if [ "$RETVAL" = "0" ]; then [ "$VERBOSE" ] && log_success_msg "$1 is running as `cat $2`" return 0 else [ "$VERBOSE" ] && log_failure_msg "PIDFILE $2 for $1 exists, but $1 is not running." rm $2 return 1 fi else [ "$VERBOSE" ] && log_failure_msg "PIDFILE $2 for $1 doesn't exists." return 4 fi return 3}case "$1" in start) if ! istrue "${STARTSPAMPD}"; then log_warning_msg "Starting $DESC: $NAME (disabled in /etc/default/$NAME)." # LSB 2.1: 6 mean unconfigured. This seems appropriate here. exit 6 fi log_daemon_msg "Starting $DESC" "$NAME" # if spampd is already running, exit 0 as demanded by LSB 2.1 # this also removes the PIDFILE if it exists but has no matching # process if check_pid $PROGRAM $PIDFILE ; then log_end_msg 0 exit 0 fi # if spampd is not installed, return 5 as demanded by LSB 2.1 if [ ! -x $EXECUTABLE ]; then log_error_msg "failed! - executable not found" exit 5 fi # start daemon start-stop-daemon --start --exec $EXECUTABLE \ --startas $PROGRAM --pidfile $PIDFILE \ --user $USERID --group $GRPID -- $ARGS if [ "$?" = '0' ]; then log_end_msg 0 exit 0 else log_end_msg 7 # LSB 2.1 says 7 should be returned when program # isn't running. exit 7 fi ;; stop) echo -n "Stopping $DESC: $NAME " set +e # if $PROGRAM is not running under PID given in # $PIDFILE, exit with 0 to be LSB compliant check_pid $PROGRAM $PIDFILE || exit 0 if istrue "$STARTSPAMPD" ; then start-stop-daemon --stop --exec $EXECUTABLE \ --pidfile $PIDFILE else start-stop-daemon --stop --exec $EXECUTABLE \ --pidfile $PIDFILE > /dev/null 2>&1 fi if [ "$?" = "0" ]; then log_end_msg 0 rm $PIDFILE exit 0 else if ! check_pid $PROGRAM $PIDFILE ; then log_end_msg 0 exit 0 else # if we had not successfully stopped the # program, we can assume the user didn't # have sufficient privileges. log_end_msg 1 exit 4 fi fi ;; status) check_pid $PROGRAM $PIDFILE verbose exit $? ;; reload) log_warning_msg "reload not implemented, try force-reload/restart instead" exit 3 ;; force-reload|try-restart) if check_pid $PROGRAM $PIDFILE ; then exec $0 restart else log_warning_msg "$DESC is not running. Try '$0 start' to start it." # LSB 2.1 says that this should return success, anyhow. exit 0 fi ;; restart) if check_pid $PROGRAM $PIDFILE ; then $0 stop fi exec $0 start ;; help) echo "Usage: $0 (start|stop|restart|try-restart|force-reload|status)" exit 0 ;; *) echo "Usage: $0 (start|stop|restart|try-restart|force-reload|status|help)" exit 2 ;;esaclog_error_msg "This point shouldn't be reached. Some weird thing happened"exit 1