#!/usr/bin/perl -Tw # # $Id: relay_recipients.pl,v 1.6 2004/09/23 17:16:34 nugget Exp $ # use strict; $ENV{'PATH'} = '/bin:/usr/bin:/usr/local/bin'; $ENV{'BASH_ENV'} = ''; use Digest::MD5; my $debug = 0; my $domain = 'slacker.com'; my $output_file = '/usr/local/etc/postfix/relay_slacker'; my $passwd_file = '/etc/passwd'; my @lookup_file = ( '/etc/aliases', '/usr/local/etc/postfix/aliases', '/usr/local/mailman/data/aliases' ); my $postmap = '/usr/local/sbin/postmap'; my $scp_on_changed = 1; my $scp_flags = '-q -B -C -p -i /usr/local/etc/postfix/relay_identity'; my @scp_targets = ( 'nugget@nodezero.distributed.net:.', 'nugget@crush.cuckoo.com:.' ); my %addresses; print "Adding addresses from passwd file:\n" if($debug); open PASSWD, $passwd_file; while() { my $buf = $_; chomp $buf; if($buf =~ /^([^#: \t]*):/) { print " [$1]\n" if($debug); $addresses{$1} = $1; } } close PASSWD; print "\n" if($debug); for(my $i=0; $i<@lookup_file; $i++) { print "Adding addresses from $lookup_file[$i]:\n" if($debug); open LOOKUP, $lookup_file[$i]; while() { my $buf = $_; chomp $buf; if($buf =~ /^([^# \t:]*)[ \t:]/) { print " [$1]\n" if($debug); $addresses{$1} = $1; } } close LOOKUP; print "\n" if($debug); } %addresses = sort %addresses; open OUTFILE, ">$output_file.tmp" or die "Unable to create $output_file.tmp"; print OUTFILE <new->addfile(*FILE)->hexdigest; close FILE; open FILE, "$output_file" or die "Cannot find $output_file"; binmode(FILE); my $oldmd5 = Digest::MD5->new->addfile(*FILE)->hexdigest; close FILE; if($oldmd5 ne $newmd5) { rename "$output_file.tmp", $output_file; system "$postmap $output_file"; if($scp_on_changed) { foreach my $destdir (@scp_targets) { system "scp $scp_flags $output_file $output_file.db $destdir"; my $exit_value = $? >> 8; if($exit_value) { die "Unable to push relay file to $destdir"; } } } exit 1; } else { unlink "$output_file.tmp"; exit 0; }