#!/bin/sh
# $OpenBSD: INSTALL,v 1.17 2004/12/28 09:15:59 jakob Exp $
#
# Pre/post-installation setup of postfix

PATH=/bin:/usr/bin:/sbin:/usr/sbin
PREFIX=${PKG_PREFIX:-/usr/local}
CONFIG_DIR=${SYSCONFDIR}/postfix
SAMPLE_CONFIG_DIR=${PREFIX}/share/examples/postfix
SPOOL_DIR=/var/spool/postfix

# Function: set up the postfix spool dir / chroot area
#
do_spooldir()
{
    echo "-> Creating Postfix spool directory and chroot area under $SPOOL_DIR"
    [ -d $SPOOL_DIR ] || install -d -o root -g wheel -m 755 $SPOOL_DIR
    [ -d $SPOOL_DIR/etc ] || install -d -o root -g wheel -m 755 $SPOOL_DIR/etc
    [ -d $SPOOL_DIR/dev ] || install -d -o root -g wheel -m 755 $SPOOL_DIR/dev
    for file in localtime services resolv.conf ; do
	install -o root -g wheel -m 644 /etc/$file $SPOOL_DIR/etc
    done
}

# Function: replace sendmail binaries with postfix
#
do_mailwrapper()
{
    echo "-> Creating /etc/mailer.conf.postfix"
    cat <<MAILER >/tmp/mailer.conf.$$
sendmail	y0y0y0/sbin/sendmail
send-mail	y0y0y0/sbin/sendmail
mailq		y0y0y0/sbin/sendmail
newaliases	y0y0y0/sbin/sendmail
MAILER
    sed "s@y0y0y0@$PREFIX@g" /tmp/mailer.conf.$$ >/etc/mailer.conf.postfix
    rm -f /tmp/mailer.conf.$$
    chown root:wheel /etc/mailer.conf.postfix
    chmod 644 /etc/mailer.conf.postfix
}

# Function: update postfix scripts
#
update_scripts()
{
    rm -f $CONFIG_DIR/{postfix-script,postfix-files,post-install}
    install -o root -g wheel -m 544 \
	$SAMPLE_CONFIG_DIR/{postfix-script,post-install} $CONFIG_DIR
    install -o root -g wheel -m 444 \
	$SAMPLE_CONFIG_DIR/postfix-files $CONFIG_DIR
}

# Function: install the postfix configuration files from the samples
#
do_configs()
{
    PINSTALL="${CONFIG_DIR}/post-install command_directory=${PREFIX}/sbin"

    if [ -d $CONFIG_DIR ]; then
	update_scripts

	echo ""
	$PINSTALL upgrade-configuration
	echo ""

	echo "+---------------"
	echo "| The existing configuration files in $CONFIG_DIR has been preserved."
	echo "| You may want to compare them to the current sample files,"
	echo "| $SAMPLE_CONFIG_DIR, and update your configuration as needed."
	echo "|"
	echo "| $CONFIG_DIR/post{fix-{script,files},-install} has been updated."
    	echo "+---------------"
	echo ""
    else
	install -d -o root -g wheel -m 755 $CONFIG_DIR
	install -o root -g wheel -m 644 $SAMPLE_CONFIG_DIR/* $CONFIG_DIR

	update_scripts

	$PINSTALL first-install-reminder

	echo "+---------------"
	echo "| Configuration files has been installed in $CONFIG_DIR."
	echo "| Please update these files to meet your needs."
	echo "+---------------"
    fi

    $PINSTALL set-permissions create-missing

    grep syslogd_flags /etc/rc.conf{,.local} 2>/dev/null | grep -q postfix
    if [ $? -eq 1 ]; then
        echo ""
	echo "+---------------"
        echo "| Don't forget to add \"-a /var/spool/postfix/dev/log\" to syslogd_flags"
        echo "| in /etc/rc.conf.local (or /etc/rc.conf) and restart syslogd."
	echo "+---------------"
        echo ""
    fi
}

# Function: tell the user what s/he needs to do to use the port just installed
#
do_notice()
{
    echo "+---------------"
    echo "| Postfix can be set up to replace sendmail entirely. Please read the"
    echo "| documentation at file:$PREFIX/share/doc/postfix/html/index.html or"
    echo "| http://www.postfix.org/ carefully before you decide to do this!"
    echo "|"
    echo "| To replace sendmail with postfix you have to install a new mailer.conf"
    echo "| using the following command:"
    echo "|"
    echo "|     $PREFIX/sbin/postfix-enable"
    echo "|"
    echo "| If you want to restore sendmail, this is done using the following command:"
    echo "|"
    echo "|     $PREFIX/sbin/postfix-disable"
    echo "+---------------"
    echo ""
}

# verify proper execution
#
if [ $# -ne 2 ]; then
    echo "usage: $0 distname { PRE-INSTALL | POST-INSTALL }" >&2
    exit 1
fi

# Verify/process the command
#
case $2 in
    PRE-INSTALL)
	;;
    POST-INSTALL)
	do_mailwrapper
	do_spooldir
        do_configs $1
	do_notice
	;;
    *)
	echo "Usage: `basename $0` distname <PRE-INSTALL|POST-INSTALL>" >&2
	exit 1
	;;
esac

exit 0
