This patch adds the new configuration variable "$dspam_mail_size_limit" (defaulting to undef) which is roughly equivalent to "$sa_mail_body_size_limit" but applies only to SpamControl::DSPAM. Mails which are bigger than $dspam_mail_size_limit bytes will not be scanned by SpamControl::DSPAM. --- original/amavisd 2006-05-22 22:59:45.000000000 +0200 +++ modified/amavisd 2006-05-22 23:20:49.000000000 +0200 @@ -201,6 +201,7 @@ $mailfrom_to_quarantine $warn_offsite $bypass_decode_parts @decoders @av_scanners @av_scanners_backup $first_infected_stops_scan $sa_spam_report_header $sa_spam_level_char $sa_mail_body_size_limit + $dspam_mail_size_limit $undecipherable_subject_tag $localpart_is_case_sensitive $recipient_delimiter $replace_existing_extension $hdr_encoding $bdy_encoding $hdr_encoding_qb @@ -15081,17 +15082,30 @@ $self->prepare_header_edits() if $self->insert_dspam_headers(); } +sub mail_too_big($) { + my($self) = @_; + my($size_limit) = c('dspam_mail_size_limit'); + if (defined $size_limit and $self->msginfo()->msg_size > $size_limit) { + do_log(1, "DSPAM: not wasting time on DSPAM, message bigger than %s bytes: %s", + $size_limit, $self->msginfo()->msg_size); + return 1; + } + return 0; +} + sub check { my($self,$msginfo) = @_; - do_log(5, "DSPAM check called!"); $self->prepareSpamcheck($msginfo); + if ($self->mail_too_big()) { + return undef; + } $self->start_dspam(); $self->read_dspam_output(); if ($self->error_occurred) { return undef; } my($spam_level) = $self->compute_spam_level($self->probability, $self->confidence); - do_log(1, "spam check resulted in p=".sprintf("%1.3f", $self->probability).", confidence=".sprintf("%1.3f", $self->confidence)." => spam level=".sprintf("%1.1f", $spam_level)); + do_log(1, "DSPAM: spam check resulted in p=".sprintf("%1.3f", $self->probability).", confidence=".sprintf("%1.3f", $self->confidence)." => spam level=".sprintf("%1.1f", $spam_level)); $msginfo->spam_level($spam_level); $msginfo->spam_status("DSPAM"); return $spam_level;