#!/usr/bin/perl -w # written by David Schweikert and adapted to Debian by Adrian von Bidder # adapted to PLD Linux Distribution Micha³ Lipka # this script is in the public domain # # This script will output all clients that were automatically whitelisted # by postgrey's --auto-whitelist-clients option. # Set the default number of mails your to fit your needs (generally it # should be the same as N i --auto-whitelist-clients=N) use BerkeleyDB; use Socket; my $dbdir = '/var/spool/postfix/postgrey/'; my $mails = 3; sub resolv($) { my $host = shift; my $iaddr = inet_aton($host); return gethostbyaddr($iaddr, AF_INET) || $host; } sub dbopen($) { my ($dbdir) = @_; my %db; my $dbenv = BerkeleyDB::Env->new( -Home => $dbdir, -Flags => DB_INIT_TXN|DB_INIT_MPOOL|DB_INIT_LOG, ) or die "ERROR: can't open DB environment: $!\n"; tie(%db, 'BerkeleyDB::Btree', -Filename => "postgrey_clients.db", -Flags => DB_RDONLY, -Env => $dbenv, ) or die "ERROR: can't open database $dbdir/postgrey_clients.db: $!\n"; return \%db; } sub main() { # go through the database my $db = dbopen($dbdir); while (my ($key, $value) = each %$db) { my ($c,$l) = split(/,/,$value); $c >= $mails or next; my $host = resolv($key); print "$host [$key] ($c)\n"; } } main; # vim: sw=4