105 lines
3.5 KiB
Plaintext
105 lines
3.5 KiB
Plaintext
|
#!perl -w
|
||
|
|
||
|
use strict;
|
||
|
use Data::Dumper;
|
||
|
|
||
|
use Qpsmtpd::Address;
|
||
|
|
||
|
sub register_tests {
|
||
|
my $self = shift;
|
||
|
|
||
|
$self->register_test("test_badmailfrom_is_immune_sender", 5);
|
||
|
$self->register_test("test_badmailfrom_match", 7);
|
||
|
$self->register_test("test_badmailfrom_hook_mail", 4);
|
||
|
$self->register_test("test_badmailfrom_rcpt_handler", 2);
|
||
|
}
|
||
|
|
||
|
sub test_badmailfrom_is_immune_sender {
|
||
|
my $self = shift;
|
||
|
|
||
|
my $transaction = $self->qp->transaction;
|
||
|
my $test_email = 'matt@test.com';
|
||
|
my $address = Qpsmtpd::Address->new( "<$test_email>" );
|
||
|
$transaction->sender($address);
|
||
|
ok( $self->is_immune_sender( $transaction->sender, [] ), "empty list");
|
||
|
|
||
|
$address = Qpsmtpd::Address->new( '<>' );
|
||
|
$transaction->sender($address);
|
||
|
ok( $self->is_immune_sender( $transaction->sender, ['bad@example.com'] ), "null sender");
|
||
|
|
||
|
$address = Qpsmtpd::Address->new( '<matt@>' );
|
||
|
$transaction->sender($address);
|
||
|
ok( $self->is_immune_sender( $transaction->sender, ['bad@example.com'] ), "missing host");
|
||
|
|
||
|
$address = Qpsmtpd::Address->new( '<@example.com>' );
|
||
|
$transaction->sender($address);
|
||
|
ok( $self->is_immune_sender( $transaction->sender, ['bad@example.com'] ), "missing user");
|
||
|
|
||
|
$address = Qpsmtpd::Address->new( '<matt@example.com>' );
|
||
|
$transaction->sender($address);
|
||
|
ok( ! $self->is_immune_sender( $transaction->sender, ['bad@example.com'] ), "false");
|
||
|
};
|
||
|
|
||
|
sub test_badmailfrom_hook_mail {
|
||
|
my $self = shift;
|
||
|
|
||
|
my $transaction = $self->qp->transaction;
|
||
|
|
||
|
my $test_email = 'matt@test.com';
|
||
|
my $address = Qpsmtpd::Address->new( "<$test_email>" );
|
||
|
$transaction->sender($address);
|
||
|
|
||
|
$self->{_badmailfrom_config} = ['matt@test.net','matt@test.com'];
|
||
|
$self->connection->notes('badmailfrom', '');
|
||
|
my ($r) = $self->hook_mail( $transaction, $address );
|
||
|
ok( $r == 909, "badmailfrom hook_mail");
|
||
|
cmp_ok( $self->connection->notes('naughty'), 'eq', 'Your envelope sender is in my badmailfrom list', "default reason");
|
||
|
|
||
|
$self->{_badmailfrom_config} = ['matt@test.net','matt@test.com Yer a spammin bastert'];
|
||
|
$self->connection->notes('badmailfrom', '');
|
||
|
($r) = $self->hook_mail( $transaction, $address );
|
||
|
ok( $r == 909, "badmailfrom hook_mail");
|
||
|
cmp_ok( $self->connection->notes('naughty'), 'eq', 'Yer a spammin bastert', "custom reason");
|
||
|
};
|
||
|
|
||
|
sub test_badmailfrom_rcpt_handler {
|
||
|
my $self = shift;
|
||
|
|
||
|
my $transaction = $self->qp->transaction;
|
||
|
|
||
|
$transaction->notes('badmailfrom', 'Yer a spammin bastart. Be gon wit yuh.' );
|
||
|
|
||
|
my ($code,$note) = $self->rcpt_handler( $transaction );
|
||
|
|
||
|
ok( $code == 901, 'badmailfrom hook hit');
|
||
|
ok( $note, $note );
|
||
|
}
|
||
|
|
||
|
sub test_badmailfrom_match {
|
||
|
my $self = shift;
|
||
|
|
||
|
# is_match receives ( $from, $bad, $host )
|
||
|
|
||
|
my $r = $self->is_match( 'matt@test.net', 'matt@test.net', 'test.net' );
|
||
|
ok($r, "check_badmailfrom match");
|
||
|
|
||
|
ok( ! $self->is_match( 'matt@test.net', 'matt@test.com', 'tnpi.net' ),
|
||
|
"check_badmailfrom non-match");
|
||
|
|
||
|
ok( $self->is_match( 'matt@test.net', '@test.net', 'test.net' ),
|
||
|
"check_badmailfrom match host");
|
||
|
|
||
|
ok( ! $self->is_match( 'matt@test.net', '@test.not', 'test.net' ),
|
||
|
"check_badmailfrom non-match host");
|
||
|
|
||
|
ok( ! $self->is_match( 'matt@test.net', '@test.net', 'test.not' ),
|
||
|
"check_badmailfrom non-match host");
|
||
|
|
||
|
ok( $self->is_match( 'matt@test.net', 'test.net$', 'tnpi.net' ),
|
||
|
"check_badmailfrom pattern match");
|
||
|
|
||
|
ok( ! $self->is_match( 'matt@test.net', 'test.not$', 'tnpi.net' ),
|
||
|
"check_badmailfrom pattern non-match");
|
||
|
};
|
||
|
|