82 lines
2.0 KiB
Perl
82 lines
2.0 KiB
Perl
#!perl -w
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use Qpsmtpd::Constants;
|
|
|
|
sub register_tests {
|
|
my $self = shift;
|
|
|
|
$self->register_test('test_relay_only', 2);
|
|
$self->register_test('test_is_octet_match', 3);
|
|
$self->register_test('test_is_in_cidr_block', 4);
|
|
$self->register_test('test_is_in_norelayclients', 5);
|
|
}
|
|
|
|
sub test_relay_only {
|
|
my $self = shift;
|
|
|
|
$self->qp->connection->relay_client(0);
|
|
my $r = $self->relay_only();
|
|
cmp_ok( $r, '==', DENY, "relay_only -");
|
|
|
|
$self->qp->connection->relay_client(1);
|
|
$r = $self->relay_only();
|
|
cmp_ok( $r, '==', OK, "relay_only +");
|
|
|
|
$self->qp->connection->relay_client(0);
|
|
};
|
|
|
|
sub test_is_octet_match {
|
|
my $self = shift;
|
|
|
|
$self->populate_relayclients();
|
|
|
|
$self->qp->connection->remote_ip('192.0.1.1');
|
|
ok( $self->is_octet_match(), "match, +");
|
|
|
|
$self->qp->connection->remote_ip('192.51.1.1');
|
|
ok( ! $self->is_octet_match(), "nope, -");
|
|
|
|
$self->qp->connection->remote_ip('203.0.113.0');
|
|
ok( ! $self->is_octet_match(), "nope, -");
|
|
};
|
|
|
|
sub test_is_in_cidr_block {
|
|
my $self = shift;
|
|
|
|
$self->qp->connection->remote_ip('192.0.1.1');
|
|
$self->{_cidr_blocks} = [ '192.0.1.0/24' ];
|
|
ok( $self->is_in_cidr_block(), "match, +" );
|
|
|
|
$self->{_cidr_blocks} = [ '192.0.0.0/24' ];
|
|
ok( ! $self->is_in_cidr_block(), "nope, -" );
|
|
|
|
|
|
$self->qp->connection->remote_ip('fdda:b13d:e431:ae06:00a1::');
|
|
$self->{_cidr_blocks} = [ 'fdda:b13d:e431:ae06::/64' ];
|
|
ok( $self->is_in_cidr_block(), "match, +" );
|
|
|
|
$self->{_cidr_blocks} = [ 'fdda:b13d:e431:be17::' ];
|
|
ok( ! $self->is_in_cidr_block(), "nope, -" );
|
|
};
|
|
|
|
sub test_is_in_norelayclients {
|
|
my $self = shift;
|
|
|
|
my @matches = qw/ 192.0.99.5 192.0.98.1 192.0.98.255 /;
|
|
my @false = qw/ 192.0.99.7 192.0.109.7 /;
|
|
|
|
foreach ( @matches ) {
|
|
$self->qp->connection->remote_ip($_);
|
|
ok( $self->is_in_norelayclients(), "match, + ($_)");
|
|
};
|
|
|
|
foreach ( @false ) {
|
|
$self->qp->connection->remote_ip($_);
|
|
ok( ! $self->is_in_norelayclients(), "match, - ($_)");
|
|
};
|
|
};
|
|
|