Custom Function for Virus Scanners Variable {Scanned by HJMS}

Kyle Harris lists at TRCINTL.COM
Tue Oct 21 16:29:49 IST 2003


On Tue, 21 Oct 2003 16:20:07 +0100, Steve Freegard
<steve.freegard at LBSLTD.CO.UK> wrote:

>Kyle,
>
>How about:
>
>sub VirusScanners {
>   MailScanner::Log::InfoLog("Doing VirusScanners");
>   my($message) = @_;
>+  my(@todomain);
>+  @todomain = @{$message->{todomain}};
>   open(FILE,">>/home/out.txt");
>   print FILE "some junk here\n";
>   close (FILE);
>   return "clamav";
>
>Does that work??

Yep, but it sill runs both the Init code and the function code itself
during startup (again, unique to this variable).

This code originally started out having a MySql connection so that I could
use a virus scanner for some domains and not others based upon the domain
it was going to and the results of an SQL query.  If I can't get the domain
information, than that is not a possibility.  I just worked it down to the
test code above to try and figure out what the problem is and to eliminate
the MySql connection.

As long as the line "@todomain = @{$message->{todomain}};" isn't present,
it works . . . although I still don't think it should run the function code
during startup.



>
>Regards,
>Steve.
>
>-----Original Message-----
>From: Kyle Harris [mailto:lists at TRCINTL.COM]
>Sent: 21 October 2003 14:59
>To: MAILSCANNER at JISCMAIL.AC.UK
>Subject: Re: Custom Function for Virus Scanners Variable {Scanned by HJMS}
>
>On Tue, 21 Oct 2003 09:08:43 -0500, Furnish, Trever G <TGFurnish at HERFF-
>JONES.COM> wrote:
>
>>> When I save this and reboot, I receive the "Starting VirusScanners"
>>
>>"reboot"?!  Why would you reboot?  Hopefully you just mean "restart
>>MailScanner"...
>
>I said "reboot" as this is a test system and I just wanted to make sure I
>restarted everything before I posted.  Just a safeguard.
>>
>>> and "Doing VirusScanners" log entries twice
>>
>>I think you ought to see it once per MS child, since each one is going to
>>run these functions.
>This is not the case for other functions I have written.  Normally the Init
>function is ran once during startup and the function itself is ran once for
>each message (not at startup).
>
>>
>>> (I don't when
>>> using this method
>>> with other custom functions).
>>
>>That surprises me.
>>
>When I use this same exact function for another variable in the config file
>(I'll use Virus Scanning for this example and just change the return value
>of "clamav" to 1) the code does not run at all when MailScanner starts.
>Only the Init code runs.  This is what I have seen with the other functions
>I have written.  However, any function used for Virus Scanners runs when
>MailScanner first starts (the init code runs and the function itself runs).
>
>>> It never writes the out.txt
>>> file ...
>>
>>Suggest changing your file opening code from:
>>>   open(FILE,">>/home/out.txt");
>>>   print FILE "some junk here\n";
>>>   close (FILE);
>>
>>...to:
>>if (open(FILE, ">>/home/out.txt")) {
>>   print FILE, "some junk here\n";
>>   close FILE;
>>} else {
>>   MailScanner::Log::InfoLog("Open failed: $!");
>>}
>>
>This makes no difference as it stops processing code at the following line:
>my @todomain = >> @{$message->todomain}};
>It makes no difference what comes after it, unless I remove this line.
>Again, when this code is used to replace other variables (also changing the
>return value of "clamav" to a correct value) the code works fine.  For some
>reason, the variable Virus Scanners doesn't like this line of code.
>
>
>>But keep in mind that your approach isn't multi-process safe - that is,
you
>>will have multiple processes writing to the same file at the same time, so
>>don't be surprised to find corruption in that file, especially as email
>>traffic increases.
>>
>>> nor does it
>>> pick up mail from the mailqueie.in?  MailScanner starts without any
>>> errors.  If I take out the line "my @todomain =
>>> @{$message->todomain}};" it
>>> seems to run, but It still runs the code twice at startup.
>>
>>When you enabled debugging of mailscanner, did you run it from the init
>>script or directly from a command line?  Sometimes you'll see more when
>>running it via the command-line, though I'm not quite sure why.
>I ran it from the init script.
>
>>
>>You say it "runs the code twice at startup" -- how many mailscanner child
>>processes are you starting?
>
>Again, I don't think the child processes make a difference in how many
>times the Init process or the function itself runs.  They haven't for my
>other functions.  Anyway, to answer your question, I have 5 child
processes.
>
>Thanks for any help.
>
>>
>>--
>>Trever
>>
>>> -----Original Message-----
>>> From: Kyle Harris [mailto:lists at TRCINTL.COM]
>>> Sent: Monday, October 20, 2003 6:26 PM
>>> To: MAILSCANNER at JISCMAIL.AC.UK
>>> Subject: Re: Custom Function for Virus Scanners Variable {Scanned by
>>> HJMS}
>>>
>>>
>>> Here is some more info regarding my own previous post.
>>> Hopefully someone
>>> will be able to help out.  Anyway, if I set Virus Scanners =
>>> &VirusScanners
>>> in the config file and then define the following custom
>>> function in the
>>> CustomConfig.pm file (this is my entire file for
>>> troubleshooting purposes
>>> only):
>>>
>>> package MailScanner::CustomConfig;
>>> use strict 'vars';
>>> use strict 'refs';
>>> no  strict 'subs'; # Allow bare words for parameter %'s
>>> use vars qw($VERSION);
>>>
>>> sub InitVirusScanners {
>>>   MailScanner::Log::InfoLog("Starting VirusScanners");
>>> }
>>> sub EndVirusScanners {
>>>   MailScanner::Log::InfoLog("Stopping VirusScanners");
>>> }
>>> sub VirusScanners {
>>>   MailScanner::Log::InfoLog("Doing VirusScanners");
>>>   my ($message) = @_;
>>>   my @todomain = @{$message->{todomain}};
>>>   open(FILE,">>/home/out.txt");
>>>   print FILE "some junk here\n";
>>>   close (FILE);
>>>   return "clamav";
>>> }
>>> 1;
>>>
>>> When I save this and reboot, I receive the "Starting VirusScanners"
>>> and "Doing VirusScanners" log entries twice (I don't when
>>> using this method
>>> with other custom functions).  It never writes the out.txt
>>> file nor does it
>>> pick up mail from the mailqueie.in?  MailScanner starts without any
>>> errors.  If I take out the line "my @todomain =
>>> @{$message->todomain}};" it
>>> seems to run, but It still runs the code twice at startup.
>>>
>>> Julian, any ideas?
>>>
>
>--
>This email and any files transmitted with it are confidential and
>intended solely for the use of the individual or entity to whom they
>are addressed. If you have received this email in error please notify
>the sender and delete the message from your mailbox.
>
>This footnote also confirms that this email message has been swept by
>MailScanner (www.mailscanner.info) for the presence of computer viruses.



More information about the MailScanner mailing list