Merge patches from SMEServer (thanks Filippo!)

This commit is contained in:
Ask Bjørn Hansen 2009-07-20 08:36:17 -07:00
commit eb27828f8b
4 changed files with 33 additions and 5 deletions

View File

@ -1,4 +1,12 @@
Temporary deny if clamd is not running
Modify plugins/virus/clamav option for ClamAV 0.95 (no-summary)
Fix spamassassin plugin log noise if spam score is 0.0
Disconnect host in rhsbl (Charlie Brady)
POD cleanups (Steve Kemp) POD cleanups (Steve Kemp)
check_spamhelo disconnects after denying a 'helo' (Filippo Carletti) check_spamhelo disconnects after denying a 'helo' (Filippo Carletti)

View File

@ -1,5 +1,15 @@
#!perl -w #!perl -w
sub register {
my ($self, $qp, $denial ) = @_;
if ( defined $denial and $denial =~ /^disconnect$/i ) {
$self->{_rhsbl}->{DENY} = DENY_DISCONNECT;
}
else {
$self->{_rhsbl}->{DENY} = DENY;
}
}
sub hook_mail { sub hook_mail {
my ($self, $transaction, $sender, %param) = @_; my ($self, $transaction, $sender, %param) = @_;
@ -49,12 +59,12 @@ sub hook_rcpt {
my $result = $self->process_sockets; my $result = $self->process_sockets;
if ($result && defined($self->{_rhsbl_zones_map}{$result})) { if ($result && defined($self->{_rhsbl_zones_map}{$result})) {
if ($result =~ /^$host\./ ) { if ($result =~ /^$host\./ ) {
return (DENY, "Mail from $host rejected because it " . $self->{_rhsbl_zones_map}{$result}); return ($self->{_rhsbl}->{DENY}, "Mail from $host rejected because it " . $self->{_rhsbl_zones_map}{$result});
} else { } else {
return (DENY, "Mail from HELO $hello rejected because it " . $self->{_rhsbl_zones_map}{$result}); return ($self->{_rhsbl}->{DENY}, "Mail from HELO $hello rejected because it " . $self->{_rhsbl_zones_map}{$result});
} }
} }
return (DENY, $result) if $result; return ($self->{_rhsbl}->{DENY}, $result) if $result;
return DECLINED; return DECLINED;
} }

View File

@ -188,7 +188,7 @@ sub hook_data_post { # check_spam
} }
} }
my $tests = <SPAMD>; my $tests = <SPAMD>|| '';
close SPAMD; close SPAMD;
$tests =~ s/\015//; # hack for outlook $tests =~ s/\015//; # hack for outlook
$flag = $flag eq 'True' ? 'Yes' : 'No'; $flag = $flag eq 'True' ? 'Yes' : 'No';

View File

@ -139,6 +139,9 @@ sub register {
elsif (/back_compat/) { elsif (/back_compat/) {
$self->{_back_compat} = '-i --max-recursion=50'; $self->{_back_compat} = '-i --max-recursion=50';
} }
elsif (/declined_on_fail/) {
$self->{_declined_on_fail} = 1;
}
else { else {
$self->log(LOGERROR, "Unrecognized argument '$_' to clamav plugin"); $self->log(LOGERROR, "Unrecognized argument '$_' to clamav plugin");
return undef; return undef;
@ -149,6 +152,7 @@ sub register {
$self->{_spool_dir} ||= $self->spool_dir(); $self->{_spool_dir} ||= $self->spool_dir();
$self->{_back_compat} ||= ''; # make sure something is set $self->{_back_compat} ||= ''; # make sure something is set
$self->{_clamd_conf} ||= '/etc/clamd/conf'; # make sure something is set $self->{_clamd_conf} ||= '/etc/clamd/conf'; # make sure something is set
$self->{_declined_on_fail} ||= 0; # decline the message on clamav failure
unless ($self->{_spool_dir}) { unless ($self->{_spool_dir}) {
$self->log(LOGERROR, "No spool dir configuration found"); $self->log(LOGERROR, "No spool dir configuration found");
@ -187,7 +191,7 @@ sub hook_data_post {
. " --stdout " . " --stdout "
. $self->{_back_compat} . $self->{_back_compat}
. " --config-file=" . $self->{_clamd_conf} . " --config-file=" . $self->{_clamd_conf}
. " --disable-summary $filename 2>&1"; . " --no-summary $filename 2>&1";
$self->log(LOGDEBUG, "Running: $cmd"); $self->log(LOGDEBUG, "Running: $cmd");
my $output = `$cmd`; my $output = `$cmd`;
@ -202,6 +206,7 @@ sub hook_data_post {
if ($signal) { if ($signal) {
$self->log(LOGINFO, "clamscan exited with signal: $signal"); $self->log(LOGINFO, "clamscan exited with signal: $signal");
return (DENYSOFT) if (!$self->{_declined_on_fail});
return (DECLINED); return (DECLINED);
} }
if ($result == 1) { if ($result == 1) {
@ -215,6 +220,11 @@ sub hook_data_post {
} }
elsif ($result) { elsif ($result) {
$self->log(LOGERROR, "ClamAV error: $cmd: $result\n"); $self->log(LOGERROR, "ClamAV error: $cmd: $result\n");
return (DENYSOFT) if (!$self->{_declined_on_fail});
}
else {
$transaction->header->add( 'X-Virus-Checked',
"Checked by ClamAV on " . $self->qp->config("me") );
} }
return (DECLINED); return (DECLINED);
} }