Initial version of import list script.
[clinton/scripts.git] / import-list
... / ...
CommitLineData
1#!/bin/bash
2#
3# Import a mailing list from a user.
4#
5# This must be run as root.
6
7MMDIR=/var/lib/mailman
8ARCHIVEDIR=$MMDIR/archives
9BINDIR=$MMDIR/bin
10LISTDIR=$MMDIR/lists
11WORKDIR=/tmp/mmdir
12
13function usage() {
14 echo "Usage: import-list [--new] [--archive MBOX-FILE] [--conf CONF-FILE]"
15 echo " [--url WEB-PAGE-URL] LIST"
16}
17
18function newlist() {
19 if test -z "$1" || test -n "$2"; then
20 echo "Programmer error"
21 exit 1
22 fi
23
24 local LIST=$1
25
26 mkdir $MMDIR/lists/$LIST
27 chown list:list $MMDIR/lists/$LIST
28 chmod g+rwx $MMDIR/lists/$LIST
29
30 mkdir $MMDIR/archives/private/$LIST
31 chown list:list $MMDIR/archives/private/$LIST
32 chmod g+rwx $MMDIR/archives/private/$LIST
33
34 echo "Created list $LIST"
35 echo
36}
37
38# Argument processing
39ARCH=
40CONF=
41NEW=n
42URL=
43
44while test "forever"; do
45 if test "$1" = "--archive"; then
46 shift
47 ARCH=$1
48 shift
49 elif test "$1" = "--conf"; then
50 shift
51 CONF=$1
52 shift
53 continue
54 elif test "$1" = "--new"; then
55 NEW=y
56 shift
57 continue
58 elif test "$1" = "--url"; then
59 shift
60 URL=$1
61 shift
62 continue
63 else
64 break
65 fi
66done
67
68if test -z "$1"; then
69 echo "Not enough arguments"
70 usage
71 exit 1
72elif test -n "$2"; then
73 echo "Too many arguments"
74 usage
75 exit 1
76else
77 LIST=$1
78 URL=$2
79fi
80
81# Create list if --new passed
82if test "$NEW" = "y"; then
83 newlist $LIST
84fi
85
86# Check to see whether list exists yet
87if test ! -d $LISTDIR/$LIST; then
88 echo "List $LIST does not exist yet. Please make it using the" \
89 "web interface."
90 exit 1
91fi
92
93# Make working directory
94if test ! -d $WORKDIR; then
95 mkdir -p $WORKDIR
96 chown list:list $WORKDIR
97 chmod ug=rwX,o= $WORKDIR
98fi
99
100# Import configuration
101if test -n "$CONF"; then
102 echo "Importing list configuration ..."
103 cp $CONF $WORKDIR/$LIST.cfg
104 chown list:list $WORKDIR/$LIST.cfg
105 chmod u=rw,g=rw,o= $WORKDIR/$LIST.cfg
106 mv $WORKDIR/$LIST.cfg $LISTDIR/$LIST/config.pck
107 echo
108fi
109
110# Change URL for web interface
111if test -n "$CONF" && test -n "$URL"; then
112 echo "Changing web page URL for $LIST to $URL ..."
113 echo "web_page_url = '$URL'" > $WORKDIR/$LIST.cfg
114 chown list:list $WORKDIR/$LIST.cfg
115 sudo -u list $BINDIR/config_list -i $WORKDIR/$LIST.cfg $LIST
116 rm -f $WORKDIR/$LIST.cfg
117 echo
118fi
119
120# Import list archives
121if test -n "$ARCH"; then
122 echo "Importing list archives ..."
123 cp $ARCH $WORKDIR/$LIST.mbox
124 rm -fr $ARCHIVEDIR/private/$LIST.mbox
125 mkdir $ARCHIVEDIR/private/$LIST.mbox
126 mv $WORKDIR/$LIST.mbox $ARCHIVEDIR/private/$LIST.mbox
127 chown -R list:list $ARCHIVEDIR/private/$LIST.mbox
128 chmod ug=rw,o=r $ARCHIVEDIR/private/$LIST.mbox/$LIST.mbox
129 sudo -u list $BINDIR/arch --quiet --wipe $LIST
130 echo
131fi
132
133echo "Reloading mailman ..."
134/etc/init.d/mailman reload
135echo
136
137if test -n "$CONF"; then
138 echo "Updating mailman definitions for Exim ..."
139 /afs/hcoop.net/common/etc/scripts/mailman-update-exim-db
140 echo
141fi
142
143echo "Sucessfully imported list $LIST"