Mail-MtPolicyd
view release on metacpan or search on metacpan
lib/Mail/MtPolicyd/Plugin/RegexList.pm view on Meta::CPAN
);
has '_regex_list' => (
is => 'ro', isa => 'ArrayRef', lazy => 1,
default => sub {
my $self = shift;
return [ @{$self->regex}, @{$self->_file_regex_list} ]
},
);
sub _match_regex_list {
my ( $self, $r, $value ) = @_;
foreach my $regex_str ( @{$self->_regex_list} ) {
my $regex = eval { qr/$regex_str/ };
if( $@ ) {
$self->log($r, "invalid regex $regex: $@");
next;
}
if( $value =~ /$regex/ ) {
return $regex_str;
}
}
return;
}
sub run {
my ( $self, $r ) = @_;
my $value = $r->get( $self->key );
my $session = $r->session;
if( $self->get_uc( $session, 'enabled') eq 'off' ) {
return;
}
if( ! defined $value) {
$self->log($r, 'no attribute \''.$self->key.'\' in request');
return;
}
my ( $regex ) = $r->do_cached( $self->name.'-result',
sub { $self->_match_regex_list($r, $value) } );
if( ( ! $self->invert && defined $regex )
|| ( $self->invert && ! defined $regex ) ) {
$self->log($r, $self->key.'='.$value.' matched '.$self->name);
my $score = $self->get_uc( $session, 'score');
if( defined $score
&& ! $r->is_already_done($self->name.'-score') ) {
$self->add_score($r, $self->name => $score);
}
# apply action
my $action = $self->get_uc( $session, 'action');
if( defined $action ) {
return Mail::MtPolicyd::Plugin::Result->new(
action => $action,
abort => 1,
);
}
# or cascade
if( defined $self->chain ) {
my $chain_result = $self->chain->run( $r );
return( @{$chain_result->plugin_results} );
}
}
return;
}
__PACKAGE__->meta->make_immutable;
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Mail::MtPolicyd::Plugin::RegexList - mtpolicyd plugin for regex matching
=head1 VERSION
version 2.05
=head1 SYNOPSIS
<Plugin regex-whitelist>
module = "RegexList"
key = "request:client_name"
regex = "^mail-[a-z][a-z]0-f[0-9]*\.google\.com$"
regex = "\.bofh-noc\.de$"
# file = "/etc/mtpolicyd/regex-whitelist.txt"
action = "accept"
</Plugin>
=head1 DESCRIPTION
This plugin matches a value against a list of regular expressions
and executes an action if it matched.
=head2 PARAMETERS
The module takes the following parameters:
=over
=item (uc_)enabled (default: "on")
Could be set to 'off' to deactivate check. Could be used to activate/deactivate check per user.
=item key (default: "request:client_address")
Field to query.
=item invert (default: 0)
If set to 1 the logic will be inverted.
( run in 2.079 seconds using v1.01-cache-2.11-cpan-97f6503c9c8 )