#!/bin/sh # # $NetBSD: postfix,v 1.18.16.1 2020/06/20 16:41:57 martin Exp $ # # PROVIDE: mail # REQUIRE: LOGIN # we make mail start late, so that things like .forward's are not # processed until the system is fully operational $_rc_subr_loaded . /etc/rc.subr name="postfix" rcvar=$name postfix_command="/usr/sbin/${name}" required_files="/etc/${name}/main.cf" start_precmd="postfix_precmd" start_cmd="postfix_op" stop_cmd="postfix_op" reload_cmd="postfix_op" status_cmd="postfix_op" extra_commands="reload status" spooletcdir="/var/spool/${name}/etc" postconf="/usr/sbin/postconf" required_dirs=$spooletcdir _rebuild() { echo "${name}: rebuilding ${1} ($2 ${1}.db)" $($postconf -h newaliases_path) } postfix_precmd() { # As this is called after the is_running and required_dir checks # are made in run_rc_command(), we can safely assume ${spooletcdir} # exists and postfix isn't running at this point (unless forcestart # is used). # for f in localtime resolv.conf services; do if [ -f /etc/$f ]; then cmp -s /etc/$f ${spooletcdir}/$f || \ cp -p /etc/$f ${spooletcdir}/$f fi done OIFS="${IFS}" IFS="${IFS}," for f in $($postconf -hx alias_database); do IFS="${OIFS}:" set -- $f IFS="${OIFS}" case "$1" in hash) if [ -f "$2.db" ]; then if [ ! "$2" -ot "$2.db" ]; then _rebuild "$2" "out of date" fi else _rebuild "$2" "missing" fi ;; *) ;; esac done echo "Starting ${name}." } postfix_op() { ${postfix_command} ${rc_arg} } check_use_postfix() { _mta_path=$(awk '/^sendmail[ \t]/{print$2}' /etc/mailer.conf) _postfix_path="/usr/libexec/postfix/sendmail" _sendmail_path="/usr/libexec/sendmail/sendmail" if [ "${postfix}" != "check" ]; then echo "${postfix}" elif [ "${_mta_path}" = "${_postfix_path}" ]; then echo YES else echo "WARNING: default postfix not used as not selected in mailer.conf" >&2 if [ "${_mta_path}" = "${_sendmail_path}" -a \ ! -x "${_mta_path}" ]; then echo "WARNING: mailer.conf points to the removed sendmail" >&2 echo "update /etc/mailer.conf to get a working mailer configuration" >&2 fi echo NO fi } # force re-evaluation of /etc/rc.conf and resetting of $sendmail _rc_conf_loaded=false _rc_d_postfix=check load_rc_config $name unset _rc_d_postfix postfix=$(check_use_postfix) run_rc_command "$1"