9aac569eaa
Where necessary add $FreeBSD$ to the file No PORTREVISION bump necessary because this is a no-op
163 lines
4.9 KiB
Bash
163 lines
4.9 KiB
Bash
#!/bin/sh
|
|
#
|
|
# $FreeBSD$
|
|
#
|
|
|
|
# PROVIDE: milter-batv
|
|
# REQUIRE: DAEMON
|
|
# BEFORE: mail
|
|
# KEYWORD: shutdown
|
|
|
|
# Define these milterbatv_* variables in one of these files:
|
|
# /etc/rc.conf
|
|
# /etc/rc.conf.local
|
|
# /etc/rc.conf.d/milterbatv
|
|
#
|
|
# milterbatv_enable (bool): Set to "NO" by default.
|
|
# Set it to "YES" to enable batv-milter
|
|
# milterbatv_uid (str): Set username to run milter.
|
|
# milterbatv_profiles (list): Set to "" by default.
|
|
# Define your profiles here.
|
|
# milterbatv_cfgfile (str): Configuration file.
|
|
#
|
|
# milterbatv_${profile}_* : Variables per profile.
|
|
# Sockets must be different from each other.
|
|
#
|
|
# all parameters below can be set in batv-filter.conf(5).
|
|
# milterbatv_socket (str): Path to the milter socket.
|
|
# milterbatv_domain (str): Domainpart of From: in mails to sign.
|
|
# milterbatv_allowlist (str): Path to the allow list file.
|
|
# milterbatv_key (str): Path to the private key file to sign with.
|
|
# milterbatv_flags (str): Flags passed to start command.
|
|
|
|
. /etc/rc.subr
|
|
|
|
name="milterbatv"
|
|
rcvar=milterbatv_enable
|
|
|
|
start_precmd="batv_prepcmd"
|
|
stop_postcmd="batv_postcmd"
|
|
command="%%PREFIX%%/bin/batv-filter"
|
|
_piddir="/var/run/milterbatv"
|
|
pidfile="${_piddir}/pid"
|
|
|
|
load_rc_config $name
|
|
|
|
#
|
|
# DO NOT CHANGE THESE DEFAULT VALUES HERE
|
|
#
|
|
: ${milterbatv_enable="NO"}
|
|
: ${milterbatv_uid="mailnull"}
|
|
: ${milterbatv_cfgfile="%%PREFIX%%/etc/mail/batv-filter.conf"}
|
|
|
|
# Options other than above can be set with $milterbatv_flags.
|
|
# see batv-milter documentation for detail.
|
|
|
|
if [ -n "$2" ]; then
|
|
profile="$2"
|
|
if [ "x${milterbatv_profiles}" != "x" ]; then
|
|
pidfile="${_piddir}/${profile}.pid"
|
|
eval milterbatv_enable="\${milterbatv_${profile}_enable:-${milterbatv_enable}}"
|
|
eval milterbatv_socket="\${milterbatv_${profile}_socket:-}"
|
|
if [ "x${milterbatv_socket}" = "x" ];then
|
|
echo "You must define a socket (milterbatv_${profile}_socket)"
|
|
exit 1
|
|
fi
|
|
eval milterbatv_cfgfile="\${milterbatv_${profile}_cfgfile:-${milterbatv_cfgfile}}"
|
|
eval milterbatv_domain="\${milterbatv_${profile}_domain:-${milterbatv_domain}}"
|
|
eval milterbatv_allowlist="\${milterbatv_${profile}_allowlist:-${milterbatv_allowlist}}"
|
|
eval milterbatv_key="\${milterbatv_${profile}_key:-${milterbatv_key}}"
|
|
eval milterbatv_flags="\${milterbatv_${profile}_flags:-${milterbatv_flags}}"
|
|
if [ -f "${milterbatv_cfgfile}" ];then
|
|
milterbatv_cfgfile="-x ${milterbatv_cfgfile}"
|
|
else
|
|
milterbatv_cfgfile=""
|
|
fi
|
|
if [ "x${milterbatv_socket}" != "x" ];then
|
|
_socket_prefix="-p"
|
|
fi
|
|
if [ "x${milterbatv_uid}" != "x" ];then
|
|
_uid_prefix="-u"
|
|
fi
|
|
if [ "x${milterbatv_domain}" != "x" ];then
|
|
milterbatv_domain="-d ${milterbatv_domain}"
|
|
fi
|
|
if [ "x${milterbatv_allowlist}" != "x" ];then
|
|
milterbatv_allowlist="-a ${milterbatv_allowlist}"
|
|
fi
|
|
if [ "x${milterbatv_key}" != "x" ];then
|
|
milterbatv_key="-k ${milterbatv_key}"
|
|
fi
|
|
command_args="-l ${_socket_prefix} ${milterbatv_socket} ${_uid_prefix} ${milterbatv_uid} -P ${pidfile} ${milterbatv_cfgfile} ${milterbatv_domain} ${milterbatv_allowlist} ${milterbatv_key}"
|
|
else
|
|
echo "$0: extra argument ignored"
|
|
fi
|
|
else
|
|
if [ "x${milterbatv_profiles}" != "x" -a "x$1" != "x" ]; then
|
|
if [ "x$1" != "xrestart" ]; then
|
|
for profile in ${milterbatv_profiles}; do
|
|
echo "===> milterbatv profile: ${profile}"
|
|
%%RC_SCRIPT%% $1 ${profile}
|
|
retcode="$?"
|
|
if [ "0${retcode}" -ne 0 ]; then
|
|
failed="${profile} (${retcode}) ${failed:-}"
|
|
else
|
|
success="${profile} ${success:-}"
|
|
fi
|
|
done
|
|
exit 0
|
|
else
|
|
restart_precmd=""
|
|
fi
|
|
else
|
|
if [ -f "${milterbatv_cfgfile}" ];then
|
|
milterbatv_cfgfile="-x ${milterbatv_cfgfile}"
|
|
else
|
|
milterbatv_cfgfile=""
|
|
fi
|
|
if [ "x${milterbatv_socket}" != "x" ];then
|
|
_socket_prefix="-p"
|
|
fi
|
|
if [ "x${milterbatv_uid}" != "x" ];then
|
|
_uid_prefix="-u"
|
|
fi
|
|
if [ "x${milterbatv_domain}" != "x" ];then
|
|
milterbatv_domain="-d ${milterbatv_domain}"
|
|
fi
|
|
if [ "x${milterbatv_allowlist}" != "x" ];then
|
|
milterbatv_allowlist="-a ${milterbatv_allowlist}"
|
|
fi
|
|
if [ "x${milterbatv_key}" != "x" ];then
|
|
milterbatv_key="-k ${milterbatv_key}"
|
|
fi
|
|
command_args="-l ${_socket_prefix} ${milterbatv_socket} ${_uid_prefix} ${milterbatv_uid} -P ${pidfile} ${milterbatv_cfgfile} ${milterbatv_domain} ${milterbatv_allowlist} ${milterbatv_key}"
|
|
fi
|
|
fi
|
|
|
|
batv_prepcmd ()
|
|
{
|
|
if [ -S ${milterbatv_socket##local:} ] ; then
|
|
rm -f ${milterbatv_socket##local:}
|
|
elif [ -S ${milterbatv_socket##unix:} ] ; then
|
|
rm -f ${milterbatv_socket##unix:}
|
|
fi
|
|
if [ ! -d ${_piddir} ] ; then
|
|
mkdir -p ${_piddir}
|
|
fi
|
|
if [ -n "${milterbatv_uid}" ] ; then
|
|
chown ${milterbatv_uid} ${_piddir}
|
|
fi
|
|
}
|
|
|
|
batv_postcmd()
|
|
{
|
|
if [ -S ${milterbatv_socket##local:} ] ; then
|
|
rm -f ${milterbatv_socket##local:}
|
|
elif [ -S ${milterbatv_socket##unix:} ] ; then
|
|
rm -f ${milterbatv_socket##unix:}
|
|
fi
|
|
# just if the directory is empty
|
|
rmdir ${_piddir} > /dev/null 2>&1
|
|
}
|
|
|
|
run_rc_command "$1"
|