diff options
author | Alin Năstac <mrness@gentoo.org> | 2007-09-30 11:30:48 +0000 |
---|---|---|
committer | Alin Năstac <mrness@gentoo.org> | 2007-09-30 11:30:48 +0000 |
commit | a09b6082a32f6c233ffbba5cd254ae45bd43cc16 (patch) | |
tree | c1de10ba542ab120b7a7f558f9e7869c9821599a /mail-filter/dspam | |
parent | Version bump. Refactored the ebuild. Install debugger with USE flag and (diff) | |
download | gentoo-2-a09b6082a32f6c233ffbba5cd254ae45bd43cc16.tar.gz gentoo-2-a09b6082a32f6c233ffbba5cd254ae45bd43cc16.tar.bz2 gentoo-2-a09b6082a32f6c233ffbba5cd254ae45bd43cc16.zip |
Major dspam.cron and pkg_config redesign (#193081). Drop sqlite-2 support. Install prefs.h needed by dovecot-dspam.
(Portage version: 2.1.3.9)
Diffstat (limited to 'mail-filter/dspam')
-rw-r--r-- | mail-filter/dspam/ChangeLog | 9 | ||||
-rw-r--r-- | mail-filter/dspam/dspam-3.8.0-r7.ebuild | 530 | ||||
-rw-r--r-- | mail-filter/dspam/files/digest-dspam-3.8.0-r7 | 9 | ||||
-rw-r--r-- | mail-filter/dspam/files/dspam.cron-r1 | 374 | ||||
-rw-r--r-- | mail-filter/dspam/files/pgsql_createdb.py | 115 | ||||
-rw-r--r-- | mail-filter/dspam/files/pgsql_purge.py | 41 |
6 files changed, 1077 insertions, 1 deletions
diff --git a/mail-filter/dspam/ChangeLog b/mail-filter/dspam/ChangeLog index 95b5c7810176..b7459dacea3d 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.96 2007/09/10 04:06:01 mrness Exp $ +# $Header: /var/cvsroot/gentoo-x86/mail-filter/dspam/ChangeLog,v 1.97 2007/09/30 11:30:47 mrness Exp $ + +*dspam-3.8.0-r7 (30 Sep 2007) + + 30 Sep 2007; Alin Năstac <mrness@gentoo.org> +files/dspam.cron-r1, + +files/pgsql_createdb.py, +files/pgsql_purge.py, +dspam-3.8.0-r7.ebuild: + Major dspam.cron and pkg_config redesign (#193081). Drop sqlite-2 support. + Install prefs.h needed by dovecot-dspam. *dspam-3.8.0-r6 (10 Sep 2007) diff --git a/mail-filter/dspam/dspam-3.8.0-r7.ebuild b/mail-filter/dspam/dspam-3.8.0-r7.ebuild new file mode 100644 index 000000000000..286256c9e545 --- /dev/null +++ b/mail-filter/dspam/dspam-3.8.0-r7.ebuild @@ -0,0 +1,530 @@ +# 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-r7.ebuild,v 1.1 2007/09/30 11:30:47 mrness Exp $ + +WANT_AUTOCONF="latest" +WANT_AUTOMAKE="latest" + +inherit eutils autotools flag-o-matic multilib + +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-20070930.tar.gz + http://dspam.nuclearelephant.com/sources/extras/dspam_sa_trainer.tar.gz" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~ppc ~sparc ~x86" +IUSE="clamav daemon debug ldap mysql postgres sqlite \ + large-domain virtual-users user-homedirs" + +COMMON_DEPEND="clamav? ( >=app-antivirus/clamav-0.90.2 ) + ldap? ( >=net-nds/openldap-2.2 ) + mysql? ( virtual/mysql ) + sqlite? ( =dev-db/sqlite-3* )" +DEPEND="${COMMON_DEPEND} + postgres? ( >=dev-db/libpq-8 )" +RDEPEND="${COMMON_DEPEND} + postgres? ( || ( dev-python/psycopg >=dev-db/postgresql-8 ) ) + sys-process/cronbase + virtual/logger" + +# some FHS-like structure +DSPAM_HOMEDIR="/var/spool/dspam" +DSPAM_CONFDIR="/etc/mail/dspam" +DSPAM_LOGDIR="/var/log/dspam" +DSPAM_MODE=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 "${DSPAM_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 + + # Delete these lines some time after -r6 removal + if has_version "<=mail-filter/dspam-3.8.0-r6" && + built_with_use "<=mail-filter/dspam-3.8.0-r6" sqlite && + grep -q "^StorageDriver.*libsqlite_drv.so" "${ROOT}${DSPAM_CONFDIR}"/dspam.conf; then + eerror "Sqlite2 support has been removed. Please upgrade your database to sqlite3" + eerror "and select libsqlite3_drv.so in dspam.conf before proceeding with update." + die "sqlite-2 no longer supported" + 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="hash_drv" + # select storage driver + if use sqlite ; then + STORAGE="${STORAGE},sqlite3_drv" + fi + if use mysql; then + STORAGE="${STORAGE},mysql_drv" + myconf="${myconf} --with-mysql-includes=/usr/include/mysql" + myconf="${myconf} --with-mysql-libraries=/usr/$(get_libdir)/mysql" + fi + if use postgres ; then + STORAGE="${STORAGE},pgsql_drv" + myconf="${myconf} --with-pgsql-includes=/usr/include/postgresql" + myconf="${myconf} --with-pgsql-libraries=/usr/$(get_libdir)/postgresql" + fi + + econf ${myconf} --with-storage-driver=${STORAGE} \ + --with-dspam-home="${DSPAM_HOMEDIR}" \ + --sysconfdir="${DSPAM_CONFDIR}" \ + $(use_enable daemon) \ + $(use_enable ldap) \ + $(use_enable clamav) \ + --with-dspam-group=dspam \ + --with-dspam-home-group=dspam \ + --with-dspam-mode=${DSPAM_MODE} \ + --with-logdir="${DSPAM_LOGDIR}" || die "econf failed" + emake || die "emake failed" +} + +src_install () { + diropts -m0770 -o dspam -g dspam + dodir "${DSPAM_CONFDIR}" + insinto "${DSPAM_CONFDIR}" + insopts -m640 -o dspam -g dspam + doins src/dspam.conf + dosym /etc/mail/dspam /etc/dspam + + # make install + emake DESTDIR="${D}" install || die "emake install failed" + + # necessary for dovecot-dspam + insopts -m644 + insinto /usr/include/dspam && doins src/pref.h + + diropts -m0755 -o dspam -g dspam + dodir /var/run/dspam + + # create logdir (used only when build with debug useflag) + if use debug ; then + diropts -m0770 -o dspam -g dspam + dodir "${DSPAM_LOGDIR}" + diropts -m0755 + insinto /etc/logrotate.d + newins "${FILESDIR}/logrotate.dspam" dspam || die "failed to install logrotate.d file" + fi + + 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}/${DSPAM_CONFDIR}/dspam.conf" + + newinitd "${FILESDIR}/dspam.rc" dspam || die "failed to install init script" + + fowners root:dspam /usr/bin/dspamc && + fperms u=rx,g=xs,o=x /usr/bin/dspamc || + die "failed to alter dspamc owner:group or mode" + fi + + # database related configuration and scripts + local PASSWORD="${RANDOM}${RANDOM}${RANDOM}${RANDOM}" DSPAM_DB_DATA=() + if use sqlite; then + insinto "${DSPAM_CONFDIR}" + newins src/tools.sqlite_drv/purge-3.sql sqlite3_purge.sql || die "failed to install sqlite3_purge.sql script" + 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]="false" + + # Activate mysql database configuration + 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}/${DSPAM_CONFDIR}/dspam.conf" + + insinto "${DSPAM_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 && + newins src/tools.mysql_drv/purge.sql mysql_purge.sql && + newins src/tools.mysql_drv/purge-4.1.sql mysql_purge-4.1.sql || + die "failed to install mysql*.sql scripts" + 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 || + die "failed to install mysql_virtual_user*.sql scripts" + fi + 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" + + # Activate pgsql database configuration + 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}/${DSPAM_CONFDIR}"/dspam.conf + + insinto "${DSPAM_CONFDIR}" + newins src/tools.pgsql_drv/pgsql_objects.sql pgsql_objects.sql && + newins src/tools.pgsql_drv/purge.sql pgsql_purge.sql || + die "failed to install pgsql*.sql scripts" + if use virtual-users ; then + newins src/tools.pgsql_drv/virtual_users.sql pgsql_virtual_users.sql || + die "failed to install pgsql_virtual_users.sql scripts" + fi + + # Install psycopg scripts needed when postgresql is not installed + exeinto "${DSPAM_CONFDIR}" + doexe "${FILESDIR}"/pgsql_{createdb,purge}.py || die "failed to install psycopg scripts" + fi + + # Set default storage + local DEFAULT_STORAGE + if use sqlite ; then + DEFAULT_STORAGE=sqlite3 + elif use mysql ; then + DEFAULT_STORAGE=mysql + elif use postgres ; then + DEFAULT_STORAGE=pgsql + fi + if [[ -z "${DEFAULT_STORAGE}" ]]; then + # When only one storage driver is compiled, it is linked statically with dspam + # thus you should not set the StorageDriver at all + # Also, hash_drv requires certain tokenizer and PValue (see bug #185718) + sed -e "s:^\(StorageDriver[\t ].*\)$:#\1:" \ + -e "s:^Tokenizer .*$:Tokenizer sbph:" \ + -e "/^#PValue/d" \ + -e "s:^PValue .*$:PValue markov:" \ + -i "${D}/${DSPAM_CONFDIR}"/dspam.conf + else + # Set the storage driver and use purge configuration for SQL-based installations + sed -e "s:^\(Purge.*\):###\1:g" \ + -e "s:^#\(Purge.*\):\1:g" \ + -e "s:^###\(Purge.*\):#\1:g" \ + -e "s:^\(StorageDriver[\t ].*\)libhash_drv.so:\1lib${DEFAULT_STORAGE}_drv.so:" \ + -i "${D}/${DSPAM_CONFDIR}"/dspam.conf + fi + + # 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 "${DSPAM_CONFDIR}"/txt + doins "${S}"/txt/*.txt + doins "${T}"/msgtag.* + + # Create the opt-in / opt-out directories + diropts -m0770 -o dspam -g dspam + dodir "${DSPAM_HOMEDIR}" + keepdir "${DSPAM_HOMEDIR}"/opt-in + keepdir "${DSPAM_HOMEDIR}"/opt-out + diropts -m0755 + + # dspam cron job + exeinto /etc/cron.daily + newexe "${FILESDIR}/dspam.cron-r1" dspam.cron || die "failed to install cron script" + + # 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() { + # Delete these lines some time after -r6 removal + if has_version "<=mail-filter/dspam-3.8.0-r6" ; then + # Remove obsolete *.data files + local f + for f in "${ROOT}${DSPAM_CONFDIR}"/{mysql,pgsql}.data ; do + f=${f/\/\//\/} + if [[ -f "${f}" ]]; then + rm "${f}" && + elog "Obsolete ${f} has been removed" || + eerror "Failed to remove ${f}" + fi + done + fi +} + +pkg_postinst() { + # need enewgroup/enewuser in this function for binary install. + create_dspam_usergroup + + ewarn "The hash_drv storage backend has the following requirements:" + ewarn " - PValue must be set to 'markov'; Do not use this pvalue with any other storage backend!" + ewarn " - Tokenizer must be either 'sbph' or 'osb'" + ewarn "See markov.txt for more info." + + 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 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" + elog + elog "To use the DSPAM daemon mode, the used storage driver must be thread-safe." + fi + + elog + elog "See http://dspamwiki.expass.de/Installation for more info" +} + +# Edits interactively one or more parameters from "${ROOT}${DSPAM_CONFDIR}/dspam.conf" +# Usage: edit_dspam_params param_name1 [param_name2 ..] +edit_dspam_params() { + local PARAMETER OLD_VALUE VALUE + for PARAMETER in $@ ; do + OLD_VALUE=$(awk "BEGIN { IGNORECASE=1; } \$1==\"${PARAMETER}\" { print \$2; exit; }" "${ROOT}${DSPAM_CONFDIR}/dspam.conf") + [[ $? == 0 ]] || return 1 + read -r -p "${PARAMETER} (default ${OLD_VALUE:-none}): " VALUE + + if [[ -z "${VALUE}" ]] ; then + VALUE=${OLD_VALUE} + else + sed -e "s:^#*${PARAMETER}\([\t ].*\)\?\$:${PARAMETER} ${VALUE}:gI" \ + -i "${ROOT}${DSPAM_CONFDIR}/dspam.conf" + [[ $? == 0 ]] || return 2 + fi + eval $PARAMETER=\"${VALUE}\" + done + return 0 +} + +# Selects the storage driver in "${ROOT}${DSPAM_CONFDIR}/dspam.conf" +# usage: set_storage_driver { hash | sqlite3 | mysql | pgsql } +set_storage_driver() { + sed -e "s:^[#\t ]*\(StorageDriver[\t ].*\)lib[a-z1-9]\+_drv.so:\1lib${1}_drv.so:" \ + -i "${ROOT}${DSPAM_CONFDIR}"/dspam.conf && + einfo "Storage driver lib${1}_drv.so has been selected" +} + +pkg_config () { + local AVAIL_BACKENDS=( hash ) + use sqlite && AVAIL_BACKENDS=( ${AVAIL_BACKENDS[*]} sqlite ) + use mysql && AVAIL_BACKENDS=( ${AVAIL_BACKENDS[*]} mysql ) + use postgres && AVAIL_BACKENDS=( ${AVAIL_BACKENDS[*]} postgres ) + 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 + + hash) + einfo "hash driver will automatically create the necessary databases" + set_storage_driver hash + ;; + + sqlite) + einfo "sqlite driver will automatically create the necessary databases" + set_storage_driver sqlite3 + ;; + + mysql) + local MySQLServer MySQLPort MySQLUser MySQLPass MySQLDb MySQLCompress + edit_dspam_params MySQLServer MySQLPort MySQLUser MySQLPass MySQLDb MySQLCompress || return $? + if [[ -z "${MySQLServer}" || -z "${MySQLUser}" || -z "${MySQLPass}" || -z "${MySQLDb}" ]]; then + eerror "Following parameters are required: MySQLServer MySQLUser MySQLPass MySQLDb" + return 1 + fi + + local MySQL_DB_Type MySQL_Virtuser_Type + einfo " Please select what kind of database you like to create:" + einfo " [0] Don't create the database, I will do it myself" + einfo " [1] Database will be hosted on a mysql-4.1 server or above" + einfo " [2] Space optimized database on a mysql-4.0 server or below" + einfo " [3] Speed optimized database on a mysql-4.0 server or below" + einfo + while read -n 1 -s -p " Press 0, 1, 2 or 3 on the keyboard to select database " MySQL_DB_Type; do + if [[ "${MySQL_DB_Type}" == "0" ]] ; then + echo + set_storage_driver mysql + return 0 + fi + [[ "${MySQL_DB_Type}" == "1" || "${MySQL_DB_Type}" == "2" || "${MySQL_DB_Type}" == "3" ]] && echo && break + done + if use virtual-users ; then + einfo " Please select what kind of virtual_uids table you like to use:" + einfo " [1] Virtual users added automatically (use it if this server is the primary MX)" + einfo " [2] Virtual users added manually (use it if this server is a secondary MX)" + einfo + while read -n 1 -s -p " Press 1 or 2 on the keyboard to select table type " MySQL_Virtuser_Type; do + [[ "${MySQL_Virtuser_Type}" == "1" || "${MySQL_Virtuser_Type}" == "2" ]] && echo && break + done + fi + + local MYSQL_ROOT_USER + read -r -p "Your administrative MySQL account (default root): " MYSQL_ROOT_USER + if [[ -z "${MYSQL_ROOT_USER}" ]]; then + MYSQL_ROOT_USER="root" + fi + einfo "When prompted for a password, please enter your MySQL ${MYSQL_ROOT_USER} password" + + local MYSQL_CMD_LINE="/usr/bin/mysql -u ${MYSQL_ROOT_USER} -p" + [[ "${MySQLServer}" != "/"* ]] && MYSQL_CMD_LINE="${MYSQL_CMD_LINE} -h ${MySQLServer}" + [[ -n "${MySQLPort}" ]] && MYSQL_CMD_LINE="${MYSQL_CMD_LINE} -P ${MySQLPort}" + { + echo "CREATE DATABASE ${MySQLDb};" + echo "USE ${MySQLDb};" + case ${MySQL_DB_Type} in + 1) cat "${ROOT}${DSPAM_CONFDIR}"/mysql_objects-4.1.sql ;; + 2) cat "${ROOT}${DSPAM_CONFDIR}"/mysql_objects-space.sql ;; + 3) cat "${ROOT}${DSPAM_CONFDIR}"/mysql_objects-speed.sql ;; + esac + if use virtual-users ; then + case ${MySQL_Virtuser_Type} in + 1) cat "${ROOT}${DSPAM_CONFDIR}"/mysql_virtual_users.sql ;; + 2) cat "${ROOT}${DSPAM_CONFDIR}"/mysql_virtual_user_aliases.sql ;; + esac + fi + echo "GRANT SELECT,INSERT,UPDATE,DELETE ON ${MySQLDb}.* TO '${MySQLUser}'@'%' IDENTIFIED BY '${MySQLPass}';" + echo "FLUSH PRIVILEGES;" + } | ${MYSQL_CMD_LINE} + [[ ${PIPESTATUS[1]} == 0 ]] || return ${PIPESTATUS[1]} + + einfo "MySQL database created successfully" + set_storage_driver mysql + ;; + + postgres) + local PgSQLServer PgSQLPort PgSQLUser PgSQLPass PgSQLDb + edit_dspam_params PgSQLServer PgSQLPort PgSQLUser PgSQLPass PgSQLDb || return $? + if [[ -z "${PgSQLServer}" || -z "${PgSQLUser}" || -z "${PgSQLPass}" || -z "${PgSQLDb}" ]]; then + eerror "Following parameters are required: PgSQLServer PgSQLUser PgSQLPass PgSQLDb" + return 1 + fi + + local PgSQL_DB_Create + einfo " Do you want PgSQL database be automatically created for you?" + while read -n 1 -s -p " Press y or n " PgSQL_DB_Create; do + if [[ "${PgSQL_DB_Create}" == "n" || "${PgSQL_DB_Create}" == "N" ]] ; then + echo + set_storage_driver pgsql + return 0 + fi + [[ "${PgSQL_DB_Create}" == "y" || "${PgSQL_DB_Create}" == "Y" ]] && echo && break + done + + local PGSQL_ROOT_USER + read -r -p "Your administrative PgSQL account (default postgres): " PGSQL_ROOT_USER + if [[ -z "${PGSQL_ROOT_USER}" ]]; then + PGSQL_ROOT_USER="postgres" + fi + einfo "When prompted for a password, please enter your PgSQL ${PGSQL_ROOT_USER} password" + + if [[ -x /usr/bin/psql ]]; then + # Create database using psql + local PGSQL_CMD_LINE="/usr/bin/psql -h ${PgSQLServer}" + [[ -n "${PgSQLPort}" ]] && PGSQL_CMD_LINE="${PGSQL_CMD_LINE} -p ${PgSQLPort}" + + { + echo "\\set ON_ERROR_STOP = on;" + echo "CREATE USER ${PgSQLUser} WITH PASSWORD '${PgSQLPass}' NOCREATEDB NOCREATEUSER;" + echo "CREATE DATABASE ${PgSQLDb};" + echo "GRANT ALL PRIVILEGES ON DATABASE ${PgSQLDb} TO ${PgSQLUser};" + echo "GRANT ALL PRIVILEGES ON SCHEMA public TO ${PgSQLUser};" + echo "UPDATE pg_database SET datdba=(SELECT usesysid FROM pg_shadow WHERE usename='${PgSQLUser}') WHERE datname='${PgSQLDb}';" + echo "\\c ${PgSQLDb};" + echo "CREATE FUNCTION plpgsql_call_handler() RETURNS language_handler AS '\$libdir/plpgsql', 'plpgsql_call_handler' LANGUAGE c;" + echo "CREATE FUNCTION plpgsql_validator(oid) RETURNS void AS '\$libdir/plpgsql', 'plpgsql_validator' LANGUAGE c;" + echo "CREATE TRUSTED PROCEDURAL LANGUAGE plpgsql HANDLER plpgsql_call_handler VALIDATOR plpgsql_validator;" + } | ${PGSQL_CMD_LINE} -d template1 -U ${PGSQL_ROOT_USER} + [[ ${PIPESTATUS[1]} == 0 ]] || return ${PIPESTATUS[1]} + + { + echo "\\set ON_ERROR_STOP = on;" + cat "${ROOT}${DSPAM_CONFDIR}"/pgsql_objects.sql + use virtual-users && cat "${ROOT}${DSPAM_CONFDIR}"/pgsql_virtual_users.sql + } | PGUSER="${PgSQLUser}" PGPASSWORD="${PgSQLPass}" ${PGSQL_CMD_LINE} -d "${PgSQLDb}" -U ${PgSQLUser} + [[ ${PIPESTATUS[1]} == 0 ]] || return ${PIPESTATUS[1]} + else + # Create database using psycopg script + if use virtual-users ; then + DSPAM_PgSQLPass="${PgSQLPass}" "${ROOT}${DSPAM_CONFDIR}"/pgsql_createdb.py "${PgSQLServer}" "${PgSQLPort}" "${PGSQL_ROOT_USER}" \ + "${PgSQLUser}" "${PgSQLDb}" "${ROOT}${DSPAM_CONFDIR}"/pgsql_objects.sql "${ROOT}${DSPAM_CONFDIR}"/pgsql_virtual_users.sql + else + DSPAM_PgSQLPass="${PgSQLPass}" "${ROOT}${DSPAM_CONFDIR}"/pgsql_createdb.py "${PgSQLServer}" "${PgSQLPort}" "${PGSQL_ROOT_USER}" \ + "${PgSQLUser}" "${PgSQLDb}" "${ROOT}${DSPAM_CONFDIR}"/pgsql_objects.sql + fi + [[ $? == 0 ]] || return $? + fi + + einfo "PgSQL database created successfully" + set_storage_driver pgsql + ;; + + esac +} diff --git a/mail-filter/dspam/files/digest-dspam-3.8.0-r7 b/mail-filter/dspam/files/digest-dspam-3.8.0-r7 new file mode 100644 index 000000000000..2c439bfdc6eb --- /dev/null +++ b/mail-filter/dspam/files/digest-dspam-3.8.0-r7 @@ -0,0 +1,9 @@ +MD5 1b44857a1cafe810fb321d5d6d326fe9 dspam-3.8.0-patches-20070930.tar.gz 8356 +RMD160 3ea07fac355ecfbbd0569cdcb08b57ce252365e0 dspam-3.8.0-patches-20070930.tar.gz 8356 +SHA256 ee22f7625445d37111aa4d8fa2f7c3cb159b96a86df29a97a01c9086c4e84e0d dspam-3.8.0-patches-20070930.tar.gz 8356 +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.cron-r1 b/mail-filter/dspam/files/dspam.cron-r1 new file mode 100644 index 000000000000..fce7f30b351c --- /dev/null +++ b/mail-filter/dspam/files/dspam.cron-r1 @@ -0,0 +1,374 @@ +#!/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. +# + +# +# Parse optional command line parameters +# +for foo in $@ +do + case "${foo}" in + --logdays=*) LOGROTATE_AGE="${foo#--logdays=}";; + --sigdays=*) SIGNATURE_AGE="${foo#--sigdays=}";; + --without-sql-purge) USE_SQL_PURGE=false;; + *) + echo "usage: $0 [--logdays=no_of_days] [--sigdays=no_of_days] [--without-sql-purge]" + exit 1 + ;; + esac +done + +# +# Parameters +# +[ -z "${LOGROTATE_AGE}" ] && LOGROTATE_AGE=30 # Delete log entries older than $LOGROTATE_AGE days +[ -z "${SIGNATURE_AGE}" ] && SIGNATURE_AGE=30 # Delete signatures older than $SIGNATURE_AGE days +[ -z "${USE_SQL_PURGE}" ] && USE_SQL_PURGE=true # Run sql purge scripts + +# +# Function to run dspam_clean +# +run_dspam_clean() { + if [ ! -e "/usr/bin/dspam_clean" ] + then + echo "Can not run DSPAM clean application:" + echo " /usr/bin/dspam_clean does not exist" + return 1 + else + /usr/bin/dspam_clean -s${SIGNATURE_AGE} -p${SIGNATURE_AGE} -u${SIGNATURE_AGE},${SIGNATURE_AGE},${SIGNATURE_AGE},${SIGNATURE_AGE} >/dev/null 2>&1 + return $? + 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} +} + + +# +# Function to read dspam.conf parameters +# +read_dspam_params() { + local PARAMETER VALUE + for PARAMETER in $@ ; do + VALUE=$(awk "BEGIN { IGNORECASE=1; } \$1==\"${PARAMETER}\" { print \$2; exit; }" "${DSPAM_CONFIGDIR}/dspam.conf") + [[ $? == 0 ]] || return 1 + eval ${PARAMETER}=\"${VALUE}\" + done + return 0 +} + + +# +# Function to clean DSPAM MySQL data +# +clean_mysql_drv() { + # + # MySQL + # + if ${USE_SQL_PURGE} && \ + read_dspam_params MySQLServer MySQLPort MySQLUser MySQLPass MySQLDb MySQLCompress && \ + [ -n "${MySQLServer}" -a -n "${MySQLUser}" -a -n "${MySQLDb}" ] + then + if [ ! -e "/usr/bin/mysql_config" ] + then + echo "Can not run MySQL purge script:" + echo " /usr/bin/mysql_config does not exist" + return 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" + return 1 + fi + + if [ ! -e "/usr/bin/mysql" ] + then + echo "Can not run MySQL purge script:" + echo " /usr/bin/mysql does not exist" + return 1 + fi + + # Construct mysql command line + DSPAM_MySQL_CMD="/usr/bin/mysql --silent --user=${MySQLUser}" + [ -S "${MySQLServer}" ] && + DSPAM_MySQL_CMD="${DSPAM_MySQL_CMD} --socket=${MySQLServer}" || + DSPAM_MySQL_CMD="${DSPAM_MySQL_CMD} --host=${MySQLServer}" + [ -n "${MySQLPort}" ] && + DSPAM_MySQL_CMD="${DSPAM_MySQL_CMD} --port=${MySQLPort}" + [ "${MySQLCompress}" == "true" ] && + DSPAM_MySQL_CMD="${DSPAM_MySQL_CMD} --compress" + + # Run the MySQL purge script + MYSQL_PWD="${MySQLPass}" ${DSPAM_MySQL_CMD} ${MySQLDb} < ${DSPAM_MySQL_PURGE_SQL} >/dev/null + _RC=$? + if [ ${_RC} != 0 ] + then + echo "MySQL purge script returned error code ${_RC}" + fi + + return 0 + fi +} + + +# +# Function to clean DSPAM PostgreSQL data +# +clean_pgsql_drv() { + # + # PostgreSQL + # + if ${USE_SQL_PURGE} && \ + read_dspam_params PgSQLServer PgSQLPort PgSQLUser PgSQLPass PgSQLDb && \ + [ -n "${PgSQLServer}" -a -n "${PgSQLUser}" -a -n "${PgSQLDb}" ] + 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" + return 1 + fi + + if [ -e "/usr/bin/psql" ] + then + # Construct psql command line + DSPAM_PgSQL_CMD="/usr/bin/psql -q -U ${PgSQLUser} -h ${PgSQLServer} -d ${PgSQLDb}" + [ -n "${PgSQLPort}" ] && + DSPAM_PgSQL_CMD="${DSPAM_PgSQL_CMD} -p ${PgSQLPort}" + + # Run the PostgreSQL purge script + PGUSER="${PgSQLUser}" PGPASSWORD="${PgSQLPass}" ${DSPAM_PgSQL_CMD} -f "${DSPAM_PgSQL_PURGE_SQL}" >/dev/null + else + # Run the pgsql_purge.py script + PGUSER="${PgSQLUser}" PGPASSWORD="${PgSQLPass}" "${DSPAM_CONFIGDIR}/pgsql_purge.py" "${PgSQLServer}" "${PgSQLPort}" "${PgSQLDb}" "${DSPAM_PgSQL_PURGE_SQL}" + fi + + _RC=$? + if [ ${_RC} != 0 ] + then + echo "PostgreSQL purge script returned error code ${_RC}" + fi + + return 0 + fi +} + + +# +# Function to clean DSPAM Hash data +# +clean_hash_drv() { + # + # Hash + # + if [ -d "${DSPAM_HOMEDIR}/data" ] + then + find ${DSPAM_HOMEDIR}/data/ -maxdepth 4 -mindepth 1 -type f -name "*.css" | while read name + do + /usr/bin/csscompress "${name}" 1>/dev/null 2>&1 + /usr/bin/cssclean "${name}" 1>/dev/null 2>&1 + # chown dspam:dspam "${name}" + done + find ${DSPAM_HOMEDIR}/data/ -maxdepth 4 -mindepth 1 -type d -name "*.sig" | while read name + do + find "${name}" -maxdepth 1 -mindepth 1 -type f -mtime +${SIGNATURE_AGE} -name "*.sig" -exec /bin/rm "{}" ";" + done + return 0 + else + return 1 + fi +} + + +# +# Function to clean DSPAM SQLite3 data +# +clean_sqlite3_drv() { + # + # SQLite3 + # + if ${USE_SQL_PURGE} + 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" + return 1 + fi + + if [ ! -e "/usr/bin/sqlite3" ] + then + echo "Can not run SQLite3 purge script:" + echo " /usr/bin/sqlite3 does not exist" + return 1 + fi + + # Run the SQLite3 purge script + find "${DSPAM_HOMEDIR}" -name "*.sdb" -print | while read name + do + /usr/bin/sqlite3 "$name" < "${DSPAM_SQLite3_PURGE_SQL}" >/dev/null + done 1>/dev/null 2>&1 + + return 0 + fi + +} + + +# +# 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 + # + if read_dspam_params Home && [ -d "${Home}" ] + then + DSPAM_HOMEDIR=${Home} + else + # 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 + + if [ ! -e "/usr/bin/dspam" ] + then + echo "Can not run DSPAM application:" + echo " /usr/bin/dspam does not exist" + return 1 + fi + + # + # Process all available storage drivers + # + for foo in $(/usr/bin/dspam --version 2>&1 | sed -n "s:,: :g;s:^.*\-\-with\-storage\-driver=\([^\'\]*\).*:\1:gIp") + do + case "${foo}" in + hash_drv) + clean_hash_drv + ;; + mysql_drv) + clean_mysql_drv + ;; + pgsql_drv) + clean_pgsql_drv + ;; + sqlite3_drv) + clean_sqlite3_drv + ;; + *) + echo "Unknown storage ${foo} driver" + ;; + esac + done + + # + # Run the dspam_clean command + # + run_dspam_clean + + + # + # Release lock + # + /bin/rm -f "${DSPAM_CRON_LOCKFILE}" + trap - INT TERM EXIT +fi diff --git a/mail-filter/dspam/files/pgsql_createdb.py b/mail-filter/dspam/files/pgsql_createdb.py new file mode 100644 index 000000000000..fe933efb775e --- /dev/null +++ b/mail-filter/dspam/files/pgsql_createdb.py @@ -0,0 +1,115 @@ +#!/bin/env python + +import sys, os +import psycopg2 +from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT + +adminuser = '' +adminpass = '' + +def inputStuff(title, default = None, empty = True): + if default is not None: + uinput = raw_input("%s [DEFAULT %s]: " %(title, default)) + else: + uinput = raw_input("%s: " %(title)) + if default: + if uinput == '': + return default + if uinput == '' and not empty: + print "Error: Zero length input not allowed!" + return inputStuff(title, default, empty) + return uinput + +def main(): + global adminuser + if len(sys.argv) == 7: + thiscript, serverhost, serverport, adminuser, dspamuser, dspamdb, createscript = sys.argv + elif len(sys.argv) == 8: + thiscript, serverhost, serverport, adminuser, dspamuser, dspamdb, createscript, vuserscript = sys.argv + else: + print "Usage: %s server_host server_port admin_user dspam_user dspam_dbname setup_DB_script [setup_virtual_user_script]" %(sys.argv[0]) + sys.exit(1) + env = os.environ + dspampass = env['DSPAM_PgSQLPass'] + con = connectasadmin(serverhost, serverport, 'template1') + con.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT) # CREATE DATABASE needs this + cur = con.cursor() + createDbAndUser(cur, dspamuser, dspampass, dspamdb) + con.close() + con = connectasadmin(serverhost, serverport, dspamdb) + con.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT) # CREATE LANGUAGE probably needs this + cur = con.cursor() + createLanguage(cur) + con.close() + executeScript(serverhost, serverport, dspamuser, dspampass, dspamdb, createscript) + if len(sys.argv) == 8: + executeScript(serverhost, serverport, dspamuser, dspampass, dspamdb, vuserscript) + +def createDbAndUser(cur, dspamuser, dspampass, dspamdb): + try: + cur.execute("""CREATE USER %s WITH PASSWORD '%s' NOCREATEDB NOCREATEUSER;""" %(dspamuser, dspampass)) + cur.execute("""CREATE DATABASE %s;""" %(dspamdb)) + cur.execute("""GRANT ALL PRIVILEGES ON DATABASE %s TO %s;""" %(dspamdb, dspamuser)) + cur.execute("""GRANT ALL PRIVILEGES ON SCHEMA public TO %s;""" %(dspamuser)) + cur.execute("""UPDATE pg_database SET datdba=(SELECT usesysid FROM pg_shadow WHERE usename='%s') WHERE datname='%s';""" %(dspamuser, dspamdb)) + except Exception, e: + print "ERROR:", e + sys.exit(2) + +def createLanguage(cur): + try: + cur.execute("CREATE FUNCTION plpgsql_call_handler() RETURNS language_handler AS '$libdir/plpgsql', 'plpgsql_call_handler' LANGUAGE c;") + cur.execute("CREATE FUNCTION plpgsql_validator(oid) RETURNS void AS '$libdir/plpgsql', 'plpgsql_validator' LANGUAGE c;") + cur.execute("CREATE TRUSTED PROCEDURAL LANGUAGE plpgsql HANDLER plpgsql_call_handler VALIDATOR plpgsql_validator;") + except Exception, e: + print "ERROR:", e + sys.exit(2) + +def executeScript(serverhost, serverport, dspamuser, dspampass, dspamdb, script): + try: + if len(serverport) > 0: + con = psycopg2.connect(host=serverhost, port=int(serverport), database=dspamdb, user=dspamuser, password=dspampass) + else: + con = psycopg2.connect(host=serverhost, database=dspamdb, user=dspamuser, password=dspampass) + con.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT) # Needed for plpgsql + cur = con.cursor() + except Exception, e: + print "ERROR: ",e + sys.exit(3) + try: + f = open(script, 'r') + script = f.read() + f.close() + except Exception, e: + print "ERROR: ",e + sys.exit(4) + try: + cur.execute(script) + except Exception, e: + print "ERROR: ",e + sys.exit(5) + con.close() + +def connectasadmin(serverhost, serverport, db): + global adminuser, adminpass + notconnected = 1 + while(notconnected): + try: + if len(serverport) > 0: + con = psycopg2.connect(host=serverhost, port=int(serverport), database=db, user=adminuser, password=adminpass) + else: + con = psycopg2.connect(host=serverhost, database=db, user=adminuser, password=adminpass) + notconnected = 0 + except psycopg2.OperationalError, e: + if 'no password' in e[0]: + adminpass = inputStuff('Password') + else: + print e + sys.exit(2) + except Exception, e: + print e + sys.exit(2) + return con + +if __name__ == '__main__': + main() diff --git a/mail-filter/dspam/files/pgsql_purge.py b/mail-filter/dspam/files/pgsql_purge.py new file mode 100644 index 000000000000..f24266aaf6fc --- /dev/null +++ b/mail-filter/dspam/files/pgsql_purge.py @@ -0,0 +1,41 @@ +#!/bin/env python + +import sys, os +import psycopg2 +from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT + +def main(): + if len(sys.argv) == 5: + thiscript, serverhost, serverport, dspamdb, purgescript = sys.argv + else: + print "Usage: %s server_host server_port dspam_dbname purge_script" %(sys.argv[0]) + sys.exit(1) + try: + env = os.environ + dspamuser = env['PGUSER'] + dspampass = env['PGPASSWORD'] + if len(serverport) > 0: + con = psycopg2.connect(host=serverhost, port=int(serverport), database=dspamdb, user=dspamuser, password=dspampass) + else: + con = psycopg2.connect(host=serverhost, database=dspamdb, user=dspamuser, password=dspampass) + con.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT) # Needed for plpgsql + cur = con.cursor() + except Exception, e: + print "ERROR: ",e + sys.exit(2) + try: + f = open(purgescript, 'r') + script = f.read() + f.close() + except Exception, e: + print "ERROR: ",e + sys.exit(3) + try: + cur.execute(script) + except Exception, e: + print "ERROR: ",e + sys.exit(4) + con.close() + +if __name__ == '__main__': + main() |