Fixed control for IP Ranges
This commit is contained in:
parent
9cdb8788ff
commit
51a2da89c9
|
@ -877,3 +877,52 @@ function users_get_users_group_by_group($id_group)
|
||||||
|
|
||||||
return $users;
|
return $users;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if IP is in range. Check wildcard `*`, single IP and IP ranges.
|
||||||
|
*
|
||||||
|
* @param array $arrayIP List of IPs.
|
||||||
|
* @param string $userIP IP for determine if is in the list.
|
||||||
|
*
|
||||||
|
* @return boolean True if IP is in range.
|
||||||
|
*/
|
||||||
|
function checkIPInRange(
|
||||||
|
array $arrayIP,
|
||||||
|
string $userIP=''
|
||||||
|
) {
|
||||||
|
$output = false;
|
||||||
|
|
||||||
|
if (empty($userIP) === true) {
|
||||||
|
$userIP = $_SERVER['REMOTE_ADDR'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($arrayIP) === false) {
|
||||||
|
foreach ($arrayIP as $ip) {
|
||||||
|
if ($ip === '*') {
|
||||||
|
// The list has wildcard, this accept all IPs.
|
||||||
|
$output = true;
|
||||||
|
break;
|
||||||
|
} else if ($ip === $userIP) {
|
||||||
|
$output = true;
|
||||||
|
break;
|
||||||
|
} else if (preg_match('/([0-2]?[0-9]{1,2})[.]([0-2]?[0-9]{1,2})[.]([0-2]?[0-9]{0,2})[.](0){1}/', $ip) > 0) {
|
||||||
|
$rangeArrayIP = explode('.', $ip);
|
||||||
|
$userArrayIP = explode('.', $userIP);
|
||||||
|
foreach ($rangeArrayIP as $position => $segmentIP) {
|
||||||
|
if ($segmentIP === $userArrayIP[$position]) {
|
||||||
|
$output = true;
|
||||||
|
} else if ((string) $segmentIP === '0') {
|
||||||
|
break 2;
|
||||||
|
} else {
|
||||||
|
$output = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$output = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
|
@ -303,7 +303,16 @@ if (isset($config['id_user']) === false) {
|
||||||
$user_info = users_get_user_by_id($nick);
|
$user_info = users_get_user_by_id($nick);
|
||||||
if ((bool) $user_info['allowed_ip_active'] === true) {
|
if ((bool) $user_info['allowed_ip_active'] === true) {
|
||||||
$userIP = $_SERVER['REMOTE_ADDR'];
|
$userIP = $_SERVER['REMOTE_ADDR'];
|
||||||
if ((strpos($user_info['allowed_ip_list'], '*') !== false || strpos($user_info['allowed_ip_list'], $userIP) !== false) === false) {
|
$allowedIP = false;
|
||||||
|
$arrayIP = explode(',', $user_info['allowed_ip_list']);
|
||||||
|
// By default, if the IP definition is no correct, allows all.
|
||||||
|
if (empty($arrayIP) === true) {
|
||||||
|
$allowedIP = true;
|
||||||
|
} else {
|
||||||
|
$allowedIP = checkIPInRange($arrayIP, $userIP);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($allowedIP === false) {
|
||||||
$config['auth_error'] = 'IP not allowed';
|
$config['auth_error'] = 'IP not allowed';
|
||||||
$login_failed = true;
|
$login_failed = true;
|
||||||
include_once 'general/login_page.php';
|
include_once 'general/login_page.php';
|
||||||
|
|
Loading…
Reference in New Issue