#!/bin/sh
# $OpenBSD: INSTALL,v 1.6 1999/10/07 20:58:04 jakob Exp $
#
# Pre/post-installation setup of postfix

PATH=/bin:/usr/bin:/sbin:/usr/sbin
PREFIX=${PKG_PREFIX:-/usr/local}
CONFIG_DIR=/etc/postfix
SPOOL_DIR=/var/spool/postfix

POSTFIXUID=6
POSTFIXGID=6
MAILDROPGID=12

# Function: set up postfix user/group accounts.
#
do_accts()
{
    # Create postfix user and group.
    line=`egrep '^postfix:' /etc/group`
    if [ "$line" != "" ]; then
	POSTFIXGID=`echo $line | cut -f3 -d:`
    else
	echo "-> Creating postfix group, gid $POSTFIXGID"
	echo "postfix:*:${POSTFIXGID}:" >> /etc/group
    fi
    line=`egrep '^postfix:' /etc/passwd`
    if [ "$line" != "" ]; then
	POSTFIXUID=`echo $line | cut -f3 -d:`
    else
	echo "-> Creating postfix user, uid $POSTFIXUID"
	chpass -l -a "postfix:*:${POSTFIXUID}:${POSTFIXGID}::::Disgruntled Postal Worker:/nonexistent:/sbin/nologin"
    fi
    echo "-> Using account 'postfix' for postfix, uid $POSTFIXUID, gid $POSTFIXGID"
    # Create Postfix maildrop group.
    line=`egrep '^maildrop:' /etc/group`
    if [ "$line" != "" ]; then
        MAILDROPGID=`echo $line | cut -f3 -d:`
    else
        echo "-> Creating maildrop group, gid $MAILDROPGID"
        echo "maildrop:*:${MAILDROPGID}:" >> /etc/group
    fi
    echo "-> Using group 'maildrop' for postdrop, gid $MAILDROPGID"
}

# 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 ] || mkdir -p -m 755 $SPOOL_DIR
    [ -d ${SPOOL_DIR}/etc ] || mkdir -p -m 755 ${SPOOL_DIR}/etc
    for file in localtime services resolv.conf ; do
	install -c -m 755 /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: install the postfix configuration files from the samples
#
do_configs()
{
    if [ -d $CONFIG_DIR ]; then
	echo ""
	echo "+---------------"
	echo "| The existing $1 configuration files in ${CONFIG_DIR},"
	echo "| have NOT been changed.  You may want to compare them to the"
	echo "| current sample files, ${PREFIX}/lib/postfix,"
	echo "| and update your configuration as needed."
	echo "|"
	echo "| Existing ${CONFIG_DIR}/postfix-script, however, will be"
	echo "| updated to the latest version."
    	echo "+---------------"
	echo ""
    else
	# Install config files.
	mkdir -p -m 755 $CONFIG_DIR
	install -m 644 -c ${PREFIX}/lib/postfix/* $CONFIG_DIR
	sed "s@y0y0y0@${PREFIX}@g" ${CONFIG_DIR}/main.cf > ${CONFIG_DIR}/main.cf.$$
	install -m 644 ${CONFIG_DIR}/main.cf.$$ ${CONFIG_DIR}/main.cf
	rm -f ${CONFIG_DIR}/main.cf.$$

	# The correct postfix-script will be installed later.
	rm -f ${CONFIG_DIR}/postfix-script*

	echo ""
	echo "+---------------"
	echo "| The $1 configuration files in ${CONFIG_DIR},"
	echo "| have been installed.  Please view these files and change"
	echo "| the configuration to meet your needs."
	echo "+---------------"
	echo ""
    fi

    # Configure setgid maildrop
    install -m 755 -c ${PREFIX}/lib/postfix/postfix-script-sgid ${CONFIG_DIR}/postfix-script
    chgrp maildrop ${PREFIX}/sbin/postdrop
    chmod 2755 ${PREFIX}/sbin/postdrop
}

# Function: tell the user what s/he needs to do to use the port just installed
#
do_notice()
{
    echo ""
    echo "+---------------"
    echo "| Postfix can be set up to replace sendmail entirely. Please read the"
    echo "| documentation at file:$PREFIX/share/doc/postfix/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)
	do_accts
	;;
    POST-INSTALL)
	do_spooldir
        do_configs $1
	do_mailwrapper
	do_notice
	;;
    *)
	echo "Usage: `basename $0` distname <PRE-INSTALL|POST-INSTALL>" >&2
	exit 1
	;;
esac

exit 0
