#!/bin/sh
#
# $NetBSD: qmailsend.sh,v 1.19 2024/02/05 08:14:07 schmonz Exp $
#
# qmail-run-20240206 script to control qmail-send (local and outgoing mail).
#

# PROVIDE: qmailsend mail
# REQUIRE: LOGIN
# KEYWORD: shutdown

name="qmailsend"

# User-settable rc.conf variables and their default values:
: ${qmailsend_postenv:="QMAILREMOTE=/usr/pkg/bin/qmail-dkimsign-remote"}
: ${qmailsend_datalimit:="540000000"}
: ${qmailsend_defaultdelivery:="`/usr/bin/head -1 /usr/pkg/etc/qmail/control/defaultdelivery`"}
: ${qmailsend_log:="YES"}
: ${qmailsend_logcmd:="logger -t nbqmail/send -p mail.info"}
: ${qmailsend_nologcmd:="/usr/pkg/bin/multilog -*"}

if [ -f /etc/rc.subr ]; then
	. /etc/rc.subr
fi

rcvar=${name}
required_files="/usr/pkg/etc/qmail/control/defaultdelivery"
required_files="${required_files} /usr/pkg/etc/qmail/control/me"
command="/usr/pkg/bin/qmail-send"
start_precmd="qmailsend_prestart"
start_postcmd="qmailsend_poststart"
stop_postcmd="qmailsend_poststop"
pidfile="/var/run/${name}.pid"
extra_commands="stat pause cont doqueue reload queue alrm flush hup"
stat_cmd="qmailsend_stat"
pause_cmd="qmailsend_pause"
cont_cmd="qmailsend_cont"
doqueue_cmd="qmailsend_doqueue"
queue_cmd="qmailsend_queue"
alrm_cmd="qmailsend_doqueue"
flush_cmd="qmailsend_doqueue"
hup_cmd="qmailsend_hup"

qmailsend_prestart() {
	if [ -f /etc/rc.subr ] && ! checkyesno qmailsend_log; then
		qmailsend_logcmd=${qmailsend_nologcmd}
	fi
	/bin/mkdir -p "/var/run"
	# qmail-start(8) starts the various qmail processes, then execs
	# qmail-send(8). That's the process we want to signal later.
	command="/usr/pkg/bin/pgrphack /usr/bin/env - PATH=/usr/pkg/bin:$PATH ${qmailsend_postenv} \
/usr/pkg/bin/softlimit -m ${qmailsend_datalimit} \
qmail-start '$qmailsend_defaultdelivery' \
${qmailsend_logcmd}"
	command_args="&"
	rc_flags=""
}

qmailsend_poststart() {
	echo $! > ${pidfile}
}

qmailsend_poststop() {
	rm -f ${pidfile}
}

qmailsend_stat() {
	run_rc_command status
}

qmailsend_pause() {
	if ! statusmsg=`run_rc_command status`; then
		echo $statusmsg
		return 1
	fi
	echo "Pausing ${name}."
	kill -STOP $rc_pid
}

qmailsend_cont() {
	if ! statusmsg=`run_rc_command status`; then
		echo $statusmsg
		return 1
	fi
	echo "Continuing ${name}."
	kill -CONT $rc_pid
}

qmailsend_doqueue() {
	if ! statusmsg=`run_rc_command status`; then
		echo $statusmsg
		return 1
	fi
	echo "Flushing timeout table and sending ALRM signal to qmail-send."
	/usr/pkg/bin/qmail-tcpok
	kill -ALRM $rc_pid
}

qmailsend_queue() {
	/usr/pkg/bin/qmail-qstat
	/usr/pkg/bin/qmail-qread
}

qmailsend_hup() {
	run_rc_command reload
}

if [ -f /etc/rc.subr ]; then
	load_rc_config $name
	run_rc_command "$1"
else
	echo -n " ${name}"
	qmailsend_prestart
	eval ${command} ${qmailsend_flags} ${command_args}
	qmailsend_poststart
fi
