#!/bin/sh # 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"