#!/bin/sh
#
#	$FreeBSD: ports/mail/postfix/pkg-install,v 1.21 2005/04/05 22:03:14 pav Exp $
#

# If the POSTFIX_DEFAULT_MTA environment variable is set to YES, it
# will make the port/package use defaults which make postfix replace
# sendmail as much as possible.

PKG_PREFIX=${PKG_PREFIX:=/usr/local}
BATCH=${BATCH:=no}
POSTFIX_DEFAULT_MTA=${POSTFIX_DEFAULT_MTA:=no}

if [ x${POSTFIX_DEFAULT_MTA} = xno ]; then
	DEFAULT_REPLACE_MAILERCONF=n
else
	DEFAULT_REPLACE_MAILERCONF=y
fi

if [ -x /usr/sbin/nologin ]; then
	NOLOGIN=/usr/sbin/nologin
else
	NOLOGIN=/sbin/nologin
fi

ask() {
	local question default answer

	question=$1
	default=$2
	if [ -z "${PACKAGE_BUILDING}" -a x${BATCH} = xno ]; then
		read -p "${question} [${default}]? " answer
	fi
	if [ x${answer} = x ]; then
		answer=${default}
	fi
	/bin/echo ${answer}
}

yesno() {
	local question default answer

	question=$1
	default=$2
	while :; do
		answer=$(ask "${question}" "${default}")
		case "${answer}" in
			[Yy]*)	return 0;;
			[Nn]*)	return 1;;
		esac
		/bin/echo "Please answer yes or no."
	done
}

if [ x"$2" = xPRE-INSTALL ]; then
	USER=postfix
	UID=125
	GROUP=postfix
	GID=125
	GROUP2=maildrop
	GID2=126

	if /usr/sbin/pw groupshow "${GROUP}" 2>/dev/null; then
		/bin/echo "You already have a group \"${GROUP}\", so I will use it."
	else
		if /usr/sbin/pw groupadd ${GROUP} -g ${GID}
		then
			/bin/echo "Added group \"${GROUP}\"."
		else
			/bin/echo "Adding group \"${GROUP}\" failed..."
			/bin/echo "Please create it, and try again."
			exit 1
		fi
	fi

	if /usr/sbin/pw groupshow "${GROUP2}" 2>/dev/null; then
		/bin/echo "You already have a group \"${GROUP2}\", so I will use it."
	else
		if /usr/sbin/pw groupadd ${GROUP2} -g ${GID2}; then
			/bin/echo "Added group \"${GROUP2}\"."
		else
			/bin/echo "Adding group \"${GROUP2}\" failed..."
			/bin/echo "Please create it, and try again."
			exit 1
		fi
	fi

	if /usr/sbin/pw user show "${USER}" 2>/dev/null; then
		 /bin/echo "You already have a user \"${USER}\", so I will use it."
	else
		if /usr/sbin/pw useradd ${USER} -u ${UID} -g ${GROUP} -h - -d /var/spool/postfix -s ${NOLOGIN} -c "Postfix Mail System"; then
			/bin/echo "Added user \"${USER}\"."
		else
			/bin/echo "Adding user \"${USER}\" failed..."
			/bin/echo "Please create it, and try again."
			exit 1
		fi
	fi

	if /usr/sbin/pw show group mail | grep -q "${USER}" 2>/dev/null; then
		/bin/echo "You already have user \"${USER}\" in group \"mail\", so I will use it."
	else
		/bin/echo "You need user \"${USER}\" added to group \"mail\"."
		if yesno "Would you like me to add it" y; then
			/usr/sbin/pw groupmod mail -m ${USER} || exit
			/bin/echo "Done."
		else
			/bin/echo "Please create it, and try again."
			exit 1
		fi
	fi
fi

if [ x"$2" = xPOST-INSTALL ]; then
	if [ -d ${PKG_PREFIX}/etc/postfix/dist ]; then
		for file in ${PKG_PREFIX}/etc/postfix/dist/*; do
			if [ ! -f ${PKG_PREFIX}/etc/postfix/${file#${PKG_PREFIX}/etc/postfix/dist} ]; then
				cp $file ${PKG_PREFIX}/etc/postfix/
			fi
		done
	fi

	/bin/sh ${PKG_PREFIX}/etc/postfix/post-install tempdir=/tmp \
	config_directory=${PKG_PREFIX}/etc/postfix \
	daemon_directory=${PKG_PREFIX}/libexec/postfix \
	command_directory=${PKG_PREFIX}/sbin \
	queue_directory=/var/spool/postfix \
	sendmail_path=${PKG_PREFIX}/sbin/sendmail \
	newaliases_path=${PKG_PREFIX}/bin/newaliases \
	mailq_path=${PKG_PREFIX}/bin/mailq \
	mail_owner=postfix \
	setgid_group=maildrop \
	manpage_directory=${PKG_PREFIX}/man \
	sample_directory=${PKG_PREFIX}/etc/postfix \
	readme_directory=no \
	upgrade-package
fi
# readme_directory is "no" above since the package will have correct perms
# already, and we don't know if they had PORTDOCS.

replace() {
	local orig repl

	orig=$1
	repl=$2
	if [ -e ${orig} ]; then
		/bin/mv -f ${orig} ${orig}.OFF
		/bin/chmod 0 ${orig}.OFF
	fi
	if [ -e ${repl} ]; then
		/bin/ln -s ${repl} ${orig}
	fi
}

if [ x"$2" = xPOST-INSTALL -a -z "${PACKAGE_BUILDING}" ]; then
	if [ -x /sbin/sysctl ]; then
		OSVERSION=`/sbin/sysctl -n kern.osreldate`
	else
		OSVERSION=`/usr/sbin/sysctl -n kern.osreldate`
	fi
	if [ ${OSVERSION} -ge 400014 ]; then
		if yesno "Would you like to activate Postfix in /etc/mail/mailer.conf" ${DEFAULT_REPLACE_MAILERCONF}; then
			mv -f /etc/mail/mailer.conf /etc/mail/mailer.conf.old
			/bin/echo "#"						>  /etc/mail/mailer.conf
			/bin/echo -n "# Execute the Postfix sendmail program"	>> /etc/mail/mailer.conf
			/bin/echo ", named ${PKG_PREFIX}/sbin/sendmail"		>> /etc/mail/mailer.conf
			/bin/echo "#"						>> /etc/mail/mailer.conf
			/bin/echo "sendmail	${PKG_PREFIX}/sbin/sendmail"	>> /etc/mail/mailer.conf
			/bin/echo "send-mail	${PKG_PREFIX}/sbin/sendmail"	>> /etc/mail/mailer.conf
			/bin/echo "mailq	${PKG_PREFIX}/sbin/sendmail"	>> /etc/mail/mailer.conf
			/bin/echo "newaliases	${PKG_PREFIX}/sbin/sendmail"	>> /etc/mail/mailer.conf
		fi
	else
		if yesno "Would you like to replace {sendmail,mailq,newaliases} with Postfix versions" n; then
			replace /usr/sbin/sendmail	${PKG_PREFIX}/sbin/sendmail
			replace /usr/bin/mailq		${PKG_PREFIX}/sbin/sendmail
			replace /usr/bin/newaliases	${PKG_PREFIX}/sbin/sendmail
			/bin/echo "Done."
		fi
	fi
fi
