+#!/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"