#!/usr/local/bin/perl -w
use SAVI;
use strict;
my $savi = new SAVI();
ref $savi or print "Error initializing savi: " . SAVI->error_string($savi) . " ($savi)\n" and die;
my $version = $savi->version();
ref $version or print "Error getting version: " . $savi->error_string($version) . " ($version)\n" and die;
printf("Version %s (engine %d.%d) recognizing %d viruses\n", $version->string, $version->major,
$version->minor, $version->count);
foreach ($version->ide_list) {
printf("\tIDE %s released %s\n", $_->name, $_->date);
}
set_options();
print "\n";
foreach (@ARGV) {
print "Scanning $_ - ";
my $results = $savi->scan($_);
ref $results or print "error: " . $savi->error_string($results) . " ($results)\n" and next;
print "clean\n" and next if ! $results->infected;
print "infected by";
foreach ($results->viruses) {
print " $_";
}
print "\n";
}
sub set_options {
my @options = qw(
GrpArchiveUnpack GrpSelfExtract GrpExecutable GrpInternet GrpMSOffice
GrpMisc !GrpDisinfect !GrpClean
EnableAutoStop FullSweep FullPdf Xml
);
my $error = $savi->set('MaxRecursionDepth', 32);
defined($error) and print "Error setting MaxRecursionDepth: " . $savi->error_string($error) . " ($error)\n";
foreach (@options) {
my $value = ($_ =~ s/^!//) ? 0 : 1;
$error = $savi->set($_, $value);
defined($error) and print "Error setting $_: " . $savi->error_string($error) . " ($error)\n";
}
}