a630b57a |
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" |