|  | #!/usr/bin/perl -w | 
|  | # | 
|  | # Logwatch script for hostapd | 
|  | # | 
|  | # Copyright 2005 Henrik Brix Andersen <brix@gentoo.org> | 
|  | # Distributed under the terms of the GNU General Public License v2 | 
|  | # Alternatively, this file may be distributed under the terms of the BSD License | 
|  |  | 
|  | use strict; | 
|  |  | 
|  | my $debug = $ENV{'LOGWATCH_DEBUG'} || 0; | 
|  | my $detail = $ENV{'LOGWATCH_DETAIL_LEVEL'} || 0; | 
|  | my $debugcounter = 1; | 
|  |  | 
|  | my %hostapd; | 
|  | my @unmatched; | 
|  |  | 
|  | if ($debug >= 5) { | 
|  | print STDERR "\n\nDEBUG: Inside HOSTAPD Filter\n\n"; | 
|  | } | 
|  |  | 
|  | while (defined(my $line = <STDIN>)) { | 
|  | if ($debug >= 5) { | 
|  | print STDERR "DEBUG($debugcounter): $line"; | 
|  | $debugcounter++; | 
|  | } | 
|  | chomp($line); | 
|  |  | 
|  | if (my ($iface,$mac,$layer,$details) = ($line =~ /(.*?): STA (.*?) (.*?): (.*?)$/i)) { | 
|  | unless ($detail == 10) { | 
|  | # collapse association events | 
|  | $details =~ s/^(associated) .*$/$1/i; | 
|  | } | 
|  | $hostapd{$iface}->{$mac}->{$layer}->{$details}++; | 
|  | } else { | 
|  | push @unmatched, "$line\n"; | 
|  | } | 
|  | } | 
|  |  | 
|  | if (keys %hostapd) { | 
|  | foreach my $iface (sort keys %hostapd) { | 
|  | print "Interface $iface:\n"; | 
|  | foreach my $mac (sort keys %{$hostapd{$iface}}) { | 
|  | print "  Client MAC Address $mac:\n"; | 
|  | foreach my $layer (sort keys %{$hostapd{$iface}->{$mac}}) { | 
|  | print "    $layer:\n"; | 
|  | foreach my $details (sort keys %{$hostapd{$iface}->{$mac}->{$layer}}) { | 
|  | print "      $details"; | 
|  | my $count = $hostapd{$iface}->{$mac}->{$layer}->{$details}; | 
|  | if ($count > 1) { | 
|  | print ": " . $count . " Times"; | 
|  | } | 
|  | print "\n"; | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | if ($#unmatched >= 0) { | 
|  | print "\n**Unmatched Entries**\n"; | 
|  | print @unmatched; | 
|  | } | 
|  |  | 
|  | exit(0); |