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