-# Copyright 1999-2018 Gentoo Foundation
+# Copyright 1999-2018 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=6
inherit systemd user
-MY_P="${P/_/-}"
DESCRIPTION="High-performance interface between the MTA and content checkers"
-HOMEPAGE="https://www.ijs.si/software/amavisd/"
-SRC_URI="https://www.ijs.si/software/amavisd/${MY_P}.tar.xz"
+HOMEPAGE="https://gitlab.com/amavis/amavis"
+SRC_URI="${HOMEPAGE}/-/archive/${P}/amavis-${P}.tar.gz"
PORTAGE_DOHTML_WARN_ON_SKIPPED_FILES=yes
LICENSE="GPL-2 BSD-2"
>=virtual/perl-Time-HiRes-1.49
dev-perl/Unix-Syslog
dev-perl/Net-LibIDN
- sys-apps/file
+ dev-perl/File-LibMagic
>=sys-libs/db-4.4.20
dev-perl/BerkeleyDB
dev-perl/Convert-BinHex
zmq? ( dev-perl/ZMQ-LibZMQ3 )"
AMAVIS_ROOT="/var/amavis"
-S="${WORKDIR}/${MY_P}"
+S="${WORKDIR}/amavis-${P}"
+
+pkg_setup() {
+ # Create the user beforehand so that we can install the config file
+ # (and some directories) with group "amavis" in src_install().
+ enewgroup amavis
+ enewuser amavis -1 -1 "${AMAVIS_ROOT}" amavis
+}
src_prepare() {
# amavisd-new version 2.11.0 breaks DKIM signing of outbound mail,
if ! use spamassassin ; then
sed -i -e \
"/^#[[:space:]]*@bypass_spam_checks_maps[[:space:]]*=[[:space:]]*(1)/s/^#//" \
- "${S}/amavisd.conf" || die "missing conf file - sa"
+ "${S}/amavisd.conf" || die "missing conf file - sa"
fi
+
eapply_user
}
newinitd "${FILESDIR}"/amavis-mc.initd amavis-mc
fi
+ if use ldap ; then
+ dodir /etc/openldap/schema
+ insinto /etc/openldap/schema
+ newins LDAP.schema ${PN}.schema || die
+ fi
+
+ # The config file should be root:amavis so that the amavis user can
+ # read (only) it after dropping privileges. And of course he should
+ # own everything in his home directory.
insinto /etc
- insopts -m0640
+ insopts -m0640 -g amavis
doins amavisd.conf
- newinitd "${FILESDIR}/amavisd.initd-r1" amavisd
+ # Implementation detail? Keepdir calls dodir under the hood.
+ diropts -o amavis -g amavis
+ keepdir "${AMAVIS_ROOT}"/{,db,quarantine,tmp,var}
- systemd_dounit "${FILESDIR}/amavisd.service"
- use clamav || sed -i -e '/Wants=clamd/d' "${ED}"/usr/lib/systemd/system/amavisd.service
- use spamassassin || sed -i -e '/Wants=spamassassin/d' "${ED}"/usr/lib/systemd/system/amavisd.service
+ # BEWARE:
+ #
+ # Anything below this line is using the mangled insopts/diropts from
+ # above!
+ #
- keepdir "${AMAVIS_ROOT}"
- keepdir "${AMAVIS_ROOT}/db"
- keepdir "${AMAVIS_ROOT}/quarantine"
- keepdir "${AMAVIS_ROOT}/tmp"
- keepdir "${AMAVIS_ROOT}/var"
+ newinitd "${FILESDIR}/amavisd.initd-r2" amavisd
+
+ systemd_dounit "${FILESDIR}/amavisd.service-r1"
dodoc AAAREADME.first INSTALL MANIFEST RELEASE_NOTES TODO \
amavisd.conf-default amavisd-custom.conf
docinto test-messages
dodoc test-messages/README
dodoc test-messages/sample.tar.gz.compl
-
- if use ldap ; then
- dodir /etc/openldap/schema
- insinto /etc/openldap/schema
- insopts -o root -g root -m 644
- newins LDAP.schema ${PN}.schema || die
- fi
}
pkg_preinst() {
- enewgroup amavis
- enewuser amavis -1 -1 "${AMAVIS_ROOT}" amavis
+ # TODO: the following is done as root, but should probably be done
+ # as the amavis user.
if use razor ; then
if [ ! -d "${ROOT}${AMAVIS_ROOT}/.razor" ] ; then
elog "Setting up initial razor config files..."
fi
fi
}
-
-pkg_postinst() {
- chown root:amavis "${ROOT}/etc/amavisd.conf"
- chown -R amavis:amavis "${ROOT}/${AMAVIS_ROOT}"
-}
--- /dev/null
+#!/sbin/openrc-run
+# Copyright 1999-2018 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+extra_started_commands="reload"
+command="/usr/sbin/${RC_SVCNAME}"
+pidfile="/run/${RC_SVCNAME}.pid"
+
+# Why run in the foreground? Typically amavisd will drop privileges
+# and then write its own PID file in its home directory. This is fine
+# so long as you use e.g. "amavisd stop" to stop the daemon. But, we
+# want to use start-stop-daemon to do it. And start-stop-daemon will
+# send a signal *as root* to the PID contained in the PID file. So, we
+# don't want to rely on a PID file that's controlled by a non-root
+# user.
+#
+# As a workaround, we run amavisd in the foreground, and let
+# start-stop-daemon push it into the background with its own PID
+# file. We don't pass "-P" via command_args below because we don't
+# want amavisd to try (and fail) to create that PID file. This does
+# mean that you can't run "amavisd stop" or "amavisd reload" directly;
+# sorry!
+command_args="foreground"
+command_background="true"
+
+# The amavisd daemon provides its own "stop" and "reload" functions,
+# but if you read into the source, they just do what start-stop-daemon
+# is going to do anyway. The "stop" command for amavisd will send a
+# SIGTERM immediately, and then a SIGKILL after 60 seconds. So, we do
+# that too. The "reload" command sends a SIGHUP; see reload() below.
+retry="SIGTERM/15 SIGKILL/60"
+
+depend() {
+ use net logger antivirus snmpd
+ before mta
+}
+
+reload() {
+ ebegin "Reloading ${RC_SVCNAME}"
+ start-stop-daemon --signal HUP --pidfile "${pidfile}"
+ eend $?
+}