diff options
author | Alin Năstac <mrness@gentoo.org> | 2007-04-17 08:11:22 +0000 |
---|---|---|
committer | Alin Năstac <mrness@gentoo.org> | 2007-04-17 08:11:22 +0000 |
commit | 6bb55c4a0231be4d411060b280e0e9c9a7f0eab4 (patch) | |
tree | 476ee040e81e52bb5a31dddb1ca54d1f09bacffd /mail-filter/dspam | |
parent | Removed dodoc MAINTAINERS. (diff) | |
download | gentoo-2-6bb55c4a0231be4d411060b280e0e9c9a7f0eab4.tar.gz gentoo-2-6bb55c4a0231be4d411060b280e0e9c9a7f0eab4.tar.bz2 gentoo-2-6bb55c4a0231be4d411060b280e0e9c9a7f0eab4.zip |
Version bump, thanks to steveb <steeeeeveee at gmx dot net> and Natanael Copa <natanael dot copa at gmail dot com> (#172929).
(Portage version: 2.1.2.3)
Diffstat (limited to 'mail-filter/dspam')
-rw-r--r-- | mail-filter/dspam/ChangeLog | 9 | ||||
-rw-r--r-- | mail-filter/dspam/dspam-3.8.0.ebuild | 450 | ||||
-rw-r--r-- | mail-filter/dspam/files/digest-dspam-3.8.0 | 9 | ||||
-rw-r--r-- | mail-filter/dspam/files/dspam-3.8.0.cron | 321 |
4 files changed, 788 insertions, 1 deletions
diff --git a/mail-filter/dspam/ChangeLog b/mail-filter/dspam/ChangeLog index 4910416307a3..fabd35f8e4bc 100644 --- a/mail-filter/dspam/ChangeLog +++ b/mail-filter/dspam/ChangeLog @@ -1,6 +1,13 @@ # ChangeLog for mail-filter/dspam # Copyright 1999-2007 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/mail-filter/dspam/ChangeLog,v 1.86 2007/04/03 18:08:30 gustavoz Exp $ +# $Header: /var/cvsroot/gentoo-x86/mail-filter/dspam/ChangeLog,v 1.87 2007/04/17 08:11:22 mrness Exp $ + +*dspam-3.8.0 (17 Apr 2007) + + 17 Apr 2007; Alin Năstac <mrness@gentoo.org> +files/dspam-3.8.0.cron, + +dspam-3.8.0.ebuild: + Version bump, thanks to steveb <steeeeeveee at gmx dot net> and Natanael + Copa <natanael dot copa at gmail dot com> ( #172929). 03 Apr 2007; Gustavo Zacarias <gustavoz@gentoo.org> dspam-3.6.8-r3.ebuild: Stable on sparc wrt #172756 diff --git a/mail-filter/dspam/dspam-3.8.0.ebuild b/mail-filter/dspam/dspam-3.8.0.ebuild new file mode 100644 index 000000000000..d9792763c11d --- /dev/null +++ b/mail-filter/dspam/dspam-3.8.0.ebuild @@ -0,0 +1,450 @@ +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/mail-filter/dspam/dspam-3.8.0.ebuild,v 1.1 2007/04/17 08:11:22 mrness Exp $ + +WANT_AUTOCONF="latest" +WANT_AUTOMAKE="latest" + +inherit eutils autotools flag-o-matic + +DESCRIPTION="A statistical-algorithmic hybrid anti-spam filter" +HOMEPAGE="http://dspam.nuclearelephant.com/" +SRC_URI="http://dspam.nuclearelephant.com/sources/${P}.tar.gz + mirror://gentoo/${P}-patches-20070416.tar.gz + http://dspam.nuclearelephant.com/sources/extras/dspam_sa_trainer.tar.gz" + +LICENSE="GPL-2" +SLOT="0" +IUSE="clamav daemon debug large-domain ldap logrotate mysql postgres \ + sqlite sqlite3 virtual-users user-homedirs" + +DEPEND="clamav? ( >=app-antivirus/clamav-0.90.2 ) + ldap? ( >=net-nds/openldap-2.2 ) + mysql? ( virtual/mysql ) + postgres? ( >=dev-db/postgresql-7.4.3 ) + sqlite? ( <dev-db/sqlite-3 ) + sqlite3? ( =dev-db/sqlite-3* )" + +RDEPEND="${DEPEND} + sys-process/cronbase + virtual/logger + logrotate? ( app-admin/logrotate )" + +KEYWORDS="~alpha ~amd64 ~ppc ~sparc ~x86" + +# some FHS-like structure +HOMEDIR="/var/spool/dspam" +CONFDIR="/etc/mail/dspam" +LOGDIR="/var/log/dspam" +DSPAMPERMS=2511 + +create_dspam_usergroup() { + local egid euid + #Need a UID and GID >= 1000, for being able to use suexec in apache + for euid in $(seq 1000 5000 ) ; do + [[ -z $(egetent passwd ${euid}) ]] && break + done + for egid in $(seq 1000 5000 ) ; do + [[ -z $(egetent group ${egid}) ]] && break + done + + enewgroup dspam ${egid} + enewuser dspam ${euid} -1 ${HOMEDIR} dspam,mail +} + +pkg_setup() { + if use virtual-users && use user-homedirs ; then + eerror "If the users are virtual, then they probably should not have home directories." + die "Incompatible USE flag selection" + fi + + create_dspam_usergroup +} + +src_unpack() { + unpack ${A} + cd "${S}" + + EPATCH_SUFFIX="patch" + epatch "${WORKDIR}"/patches + + # Fix Lazy bindings + append-flags $(bindnow-flags) + + AT_M4DIR="${S}/m4" + eautoreconf +} + +src_compile() { + local myconf="--enable-long-usernames --enable-syslog" + + use large-domain && myconf="${myconf} --enable-large-scale" || \ + myconf="${myconf} --enable-domain-scale" + + use user-homedirs && myconf="${myconf} --enable-homedir" + + use debug && myconf="${myconf} --enable-debug --enable-bnr-debug" + + if use virtual-users ; then + if use mysql || use postgres ; then + myconf="${myconf} --enable-virtual-users" + fi + fi + + if use mysql || use postgres ; then + myconf="${myconf} --enable-preferences-extension" + fi + + local STORAGE + # select storage driver + if use sqlite ; then + if [ "$STORAGE" ] ; then STORAGE="${STORAGE}," ; fi + STORAGE="${STORAGE}sqlite_drv" + fi + if use sqlite3 ; then + if [ "$STORAGE" ] ; then STORAGE="${STORAGE}," ; fi + STORAGE="${STORAGE}sqlite3_drv" + fi + if use mysql; then + if [ "$STORAGE" ] ; then STORAGE="${STORAGE}," ; fi + STORAGE="${STORAGE}mysql_drv" + myconf="${myconf} --with-mysql-includes=/usr/include/mysql" + myconf="${myconf} --with-mysql-libraries=/usr/lib/mysql" + fi + if use postgres ; then + if [ "$STORAGE" ] ; then STORAGE="${STORAGE}," ; fi + STORAGE="${STORAGE}pgsql_drv" + myconf="${myconf} --with-pgsql-includes=/usr/include/postgresql" + myconf="${myconf} --with-pgsql-libraries=/usr/lib/postgresql" + fi + if [[ -z "${STORAGE}" ]]; then + STORAGE="${STORAGE}hash_drv" + fi + + econf ${myconf} --with-storage-driver=${STORAGE} \ + --with-dspam-home=${HOMEDIR} \ + --sysconfdir=${CONFDIR} \ + $(use_enable daemon) \ + $(use_enable ldap) \ + $(use_enable clamav) \ + --with-dspam-group=dspam \ + --with-dspam-home-group=dspam \ + --with-dspam-mode=${DSPAMPERMS} \ + --with-logdir=${LOGDIR} || die "econf failed" + emake || die "emake failed" +} + +src_install () { + diropts -m0770 -o dspam -g dspam + dodir ${CONFDIR} + insinto ${CONFDIR} + insopts -m640 -o dspam -g dspam + doins src/dspam.conf + + dosym /etc/mail/dspam /etc/dspam + + # make install + make DESTDIR="${D}" install || die "make install failed" + + dodir /usr/lib/dspam + if [[ "${D}"/usr/lib/*drv* != *"*" ]]; then + mv "${D}"/usr/lib/*drv* "${D}"/usr/lib/dspam/ + fi + + diropts -m0755 -o dspam -g dspam + keepdir /var/run/dspam + + # create logdir + if use debug ; then + diropts -m0770 -o dspam -g dspam + keepdir ${LOGDIR} + fi + + #clean options + diropts -m0755 + insopts -m0644 + + if use daemon; then + # We use sockets for the daemon instead of tcp port 24 + sed -e 's:^#*\(ServerDomainSocketPath[\t ]\{1,\}\).*:\1\"/var/run/dspam/dspam.sock\":gI' \ + -e 's:^#*\(ServerPID[\t ]\{1,\}\).*:\1/var/run/dspam/dspam.pid:gI' \ + -e 's:^#*\(ClientHost[\t ]\{1,\}\)/.*:\1\"/var/run/dspam/dspam.sock\":gI' \ + -i "${D}/${CONFDIR}/dspam.conf" + + newinitd "${FILESDIR}/dspam.rc" dspam + + fowners root:dspam /usr/bin/dspamc + fperms u=rx,g=xs,o=x /usr/bin/dspamc + fi + + # generate random password + local PASSWORD="${RANDOM}${RANDOM}${RANDOM}${RANDOM}" + + # database related configuration and scripts + if use sqlite; then + insinto ${CONFDIR} + newins src/tools.sqlite_drv/purge-2.sql sqlite_purge.sql + fi + if use sqlite3; then + insinto ${CONFDIR} + newins src/tools.sqlite_drv/purge-3.sql sqlite3_purge.sql + fi + if use mysql; then + DSPAM_DB_DATA[0]="/var/run/mysqld/mysqld.sock" + DSPAM_DB_DATA[1]="" + DSPAM_DB_DATA[2]="dspam" + DSPAM_DB_DATA[3]="${PASSWORD}" + DSPAM_DB_DATA[4]="dspam" + DSPAM_DB_DATA[5]="true" + + # Modify configuration and create mysql.data file + sed -e "s:^#*\(MySQLServer[\t ]\{1,\}\).*:\1${DSPAM_DB_DATA[0]}:gI" \ + -e "s:^#*\(MySQLPort[\t ]\{1,\}\).*:\1${DSPAM_DB_DATA[1]}:gI" \ + -e "s:^#*\(MySQLUser[\t ]\{1,\}\).*:\1${DSPAM_DB_DATA[2]}:gI" \ + -e "s:^#*\(MySQLPass[\t ]\{1,\}\).*:\1${DSPAM_DB_DATA[3]}:gI" \ + -e "s:^#*\(MySQLDb[\t ]\{1,\}\).*:\1${DSPAM_DB_DATA[4]}:gI" \ + -e "s:^#*\(MySQLCompress[\t ]\{1,\}\).*:\1${DSPAM_DB_DATA[5]}:gI" \ + -i "${D}"/${CONFDIR}/dspam.conf + for DB_DATA_INDEX in $(seq 0 $((${#DSPAM_DB_DATA[@]} - 1))); do + echo "${DSPAM_DB_DATA[$DB_DATA_INDEX]}" >> "${D}"/${CONFDIR}/mysql.data + done + + insinto ${CONFDIR} + newins src/tools.mysql_drv/mysql_objects-space.sql mysql_objects-space.sql + newins src/tools.mysql_drv/mysql_objects-speed.sql mysql_objects-speed.sql + newins src/tools.mysql_drv/mysql_objects-4.1.sql mysql_objects-4.1.sql + if use virtual-users ; then + newins src/tools.mysql_drv/virtual_users.sql mysql_virtual_users.sql + newins src/tools.mysql_drv/virtual_user_aliases.sql mysql_virtual_user_aliases.sql + fi + newins src/tools.mysql_drv/purge.sql mysql_purge.sql + newins src/tools.mysql_drv/purge-4.1.sql mysql_purge-4.1.sql + + fperms 640 ${CONFDIR}/mysql.data + fowners root:dspam ${CONFDIR}/mysql.data + fi + if use postgres ; then + DSPAM_DB_DATA[0]="127.0.0.1" + DSPAM_DB_DATA[1]="5432" + DSPAM_DB_DATA[2]="dspam" + DSPAM_DB_DATA[3]="${PASSWORD}" + DSPAM_DB_DATA[4]="dspam" + + # Modify configuration and create pgsql.data file + sed -e "s:^#*\(PgSQLServer[\t ]\{1,\}\).*:\1${DSPAM_DB_DATA[0]}:gI" \ + -e "s:^#*\(PgSQLPort[\t ]\{1,\}\).*:\1${DSPAM_DB_DATA[1]}:gI" \ + -e "s:^#*\(PgSQLUser[\t ]\{1,\}\).*:\1${DSPAM_DB_DATA[2]}:gI" \ + -e "s:^#*\(PgSQLPass[\t ]\{1,\}\).*:\1${DSPAM_DB_DATA[3]}:gI" \ + -e "s:^#*\(PgSQLDb[\t ]\{1,\}\).*:\1${DSPAM_DB_DATA[4]}:gI" \ + -e "s:^#*\(PgSQLConnectionCache[\t ]*.\):\1:gI" \ + -i "${D}"/${CONFDIR}/dspam.conf + for DB_DATA_INDEX in $(seq 0 $((${#DSPAM_DB_DATA[@]} - 1))); do + echo "${DSPAM_DB_DATA[$DB_DATA_INDEX]}" >> "${D}"/${CONFDIR}/pgsql.data + done + + insinto ${CONFDIR} + newins src/tools.pgsql_drv/pgsql_objects.sql pgsql_objects.sql + if use virtual-users ; then + newins src/tools.pgsql_drv/virtual_users.sql pgsql_virtual_users.sql + fi + newins src/tools.pgsql_drv/purge.sql pgsql_purge.sql + + fperms 640 ${CONFDIR}/pgsql.data + fowners root:dspam ${CONFDIR}/pgsql.data + fi + + sed -e "s:^\(Purge.*\):###\1:g" \ + -e "s:^#\(Purge.*\):\1:g" \ + -e "s:^###\(Purge.*\):#\1:g" \ + -i "${D}"/${CONFDIR}/dspam.conf + + # installs the notification messages + # -> The documentation is wrong! The files need to be in ./txt + echo "Scanned and tagged as SPAM with DSPAM ${PV} by Your ISP.com">"${T}"/msgtag.spam + echo "Scanned and tagged as non-SPAM with DSPAM ${PV} by Your ISP.com">"${T}"/msgtag.nonspam + insinto ${CONFDIR}/txt + doins "${S}"/txt/*.txt + doins "${T}"/msgtag.* + + # Create the opt-in / opt-out directories + diropts -m0770 -o dspam -g dspam + dodir ${HOMEDIR} + keepdir ${HOMEDIR}/opt-in + keepdir ${HOMEDIR}/opt-out + diropts -m0755 + + # logrotation scripts + if use logrotate && use debug ; then + insinto /etc/logrotate.d + newins "${FILESDIR}/logrotate.dspam" dspam + fi + + # dspam cron job + exeinto /etc/cron.daily + newexe "${FILESDIR}/${P}.cron" dspam.cron + + # documentation + dodoc CHANGELOG README* RELEASE.NOTES UPGRADING + docinto doc + dodoc doc/*.txt + docinto gentoo + dodoc "${FILESDIR}"/README.{postfix,qmail} + docinto sa_train + dodoc "${WORKDIR}"/dspam_sa_trainer/* + doman man/dspam* +} + +pkg_preinst() { + # Preserve *.data files + local installed_datafiles="${ROOT}"/${CONFDIR}/*.data + if [[ "${installed_datafiles}" != *"*.data" ]]; then + cp "${ROOT}"/${CONFDIR}/*.data "${D}"/${CONFDIR} + fi +} + +pkg_postinst() { + # need enewgroup/enewuser in this function for binary install. + create_dspam_usergroup + + if use mysql || use postgres; then + elog + elog "To setup DSPAM to run out-of-the-box on your system with a MySQL" + elog "or PostgreSQL database, run:" + elog "emerge --config =${PF}" + fi + + if use postgres && has_version ">dev-db/postgresql-8.0"; then + elog + elog "Before executing the configuration command mentioned above you have" + elog "to execute the following command:" + elog "createlang plpgsql -U postgres dspam" + fi + + if use daemon; then + elog + elog "If you want to run DSPAM in the new daemon mode remember" + elog "to make the DSPAM daemon start during boot:" + elog " rc-update add dspam default" + fi + if use daemon ; then + elog + elog "To use the DSPAM daemon mode, the used storage driver must be thread-safe." + fi + + elog + elog "Edit /etc/mail/dspam.conf with your delivery agent" + elog "See http://dspamwiki.expass.de/Installation for more info" + elog +} + +pkg_config () { + local AVAIL_BACKENDS=() + use mysql && AVAIL_BACKENDS=( ${AVAIL_BACKENDS[*]} mysql ) + use postgres && AVAIL_BACKENDS=( ${AVAIL_BACKENDS[*]} postgres ) + use sqlite && AVAIL_BACKENDS=( ${AVAIL_BACKENDS[*]} sqlite ) + use sqlite3 && AVAIL_BACKENDS=( ${AVAIL_BACKENDS[*]} sqlite3 ) + local USE_BACKEND + read -p "Which backend do you want to configure? (available backends are ${AVAIL_BACKENDS[*]}) " USE_BACKEND + if [[ " ${AVAIL_BACKENDS[*]} " != *" ${USE_BACKEND} "* ]] + then + eerror "The '${USE_BACKEND}' backend is not available." + return 1 + fi + + case "${USE_BACKEND}" in + + sqlite | sqlite3) + einfo "sqlite_drv will automatically create the necessary database" + ;; + + mysql) + DSPAM_DB_DATA=( $(sed "s:^[\t ]*$:###:gI" "${ROOT}${CONFDIR}/mysql.data") ) + for DB_DATA_INDEX in $(seq 0 $((${#DSPAM_DB_DATA[@]} - 1))); do + [[ "${DSPAM_DB_DATA[$DB_DATA_INDEX]}" = "###" ]] && DSPAM_DB_DATA[$DB_DATA_INDEX]="" + done + DSPAM_MySQL_USER="${DSPAM_DB_DATA[2]}" + DSPAM_MySQL_PWD="${DSPAM_DB_DATA[3]}" + DSPAM_MySQL_DB="${DSPAM_DB_DATA[4]}" + + local MYSQL_ROOT_USER="" + echo -n "Please enter your administrative MySQL account (default root): " + read MYSQL_ROOT_USER + if [[ -z "${MYSQL_ROOT_USER}" ]]; then + MYSQL_ROOT_USER="root" + fi + ewarn "When prompted for a password, please enter your MySQL ${MYSQL_ROOT_USER} password" + ewarn + + einfo "Creating DSPAM MySQL database \"${DSPAM_MySQL_DB}\"" + /usr/bin/mysqladmin -u ${MYSQL_ROOT_USER} -p create ${DSPAM_MySQL_DB} + + + if has_version ">=virtual/mysql-4.1"; then + /usr/bin/mysql -u ${MYSQL_ROOT_USER} -p ${DSPAM_MySQL_DB} < ${CONFDIR}/mysql_objects-4.1.sql + else + einfo "Creating DSPAM MySQL tables for data objects" + einfo " Please select what kind of object database you like to use." + einfo " [1] Space optimized database" + einfo " [2] Speed optimized database" + einfo + while true + do + read -n 1 -s -p " Press 1 or 2 on the keyboard to select database" DSPAM_MySQL_DB_Type + [[ "${DSPAM_MySQL_DB_Type}" == "1" || "${DSPAM_MySQL_DB_Type}" == "2" ]] && echo && break + done + + if [[ "${DSPAM_MySQL_DB_Type}" == "1" ]]; then + /usr/bin/mysql -u ${MYSQL_ROOT_USER} -p ${DSPAM_MySQL_DB} < ${CONFDIR}/mysql_objects-space.sql + else + /usr/bin/mysql -u ${MYSQL_ROOT_USER} -p ${DSPAM_MySQL_DB} < ${CONFDIR}/mysql_objects-speed.sql + fi + fi + + if use virtual-users ; then + einfo "Creating DSPAM MySQL database for virtual-users users" + einfo " Please select what kind of virtual_uids table you like to use." + einfo " [1] Virtual users added automatically (use this if this server is the primary MX)" + einfo " [2] Virtual users added manually (use it if this server is a secondary MX)" + einfo + while true; do + read -n 1 -s -p " Press 1 or 2 on the keyboard to select table type" DSPAM_MySQL_DB_Type + [[ "${DSPAM_MySQL_DB_Type}" == "1" || "${DSPAM_MySQL_DB_Type}" == "2" ]] && echo && break + done + + if [[ "${DSPAM_MySQL_DB_Type}" == "1" ]]; then + /usr/bin/mysql -u ${MYSQL_ROOT_USER} -p ${DSPAM_MySQL_DB} < ${CONFDIR}/mysql_virtual_users.sql + else + /usr/bin/mysql -u ${MYSQL_ROOT_USER} -p ${DSPAM_MySQL_DB} < ${CONFDIR}/mysql_virtual_user_aliases.sql + fi + fi + + einfo "Creating DSPAM MySQL user \"${DSPAM_MySQL_USER}\"" + /usr/bin/mysql -u ${MYSQL_ROOT_USER} -p -e "GRANT SELECT,INSERT,UPDATE,DELETE ON ${DSPAM_MySQL_DB}.* TO ${DSPAM_MySQL_USER}@localhost IDENTIFIED BY '${DSPAM_MySQL_PWD}';FLUSH PRIVILEGES;" -D mysql + ;; + + postgres) + DSPAM_DB_DATA=( $(sed "s:^[\t ]*$:###:gI" "${ROOT}${CONFDIR}/pgsql.data") ) + for DB_DATA_INDEX in $(seq 0 $((${#DSPAM_DB_DATA[@]} - 1))); do + [[ "${DSPAM_DB_DATA[$DB_DATA_INDEX]}" = "###" ]] && DSPAM_DB_DATA[$DB_DATA_INDEX]="" + done + DSPAM_PgSQL_USER="${DSPAM_DB_DATA[2]}" + DSPAM_PgSQL_PWD="${DSPAM_DB_DATA[3]}" + DSPAM_PgSQL_DB="${DSPAM_DB_DATA[4]}" + + ewarn "When prompted for a password, please enter your PgSQL postgres password" + ewarn + + einfo "Creating DSPAM PostgreSQL database \"${DSPAM_PgSQL_DB}\" and user \"${DSPAM_PgSQL_USER}\"" + /usr/bin/psql -h localhost -d template1 -U postgres -c "CREATE USER ${DSPAM_PgSQL_USER} WITH PASSWORD '${DSPAM_PgSQL_PWD}' NOCREATEDB NOCREATEUSER; CREATE DATABASE ${DSPAM_PgSQL_DB}; GRANT ALL PRIVILEGES ON DATABASE ${DSPAM_PgSQL_DB} TO ${DSPAM_PgSQL_USER}; GRANT ALL PRIVILEGES ON SCHEMA public TO ${DSPAM_PgSQL_USER}; UPDATE pg_database SET datdba=(SELECT usesysid FROM pg_shadow WHERE usename='${DSPAM_PgSQL_USER}') WHERE datname='${DSPAM_PgSQL_DB}';" + + einfo "Creating DSPAM PostgreSQL tables" + PGUSER=${DSPAM_PgSQL_USER} PGPASSWORD=${DSPAM_PgSQL_PWD} /usr/bin/psql -d ${DSPAM_PgSQL_DB} -U ${DSPAM_PgSQL_USER} -f ${CONFDIR}/pgsql_objects.sql 1>/dev/null 2>&1 + + if use virtual-users ; then + einfo "Creating DSPAM PostgreSQL database for virtual-users users" + PGUSER=${DSPAM_PgSQL_USER} PGPASSWORD=${DSPAM_PgSQL_PWD} /usr/bin/psql -d ${DSPAM_PgSQL_DB} -U ${DSPAM_PgSQL_USER} -f ${CONFDIR}/pgsql_virtual_users.sql 1>/dev/null 2>&1 + fi + ;; + + esac +} diff --git a/mail-filter/dspam/files/digest-dspam-3.8.0 b/mail-filter/dspam/files/digest-dspam-3.8.0 new file mode 100644 index 000000000000..463a04ecb8db --- /dev/null +++ b/mail-filter/dspam/files/digest-dspam-3.8.0 @@ -0,0 +1,9 @@ +MD5 11861e3b89a6e2554c65ab185260dc3e dspam-3.8.0-patches-20070416.tar.gz 7062 +RMD160 05d6d294edab5f4ca058aa9daf5c3d9c69ddd91c dspam-3.8.0-patches-20070416.tar.gz 7062 +SHA256 9cc2d1cf1482ceff124a9017910bb6c3a7ed0be828e2d3c6c83b08e6b871a649 dspam-3.8.0-patches-20070416.tar.gz 7062 +MD5 056b8c8b3ad9415a52c01b22ff1e64cf dspam-3.8.0.tar.gz 726160 +RMD160 e7831e2415e30e819dd9cbc0ba3f269e113e2fb9 dspam-3.8.0.tar.gz 726160 +SHA256 84a227934a7aee73516bdb82c33ee7b359e955c8cd95a1544a9a13069f79bfc7 dspam-3.8.0.tar.gz 726160 +MD5 8ffe9d41e6104a4c6d19067528193145 dspam_sa_trainer.tar.gz 1230 +RMD160 c3d0fca7169d23ecf9d44c850ee255b42d97d818 dspam_sa_trainer.tar.gz 1230 +SHA256 8fb6b1ebe592acf00a028737ef8e174544af166768b987d29048b2319bc5a215 dspam_sa_trainer.tar.gz 1230 diff --git a/mail-filter/dspam/files/dspam-3.8.0.cron b/mail-filter/dspam/files/dspam-3.8.0.cron new file mode 100644 index 000000000000..cd305a622055 --- /dev/null +++ b/mail-filter/dspam/files/dspam-3.8.0.cron @@ -0,0 +1,321 @@ +#!/bin/sh +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# +# Remove old signatures and unimportant tokens from the DSPAM database. +# Purge old log entries in user logs. +# + +# +# Parameters +# +LOGROTATE_AGE=30 # Delete log entries older than $LOGROTATE_AGE days + +# +# Function to run dspam_clean +# +run_dspam_clean() { + if [ ! -f "/usr/bin/dspam_clean" ] + then + echo "/usr/bin/dspam_clean not found!" + return 1 + else + /usr/bin/dspam_clean -s -p -u >/dev/null 2>&1 + return 0 + fi +} + + +# +# Function to check if we have all needed tools +# +check_for_tools() { + local myrc=0 + for foo in awk cut sed getent + do + if ! which ${foo} >/dev/null 2>&1 + then + echo "Command ${foo} not found!" + myrc=1 + fi + done + return ${myrc} +} + + +# +# Acquire lock file and start processing +# +DSPAM_CRON_LOCKFILE="/var/run/$(basename $0 .sh).pid" +if ( set -o noclobber; echo "$$" > "${DSPAM_CRON_LOCKFILE}") 2> /dev/null; then + + trap 'rm -f "${DSPAM_CRON_LOCKFILE}"; exit $?' INT TERM EXIT + + # + # Check for needed tools + # + if ! check_for_tools + then + # We have not all needed tools installed. Run just the dspam_clean part. + run_dspam_clean + exit $? + fi + + + # + # Try to get DSPAM config directory + # + DSPAM_CONFIGDIR=$(getent passwd dspam | awk -F : '{print $6}') + if [ ! -f "${DSPAM_CONFIGDIR}/dspam.conf" ] + then + # Something is wrong in passwd! Check if /etc/mail/dspam exists instead. + if [ -f /etc/mail/dspam/dspam.conf ] + then + DSPAM_CONFIGDIR="/etc/mail/dspam" + fi + fi + if [ ! -d "${DSPAM_CONFIGDIR}" ] + then + echo "Configuration directory not found!" + exit 2 + fi + + # + # Try to get DSPAM data home directory + # + DSPAM_HOMEDIR=$(awk '$1 ~ /^[[:space:]]*Home[[:space:]]/ {print $2}' "${DSPAM_CONFIGDIR}/dspam.conf") + if [ ! -d "${DSPAM_HOMEDIR}" ] + then + # Something is wrong in dspam.conf! Check if /var/spool/dspam exists instead. + if [ -d /var/spool/dspam ] + then + DSPAM_HOMEDIR="/var/spool/dspam" + fi + fi + if [ ! -d "${DSPAM_HOMEDIR}" ] + then + echo "Home directory not found! Please fix your dspam.conf." + exit 2 + fi + + + # + # User log purging + # + if [ -d "${DSPAM_CONFIGDIR}/data" ] + then + dspam_logrotate -a ${LOGROTATE_AGE} -d "${DSPAM_CONFIGDIR}/data" >/dev/null # 2>&1 + fi + + + # + # MySQL + # + if [ -f "${DSPAM_CONFIGDIR}/mysql.data" ] + then + if [ ! -f "/usr/bin/mysql_config" ] + then + echo "Can not run MySQL purge script:" + echo " /usr/bin/mysql_config does not exist" + run_dspam_clean + exit 1 + fi + DSPAM_MySQL_PURGE_SQL= + DSPAM_MySQL_VER=$(/usr/bin/mysql_config --version | sed "s:[^0-9.]*::g") + DSPAM_MySQL_MAJOR=$(echo "${DSPAM_MySQL_VER}" | cut -d. -f1) + DSPAM_MySQL_MINOR=$(echo "${DSPAM_MySQL_VER}" | cut -d. -f2) + DSPAM_MySQL_MICRO=$(echo "${DSPAM_MySQL_VER}" | cut -d. -f3) + DSPAM_MySQL_INT=$(($DSPAM_MySQL_MAJOR * 65536 + $DSPAM_MySQL_MINOR * 256 + $DSPAM_MySQL_MICRO)) + + # For MySQL >= 4.1 use the new purge script + if [ "${DSPAM_MySQL_INT}" -ge "262400" ] + then + if [ -f "${DSPAM_CONFIGDIR}/config/mysql_purge-4.1-optimized.sql" -o -f "${DSPAM_CONFIGDIR}/mysql_purge-4.1-optimized.sql" ] + then + # See: http://securitydot.net/txt/id/32/type/articles/ + [ -f "${DSPAM_CONFIGDIR}/config/mysql_purge-4.1-optimized.sql" ] && DSPAM_MySQL_PURGE_SQL="${DSPAM_CONFIGDIR}/config/mysql_purge-4.1-optimized.sql" + [ -f "${DSPAM_CONFIGDIR}/mysql_purge-4.1-optimized.sql" ] && DSPAM_MySQL_PURGE_SQL="${DSPAM_CONFIGDIR}/mysql_purge-4.1-optimized.sql" + else + [ -f "${DSPAM_CONFIGDIR}/config/mysql_purge-4.1.sql" ] && DSPAM_MySQL_PURGE_SQL="${DSPAM_CONFIGDIR}/config/mysql_purge-4.1.sql" + [ -f "${DSPAM_CONFIGDIR}/mysql_purge-4.1.sql" ] && DSPAM_MySQL_PURGE_SQL="${DSPAM_CONFIGDIR}/mysql_purge-4.1.sql" + fi + else + [ -f "${DSPAM_CONFIGDIR}/config/mysql_purge.sql" ] && DSPAM_MySQL_PURGE_SQL="${DSPAM_CONFIGDIR}/config/mysql_purge.sql" + [ -f "${DSPAM_CONFIGDIR}/mysql_purge.sql" ] && DSPAM_MySQL_PURGE_SQL="${DSPAM_CONFIGDIR}/mysql_purge.sql" + fi + + if [ -z "${DSPAM_MySQL_PURGE_SQL}" ] + then + echo "Can not run MySQL purge script:" + echo " No mysql_purge SQL script found" + run_dspam_clean + exit 1 + fi + + if [ ! -f "/usr/bin/mysql" ] + then + echo "Can not run MySQL purge script:" + echo " /usr/bin/mysql does not exist" + run_dspam_clean + exit 1 + fi + + # Get DSPAM MySQL username and password + DSPAM_MySQL_HOST=$(sed "1q;d" "${DSPAM_CONFIGDIR}/mysql.data") + DSPAM_MySQL_PORT=$(sed "2q;d" "${DSPAM_CONFIGDIR}/mysql.data") + DSPAM_MySQL_USER=$(sed "3q;d" "${DSPAM_CONFIGDIR}/mysql.data") + DSPAM_MySQL_PWD=$(sed "4q;d" "${DSPAM_CONFIGDIR}/mysql.data") + DSPAM_MySQL_DB=$(sed "5q;d" "${DSPAM_CONFIGDIR}/mysql.data") + + # Check if MySQL is remote or using a socket + if [ -S "${DSPAM_MySQL_HOST}" ] + then + DSPAM_MySQL_HOSTCMD="--socket" + else + DSPAM_MySQL_HOSTCMD="--host" + fi + + # Run the MySQL purge script + /usr/bin/mysql --silent --user="${DSPAM_MySQL_USER}" --password="${DSPAM_MySQL_PWD}" ${DSPAM_MySQL_HOSTCMD}="${DSPAM_MySQL_HOST}" ${DSPAM_MySQL_DB} < ${DSPAM_MySQL_PURGE_SQL} + + # Run the dspam_clean command + run_dspam_clean + + # Optimize the MySQL tables for DSPAM + for foo in $(/usr/bin/mysql --user="${DSPAM_MySQL_USER}" --password="${DSPAM_MySQL_PWD}" ${DSPAM_MySQL_HOSTCMD}="${DSPAM_MySQL_HOST}" --silent --skip-column-names --batch ${DSPAM_MySQL_DB} -e 'SHOW TABLES;' 2>&1) + do + /usr/bin/mysql --user="${DSPAM_MySQL_USER}" --password="${DSPAM_MySQL_PWD}" ${DSPAM_MySQL_HOSTCMD}="${DSPAM_MySQL_HOST}" ${DSPAM_MySQL_DB} -e "OPTIMIZE TABLE ${foo};" 1>/dev/null 2>&1 + done + exit 0 + + + # + # PostgreSQL + # + elif [ -f "${DSPAM_CONFIGDIR}/pgsql.data" ] + then + DSPAM_PgSQL_PURGE_SQL="" + [ -f "${DSPAM_CONFIGDIR}/config/pgsql_purge.sql" ] && DSPAM_PgSQL_PURGE_SQL="${DSPAM_CONFIGDIR}/config/pgsql_purge.sql" + [ -f "${DSPAM_CONFIGDIR}/pgsql_purge.sql" ] && DSPAM_PgSQL_PURGE_SQL="${DSPAM_CONFIGDIR}/pgsql_purge.sql" + + if [ -z "${DSPAM_PgSQL_PURGE_SQL}" ] + then + echo "Can not run PostgreSQL purge script:" + echo " No pgsql_purge SQL script found" + run_dspam_clean + exit 1 + fi + + if [ ! -f "/usr/bin/psql" ] + then + echo "Can not run PostgreSQL purge script:" + echo " /usr/bin/psql does not exist" + run_dspam_clean + exit 1 + fi + + # Get DSPAM PostgreSQL username and password + DSPAM_PgSQL_HOST=$(sed "1q;d" "${DSPAM_CONFIGDIR}/pgsql.data") + DSPAM_PgSQL_PORT=$(sed "2q;d" "${DSPAM_CONFIGDIR}/pgsql.data") + DSPAM_PgSQL_USER=$(sed "3q;d" "${DSPAM_CONFIGDIR}/pgsql.data") + DSPAM_PgSQL_PWD=$(sed "4q;d" "${DSPAM_CONFIGDIR}/pgsql.data") + DSPAM_PgSQL_DB=$(sed "5q;d" "${DSPAM_CONFIGDIR}/pgsql.data") + + # Run the PostgreSQL purge script + PGUSER="${DSPAM_PgSQL_USER}" PGPASSWORD="${DSPAM_PgSQL_PWD}" /usr/bin/psql -q -U "${DSPAM_PgSQL_USER}" -d "${DSPAM_PgSQL_DB}" -p "${DSPAM_PgSQL_PORT}" -h "${DSPAM_PgSQL_HOST}" -f "${DSPAM_PgSQL_PURGE_SQL}" + + # Run the dspam_clean command + run_dspam_clean + + exit 0 + + + # + # SQLite3 + # + elif ( grep -q "^[[:space:]]*StorageDriver[[:space:]]*.*libsqlite3_drv" "${DSPAM_CONFIGDIR}/dspam.conf" ) + then + DSPAM_SQLite3_PURGE_SQL="" + [ -f "${DSPAM_CONFIGDIR}/config/sqlite3_purge.sql" ] && DSPAM_SQLite3_PURGE_SQL="${DSPAM_CONFIGDIR}/config/sqlite3_purge.sql" + [ -f "${DSPAM_CONFIGDIR}/sqlite3_purge.sql" ] && DSPAM_SQLite3_PURGE_SQL="${DSPAM_CONFIGDIR}/sqlite3_purge.sql" + + if [ -z "${DSPAM_SQLite3_PURGE_SQL}" ] + then + echo "Can not run SQLite3 purge script:" + echo " No sqlite_purge SQL script found" + run_dspam_clean + exit 1 + fi + + if [ ! -f "/usr/bin/sqlite3" ] + then + echo "Can not run SQLite3 purge script:" + echo " /usr/bin/sqlite3 does not exist" + run_dspam_clean + exit 1 + fi + + # Run the SQLite3 purge script + find "${DSPAM_HOMEDIR}" -name "*.sdb" -exec /usr/bin/sqlite3 "{}" < "${DSPAM_SQLite3_PURGE_SQL}" \; 1>/dev/null 2>&1 + + # Run the dspam_clean command + run_dspam_clean + + # Optimize the SQLite tables for DSPAM + find "${DSPAM_HOMEDIR}" -name "*.sdb" -exec echo 'vacuum;' \| /usr/bin/sqlite3 "{}" \; + + exit 0 + + + # + # SQLite + # + elif ( grep -q "^[[:space:]]*StorageDriver[[:space:]]*.*libsqlite_drv" "${DSPAM_CONFIGDIR}/dspam.conf" ) + then + DSPAM_SQLite_PURGE_SQL="" + [ -f "${DSPAM_CONFIGDIR}/config/sqlite_purge.sql" ] && DSPAM_SQLite_PURGE_SQL="${DSPAM_CONFIGDIR}/config/sqlite_purge.sql" + [ -f "${DSPAM_CONFIGDIR}/sqlite_purge.sql" ] && DSPAM_SQLite_PURGE_SQL="${DSPAM_CONFIGDIR}/sqlite_purge.sql" + + if [ -z "${DSPAM_SQLite_PURGE_SQL}" ] + then + echo "Can not run SQLite purge script:" + echo " No sqlite_purge SQL script found" + run_dspam_clean + exit 1 + fi + + if [ ! -f "/usr/bin/sqlite" ] + then + echo "Can not run SQLite purge script:" + echo " /usr/bin/sqlite does not exist" + run_dspam_clean + exit 1 + fi + + # Run the SQLite purge script + find "${DSPAM_HOMEDIR}" -name "*.sdb" -exec /usr/bin/sqlite "{}" < "${DSPAM_SQLite_PURGE_SQL}" \; 1>/dev/null 2>&1 + + # Run the dspam_clean command + run_dspam_clean + + # Optimize the SQLite tables for DSPAM + find "${DSPAM_HOMEDIR}" -name "*.sdb" -exec echo 'vacuum;' \| /usr/bin/sqlite "{}" \; + + exit 0 + + + # + # Generic + # + else + run_dspam_clean + exit $? + fi + + + # + # Release lock + # + rm -f "${DSPAM_CRON_LOCKFILE}" + trap - INT TERM EXIT +fi |