Custom Function for Virus Scanners Variable {Scanned by HJMS}

Kyle Harris lists at TRCINTL.COM
Tue Oct 21 16:43:26 IST 2003


On Tue, 21 Oct 2003 16:29:49 +0100, Kyle Harris <lists at TRCINTL.COM> wrote:

>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??

Oops! I misread your post when I first answered. To answer your question
correctly, No, making the changes on the 2 lines above does not work.  It
still hangs.

Sorry, and thanks again for the assistance!

>
>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