moved Qpsmtpd::Utils -> Base.pm
This commit is contained in:
parent
2a303538e5
commit
710894cd49
2
MANIFEST
2
MANIFEST
@ -39,6 +39,7 @@ lib/Danga/TimeoutSocket.pm
|
|||||||
lib/Qpsmtpd.pm
|
lib/Qpsmtpd.pm
|
||||||
lib/Qpsmtpd/Address.pm
|
lib/Qpsmtpd/Address.pm
|
||||||
lib/Qpsmtpd/Auth.pm
|
lib/Qpsmtpd/Auth.pm
|
||||||
|
lib/Qpsmtpd/Base.pm
|
||||||
lib/Qpsmtpd/Command.pm
|
lib/Qpsmtpd/Command.pm
|
||||||
lib/Qpsmtpd/ConfigServer.pm
|
lib/Qpsmtpd/ConfigServer.pm
|
||||||
lib/Qpsmtpd/Connection.pm
|
lib/Qpsmtpd/Connection.pm
|
||||||
@ -55,7 +56,6 @@ lib/Qpsmtpd/SMTP/Prefork.pm
|
|||||||
lib/Qpsmtpd/TcpServer.pm
|
lib/Qpsmtpd/TcpServer.pm
|
||||||
lib/Qpsmtpd/TcpServer/Prefork.pm
|
lib/Qpsmtpd/TcpServer/Prefork.pm
|
||||||
lib/Qpsmtpd/Transaction.pm
|
lib/Qpsmtpd/Transaction.pm
|
||||||
lib/Qpsmtpd/Utils.pm
|
|
||||||
LICENSE
|
LICENSE
|
||||||
log/log2sql
|
log/log2sql
|
||||||
log/log2sql.sql
|
log/log2sql.sql
|
||||||
|
@ -1,14 +1,16 @@
|
|||||||
package Qpsmtpd;
|
package Qpsmtpd;
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
#use warnings;
|
#use warnings;
|
||||||
|
|
||||||
|
our $VERSION = "0.95";
|
||||||
use vars qw($TraceLevel $Spool_dir $Size_threshold);
|
use vars qw($TraceLevel $Spool_dir $Size_threshold);
|
||||||
|
|
||||||
use Sys::Hostname;
|
use Sys::Hostname;
|
||||||
use Qpsmtpd::Constants;
|
|
||||||
use Qpsmtpd::Address;
|
|
||||||
|
|
||||||
our $VERSION = "0.95";
|
use lib 'lib';
|
||||||
|
use base 'Qpsmtpd::Base';
|
||||||
|
use Qpsmtpd::Address;
|
||||||
|
use Qpsmtpd::Constants;
|
||||||
|
|
||||||
my $git;
|
my $git;
|
||||||
|
|
||||||
@ -592,8 +594,7 @@ sub spool_dir {
|
|||||||
|
|
||||||
unless ($Spool_dir) { # first time through
|
unless ($Spool_dir) { # first time through
|
||||||
$self->log(LOGDEBUG, "Initializing spool_dir");
|
$self->log(LOGDEBUG, "Initializing spool_dir");
|
||||||
$Spool_dir = $self->config('spool_dir')
|
$Spool_dir = $self->config('spool_dir') || $self->tildeexp('~/tmp/');
|
||||||
|| Qpsmtpd::Utils->tildeexp('~/tmp/');
|
|
||||||
|
|
||||||
$Spool_dir .= "/" unless ($Spool_dir =~ m!/$!);
|
$Spool_dir .= "/" unless ($Spool_dir =~ m!/$!);
|
||||||
|
|
||||||
@ -627,8 +628,8 @@ sub temp_file {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub temp_dir {
|
sub temp_dir {
|
||||||
my $self = shift;
|
my ($self, $mask) = @_;
|
||||||
my $mask = shift || 0700;
|
$mask ||= '0700';
|
||||||
my $dirname = $self->temp_file();
|
my $dirname = $self->temp_file();
|
||||||
-d $dirname
|
-d $dirname
|
||||||
or mkdir($dirname, $mask)
|
or mkdir($dirname, $mask)
|
||||||
@ -638,10 +639,10 @@ sub temp_dir {
|
|||||||
|
|
||||||
sub size_threshold {
|
sub size_threshold {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
unless (defined $Size_threshold) {
|
return $Size_threshold if defined $Size_threshold;
|
||||||
$Size_threshold = $self->config('size_threshold') || 0;
|
|
||||||
$self->log(LOGDEBUG, "size_threshold set to $Size_threshold");
|
$Size_threshold = $self->config('size_threshold') || 0;
|
||||||
}
|
$self->log(LOGDEBUG, "size_threshold set to $Size_threshold");
|
||||||
return $Size_threshold;
|
return $Size_threshold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package Qpsmtpd::Utils;
|
package Qpsmtpd::Base;
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
use Net::IP;
|
use Net::IP;
|
@ -4,7 +4,7 @@ use Qpsmtpd;
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
use Qpsmtpd::Utils;
|
use Qpsmtpd::Base;
|
||||||
use Qpsmtpd::Constants;
|
use Qpsmtpd::Constants;
|
||||||
|
|
||||||
use IO::File qw(O_RDWR O_CREAT);
|
use IO::File qw(O_RDWR O_CREAT);
|
||||||
|
@ -166,7 +166,7 @@ sub connect_handler {
|
|||||||
sub is_valid_localhost {
|
sub is_valid_localhost {
|
||||||
my ($self) = @_;
|
my ($self) = @_;
|
||||||
|
|
||||||
if (Qpsmtpd::Utils->is_localhost($self->qp->connection->remote_ip)) {
|
if (Qpsmtpd::Base->is_localhost($self->qp->connection->remote_ip)) {
|
||||||
$self->adjust_karma(1);
|
$self->adjust_karma(1);
|
||||||
$self->log(LOGDEBUG, "pass, is localhost");
|
$self->log(LOGDEBUG, "pass, is localhost");
|
||||||
return 1;
|
return 1;
|
||||||
|
10
plugins/helo
10
plugins/helo
@ -229,8 +229,8 @@ use warnings;
|
|||||||
|
|
||||||
use Net::IP;
|
use Net::IP;
|
||||||
|
|
||||||
|
use Qpsmtpd::Base;
|
||||||
use Qpsmtpd::Constants;
|
use Qpsmtpd::Constants;
|
||||||
use Qpsmtpd::Utils;
|
|
||||||
|
|
||||||
sub register {
|
sub register {
|
||||||
my ($self, $qp) = (shift, shift);
|
my ($self, $qp) = (shift, shift);
|
||||||
@ -342,7 +342,7 @@ sub is_regex_match {
|
|||||||
|
|
||||||
sub invalid_localhost {
|
sub invalid_localhost {
|
||||||
my ($self, $host) = @_;
|
my ($self, $host) = @_;
|
||||||
if (Qpsmtpd::Utils->is_localhost($self->qp->connection->remote_ip)) {
|
if (Qpsmtpd::Base->is_localhost($self->qp->connection->remote_ip)) {
|
||||||
$self->log(LOGDEBUG, "pass, is localhost");
|
$self->log(LOGDEBUG, "pass, is localhost");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -357,7 +357,7 @@ sub invalid_localhost {
|
|||||||
|
|
||||||
sub is_plain_ip {
|
sub is_plain_ip {
|
||||||
my ($self, $host) = @_;
|
my ($self, $host) = @_;
|
||||||
return if !Qpsmtpd::Utils->is_valid_ip($host);
|
return if !Qpsmtpd::Base->is_valid_ip($host);
|
||||||
|
|
||||||
$self->log(LOGDEBUG, "fail, plain IP");
|
$self->log(LOGDEBUG, "fail, plain IP");
|
||||||
return ("Plain IP is invalid HELO hostname (RFC 2821)", "plain IP");
|
return ("Plain IP is invalid HELO hostname (RFC 2821)", "plain IP");
|
||||||
@ -369,7 +369,7 @@ sub is_address_literal {
|
|||||||
my ($ip) = $host =~ /^\[(.*)\]/; # strip off any brackets
|
my ($ip) = $host =~ /^\[(.*)\]/; # strip off any brackets
|
||||||
return if !$ip; # no brackets, not a literal
|
return if !$ip; # no brackets, not a literal
|
||||||
|
|
||||||
return if !Qpsmtpd::Utils->is_valid_ip($ip);
|
return if !Qpsmtpd::Base->is_valid_ip($ip);
|
||||||
|
|
||||||
$self->log(LOGDEBUG, "fail, bracketed IP");
|
$self->log(LOGDEBUG, "fail, bracketed IP");
|
||||||
return ("RFC 2821 allows an address literal, but we do not",
|
return ("RFC 2821 allows an address literal, but we do not",
|
||||||
@ -378,7 +378,7 @@ sub is_address_literal {
|
|||||||
|
|
||||||
sub is_forged_literal {
|
sub is_forged_literal {
|
||||||
my ($self, $host) = @_;
|
my ($self, $host) = @_;
|
||||||
return if !Qpsmtpd::Utils->is_valid_ip($host);
|
return if !Qpsmtpd::Base->is_valid_ip($host);
|
||||||
|
|
||||||
# should we add exceptions for reserved internal IP space? (192.168,10., etc)
|
# should we add exceptions for reserved internal IP space? (192.168,10., etc)
|
||||||
$host = substr $host, 1, -1;
|
$host = substr $host, 1, -1;
|
||||||
|
@ -4,11 +4,11 @@ use warnings;
|
|||||||
|
|
||||||
use Test::More;
|
use Test::More;
|
||||||
|
|
||||||
use lib 'lib'; # test lib/Qpsmtpd/Utils (vs site_perl)
|
use lib 'lib'; # test lib/Qpsmtpd/Base (vs site_perl)
|
||||||
|
|
||||||
BEGIN { use_ok('Qpsmtpd::Utils'); }
|
BEGIN { use_ok('Qpsmtpd::Base'); }
|
||||||
|
|
||||||
my $utils = bless {}, 'Qpsmtpd::Utils';
|
my $utils = bless {}, 'Qpsmtpd::Base';
|
||||||
|
|
||||||
__tildeexp();
|
__tildeexp();
|
||||||
__is_localhost();
|
__is_localhost();
|
75
t/qpsmtpd.t
75
t/qpsmtpd.t
@ -3,6 +3,7 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
use Data::Dumper;
|
use Data::Dumper;
|
||||||
|
use File::Path;
|
||||||
use Test::More;
|
use Test::More;
|
||||||
|
|
||||||
use lib 'lib'; # test lib/Qpsmtpd (vs site_perl)
|
use lib 'lib'; # test lib/Qpsmtpd (vs site_perl)
|
||||||
@ -20,12 +21,18 @@ my $qp = bless {}, 'Qpsmtpd';
|
|||||||
ok($qp->version(), "version, " . $qp->version());
|
ok($qp->version(), "version, " . $qp->version());
|
||||||
is_deeply(Qpsmtpd::hooks(), {}, 'hooks, empty');
|
is_deeply(Qpsmtpd::hooks(), {}, 'hooks, empty');
|
||||||
|
|
||||||
|
__temp_dir();
|
||||||
|
__size_threshold();
|
||||||
__authenticated();
|
__authenticated();
|
||||||
|
__auth_user();
|
||||||
|
__auth_mechanism();
|
||||||
|
|
||||||
|
__log();
|
||||||
|
__load_logging();
|
||||||
|
|
||||||
__config_dir();
|
__config_dir();
|
||||||
__get_qmail_config();
|
__get_qmail_config();
|
||||||
__config();
|
__config();
|
||||||
__log();
|
|
||||||
__load_logging();
|
|
||||||
|
|
||||||
done_testing();
|
done_testing();
|
||||||
|
|
||||||
@ -75,17 +82,6 @@ sub __load_logging {
|
|||||||
$Qpsmtpd::hooks->{logging} = undef; # restore
|
$Qpsmtpd::hooks->{logging} = undef; # restore
|
||||||
}
|
}
|
||||||
|
|
||||||
sub __authenticated {
|
|
||||||
|
|
||||||
ok(!$qp->authenticated(), "authenticated, undef");
|
|
||||||
|
|
||||||
$qp->{_auth} = 1;
|
|
||||||
ok($qp->authenticated(), "authenticated, true");
|
|
||||||
|
|
||||||
$qp->{_auth} = 0;
|
|
||||||
ok(!$qp->authenticated(), "authenticated, false");
|
|
||||||
}
|
|
||||||
|
|
||||||
sub __config {
|
sub __config {
|
||||||
my @r = $qp->config('badhelo');
|
my @r = $qp->config('badhelo');
|
||||||
ok($r[0], "config, badhelo, @r");
|
ok($r[0], "config, badhelo, @r");
|
||||||
@ -187,11 +183,60 @@ sub __config {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub __temp_dir {
|
||||||
|
my $r = $qp->temp_dir();
|
||||||
|
ok( $r, "temp_dir, $r");
|
||||||
|
|
||||||
|
$r = $qp->temp_dir('0775');
|
||||||
|
ok( $r, "temp_dir with mask, $r");
|
||||||
|
|
||||||
|
if ($r && -d $r) { File::Path::rmtree $r; }
|
||||||
|
}
|
||||||
|
|
||||||
|
sub __size_threshold {
|
||||||
|
ok( ! $qp->size_threshold(), "size_threshold is undefined")
|
||||||
|
or warn "size_threshold: " . $qp->size_threshold;
|
||||||
|
|
||||||
|
$Qpsmtpd::Size_threshold = 5;
|
||||||
|
cmp_ok( 5, '==', $qp->size_threshold(), "size_threshold equals 5");
|
||||||
|
|
||||||
|
$Qpsmtpd::Size_threshold = undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub __authenticated {
|
||||||
|
ok( ! $qp->authenticated(), "authenticated is undefined");
|
||||||
|
|
||||||
|
$qp->{_auth} = 1;
|
||||||
|
ok($qp->authenticated(), "authenticated is true");
|
||||||
|
|
||||||
|
$qp->{_auth} = 0;
|
||||||
|
ok(! $qp->authenticated(), "authenticated is false");
|
||||||
|
}
|
||||||
|
|
||||||
|
sub __auth_user {
|
||||||
|
ok( ! $qp->auth_user(), "auth_user is undefined");
|
||||||
|
|
||||||
|
$qp->{_auth_user} = 'matt';
|
||||||
|
cmp_ok('matt', 'eq', $qp->auth_user(), "auth_user set");
|
||||||
|
|
||||||
|
$qp->{_auth_user} = undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub __auth_mechanism {
|
||||||
|
ok( ! $qp->auth_mechanism(), "auth_mechanism is undefined");
|
||||||
|
|
||||||
|
$qp->{_auth_mechanism} = 'MD5';
|
||||||
|
cmp_ok('MD5', 'eq', $qp->auth_mechanism(), "auth_mechanism set");
|
||||||
|
|
||||||
|
$qp->{_auth_mechanism} = undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
package FakeAddress;
|
package FakeAddress;
|
||||||
|
|
||||||
sub new {
|
sub new {
|
||||||
shift;
|
my $class = shift;
|
||||||
return bless {@_};
|
return bless {@_}, $class;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub address { } # pass the can('address') conditional
|
sub address { } # pass the can('address') conditional
|
||||||
|
Loading…
Reference in New Issue
Block a user