forked from gentoo/gentoo
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
mail-filter/dspam: add mysql-8 compatibility
Bug: https://bugs.gentoo.org/692436 Package-Manager: Portage-2.3.103, Repoman-2.3.23 Signed-off-by: Adam Feldman <[email protected]>
- Loading branch information
1 parent
c65da4f
commit be40562
Showing
2 changed files
with
236 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,223 @@ | ||
# Copyright 1999-2020 Gentoo Authors | ||
# Distributed under the terms of the GNU General Public License v2 | ||
|
||
EAPI=7 | ||
|
||
inherit user | ||
|
||
DESCRIPTION="A statistical-algorithmic hybrid anti-spam filter" | ||
HOMEPAGE="http://dspam.sourceforge.net/" | ||
SRC_URI="mirror://sourceforge/${PN}/${P}.tar.gz" | ||
|
||
LICENSE="AGPL-3" | ||
SLOT="0" | ||
KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~x86" | ||
DRIVERS_IUSE="+hash mysql postgres sqlite" | ||
SCALES_IUSE="small-scale +domain-scale large-scale" | ||
IUSE="clamav daemon debug ldap static-libs syslog virtual-users user-homedirs ${DRIVERS_IUSE} ${SCALES_IUSE}" | ||
|
||
DEPEND=" | ||
net-mail/mailbase | ||
ldap? ( net-nds/openldap ) | ||
mysql? ( dev-db/mysql-connector-c:0= ) | ||
postgres? ( dev-db/postgresql ) | ||
sqlite? ( dev-db/sqlite:3 ) | ||
" | ||
RDEPEND=" | ||
${DEPEND} | ||
clamav? ( app-antivirus/clamav ) | ||
syslog? ( virtual/logger ) | ||
" | ||
|
||
# Demands on sane USE flags: | ||
# - find out what driver to use: select at least one | ||
# - if static-libs is set, only one driver may be selected | ||
# - find out what scale to use: select exactly one | ||
# - user-homedirs does not work with virtual-users | ||
REQUIRED_USE=" | ||
|| ( ${DRIVERS_IUSE//+} ) | ||
static-libs? ( ^^ ( ${DRIVERS_IUSE//+} ) ) | ||
^^ ( ${SCALES_IUSE//+} ) | ||
virtual-users? ( !user-homedirs ) | ||
" | ||
|
||
PATCHES=( "${FILESDIR}/${P}-mysql8-my_bool-typedef.patch" ) | ||
|
||
# dspam setup defaults | ||
DSPAM_HOME=/var/spool/dspam | ||
DSPAM_CONF=/etc/dspam | ||
DSPAM_LOG=/var/log/dspam | ||
DSPAM_MODE=2510 | ||
DSPAM_DRIVERS= | ||
DSPAM_DRIVERS_EXTRAS= | ||
|
||
pkg_setup() { | ||
# setup storage, this sets DSPAM_DRIVERS | ||
dspam_setup_storage_drivers | ||
|
||
# create dspam user and group | ||
dspam_setup_user | ||
} | ||
|
||
src_configure() { | ||
econf \ | ||
--sysconfdir=${DSPAM_CONF} \ | ||
--with-dspam-home=${DSPAM_HOME} \ | ||
--with-dspam-home-group=dspam \ | ||
--with-dspam-mode=${DSPAM_MODE} \ | ||
--with-dspam-group=dspam \ | ||
--with-logdir=${DSPAM_LOG} \ | ||
--enable-external-lookup \ | ||
--enable-long-usernames \ | ||
--enable-split-configuration \ | ||
$(use_enable clamav) \ | ||
$(use_enable daemon) \ | ||
$(use_enable debug) \ | ||
$(use_enable debug bnr-debug) \ | ||
$(use_enable debug verbose-debug) \ | ||
$(use_enable domain-scale) \ | ||
$(use_enable large-scale) \ | ||
$(use_enable static-libs static) \ | ||
$(use_enable syslog) \ | ||
$(use_enable user-homedirs homedir) \ | ||
$(use_enable virtual-users) \ | ||
--with-storage-driver=${DSPAM_DRIVERS} ${DSPAM_DRIVERS_EXTRAS} \ | ||
$(use mysql || use postgres && echo "--enable-preferences-extension") \ | ||
$(use syslog || echo "--with-logfile=${DSPAM_LOG}/dspam.log") | ||
} | ||
|
||
dspam_setup_user() { | ||
# DSPAM CGI web gui (www-apps/dspam-web) needs to run as a regular user | ||
# under suexec in apache, so DSPAM user/group need to be regular users too | ||
|
||
local euid egid | ||
for euid in {1000..5000} ; do | ||
[ -z "$(egetent passwd ${euid})" ] && break | ||
done | ||
for egid in {1000..5000} ; do | ||
[ -z "$(egetent group ${egid})" ] && break | ||
done | ||
enewgroup dspam ${egid} | ||
enewuser dspam ${euid} -1 "${DSPAM_HOMEDIR}" dspam,mail | ||
} | ||
|
||
dspam_setup_storage_drivers() { | ||
# Find out which storage drivers need to be enabled, and set some | ||
# variables so that src_configure can pick them up | ||
|
||
if use hash; then | ||
DSPAM_DRIVERS+=",hash_drv" | ||
fi | ||
|
||
if use mysql; then | ||
DSPAM_DRIVERS+=",mysql_drv" | ||
DSPAM_DRIVERS_EXTRAS+="--with-mysql-includes=/usr/include/mysql " | ||
fi | ||
|
||
if use postgres; then | ||
DSPAM_DRIVERS+=",pgsql_drv" | ||
fi | ||
|
||
if use sqlite; then | ||
DSPAM_DRIVERS+=",sqlite3_drv" | ||
fi | ||
|
||
if ! use static-libs; then | ||
# set the driver name twice to avoid a static build | ||
DSPAM_DRIVERS+=${DSPAM_DRIVERS} | ||
fi | ||
|
||
# remove first comma separator | ||
DSPAM_DRIVERS=${DSPAM_DRIVERS:1} | ||
einfo "Building with drivers: ${DSPAM_DRIVERS}" | ||
#echo DSPAM_DRIVERS_EXTRAS=$DSPAM_DRIVERS_EXTRAS | ||
} | ||
|
||
src_install() { | ||
default | ||
|
||
if use daemon; then | ||
newinitd "${FILESDIR}/dspam.initd" dspam | ||
newconfd "${FILESDIR}/dspam.confd" dspam | ||
fi | ||
|
||
if use mysql; then | ||
insinto "/usr/share/${PN}/mysql" | ||
|
||
local files="mysql_objects-4.1.sql mysql_objects-space.sql mysql_objects-speed.sql purge-4.1.sql purge.sql" | ||
if use virtual-users; then | ||
files+=" virtual_user_aliases.sql virtual_users.sql" | ||
fi | ||
|
||
for file in $files; do | ||
doins src/tools.mysql_drv/${file} | ||
done | ||
fi | ||
|
||
if use postgres; then | ||
insinto "/usr/share/${PN}/pgsql" | ||
|
||
local files="pgsql_objects.sql purge-pe.sql purge.sql" | ||
if use virtual-users; then | ||
files+=" virtual_users.sql" | ||
fi | ||
|
||
for file in $files; do | ||
doins src/tools.pgsql_drv/${file} | ||
done | ||
fi | ||
|
||
if use sqlite; then | ||
insinto "/usr/share/${PN}/sqlite" | ||
newins src/tools.sqlite_drv/purge-3.sql purge.sql | ||
fi | ||
|
||
insinto "${DSPAM_HOME}/txt" | ||
doins txt/*.txt | ||
local i | ||
for i in spam nonspam; do | ||
echo "Scanned and tagged with DSPAM ${PV} on Gentoo Linux as ${i} by ISP" > "${T}/msgtag.${i}" | ||
doins "${T}/msgtag.${i}" | ||
done | ||
|
||
newbin contrib/dspam_maintenance/dspam_maintenance.sh dspam_maintenance | ||
exeinto /etc/cron.daily | ||
newexe "${FILESDIR}/dspam.cron-r4" dspam | ||
|
||
insinto /etc/logrotate.d | ||
newins "${FILESDIR}/dspam.logrotate" dspam | ||
|
||
dodoc CHANGELOG README* RELEASE.NOTES UPGRADING doc/*.txt | ||
|
||
# stop logrotate-3.8 from complaining | ||
dodir /var/log/dspam | ||
fowners dspam:dspam /var/log/dspam | ||
fperms 0750 /var/log/dspam | ||
|
||
# Install dspamc setgid | ||
fowners root:dspam /usr/bin/dspamc | ||
fperms g+s /usr/bin/dspamc | ||
} | ||
|
||
pkg_preinst() { | ||
# dspam-3.10.0: config dir change, should be removed at some later point | ||
if [ -d "${ROOT}/etc/mail/dspam" ]; then | ||
ewarn "The configuration directory of DSPAM has been relocated from /etc/mail/dspam to ${DSPAM_CONF}." | ||
if [ -h "${ROOT}${DSPAM_CONF}" ]; then | ||
# symlink, this is the setup in older ebuilds | ||
ewarn "Moving contents of /etc/mail/dspam to ${DSPAM_CONF} ..." | ||
rm "${ROOT}${DSPAM_CONF}" && mv "${ROOT}/etc/mail/dspam" "${DSPAM_CONF}" | ||
eend $? | ||
|
||
elif [ -d "${ROOT}${DSPAM_CONF}" ]; then | ||
# directory and no symlink, do it manually since we cannot decide. | ||
ewarn "You have both /etc/mail/dspam and ${DSPAM_CONF} directories, please delete the former." | ||
|
||
else | ||
# nothing interesting in /etc/dspam | ||
ewarn "Moving contents of /etc/mail/dspam to ${DSPAM_CONF} ..." | ||
mv "${ROOT}/etc/mail/dspam" "${DSPAM_CONF}" | ||
eend $? | ||
fi | ||
fi | ||
} |
13 changes: 13 additions & 0 deletions
13
mail-filter/dspam/files/dspam-3.10.2-mysql8-my_bool-typedef.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
--- a/src/mysql_drv.c 2020-07-07 10:40:33.871152228 -0400 | ||
+++ b/src/mysql_drv.c 2020-07-07 10:43:16.187818893 -0400 | ||
@@ -35,6 +35,10 @@ | ||
#include <fcntl.h> | ||
#include <signal.h> | ||
#include <mysql.h> | ||
+#if defined(LIBMYSQL_VERSION_ID) && (LIBMYSQL_VERSION_ID >= 80000) | ||
+ typedef bool my_bool; | ||
+#endif | ||
+ | ||
#include <limits.h> | ||
|
||
/* Work around broken limits.h on debian etch (and possibly others?) */ |