#!/usr/bin/perl -w

# written by David Schweikert and adapted to Debian by Adrian von Bidder
# this script is in the public domain
#
# This script will output all clients that were automatically whitelisted
# by postgrey's --auto-whitelist-clients option. The default number of
# mails required (5) is hardcoded below!

use BerkeleyDB;
use Socket;

my $dbdir = '/var/lib/postgrey';

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 >= 5 or next;
	my $host = resolv($key);
	print "$host ($c)\n";
    }
}

main;

# vim: sw=4
