Created
June 22, 2019 01:40
-
-
Save cPLevey/7f28bee47de1c07477010f3530b1329c to your computer and use it in GitHub Desktop.
ClamAV SpamAssassin Plugin Files
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
loadplugin ClamAV clamav.pm | |
full CLAMAV eval:check_clamav() | |
describe CLAMAV Clam AntiVirus detected a virus | |
score CLAMAV 10 | |
add_header all Virus _CLAMAVRESULT_ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package ClamAV; | |
use strict; | |
# Modified from https://wiki.apache.org/spamassassin/ClamAVPlugin | |
# For use with cpanel-perl-528-Mail-SpamAssassin-3.X | |
our $CLAMD_SOCK = "/var/clamd"; | |
use Mail::SpamAssassin; | |
use Mail::SpamAssassin::Plugin; | |
use Mail::SpamAssassin::Logger; | |
use File::Scan::ClamAV; | |
our @ISA = qw(Mail::SpamAssassin::Plugin); | |
sub new { | |
my ($class, $mailsa) = @_; | |
$class = ref($class) || $class; | |
my $self = $class->SUPER::new($mailsa); | |
bless($self, $class); | |
$self->register_eval_rule("check_clamav"); | |
return $self; | |
} | |
sub check_clamav { | |
my($self, $pms, $fulltext) = @_; | |
dbg("ClamAV: invoking File::Scan::ClamAV, port/socket: %s", $CLAMD_SOCK); | |
my $clamav = new File::Scan::ClamAV(port => $CLAMD_SOCK); | |
my($code, $virus) = $clamav->streamscan(${$fulltext}); | |
my $isspam = 0; | |
my $header = ""; | |
if (!$code) { | |
my $errstr = $clamav->errstr(); | |
$header = "Error ($errstr)"; | |
} elsif ($code eq 'OK') { | |
$header = "No"; | |
} elsif ($code eq 'FOUND') { | |
$header = "Yes ($virus)"; | |
$isspam = 1; | |
# include the virus name in SpamAssassin's report | |
$pms->test_log($virus); | |
} else { | |
$header = "Error (Unknown return code from ClamAV: $code)"; | |
} | |
dbg("ClamAV: result - $header"); | |
$pms->set_tag('CLAMAVRESULT', $header); | |
# add a metadatum so that rules can match against the result too | |
$pms->{msg}->put_metadata('X-Spam-Virus',$header); | |
return $isspam; | |
} | |
1; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment