]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - config/cfgroot/general-functions.pl
general-functions.pl: Update to fix bug #12428
[people/pmueller/ipfire-2.x.git] / config / cfgroot / general-functions.pl
index 9be1e7708850ae6dfe8f3d63df9958ecc45a43c1..a6656ccf5668d605aca52f22a3028416eeaff4a7 100644 (file)
@@ -635,12 +635,12 @@ sub validhostname
        # Checks a hostname against RFC1035
         my $hostname = $_[0];
 
-       # Each part should be at least two characters in length
+       # Hostname should be at least one character in length
        # but no more than 63 characters
        if (length ($hostname) < 1 || length ($hostname) > 63) {
                return 0;}
        # Only valid characters are a-z, A-Z, 0-9 and -
-       if ($hostname !~ /^[a-zA-Z0-9-\s]*$/) {
+       if ($hostname !~ /^[a-zA-Z0-9-]*$/) {
                return 0;}
        # First character can only be a letter or a digit
        if (substr ($hostname, 0, 1) !~ /^[a-zA-Z0-9]*$/) {
@@ -655,46 +655,53 @@ sub validdomainname
 {
        my $part;
 
-       # Checks a domain name against RFC1035
+       # Checks a domain name against RFC1035 and RFC2181
         my $domainname = $_[0];
-       my @parts = split (/\./, $domainname);  # Split hostname at the '.'
+       my @parts = split (/\./, $domainname);  # Split domain name at the '.'
 
        foreach $part (@parts) {
-               # Each part should be no more than 63 characters in length
+               # Each part should be at least one character in length
+               # but no more than 63 characters
                if (length ($part) < 1 || length ($part) > 63) {
                        return 0;}
                # Only valid characters are a-z, A-Z, 0-9, _ and -
                if ($part !~ /^[a-zA-Z0-9_-]*$/) {
-                       return 0;
-               }
+                       return 0;}
        }
        return 1;
 }
 
 sub validfqdn
 {
-       my $part;
-
-       # Checks a fully qualified domain name against RFC1035
+       # Checks a fully qualified domain name against RFC1035 and RFC2181
         my $fqdn = $_[0];
-       my @parts = split (/\./, $fqdn);        # Split hostname at the '.'
+       my @parts = split (/\./, $fqdn);        # Split FQDN at the '.'
        if (scalar(@parts) < 2) {               # At least two parts should
                return 0;}                      # exist in a FQDN
                                                # (i.e.hostname.domain)
-       foreach $part (@parts) {
+
+       for (my $index=0; $index < scalar(@parts); $index++) {
                # Each part should be at least one character in length
                # but no more than 63 characters
-               if (length ($part) < 1 || length ($part) > 63) {
-                       return 0;}
-               # Only valid characters are a-z, A-Z, 0-9 and -
-               if ($part !~ /^[a-zA-Z0-9-]*$/) {
-                       return 0;}
-               # First character can only be a letter or a digit
-               if (substr ($part, 0, 1) !~ /^[a-zA-Z0-9]*$/) {
-                       return 0;}
-               # Last character can only be a letter or a digit
-               if (substr ($part, -1, 1) !~ /^[a-zA-Z0-9]*$/) {
+               if (length ($parts[$index]) < 1 || length ($parts[$index]) > 63) {
                        return 0;}
+               if ($index eq 0) {              
+                       # This is the hostname part
+                       # Only valid characters are a-z, A-Z, 0-9 and -
+                       if ($parts[$index] !~ /^[a-zA-Z0-9-]*$/) {
+                               return 0;}
+                       # First character can only be a letter or a digit
+                       if (substr ($parts[$index], 0, 1) !~ /^[a-zA-Z0-9]*$/) {
+                               return 0;}
+                       # Last character can only be a letter or a digit
+                       if (substr ($parts[$index], -1, 1) !~ /^[a-zA-Z0-9]*$/) {
+                               return 0;}
+               } else{                         
+                       # This is the domain part
+                       # Only valid characters are a-z, A-Z, 0-9, _ and -
+                       if ($parts[$index] !~ /^[a-zA-Z0-9_-]*$/) {
+                               return 0;}
+               }
        }
        return 1;
 }