From 60877da4ed09a1bee4d8d0080220407b616667e9 Mon Sep 17 00:00:00 2001 From: Matt Simerson Date: Wed, 10 Sep 2014 13:43:46 -0700 Subject: [PATCH] added Utils::is_localhost and t/qpsmtpd-utils.t resolves Issue #89 --- lib/Qpsmtpd.pm | 2 +- lib/Qpsmtpd/Utils.pm | 13 +++++++++++-- t/qpsmtpd-utils.t | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 t/qpsmtpd-utils.t diff --git a/lib/Qpsmtpd.pm b/lib/Qpsmtpd.pm index 79a3623..be1cea4 100644 --- a/lib/Qpsmtpd.pm +++ b/lib/Qpsmtpd.pm @@ -591,7 +591,7 @@ sub spool_dir { unless ($Spool_dir) { # first time through $self->log(LOGDEBUG, "Initializing spool_dir"); $Spool_dir = $self->config('spool_dir') - || Qpsmtpd::Utils::tildeexp('~/tmp/'); + || Qpsmtpd::Utils->tildeexp('~/tmp/'); $Spool_dir .= "/" unless ($Spool_dir =~ m!/$!); diff --git a/lib/Qpsmtpd/Utils.pm b/lib/Qpsmtpd/Utils.pm index 38c2c6f..edd8d4e 100644 --- a/lib/Qpsmtpd/Utils.pm +++ b/lib/Qpsmtpd/Utils.pm @@ -2,13 +2,22 @@ package Qpsmtpd::Utils; use strict; sub tildeexp { - my $path = shift; + my ($self, $path) = @_; $path =~ s{^~([^/]*)} { - $1 + $1 ? (getpwnam($1))[7] : ( $ENV{HOME} || $ENV{LOGDIR} || (getpwuid($>))[7]) }ex; return $path; } +sub is_localhost { + my ($self, $ip) = @_; + return if ! $ip; + return 1 if $ip =~ /^127\./; # IPv4 + return 1 if $ip =~ /:127\./; # IPv4 mapped IPv6 + return 1 if $ip eq '::1'; # IPv6 + return; +} + 1; diff --git a/t/qpsmtpd-utils.t b/t/qpsmtpd-utils.t new file mode 100644 index 0000000..0d278b9 --- /dev/null +++ b/t/qpsmtpd-utils.t @@ -0,0 +1,35 @@ +#!/usr/bin/perl +use strict; +use warnings; + +use Test::More; + +use lib 'lib'; # test lib/Qpsmtpd/Utils (vs site_perl) + +BEGIN { use_ok('Qpsmtpd::Utils'); } + +my $utils = bless {}, 'Qpsmtpd::Utils'; + +__tildeexp(); +__is_localhost(); + +done_testing(); + +sub __is_localhost { + + for my $local_ip (qw/ 127.0.0.1 ::1 2607:f060:b008:feed::127.0.0.1 127.0.0.2 /) { + ok( $utils->is_localhost($local_ip), "is_localhost, $local_ip"); + } + + for my $rem_ip (qw/ 128.0.0.1 ::2 2607:f060:b008:feed::128.0.0.1 /) { + ok( !$utils->is_localhost($rem_ip), "!is_localhost, $rem_ip"); + } +}; + +sub __tildeexp { + my $path = $utils->tildeexp('~root/foo.txt'); + ok( $path, "tildeexp, $path"); + + $path = $utils->tildeexp('no/tilde/in/path'); + cmp_ok( $path, 'eq', 'no/tilde/in/path', 'tildeexp, no expansion'); +};