easy

A unixy OS

Perl 5.8 or 5.10

A functional and running clamd, preferably listening to a socket

The module File::Scan::ClamAV (and its dependencies)



use File::Scan::ClamAV;

# (...)

# $dir contains the full path of the user's directory

my $av = new File::Scan::ClamAV (find_all => 1,

port => '/tmp/clamd.socket');

# find_all means that we wish to recurse directories.

# /tmp/clamd.socket is where my clamd has its socket.

# Other clamd configurations may differ.



unless ($av->ping) {

plogdie "clamd isn't running, aborting virus scan";

} else {

plog "Performing virus scan for $uname";



# Save virus information per username ($uname).

# Note! scan() returns a hash.

$a_viruses{$uname} = $av->scan($dir);



if ($a_viruses{$uname}) {

my @vfiles = sort keys %{$a_viruses{$uname}};

plog "$uname has ".@vfiles." viruses.";



# Home assignment: print contents of $a_viruses{$uname}

# to a file, using the sorted list @vfiles.

}

}



This is almost ridiculouslyProblem: a bunch of user directories need virus scanning and per-user reportsSolution: A Perl script using File::Scan::ClamAVPrerequisites:The following code could (after some sensible adjustments) run in a loop through all usernames on your system.