mirror of
				https://github.com/librenms/librenms.git
				synced 2024-10-07 16:52:45 +00:00 
			
		
		
		
	fix: improve accuracy of is_valid_hostname() (#7435)
* fix: improve accuracy of is_valid_hostname() fixes discovery code attempting to add discover invalid dns names the old code allowed some invalid hostnames, this is more thorough add tests * fix merge error
This commit is contained in:
		@@ -626,8 +626,13 @@ function is_valid_hostname($hostname)
 | 
			
		||||
    // labels to start with digits. No other symbols, punctuation characters, or
 | 
			
		||||
    // white space are permitted. While a hostname may not contain other characters,
 | 
			
		||||
    // such as the underscore character (_), other DNS names may contain the underscore
 | 
			
		||||
    // maximum length is 253 characters, maximum segment size is 63
 | 
			
		||||
 | 
			
		||||
    return ctype_alnum(str_replace(array('_', '-', '.'), '', $hostname));
 | 
			
		||||
    return (
 | 
			
		||||
        preg_match("/^([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*\.?$/i", $hostname) //valid chars check
 | 
			
		||||
        && preg_match("/^.{1,253}$/", $hostname) //overall length check
 | 
			
		||||
        && preg_match("/^[^\.]{1,63}(\.[^\.]{1,63})*\.?$/", $hostname)
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 
 | 
			
		||||
@@ -25,10 +25,6 @@
 | 
			
		||||
 | 
			
		||||
namespace LibreNMS\Tests;
 | 
			
		||||
 | 
			
		||||
use LibreNMS\Util\IP;
 | 
			
		||||
use LibreNMS\Util\IPv4;
 | 
			
		||||
use LibreNMS\Util\IPv6;
 | 
			
		||||
 | 
			
		||||
class CommonFunctionsTest extends \PHPUnit_Framework_TestCase
 | 
			
		||||
{
 | 
			
		||||
    public function testStrContains()
 | 
			
		||||
@@ -122,4 +118,28 @@ class CommonFunctionsTest extends \PHPUnit_Framework_TestCase
 | 
			
		||||
        $this->assertSame('UnderscoreName', str_to_class('underscore_name'));
 | 
			
		||||
        $this->assertSame('LibreNMS\\AllOfThemName', str_to_class('all OF-thEm_NaMe', 'LibreNMS\\'));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function testIsValidHostname()
 | 
			
		||||
    {
 | 
			
		||||
        $this->assertTrue(is_valid_hostname('a'), 'a');
 | 
			
		||||
        $this->assertTrue(is_valid_hostname('a.'), 'a.');
 | 
			
		||||
        $this->assertTrue(is_valid_hostname('0'), '0');
 | 
			
		||||
        $this->assertTrue(is_valid_hostname('a.b'), 'a.b');
 | 
			
		||||
        $this->assertTrue(is_valid_hostname('localhost'), 'localhost');
 | 
			
		||||
        $this->assertTrue(is_valid_hostname('google.com'), 'google.com');
 | 
			
		||||
        $this->assertTrue(is_valid_hostname('news.google.co.uk'), 'news.google.co.uk');
 | 
			
		||||
        $this->assertTrue(is_valid_hostname('xn--fsqu00a.xn--0zwm56d'), 'xn--fsqu00a.xn--0zwm56d');
 | 
			
		||||
        $this->assertFalse(is_valid_hostname('goo gle.com'), 'goo gle.com');
 | 
			
		||||
        $this->assertFalse(is_valid_hostname('google..com'), 'google..com');
 | 
			
		||||
        $this->assertFalse(is_valid_hostname('google.com '), 'google.com ');
 | 
			
		||||
        $this->assertFalse(is_valid_hostname('google-.com'), 'google-.com');
 | 
			
		||||
        $this->assertFalse(is_valid_hostname('.google.com'), '.google.com');
 | 
			
		||||
        $this->assertFalse(is_valid_hostname('<script'), '<script');
 | 
			
		||||
        $this->assertFalse(is_valid_hostname('alert('), 'alert(');
 | 
			
		||||
        $this->assertFalse(is_valid_hostname('.'), '.');
 | 
			
		||||
        $this->assertFalse(is_valid_hostname('..'), '..');
 | 
			
		||||
        $this->assertFalse(is_valid_hostname(' '), 'Just a space');
 | 
			
		||||
        $this->assertFalse(is_valid_hostname('-'), '-');
 | 
			
		||||
        $this->assertFalse(is_valid_hostname(''), 'Empty string');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user