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 )