# ClamAV filter for Courier perlfitler. See the perlfilter-example that # comes with Courier for the comments. use IO::File; my $filedesc=shift @ARGV; my $socket=new IO::File "+<&$filedesc"; die "$!" unless defined $socket; my $line; my $first=1; my $errmsg="200 Ok"; while (defined ($line=<$socket>)) { my $msg; chomp $line; last unless $line; if ($first) { $msg=filterdata($line); } else { $msg=filtercontrol($line); } $first=0; $errmsg=$msg if $msg; } $errmsg .= "\n" unless $errmsg =~ /\n$/; print $socket $errmsg; $socket->close; sub filterdata { my $filename=shift; open(CLAMOUT, "cat ${filename} | clamdscan --stdout - |"); my $clamout = ; close(CLAMOUT); if ( $clamout =~ m/ FOUND$/ ) { $clamout =~ s/.*stream: (.*) FOUND/$1/; return "500 Virus Detected: ${clamout}"; } return ""; } sub filtercontrol { my $filename=shift; return ""; }