From 0a38aa7456ccb2875aac5dc20a6f15d3956bb93a Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Wed, 3 May 2023 00:37:04 +0200 Subject: Automatic trusted_sources during install (#5358) * Automatic trusted_sources during install Fix https://github.com/FreshRSS/FreshRSS/issues/5357 * Fix install for http_auth * Update lib/lib_rss.php Co-authored-by: Luc SANCHEZ <4697568+ColonelMoutarde@users.noreply.github.com> * Fill null exception e-mail * Revert some syntax * Minor parentheses --- lib/lib_rss.php | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) (limited to 'lib/lib_rss.php') diff --git a/lib/lib_rss.php b/lib/lib_rss.php index fcdd8d787..a7e03d4ea 100644 --- a/lib/lib_rss.php +++ b/lib/lib_rss.php @@ -634,13 +634,22 @@ function ipToBits(string $ip): string { */ function checkCIDR(string $ip, string $range): bool { $binary_ip = ipToBits($ip); - list($subnet, $mask_bits) = explode('/', $range); - $mask_bits = intval($mask_bits); + $split = explode('/', $range); + + $subnet = $split[0] ?? ''; + if ($subnet == '') { + return false; + } $binary_subnet = ipToBits($subnet); + $mask_bits = $split[1] ?? ''; + $mask_bits = (int)$mask_bits; + if ($mask_bits === 0) { + $mask_bits = null; + } + $ip_net_bits = substr($binary_ip, 0, $mask_bits); $subnet_bits = substr($binary_subnet, 0, $mask_bits); - return $ip_net_bits === $subnet_bits; } @@ -653,7 +662,7 @@ function checkCIDR(string $ip, string $range): bool { */ function checkTrustedIP(): bool { if (FreshRSS_Context::$system_conf === null) { - throw new FreshRSS_Context_Exception('System configuration not initialised!'); + return false; } if (!empty($_SERVER['REMOTE_ADDR'])) { foreach (FreshRSS_Context::$system_conf->trusted_sources as $cidr) { @@ -665,15 +674,20 @@ function checkTrustedIP(): bool { return false; } -function httpAuthUser(): string { +function httpAuthUser(bool $onlyTrusted = true): string { if (!empty($_SERVER['REMOTE_USER'])) { return $_SERVER['REMOTE_USER']; - } elseif (!empty($_SERVER['HTTP_REMOTE_USER']) && checkTrustedIP()) { - return $_SERVER['HTTP_REMOTE_USER']; - } elseif (!empty($_SERVER['REDIRECT_REMOTE_USER'])) { + } + if (!empty($_SERVER['REDIRECT_REMOTE_USER'])) { return $_SERVER['REDIRECT_REMOTE_USER']; - } elseif (!empty($_SERVER['HTTP_X_WEBAUTH_USER']) && checkTrustedIP()) { - return $_SERVER['HTTP_X_WEBAUTH_USER']; + } + if (!$onlyTrusted || checkTrustedIP()) { + if (!empty($_SERVER['HTTP_REMOTE_USER'])) { + return $_SERVER['HTTP_REMOTE_USER']; + } + if (!empty($_SERVER['HTTP_X_WEBAUTH_USER'])) { + return $_SERVER['HTTP_X_WEBAUTH_USER']; + } } return ''; } -- cgit v1.2.3