#! /bin/sh #------------------------------------------------------------------------------- # /var/install/config.d/mailman.sh - configuration generator script for Mailman # # Copyright (c) 2008 the eisfair team, team(at)eisfair(dot)org # # Creation: 26.07.2004 om # Last Update: $Id$ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. #------------------------------------------------------------------------------- pgmname=$0 mailman_version="v0.0.1" configfile=/etc/config.d/mailman generate_mmaliases=/etc/aliases.mailman generate_mailmandomains=/etc/exim-mailmandomains crontab_path=/var/cron/etc/root crontab=$crontab_path/mailman mailmanfile=/etc/config.d/mailman PYTHON=python . /var/install/include/eislib . /etc/config.d/base . /etc/config.d/mailman . $configfile #exec 2> /tmp/mailman-trace$$.log #set -x #---------------------------------------------------------------------------------------- # sub function: create mailman domains file # # no command line parameters #---------------------------------------------------------------------------------------- create_mailman_domains () { mecho -info "maildomains" { echo "#-------------------------------------------------------------------------------" echo "# $generate_mailmandomains file generated by $pgmname $mailman_version" echo "#" echo "# Do not edit this file, edit $configfile" echo "# Creation date: `date`" echo "#-------------------------------------------------------------------------------" idx=1 while [ $idx -le $MAILMAN_DOMAIN_N ] do eval domain='$MAILMAN_DOMAIN_'$idx grep "$domain" $generate_mailmandomains > /dev/null if [ $? -eq 1 ] then # domain not found, add it echo "$domain" fi idx=`/usr/bin/expr $idx + 1` done } > $generate_mailmandomains # set access rights chmod 0600 $generate_mailmandomains chown exim $generate_mailmandomains chgrp trusted $generate_mailmandomains } #---------------------------------------------------------------------------------------- # create mailman aliases #---------------------------------------------------------------------------------------- create_mailman_aliases () { { echo "#------------------------------------------------------------------" echo "# $generate_mmaliases file generated by $pgmname $mailman_version" echo "#" echo "# Do not edit this file, edit $configfile" echo "# Creation date: `date`" echo "#------------------------------------------------------------------" /usr/local/mailman/bin/list_lists -b | while read line do set -- $line echo "$1: \"|/usr/local/mailman/mail/mailman post $1\"" echo "$1-admin: \"|/usr/local/mailman/mail/mailman admin $1\"" echo "$1-bounces: \"|/usr/local/mailman/mail/mailman bounces $1\"" echo "$1-confirm: \"|/usr/local/mailman/mail/mailman confirm $1\"" echo "$1-confirm: \"|/usr/local/mailman/mail/mailman confirm $1\"" echo "$1-join: \"|/usr/local/mailman/mail/mailman join $1\"" echo "$1-leave: \"|/usr/local/mailman/mail/mailman leave $1\"" echo "$1-owner: \"|/usr/local/mailman/mail/mailman owner $1\"" echo "$1-request: \"|/usr/local/mailman/mail/mailman request $1\"" echo "$1-subscribe: \"|/usr/local/mailman/mail/mailman subscribe $1\"" echo "$1-unsubscribe: \"|/usr/local/mailman/mail/mailman unsubscribe $1\"" done } > $generate_mmaliases # update aliases /var/install/config.d/mail.sh alias } check_versions () { mecho -info "check_ver" if [ ! /usr/local/exim/bin/exim ] then echo "mail is missing! Abort" exit 1 fi } write_config () { mecho -info "write config" { echo "###############################################" echo "# Here's where we get the distributed defaults." echo "" echo "from Defaults import *" echo "" echo "##################################################" echo "# Put YOUR site-specific settings below this line." echo "" echo "DEFAULT_EMAIL_HOST = '$DOMAIN_NAME'" echo "DEFAULT_URL_HOST = '$HOSTNAME.$DOMAIN_NAME'" echo "DEFAULT_URL_PATTERN = 'http://%s/$MAILMAN_WEB_DIR/'" if [ $MAILMAN_DOMAIN_N -gt 0 ] then # create account idx=1 while [ $idx -le $MAILMAN_DOMAIN_N ] do eval domain='$MAILMAN_DOMAIN_'$idx eval isMailHost='$MAILMAN_DOMAIN_'$idx'_IS_MAILHOST' if [ "$isMailHost" = "yes" ] then echo "add_virtualhost('$domain', '$domain')" else echo "add_virtualhost('$domain', DEFAULT_EMAIL_HOST)" fi idx=`/usr/bin/expr $idx + 1` done fi echo "HTML_TO_PLAIN_TEXT_COMMAND = '/usr/bin/lynx -dump %(filename)s'" echo "PUBLIC_ARCHIVE_URL = 'http://%(hostname)s/$MAILMAN_WEB_ARCHIVE_DIR/%(listname)s'" echo "DEFAULT_ARCHIVE = '$MAILMAN_ARCHIVE'" echo "ARCHIVE_TO_MBOX = $MAILMAN_ARCHIVE_MBOX" echo "DEFAULT_ARCHIVE_VOLUME_FREQUENCY = $MAILMAN_ARCHIVE_FREQ" echo "GZIP_ARCHIVE_TXT_FILES = '$MAILMAN_ARCHIVE_WEB_GZIP'" echo "ARCHIVER_OBSCURES_EMAILADDRS = '$MAILMAN_ARCHIVE_WEB_EMAILOBSCURE'" echo "PUBLIC_MBOX = '$MAILMAN_ARCHIVE_PUBLIC_MAIL'" echo "DEFAULT_NNTP_HOST = '$MAILMAN_CRON_NEWSGATE_NNTPHOST'" echo "DEFAULT_SERVER_LANGUAGE = '$MAILMAN_SERVER_LANG'" echo "USE_ENVELOPE_SENDER = '$MAILMAN_SENDER_ENVELOPE'" echo "DEFAULT_ADMIN_MEMBER_CHUNKSIZE = $MAILMAN_WEB_MEMBERADMIN" echo "ADMINDB_PAGE_TEXT_LIMIT = $MAILMAN_WEB_TEXTLIMIT" if [ "$MAILMAN_ARCHIVE_PUBLIC" = "yes" ] then echo "DEFAULT_ARCHIVE_PRIVATE = 0" else echo "DEFAULT_ARCHIVE_PRIVATE = 1" fi if [ "$MAILMAN_CRON_NEWSGATE_NNTPUSER" = "" ] then echo "NNTP_USERNAME = 'None'" else echo "NNTP_USERNAME = $MAILMAN_CRON_NEWSGATE_NNTPUSER" fi if [ "$MAILMAN_CRON_NEWSGATE_NNTPPASS" = "" ] then echo "NNTP_PASSWORD = 'None'" else echo "NNTP_PASSWORD = $MAILMAN_CRON_NEWSGATE_NNTPPASS" fi } >/usr/local/mailman/Mailman/mm_cfg.py if [ "$START_MAILMAN" = "yes" ] then ln -sf /etc/init.d/mailman /etc/rc2.d/S98mailman ln -sf /etc/init.d/mailman /etc/rc2.d/K12mailman else rm -f /etc/rc2.d/S98mailman rm -f /etc/rc2.d/K12mailman fi } write_crontab () { echo "deleting cronjobs ..." prefix=/usr/local/mailman # check for crontab file if [ -f $crontab ] then # delete existing file rm -f $crontab # update crontab file # /var/install/config.d/cron >/dev/null 2>/dev/null fi if [ "$MAILMAN_CRON_NEWMEMBERS" = "yes" -o "$MAILMAN_CRON_PENDING" = "yes" -o "$MAILMAN_CRON_DISABLED" = "yes" -o "$MAILMAN_CRON_PASSWORD" = "yes" -o "$MAILMAN_CRON_NEWSGATE" = "yes" -o "$MAILMAN_CRON_ARCHIVE" = "yes" -o "$MAILMAN_CRON_DIGEST" = "yes" ] then # check for cron directory if [ ! -d $crontab_path ] then mkdir -p $crontab_path fi { echo "#" echo "# Do not edit this file, edit $mailmanfile" echo "# Creation date: `date`" } > $crontab if [ "$MAILMAN_CRON_ALIAS" = "yes" ] then # echo "adding new list aliases service ..." # write cronjob file echo "15 0 * * * /var/install/config.d/mail.sh alias " >> $crontab fi if [ "$MAILMAN_CRON_PENDING" = "yes" ] then # echo "adding Pending members mail to admin service ..." # write cronjob file echo "$MAILMAN_CRON_PENDING_SCHEDULE $PYTHON -S $prefix/cron/checkdbs" >> $crontab fi if [ "$MAILMAN_CRON_DISABLED" = "yes" ] then # echo "adding Hint to disabled members service ..." # write cronjob file echo "$MAILMAN_CRON_DISABLED_SCHEDULE $PYTHON -S $prefix/cron/disabled" >> $crontab fi if [ "$MAILMAN_CRON_DIGEST" = "yes" ] then # Sent out Digest echo "adding digest service ..." # write cronjob file echo "$MAILMAN_CRON_DIGEST_SCHEDULE $PYTHON -S $prefix/cron/senddigest" >> $crontab fi if [ "$MAILMAN_CRON_PASSWORD" = "yes" ] then # Sent out passwords echo "adding Password reminder service ..." # write cronjob file echo "$MAILMAN_CRON_PASSWORD_SCHEDULE $PYTHON -S $prefix/cron/mailpasswds" >> $crontab fi if [ "$MAILMAN_CRON_NEWSGATE" = "yes" ] then # echo "adding Gate2News service ..." # write cronjob file echo "$MAILMAN_CRON_NEWSGATE_SCHEDULE $PYTHON -S $prefix/cron/gate_news" >> $crontab fi if [ "$MAILMAN_CRON_ARCHIVE" = "yes" ] then # echo "adding mails to archive service ..." # write cronjob file echo "$MAILMAN_CRON_ARCHIVE_SCHEDULE $PYTHON -S $prefix/cron/nightly_gzip" >> $crontab fi # update crontab file /var/install/config.d/cron >/dev/null 2>/dev/null fi } check_versions create_mailman_domains create_mailman_aliases write_config write_crontab