From e801eb80d9ec084312f593215ad8b07c083acaea Mon Sep 17 00:00:00 2001
From: Michael Seevogel <git@michaelseevogel.de>
Date: Tue, 11 Jan 2022 17:43:11 +0100
Subject: [PATCH] overhauled RHEL/Fedora detection

---
 server/lib/classes/monitor_tools.inc.php | 104 +++++++++--------------
 1 file changed, 42 insertions(+), 62 deletions(-)

diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php
index 42ed9146e4..e7bc8bab93 100644
--- a/server/lib/classes/monitor_tools.inc.php
+++ b/server/lib/classes/monitor_tools.inc.php
@@ -261,8 +261,8 @@ class monitor_tools {
 			$distbaseid = 'opensuse';
 		} elseif(stristr(file_get_contents('/etc/os-release'), 'opensuse')) {
 			$content = file_get_contents('/etc/os-release');
-            preg_match_all('/NAME=\"([\w ]+)\"/m', $content, $name);
-            preg_match_all('/VERSION_ID=\"([0-9]{1,2})\.?([0-9]{0,2})\.?([0-9]*).$/m', $content, $version);
+			preg_match_all('/NAME=\"([\w ]+)\"/m', $content, $name);
+			preg_match_all('/VERSION_ID=\"([0-9]{1,2})\.?([0-9]{0,2})\.?([0-9]*).$/m', $content, $version);
 			$distname = is_array($name) ? $name[1][0] : 'openSUSE';
 			$distver = is_array($version) ? implode('.', array_filter(array($version[1][0],$version[2][0],$version[3][0]),'strlen')) : 'Unknown';
 			$distid = 'opensuse112';
@@ -276,85 +276,65 @@ class monitor_tools {
 	}
 
 
-	//** Redhat
-	elseif(file_exists('/etc/redhat-release')) {
+	//** RHEL (including compatible clones) & Fedora
+	elseif(file_exists('/etc/redhat-release') && file_exists('/etc/os-release')) {
+		$content = file_get_contents('/etc/os-release');
 
-		$content = file_get_contents('/etc/redhat-release');
+		//preg_match('/(?<=PRETTY_NAME=\").+?(?=\")/', $content, $prettyname);
+		preg_match('/(?<=NAME=\").+?(?=\")/', $content, $name);
+                preg_match('/(?<=VERSION=\").+?(?=\")/', $content, $version);
+		preg_match('/(?<=VERSION_ID=\").+?(?=\")/', $content, $versionid);
 
-		if(stristr($content, 'Fedora release 9 (Sulphur)')) {
-			$distname = 'Fedora';
-			$distver = '9';
-			$distid = 'fedora9';
-			$distbaseid = 'fedora';
-		} elseif(stristr($content, 'Fedora release 10 (Cambridge)')) {
-			$distname = 'Fedora';
-			$distver = '10';
-			$distid = 'fedora9';
-			$distbaseid = 'fedora';
-		} elseif(stristr($content, 'Fedora release 10')) {
-			$distname = 'Fedora';
-			$distver = '11';
-			$distid = 'fedora9';
-			$distbaseid = 'fedora';
-		} elseif(stristr($content, 'Fedora release 32 (Thirty Two)')) {
+		if(stristr($prettyname[0], 'Fedora 32 (Thirty Two)')) {
 			$distname = 'Fedora';
 			$distver = '32';
 			$distid = 'fedora32';
 			$distbaseid = 'fedora';
-		} elseif(stristr($content, 'Fedora release 33 (Thirty Three)')) {
+		} elseif(stristr($prettyname[0], 'Fedora 33 (Thirty Three)')) {
 			$distname = 'Fedora';
 			$distver = '33';
 			$distid = 'fedora33';
 			$distbaseid = 'fedora';
-		} elseif(stristr($content, 'CentOS release 5.2 (Final)')) {
-			$distname = 'CentOS';
-			$distver = '5.2';
-			$distid = 'centos52';
-			$distbaseid = 'fedora';
-		} elseif(stristr($content, 'CentOS release 5.3 (Final)')) {
-			$distname = 'CentOS';
-			$distver = '5.3';
-			$distid = 'centos53';
+                //** RHEL 7 and compatible clones 
+		} elseif(preg_match('/^(?:7|7\.[0-9]{1,2})$/', $versionid[0])) {
+			preg_match_all('/([0-9]{1,2})\.?([0-9]{0,2})\.?([0-9]*)/', file_get_contents('/etc/redhat-release'), $centos7_string);
+                        $distname = $name[0];
+                        $distver = is_array($centos7_string)? implode('.', array_filter(array($centos7_string[1][0],$centos7_string[2][0],$centos7_string[3][0]),'strlen')) : $version[0];
+                        $distid = 'centos72';
+                        $distbaseid = 'fedora';
+		//** RHEL 8 and compatible clones
+		} elseif(preg_match('/^(?:8|8\.[0-9]{1,2})$/', $versionid[0])) {
+                        $distname = $name[0];
+                        $distver = $version[0];
+                        $distid = 'centos80';
 			$distbaseid = 'fedora';
-		} elseif(stristr($content, 'CentOS release 5')) {
-			$distname = 'CentOS';
-			$distver = 'Unknown';
-			$distid = 'centos53';
-			$distbaseid = 'fedora';
-		} elseif(stristr($content, 'CentOS Linux release 6') || stristr($content, 'CentOS release 6')) {
-			$distname = 'CentOS';
-			$distver = 'Unknown';
-			$distid = 'centos53';
-			$distbaseid = 'fedora';
-		} elseif(stristr($content, 'CentOS Linux release 7')) {
-			preg_match_all('/([0-9]{1,2})\.?([0-9]{0,2})\.?([0-9]*)/', $content, $version);
-			$distname = 'CentOS';
-			$distver = is_array($version)? implode('.', array_filter(array($version[1][0],$version[2][0],$version[3][0]),'strlen')) :'Unknown';
-			$distbaseid = 'fedora';
-			$var=explode(" ", $content);
-			$var=explode(".", $var[3]);
-			$var=$var[0].".".$var[1];
-			if($var=='7.0' || $var=='7.1') {
-				$distid = 'centos70';
-			} else {
-				$distid = 'centos72';
-			}
-		} elseif(stristr($content, 'CentOS Linux release 8')) {
-			preg_match_all('/([0-9]{1,2})\.?([0-9]{0,2})\.?([0-9]*)/', $content, $version);
-			$distname = 'CentOS';
-			$distver = is_array($version)? implode('.', array_filter(array($version[1][0],$version[2][0],$version[3][0]),'strlen')) :'Unknown';
-			$distbaseid = 'fedora';
-			$var=explode(" ", $content);
-			$var=explode(".", $var[3]);
-			$var=$var[0].".".$var[1];
 		} else {
 			$distname = 'Redhat';
 			$distver = 'Unknown';
 			$distid = 'fedora9';
 			$distbaseid = 'fedora';
 		}
+	} elseif(file_exists('/etc/redhat-release') && !file_exists('/etc/os-release')) {
+
+                $content = file_get_contents('/etc/redhat-release');
+
+                if(stristr($content, 'CentOS Linux release 6') || stristr($content, 'CentOS release 6')) {
+                        $distname = 'CentOS';
+                        $distver = 'Unknown';
+                        $distid = 'centos53';
+                        $distbaseid = 'fedora';
+		} else {
+                        $distname = 'Redhat';
+                        $distver = 'Unknown';
+                        $distid = 'fedora9';
+                        $distbaseid = 'fedora';
+                }
+
 	}
 
+
+
+
 	//** Gentoo
 	elseif(file_exists('/etc/gentoo-release')) {
 
-- 
GitLab