######################################################## # Please file all bug reports, patches, and feature # requests under: # https://sourceforge.net/p/logwatch/_list/tickets # and copy: # Paweł Gołaszewski # Help requests and discusion can be filed under: # https://sourceforge.net/p/logwatch/discussion/ ######################################################## ######################################################## # This was written and is maintained by: # Paweł Gołaszewski # # Please send all comments, suggestions, bug reports, # etc, blues@pld-linux.org ######################################################## ##################################################### ## Copyright (c) 2008 Paweł Gołaszewski ## 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. ######################################################### use strict; ## Initial initialization: my $Startups = 0; my $Shutdowns = 0; my $LookupCount = 0; my $LookupErrorCount = 0; my $Connections = 0; my $MasqLookupCount = 0; #Init String my ($Host); #Init Hashes my ( %Connection, %ErrorLookup, %Lookups, %OtherList, ); while (defined(my $ThisLine = )) { chomp($ThisLine); if ( ($ThisLine =~ m/^Continuous traffic control enabled/) or ($ThisLine =~ m/^Timeout for request -- Closing connection/) ) { #ignore these } elsif ( my ($Host,$Port,$User,$Identity) = ($ThisLine =~ /^\[([^ ]*)\] Successful lookup: \d+ , (\d+) : ([^ ]*) \(([^ ]*)\)$/)) { my $Temp = "$User announced as $Identity"; $Lookups{$Port}{$Temp}{$Host}++; $LookupCount++; } elsif ( ($Host,$Port,$User) = ($ThisLine =~ /^\[([^ ]*)\] \(Masqueraded\) Successful lookup: \d+ , (\d+) : ([^ ]*)$/)) { my $Temp = "Masqueraded as $User"; $Lookups{$Port}{$Temp}{$Host}++; $LookupCount++; $MasqLookupCount++; } elsif ( ( ($Host) = ($ThisLine =~ /^Connection from ([^ ]* \([^ ]*\)):\d+$/)) or ( ($Host) = ($ThisLine =~ /^Connection from ([^ ]*):\d+$/)) ) { $Connection{$Host}++; $Connections++; } elsif ( ($Host,$Port) = ($ThisLine =~ /^\[([^ ]*)\] \d+ , (\d+) : ERROR : [^ ]*$/)) { $ErrorLookup{$Port}{$Host}++; $LookupErrorCount++; } elsif ( $ThisLine =~ /^oidentd startup\s+succeeded$/ ) { $Startups++; } elsif ( $ThisLine =~ /^oidentd shutdown\s+succeeded$/ ) { $Shutdowns++; } else { $OtherList{$ThisLine}++; } } ########################### # Print report: if ($Startups > 0) { print "\nStartups: $Startups\n"; } if ($Shutdowns > 0) { print "\nShutdowns: $Shutdowns\n"; } if (keys %Connection) { print "\nConnections to service: $Connections Time(s)\n"; foreach $Host (sort {$a cmp $b} keys %Connection) { print " $Host: $Connection{$Host} Time(s)\n"; } } if (keys %Lookups) { print "\nSuccessful ident lookups $LookupCount Time(s)\n"; if ($MasqLookupCount > 0) { print "Masqueraded connections: $MasqLookupCount Time(s)\n"; } foreach my $Port (sort {$a cmp $b} keys %Lookups) { print " Service on port $Port:\n"; foreach my $User (sort {$a cmp $b} keys %{$Lookups{$Port}}) { print " $User:\n"; foreach my $Host (sort {$a cmp $b} keys %{$Lookups{$Port}{$User}}) { print " $Host: $Lookups{$Port}{$User}{$Host} Time(s)\n"; } } } } if (keys %ErrorLookup) { print "\nErrors when lookup ident $LookupErrorCount Time(s)\n"; foreach my $Port (sort {$a cmp $b} keys %ErrorLookup) { print " Service on port $Port:\n"; foreach my $Host (sort {$a cmp $b} keys %{$ErrorLookup{$Port}}) { print " $Host: $ErrorLookup{$Port}{$Host} Time(s)\n" } } } if (keys %OtherList) { print "\n**Unmatched Entries**\n"; foreach my $line (sort {$a cmp $b} keys %OtherList) { print "$line: $OtherList{$line} Time(s)\n"; } } exit(0); # vi: shiftwidth=3 tabstop=3 syntax=perl et # Local Variables: # mode: perl # perl-indent-level: 3 # indent-tabs-mode: nil # End: