#!/bin/sh # # $FreeBSD: head/mail/opendkim/files/milter-opendkim.in 481909 2018-10-12 15:30:35Z uqs $ # # PROVIDE: milter-opendkim # REQUIRE: DAEMON # BEFORE: mail # KEYWORD: shutdown # Define these milteropendkim_* variables in one of these files: # /etc/rc.conf # /etc/rc.conf.local # /etc/rc.conf.d/milteropendkim # # milteropendkim_enable (bool): Set to "NO" by default. # Set it to "YES" to enable dkim-milter # milteropendkim_uid (str): Set username to run milter. # milteropendkim_gid (str): Set group to run milter. # milteropendkim_profiles (list): Set to "" by default. # Define your profiles here. # milteropendkim_cfgfile (str): Configuration file. See opendkim.conf(5) # # milteropendkim_${profile}_* : Variables per profile. # Sockets must be different from each other. # # milteropendkim_socket_perms (str): # Permissions for local|unix socket. # # all parameters below now can be set in opendkim.conf(5). # milteropendkim_socket (str): Path to the milter socket. # milteropendkim_domain (str): Domainpart of From: in mails to sign. # milteropendkim_key (str): Path to the private key file to sign with. # milteropendkim_selector (str): Selector to use when signing # milteropendkim_alg (str): Algorithm to use when signing # milteropendkim_flags (str): Flags passed to start command. . /etc/rc.subr name="milteropendkim" rcvar=milteropendkim_enable extra_commands="reload" start_precmd="dkim_prepcmd" start_postcmd="dkim_start_postcmd" stop_postcmd="dkim_postcmd" command="%%PREFIX%%/sbin/opendkim" _piddir="/var/run/milteropendkim" pidfile="${_piddir}/pid" sig_reload="USR1" load_rc_config $name # # DO NOT CHANGE THESE DEFAULT VALUES HERE # : ${milteropendkim_enable="NO"} : ${milteropendkim_uid="mailnull"} : ${milteropendkim_gid="mailnull"} : ${milteropendkim_cfgfile="%%PREFIX%%/etc/mail/opendkim.conf"} : ${milteropendkim_socket_perms="0755"} # Options other than above can be set with $milteropendkim_flags. # see dkim-milter documentation for detail. if [ -n "$2" ]; then profile="$2" if [ "x${milteropendkim_profiles}" != "x" ]; then pidfile="${_piddir}/${profile}.pid" eval milteropendkim_enable="\${milteropendkim_${profile}_enable:-${milteropendkim_enable}}" eval milteropendkim_socket="\${milteropendkim_${profile}_socket:-}" eval milteropendkim_socket_perms="\${milteropendkim_${profile}_socket_perms:-}" if [ "x${milteropendkim_socket}" = "x" ];then echo "You must define a socket (milteropendkim_${profile}_socket)" exit 1 fi eval milteropendkim_cfgfile="\${milteropendkim_${profile}_cfgfile:-${milteropendkim_cfgfile}}" eval milteropendkim_domain="\${milteropendkim_${profile}_domain:-${milteropendkim_domain}}" eval milteropendkim_key="\${milteropendkim_${profile}_key:-${milteropendkim_key}}" eval milteropendkim_selector="\${milteropendkim_${profile}_selector:-${milteropendkim_selector}}" eval milteropendkim_alg="\${milteropendkim_${profile}_alg:-${milteropendkim_alg}}" eval milteropendkim_flags="\${milteropendkim_${profile}_flags:-${milteropendkim_flags}}" if [ -f "${milteropendkim_cfgfile}" ];then milteropendkim_cfgfile="-x ${milteropendkim_cfgfile}" else milteropendkim_cfgfile="" fi if [ "x${milteropendkim_socket}" != "x" ];then _socket_prefix="-p" fi if [ "x${milteropendkim_uid}" != "x" ];then _uid_prefix="-u" if [ "x${milteropendkim_gid}" != "x" ];then milteropendkim_uid=${milteropendkim_uid}:${milteropendkim_gid} fi fi if [ "x${milteropendkim_domain}" != "x" ];then milteropendkim_domain="-d ${milteropendkim_domain}" fi if [ "x${milteropendkim_key}" != "x" ];then milteropendkim_key="-k ${milteropendkim_key}" fi if [ "x${milteropendkim_selector}" != "x" ];then milteropendkim_selector="-s ${milteropendkim_selector}" fi if [ "x${milteropendkim_alg}" != "x" ];then milteropendkim_alg="-S ${milteropendkim_alg}" fi command_args="-l ${_socket_prefix} ${milteropendkim_socket} ${_uid_prefix} ${milteropendkim_uid} -P ${pidfile} ${milteropendkim_cfgfile} ${milteropendkim_domain} ${milteropendkim_key} ${milteropendkim_selector} ${milteropendkim_alg}" else echo "$0: extra argument ignored" fi else if [ "x${milteropendkim_profiles}" != "x" -a "x$1" != "x" ]; then if [ "x$1" != "xrestart" ]; then for profile in ${milteropendkim_profiles}; do echo "===> milteropendkim profile: ${profile}" %%PREFIX%%/etc/rc.d/milter-opendkim $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 "${milteropendkim_cfgfile}" ];then milteropendkim_cfgfile="-x ${milteropendkim_cfgfile}" else milteropendkim_cfgfile="" fi if [ "x${milteropendkim_socket}" != "x" ];then _socket_prefix="-p" fi if [ "x${milteropendkim_uid}" != "x" ];then _uid_prefix="-u" if [ "x${milteropendkim_gid}" != "x" ];then milteropendkim_uid=${milteropendkim_uid}:${milteropendkim_gid} fi fi if [ "x${milteropendkim_domain}" != "x" ];then milteropendkim_domain="-d ${milteropendkim_domain}" fi if [ "x${milteropendkim_key}" != "x" ];then milteropendkim_key="-k ${milteropendkim_key}" fi if [ "x${milteropendkim_selector}" != "x" ];then milteropendkim_selector="-s ${milteropendkim_selector}" fi if [ "x${milteropendkim_alg}" != "x" ];then milteropendkim_alg="-S ${milteropendkim_alg}" fi command_args="-l ${_socket_prefix} ${milteropendkim_socket} ${_uid_prefix} ${milteropendkim_uid} -P ${pidfile} ${milteropendkim_cfgfile} ${milteropendkim_domain} ${milteropendkim_key} ${milteropendkim_selector} ${milteropendkim_alg}" fi fi dkim_prepcmd () { if [ -S ${milteropendkim_socket##local:} ] ; then rm -f ${milteropendkim_socket##local:} elif [ -S ${milteropendkim_socket##unix:} ] ; then rm -f ${milteropendkim_socket##unix:} fi if [ ! -d ${_piddir} ] ; then mkdir -p ${_piddir} fi if [ -n "${milteropendkim_uid}" ] ; then chown ${milteropendkim_uid} ${_piddir} fi if [ -n "${milteropendkim_gid}" ] ; then chgrp ${milteropendkim_gid} ${_piddir} fi chmod ${milteropendkim_socket_perms} ${_piddir} } dkim_start_postcmd () { if [ "x${milteropendkim_socket}" != "x" ] ; then # postcmd is executed too fast and socket is not created before checking... sleep 1 if [ -S ${milteropendkim_socket##local:} ] ; then chmod ${milteropendkim_socket_perms} ${milteropendkim_socket##local:} elif [ -S ${milteropendkim_socket##unix:} ] ; then chmod ${milteropendkim_socket_perms} ${milteropendkim_socket##unix:} fi fi } dkim_postcmd() { if [ "x${milteropendkim_socket}" != "x" ] ; then if [ -S ${milteropendkim_socket##local:} ] ; then rm -f ${milteropendkim_socket##local:} elif [ -S ${milteropendkim_socket##unix:} ] ; then rm -f ${milteropendkim_socket##unix:} fi fi # just if the directory is empty rmdir ${_piddir} > /dev/null 2>&1 } run_rc_command "$1"