#!/usr/bin/perl -w
#----------------------------------------------------------------------
# copyright (C) 1999-2006 Mitel Networks Corporation
#----------------------------------------------------------------------

use strict;

use esmith::ConfigDB;
use esmith::AccountsDB;
use User::pwent;
use File::Find;

sub purgedir;

my $db = esmith::ConfigDB->open_ro or
    die("Could not open config db");;
my $adb = esmith::AccountsDB->open_ro or
    die("Could not open accounts db");;

my $sa = $db->get('spamassassin') or
    die("Could not get spamassassin record from config db\n");

my $age = $sa->prop('MessageRetentionTime') || '0';

exit 0 unless $age;

my @users = ("admin", map { $_->key } $adb->users);

foreach my $user ( @users )
{
    my $pwent = getpwnam($user) 
	or die "Couldn't get password entry for $user\n";

    chdir $pwent->dir or die "Couldn't chdir $pwent->dir:$!\n";
    unless (chdir "Maildir/.junkmail")
    {
	warn("Couldn't chdir to junkmail folder of user $user: $!\n");
	next;
    }
    purgedir("new", $age);
    purgedir("tmp", $age);
    purgedir("cur", $age);
}
exit 0;

sub purgedir
{
    # Unlink all files in dir $dir which are more than $age days old
    my ($dir, $age) = @_;

    use DirHandle;

    my $dh = DirHandle->new($dir);
    unlink grep { -M > $age }	# choose files older than $age days
	    grep { -f }		# Choose only plain files
	    map { "$dir/$_" }	# create full paths
	    $dh->read;
}
