diff options
author | Jonas Smedegaard <dr@jones.dk> | 2010-05-04 14:25:34 +0200 |
---|---|---|
committer | Jonas Smedegaard <dr@jones.dk> | 2010-05-04 14:25:34 +0200 |
commit | 966b29c496ef6851496641334f922584633b0a01 (patch) | |
tree | 11b884e34d364b80f708e6621c0a7acc5aaa4401 /localmailrecipientsdump | |
parent | 7e505c5c9a7aa6b6bf89d32467f3f4c41ff8ce33 (diff) | |
parent | b33708b7bad20a5ced676f80f16188bb523613a6 (diff) |
Merge coreander:/srv/git/source.jones.dk/sbin
Diffstat (limited to 'localmailrecipientsdump')
-rwxr-xr-x | localmailrecipientsdump | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/localmailrecipientsdump b/localmailrecipientsdump new file mode 100755 index 0000000..d96038f --- /dev/null +++ b/localmailrecipientsdump @@ -0,0 +1,76 @@ +#!/bin/sh +# +# /usr/local/sbin/localmailrecipientsdump +# Copyright 2004-2006 Jonas Smedegaard <dr@jones.dk> +# +# Dump a list of all local mail destinations +# + +set -e + +pfdir="/etc/postfix" + +firstitem() { + set -e + file="$1" + + cat "$file" | grep -v '^#' | sed 's/#.*//' | head -n 1 +} + +localdomains() { + set -e + postconf -h mydestination | tr ',' ' ' +} + +aliasmaps() { + set -e + postconf -h alias_maps | tr ',' ' ' +} + +virtualmaps() { + set -e + newmaps="$(postconf -h virtual_alias_maps)" + if [ '$virtual_maps' = "$newmaps" ]; then + perl -ne 's/^virtual_maps\s*=\s*// and print' < /etc/postfix/main.cf | tr ',' ' ' + else + echo "$newmaps" | tr ',' ' ' + fi +} + +accounts() { + set -e + ( + getent passwd | perl -ne 's/:.*// and s/^([a-z]\S*).*/$1/ and print' + for map in $(aliasmaps); do + postalias -s $map | perl -ne 's/^([a-z]\S*):.*/$1/ and print' + done + ) | sort -u +} + +mkrecipientsmap() { + for domain in $(localdomains); do + for account in $(accounts); do + echo "$account@$domain OK" + done + done + for map in $(virtualmaps); do + case $map in + regexp:/etc/mail/sympa_virtual_regexp_*) + # FIXME: replace catch-all with actual accounts + echo "$map" | perl -ne 's,regexp:/etc/mail/sympa_virtual_regexp_(\S+).*,\@$1 OK, and print' + ;; + hash:*) + postmap -s $map | perl -ne 's/^([a-z]\S*\@\S+)\s.*/$1 OK/ and print' + ;; + *) + echo >&2 "Unsupported map type: $map" + exit 1 + ;; + esac + done +} + +redpill="$(firstitem "/etc/local-ORG/redpill")" +realm="$(firstitem "/etc/local-ORG/realm")" + +mkrecipientsmap | LC_ALL=C sort -t@ -k2 -k1 > "/etc/local-$redpill/$realm/mailrecipients" |