Allow location of clamscan to be set.

Reset body before writing temp file.
(Both patches from Nick Leverton - nick@leverton.org)


git-svn-id: https://svn.perl.org/qpsmtpd/trunk@175 958fd67b-6ff1-0310-b445-bb7760255be9
This commit is contained in:
Matt Sergeant 2003-10-08 07:15:51 +00:00
parent a1cf0ae556
commit 1f92301f6a

View File

@ -4,8 +4,21 @@
use File::Temp qw(tempfile); use File::Temp qw(tempfile);
sub register { sub register {
my ($self, $qp) = @_; my ($self, $qp, @args) = @_;
$self->register_hook("data_post", "clam_scan"); $self->register_hook("data_post", "clam_scan");
if (@args > 0) {
# Untaint scanner location
if ($args[0] =~ /^(\/[\/\-\_\.a-z0-9A-Z]*)$/) {
$self->{_clamscan_loc} = $1;
} else {
$self->log(1, "FATAL ERROR: Unexpected characters in clamav argument 1");
exit 3;
}
$self->log(1, "WARNING: Ignoring additional arguments.") if (@args > 1);
} else {
$self->{_clamscan_loc} = "/usr/local/bin/clamscan";
}
} }
sub clam_scan { sub clam_scan {
@ -14,13 +27,14 @@ sub clam_scan {
my ($temp_fh, $filename) = tempfile(); my ($temp_fh, $filename) = tempfile();
print $temp_fh $transaction->header->as_string; print $temp_fh $transaction->header->as_string;
print $temp_fh "\n"; print $temp_fh "\n";
$transaction->body_resetpos;
while (my $line = $transaction->body_getline) { while (my $line = $transaction->body_getline) {
print $temp_fh $line; print $temp_fh $line;
} }
seek($temp_fh, 0, 0); seek($temp_fh, 0, 0);
# Now do the actual scanning! # Now do the actual scanning!
my $cmd = "/usr/local/bin/clamscan --stdout -i --max-recursion=50 --disable-summary $filename 2>&1"; my $cmd = $self->{_clamscan_loc}." --stdout -i --max-recursion=50 --disable-summary $filename 2>&1";
$self->log(1, "Running: $cmd"); $self->log(1, "Running: $cmd");
my $output = `$cmd`; my $output = `$cmd`;