From 6c61b8c7bfeaedfca53832c16b00b81f85ca5186 Mon Sep 17 00:00:00 2001 From: Ton Voon Date: Fri, 27 Oct 2006 15:37:31 +0000 Subject: [PATCH] More edge testcases. Allow anything if ends with a . as long as correct characters git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1531 f882894a-f735-0410-b71e-b25c423dba1c --- plugins-scripts/t/utils.t | 21 ++++++++++++++++++--- plugins-scripts/utils.pm.in | 11 +++++++++-- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/plugins-scripts/t/utils.t b/plugins-scripts/t/utils.t index 469988c..4df5606 100644 --- a/plugins-scripts/t/utils.t +++ b/plugins-scripts/t/utils.t @@ -4,8 +4,10 @@ # # $Id$ # +# Run with perl t/utils.t -#use strict; +use warnings; +use strict; use Test::More; use NPTest; @@ -19,16 +21,29 @@ my $hostname_checks = { "host-hyphened.com" => 1, "rubbish" => 1, "-start.com" => 0, - "endsindot." => 0, + "nonfqdn-but-endsindot." => 1, + "fqdn.and.endsindot." => 1, "lots.of.dots.dot.org" => 1, + "endingwithdoubledots.." => 0, + "toomany..dots" => 0, + ".start.with.dot" => 0, "10.20.30.40" => 1, "10.20.30.40.50" => 0, "10.20.30" => 0, + "10.20.30.40." => 1, # This is considered a hostname because of trailing dot. It probably won't exist though... + "888." => 1, # This is because it could be a domain + "host.888." => 1, + "where.did.that.!.come.from." => 0, + "no.underscores_.com" => 0, }; -plan tests => scalar keys %$hostname_checks; +plan tests => ((scalar keys %$hostname_checks) + 4); foreach my $h (sort keys %$hostname_checks) { is (utils::is_hostname($h), $hostname_checks->{$h}, "$h should return ".$hostname_checks->{$h}); } +is(utils::is_hostname(), 0, "No parameter errors"); +is(utils::is_hostname(""), 0, "Empty string errors"); +is(utils::is_hostname(0), 0, "0 also errors"); +is(utils::is_hostname(1), 0, "1 also errors"); diff --git a/plugins-scripts/utils.pm.in b/plugins-scripts/utils.pm.in index e245835..8449b54 100644 --- a/plugins-scripts/utils.pm.in +++ b/plugins-scripts/utils.pm.in @@ -53,9 +53,16 @@ sub usage { sub is_hostname { my $host1 = shift; - if ($host1 && $host1 =~ m/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|[a-zA-Z0-9][-a-zA-Z0-9]+(\.[a-zA-Z0-9][-a-zA-Z0-9]+)*)$/) { + return 0 unless defined $host1; + if ($host1 =~ m/^[\d\.]+$/ && $host1 !~ /\.$/) { + if ($host1 =~ m/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/) { + return 1; + } else { + return 0; + } + } elsif ($host1 =~ m/^[a-zA-Z0-9][-a-zA-Z0-9]+(\.[a-zA-Z0-9][-a-zA-Z0-9]+)*\.?$/) { return 1; - }else{ + } else { return 0; } } -- 2.30.2