diff options
Diffstat (limited to 'debian/sendmail.init.d')
-rw-r--r-- | debian/sendmail.init.d | 1321 |
1 files changed, 0 insertions, 1321 deletions
diff --git a/debian/sendmail.init.d b/debian/sendmail.init.d deleted file mode 100644 index c96c66f..0000000 --- a/debian/sendmail.init.d +++ /dev/null @@ -1,1321 +0,0 @@ -#!/bin/sh -### BEGIN INIT INFO -# Provides: sendmail -# Required-Start: $local_fs $network -# Required-Stop: $local_fs $network -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: powerful, efficient, and scalable Mail Transport Agent -# Description: Sendmail is an alternative Mail Transport Agent (MTA) -# for Debian. It is suitable for handling sophisticated -# mail configurations, although this means that its -# configuration can also be complex. Fortunately, simple -# thing can be done easily, and complex thing are possible, -# even if not easily understood ;) Sendmail is the *ONLY* -# MTA with a Turing complete language to control *ALL* -# aspects of delivery! -### END INIT INFO - -# Author: Marc-Christian Petersen <m.c.p@kernel.linux-systeme.com> - -PATH=/bin:/usr/bin:/sbin:/usr/sbin -DESC="Mail Transport Agent (MTA)" -NAME=sendmail -DAEMON=/usr/sbin/$NAME -DAEMON_ARGS="" -SCRIPTNAME=/etc/init.d/$NAME - -# Exit if the package is not installed -[ -x "$DAEMON" ] || exit 0 - -# Read configuration variable file if it is present -[ -r /etc/default/sendmail ] && . /etc/default/sendmail - -# Load the VERBOSE setting and other rcS variables -. /lib/init/vars.sh - -# Define LSB log_* functions. -. /lib/lsb/init-functions - -#!/bin/sh -#----------------------------------------------------------------------------- -# $Sendmail: sm_helper.sh,v 8.14.2 2007-11-02 22:20:56 cowboy Exp $ -# -# Copyright (c) 1998-2007 Richard Nelson. All Rights Reserved. -# -# Debian helper function script for Debian Sendmail -# Note: this file supports 8.7.6 - 9.0.0 -# -# Notes (to all): -# * -# -# Notes (to self): -# * clean_queues fubar, esp wrt MSP -# -#----------------------------------------------------------------------------- -# -DEBUG=0; - -# Support stand-alone execution -if [ -z "$DAEMON" ]; then - PATH=/bin:/usr/bin:/sbin:/usr/sbin - DESC="Mail Transport Agent (MTA)" - NAME=sendmail - DAEMON=/usr/sbin/$NAME - DAEMON_ARGS="" - SCRIPTNAME=/etc/init.d/$NAME - - # Exit if the package is not installed - [ -x "$DAEMON" ] || exit 0 - - # Read configuration variable file if it is present - [ -r /etc/default/sendmail ] && . /etc/default/sendmail - - # Load the VERBOSE setting and other rcS variables - . /lib/init/vars.sh - - # Define LSB log_* functions. - . /lib/lsb/init-functions - fi; - -# Can't do this earlier, the lsb inclusion is unsafe :( -set -e; - -#------------------------------------------------------------------------------ -# Parameters for the sendmail daemon -# Do *NOT* touch these lines, instead, edit /etc/mail/sendmail.conf -# The _PARMS lines are listed in precedence order -#------------------------------------------------------------------------------ -Get_Parameters () { - - # Main configuration parameters in /etc/mail/sendmail.conf - DAEMON_MODE='Daemon'; - DAEMON_PARMS=''; - DAEMON_UID='root'; - QUEUE_MODE="$DAEMON_MODE"; - QUEUE_INTERVAL='10m'; - QUEUE_PARMS=''; - MSP_MODE="$QUEUE_MODE"; - MSP_INTERVAL="$QUEUE_INTERVAL"; - MSP_PARMS=""; - MISC_PARMS=''; - CRON_PARMS=''; - LOG_CMDS='No'; - - # Secondary (non-documented) parameters in /etc/mail/sendmail.conf - # Caveat Emptor: change these at your own risk - they impact several - # disjoint pieces parts... - SENDMAIL_ROOT='/var/run/sendmail'; - MTA_DAEMON='/usr/sbin/sendmail-mta'; - MTA_COMMAND='/usr/sbin/sendmail-mta'; - MTA_A='-Am'; - MTAL_L='-L sm-mta'; - MTAL_L_QUEUE='-L sm-mta-queue'; - MTAL_L_RUNQ='-L sm-mta-runq'; - MTA_ROOT="${SENDMAIL_ROOT}/mta"; - MTAL_PIDFILE="${MTA_ROOT}/sendmail.pid"; - MTAL_SOCKET="${MTA_ROOT}/smsocket"; - MTAL_CNTL="${MTA_ROOT}/smcontrol"; - MTAQ_L='-L sm-que'; - MTAQ_L_RUNQ='-L sm-que-runq'; - MTAQ_PIDFILE="${MTA_ROOT}/queue.pid"; - MTAQ_SOCKET="${MTA_ROOT}/qusocket"; - MTAQ_CNTL="${MTA_ROOT}/qucontrol"; - MSP_DAEMON='/usr/sbin/sendmail-msp'; - MSP_COMMAND='/usr/sbin/sendmail-msp'; - MSP_A='-Ac'; - MSP_L='-L sm-msp'; - MSP_L_QUEUE='-L sm-msp-queue'; - MSP_ROOT="${SENDMAIL_ROOT}/msp"; - MSP_PIDFILE="${MSP_ROOT}/sendmail.pid"; - MSP_SOCKET="${MSP_ROOT}/smsocket"; - MSP_CNTL="${MSP_ROOT}/smcontrol"; - - # Pull in any user modified variables - if [ -f /etc/mail/sendmail.conf ]; then - . /etc/mail/sendmail.conf; - fi; - - # These can't be user customized - SM_Get_Parameters='yes'; - PATH='/bin:/usr/bin:/sbin:/usr/sbin'; - STAMP_DIR="${SENDMAIL_ROOT}/stampdir"; - START_MTAL_CMD="start-stop-daemon \ - --pidfile $MTAL_PIDFILE \ - --exec $MTA_DAEMON \ - --startas $MTA_COMMAND \ - --start"; - STOP_MTAL_CMD="start-stop-daemon \ - --pidfile $MTAL_PIDFILE \ - --name sendmail-mta \ - --stop"; - SIGNAL_MTAL_CMD="start-stop-daemon \ - --pidfile $MTAL_PIDFILE \ - --name sendmail-mta \ - --stop"; - START_MTAQ_CMD="start-stop-daemon \ - --pidfile $MTAQ_PIDFILE \ - --make-pidfile \ - --exec $MTA_DAEMON \ - --startas $MTA_COMMAND \ - --start"; - STOP_MTAQ_CMD="start-stop-daemon \ - --pidfile $MTAQ_PIDFILE \ - --name sendmail-mta \ - --stop"; - SIGNAL_MTAQ_CMD="start-stop-daemon \ - --pidfile $MTAQ_PIDFILE \ - --name sendmail-mta \ - --stop"; - START_MSP_CMD="start-stop-daemon \ - --pidfile $MSP_PIDFILE \ - --exec $MSP_DAEMON \ - --startas $MSP_COMMAND \ - --chuid smmsp \ - --start"; - STOP_MSP_CMD="start-stop-daemon \ - --pidfile $MSP_PIDFILE \ - --name sendmail-msp \ - --stop"; - SIGNAL_MSP_CMD="start-stop-daemon \ - --pidfile $MSP_PIDFILE \ - --name sendmail-msp \ - --stop"; - NAME='sendmail'; - FLAGS='defaults 50'; - - # Sanitize some keyword entries - DAEMON_MODE=$(echo "$DAEMON_MODE" | tr '[:upper:]' '[:lower:]'); - QUEUE_MODE=$(echo "$QUEUE_MODE" | tr '[:upper:]' '[:lower:]'); - MSP_MODE=$(echo "$MSP_MODE" | tr '[:upper:]' '[:lower:]'); - - # See if we can share the listener and queue-runner daemon: - # * Both must be in daemon mode - # * They must have the same (possibly empty) parameters - if [ "$DAEMON_MODE" = "daemon" \ - -a \( \( "$QUEUE_MODE" = "cron" -o "$QUEUE_MODE" = "none" \) \ - -o \( "$QUEUE_MODE" != "cron" \ - -a "$QUEUE_MODE" != "none" \ - -a "$DAEMON_PARMS" = "$QUEUE_PARMS" \ - \) \ - \) ]; then - SPLIT_DAEMON=0; - else - SPLIT_DAEMON=1; - fi; - - # Version dependant support: - # 8.12.0+ M{TA,MSP}_A - if [ ! -f /usr/share/sendmail/cf/feature/msp.m4 ]; then - MTA_A=''; - MTAL_L=''; - MTAL_L_QUEUE=''; - MSP_A=''; - MSP_L=''; - MSP_L_QUEUE=''; - fi; - }; -#------------------------------------------------------------------------------ - - -#------------------------------------------------------------------------------ -# enhanced sendmail startup -#------------------------------------------------------------------------------ -start_mta () { - local result; - result=0; - # - # Make sure /var/run/sendmail/ exists - check_dirs; - # - # If already running, don't start it... - if is_running mta; then - log_warning_msg 'MTA is already running.'; - return 1; - fi; - # - # Check if we're going to run a daemon (and how many): - daemon_check || result=$?; - if [ "$result" -ne 0 ]; then - return 0; - fi; - # - # Mark restarted for communication betwixt here and /etc/mail/Makefile - touch $STAMP_DIR/reload; - # - if [ "$DAEMON_MODE" = "daemon" ]; then - # - # Allow Unix (local) connections betwixt MSP/MTA: - touch $MTAL_SOCKET; - # - # We can only afford to clean the MTA queues if running daemon mode, - # otherwise, there is a chance that a cronjob might still be using - # the queue... Thats also why we don't clean the MSP queues herein. - #clean_queues; - # - # cd to a safe place to stash core files... - cd $MTA_ROOT; - CMD="$START_MTAL_CMD -- $MTAL_PARMS"; - if [ "$LOG_CMDS" = "Yes" ]; then - logger -i -p mail.debug -- "$0 $CMD"; - fi; - $CMD & - # - # Update permissions on smsocket - sleep 2; - chown $DAEMON_UID:smmsp $MTAL_SOCKET; - chmod 0666 $MTAL_SOCKET; - fi; - # - # Check for split daemon mode (separate listener/queue runner) - if [ "$SPLIT_DAEMON" -eq 1 ]; then - CMD="$START_MTAQ_CMD -- $MTAQ_PARMS"; - if [ "$LOG_CMDS" = "Yes" ]; then - logger -i -p mail.debug -- "$0 $CMD"; - fi; - $CMD & - sleep 2; - qp=`expr "${MTAQ_PARMS}" : '.*\(-qp[0-9]*[smhdw]\)'` || true; - if [ -z "$qp" ]; then - chmod 0664 $MTAQ_PIDFILE; - else - qc=`ps --no-headers -fCsendmail \ - | egrep -e 'Queue control' \ - | awk '{print $2}'`; - if [ -z "$qc" ]; then - rm -f $MTAQ_PIDFILE; - else - chmod 0664 $MTAQ_PIDFILE; - printf "$qc\n$MTA_COMMAND $MTAQ_PARMS" > $MTAQ_PIDFILE; - fi; - fi; - fi; - # - # if running split service, run the client queues (just to make sure) - if check_msp; then - $MSP_COMMAND -q $MSP_A $MSP_L_QUEUE $MSP_PARMS $MISC_PARMS; - fi; - return $result; - }; - -start_msp () { - local result; - result=0; - # - # Make sure /var/run/sendmail/ exists - check_dirs; - # - # If already running, don't start it... - if is_running msp; then - log_warning_msg 'MSP is already running.'; - return 1; - fi; - # - # Check to see if MSP mode is indeed available - if ! check_msp; then - return 0; - fi; - # - # Check if we're going to run a daemon: - if [ "$MSP_MODE" != 'daemon' ]; then - return 0; - fi; - # - # We can only afford to clean the MSP queues if running daemon mode, - # otherwise, there is a chance that a cronjob might still be using - # the queue... Thats also why we don't clean the MTA queues herein. - #clean_queues /var/spool/mqueue-client; - # - # cd to a safe place to stash core files... - cd $MSP_ROOT; - $START_MSP_CMD -- \ - $MSP_A $MSP_L -q${MSP_INTERVAL} $MSP_PARMS $MISC_PARMS & - return $result; - }; - -start_sendmail () { - local result; - # Update databases - make_databases; - result=0; - start_mta || result=$?; - if check_msp; then - start_msp || true; - fi; - return $result; - }; -#------------------------------------------------------------------------------ - - -#------------------------------------------------------------------------------ -# enhanced sendmail reload -#------------------------------------------------------------------------------ -reload_mta () { - local result; - # - # Make sure /var/run/sendmail/ exists - check_dirs; - # - # Update databases - make_databases; - # - # reload (signal -HUP) is *much* better/faster than stop/start - # - # Mark restarted for communication betwixt here and /etc/mail/Makefile - touch $STAMP_DIR/reload; - # - # If not running, just start it... - if ! is_running mta; then - start_mta; - fi; - # - # Is running, must signal it... - result=0; - $SIGNAL_MTAL_CMD --signal HUP --oknodo --quiet || result=$?; - sleep 2; - chown $DAEMON_UID:smmta $MTAL_SOCKET; - chmod 0666 $MTAL_SOCKET; - # - # Check for split daemon mode (separate listener/queue runner) - if [ "$SPLIT_DAEMON" -eq 1 ]; then - $SIGNAL_MTAQ_CMD --signal HUP --oknodo --quiet || true; - fi; - return $result; - }; - -reload_msp () { - local result; - result=0; - # - # Make sure /var/run/sendmail/ exists - check_dirs; - # - # reload (signal -HUP) is *much* better/faster than stop/start - # - # If not running, just start it... - if ! is_running msp; then - start_msp; - fi; - # - # Is running, must signal it... - $SIGNAL_MSP_CMD --signal HUP --oknodo --quiet || result=$?; - return $result; - }; - -reload_sendmail () { - local result; - result=0; - reload_mta || result=$?; - if check_msp; then - reload_msp || true; - fi; - return $result; - }; -#------------------------------------------------------------------------------ - - -#------------------------------------------------------------------------------ -# enhanced sendmail shutdown -#------------------------------------------------------------------------------ -stop_mta () { - local result cnt; - result=0; - stopped=0; - # - # Make sure /var/run/sendmail/ exists - check_dirs; - # - # If not running, don't stop it... - if ! is_running mta; then - return 0; - fi; - # - # Is running, must stop it... - $STOP_MTAL_CMD --signal TERM --quiet --oknodo > /dev/null; - # - # Now we have to wait until sendmail has _really_ stopped. - # - sleep 2; - if $STOP_MTAL_CMD --signal TERM --quiet > /dev/null; then - log_progress_msg ' Waiting .'; - cnt=0; - while $STOP_MTAL_CMD --signal TERM --quiet > /dev/null; do - cnt=`expr $cnt + 1`; - if [ $cnt -gt 60 ]; then - # - # Waited 120 seconds now. Fail. - # - echo -n ' Failed '; - stopped=1; - break; - fi; - sleep 2; - log_progress_msg '.'; - done; - echo -n ' Done '; - fi; - # - # Remove pidfile iff stopped - if ! $STOP_MTAL_CMD --signal TERM --quiet > /dev/null; then - rm -f "$MTAL_PIDFILE"; - fi - return $result; - }; - -stop_queue () { - local result cnt; - result=0; - stopped=0; - # - # Make sure /var/run/sendmail/ exists - check_dirs; - # - # If not running, don't stop it... - if ! is_running queue; then - return 0; - fi; - # - # Is running, must stop it... - $STOP_MTAQ_CMD --signal TERM --quiet --oknodo > /dev/null; - # - # Now we have to wait until sendmail has _really_ stopped. - # - sleep 2; - if $STOP_MTAQ_CMD --signal TERM --quiet > /dev/null; then - log_progress_msg ' Waiting .'; - cnt=0; - while $STOP_MTAQ_CMD --signal TERM --quiet > /dev/null; do - cnt=`expr $cnt + 1`; - if [ $cnt -gt 60 ]; then - # - # Waited 120 seconds now. Fail. - # - echo -n ' Failed '; - stopped=1; - break; - fi; - sleep 2; - log_progress_msg '.'; - done; - echo -n ' Done '; - fi; - # - # Remove pidfile iff stopped - if ! $STOP_MTAQ_CMD --signal TERM --quiet > /dev/null; then - rm -f "$MTAQ_PIDFILE"; - fi - return $result; - }; - -stop_msp () { - local result cnt; - result=0; - stopped=0; - # - # Make sure /var/run/sendmail/ exists - check_dirs; - # - # If not running, don't stop it... - if ! is_running msp; then - return 0; - fi; - # - # Is running, must stop it... - $STOP_MSP_CMD --signal TERM --quiet --oknodo > /dev/null; - # - # Now we have to wait until sendmail has _really_ stopped. - # - sleep 2; - if $STOP_MSP_CMD --signal TERM --quiet > /dev/null; then - log_progress_msg 'Waiting .'; - cnt=0; - while $STOP_MSP_CMD --signal TERM --quiet > /dev/null; do - cnt=`expr $cnt + 1`; - if [ $cnt -gt 60 ]; then - # - # Waited 120 seconds now. Fail. - # - echo -n ' Failed '; - stopped=1; - break; - fi; - sleep 2; - log_progress_msg '.'; - done; - echo -n ' Done '; - fi; - # - # Remove pidfile iff stopped - if ! $STOP_MSP_CMD --signal TERM --quiet > /dev/null; then - rm -f "$MSP_PIDFILE"; - fi; - return $result; - }; - -stop_sendmail () { - local result; - result=0; - if check_msp; then - stop_msp || true; - fi; - stop_mta || result=$?; - stop_queue || true; - return $result; - }; -#------------------------------------------------------------------------------ - - -#------------------------------------------------------------------------------ -# Check to see if sendmail is running -#------------------------------------------------------------------------------ -is_running () { - local result; - result=1; - # - # Make sure /var/run/sendmail/ exists - check_dirs; - # - # Determine proper pidfile to check - who=$(echo "$1" | tr '[:upper:]' '[:lower:]'); - case $who in - mta) - PIDFILE="$MTAL_PIDFILE"; - ;; - queue) - PIDFILE="$MTAQ_PIDFILE"; - ;; - msp) - PIDFILE="$MSP_PIDFILE"; - ;; - *) - PIDFILE="$1"; - ;; - esac; - # - # If no pidfile, not running - # Extract pid/command and see if still running - # Remove pidfile if app didn't - # Also remove any control sockets - if [ -s $PIDFILE ]; then - PID=`head -n 1 $PIDFILE 2>/dev/null`; - COMMAND=`tail -n 1 $PIDFILE`; - if [ ! -z "`ps --no-heading $PID`" ]; then - result=0; - else - rm -f $PIDFILE; - case $who in - mta) - rm -f $MTAL_SOCKET $MTAL_CNTL; - ;; - queue) - rm -f $MTAQ_SOCKET $MTAQ_CNTL; - ;; - msp) - rm -f $MSP_SOCKET $MSP_CNTL; - esac; - fi; - fi; - return $result; - }; -#------------------------------------------------------------------------------ - - -#------------------------------------------------------------------------------ -# Check to see if running split service (MTA, MSP) -# Must be at 8.12.0+ for this support -#------------------------------------------------------------------------------ -check_msp () { - local result; - result=1; - if [ ! -f /usr/share/sendmail/cf/feature/msp.m4 ]; then - result=1; - elif [ -s /etc/mail/submit.cf ] \ - && [ -s /etc/mail/submit.mc ]; then - if grep -qEe "^[[:space:]]*\`?FEATURE\([[:space:]]*\`?msp" \ - /etc/mail/submit.mc; then - result=0; - fi; - fi; - return $result; - }; -#------------------------------------------------------------------------------ - - -#------------------------------------------------------------------------------ -# Miscellaneous sendmail command support for MSP/MTA split -# mailstats, mailq, runq -#------------------------------------------------------------------------------ -newaliases () { - # - # Obtain parameters IFF needed - if [ -z "$SM_Get_Parameters" ]; then - Get_Parameters; - fi; - # - $MTA_COMMAND $MTA_A -bi $*; - }; - -hoststat () { - # - # Obtain parameters IFF needed - if [ -z "$SM_Get_Parameters" ]; then - Get_Parameters; - fi; - # - $MTA_COMMAND $MTA_A -bh $*; - }; - -purgestat () { - local parms; - parms=$(echo "$1" | tr '[:upper:]' '[:lower:]'); - case $parms in - n*) # Now - parms='-O Timeout.hoststatus=1s'; - shift; - ;; - *) - parms=''; - ;; - esac; - # - # Obtain parameters IFF needed - if [ -z "$SM_Get_Parameters" ]; then - Get_Parameters; - fi; - # - $MTA_COMMAND $MTA_A -bH $parms $*; - }; - -mailstats () { - # - # Obtain parameters IFF needed - if [ -z "$SM_Get_Parameters" ]; then - Get_Parameters; - fi; - # - # if running split service, show the client status first - if check_msp; then - echo 'MSP statistics...'; - #check if we have a status file for the MSP - statusfile=$(grep -Ee '^O StatusFile=/.*' \ - /etc/mail/submit.cf | cut -d= -f2); - if [ -n $statusfile ]; then - /usr/lib/sm.bin/mailstats -C \ - /etc/mail/submit.cf $* || true; - fi; - echo 'MTA statistics...'; - fi; - # - # check if we have a status file for the MTA - statusfile=$(grep -Ee '^O StatusFile=/.*' \ - /etc/mail/sendmail.cf | cut -d= -f2); - if [ -n $statusfile ]; then - /usr/lib/sm.bin/mailstats $* || true; - fi; - }; - -mailq () { - # - # Obtain parameters IFF needed - if [ -z "$SM_Get_Parameters" ]; then - Get_Parameters; - fi; - # - # if running split service, show the client queues first - if check_msp; then - echo 'MSP Queue status...'; - # - # Check to see if shared memory is in use (8.12.0+) - if grep -qEe "^[[:space:]]*\`?define\(\`?confSHAREDMEMORYKEY'?[[:space:]]*,[[:space:]]*\`?0*[1-9]+[0-9]*'?[[:space:]]*\)" \ - /etc/mail/submit.mc; then - $MSP_COMMAND -bP || true; - fi; - $MSP_COMMAND -bp $MSP_A $MISC_PARMS $* || true; - echo 'MTA Queue status...'; - fi; - # - # Check to see if shared memory is in use (8.12.0+) - if grep -qEe "^[[:space:]]*\`?define\(\`?confSHAREDMEMORYKEY'?[[:space:]]*,[[:space:]]*\`?0*[1-9]+[0-9]*'?[[:space:]]*\)" \ - /etc/mail/sendmail.mc; then - $MTA_COMMAND -bP || true; - fi; - $MTA_COMMAND -bp $MTA_A $MISC_PARMS $* || true; - }; - -runq () { - # - # Obtain parameters IFF needed - if [ -z "$SM_Get_Parameters" ]; then - Get_Parameters; - fi; - # - # if running split service, run the client queues first - if check_msp; then - echo 'Running the MSP queue...'; - $MSP_COMMAND -q $MSP_A \ - $MSP_L_QUEUE $MSP_PARMS $MISC_PARMS $* || true; - echo 'Running the MTA queues...'; - fi; - if [ "$SPLIT_DAEMON" -eq 0 ]; then - $MTA_COMMAND -q $MTA_A \ - $MTAL_L_RUNQ $QUEUE_PARMS $MISC_PARMS $* || true; - else - $MTA_COMMAND -q $MTA_A \ - $MTAQ_L_RUNQ $QUEUE_PARMS $MISC_PARMS $* || true; - fi; - }; - -control () { - # - # Obtain parameters IFF needed - if [ -z "$SM_Get_Parameters" ]; then - Get_Parameters; - fi; - local parms; - parms="$*"; - if [ -z "$parms" ]; then - parms='help'; - fi; - if is_running mta; then - /usr/share/sendmail/smcontrol.pl $parms; - else - echo 'MTA: is not running'; - fi; - }; -#------------------------------------------------------------------------------ - - -#------------------------------------------------------------------------------ -# Print status of running job(s) -#------------------------------------------------------------------------------ -status () { - # - # Make sure /var/run/sendmail/ exists - check_dirs; - # - # Obtain parameters IFF needed - if [ -z "$SM_Get_Parameters" ]; then - Get_Parameters; - fi; - # - # if running split service, check the client status first - if check_msp; then - if is_running msp; then - echo "MSP: $PID $COMMAND"; - ps -fwp $PID; - if [ -S ${MSP_CNTL} ]; then - /usr/share/sendmail/smcontrol.pl \ - -f ${MSP_CNTL} status || true; - fi; - elif [ $MSP_MODE = 'cron' ]; then - echo "MSP: is run via cron ($MSP_INTERVAL)"; - elif [ $MSP_MODE = 'none' ]; then - echo 'MSP: is disabled'; - else - echo 'MSP: is not running'; - fi; - fi; - # - # Check MTA listener - if is_running mta; then - echo "MTA: $PID $COMMAND"; - ps -fwp $PID; - if [ -S ${MTAL_CNTL} ]; then - /usr/share/sendmail/smcontrol.pl \ - -f ${MTAL_CNTL} status || true; - fi; - elif [ $DAEMON_MODE = 'inetd' ]; then - echo 'MTA: is run via inetd'; - elif [ $DAEMON_MODE = 'none' ]; then - echo 'MTA: is disabled'; - else - echo 'MTA: is not running'; - fi; - # - # Check for split daemon mode (separate listener/queue runner) - if is_running queue; then - echo "QUE: $PID $COMMAND"; - ps -fwp $PID; - if [ -S ${MTAQ_CNTL} ]; then - /usr/share/sendmail/smcontrol.pl \ - -f ${MTAQ_CNTL} status || true; - fi; - elif [ $QUEUE_MODE = 'cron' ]; then - echo "QUE: is run via cron ($QUEUE_INTERVAL)"; - elif [ $QUEUE_MODE = 'none' ]; then - echo 'QUE: is disabled'; - elif [ "$SPLIT_DAEMON" -eq 0 ]; then - echo "QUE: Same as MTA"; - else - echo 'QUE: is not running'; - fi; - }; -#------------------------------------------------------------------------------ - - -#------------------------------------------------------------------------------ -# Cronjob handling -#------------------------------------------------------------------------------ -cron_mta () { - # - # Make sure /var/run/sendmail/ exists - check_dirs; - # - # Obtain parameters IFF needed - if [ -z "$SM_Get_Parameters" ]; then - Get_Parameters; - fi; - # - # If cron not needed, don't do queue running (though it wouldn't hurt) - if [ $QUEUE_MODE = 'cron' ]; then - # - # If running a split (MTA/MSP) setup, we need to make sure that - # messages not immediately accepted by the MTA get delivered. - # Only run the MSP queue if MSP_MODE=none - if check_msp; then - if [ $MSP_MODE = 'none' ]; then - # Make sure only *ONE* cronjob at a time - if [ ! -f $STAMP_DIR/cron_msp ]; then - touch $STAMP_DIR/cron_msp; - #clean_queues /var/spool/mqueue-client; - $MSP_COMMAND -qf $MSP_A $MSP_L_QUEUE \ - $MSP_PARMS $MISC_PARMS \ - $CRON_PARMS || true; - rm -f $STAMP_DIR/cron_msp; - fi; - fi; - fi; - - # Make sure only *ONE* cronjob at a time - if [ ! -f $STAMP_DIR/cron_mta ]; then - touch $STAMP_DIR/cron_mta; - $MTA_COMMAND -qf $MTA_A $MTAL_L_QUEUE \ - $QUEUE_PARMS $MISC_PARMS $CRON_PARMS || true; - rm -f $STAMP_DIR/cron_mta; - fi; - fi; - }; - -cron_msp () { - # - # Make sure /var/run/sendmail/ exists - check_dirs; - # - # Obtain parameters IFF needed - if [ -z "$SM_Get_Parameters" ]; then - Get_Parameters; - fi; - # - # If cron not needed, don't do queue running (though it wouldn't hurt) - if [ $MSP_MODE = 'cron' ]; then - # - # If running a split (MTA/MSP) setup, we need to make sure that - # messages not immediately accepted by the MTA get delivered. - if check_msp; then - # Make sure only *ONE* cronjob at a time - if [ ! -f $STAMP_DIR/cron_msp ]; then - touch $STAMP_DIR/cron_msp; - #clean_queues /var/spool/mqueue-client; - $MSP_COMMAND -qf $MSP_A $MSP_L_QUEUE \ - $MSP_PARMS $MISC_PARMS \ - $CRON_PARMS || true; - rm -f $STAMP_DIR/cron_msp; - fi; - fi; - fi; - }; -#------------------------------------------------------------------------------ - - -#------------------------------------------------------------------------------ -# Determine how to run sendmail mta daemon -# * No daemon -# * As listener -# * As queue runner -# * As both listener and queue runner -#------------------------------------------------------------------------------ -daemon_check () { - local run_daemon; - # - # Skip daemon run for the following: - # * sendmail hasn't been configured - # * DAEMON_MODE = (none | inet) & QUEUE_MODE = (none | cron) - if [ ! -s /etc/mail/sendmail.cf ] || \ - [ ! -s /etc/mail/sendmail.mc ]; then - log_failure_msg 'Not configured, not started.'; - return 1; - fi; - - MTAL_PARMS="$MTA_A $MTAL_L"; - MTAQ_PARMS="$MTA_A $MTAQ_L"; - run_daemon=3; - - case "$DAEMON_MODE" in - none* | \ - inetd*) - run_daemon=`expr $run_daemon - 1`; - ;; - - daemon* | \ - *) - MTAL_PARMS="$MTAL_PARMS -bd $DAEMON_PARMS"; - ;; - esac; - - case "$QUEUE_MODE" in - none* | \ - cron*) - run_daemon=`expr $run_daemon - 1`; - ;; - - daemon* | \ - *) - # Check for split daemon mode (separate listener/queue runner) - if [ $SPLIT_DAEMON -eq 0 ]; then - if [ ! -z "$QUEUE_INTERVAL" ]; then - MTAL_PARMS="$MTAL_PARMS -q${QUEUE_INTERVAL}"; - fi; - MTAL_PARMS="$MTAL_PARMS $QUEUE_PARMS"; - else - if [ ! -z "$QUEUE_INTERVAL" ]; then - MTAQ_PARMS="$MTAQ_PARMS -q${QUEUE_INTERVAL}"; - fi; - MTAQ_PARMS="$MTAQ_PARMS $QUEUE_PARMS"; - fi; - ;; - esac; - - # Add any miscellanous (ie debugging) parameters - MTAL_PARMS="$MTAL_PARMS $MISC_PARMS"; - MTAQ_PARMS="$MTAQ_PARMS $MISC_PARMS"; - - # Add PidFile override for MTA queue runner - MTAQ_PARMS="$MTAQ_PARMS -O PidFile=$MTAQ_PIDFILE"; - MTAQ_PARMS="$MTAQ_PARMS -O ControlSocketName=$MTAQ_CNTL"; - - if [ $run_daemon -lt 2 ]; then - log_failure_msg 'listen/queue daemon not needed.'; - return 1; - fi; - return 0; - }; -#------------------------------------------------------------------------------ - -#------------------------------------------------------------------------------ -# Simple routine to update the databases on start/refresh/restart -#------------------------------------------------------------------------------ -make_databases () { - # - # Life is so much simpler with make - if test -x /usr/bin/make -a -f /etc/mail/Makefile; then - /usr/bin/make all -s -C /etc/mail >/dev/null; - # - # Here, all I could do would be handle a *few* database - - # quite frankly, it isn't worth it, someone will want yet another - else - echo "No make, you'll have to rebuild your databases by hand :("; - fi; - } -#------------------------------------------------------------------------------ - - -#------------------------------------------------------------------------------ -# Clean sendmail queues (somewhat): does *not* support split qf/df/xf dirs. -# NOTE: This whole thing sucks with queue-groups, need to redo it!!! -# NOTE: Check for race conditions betwixt this code and queue-runners -#------------------------------------------------------------------------------ -clean_queues () { - local QUEUE_ROOT QUEUE QUIET - # Obtain queue root directory - if [ -z "$1" ]; then - QUEUE_ROOT=/var/spool/mqueue - QUEUE=/var/spool/mqueue - QUIET='' - else - QUEUE_ROOT="$1" - QUEUE="$1" - QUIET='1' - fi - # remove lock files left because of kill/crash - # rm -f $QUEUE/[lnx]f* doesn't work with a plethora of files ;-( - for i in A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \ - a b c d e f g h i j k l m n o p q r s t u v w x y z; do - rm -f $QUEUE/[lnx]f${i}* - done - # remove zero length qf files - #for qffile in $QUEUE/qf*; do - for qffile in $(find $QUEUE_ROOT -type f -name 'qf*'); do - if [ -r "$qffile" ] && [ ! -s "$qffile" ]; then - if [ ! -z "$QUIET" ]; then - echo -n "<zero: $qffile> "; fi - rm -f "$qffile" - fi - done - # rename tf files to be qf if the qf does not exist - for tffile in $QUEUE/tf*; do - qffile=`echo "$tffile" | sed 's/\/tf\([[:alnum:]]*\)$/\/qf\1/'` - if [ -r "$tffile" ] && [ ! -f "$qffile" ]; then - if [ ! -z "$QUIET" ]; then - echo -n "<recovering: $tffile> "; fi - mv "$tffile" "$qffile" - elif [ -f "$tffile" ]; then - echo -n "<extra: $tffile> " - rm -f "$tffile" - fi - done - # remove df files with no corresponding qf files - for dffile in $QUEUE/df*; do - qffile=`echo "$dffile" | sed 's/\/df\([[:alnum:]]*\)$/\/qf\1/'` - Dffile=`echo "$dffile" | sed 's/\/df\([[:alnum:]]*\)$/\/Df\1/'` - if [ -r "$dffile" ] && [ ! -f "$qffile" ]; then - if [ ! -s "$dffile" ]; then - rm -f "$dffile" - else - if [ ! -z "$QUIET" ]; then - echo -n "<incomplete: $dffile> "; fi - mv "$dffile" "$Dffile"; - fi - fi - done - # announce files that have been saved during disaster recovery - for xffile in $QUEUE/[A-Z]f*; do - if [ -f "$xffile" ]; then - if [ ! -z "$QUIET" ]; then - echo -n "<panic: $xffile> "; fi - fi - done - } -#------------------------------------------------------------------------------ - -#------------------------------------------------------------------------------ -# check_dirs: Make sure /var/run/sendmail/{mta,msp,stampdir} exist -#------------------------------------------------------------------------------ -check_dirs () { - if [ ! -d "${SENDMAIL_ROOT}" ]; then - mkdir -p "${SENDMAIL_ROOT}"; - chown root:smmta "${SENDMAIL_ROOT}"; - chmod 02755 "${SENDMAIL_ROOT}"; - fi; - if [ ! -d "${MTA_ROOT}" ]; then - mkdir -p "${MTA_ROOT}"; - chown $DAEMON_UID:smmta "${MTA_ROOT}"; - chmod 02755 "${MTA_ROOT}"; - fi; - if [ ! -d "${MSP_ROOT}" ]; then - mkdir -p "${MSP_ROOT}"; - chown smmsp:smmsp "${MSP_ROOT}"; - chmod 02775 "${MSP_ROOT}"; - fi; - if [ ! -d "${STAMP_DIR}" ]; then - mkdir -p "${STAMP_DIR}"; - chown root:smmsp "${STAMP_DIR}"; - chmod 02775 "${STAMP_DIR}"; - fi; - } - -#------------------------------------------------------------------------------ -# Why are we here ? -#------------------------------------------------------------------------------ -# Some requisite initialization -if [ -z "$SM_Get_Parameters" ]; then - Get_Parameters; - fi; -if [ "$LOG_CMDS" = "Yes" ]; then - logger -i -p mail.debug -- "$0 $@"; - fi; - -#------------------------------------------------------------------------------ -# Handle being called via an alias -#------------------------------------------------------------------------------ -case $(basename $0) in - newaliases) - newaliases $*; - exit $?; - ;; - hoststat) - hoststat $*; - exit $?; - ;; - purgestat) - purgestat $*; - exit $?; - ;; - mailstats) - mailstats $*; - exit $?; - ;; - mailq) - mailq $*; - exit $?; - ;; - runq) - runq $*; - exit $?; - ;; - control|smcontrol) - control $*; - exit $?; - ;; - status) - status $* - exit $? - ;; - *) - : # Fall through and handle below - ;; - esac; - -#------------------------------------------------------------------------------ -# Handle being called via /etc/init.d/sendmail or directly -#------------------------------------------------------------------------------ -# Ok, why are we here... -case "$1" in - - #----------------------------------------------------------------------- - # Debian required/optional targets: - #----------------------------------------------------------------------- - start) - log_daemon_msg "Starting $DESC" "$NAME"; - start_sendmail; - log_end_msg $?; - ;; - - stop|force-stop) - log_daemon_msg "Stopping $DESC" "$NAME"; - stop_sendmail; - log_end_msg $?; - ;; - - restart) - log_daemon_msg "Restarting $DESC" "$NAME"; - # reload is equivalent (but faster) than stop/start ! - # but... it doesn't honor changes to /etc/mail/sendmail.conf - #reload_sendmail; - stop_sendmail; - start_sendmail; - log_end_msg $?; - ;; - - restart-if-running) - if ! is_running mta && ! is_running msp; then - echo 'Mail Transport Agent: sendmail is not running'; - else - $0 restart; - fi; - ;; - - reload-if-running) - if ! is_running mta && ! is_running msp; then - echo 'Mail Transport Agent: sendmail is not running'; - else - $0 reload; - fi; - ;; - - reload|force-reload) - log_daemon_msg "Reloading $DESC" "$NAME"; - reload_sendmail; - log_end_msg $?; - ;; - - #----------------------------------------------------------------------- - # Local targets (sendmail commands/aliases) for MSP/MTA split support - # These targets will pass along any provided parameters - #----------------------------------------------------------------------- - newaliases) - shift; - newaliases $*; - ;; - - hoststat) - shift; - hoststat $*; - ;; - - purgestat) - shift; - purgestat $*; - ;; - - mailstats) - shift; - mailstats $*; - ;; - - mailq) - shift; - mailq $*; - ;; - - runq) - shift; - runq $*; - ;; - - control|smcontrol) - shift; - control $*; - ;; - - #----------------------------------------------------------------------- - # Local targets for extended support/debugging - #----------------------------------------------------------------------- - status) - shift; - status $*; - ;; - - debug) - # - # If not running, can't debug - if is_running msp; then - echo -n 'Dumping MSP state...'; - $SIGNAL_MSP_CMD --signal USR1; - echo 'done.'; - fi; - if is_running mta; then - echo -n 'Dumping MTA state...'; - $SIGNAL_MTAL_CMD --signal USR1; - echo 'done.'; - fi; - ;; - - clean|clean_que*|clean-que*) - # - # If running, don't clean the queues... - if is_running mta; then - echo 'MTA is running, queue cleaning ill advised...'; - else - echo -n 'Cleaning up the queues...'; - clean_queues; - echo 'done.'; - fi; - ;; - - #----------------------------------------------------------------------- - # Local targets for cronjob support - #----------------------------------------------------------------------- - cron-msp) - cron_msp; - ;; - - cron-mta) - cron_mta; - ;; - - #----------------------------------------------------------------------- - # Default target - bitch and moan - #----------------------------------------------------------------------- - *) - echo "Invalid command <$1>"; - echo "Usage: $0 <command>"; - echo ' Where <command> is one of the following'; - echo ' start|stop|restart|restart-if-running'; - echo ' reload-if-running|reload|force-reload'; - echo ' newaliases|hoststat|purgestat|mailstats|mailq|runq|control'; - echo ' status|debug|clean'; - exit 1; - ;; - esac; - -exit 0; |