Procházet zdrojové kódy

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

Ton Voon před 19 roky
rodič
revize
6c61b8c7bf
2 změnil soubory, kde provedl 27 přidání a 5 odebrání
  1. 18 3
      plugins-scripts/t/utils.t
  2. 9 2
      plugins-scripts/utils.pm.in

+ 18 - 3
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");

+ 9 - 2
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;
 	}
 }