#!/usr/bin/perl -w
#----------------------------------------------------------------------
# copyright (C) 1999-2007 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;
    }
    foreach my $dir (qw(new tmp cur))
    {
	if (-d $dir)
	{
	    purgedir($dir, $age);
	}
	else
	{
	    warn("Somebody has been fiddling - ~$user/Maildir/.junkmail/$dir is missing\n");
	}
    }
}
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;
}
