From a630b57aebf7ab4cafeb529e648e4d2afc19d224 Mon Sep 17 00:00:00 2001 From: mwolson_admin Date: Wed, 27 Aug 2008 22:36:40 -0400 Subject: [PATCH] Initial version of import list script. --- import-list | 143 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100755 import-list diff --git a/import-list b/import-list new file mode 100755 index 0000000..14e7edb --- /dev/null +++ b/import-list @@ -0,0 +1,143 @@ +#!/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 "Usage: import-list [--new] [--archive MBOX-FILE] [--conf CONF-FILE]" + echo " [--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 +} + +# Argument processing +ARCH= +CONF= +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" = "--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 + URL=$2 +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 URL for web interface +if test -n "$CONF" && 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"; then + echo "Updating mailman definitions for Exim ..." + /afs/hcoop.net/common/etc/scripts/mailman-update-exim-db + echo +fi + +echo "Sucessfully imported list $LIST" -- 2.20.1