1214503Srpaulo#!/usr/bin/perl -w 2214503Srpaulo# 3214503Srpaulo# Logwatch script for hostapd 4214503Srpaulo# 5214503Srpaulo# Copyright 2005 Henrik Brix Andersen <brix@gentoo.org> 6214503Srpaulo# Distributed under the terms of the GNU General Public License v2 7214503Srpaulo# Alternatively, this file may be distributed under the terms of the BSD License 8214503Srpaulo 9214503Srpaulouse strict; 10214503Srpaulo 11214503Srpaulomy $debug = $ENV{'LOGWATCH_DEBUG'} || 0; 12214503Srpaulomy $detail = $ENV{'LOGWATCH_DETAIL_LEVEL'} || 0; 13214503Srpaulomy $debugcounter = 1; 14214503Srpaulo 15214503Srpaulomy %hostapd; 16214503Srpaulomy @unmatched; 17214503Srpaulo 18214503Srpauloif ($debug >= 5) { 19214503Srpaulo print STDERR "\n\nDEBUG: Inside HOSTAPD Filter\n\n"; 20214503Srpaulo} 21214503Srpaulo 22214503Srpaulowhile (defined(my $line = <STDIN>)) { 23214503Srpaulo if ($debug >= 5) { 24214503Srpaulo print STDERR "DEBUG($debugcounter): $line"; 25214503Srpaulo $debugcounter++; 26214503Srpaulo } 27214503Srpaulo chomp($line); 28214503Srpaulo 29214503Srpaulo if (my ($iface,$mac,$layer,$details) = ($line =~ /(.*?): STA (.*?) (.*?): (.*?)$/i)) { 30214503Srpaulo unless ($detail == 10) { 31214503Srpaulo # collapse association events 32214503Srpaulo $details =~ s/^(associated) .*$/$1/i; 33214503Srpaulo } 34214503Srpaulo $hostapd{$iface}->{$mac}->{$layer}->{$details}++; 35214503Srpaulo } else { 36214503Srpaulo push @unmatched, "$line\n"; 37214503Srpaulo } 38214503Srpaulo} 39214503Srpaulo 40214503Srpauloif (keys %hostapd) { 41214503Srpaulo foreach my $iface (sort keys %hostapd) { 42214503Srpaulo print "Interface $iface:\n"; 43214503Srpaulo foreach my $mac (sort keys %{$hostapd{$iface}}) { 44214503Srpaulo print " Client MAC Address $mac:\n"; 45214503Srpaulo foreach my $layer (sort keys %{$hostapd{$iface}->{$mac}}) { 46214503Srpaulo print " $layer:\n"; 47214503Srpaulo foreach my $details (sort keys %{$hostapd{$iface}->{$mac}->{$layer}}) { 48214503Srpaulo print " $details"; 49214503Srpaulo my $count = $hostapd{$iface}->{$mac}->{$layer}->{$details}; 50214503Srpaulo if ($count > 1) { 51214503Srpaulo print ": " . $count . " Times"; 52214503Srpaulo } 53214503Srpaulo print "\n"; 54214503Srpaulo } 55214503Srpaulo } 56214503Srpaulo } 57214503Srpaulo } 58214503Srpaulo} 59214503Srpaulo 60214503Srpauloif ($#unmatched >= 0) { 61214503Srpaulo print "\n**Unmatched Entries**\n"; 62214503Srpaulo print @unmatched; 63214503Srpaulo} 64214503Srpaulo 65214503Srpauloexit(0); 66