########################################################################## # $Id$ ########################################################################## # $Log: qmail-pop3d,v $ # Revision 1.3 2008/06/30 23:07:51 kirk # fixed copyright holders for files where I know who they should be # # Revision 1.2 2008/03/24 23:31:26 kirk # added copyright/license notice to each script # # Revision 1.1 2005/09/07 00:37:59 bjorn # New qmail multilog files written by Bob Hutchinson # ########################################################################## ####################################################### ## Copyright (c) 2008 Bob Hutchinson ## Covered under the included MIT/X-Consortium License: ## http://www.opensource.org/licenses/mit-license.php ## All modifications and contributions by other persons to ## this script are assumed to have been donated to the ## Logwatch project and thus assume the above copyright ## and licensing terms. If you want to make contributions ## under your own copyright or a different license this ## must be explicitly stated in the contribution an the ## Logwatch project reserves the right to not accept such ## contributions. If you have made significant ## contributions to this script and want to claim ## copyright please contact logwatch-devel@lists.sourceforge.net. ######################################################### $Detail = $ENV{'LOGWATCH_DETAIL_LEVEL'}; $QmailDetail = $ENV{'qmail_high_detail'}; $QmailThreshold = $ENV{'threshold'}; $ToThreshold = $ENV{'to_threshold'}; $FromThreshold = $ENV{'from_threshold'}; #@4000000041c6c5331d3bfc64 tcpserver: ok 24416 0:213.228.232.199:110 host81-130-125-141.in-addr.btopenworld.com:81.130.125.141::34887 while (defined($ThisLine = )) { if (( $ThisLine =~ /status: / ) or ( $ThisLine =~ /end (\d+) status \d+/ )) { # We don't care about these } elsif ( ($pid1,$RemoteServer) = ( $ThisLine =~ /pid (\d+) from (.*)/ )) { $From{$RemoteServer}++; $TotalFrom++; } elsif ( ($pid2,$LocalServer, $rest) = ( $ThisLine =~ /ok (\d+) \d+:(.*):110\s+(.*)/ ) ) { $To{$LocalServer}++; $TotalTo++; if ( $rest !~ /^\:/) { # we have a domain ($d, $ip ) = ($rest =~ /^(.*):(.*)::\d+$/); $Domains{$ip} = $d; } } elsif ( ($Warning) = ( $ThisLine =~ /warning: (.*)/i ) ) { $Warnings{$Warning}++; } else { # Report any unmatched entries... push @OtherList,$ThisLine; } } if ($QmailDetail >= 1) { if ($QmailThreshold > 0) { if (($FromThreshold < 0) or ($FromThreshold eq '')) { $FromThreshold = $QmailThreshold; } if (($ToThreshold < 0) or ($ToThreshold eq '')) { $ToThreshold = $QmailThreshold; } } if (($FromThreshold < 0) or ($FromThreshold eq '')) { $FromThreshold = 0; } if (($ToThreshold < 0) or ($ToThreshold eq '')) { $ToThreshold = 0; } if ( (keys %From) ) { print "\nConnections from (Threshold of " . $FromThreshold . "):\n"; $threshold_reached=0; foreach $Line (sort {$From{$b} <=> $From{$a}} keys %From) { if ($From{$Line} >= $FromThreshold) { $threshold_reached=1; if ($Domains{$Line}) { print "\t" . $Domains{$Line} . " [$Line] - ". $From{$Line} . " Time(s)\n"; } else { print "\t" . $Line . " - ". $From{$Line} . " Time(s)\n"; } } } if ($threshold_reached < 1) { print "\t" . "None found above the threshold\n"; } } if ( (keys %To) ) { print "\nConnections to (Threshold of " . $ToThreshold . "):\n"; $threshold_reached=0; foreach $Line (sort {$To{$b} <=> $To{$a}} keys %To) { if ($To{$Line} >= $ToThreshold) { $threshold_reached=1; if ($Domains{$Line}) { print "\t" . $Domains{$Line} . " [$Line] - ". $To{$Line} . " Time(s)\n"; } else { print "\t" . $Line . " - ". $To{$Line} . " Time(s)\n"; } } } if ($threshold_reached < 1) { print "\t" . "None found above the threshold\n"; } } } if ($TotalFrom or $TotalTo) { print "\nTotals:\n"; print "\tRemote connections $TotalFrom\n"; print "\tLocal connections $TotalTo\n"; } if ( (keys %Warnings) ) { print "\nWarnings:\n"; foreach $Line (sort {$Warnings{$b} <=> $Warnings{$a}} keys %Warnings) { print "\t" . $Line . " - ". $Warnings{$Line} . " Time(s)\n"; } } if (($#OtherList >= 0) and (not $IngoreUnmatched)){ print "\n**Unmatched Entries**\n"; print @OtherList; } exit(0); # vi: shiftwidth=3 tabstop=3 syntax=perl et # Local Variables: # mode: perl # perl-indent-level: 3 # indent-tabs-mode: nil # End: