18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#!/usr/bin/perl -w 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt# 38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt# Logwatch script for hostapd 48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt# 58d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt# Copyright 2005 Henrik Brix Andersen <brix@gentoo.org> 68d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt# Distributed under the terms of the GNU General Public License v2 78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt# Alternatively, this file may be distributed under the terms of the BSD License 88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtuse strict; 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtmy $debug = $ENV{'LOGWATCH_DEBUG'} || 0; 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtmy $detail = $ENV{'LOGWATCH_DETAIL_LEVEL'} || 0; 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtmy $debugcounter = 1; 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtmy %hostapd; 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtmy @unmatched; 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtif ($debug >= 5) { 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt print STDERR "\n\nDEBUG: Inside HOSTAPD Filter\n\n"; 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtwhile (defined(my $line = <STDIN>)) { 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if ($debug >= 5) { 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt print STDERR "DEBUG($debugcounter): $line"; 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt $debugcounter++; 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt chomp($line); 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (my ($iface,$mac,$layer,$details) = ($line =~ /(.*?): STA (.*?) (.*?): (.*?)$/i)) { 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unless ($detail == 10) { 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt # collapse association events 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt $details =~ s/^(associated) .*$/$1/i; 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt $hostapd{$iface}->{$mac}->{$layer}->{$details}++; 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } else { 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt push @unmatched, "$line\n"; 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtif (keys %hostapd) { 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt foreach my $iface (sort keys %hostapd) { 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt print "Interface $iface:\n"; 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt foreach my $mac (sort keys %{$hostapd{$iface}}) { 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt print " Client MAC Address $mac:\n"; 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt foreach my $layer (sort keys %{$hostapd{$iface}->{$mac}}) { 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt print " $layer:\n"; 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt foreach my $details (sort keys %{$hostapd{$iface}->{$mac}->{$layer}}) { 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt print " $details"; 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt my $count = $hostapd{$iface}->{$mac}->{$layer}->{$details}; 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if ($count > 1) { 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt print ": " . $count . " Times"; 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt print "\n"; 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtif ($#unmatched >= 0) { 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt print "\n**Unmatched Entries**\n"; 628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt print @unmatched; 638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtexit(0); 66