#!/bin/bash # # Import a mailing list from a user. # # This must be run as root. MMDIR=/var/lib/mailman ARCHIVEDIR=$MMDIR/archives BINDIR=$MMDIR/bin LISTDIR=$MMDIR/lists WORKDIR=/tmp/mmdir function usage() { echo >&2 "Usage: import-list [--new] [--archive MBOX-FILE]" \ "[--conf CONF-FILE]" echo >&2 " [--domain DOMAIN] [--url WEB-PAGE-URL] LIST" } function newlist() { if test -z "$1" || test -n "$2"; then echo "Programmer error" exit 1 fi local LIST=$1 mkdir $MMDIR/lists/$LIST chown list:list $MMDIR/lists/$LIST chmod g+rwx $MMDIR/lists/$LIST mkdir $MMDIR/archives/private/$LIST chown list:list $MMDIR/archives/private/$LIST chmod g+rwx $MMDIR/archives/private/$LIST echo "Created list $LIST" echo } if test "$UID" != "0"; then echo "This program must be run as root" usage exit 1 fi # Argument processing ARCH= CONF= DOM= NEW=n URL= while test "forever"; do if test "$1" = "--archive"; then shift ARCH=$1 shift elif test "$1" = "--conf"; then shift CONF=$1 shift continue elif test "$1" = "--domain"; then shift DOM=$1 shift continue elif test "$1" = "--help"; then usage exit 0 elif test "$1" = "--new"; then NEW=y shift continue elif test "$1" = "--url"; then shift URL=$1 shift continue else break fi done if test -z "$1"; then echo "Not enough arguments" usage exit 1 elif test -n "$2"; then echo "Too many arguments" usage exit 1 else LIST=$1 fi # Create list if --new passed if test "$NEW" = "y"; then newlist $LIST fi # Check to see whether list exists yet if test ! -d $LISTDIR/$LIST; then echo "List $LIST does not exist yet. Please make it using the" \ "web interface." exit 1 fi # Make working directory if test ! -d $WORKDIR; then mkdir -p $WORKDIR chown list:list $WORKDIR chmod ug=rwX,o= $WORKDIR fi # Import configuration if test -n "$CONF"; then echo "Importing list configuration ..." cp $CONF $WORKDIR/$LIST.cfg chown list:list $WORKDIR/$LIST.cfg chmod u=rw,g=rw,o= $WORKDIR/$LIST.cfg mv $WORKDIR/$LIST.cfg $LISTDIR/$LIST/config.pck echo fi # Change domain for accepting email if test -n "$DOM"; then echo "Changing email domain for $LIST to $DOM ..." echo "host_name = '$DOM'" > $WORKDIR/$LIST.cfg chown list:list $WORKDIR/$LIST.cfg sudo -u list $BINDIR/config_list -i $WORKDIR/$LIST.cfg $LIST rm -f $WORKDIR/$LIST.cfg echo fi # Change URL for web interface if test -n "$URL"; then echo "Changing web page URL for $LIST to $URL ..." echo "web_page_url = '$URL'" > $WORKDIR/$LIST.cfg chown list:list $WORKDIR/$LIST.cfg sudo -u list $BINDIR/config_list -i $WORKDIR/$LIST.cfg $LIST rm -f $WORKDIR/$LIST.cfg echo fi # Import list archives if test -n "$ARCH"; then echo "Importing list archives ..." cp $ARCH $WORKDIR/$LIST.mbox rm -fr $ARCHIVEDIR/private/$LIST.mbox mkdir $ARCHIVEDIR/private/$LIST.mbox mv $WORKDIR/$LIST.mbox $ARCHIVEDIR/private/$LIST.mbox chown -R list:list $ARCHIVEDIR/private/$LIST.mbox chmod ug=rw,o=r $ARCHIVEDIR/private/$LIST.mbox/$LIST.mbox sudo -u list $BINDIR/arch --quiet --wipe $LIST echo fi echo "Reloading mailman ..." /etc/init.d/mailman reload echo if test -n "$CONF" || test -n "$DOM"; then echo "Updating mailman definitions for Exim ..." /afs/hcoop.net/common/etc/scripts/mailman-update-exim-db echo fi echo "Sucessfully imported list $LIST"