Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,23 @@ on:
pull_request:

jobs:

test:
strategy:
matrix:
os: ["ubuntu-latest"]
perl: ["5.16", "5.32"]
perl-version:
- "5.16"
- "5.26"
- "5.38"
fail-fast: false
runs-on: ubuntu-latest

services:
redis:
image: redis
ports:
- 6379:6379

steps:
- uses: actions/checkout@v4
with:
Expand Down
2 changes: 1 addition & 1 deletion MANIFEST.SKIP
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,4 @@ packaging
^supervise/
^ssl/
^t/config/greylist
^.github
^.github/
10 changes: 9 additions & 1 deletion META.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,24 @@ no_index:
- t
- inc
requires:
CDB_File: 0
Data::Dumper: 0
Date::Parse: 0
File::NFSLock: 0
File::Tail: 0
File::Temp: 0
GeoIP2: 0
IO::Socket::SSL: 0
MIME::Base64: 0
Mail::DKIM: 0
Mail::DMARC: 0
Mail::Header: 0
Mail::SPF: 0
Net::DNS: 0.39
Net::IP: 0
Redis: 0
Time::HiRes: 0
Time::TAI64: 0
version: 0.91
Test::More: 0
Test::Output: 0
version: 1.00
2 changes: 1 addition & 1 deletion Makefile.PL
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ WriteMakefile(
# 'DBI' => 0, # auth_vpopmail_sql and
# 'DBD::mysql' => 0, # log2sql
# 'DBIx::Simple' => 0, # log2sql
'Geo::IP' => 1,
'GeoIP2' => 2,
'Mail::SpamAssassin' => 0,
'Math::Complex' => 0, # geodesic distance in Geo::IP
'PerlIO::gzip' => 0, # gunzip GeoIP databases
Expand Down
4 changes: 2 additions & 2 deletions config.sample/plugins
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ hosts_allow
# connection / informational plugins
#connection_time
#karma penalty_box 1 reject naughty
ident/geoip
#ident/geoip
#ident/p0f /tmp/.p0f_socket version 3
fcrdns

Expand Down Expand Up @@ -90,7 +90,7 @@ spamassassin reject 12
# spamassassin reject 20 munge_subject_threshold 10

# dspam must run after spamassassin for the learn_from_sa feature to work
dspam autolearn spamassassin reject 0.95
#dspam autolearn spamassassin reject 0.95

# run the clamav virus checking plugin (max size in Kb)
# virus/clamav
Expand Down
2 changes: 1 addition & 1 deletion t/plugin_tests/dmarc
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,4 @@ sub _check_dmarc {
cmp_ok($msg, 'eq', 'failed DMARC policy', 'check_dmarc, no SPF');

#warn $self->qp->connection->notes('authentication_results');
}
}
2 changes: 1 addition & 1 deletion t/plugin_tests/helo
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,12 @@
my ($err, $why);
foreach my $ip ( undef, '', '192.0.99.5' ) {
$self->qp->connection->remote_ip(undef);
($err, $why) = $self->invalid_localhost('localhost' );
($err, $why) = $self->invalid_localhost('localhost');
ok($err, "host: localhost, remote ip ($ip)");

Check failure on line 59 in t/plugin_tests/helo

View workflow job for this annotation

GitHub Actions / test (5.16)

Use of uninitialized value $ip in concatenation (.) or string

Check failure on line 59 in t/plugin_tests/helo

View workflow job for this annotation

GitHub Actions / test (5.26)

Use of uninitialized value $ip in concatenation (.) or string

Check failure on line 59 in t/plugin_tests/helo

View workflow job for this annotation

GitHub Actions / test (5.38)

Use of uninitialized value $ip in concatenation (.) or string

Check failure on line 59 in t/plugin_tests/helo

View workflow job for this annotation

GitHub Actions / test (5.16)

Use of uninitialized value $ip in concatenation (.) or string

Check failure on line 59 in t/plugin_tests/helo

View workflow job for this annotation

GitHub Actions / test (5.26)

Use of uninitialized value $ip in concatenation (.) or string

Check failure on line 59 in t/plugin_tests/helo

View workflow job for this annotation

GitHub Actions / test (5.38)

Use of uninitialized value $ip in concatenation (.) or string

$self->qp->connection->remote_ip(undef);
($err, $why) = $self->invalid_localhost('not-localhost');
ok(! $err, "host: not-localhost, remote ip ($ip)");

Check failure on line 63 in t/plugin_tests/helo

View workflow job for this annotation

GitHub Actions / test (5.16)

Use of uninitialized value $ip in concatenation (.) or string

Check failure on line 63 in t/plugin_tests/helo

View workflow job for this annotation

GitHub Actions / test (5.26)

Use of uninitialized value $ip in concatenation (.) or string

Check failure on line 63 in t/plugin_tests/helo

View workflow job for this annotation

GitHub Actions / test (5.38)

Use of uninitialized value $ip in concatenation (.) or string

Check failure on line 63 in t/plugin_tests/helo

View workflow job for this annotation

GitHub Actions / test (5.16)

Use of uninitialized value $ip in concatenation (.) or string

Check failure on line 63 in t/plugin_tests/helo

View workflow job for this annotation

GitHub Actions / test (5.26)

Use of uninitialized value $ip in concatenation (.) or string

Check failure on line 63 in t/plugin_tests/helo

View workflow job for this annotation

GitHub Actions / test (5.38)

Use of uninitialized value $ip in concatenation (.) or string
}

foreach my $ip (qw/ ::1 127.0.0.1 / ) {
Expand Down
185 changes: 1 addition & 184 deletions t/plugin_tests/ident/geoip
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,6 @@ sub register_tests {
if ( !$@ ) {
$self->register_test('test_geoip2_lookup');
}

eval 'use Geo::IP';
if ( !$@ ) {
$self->register_test('test_geoip_lookup');
$self->register_test('test_geoip_load_db');
$self->register_test('test_geoip_init_cc');
$self->register_test('test_set_country_code');
$self->register_test('test_set_country_name');
$self->register_test('test_set_continent');
$self->register_test('test_set_distance');
$self->register_test('test_set_asn');
$self->register_test('test_add_headers');
}
}

sub test_geoip2_lookup {
Expand All @@ -41,7 +28,7 @@ sub test_geoip2_lookup {
cmp_ok( $self->connection->notes('geoip_country'), 'eq', 'US', "24.24.24.24 is in country US");
cmp_ok( $self->connection->notes('geoip_country_name'), 'eq', 'United States', "24.24.24.24 is in country United States");
cmp_ok( $self->connection->notes('geoip_continent'), 'eq', 'NA', "24.24.24.24 is in continent NA");
cmp_ok( $self->connection->notes('geoip_city'), 'eq', 'Deer Park', "24.24.24.24 is in city of Deer Park");
cmp_ok( $self->connection->notes('geoip_city'), 'eq', 'Syracuse', "24.24.24.24 is in city of Syracuse");
}

sub test_add_headers {
Expand All @@ -68,173 +55,3 @@ sub all_headers {
return join " | ", map { chomp $_; $_ } $self->transaction->header->get($tag);
}

sub test_geoip_lookup {
my $self = shift;

$self->qp->connection->remote_ip('24.24.24.24');
cmp_ok( $self->geoip_lookup(), '==', DECLINED, "exit code");

cmp_ok( $self->connection->notes('geoip_country'), 'eq', 'US', "24.24.24.24 is in the US");
}

sub test_geoip_load_db {
my $self = shift;

$self->open_geoip_db();

if ( $self->{_geoip_city} ) {
ok( ref $self->{_geoip_city}, "loaded GeoIP city db" );
}
else {
ok( "no GeoIP city db" );
}

if ( $self->{_geoip} ) {
ok( ref $self->{_geoip}, "loaded GeoIP db" );
}
else {
ok( "no GeoIP db" );
}
}

sub test_geoip_init_cc {
my $self = shift;

$self->{_my_country_code} = undef;
ok( ! $self->{_my_country_code}, "undefined");

my $test_ip = '208.175.177.10';
$self->{_args}{distance} = $test_ip;
$self->init_my_country_code( $test_ip );
cmp_ok( $self->{_my_country_code}, 'eq', 'US', "country set and matches");
}

sub test_set_country_code {
my $self = shift;

$self->qp->connection->remote_ip('');
my $cc = $self->set_country_code();
ok( ! $cc, "undef");

$self->qp->connection->remote_ip('24.24.24.24');
$self->clear_geoip_data;
$cc = $self->set_country_code();
ok( ! $cc, "set_country_code() returns nothing for no geoip data");
$self->restore_geoip_data;
$cc = $self->set_country_code();
cmp_ok( $cc, 'eq', 'US', "set_country_code result is $cc");

my $note = $self->connection->notes('geoip_country');
cmp_ok( $note, 'eq', 'US', "set_country_code set note to $cc");
}

sub test_set_country_name {
my $self = shift;

$self->{_geoip_record} = undef;
$self->qp->connection->remote_ip('');
$self->set_country_code();
my $cn = $self->set_country_name();
ok( ! $cn, "undef") or warn "$cn\n";

$self->qp->connection->remote_ip('24.24.24.24');
$self->clear_geoip_data;
$self->set_country_code();
$cn = $self->set_country_name();
ok( ! $cn, "set_country_name() returns nothing for no geoip data");
$self->restore_geoip_data;
$self->set_country_code();
$cn = $self->set_country_name();
cmp_ok( $cn, 'eq', 'United States', "$cn");

my $note = $self->connection->notes('geoip_country_name');
cmp_ok( $note, 'eq', 'United States', "note has: $cn");
}

sub test_set_continent {
my $self = shift;

$self->{_geoip_record} = undef;
$self->qp->connection->remote_ip('');
$self->set_country_code();
my $cn = $self->set_continent();
ok( ! $cn, "undef") or warn "$cn\n";

$self->qp->connection->remote_ip('24.24.24.24');
$self->clear_geoip_data;
$self->set_country_code();
$cn = $self->set_continent('US');
ok( ! $cn, 'set_continent() returns nothing for no geoip data');
$self->restore_geoip_data;
$self->set_country_code();
$cn = $self->set_continent() || '';
my $note = $self->connection->notes('geoip_continent');
if ( $cn ) {
cmp_ok( $cn, 'eq', 'NA', "$cn");
cmp_ok( $note, 'eq', 'NA', "note has: $cn");
}
else {
ok(1, "no continent data" );
ok(1, "no continent data" );
}
}

sub test_set_distance {
my $self = shift;

$self->{_geoip_record} = undef;
$self->qp->connection->remote_ip('');
$self->set_country_code();
my $cn = $self->set_distance_gc();
ok( ! $cn, "undef") or warn "$cn\n";

$self->qp->connection->remote_ip('24.24.24.24');
$self->set_country_code();
$cn = $self->set_distance_gc();
if ( $cn ) {
ok( $cn, "$cn km");

my $note = $self->connection->notes('geoip_distance');
ok( $note, "note has: $cn");
}
else {
ok( 1, "no distance data");
ok( 1, "no distance data");
}
}

sub test_set_asn {
my $self = shift;

return if !$self->{GeoIPASNum};

$self->qp->connection->remote_ip('');
$self->set_asn();
my $asn = $self->set_asn();
ok( ! $asn, "undef") or warn "$asn\n";

$self->qp->connection->remote_ip('24.24.24.24');
$self->clear_geoip_data;
$asn = $self->set_asn();
ok( ! $asn, 'set_asn() returns nothing for no ASN data' );
$self->restore_geoip_data;
$asn = $self->set_asn();
ok( $self->connection->notes('geoip_asn') =~ /^11351/, "note has: $asn");

$self->qp->connection->remote_ip('66.128.51.163');
$asn = $self->set_asn();

ok( $self->connection->notes('geoip_asn') =~ /^7819/, "note has: $asn");
}

my $geoip_data_bak;
my @geoip_keys = qw( _geoip _geoip_city GeoIPASNum );
sub clear_geoip_data {
my ( $self ) = @_;
$geoip_data_bak->{$_} = delete $self->{$_} for @geoip_keys;
}

sub restore_geoip_data {
my ( $self ) = @_;
$self->{$_} = delete $geoip_data_bak->{$_} for @geoip_keys;
}
Loading