# Copyright 1999-2008 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/mail-filter/amavisd-new/amavisd-new-2.6.1.ebuild,v 1.2 2008/08/29 22:04:28 maekke Exp $

inherit eutils

DESCRIPTION="High-performance interface between the MTA and content checkers."
HOMEPAGE="http://www.ijs.si/software/amavisd/"
SRC_URI="http://www.ijs.si/software/amavisd/${P}.tar.gz"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~alpha amd64 ~ppc ~ppc64 ~sparc x86"
IUSE="courier dkim ldap milter mysql postgres qmail"

DEPEND=">=sys-apps/sed-4
	>=dev-lang/perl-5.8.2
	milter? ( || ( mail-filter/libmilter >=mail-mta/sendmail-8.12 ) )"

RDEPEND="${DEPEND}
	>=sys-apps/coreutils-5.0-r3
	app-arch/gzip
	app-arch/bzip2
	app-arch/arc
	app-arch/cabextract
	app-arch/freeze
	app-arch/lha
	app-arch/unarj
	|| ( app-arch/unrar app-arch/rar )
	app-arch/zoo
	>=dev-perl/Archive-Zip-1.14
	>=dev-perl/Compress-Zlib-1.35
	dev-perl/Convert-TNEF
	>=dev-perl/Convert-UUlib-1.08
	virtual/perl-MIME-Base64
	>=dev-perl/MIME-tools-5.415
	>=dev-perl/MailTools-1.58
	>=dev-perl/net-server-0.91
	virtual/perl-Digest-MD5
	dev-perl/IO-stringy
	>=virtual/perl-Time-HiRes-1.49
	dev-perl/Unix-Syslog
	>=sys-libs/db-3.2
	dev-perl/BerkeleyDB
	virtual/mta
	ldap? ( >=dev-perl/perl-ldap-0.33 )
	mysql? ( dev-perl/DBD-mysql )
	postgres? ( dev-perl/DBD-Pg )
	dkim? ( >=dev-perl/Mail-DKIM-0.31 )"

AMAVIS_ROOT="/var/amavis"

src_unpack() {
	unpack ${A}
	cd "${S}"

	if use courier ; then
		epatch amavisd-new-courier.patch
	fi

	if use qmail ; then
		epatch amavisd-new-qmqpqq.patch
	fi

	epatch "${FILESDIR}/${PN}-2.4.4-amavisd.conf-gentoo.patch"

	if ! use dkim ; then
		epatch "${FILESDIR}/${PN}-dkimconf.patch"
	fi
}

src_compile() {
	if use milter ; then
		cd "${S}/helper-progs"

		econf --with-runtime-dir=${AMAVIS_ROOT} \
			--with-sockname=${AMAVIS_ROOT}/amavisd.sock \
			--with-user=amavis || die "helper-progs econf failed"
		emake || die "helper-progs compile problem"

		cd "${S}"
	fi
}

src_install() {
	dosbin amavisd amavisd-agent amavisd-nanny amavisd-release
	dobin p0f-analyzer.pl

	insinto /etc
	insopts -m0640
	newins amavisd.conf-sample amavisd.conf

	dosed "s:^#\\?\\\$MYHOME[^;]*;:\$MYHOME = '$AMAVIS_ROOT';:" \
		/etc/amavisd.conf

	newinitd "${FILESDIR}/amavisd.rc6" amavisd
	dosed "s:/var/run/amavis/:$AMAVIS_ROOT/:g" /etc/init.d/amavisd

	keepdir ${AMAVIS_ROOT}
	keepdir ${AMAVIS_ROOT}/db
	keepdir ${AMAVIS_ROOT}/quarantine
	keepdir ${AMAVIS_ROOT}/tmp

	newdoc test-messages/README README.samples
	dodoc AAAREADME.first INSTALL MANIFEST RELEASE_NOTES README_FILES/README.* \
		test-messages/sample* amavisd.conf-default amavisd-agent \
		amavisd-custom.conf

	dodir /usr/share/doc/${PF}/html
	insinto /usr/share/doc/${PF}/html
	doins README_FILES/*.{html,css}
	dodir /usr/share/doc/${PF}/html/images
	insinto /usr/share/doc/${PF}/html/images
	doins README_FILES/images/*

	if use milter ; then
		cd "${S}/helper-progs"
		einstall
		cd "${S}"
	fi

	for i in whitelist blacklist spam_lovers; do
		if [ -f ${AMAVIS_ROOT}/${i} ]; then
			cp "${AMAVIS_ROOT}/${i}" "${D}/${AMAVIS_ROOT}"
		else
			touch "${D}"/${AMAVIS_ROOT}/${i}
		fi
	done

	if use ldap ; then
		elog "Adding ${P} schema to openldap schema dir."
		dodir /etc/openldap/schema
		insinto /etc/openldap/schema
		insopts -o root -g root -m 644
		newins LDAP.schema ${PN}.schema || die
		newins LDAP.schema ${PN}.schema.default || die
	fi

	find "${D}"/${AMAVIS_ROOT} -name "*" -type d -exec chmod 0750 \{\} \;
	find "${D}"/${AMAVIS_ROOT} -name "*" -type f -exec chmod 0640 \{\} \;
}

pkg_preinst() {
	enewgroup amavis
	enewuser amavis -1 -1 ${AMAVIS_ROOT} amavis

	if [ -z "$(dnsdomainname)" ] ; then
		dosed "s:^#\\?\\\$mydomain[^;]*;:\$mydomain = '$(hostname)';:" \
			/etc/amavisd.conf
	else
		dosed "s:^#\\?\\\$mydomain[^;]*;:\$mydomain = '$(dnsdomainname)';:" \
			/etc/amavisd.conf
	fi

	if has_version mail-filter/razor ; then
		if [ ! -d ${AMAVIS_ROOT}/.razor ] ; then
			elog "Setting up initial razor config files..."

			razor-admin -create -home="${D}"/${AMAVIS_ROOT}/.razor
			sed -i -e "s:debuglevel\([ ]*\)= .:debuglevel\1= 0:g" \
				"${D}"/${AMAVIS_ROOT}/.razor/razor-agent.conf
		fi
	fi
}

pkg_postinst() {
	if ! has_version mail-filter/spamassassin ; then
		echo
		elog "Amavisd-new no longer requires SpamAssassin, but no anti-spam checking"
		elog "will be performed without it. Since you do not have SpamAssassin installed,"
		elog "all spam checks have been disabled. To enable them, install SpamAssassin"
		elog "and comment out the line containing: "
		elog "@bypass_spam_checks_maps = (1); in /etc/amavisd.conf."
	fi
	echo
	ewarn "As of amavisd-new-2.4.5 p0f-analyzer.pl only binds to the loopback interface"
	ewarn "by default instead of to all interfaces. You will need to change $bind_addr"
	ewarn "in p0f-analyzer.pl to '0.0.0.0' if p0f-analyzer.pl is running on a different"
	ewarn "host from amavisd or from other querying clients."
	echo
	ewarn "Adjusting permissions for /etc/amavisd.conf (0 for world, owner root:amavis)"
	echo
	chmod o-rwx /etc/amavisd.conf
	chown root:amavis /etc/amavisd.conf
	chown -R amavis:amavis ${AMAVIS_ROOT}
}