11.1Sthorpej#!/bin/sh
21.1Sthorpej#
31.20Skre# $NetBSD: postfix,v 1.20 2023/12/25 08:37:08 kre Exp $
41.1Sthorpej#
51.1Sthorpej
61.16Sperry# PROVIDE: mail
71.1Sthorpej# REQUIRE: LOGIN
81.6Slukem#	we make mail start late, so that things like .forward's are not
91.6Slukem#	processed until the system is fully operational
101.1Sthorpej
111.9Smycroft$_rc_subr_loaded . /etc/rc.subr
121.1Sthorpej
131.3Slukemname="postfix"
141.5Slukemrcvar=$name
151.8Slukempostfix_command="/usr/sbin/${name}"
161.3Slukemrequired_files="/etc/${name}/main.cf"
171.6Slukemstart_precmd="postfix_precmd"
181.8Slukemstart_cmd="postfix_op"
191.8Slukemstop_cmd="postfix_op"
201.8Slukemreload_cmd="postfix_op"
211.17Srizstatus_cmd="postfix_op"
221.17Srizextra_commands="reload status"
231.6Slukemspooletcdir="/var/spool/${name}/etc"
241.13Schristospostconf="/usr/sbin/postconf"
251.6Slukemrequired_dirs=$spooletcdir
261.12Schristos
271.12Schristos_rebuild() {
281.12Schristos	echo "${name}: rebuilding ${1} ($2 ${1}.db)"
291.13Schristos	$($postconf -h newaliases_path)
301.12Schristos}
311.6Slukem
321.6Slukempostfix_precmd()
331.6Slukem{
341.6Slukem	# As this is called after the is_running and required_dir checks
351.6Slukem	# are made in run_rc_command(), we can safely assume ${spooletcdir}
361.6Slukem	# exists and postfix isn't running at this point (unless forcestart
371.6Slukem	# is used).
381.6Slukem	#
391.6Slukem
401.6Slukem	for f in localtime resolv.conf services; do
411.6Slukem		if [ -f /etc/$f ]; then
421.6Slukem			cmp -s /etc/$f ${spooletcdir}/$f || \
431.6Slukem			    cp -p /etc/$f ${spooletcdir}/$f
441.6Slukem		fi
451.6Slukem	done
461.10Schristos
471.18Sriastrad	OIFS="${IFS}"
481.18Sriastrad	IFS="${IFS},"
491.18Sriastrad	for f in $($postconf -hx alias_database); do
501.18Sriastrad		IFS="${OIFS}:"
511.12Schristos		set -- $f
521.12Schristos		IFS="${OIFS}"
531.12Schristos		case "$1" in
541.12Schristos		hash)
551.12Schristos			if [ -f "$2.db" ]; then
561.20Skre				if ! [ "$2" -ot "$2.db" ]; then
571.12Schristos					_rebuild "$2" "out of date"
581.12Schristos				fi
591.12Schristos			else
601.12Schristos				_rebuild "$2" "missing"
611.11Schristos			fi
621.12Schristos			;;
631.12Schristos		*)
641.12Schristos			;;
651.12Schristos		esac
661.11Schristos	done
671.19Srin
681.19Srin	echo "Starting ${name}."
691.6Slukem}
701.1Sthorpej
711.8Slukempostfix_op()
721.8Slukem{
731.8Slukem	${postfix_command} ${rc_arg}
741.8Slukem}
751.8Slukem
761.14Spavelcheck_use_postfix()
771.14Spavel{
781.14Spavel	_mta_path=$(awk '/^sendmail[ \t]/{print$2}' /etc/mailer.conf)
791.14Spavel	_postfix_path="/usr/libexec/postfix/sendmail"
801.14Spavel	_sendmail_path="/usr/libexec/sendmail/sendmail"
811.14Spavel
821.14Spavel	if [ "${postfix}" != "check" ]; then
831.14Spavel	    echo "${postfix}"
841.14Spavel	elif [ "${_mta_path}" = "${_postfix_path}" ]; then
851.14Spavel	    echo YES
861.14Spavel	else
871.14Spavel	    echo "WARNING: default postfix not used as not selected in mailer.conf" >&2
881.20Skre	    if [ "${_mta_path}" = "${_sendmail_path}" ] &&
891.20Skre	     ! [ -x "${_mta_path}" ]; then
901.14Spavel		echo "WARNING: mailer.conf points to the removed sendmail" >&2
911.14Spavel		echo "update /etc/mailer.conf to get a working mailer configuration" >&2
921.14Spavel	    fi
931.14Spavel	    echo NO
941.14Spavel	fi
951.14Spavel}
961.14Spavel
971.14Spavel# force re-evaluation of /etc/rc.conf and resetting of $sendmail
981.14Spavel_rc_conf_loaded=false
991.14Spavel_rc_d_postfix=check
1001.4Slukemload_rc_config $name
1011.14Spavelunset _rc_d_postfix
1021.14Spavelpostfix=$(check_use_postfix)
1031.3Slukemrun_rc_command "$1"
104