Custom Function for Virus Scanners Variable {Scanned by HJMS}

Steve Freegard steve.freegard at LBSLTD.CO.UK
Tue Oct 21 16:20:07 IST 2003


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

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