#!/bin/sh
set -e;

PACKAGE=sendmail-bin;

#-----------------------------------------------------------
#stop(): stop sendmail
stop_mta () {
	# Account for varying PIDfile locations of older sendmail packages
	if [ -f /var/run/sendmail/mta/sendmail.pid ]; then
		start-stop-daemon --stop --oknodo --quiet \
			--pidfile /var/run/sendmail/msp/sendmail.pid > /dev/null;
		start-stop-daemon --stop --oknodo --quiet \
			-pidfile /var/run/sendmail/mta/sendmail.pid > /dev/null;
	elif [ -f /var/run/sendmail/sendmail.pid ]; then
		start-stop-daemon --stop --oknodo --quiet \
			--pidfile /var/run/sendmail/sendmail.pid > /dev/null;
	elif [ -f /var/run/sendmail.pid ]; then
		start-stop-daemon --stop --oknodo --quiet \
			--pidfile /var/run/sendmail.pid > /dev/null;
		fi;
	# Since we changed the executable, do one more try - using the old name
	if [ -f /var/run/sendmail/mta/sendmail.pid ]; then
		start-stop-daemon --stop --oknodo --quiet \
			--pidfile /var/run/sendmail/mta/sendmail.pid > /dev/null;
		fi;
	start-stop-daemon --stop --oknodo --quiet \
		--name sendmail > /dev/null;
	if [ -x @sysconfdir@/init.d/sendmail ]; then
		invoke-rc.d --quiet --force sendmail stop
		fi;
	};

#-----------------------------------------------------------
#start(): start sendmail
start_mta () {
	invoke-rc.d sendmail start
	};

#-----------------------------------------------------------
# configure(): save sendmail.cf, call sendmailconfig
configure_mta () {
	local enter;
	echo -n "Configure now ? (y/N) ";
	read yn;
	yn=$(echo -n "$yn" | sed -e "s/^\ *//" -e "s/^\t*//");
	test -n "$yn" || yn="N";
	case "$yn" in 
		[Yy]*) 
			stop_mta;
			sendmailconfig --no-reload;
			start_mta;
			;;

		[Nn]*)
			echo '';
			echo "To configure sendmail later, type" \
				"sendmailconfig";
			echo "After configuring sendmail, you can" \
				"start it via @sysconfdir@/init.d/sendmail start";
			echo -n "Press [ENTER] ";
			read enter;
			;;
		esac;
	};

# do we have debconf?
if [ -f /usr/share/debconf/confmodule ]; then
	DEBCONF=true;
	#. /usr/share/debconf/confmodule;
	#db_stop; # For testing
else
	DEBCONF='';
	fi;

case "$1" in
	configure)
		# continue below
		;;

	abort-upgrade|abort-remove|abort-deconfigure)
		exit 0;
		;;

	*)
		echo "$PACKAGE postinst called with unknown argument \`$1'" >&2;
		exit 1;
		;;
	esac;

#--------------------------------------------------------------------
# Continuation of "$1" = "configure"

# Note: can't use debhelper here because the actions aren't contiguous
#xxxHELPER#

# Automatically added by dh_installinit
if [ -x "@sysconfdir@/init.d/sendmail" ]; then
	update-rc.d -f sendmail remove >/dev/null;
	update-rc.d sendmail defaults 21 19 >/dev/null;
	#/etc/init.d/sendmail start
fi
# End automatically added section

#-----------------------------------------------------------
# Create (or update) MTA, MSP alternatives
# This way, we'll be able to install 2 MTAs on the same box :)
update-alternatives \
	--install @sbindir@/sendmail-mta sendmail-mta @libexecdir@/sendmail 25 \
	--slave   @mandir@/man8/sendmail-mta.8.gz sendmail-mta.8.gz \
			  @mandir@/man8/sendmail.sendmail.8.gz \
	--slave	  @sbindir@/runq runq @datadir@/sendmail/runq \
	--slave	  @mandir@/man8/runq.8.gz runq.8.gz \
			  @mandir@/man8/runq.sendmail.8.gz \
	--slave   @sbindir@/newaliases newaliases \
			  @datadir@/sendmail/newaliases \
	--slave	  @mandir@/man8/newaliases.8.gz newaliases.8.gz \
			  @mandir@/man8/newaliases.sendmail.8.gz \
	--slave	  @bindir@/mailq mailq @datadir@/sendmail/mailq \
	--slave	  @mandir@/man1/mailq.1.gz mailq.1.gz \
			  @mandir@/man1/mailq.sendmail.1.gz \
	--slave	  @mandir@/man5/aliases.5.gz aliases.5.gz \
			  @mandir@/man5/aliases.sendmail.5.gz \
			  ;
update-alternatives \
	--install @sbindir@/sendmail-msp sendmail-msp @libexecdir@/sendmail 25 \
	--slave   @mandir@/man8/sendmail-msp.8.gz sendmail-msp.8.gz \
			  @mandir@/man8/sendmail.sendmail.8.gz \
	--slave   @sbindir@/sendmail sendmail @libexecdir@/sendmail \
	--slave   @prefix@/lib/sendmail lib.sendmail @libexecdir@/sendmail \
	--slave   @mandir@/man8/sendmail.8.gz sendmail.8.gz \
			  @mandir@/man8/sendmail.sendmail.8.gz \
			  ;

#-----------------------------------------------------------
# With a dynamic uid/gid, have to set appropriate ownership herein
if ! dpkg-statoverride --list @libexecdir@/sendmail >/dev/null ; then
	dpkg-statoverride --update --add root smmsp 02755 @libexecdir@/sendmail
fi
if ! dpkg-statoverride --list @libexecdir@/mailstats >/dev/null ; then
	dpkg-statoverride --update --add root smmsp 02755 @libexecdir@/mailstats
fi

#-----------------------------------------------------------
# Create backups of /etc/mail/{sendmail,submit}.mc
if [ -f @sysconfdir@/mail/sendmail.cf ]; then
	echo "Saving old /etc/mail/sendmail.cf" \
		"as /etc/mail/sendmail.cf.old ...";
	cp -f @sysconfdir@/mail/sendmail.cf \
		@sysconfdir@/mail/sendmail.cf.old;
	chown root:root @sysconfdir@/mail/sendmail.cf.old;
	chmod 0644 @sysconfdir@/mail/sendmail.cf.old;
	fi;
if [ -f @sysconfdir@/mail/submit.cf ]; then
	cp -f @sysconfdir@/mail/submit.cf \
		@sysconfdir@/mail/submit.cf.old;
	chown root:root @sysconfdir@/mail/submit.cf.old;
	chmod 0644 @sysconfdir@/mail/submit.cf.old;
	fi;

start_ask=0;

#-----------------------------------------------------------
# Create /etc/mail/sendmail.mc if it doesn't exist
if [ ! -f @sysconfdir@/mail/sendmail.mc ]; then
	cat <<-EOT

	You are doing a new install, or have erased /etc/mail/sendmail.mc.
	If you've accidentaly erased /etc/mail/sendmail.mc, check /var/backups.

	I am creating a safe, default sendmail.mc for you and you can
	run sendmailconfig later if you need to change the defaults.

	EOT
	fi;

if [ -x @datadir@/sendmail/update_sendmail ]; then
	stop_mta;
	echo "Updating sendmail environment ...";
	@datadir@/sendmail/update_sendmail || true;
	start_mta;
	fi;
exit 0;


#-----------------------------------------------------------
# See if we can do this automagically...
cat <<-EOT

It is a good idea to regenerate the sendmail configuration
file with each new spin of the sendmail package.

But, if you hand edit sendmail.cf instead of making changes through
sendmail.mc, then you want to say no, save your old sendmail.cf, run
sendmailconfig, then migrate your changes into the new version.

EOT
echo -n "Automagically regenerate the sendmail.cf configuration file? (Y/n) ";
read yn;
yn=$(echo -n "$yn" | sed -e "s/^\ *//" -e "s/^\t*//");
test -n "$yn" || yn="Y";
case "$yn" in
	[Yy]*)
		if [ -f @sysconfdir@/mail/sendmail.cf ]; then
			echo "Saving old /etc/mail/sendmail.cf" \
				"as /etc/mail/sendmail.cf.old ...";
			cp -f @sysconfdir@/mail/sendmail.cf \
				@sysconfdir@/mail/sendmail.cf.old;
			chown root:root @sysconfdir@/mail/sendmail.cf.old;
			chmod 0644 @sysconfdir@/mail/sendmail.cf.old;
			fi;
		if [ -f @sysconfdir@/mail/submit.cf ]; then
			cp -f @sysconfdir@/mail/submit.cf \
				@sysconfdir@/mail/submit.cf.old;
			chown root:root @sysconfdir@/mail/submit.cf.old;
			chmod 0644 @sysconfdir@/mail/submit.cf.old;
			fi;
		if [ -x @datadir@/sendmail/update_sendmail ]; then
			stop_mta;
			echo "Updating sendmail environment ...";
			@datadir@/sendmail/update_sendmail || true;
			fi;
		;;

	[Nn]*)
		cat <<-EOT

		Your files (sendmail.mc,cf, etc) have *not* been altered.

  *** Warning *** Warning *** Warning *** Warning *** Warning *** Warning ***

		There have been changes in
			* Paths of some databases and executables
			* FEATUREs, DOMAIN, includes
			* Internal Database storage

		These changes were *NOT* made for you ... And will not be
		until you run sendmailconfig!

		Until you update /etc/mail/sendmail.cf via sendmailconfig,
		you should expect to have problems running sendmail!

		"Well, a pet peeve of mine is people who directly edit the
		.cf file instead of using the m4 configuration files.
		Don't do it! [laughs] I treat the .cf file as a binary
		file - you should too."
						--	Eric Allman 1999/10/18

  *** Warning *** Warning *** Warning *** Warning *** Warning *** Warning ***

		EOT
		echo "Do you wish to run sendmailconfig now, or later";
		start_ask=0;
		configure_mta;
		case "$yn" in
			[Yy]*)
				cat <<-EOT

				Do you wish to start sendmail with the new sendmail.cf,
				or do you wish to delay until you can merge any changes
				from your older sendmail.cf.old?
				EOT
				start_ask=1;
				start_mta;
				;;
		   esac;
		exit 0;
	esac;

#-----------------------------------------------------------
# If we're still here, we're going the automagic path...
# Now, liberal application of smoke and mirrors
if [ -f @sysconfdir@/mail/sendmail.mc ]; then
	start_ask=1;
	start_mta;
	fi;

exit 0;

#-----------------------------------------------------------
#
# List herein (for reference) what debhelper would've done:
#DEBHELPER#
