#!/bin/sh

#-*- vim:syntax=sh

set -e

if [ -n "$CT_MAILSERVER_CONFIGURED" ]; then
	exit 0
fi

die()
{
	echo ERROR: $*
	exit 1
}

register_service(){

	[ -n "$1" ] || die "register_service: service name not specified"


# update-rc.d for Debian/Ubuntu (not SuSE)
	/usr/sbin/update-rc.d "$1" defaults

}

unregister_service(){

	[ -n "$1" ] || die "unregister_service: service name not specified"


	/usr/sbin/update-rc.d -f $1 remove

}

relabel()
{
	[ ! -x "/sbin/restorecon" ] || /sbin/restorecon -R $@
}

detect_mailserver()
{
	[ -x "/opt/psa/admin/sbin/mailmng" ] || die "mailmng utility is not executable"

	if ! sw-engine -r 'eval(`/opt/psa/admin/sbin/mailmng --features`);echo(strtolower($features["SMTP_Server"]));'; then
		echo "Cannot detect mailserver" >&2
	fi
}

service_action()
{
	local service="$1"
	local action="$2"
	"/etc/init.d/$service" "$action"
}

configure_postfix()
{
	deconfigure_qmail || :
	register_service ctmilter_initd
	if [ ! -e "/opt/ctch/ct-milter/ct-milter.args" ]; then
		# this is a clean installation let's put some defaults
		echo -n "--local-networks 127.0.0.0/8 -T -a -e --outbound-spam-reject --outbound-bulk-reject --outbound-vod-virus-reject --outbound-vod-high-reject --spam-threshold-action 2 --spam-threshold 5 --virus-threshold-action 2 --virus-threshold 5" > /opt/ctch/ct-milter/ct-milter.args
	fi

	/opt/psa/admin/sbin/modules/commtouch/postoutset enable
	relabel /etc/postfix/main.cf
	service_action ctmilter_initd start
}

deconfigure_postfix()
{
	/opt/psa/admin/sbin/modules/commtouch/postoutset disable
	unregister_service ctmilter_initd
	service_action ctmilter_initd stop
}

deconfigure_qmail()
{

	dpkg-divert --remove /var/qmail/bin/qmail-queue
	[ -x "/etc/init.d/qmail" ] && service_action qmail restart
}

configure_qmail()
{
	if [ ! -x "/var/qmail/bin/qmail-queue" ]; then
		return 0
	fi
	deconfigure_postfix || :
		dpkg-divert --package commtouch --add --rename 			--divert /var/qmail/bin/qmail-queue.plesk.ctch 			/var/qmail/bin/qmail-queue
		cp -pf /opt/ctch/ct-qmail-queue /var/qmail/bin/qmail-queue

	chown qmailq:qmail /var/qmail/bin/qmail-queue
	chmod 4511 /var/qmail/bin/qmail-queue
	/opt/psa/admin/sbin/modules/commtouch/ctasd-setfile
}

ct_not_enabled()
{
	mailserver=`detect_mailserver`
	case "$mailserver" in
		qmail) filtering=`cat /var/qmail/control/ctasd_check_outbound`  ;;
		postfix) filtering=`/opt/psa/admin/sbin/modules/commtouch/postoutset check` ;;
		*)
			echo "Unknown mailserver \`$mailserver'" >&2
			exit 1
		;;
esac
	return $filtering
}

mailserver=`detect_mailserver`

case "$1" in
	configure) : ;;
	deconfigure) : ;;
	*)
		echo "Undefined action \`$1'" >&2
		exit 1
	;;
esac

export CT_MAILSERVER_CONFIGURED=1

case "$mailserver" in
	qmail) : ;;
	postfix) : ;;
	*)
		echo "Unknown mailserver \`$mailserver'" >&2
		exit 1
	;;
esac

if [ "$1" = "configure" ] && ct_not_enabled; then
# Don't configure if we not enabled
	exit
fi

${1}_${mailserver}
