|
Packit |
57988d |
########################################################
|
|
Packit |
57988d |
# $Id$
|
|
Packit |
57988d |
########################################################
|
|
Packit |
57988d |
# $Log: dovecot,v $
|
|
Packit |
57988d |
# Revision 1.18 2010/09/18 17:41:00 stefan
|
|
Packit |
57988d |
# ignore: ssl-build-param
|
|
Packit |
57988d |
#
|
|
Packit |
57988d |
# Revision 1.17 2009/06/02 14:48:06 mike
|
|
Packit |
57988d |
# Removed some periods that were in the Fedora patch and broke the file -mgt
|
|
Packit |
57988d |
#
|
|
Packit |
57988d |
# Revision 1.16 2009/06/02 14:45:48 mike
|
|
Packit |
57988d |
# Patch from Fedora (Ivana Hutarova Varekova) -mgt
|
|
Packit |
57988d |
#
|
|
Packit |
57988d |
# Revision 1.15 2008/11/18 06:02:49 mike
|
|
Packit |
57988d |
# Rolled back..that was wrong. -mgt
|
|
Packit |
57988d |
#
|
|
Packit |
57988d |
# Revision 1.14 2008/11/18 06:00:34 mike
|
|
Packit |
57988d |
# Removed a space should be better -mgt
|
|
Packit |
57988d |
#
|
|
Packit |
57988d |
# Revision 1.13 2008/11/18 04:32:49 mike
|
|
Packit |
57988d |
# Added bytes detected to IMAP disconnect match expect more issues -mgt
|
|
Packit |
57988d |
#
|
|
Packit |
57988d |
# Revision 1.12 2008/08/11 15:38:02 mike
|
|
Packit |
57988d |
# Connection closed patch from Niels Baggesen -mgt
|
|
Packit |
57988d |
#
|
|
Packit |
57988d |
# Revision 1.11 2008/06/30 23:07:51 kirk
|
|
Packit |
57988d |
# fixed copyright holders for files where I know who they should be
|
|
Packit |
57988d |
#
|
|
Packit |
57988d |
# Revision 1.10 2008/03/24 23:31:26 kirk
|
|
Packit |
57988d |
# added copyright/license notice to each script
|
|
Packit |
57988d |
#
|
|
Packit |
57988d |
# Revision 1.9 2008/02/14 18:19:51 mike
|
|
Packit |
57988d |
# Patch from Gilles Detillieux summarize pop3/imap -mgt
|
|
Packit |
57988d |
#
|
|
Packit |
57988d |
# Revision 1.8 2008/01/16 20:11:04 bjorn
|
|
Packit |
57988d |
# Filtering dovecot start-up message, by Gilles Detillieux.
|
|
Packit |
57988d |
#
|
|
Packit |
57988d |
# Revision 1.7 2007/06/18 03:54:45 bjorn
|
|
Packit |
57988d |
# Better printing of IPv6 addresses, by Patrick Vande Walle.
|
|
Packit |
57988d |
#
|
|
Packit |
57988d |
# Revision 1.6 2007/03/17 19:13:13 bjorn
|
|
Packit |
57988d |
# Now handling dovecot starts/kills.
|
|
Packit |
57988d |
#
|
|
Packit |
57988d |
# Revision 1.5 2006/12/20 15:25:09 bjorn
|
|
Packit |
57988d |
# Additional filtering, by Ivana Varekova.
|
|
Packit |
57988d |
#
|
|
Packit |
57988d |
# Revision 1.4 2006/08/13 22:02:31 bjorn
|
|
Packit |
57988d |
# IPv4 addresses displayed in native format, and don't display user totals
|
|
Packit |
57988d |
# if user connects from only one IP address; changes by Patrick Vande Walle.
|
|
Packit |
57988d |
#
|
|
Packit |
57988d |
# Revision 1.3 2006/08/13 21:06:33 bjorn
|
|
Packit |
57988d |
# Added support for Dovecot 1.0 based on patches from Mark Nienberg, and
|
|
Packit |
57988d |
# IP addresses displayed without brackets for consistency across versions;
|
|
Packit |
57988d |
# modifications by Patrick Vande Walle.
|
|
Packit |
57988d |
#
|
|
Packit |
57988d |
# Revision 1.2 2005/12/07 04:31:44 bjorn
|
|
Packit |
57988d |
# Added $dovecot_ignore_host.
|
|
Packit |
57988d |
#
|
|
Packit |
57988d |
# Revision 1.1 2005/09/18 17:01:05 bjorn
|
|
Packit |
57988d |
# Dovecot filters written by Patrick Vande Walle.
|
|
Packit |
57988d |
#
|
|
Packit |
57988d |
########################################################
|
|
Packit |
57988d |
# Please send all comments, suggestions, bug reports,
|
|
Packit |
57988d |
# etc, to logwatch-devel@lists.sourceforge.net
|
|
Packit |
57988d |
########################################################
|
|
Packit |
57988d |
# The Dovecot script was written by:
|
|
Packit |
57988d |
# Patrick Vande Walle <patrick@isoc.lu>
|
|
Packit |
57988d |
# Based on previous work by
|
|
Packit |
57988d |
# Pawel Golaszewski <blues@gda.pl>
|
|
Packit |
57988d |
#
|
|
Packit |
57988d |
# TODO:
|
|
Packit |
57988d |
# - use printf features to align text in table
|
|
Packit |
57988d |
#
|
|
Packit |
57988d |
########################################################
|
|
Packit |
57988d |
|
|
Packit |
57988d |
########################################################
|
|
Packit |
57988d |
## Copyright (c) 2008 Patrick Vande Walle
|
|
Packit |
57988d |
## Covered under the included MIT/X-Consortium License:
|
|
Packit |
57988d |
## http://www.opensource.org/licenses/mit-license.php
|
|
Packit |
57988d |
## All modifications and contributions by other persons to
|
|
Packit |
57988d |
## this script are assumed to have been donated to the
|
|
Packit |
57988d |
## Logwatch project and thus assume the above copyright
|
|
Packit |
57988d |
## and licensing terms. If you want to make contributions
|
|
Packit |
57988d |
## under your own copyright or a different license this
|
|
Packit |
57988d |
## must be explicitly stated in the contribution an the
|
|
Packit |
57988d |
## Logwatch project reserves the right to not accept such
|
|
Packit |
57988d |
## contributions. If you have made significant
|
|
Packit |
57988d |
## contributions to this script and want to claim
|
|
Packit |
57988d |
## copyright please contact logwatch-devel@lists.sourceforge.net.
|
|
Packit |
57988d |
#########################################################
|
|
Packit |
57988d |
|
|
Packit |
57988d |
my $Debug = $ENV{'LOGWATCH_DEBUG'} || 0;
|
|
Packit |
57988d |
my $Detail = $ENV{'dovecot_detail'} || $ENV{'LOGWATCH_DETAIL_LEVEL'} || 0;
|
|
Packit |
57988d |
my $IgnoreHost = $ENV{'dovecot_ignore_host'} || "";
|
|
Packit |
57988d |
|
|
Packit |
57988d |
my $Restarts = 0;
|
|
Packit |
57988d |
my $End = 0;
|
|
Packit |
57988d |
|
|
Packit |
57988d |
if ( $Debug >= 5 ) {
|
|
Packit |
57988d |
print STDERR "\n\nDEBUG \n\n";
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
use Socket;
|
|
Packit |
57988d |
my $rdns = {};
|
|
Packit |
57988d |
sub hostName {
|
|
Packit |
57988d |
(my $ipaddr) = @_;
|
|
Packit |
57988d |
|
|
Packit |
57988d |
if ($ENV{'LOGWATCH_NUMERIC'} || $ENV{'dovecot_numeric'}) {
|
|
Packit |
57988d |
return $ipaddr;
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
if (exists $rdns{ $ipaddr }) {
|
|
Packit |
57988d |
return $rdns{ $ipaddr };
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
$rdns{ $ipaddr } = $ipaddr;
|
|
Packit |
57988d |
|
|
Packit |
57988d |
my $iaddr = inet_aton($ipaddr);
|
|
Packit |
57988d |
if (defined $iaddr) {
|
|
Packit |
57988d |
my $host = gethostbyaddr($iaddr, AF_INET);
|
|
Packit |
57988d |
if (defined $host) {
|
|
Packit |
57988d |
my $iaddrcheck = gethostbyname($host);
|
|
Packit |
57988d |
if (defined $iaddrcheck) {
|
|
Packit |
57988d |
if ($iaddr == $iaddrcheck) {
|
|
Packit |
57988d |
$rdns{ $ipaddr } = $host;
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
return $rdns{ $ipaddr };
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
# Handle "dovecot: <svc>" and "dovecot: [ID yyyyy mail.info]
|
|
Packit |
57988d |
my $dovecottag = qr/dovecot(?:\[\d+\])?:(?:\s*\[[^]]+\])?/;
|
|
Packit |
57988d |
|
|
Packit |
57988d |
while (defined($ThisLine = <STDIN>)) {
|
|
Packit |
57988d |
# remove timestamp. We can't use *RemoveHeaders because we need the
|
|
Packit |
57988d |
# service name
|
|
Packit |
57988d |
#$ThisLine =~ s/^\w{3} .\d \d\d:\d\d:\d\d (?:[^\s:]* |)//;
|
|
Packit |
57988d |
if ( ($ThisLine =~ /(?:ssl-build-param|ssl-params): SSL parameters regeneration completed/) or
|
|
Packit |
57988d |
($ThisLine =~ /ssl-params: Generating SSL parameters/) or
|
|
Packit |
57988d |
($ThisLine =~ /auth-worker/) or
|
|
Packit |
57988d |
($ThisLine =~ /auth:.*: Connected to/) or
|
|
Packit |
57988d |
($ThisLine =~ /Connection closed/) or
|
|
Packit |
57988d |
($ThisLine =~ /IMAP.*: Connection closed bytes/) or
|
|
Packit |
57988d |
($ThisLine =~ /IMAP.* failed with mbox file/) or
|
|
Packit |
57988d |
($ThisLine =~ /discarded duplicate forward to/) or
|
|
Packit |
57988d |
($ThisLine =~ /discarding vacation response/) or
|
|
Packit |
57988d |
($ThisLine =~ /discarded vacation reply to/)
|
|
Packit |
57988d |
)
|
|
Packit |
57988d |
{
|
|
Packit |
57988d |
# We don't care about these
|
|
Packit |
57988d |
} elsif ( $ThisLine =~ /Killed with signal /) {
|
|
Packit |
57988d |
$End++;
|
|
Packit |
57988d |
} elsif ( $ThisLine =~ /Dovecot (v\d[^ ]* |)starting up/) {
|
|
Packit |
57988d |
$Restarts++;
|
|
Packit |
57988d |
$End = 0;
|
|
Packit |
57988d |
} elsif ( ( ($User, $Host) = ( $ThisLine =~ /^pop3-login: Login: (.*?) \[(.*)\]/ ) ) or
|
|
Packit |
57988d |
( ($User, $Host) = ( $ThisLine =~ /^pop3-login: Info: Login: user=\<(.*?)\>.*rip=(.*)\, lip=/ ) ) ) {
|
|
Packit |
57988d |
if ($Host !~ /$IgnoreHost/) {
|
|
Packit |
57988d |
$Host = hostName($Host);
|
|
Packit |
57988d |
$Login{$User}{$Host}++;
|
|
Packit |
57988d |
$LoginPOP3{$User}++;
|
|
Packit |
57988d |
$ConnectionPOP3{$Host}++;
|
|
Packit |
57988d |
$Connection{$Host}++;
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
} elsif ( ( ($User, $Host) = ( $ThisLine =~ /^imap-login: Login: (.*?) \[(.*)\]/ ) ) or
|
|
Packit |
57988d |
( ($User, $Host) = ( $ThisLine =~ /^imap-login: Info: Login: user=\<(.*?)\>.*rip=(.*)\, lip=/ ) ) ) {
|
|
Packit |
57988d |
if ($Host !~ /$IgnoreHost/) {
|
|
Packit |
57988d |
$Host = hostName($Host);
|
|
Packit |
57988d |
$Login{$User}{$Host}++;
|
|
Packit |
57988d |
$LoginIMAP{$User}++;
|
|
Packit |
57988d |
$ConnectionIMAP{$Host}++;
|
|
Packit |
57988d |
$Connection{$Host}++;
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
} elsif ( ($User, $Host) = ( $ThisLine =~ /managesieve-login: Login: user=\<(.*?)\>.*rip=(.*)\, lip=/ ) ) {
|
|
Packit |
57988d |
if ($Host !~ /$IgnoreHost/) {
|
|
Packit |
57988d |
$Host = hostName($Host);
|
|
Packit |
57988d |
$SieveLogin{$User}{$Host}++;
|
|
Packit |
57988d |
$LoginSieve{$User}++;
|
|
Packit |
57988d |
$ConnectionSieve{$Host}++;
|
|
Packit |
57988d |
$Connection{$Host}++;
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
# 'lda' for dovecot 2.0, 'deliver' for earlier versions
|
|
Packit |
57988d |
} elsif ( ($User, $Mailbox) = ( $ThisLine =~ /^$dovecottag (?:lda|deliver)\((.*)\): msgid=.*: saved mail to (.*)/ ) ) {
|
|
Packit |
57988d |
$Deliver{$User}{$Mailbox}++;
|
|
Packit |
57988d |
|
|
Packit |
57988d |
# For Sieve-based delivery
|
|
Packit |
57988d |
} elsif ( ($User, $Mailbox) = ( $ThisLine =~ /^$dovecottag (?:lda|deliver)\((.*)\): sieve: msgid=.*: stored mail into mailbox '(.*)'/ ) ) {
|
|
Packit |
57988d |
$Deliver{$User}{$Mailbox}++;
|
|
Packit |
57988d |
|
|
Packit |
57988d |
# LMTP-based delivery
|
|
Packit |
57988d |
} elsif ( ($User, $Mailbox) = ( $ThisLine =~ /^$dovecottag lmtp\(\d+, (.*)\): [^:]+: msgid=.*: saved mail to (.*)/ ) ) {
|
|
Packit |
57988d |
# dovecot: [ID 583609 mail.info] lmtp(12782, cloyce@headgear.org): jBt1EfjCMk3uMQAAm9eMBA: msgid=<4D32DB1F.3080707@c-dot.co.uk>: saved mail to INBOX
|
|
Packit |
57988d |
$Deliver{$User}{$Mailbox}++;
|
|
Packit |
57988d |
|
|
Packit |
57988d |
# LMTP-based Sieve delivery
|
|
Packit |
57988d |
} elsif ( ($User, $Mailbox) = ( $ThisLine =~ /^$dovecottag lmtp\(\d+, (.*)\): .*: sieve: msgid=.*: stored mail into mailbox '(.*)'/ ) ) {
|
|
Packit |
57988d |
$Deliver{$User}{$Mailbox}++;
|
|
Packit |
57988d |
|
|
Packit |
57988d |
# sieve forward
|
|
Packit |
57988d |
} elsif (($User, $Recip) = ($ThisLine =~ /^$dovecottag (?:lda|deliver)\((.*)\): sieve: msgid=.* forwarded to \<(.*)\>/)) {
|
|
Packit |
57988d |
$Forwarded{$User}{$Recip}++;
|
|
Packit |
57988d |
|
|
Packit |
57988d |
# sieve vacation
|
|
Packit |
57988d |
} elsif (($User, $Recip) = ($ThisLine =~ /^$dovecottag (?:lda|deliver|lmtp)\((?:\d+, )?(.*)\):(?: .*:)? sieve: msgid=.* sent vacation response to \<(.*)\>/)) {
|
|
Packit |
57988d |
$VacationResponse{$User}{$Recip}++;
|
|
Packit |
57988d |
|
|
Packit |
57988d |
} elsif (($User, $Recip) = ($ThisLine =~ /^$dovecottag (?:lda|deliver|lmtp)\((?:\d+, )?(.*)\):(?: .*:)? sieve: msgid=.* discarded duplicate vacation response to \<(.*)\>/ )) {
|
|
Packit |
57988d |
$VacationDup{$User}{$Recip}++;
|
|
Packit |
57988d |
|
|
Packit |
57988d |
} elsif ( $ThisLine =~ /^$dovecottag (?:lda|deliver|lmtp)\(.*\): .*sieve: msgid=.* marked message to be discarded if not explicitly delivered/ ) {
|
|
Packit |
57988d |
# dovecot: lda(joe): sieve: msgid=<m$01$@com>: marked message to be discarded if not explicitly delivered (discard action)
|
|
Packit |
57988d |
# IGNORE
|
|
Packit |
57988d |
} elsif ( $ThisLine =~ /^$dovecottag lmtp\(.*\): Connect from/ ) {
|
|
Packit |
57988d |
# dovecot: [ID 583609 mail.info] lmtp(12782): Connect from local: 1 Time(s)
|
|
Packit |
57988d |
# IGNORE
|
|
Packit |
57988d |
|
|
Packit |
57988d |
} elsif ( $ThisLine =~ /^$dovecottag lmtp\(.*\): Disconnect from/ ) {
|
|
Packit |
57988d |
# dovecot: [ID 583609 mail.info] lmtp(12782): Disconnect from local: Client quit: 1 Time(s)
|
|
Packit |
57988d |
# IGNORE
|
|
Packit |
57988d |
|
|
Packit |
57988d |
|
|
Packit |
57988d |
# This is for Dovecot 1.0 series
|
|
Packit |
57988d |
} elsif ( ($User, $Host) = ( $ThisLine =~ /^$dovecottag pop3-login: Login: user=\<(.*?)\>.*rip=(.*)\, lip=/ ) ) {
|
|
Packit |
57988d |
if ($Host !~ /$IgnoreHost/) {
|
|
Packit |
57988d |
$Host = hostName($Host);
|
|
Packit |
57988d |
$Login{$User}{$Host}++;
|
|
Packit |
57988d |
$LoginPOP3{$User}++;
|
|
Packit |
57988d |
$ConnectionPOP3{$Host}++;
|
|
Packit |
57988d |
$Connection{$Host}++;
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
} elsif ( ($User, $Host) = ( $ThisLine =~ /^$dovecottag imap-login: Login: user=\<(.*?)\>.*rip=(.*)\, lip=/) ) {
|
|
Packit |
57988d |
if ($Host !~ /$IgnoreHost/) {
|
|
Packit |
57988d |
$Host = hostName($Host);
|
|
Packit |
57988d |
$Login{$User}{$Host}++;
|
|
Packit |
57988d |
$LoginIMAP{$User}++;
|
|
Packit |
57988d |
$ConnectionIMAP{$Host}++;
|
|
Packit |
57988d |
$Connection{$Host}++;
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
# Dovecot 2.0 proxy
|
|
Packit |
57988d |
} elsif ( ($User, $Host) = ( $ThisLine =~ /^$dovecottag pop3-login: proxy\((.*)\): started proxying to .*: user=<.*>, method=.*, rip=(.*), lip=/ ) ) {
|
|
Packit |
57988d |
if ($Host !~ /$IgnoreHost/) {
|
|
Packit |
57988d |
$ProxyLogin{$User}{$Host}++;
|
|
Packit |
57988d |
$ProxyLoginPOP3{$User}++;
|
|
Packit |
57988d |
$ProxyConnectionPOP3{$Host}++;
|
|
Packit |
57988d |
$ProxyConnection{$Host}++;
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
} elsif ( ($User, $Host) = ( $ThisLine =~ /^$dovecottag imap-login: proxy\((.*)\): started proxying to .*: user=<.*>, method=.*, rip=(.*), lip=/ ) ) {
|
|
Packit |
57988d |
if ($Host !~ /$IgnoreHost/) {
|
|
Packit |
57988d |
$ProxyLogin{$User}{$Host}++;
|
|
Packit |
57988d |
$ProxyLoginIMAP{$User}++;
|
|
Packit |
57988d |
$ProxyConnectionIMAP{$Host}++;
|
|
Packit |
57988d |
$ProxyConnection{$Host}++;
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
} elsif ( ($Reason) = ( $ThisLine =~ /proxy\(.*\): disconnecting .* \(Disconnected (.*)\)/ ) ) {
|
|
Packit |
57988d |
$ProxyDisconnected{$Reason}++;
|
|
Packit |
57988d |
|
|
Packit |
57988d |
} elsif ($ThisLine =~ /Disconnected (\[|top)/) {
|
|
Packit |
57988d |
$Disconnected{"no reason"}++;
|
|
Packit |
57988d |
} elsif (($Reason) = ($ThisLine =~ /Disconnected: (.*) \[/) ) {
|
|
Packit |
57988d |
$Disconnected{$Reason}++;
|
|
Packit |
57988d |
} elsif (($Reason) = ($ThisLine =~ /Disconnected: (.*) (bytes|top|in)=.*/) ) {
|
|
Packit |
57988d |
$Disconnected{$Reason}++;
|
|
Packit |
57988d |
} elsif (($Reason) = ($ThisLine =~ /Disconnected \((.*)\):/) ) {
|
|
Packit |
57988d |
$Disconnected{$Reason}++;
|
|
Packit |
57988d |
} elsif ($ThisLine =~ /Disconnected (bytes|top)=.*/) {
|
|
Packit |
57988d |
$Disconnected{"No reason"}++;
|
|
Packit |
57988d |
} elsif ($ThisLine =~ /Server shutting down./) {
|
|
Packit |
57988d |
$ConnectionCl{"Server shutting down"}++;
|
|
Packit |
57988d |
} elsif (($Reason, $Host) = ($ThisLine =~ /TLS initialization failed/) ) {
|
|
Packit |
57988d |
$TLSInitFail++;
|
|
Packit |
57988d |
} elsif (($Host) = ($ThisLine =~ /Aborted login:.* rip=(.*),/) ) {
|
|
Packit |
57988d |
$Host = hostName($Host);
|
|
Packit |
57988d |
$Aborted{$Host}++;
|
|
Packit |
57988d |
} elsif (($Host) = ($ThisLine =~ /Aborted login \[(.*)\]/) ) {
|
|
Packit |
57988d |
$Host = hostName($Host);
|
|
Packit |
57988d |
$Aborted{$Host}++;
|
|
Packit |
57988d |
} elsif (($Reason) = ($ThisLine =~ /Aborted login \((.*)\):/)) {
|
|
Packit |
57988d |
$Aborted{$Reason}++;
|
|
Packit |
57988d |
} elsif (($user, $rip, $lip) = ($ThisLine =~ /Maximum number of connections.* exceeded.* user=<([^>]+)>.*rip=([^,]+), lip=([^,]+)/)) {
|
|
Packit |
57988d |
# dovecot: [ID 583609 mail.info] imap-login: Maximum number of connections from user+IP exceeded (mail_max_userip_connections=10): user=<cloyce@headgear.org>, method=CRAM-MD5, rip=102.225.17.52, lip=14.105.322.67, TLS
|
|
Packit |
57988d |
$LimitExceeded{"max_userip_connections: $user from $rip to $lip"}++;
|
|
Packit |
57988d |
|
|
Packit |
57988d |
# This is for Dovecot 1.0 series
|
|
Packit |
57988d |
# Overly general matches in this section -mgt
|
|
Packit |
57988d |
|
|
Packit |
57988d |
} elsif ($ThisLine =~ /Disconnected for inactivity/) {
|
|
Packit |
57988d |
$Disconnected{"Inactivity"}++;
|
|
Packit |
57988d |
} elsif ($ThisLine =~ /Disconnected in IDLE/) {
|
|
Packit |
57988d |
$Disconnected{"in IDLE"}++;
|
|
Packit |
57988d |
} elsif ($ThisLine =~ /Disconnected in APPEND/) {
|
|
Packit |
57988d |
$Disconnected{"in APPEND"}++;
|
|
Packit |
57988d |
} elsif (($ThisLine =~ /Disconnected$/) or
|
|
Packit |
57988d |
($ThisLine =~ /(IMAP|POP3)\(.+\): Disconnected (bytes|top|rip|user|method)=/) or
|
|
Packit |
57988d |
($ThisLine =~ /(imap\-login|pop3\-login): Disconnected: (bytes|top|rip|user|method)=/) ) {
|
|
Packit |
57988d |
$Disconnected{"no reason"}++;
|
|
Packit |
57988d |
} elsif ( (($Reason) = ($ThisLine =~ /(?:IMAP|POP3).+: Disconnected: (.+) (bytes|top)=/i)) or
|
|
Packit |
57988d |
(($Reason) = ($ThisLine =~ /(?:imap\-login|pop3\-login): Disconnected: \(?(.+)\)?: /)) or
|
|
Packit |
57988d |
#This one should go away also -mgt
|
|
Packit |
57988d |
(($Reason) = ($ThisLine =~ /IMAP.+: Disconnected: (.+)/i)) ) {
|
|
Packit |
57988d |
$Disconnected{$Reason}++;
|
|
Packit |
57988d |
} elsif ($ThisLine =~ /(IMAP|POP3).+: Connection closed (top|bytes)=/i) {
|
|
Packit |
57988d |
$ConnectionCl{"no reason"}++;
|
|
Packit |
57988d |
} elsif ( ($Reason) = ($ThisLine =~ /(?:IMAP|POP3).+: Connection closed: (.*) (?:bytes|method|top|rip|user)=/i) ) {
|
|
Packit |
57988d |
$ConnectionCl{$Reason}++;
|
|
Packit |
57988d |
} elsif ($ThisLine =~ /(IMAP|POP3).+: (Connection closed.*)/) {
|
|
Packit |
57988d |
$Disconnected{$2}++;
|
|
Packit |
57988d |
} elsif (($Host) = ($ThisLine =~ /(?:imap\-login|pop3\-login): Aborted login: .*rip=(?:::ffff:)?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/) ) {
|
|
Packit |
57988d |
$Aborted{$Host}++;
|
|
Packit |
57988d |
} elsif (($Error) = ($ThisLine =~ /child \d* (?:\(login\) )?returned error (.*)/)) {
|
|
Packit |
57988d |
# dovecot: child 23747 (login) returned error 89
|
|
Packit |
57988d |
# dovecot: log: Error: service(auth): child 19654 returned error 89 (Fatal failure)
|
|
Packit |
57988d |
$ChildErr{$Error}++;
|
|
Packit |
57988d |
} elsif (($Name) = ($ThisLine =~ /$dovecottag IMAP\((.*)\): .*(.*) failed: Disk quota exceeded/i)) {
|
|
Packit |
57988d |
# dovecot: IMAP(podracka): mkdir(/home/LF/KLINIKY/podracka/mail/.imap/saved-messages) failed: Disk quota exceeded
|
|
Packit |
57988d |
$DiskQuotaExceed{$Name}++;
|
|
Packit |
57988d |
} else {
|
|
Packit |
57988d |
# Report any unmatched entries...
|
|
Packit |
57988d |
chomp($ThisLine);
|
|
Packit |
57988d |
$OtherList{$ThisLine}++;
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
################################################
|
|
Packit |
57988d |
|
|
Packit |
57988d |
if ( $End ) {
|
|
Packit |
57988d |
print "\nDovecot was killed, and not restarted afterwards.\n";
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
if ( ( $Detail >=5 ) and $Restarts ) {
|
|
Packit |
57988d |
print "\nDovecot restarted $Restarts time(s).\n";
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
if ( ( $Detail >= 5 ) and (keys %Connection)) {
|
|
Packit |
57988d |
print "\n[Dovecot IMAP and POP3] Connections:".
|
|
Packit |
57988d |
"\n====================================".
|
|
Packit |
57988d |
"\nPOP3 IMAP Total Host".
|
|
Packit |
57988d |
"\n" . "-" x 72;
|
|
Packit |
57988d |
|
|
Packit |
57988d |
$TLSInitFail = 0;
|
|
Packit |
57988d |
foreach $Host (sort { $Connection{$b} <=> $Connection{$a} }
|
|
Packit |
57988d |
keys %Connection) {
|
|
Packit |
57988d |
$Total = $Connection{$Host};
|
|
Packit |
57988d |
if (defined ($ConnectionPOP3{$Host})) {
|
|
Packit |
57988d |
$Conns = $ConnectionPOP3{$Host};
|
|
Packit |
57988d |
} else {
|
|
Packit |
57988d |
$Conns = 0;
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
if (defined ($ConnectionIMAP{$Host})) {
|
|
Packit |
57988d |
$IMAP = $ConnectionIMAP{$Host};
|
|
Packit |
57988d |
} else {
|
|
Packit |
57988d |
$IMAP = 0;
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
# Cleanly display IPv4 addresses
|
|
Packit |
57988d |
$Host=~ s/::ffff://;
|
|
Packit |
57988d |
printf "\n%4s %4s %5s %s", $Conns, $IMAP, $Total, $Host;
|
|
Packit |
57988d |
$POP3Count += $Conns;
|
|
Packit |
57988d |
$IMAPCount += $IMAP;
|
|
Packit |
57988d |
$TotalCount += $Total;
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
print "\n" . "-" x 72;
|
|
Packit |
57988d |
printf "\n%4s %4s %5s %s", $POP3Count, $IMAPCount, $TotalCount, "Total";
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
if (keys %Deliver) {
|
|
Packit |
57988d |
my $DeliverCount = 0;
|
|
Packit |
57988d |
my $DeliverUserCount = {};
|
|
Packit |
57988d |
foreach my $User (keys %Deliver) {
|
|
Packit |
57988d |
foreach my $Mailbox (keys %{$Deliver{$User}}) {
|
|
Packit |
57988d |
$DeliverUserCount{$User} += $Deliver{$User}{$Mailbox};
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
$DeliverCount += $DeliverUserCount{$User};
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
printf "\n" if ($Detail >= 5);
|
|
Packit |
57988d |
printf "\nDovecot Deliveries: %s", $DeliverCount;
|
|
Packit |
57988d |
if ($Detail >= 5) {
|
|
Packit |
57988d |
foreach my $User (sort { $DeliverUserCount{$b} <=> $DeliverUserCount{$a} }
|
|
Packit |
57988d |
keys %DeliverUserCount) {
|
|
Packit |
57988d |
printf "\n %4s %s", $DeliverUserCount{$User}, $User;
|
|
Packit |
57988d |
if ($Detail >= 10) {
|
|
Packit |
57988d |
foreach my $Mailbox (sort {
|
|
Packit |
57988d |
$Deliver{$User}{$b} <=> $Deliver{$User}{$a}
|
|
Packit |
57988d |
} keys %{$Deliver{$User}}) {
|
|
Packit |
57988d |
printf "\n %4s %s", $Deliver{$User}{$Mailbox}, $Mailbox;
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
if (($Detail >= 10) and (keys %Forwarded)) {
|
|
Packit |
57988d |
$TotalForwarded = 0;
|
|
Packit |
57988d |
|
|
Packit |
57988d |
print "\n\nDovecot LDA sieve forwards:";
|
|
Packit |
57988d |
foreach $User (sort keys %Forwarded) {
|
|
Packit |
57988d |
print "\n\n User $User";
|
|
Packit |
57988d |
foreach my $Recip (sort keys %{$Forwarded{$User}}) {
|
|
Packit |
57988d |
print "\n To $Recip: $Forwarded{$User}{$Recip} time(s)";
|
|
Packit |
57988d |
$TotalForwarded += $Forwarded{$User}{$Recip};
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
print "\n\n Total: $TotalForwarded Time(s)";
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
if (($Detail >= 10) and (keys %VacationResponse)) {
|
|
Packit |
57988d |
$TotalVacResp = 0;
|
|
Packit |
57988d |
print "\n\nDovecot LDA sieve vacation responses:";
|
|
Packit |
57988d |
foreach my $User (sort keys %VacationResponse) {
|
|
Packit |
57988d |
print "\n\n User $User";
|
|
Packit |
57988d |
foreach my $Recip (sort keys %{$VacationResponse{$User}}) {
|
|
Packit |
57988d |
print "\n To $Recip: $VacationResponse{$User}{$Recip} time(s)";
|
|
Packit |
57988d |
$TotalVacResp += $VacationResponse{$User}{$Recip};
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
print "\n\n Total: $TotalVacResp Time(s)";
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
if (($Detail >= 10) and (keys %VacationDup)) {
|
|
Packit |
57988d |
$TotalVacDup = 0;
|
|
Packit |
57988d |
print "\n\nDovecot LDA sieve duplicate vacation responses not sent:";
|
|
Packit |
57988d |
foreach my $User (sort keys %VacationDup) {
|
|
Packit |
57988d |
print "\n User $User";
|
|
Packit |
57988d |
foreach my $Recip (sort keys %{$VacationDup{$User}}) {
|
|
Packit |
57988d |
print "\n To $Recip: $VacationDup{$User}{$Recip} time(s)";
|
|
Packit |
57988d |
$TotalVacDup += $VacationDup{$User}{$Recip};
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
print "\n\n Total: $TotalVacDup Time(s)";
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
|
|
Packit |
57988d |
if (keys %Login) {
|
|
Packit |
57988d |
my $LoginCount = 0;
|
|
Packit |
57988d |
my $LoginUserCount = {};
|
|
Packit |
57988d |
foreach my $User (keys %Login) {
|
|
Packit |
57988d |
foreach my $Host (keys %{$Login{$User}}) {
|
|
Packit |
57988d |
$LoginUserCount{$User} += $Login{$User}{$Host};
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
$LoginCount += $LoginUserCount{$User};
|
|
Packit |
57988d |
$LoginPOP3{$User} = 0 if $LoginPOP3{$User} <= 0;
|
|
Packit |
57988d |
$LoginIMAP{$User} = 0 if $LoginIMAP{$User} <= 0;
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
printf "\n" if ($Detail >= 5);
|
|
Packit |
57988d |
printf "\nDovecot IMAP and POP3 Successful Logins: %s", $LoginCount;
|
|
Packit |
57988d |
if ($Detail >= 5) {
|
|
Packit |
57988d |
foreach my $User (sort { $LoginUserCount{$b} <=> $LoginUserCount{$a} }
|
|
Packit |
57988d |
keys %LoginUserCount) {
|
|
Packit |
57988d |
printf("\n %4s %s", $LoginUserCount{$User}, $User);
|
|
Packit |
57988d |
if ($Detail >= 10) {
|
|
Packit |
57988d |
printf(" (%s POP3, %s IMAP)", $LoginPOP3{$User}, $LoginIMAP{$User});
|
|
Packit |
57988d |
foreach my $Host (sort { $Login{$User}{$b} <=> $Login{$User}{$a} }
|
|
Packit |
57988d |
keys %{$Login{$User}}) {
|
|
Packit |
57988d |
$HostCount = $Login{$User}{$Host};
|
|
Packit |
57988d |
# Cleanly display IPv4 addresses
|
|
Packit |
57988d |
$Host=~ s/::ffff://;
|
|
Packit |
57988d |
printf "\n %4s %s", $Login{$User}{$Host}, $Host;
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
if ( ( $Detail >= 10 ) and (keys %SieveLogin)) {
|
|
Packit |
57988d |
print "\n\nDovecot ManageSieve Successful Logins:";
|
|
Packit |
57988d |
$LoginCount = 0;
|
|
Packit |
57988d |
foreach my $User (sort keys %SieveLogin) {
|
|
Packit |
57988d |
print "\n\n User $User:";
|
|
Packit |
57988d |
$UserCount = 0;
|
|
Packit |
57988d |
$NumHosts = 0;
|
|
Packit |
57988d |
foreach $Host (sort keys %{$SieveLogin{$User}}) {
|
|
Packit |
57988d |
$NumHosts++;
|
|
Packit |
57988d |
$HostCount = $SieveLogin{$User}{$Host};
|
|
Packit |
57988d |
# Cleanly display IPv4 addresses
|
|
Packit |
57988d |
$Host=~ s/::ffff://;
|
|
Packit |
57988d |
print "\n From $Host: $HostCount Time(s)";
|
|
Packit |
57988d |
$UserCount += $HostCount;
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
$LoginCount += $UserCount;
|
|
Packit |
57988d |
if ($NumHosts > 1) {
|
|
Packit |
57988d |
print "\n Total: $UserCount Time(s)";
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
print "\n\nTotal: $LoginCount successful ManageSieve logins";
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
if (keys %LimitExceeded) {
|
|
Packit |
57988d |
print "\n\nDovecot limits exceeded:";
|
|
Packit |
57988d |
foreach my $Reason (sort keys %LimitExceeded) {
|
|
Packit |
57988d |
print "\n $Reason: $LimitExceeded{$Reason} Time(s)";
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
if (keys %Disconnected) {
|
|
Packit |
57988d |
my $Disconnects = 0;
|
|
Packit |
57988d |
foreach my $Reason (%Disconnected) {
|
|
Packit |
57988d |
$Disconnects += $Disconnected{$Reason};
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
printf "\n" if ($Detail >= 5);
|
|
Packit |
57988d |
printf "\nDovecot disconnects: %s", $Disconnects;
|
|
Packit |
57988d |
if ($Detail >= 5) {
|
|
Packit |
57988d |
foreach my $Reason (sort { $Disconnected{$b} <=> $Disconnected{$a} }
|
|
Packit |
57988d |
keys %Disconnected) {
|
|
Packit |
57988d |
printf "\n %4s %s", $Disconnected{$Reason}, $Reason;
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
if (keys %ConnectionCl) {
|
|
Packit |
57988d |
print "\n\nDovecot connections closed:";
|
|
Packit |
57988d |
foreach my $Reason (sort keys %ConnectionCl) {
|
|
Packit |
57988d |
print "\n $Reason: $ConnectionCl{$Reason} Time(s)";
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
if (keys %ChildErr) {
|
|
Packit |
57988d |
print "\n\nDovecot child error:";
|
|
Packit |
57988d |
foreach my $Error (sort keys %ChildErr) {
|
|
Packit |
57988d |
print "\n error number ". $Error . ": ". $ChildErr{$Error} ." Time(s)";
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
if ((keys %Aborted) && ($Detail >= 10)) {
|
|
Packit |
57988d |
print "\n\nLogout/aborts:";
|
|
Packit |
57988d |
foreach my $Host (sort keys %Aborted) {
|
|
Packit |
57988d |
print "\n $Host: $Aborted{$Host} Time(s)";
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
if ($TLSInitFail > 0) {
|
|
Packit |
57988d |
print "\n\nTLS Initialization failed $TLSInitFail Time(s)";
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
if (keys %DiskQuotaExceed) {
|
|
Packit |
57988d |
print "\n\nDisk quota exceeded:";
|
|
Packit |
57988d |
foreach my $Name (sort keys %DiskQuotaExceed) {
|
|
Packit |
57988d |
print "\n disk quota for user '". $Name . "' exceeded: ". $DiskQuotaExceed{$Name} ." Time(s)";
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
if ( ( $Detail >= 5 ) and (keys %ProxyLogin)) {
|
|
Packit |
57988d |
print "\n\nDovecot Proxy IMAP and POP3 Successful Logins:";
|
|
Packit |
57988d |
$LoginCount = 0;
|
|
Packit |
57988d |
foreach my $User (sort keys %ProxyLogin) {
|
|
Packit |
57988d |
print "\n User $User:";
|
|
Packit |
57988d |
if ( ($Detail >= 10) and ($ProxyLoginPOP3{$User} > 0 || $ProxyLoginIMAP{$User} > 0) ) {
|
|
Packit |
57988d |
print " (";
|
|
Packit |
57988d |
if ($ProxyLoginPOP3{$User} > 0) { print "$ProxyLoginPOP3{$User} POP3"; };
|
|
Packit |
57988d |
if ($ProxyLoginPOP3{$User} > 0 && $ProxyLoginIMAP{$User} > 0) { print "/"; };
|
|
Packit |
57988d |
if ($ProxyLoginIMAP{$User} > 0) { print "$ProxyLoginIMAP{$User} IMAP"; };
|
|
Packit |
57988d |
print ")";
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
$UserCount = 0;
|
|
Packit |
57988d |
$NumHosts = 0;
|
|
Packit |
57988d |
foreach $Host (sort keys %{$ProxyLogin{$User}}) {
|
|
Packit |
57988d |
$NumHosts++;
|
|
Packit |
57988d |
$HostCount = $ProxyLogin{$User}{$Host};
|
|
Packit |
57988d |
# Cleanly display IPv4 addresses
|
|
Packit |
57988d |
$Host=~ s/::ffff://;
|
|
Packit |
57988d |
print "\n From $Host: $HostCount Time(s)" if ($Detail >= 10);
|
|
Packit |
57988d |
$UserCount += $HostCount;
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
$LoginCount += $UserCount;
|
|
Packit |
57988d |
if ($Detail >= 10) {
|
|
Packit |
57988d |
if ($NumHosts > 1) {
|
|
Packit |
57988d |
print "\n Total: $UserCount Time(s)\n";
|
|
Packit |
57988d |
} else {
|
|
Packit |
57988d |
print "\n";
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
} elsif ($Detail >= 5) {
|
|
Packit |
57988d |
print " $UserCount Time(s)";
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
print "\nTotal: $LoginCount successful logins";
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
if (keys %ProxyDisconnected) {
|
|
Packit |
57988d |
print "\n\nDovecot Proxy disconnects:\n";
|
|
Packit |
57988d |
foreach my $Reason (sort keys %ProxyDisconnected) {
|
|
Packit |
57988d |
print " $Reason: $ProxyDisconnected{$Reason} Time(s)\n";
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
if (keys %OtherList) {
|
|
Packit |
57988d |
print "\n\n**Unmatched Entries**\n";
|
|
Packit |
57988d |
foreach $line (sort {$a cmp $b} keys %OtherList) {
|
|
Packit |
57988d |
print " $line: $OtherList{$line} Time(s)\n";
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
}
|
|
Packit |
57988d |
|
|
Packit |
57988d |
exit(0);
|
|
Packit |
57988d |
|
|
Packit |
57988d |
|
|
Packit |
57988d |
# vi: shiftwidth=3 tabstop=3 syntax=perl et
|
|
Packit |
57988d |
# Local Variables:
|
|
Packit |
57988d |
# mode: perl
|
|
Packit |
57988d |
# perl-indent-level: 3
|
|
Packit |
57988d |
# indent-tabs-mode: nil
|
|
Packit |
57988d |
# End:
|