diff --git a/src/etc/inc/auth.inc b/src/etc/inc/auth.inc index 28589c587..9478a5873 100644 --- a/src/etc/inc/auth.inc +++ b/src/etc/inc/auth.inc @@ -148,20 +148,8 @@ if(function_exists("display_error_form") && !isset($config['system']['webgui'][' } if(!$found_host) { - $interface_list_ips = get_configured_ip_addresses(); - foreach($interface_list_ips as $ilips) { - if(strcasecmp($referrer_host, $ilips) == 0) { - $found_host = true; - break; - } - } - $interface_list_ipv6s = get_configured_ipv6_addresses(); - foreach($interface_list_ipv6s as $ilipv6s) { - if(strcasecmp($referrer_host, $ilipv6s) == 0) { - $found_host = true; - break; - } - } + $found_host = isAuthLocalIP($referrer_host) ; + if($referrer_host == "127.0.0.1" || $referrer_host == "localhost") { // allow SSH port forwarded connections and links from localhost $found_host = true; @@ -188,6 +176,37 @@ unset($security_passed); $groupindex = index_groups(); $userindex = index_users(); +/** + * check if $http_host is a local configured ip address + */ +function isAuthLocalIP($http_host) { + global $config; + $local_ip = false; + if (isset($config['interfaces'])) { + foreach($config['interfaces'] as $if => $ifdetail) { + if (isset($ifdetail['enable'])) { + if (isset($ifdetail['ipaddr']) && $ifdetail['ipaddr'] == $http_host) { + $local_ip = true; + } elseif (isset($ifdetail['ipaddr6']) && $ifdetail['ipaddr6'] == $http_host) { + $local_ip = true; + } + } + } + } + + if (isset($config['virtualip'])) { + if ($config['virtualip']['vip']) { + foreach ($config['virtualip']['vip'] as $vip) { + if ($vip['subnet'] == $http_host) { + $local_ip = true; + } + } + } + } + + return $local_ip; +} + function index_groups() { global $config, $groupindex; diff --git a/src/etc/inc/authgui.inc b/src/etc/inc/authgui.inc index 03fe941f5..c4f595d53 100644 --- a/src/etc/inc/authgui.inc +++ b/src/etc/inc/authgui.inc @@ -31,7 +31,6 @@ */ require_once("auth.inc"); -require_once("functions.inc"); // provided via legacy_bindings.inc global $priv_list; @@ -408,27 +407,8 @@ function display_login_form() // fix, local ip check was previously done using "filter_generate_optcfg_array" which basically includes alomst everything here. // this should do the trick as well. - if (isset($config['interfaces'])) { - foreach($config['interfaces'] as $if => $ifdetail) { - if (isset($ifdetail['enable'])) { - if (isset($ifdetail['ipaddr']) && $ifdetail['ipaddr'] == $http_host) { - $local_ip = true; - } elseif (isset($ifdetail['ipaddr6']) && $ifdetail['ipaddr6'] == $http_host) { - $local_ip = true; - } - } - } - } + $local_ip = isAuthLocalIP($http_host); - if (isset($config['virtualip'])) { - if ($config['virtualip']['vip']) { - foreach ($config['virtualip']['vip'] as $vip) { - if ($vip['subnet'] == $http_host) { - $local_ip = true; - } - } - } - } if (isset($config['openvpn']['openvpn-server'])) { foreach ($config['openvpn']['openvpn-server'] as $ovpns) { if (is_ipaddrv4($http_host) && !empty($ovpns['tunnel_network']) && ip_in_subnet($http_host, $ovpns['tunnel_network'])) {