Scan Messages and CustomFunction
Alvaro Marín
alvaro at hostalia.com
Thu Sep 24 08:42:55 UTC 2015
Hi again,
debugging the code, I've found those 2 calls to "Scan Messages" function:
[+] Message.pm, new (constructor, called by Postfix.pm's CreateBatch
function):
# Decide if we want to scan this message at all
$this->{scanmail} = MailScanner::Config::Value('scanmail', $this);
if ($this->{scanmail} =~ /[12]/) {
$this->{scanmail} = 1;
} else {
# Make sure it is set to something, and not left as undef.
$this->{scanmail} = 0;
}
if ($this->{scanmail} !~ /1/) {
$this->{scanvirusonly} = 1;
} else {
$this->{scanvirusonly} = 0;
}
[+] Postfix.pm, in CreateBatch function:
if (MailScanner::Config::Value("scanmail", $newmessage) =~ /[12]/ ||
MailScanner::Config::Value("virusscan", $newmessage) =~ /1/ ||
MailScanner::Config::Value("dangerscan", $newmessage) =~ /1/) {
$newmessage->NeedsScanning(1);
So in that Postfix.pm's code, insted of read the value of $newmessage's
variable "scanmail", that was created in Message.pm code that I've
pasted before, it calls again to MailScanner::Config::Value function
that searchs again for that value (if is a ruleset it will look for the
rule in the rules file or if it's a function, like in my configuration,
it will execute it one more time).
Changing that code by:
if ($newmessage->{"scanmail"} =~ /[12]/ ||
$newmessage->{"virusscan"} =~ /1/ ||
$newmessage->{"dangerscan"} =~ /1/) {
$newmessage->NeedsScanning(1);
it reads the value from the variable filled by Message.pm, and doesn't
call again to the function.
Can you confirm if this is correct?
Thanks.
Regards,
El 23/09/15 a las 17:52, Alvaro Marín escribió:
> Hello,
>
> I'm writing a CustomFunction to check the "Scan Messages" value in a
> database:
>
> Scan Messages = &ScanMsgs
>
> I've done the same with :
>
> Spam Checks (for avoid mails being scanned, that is, whitelisting)
> Is Definitely Spam (for blacklisting)
>
> and these 2 functions run fine.
>
> The problem with "Scan Messages" is that the function is executed two
> times for each message:
>
> Sep 23 17:15:05 MailScanner[22554]: 4694D2180A7.AC573: ScanMsgs checking.
> Sep 23 17:15:05 MailScanner[22554]: 4694D2180A7.AC573: ScanMsgs checking.
>
> and I see in MySQL logs that the queries are done 2 times.
> Simplifying the code to:
>
> ========
> package MailScanner::CustomConfig;
> sub InitScanMsgs {
> MailScanner::Log::InfoLog("Starting ScanMsgs...");
> }
> sub ScanMsgs {
> my($message) = @_;
> my $msgid=$message->{id};
> MailScanner::Log::WarnLog("$msgid: ScanMsgs checking.");
> return 0;
> }
> sub EndScanMsgs {
> MailScanner::Log::InfoLog("Ending ScanMsgs...");
> exit;
> }
> 1;
> ========
>
> the problem still occurs.
> Any idea? Is strange because, as I've said, white and blacklisting work
> fine with similar code.
>
> Thank you.
> Regards,
>
--
Alvaro Marín Illera
Hostalia Internet
www.hostalia.com
More information about the MailScanner
mailing list