Mailwatch 0.2 sql prob

Peter C. Ndikuwera pndiku at DSMAGIC.COM
Tue Sep 2 10:46:25 IST 2003


Just remove the line:
MailScanner::Log::InfoLog("Initialising database connection
database=$db_name;host=$db_host,$db_user,$db_pass");

Also, you might want to look at the new CustomConfig.pm I posted
earlier. I can send it to you privately if you want.

Peter
On Sat, 2003-08-30 at 01:00, Daniel Bird wrote:
>
> Peter C. Ndikuwera wrote:
> > Hi Daniel,
> >
> > I have a fix which is really a hack. I'm sure it's the wrong way to do
> > it but it works for me. I've attached the relevant part of my
> > CustomConfig.pm.
> >
> > Peter
>
> Peter / Steve,
> I've tried this one and it works for me (although the DB username and
> password appear in the maillog!!! ;-)
>
> Dan
> > On Wed, 2003-08-27 at 17:14, Daniel Bird wrote:
> >
> > > Hi,
> > > I noticed in the archives the same problem I'm having, but no solution:
> > > I keep seeing this in the maillog:
> > >
> > > Cannot insert row: MySQL server has gone away
> > >
> > > I was wondering if anyone has had this problem and managed to find a fix?
> > >
> > > Regards
> > > --
> > > ____________________________________
> > >
> > > Daniel Bird
> > > Network & Systems Manager
> > > St. George's Hospital  Medical School
> > > Tooting
> > > London SW17 0RE
> > >
> > > P: +44 20 8725 2897
> > > F: +44 20 8725 3583
> > > E: dan at sghms.ac.uk
> > > ____________________________________
> > >
> > > Hex dump: Where witches put used curses...
> > > "#define QUESTION ((bb) || !(bb)) - Shakespeare."
> > >
> > >
> > > __________________________________________________________________
> > > ###############
> > > # SQL Logging #
> > > ###############
> > >
> > > use DBI;
> > > use Sys::Hostname;
> > >
> > > sub InitSQLLogging {
> > > }
> > >
> > > sub EndSQLLogging {
> > > }
> > >
> > > sub SQLLogging {
> > >                 my($sth);
> > >                 my($hostname) = hostname;
> > >
> > >                 # Modify this as necessary for your configuration
> > >                 my($db_name) = "mailscanner";
> > >                 my($db_host) = "localhost";
> > >                 my($db_user) = "mailscanner";
> > >                 my($db_pass) = "mailscanner";
> > >
> > >                 MailScanner::Log::InfoLog("Initialising database connection database=$db_name;host=$db_host,$db_user,$db_pass");
> > >
> > >                 # Connect to the database
> > >                 my($dbh) = DBI->connect("DBI:mysql:database=$db_name;host=$db_host",
> > >                                                                                                                 $db_user, $db_pass,
> > >                                                                                                                 {PrintError => 0});
> > >
> > >                 # Sometimes this line needs to be uncommented. Go figure
> > >                 # MailScanner::Log::WarnLog($DBI::errstr);
> > >
> > >                 # Check if connection was successfull - if it isn't
> > >                 # then generate a warning and continue processing.
> > >                 if (!$dbh) {
> > >                                 MailScanner::Log::WarnLog("Unable to initialise database connection: %s", $DBI::errstr);
> > >                                         return;
> > >                         } else {
> > >                                         # Prepare statement
> > >                                         $sth = $dbh->prepare("INSERT INTO maillog VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)") or MailScanner::Log::WarnLog($DBI::errstr);
> > >                         }
> > >
> > >                 MailScanner::Log::InfoLog("Finished initialising database connection");
> > >                 my($message) = @_;
> > >
> > >                 # Don't bother trying to do an insert if no message
> > >                 # is passed-in or if the database connection is down.
> > >                 MailScanner::Log::InfoLog("In SQL Logging msg=$message, dbh=$dbh");
> > >                 return unless $message;
> > >                 return unless defined $dbh;
> > >
> > >                 # Get rid of control chars and tidy-up SpamAssassin report
> > >                 my $spamreport = $message->{spamreport};
> > >                 $spamreport =~ s/\n/ /g;
> > >                 $spamreport =~ s/\t//g;
> > >
> > >                 # Get timestamp, and format it so it is suitable to use with MySQL
> > >                 my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
> > >                 my($timestamp) = sprintf("%d-%02d-%02d %02d:%02d:%02d",
> > >                                                                                                                  $year+1900,$mon+1,$mday,$hour,$min,$sec);
> > >
> > >                 # Also print 1 line for each report about this message. These lines
> > >                 # contain all the info above, + the attachment filename and text of
> > >                 # each report.
> > >                 my($file, $text, @report_array);
> > >                 while(($file, $text) = each %{$message->{allreports}}) {
> > >                                 $file = "the entire message" if $file eq "";
> > >                                 # Use the sanitised filename to avoid problems caused by people forcing
> > >                                 # logging of attachment filenames which contain nasty SQL instructions.
> > >                                 $file = $message->{file2safefile}{$file} or $file;
> > >                                 $text =~ s/\n/ /;  # Make sure text report only contains 1 line
> > >                                 $text =~ s/\t/ /; # and no tab characters
> > >                                 push (@report_array, $text);
> > >                 }
> > >
> > >                 # Sanitize reports
> > >                 my $reports = join(",", at report_array);
> > >
> > >                 # Insert the data
> > >                 $sth->execute(
> > >                                                                         $timestamp,
> > >                                                                         $message->{id},
> > >                                                                         $message->{size},
> > >                                                                         $message->{from},
> > >                                                                         join(',', @{$message->{to}}),
> > >                                                                         $message->{subject},
> > >                                                                         $message->{clientip},
> > >                                                                         join(',', @{$message->{archiveplaces}}),
> > >                                                                         $message->{isspam},
> > >                                                                         $message->{ishigh},
> > >                                                                         $message->{issaspam},
> > >                                                                         $message->{isrblspam},
> > >                                                                         $message->{spamwhitelisted},
> > >                                                                         $message->{sascore},
> > >                                                                         $spamreport,
> > >                                                                         $message->{virusinfected},
> > >                                                                         $message->{nameinfected},
> > >                                                                         $message->{otherinfected},
> > >                                                                         $reports,
> > >                                                                         $hostname)
> > >                                 or MailScanner::Log::WarnLog("Cannot insert row: %s", $DBI::errstr);
> > >
> > >                 MailScanner::Log::InfoLog("Finished SQL Logging [$DBI::errstr]");
> > >
> > >                 $dbh->disconnect if defined $dbh;
> > >                 MailScanner::Log::InfoLog("Disconnected from the database");
> > > }
> > >
>
> --
> ____________________________________
>
> Daniel Bird
> Network & Systems Manager
> St. George's Hospital  Medical School
> Tooting
> London SW17 0RE
>
> P: +44 20 8725 2897
> F: +44 20 8725 3583
> E: dan at sghms.ac.uk
> ____________________________________
>
> Hex dump: Where witches put used curses...
> "#define QUESTION ((bb) || !(bb)) - Shakespeare."



More information about the MailScanner mailing list