Linux ip-172-26-2-223 5.4.0-1018-aws #18-Ubuntu SMP Wed Jun 24 01:15:00 UTC 2020 x86_64
Apache
: 172.26.2.223 | : 18.191.15.150
Cant Read [ /etc/named.conf ]
8.1.13
www
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
BLACK DEFEND!
README
+ Create Folder
+ Create File
/
usr /
share /
sendmail /
[ HOME SHELL ]
Name
Size
Permission
Action
cf
[ DIR ]
drwxr-xr-x
examples
[ DIR ]
drwxr-xr-x
Parse_conf.pm
29.37
KB
-rwxr-xr-x
Parse_mc.pm
31.58
KB
-rwxr-xr-x
buildvirtuser
6.28
KB
-rwxr-xr-x
doublebounce.pl
6.15
KB
-rwxr-xr-x
dynamic
12.27
KB
-rwxr-xr-x
hoststat
31.9
KB
-rwxr-xr-x
mailq
31.9
KB
-rwxr-xr-x
mailstats
31.9
KB
-rwxr-xr-x
newaliases
31.9
KB
-rwxr-xr-x
parse_mc
2.77
KB
-rwxr-xr-x
purgestat
31.9
KB
-rwxr-xr-x
qtool.pl
24.08
KB
-rwxr-xr-x
runq
31.9
KB
-rwxr-xr-x
sendmail
31.9
KB
-rwxr-xr-x
smcontrol.pl
7.4
KB
-rwxr-xr-x
status
31.9
KB
-rwxr-xr-x
update_auth
9.92
KB
-rwxr-xr-x
update_authm4
7.84
KB
-rwxr-xr-x
update_conf
15.15
KB
-rwxr-xr-x
update_db
15.23
KB
-rwxr-xr-x
update_ldap
3.48
KB
-rwxr-xr-x
update_mc
10.28
KB
-rwxr-xr-x
update_mk
20.76
KB
-rwxr-xr-x
update_notices
7.19
KB
-rwxr-xr-x
update_sendmail
3.44
KB
-rwxr-xr-x
update_smrsh
2.42
KB
-rwxr-xr-x
update_sys
7.87
KB
-rwxr-xr-x
update_tcpd
1.93
KB
-rwxr-xr-x
update_tls
9.34
KB
-rwxr-xr-x
update_tlsm4
7.71
KB
-rwxr-xr-x
Delete
Unzip
Zip
${this.title}
Close
Code Editor : hoststat
#!/bin/sh #----------------------------------------------------------------------------- # $Sendmail: sm_helper.sh,v 8.15.2 2020-03-08 00:39:49 cowboy Exp $ # # Copyright (c) 1998-2010 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 \ --startas $MTA_COMMAND \ --start"; STOP_MTAL_CMD="start-stop-daemon \ --pidfile $MTAL_PIDFILE \ --exec $MTA_COMMAND \ --name sendmail-mta \ --stop"; SIGNAL_MTAL_CMD="start-stop-daemon \ --pidfile $MTAL_PIDFILE \ --exec $MTA_COMMAND \ --name sendmail-mta \ --stop"; START_MTAQ_CMD="start-stop-daemon \ --pidfile $MTAQ_PIDFILE \ --make-pidfile \ --startas $MTA_COMMAND \ --start"; STOP_MTAQ_CMD="start-stop-daemon \ --pidfile $MTAQ_PIDFILE \ --exec $MTA_COMMAND \ --name sendmail-mta \ --stop"; SIGNAL_MTAQ_CMD="start-stop-daemon \ --pidfile $MTAQ_PIDFILE \ --exec $MTA_COMMAND \ --name sendmail-mta \ --stop"; START_MSP_CMD="start-stop-daemon \ --pidfile $MSP_PIDFILE \ --startas $MSP_COMMAND \ --chuid smmsp \ --start"; STOP_MSP_CMD="start-stop-daemon \ --pidfile $MSP_PIDFILE \ --exec $MSP_COMMAND \ --name sendmail-msp \ --stop"; SIGNAL_MSP_CMD="start-stop-daemon \ --pidfile $MSP_PIDFILE \ --exec $MSP_COMMAND \ --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; }; #------------------------------------------------------------------------------ # the stamp directory is owned and writable by group smmsp touch_stamp() { if [ "$(id -nu)" = "smmsp" ]; then touch "$1" else su smmsp -s /bin/sh -c "touch '$1'" 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 $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-mta \ | 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 $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=0s'; 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 () { local parms flag; parms=; while [ $# -gt 0 ]; do flag=$(echo "$1" | tr '[:upper:]' '[:lower:]'); case $flag in n*) # Now parms="$parms -O Timeout.hoststatus=0s -O MinQueueAge=0"; shift; ;; v*) # verbose parms="$parms -v"; shift; ;; *) parms="$parms $flag"; shift; ;; esac; done; # # 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 $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 $parms || true; else $MTA_COMMAND -q $MTA_A \ $MTAQ_L_RUNQ $QUEUE_PARMS $MISC_PARMS $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 lockfile-create --lock-name --use-pid $STAMP_DIR/cron_msp ; then #clean_queues /var/spool/mqueue-client; $MSP_COMMAND -qf $MSP_A $MSP_L_QUEUE \ $MSP_PARMS $MISC_PARMS \ $CRON_PARMS || true; lockfile-remove --lock-name $STAMP_DIR/cron_msp fi; fi; fi; # Make sure only *ONE* cronjob at a time if lockfile-create --lock-name --use-pid $STAMP_DIR/cron_mta ; then $MTA_COMMAND -qf $MTA_A $MTAL_L_QUEUE \ $QUEUE_PARMS $MISC_PARMS $CRON_PARMS || true; lockfile-remove --lock-name $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 lockfile-create --lock-name --use-pid $STAMP_DIR/cron_msp ; then #clean_queues /var/spool/mqueue-client; $MSP_COMMAND -qf $MSP_A $MSP_L_QUEUE \ $MSP_PARMS $MISC_PARMS \ $CRON_PARMS || true; lockfile-remove --lock-name $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;
Close