#!/usr/bin/perl

$Detail = $ENV{'LOGWATCH_DETAIL_LEVEL'};
$IgnoreUnmatched = $ENV{'vsftpd_ignore_unmatched'};

while (defined($ThisLine = <STDIN>)) {
   if ( ( $ThisLine =~ /CONNECT/ ) or
        ( $ThisLine =~ /OK DOWNLOAD/ ) or
        ( $ThisLine =~ /OK UPLOAD/ ) or
        ( $ThisLine =~ /MKDIR/ ) ) {
      # We don't care about these
   }				 
   elsif ( ($IP,$Email) = ( $ThisLine =~ /OK LOGIN: Client \"(.*)\", anon password \"(.*)\"$/ ) ) {
      $Temp = "    (" . $IP . "): " . $Email . " - ";
      $AnonLogins{$Temp}++;
   }
   elsif ( ($PID, $User,$IP) = ( $ThisLine =~ /\[(.*)\] \[(.*)\] OK LOGIN: Client \"(.*)\"$/ ) ) {
      $Temp = "    (" . $IP . "): " . $User . " - ";
      $UserLogins{$Temp}++;
   }
   elsif ( ($PID,$User,$IP) = ( $ThisLine =~ /\[(.*)\] \[(.*)\] FAIL LOGIN: Client \"(.*)\"$/ ) ) {
      $Temp = " (" . $IP . "): " . $User . " - ";
      $FailedLogins{$Temp}++;
   }
   else {
# Report any unmatched entries...
      push @OtherList,$ThisLine;
   }
}

if ( 
      ( (keys %AnonLogins) and ($Detail >= 5 ) ) or
      ( (keys %FailedLogins) and ($Detail >= 5 ) ) or
      ( @OtherList ) or
      ( keys %UserLogins )
   ) {		

   print "\n\n --------------------- vsftpd-messages Begin ------------------------ \n";

   if ( (keys %AnonLogins) and ($Detail >= 5) ) {
      print "\nAnonymous FTP Logins:\n";
      foreach $ThisOne (keys %AnonLogins) {
         print $ThisOne . $AnonLogins{$ThisOne} . " Time(s)\n";
      }
   }

   if (keys %UserLogins) {
      print "\nUser FTP Logins:\n";
      foreach $ThisOne (keys %UserLogins) {
         print $ThisOne . $UserLogins{$ThisOne} . " Time(s)\n";
      }
   }

   if (keys %FailedLogins) {
      print "\nFailed FTP Logins:\n";
      foreach $ThisOne (keys %FailedLogins) {
         print $ThisOne . $FailedLogins{$ThisOne} . " Time(s)\n";
      }
   }

   if (($#OtherList >= 0) and (not $IngoreUnmatched)){
      print "\n**Unmatched Entries**\n";
      print @OtherList;
   }

   print "\n\n ---------------------- vsftpd-messages End ------------------------- \n\n";

}

exit(0);


