Initial version of import list script.
[clinton/scripts.git] / import-list
1 #!/bin/bash
2 #
3 # Import a mailing list from a user.
4 #
5 # This must be run as root.
6
7 MMDIR=/var/lib/mailman
8 ARCHIVEDIR=$MMDIR/archives
9 BINDIR=$MMDIR/bin
10 LISTDIR=$MMDIR/lists
11 WORKDIR=/tmp/mmdir
12
13 function usage() {
14 echo "Usage: import-list [--new] [--archive MBOX-FILE] [--conf CONF-FILE]"
15 echo " [--url WEB-PAGE-URL] LIST"
16 }
17
18 function 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
39 ARCH=
40 CONF=
41 NEW=n
42 URL=
43
44 while 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
66 done
67
68 if test -z "$1"; then
69 echo "Not enough arguments"
70 usage
71 exit 1
72 elif test -n "$2"; then
73 echo "Too many arguments"
74 usage
75 exit 1
76 else
77 LIST=$1
78 URL=$2
79 fi
80
81 # Create list if --new passed
82 if test "$NEW" = "y"; then
83 newlist $LIST
84 fi
85
86 # Check to see whether list exists yet
87 if test ! -d $LISTDIR/$LIST; then
88 echo "List $LIST does not exist yet. Please make it using the" \
89 "web interface."
90 exit 1
91 fi
92
93 # Make working directory
94 if test ! -d $WORKDIR; then
95 mkdir -p $WORKDIR
96 chown list:list $WORKDIR
97 chmod ug=rwX,o= $WORKDIR
98 fi
99
100 # Import configuration
101 if 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
108 fi
109
110 # Change URL for web interface
111 if 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
118 fi
119
120 # Import list archives
121 if 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
131 fi
132
133 echo "Reloading mailman ..."
134 /etc/init.d/mailman reload
135 echo
136
137 if test -n "$CONF"; then
138 echo "Updating mailman definitions for Exim ..."
139 /afs/hcoop.net/common/etc/scripts/mailman-update-exim-db
140 echo
141 fi
142
143 echo "Sucessfully imported list $LIST"