mailman-update-exim-db: New script that builds a Mailman lookup table for Exim
authormwolson_admin <mwolson_admin@deleuze.hcoop.net>
Wed, 14 Nov 2007 22:46:33 +0000 (17:46 -0500)
committermwolson_admin <mwolson_admin@deleuze.hcoop.net>
Wed, 14 Nov 2007 22:46:33 +0000 (17:46 -0500)
mailman-update-exim-db [new file with mode: 0755]

diff --git a/mailman-update-exim-db b/mailman-update-exim-db
new file mode 100755 (executable)
index 0000000..ed84d21
--- /dev/null
@@ -0,0 +1,38 @@
+#!/bin/bash
+#
+# mailman-update-table: Make an associated list mapping list names and
+# the domain that they are associated with.
+#
+# This table is then used by Exim to verify that the list name and
+# domain are correct.
+#
+# This script is meant to be called from a cron job.
+
+MMDIR=/var/lib/mailman
+LISTDIR=$MMDIR/lists
+BINDIR=$MMDIR/bin
+TABLE=/etc/exim4/mailmandb
+
+# Use return as separator, never space or tab.
+IFS="
+"
+
+# Create table with the right permissions or clear it.
+if test ! -f $TABLE; then
+    touch $TABLE
+    chown root:mail $TABLE
+    chmod u=rw,g=r,o= $TABLE
+else
+    : > $TABLE
+fi
+
+# Iterate through available lists
+for i in $(find $LISTDIR -mindepth 1 -maxdepth 1 -type d -print); do
+    LIST=$(basename $i)
+    DOMAIN=$(su list -c "$BINDIR/config_list -o - $LIST" | \
+        grep -E "^host_name = '.+'" 2>/dev/null | \
+        sed -r -e "s/host_name = '(.+)'/\\1/")
+    if test -n "$LIST" && test -n "$DOMAIN"; then
+        echo "$LIST: $DOMAIN" >> $TABLE
+    fi
+done