Mailwatch 0.2 sql prob

Daniel Bird dbird at SGHMS.AC.UK
Fri Aug 29 23:00:25 IST 2003



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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.mailscanner.info/pipermail/mailscanner/attachments/20030829/7398406d/attachment.html


More information about the MailScanner mailing list