#!/bin/sh
#
# $NetBSD: qmailqread.sh,v 1.20 2019/08/20 02:42:47 schmonz Exp $
#
# qmail-run-20240206 script to control a service providing local non-root
# users access to see the queue. Adapted from a script by Steinar Haug.
#

# PROVIDE: qmailqread mail
# REQUIRE: qmailsend

name="qmailqread"

# User-settable rc.conf variables and their default values:
: ${qmailqread_postenv:=""}
: ${qmailqread_tcpserver:="/usr/pkg/bin/tcpserver"}
: ${qmailqread_tcpflags:="-R1"}
: ${qmailqread_tcphost:="127.0.0.1"}
: ${qmailqread_tcpport:="20025"}
: ${qmailqread_log:="YES"}
: ${qmailqread_logcmd:="logger -t nbqmail/qread -p mail.info"}
: ${qmailqread_nologcmd:="/usr/pkg/bin/multilog -*"}

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

rcvar=${name}
command="${qmailqread_tcpserver}"
procname=nb${name}
start_precmd="qmailqread_precmd"
extra_commands="stat pause cont"
stat_cmd="qmailqread_stat"
pause_cmd="qmailqread_pause"
cont_cmd="qmailqread_cont"

qmailqread_precmd() {
	if [ -f /etc/rc.subr ] && ! checkyesno qmailqread_log; then
		qmailqread_logcmd=${qmailqread_nologcmd}
	fi
	# tcpserver(1) is akin to inetd(8), but runs one service per process.
	# We want to signal only the tcpserver process responsible for this
	# service. Use argv0(1) to set procname to "nbqmailqread".
	command="/usr/pkg/bin/pgrphack /usr/bin/env - ${qmailqread_postenv} \
/usr/pkg/bin/argv0 ${qmailqread_tcpserver} ${procname} \
${qmailqread_tcpflags} \
-u `/usr/bin/id -u qmails` -g `/usr/bin/id -g qmails` \
${qmailqread_tcphost} ${qmailqread_tcpport} \
/usr/pkg/bin/qmail-qread \
2>&1 | \
/usr/pkg/bin/pgrphack /usr/pkg/bin/setuidgid qmaill ${qmailqread_logcmd}"
	command_args="&"
	rc_flags=""
}

qmailqread_stat() {
	run_rc_command status
}

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

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

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