package Apache::LogIgnore;
$Apache::LogIgnore::VERSION = 0.03;
use 5.006;
use strict;
use Apache::Constants qw(:common);
sub handler {
my $r = shift;
my $debugflag = $r->dir_config("DebugFlag");
my ($marker, $host, $referer, $agent, $from, $status, $type, $minsize, $maxsize);
#Remote Host
my $ignorehost = $r->dir_config("IgnoreHost");
($marker,$host) = $ignorehost =~ /^(\!)?(.*)$/;
return DONE if $r->get_remote_host eq $host && !$marker;
return DONE if $r->get_remote_host ne $host && $marker;
warn "Checked Remote Host" if $debugflag;
#User Agent
my $ignoreagent = $r->dir_config("IgnoreAgent");
($marker,$agent) = $ignoreagent =~ /^(\!)?(.*)$/;
return DONE if $r->header_in("User-Agent") =~ /$agent/i && $r->header_in("User-Agent") && $r->dir_config("IgnoreAgent") && !$marker;
return DONE if $r->header_in("User-Agent") !~ /$agent/i && $r->header_in("User-Agent") && $r->dir_config("IgnoreAgent") && $marker;
warn "Checked User Agent" if $debugflag;
#Referer
my $ignorereferer = $r->dir_config("IgnoreReferer");
($marker,$referer) = $ignorereferer =~ /^(\!)?(.*)$/;
return DONE if $r->header_in("Referer") =~ /$referer/i && $r->header_in("Referer") && $r->dir_config("IgnoreReferer") && !$marker;
return DONE if $r->header_in("Referer") !~ /$referer/i && $r->header_in("Referer") && $r->dir_config("IgnoreReferer") && $marker;
warn "Checked Referer" if $debugflag;
#From
my $ignorefrom = $r->dir_config("IgnoreFrom");
($marker,$from) = $ignorefrom =~ /^(\!)?(.*)$/;
return DONE if $r->header_in("From") =~ /$from/i && $r->header_in("From") && $r->dir_config("IgnoreFrom") && !$marker;
return DONE if $r->header_in("From") !~ /$from/i && $r->header_in("From") && $r->dir_config("IgnoreFrom") && $marker;
warn "Checked From" if $debugflag;
#Minimum Size
my $filesize = -s $r->filename;
my $ignoreminsize = $r->dir_config("IgnoreMinSize");
($marker,$minsize) = $ignoreminsize =~ /^(\!)?(.*)$/;
return DONE if $filesize <= $minsize && $filesize && $r->dir_config("IgnoreMinSize") && !$marker;
return DONE if $filesize > $minsize && $filesize && $r->dir_config("IgnoreMinSize") && $marker;
warn "Checked Minimum Size" if $debugflag;
#Maximum Size
my $ignoremaxsize = $r->dir_config("IgnoreMaxSize");
($marker,$maxsize) = $ignoremaxsize =~ /^(\!)?(.*)$/;
return DONE if $filesize >= $maxsize && $filesize && $r->dir_config("IgnoreMaxSize") && !$marker;
return DONE if $filesize < $maxsize && $filesize && $r->dir_config("IgnoreMaxSize") && $marker;
warn "Checked Maximum Size" if $debugflag;
#Type
my $ignoretype = $r->dir_config("IgnoreType");
($marker,$type) = $ignoretype =~ /^(\!)?(.*)$/;
return DONE if $r->content_type =~ /$type/i && $r->content_type && $r->dir_config("IgnoreType") && !$marker;
return DONE if $r->content_type !~ /$type/i && $r->content_type && $r->dir_config("IgnoreType") && $marker;
warn "Checked Content Type" if $debugflag;
#Status
my $ignorestatus = $r->dir_config("IgnoreStatus");
($marker,$status) = $ignorestatus =~ /^(\!)?(.*)$/;
return DONE if $r->status eq $status && $r->status && $r->dir_config("IgnoreStatus") && !$marker;
return DONE if $r->status ne $status && $r->status && $r->dir_config("IgnoreStatus") && $marker;
warn "Checked Status" if $debugflag;
return OK;
}
1;
__END__
=head1 NAME
Apache::LogIgnore - mod_perl log handler to ignore connections
=head1 SYNOPSIS
in your httpd.conf file, put this in the mod_perl load block (if you have one)
PerlLogHandler Apache::LogIgnore
PerlSetVar DebugFlag 1
#Turn Debugging on
PerlSetVar IgnoreHost 192.168.0.2
#Dont log connections from host
#Exact match
PerlSetVar IgnoreAgent Moz
#Dont log connections using agent
#Containing match, case insensitive
PerlSetVar IgnoreReferer 192.168.0.2
#Dont log connections referred by IP
#Containing match, case insensitive
PerlSetVar IgnoreFrom foo@bar.com
#Dont log connections from Agents with certain E-Mail addresses set
#Containing match, case insensitive
PerlSetVar IgnoreMinSize 100
#Dont log connections below 100 bytes
PerlSetVar IgnoreMaxSize 400000
#Dont log connections above 400000 bytes
PerlSetVar IgnoreType Image
#Dont log connections to certain mime-types
#Containing match, case insensitive
PerlSetVar IgnoreStatus 403
#Dont log status code
#Exact match
=head1 DESCRIPTION
This mod_perl log handler can be used to ignore connections which match the
criteria.
=head1 USING
Use the following settings in your apache config file.
=over 3
=item IgnoreHost 192.168.0.1
This option disables the logging of requests from the specified host.
=back
=over 3
=item IgnoreAgent MSIE
This option disables the logging of requests with a specified browser.
The matching is not exact, the provided keyword is used to match within the
browser signature.
=back
=over 3
=item IgnoreReferer 192.168.0.2
This option disables the logging of requests referred by the specified
host/pageowser. The matching is not exact, the provided keyword is used to
match within the referrer. Some browsers (like Konqueror and Mozilla) don't
send a referrer.
=back
=over 3
=item IgnoreFrom foo@bar.com
This option disables the logging of requests which send the specified E-Mail
address as part of the From tag in the HTTP header.
=back
=over 3
=item IgnoreMinSize 100
This option disables the logging of requests which size is below a number of
bytes.
=back
=over 3
=item IgnoreMaxSize 400000
This option disables the logging of requests which size is above a number of
bytes.
=back
=over 3
=item IgnoreType Image
This option disables the logging of requests for certain mime types. The
matching is not exact, the provided keyword is used to match within the
mime type.
=back
=over 3
=item IgnoreStatus 403
This option disables the logging of requests resulting in a certain status
code.
=back
=over 3
=item DebugFlag 1
Set this to true to get debug information in your error log.
=back
=over 3
=item Negating
You can negate all of the above values with a ! (except DebugFlag).
Example would be :
IgnoreStatus !200
Don't log any request beside the ones resulting in a 200 status.
=back
=head1 EXPORT
None by default.
=head1 VERSION
This is Apache::LogIgnore 0.03.
=head1 AUTHOR
Hendrik Van Belleghem beatnik - at - quickndirty - dot - org
=head1 SEE ALSO
=cut