#!/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"


# insserv for SuSE
	 /sbin/insserv -f "$1" >/dev/null 2>&1

}

unregister_service(){

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


	/sbin/insserv -r -f $1

}

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

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

	if ! sw-engine -r 'eval(`/usr/local/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"
	systemctl "$action" "$service.service"
}

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

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

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

deconfigure_qmail()
{

	if [ ! -x "/var/qmail/bin/ct-qmail-queue" ]; then
		return 0
	fi
	rm -f /var/qmail/bin/ct-qmail-queue

	if [ -x "/var/qmail/bin/qmail-queue" ]; then
# qmail active, remove ct stuff
		rm -f /var/qmail/bin/qmail-queue
		mv -f /var/qmail/bin/qmail-queue.plesk.ctch /var/qmail/bin/qmail-queue
		chown mhandlers-user:popuser /var/qmail/bin/qmail-queue
		chmod 2511 /var/qmail/bin/qmail-queue
	else
# qmail not active: simply remove stuff
		rm -f /var/qmail/bin/qmail-queue.plesk.ctch
	fi
	[ -x "/etc/init.d/qmail" ] && service_action qmail restart
}

configure_qmail()
{
	if [ ! -x "/var/qmail/bin/qmail-queue" ]; then
		return 0
	fi
	deconfigure_postfix || :

	if ! diff /var/qmail/bin/qmail-queue /var/qmail/bin/ct-qmail-queue >/dev/null 2>&1; then
# It seems qmail upgraded
		cp -pf "/var/qmail/bin/qmail-queue" "/var/qmail/bin/qmail-queue.plesk.ctch"
	fi

	cp -f /opt/ctch/ct-qmail-queue /var/qmail/bin/qmail-queue
	cp -f /opt/ctch/ct-qmail-queue /var/qmail/bin/ct-qmail-queue

	chown qmailq:mail /var/qmail/bin/qmail-queue
	chmod 4511 /var/qmail/bin/qmail-queue

	chown mhandlers-user:popuser /var/qmail/bin/qmail-queue.plesk.ctch
	chmod 2511 /var/qmail/bin/qmail-queue.plesk.ctch

	/usr/local/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=`/usr/local/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}
