From ab106ad70fa16a5f3af51152ee29ba004ae60118 Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Thu, 19 Sep 2019 22:36:22 +0100 Subject: [PATCH] MDL-66732 core: improve detection of non-public sites. --- lib/classes/ip_utils.php | 18 ++++++++++++++++++ lib/moodlelib.php | 2 ++ 2 files changed, 20 insertions(+) diff --git a/lib/classes/ip_utils.php b/lib/classes/ip_utils.php index d2e9a3dd02e..387df8f9211 100644 --- a/lib/classes/ip_utils.php +++ b/lib/classes/ip_utils.php @@ -245,4 +245,22 @@ final class ip_utils { return false; } + /** + * Return IP address for given hostname, or null on failure + * + * @param string $hostname + * @return string|null + */ + public static function get_ip_address(string $hostname): ?string { + if (self::is_domain_name($hostname)) { + $address = gethostbyname($hostname); + + // If address is different from hostname, we have success. + if (strcasecmp($address, $hostname) !== 0) { + return $address; + } + } + + return null; + } } diff --git a/lib/moodlelib.php b/lib/moodlelib.php index c068e0e1d98..eed462a3933 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -10444,6 +10444,8 @@ function site_is_public() { $ispublic = false; } else if (\core\ip_utils::is_ip_address($host) && !ip_is_public($host)) { $ispublic = false; + } else if (($address = \core\ip_utils::get_ip_address($host)) && !ip_is_public($address)) { + $ispublic = false; } else { $ispublic = true; }