52 lines
1.5 KiB
Perl
52 lines
1.5 KiB
Perl
package Polyze::HPostgreyAccept;
|
|
use Moose;
|
|
use Domain::PublicSuffix;
|
|
with 'Polyze::Handler';
|
|
|
|
our $DPSuffix = Domain::PublicSuffix->new;
|
|
|
|
has rreject => (
|
|
is => 'ro',
|
|
isa => 'Polyze::RReject',
|
|
required => 1,
|
|
);
|
|
|
|
sub BUILD { $_[0]->isa_post_day_handler(1); }
|
|
|
|
my $RegClientName = qr[, client_name=([^,]+)];
|
|
my $RegClientAddress = qr[, client_address=([^,]+)];
|
|
my $RegSender = qr[, sender=([^,]+)];
|
|
my $RegRecipient = qr[, recipient=([^,\n]+)];
|
|
|
|
sub scan_line {
|
|
my ($self, $line) = @_;
|
|
if ($line->text =~ m/ postgrey\[[[:digit:]]+\]: action=pass, /) {
|
|
my ($client_name) = ($line->text =~ $RegClientName);
|
|
$client_name //= '';
|
|
my ($client_address) = ($line->text =~ $RegClientAddress);
|
|
$client_address //= '';
|
|
my ($sender) = ($line->text =~ $RegSender);
|
|
$sender //= '';
|
|
my ($recipient) = ($line->text =~ $RegRecipient);
|
|
$recipient //= '';
|
|
|
|
# This is in case $client_name is invalid as a domain name.
|
|
my $root_domain_or_ip =
|
|
$DPSuffix->get_root_domain($client_name) // $client_address;
|
|
# Does the current line match with our rreject?
|
|
my $is_acceptance = (
|
|
$root_domain_or_ip eq $self->rreject->root_domain_or_ip
|
|
&& $sender eq $self->rreject->from
|
|
&& $recipient eq $self->rreject->to
|
|
);
|
|
if ($is_acceptance) {
|
|
$self->rreject->is_later_accepted(1);
|
|
$self->polyze->remove_handler($self);
|
|
}
|
|
}
|
|
return $Polyze::CONTINUE_LINE;
|
|
}
|
|
|
|
no Moose;
|
|
__PACKAGE__->meta->make_immutable;
|