From a48f1e7812b36d158e2765b55ae3ddbfd90c22a3 Mon Sep 17 00:00:00 2001
From: Michael Seevogel <git@michaelseevogel.de>
Date: Wed, 26 Oct 2022 14:17:14 +0200
Subject: [PATCH] add detection code for el9 dist tag

---
 install/dist/conf/centos90.conf.php      | 231 +++++++++++++++++++++++
 install/dist/lib/centos90.lib.php        |  40 ++++
 install/lib/install.lib.php              | 149 ++++++++-------
 server/lib/classes/monitor_tools.inc.php |  70 +++----
 4 files changed, 385 insertions(+), 105 deletions(-)
 create mode 100644 install/dist/conf/centos90.conf.php
 create mode 100644 install/dist/lib/centos90.lib.php

diff --git a/install/dist/conf/centos90.conf.php b/install/dist/conf/centos90.conf.php
new file mode 100644
index 0000000000..853390ae94
--- /dev/null
+++ b/install/dist/conf/centos90.conf.php
@@ -0,0 +1,231 @@
+<?php
+
+/*
+Copyright (c) 2007, Till Brehm, projektfarm Gmbh
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+//***  Fedora 9 default settings
+
+//* Main
+$conf['language'] = 'en';
+$conf['distname'] = 'centos90';
+$conf['hostname'] = 'server1.domain.tld'; // Full hostname
+$conf['ispconfig_install_dir'] = '/usr/local/ispconfig';
+$conf['ispconfig_config_dir'] = '/usr/local/ispconfig';
+$conf['ispconfig_log_priority'] = 2;  // 0 = Debug, 1 = Warning, 2 = Error
+$conf['ispconfig_log_dir'] = '/var/log/ispconfig';
+$conf['server_id'] = 1;
+$conf['init_scripts'] = '/etc/init.d';
+$conf['runlevel'] = '/etc';
+$conf['shells'] = '/etc/shells';
+$conf['pam'] = '/etc/pam.d';
+
+//* Services provided by this server, this selection will be overridden by the expert mode
+$conf['services']['mail'] = true;
+$conf['services']['web'] = true;
+$conf['services']['dns'] = true;
+$conf['services']['file'] = true;
+$conf['services']['db'] = true;
+$conf['services']['vserver'] = true;
+
+//* MySQL
+$conf['mysql']['installed'] = false; // will be detected automatically during installation
+$conf['mysql']['init_script'] = 'mariadb';
+$conf['mysql']['host'] = 'localhost';
+$conf['mysql']['ip'] = '127.0.0.1';
+$conf['mysql']['port'] = '3306';
+$conf['mysql']['database'] = 'dbispconfig';
+$conf['mysql']['admin_user'] = 'root';
+$conf['mysql']['admin_password'] = '';
+$conf['mysql']['charset'] = 'utf8';
+$conf['mysql']['ispconfig_user'] = 'ispconfig';
+$conf['mysql']['ispconfig_password'] = md5(random_bytes(20));
+$conf['mysql']['master_slave_setup'] = 'n';
+$conf['mysql']['master_host'] = '';
+$conf['mysql']['master_port'] = '3306';
+$conf['mysql']['master_database'] = 'dbispconfig';
+$conf['mysql']['master_admin_user'] = 'root';
+$conf['mysql']['master_admin_password'] = '';
+$conf['mysql']['master_ispconfig_user'] = '';
+$conf['mysql']['master_ispconfig_password'] = md5(random_bytes(20));
+
+//* Apache
+$conf['apache']['installed'] = false; // will be detected automatically during installation
+$conf['apache']['user'] = 'apache';
+$conf['apache']['group'] = 'apache';
+$conf['apache']['init_script'] = 'httpd';
+$conf['apache']['version'] = '2.2';
+$conf['apache']['vhost_conf_dir'] = '/etc/httpd/conf/sites-available';
+$conf['apache']['vhost_conf_enabled_dir'] = '/etc/httpd/conf/sites-enabled';
+$conf['apache']['vhost_port'] = '8080';
+$conf['apache']['php_ini_path_apache'] = '/etc/php.ini';
+$conf['apache']['php_ini_path_cgi'] = '/etc/php.ini';
+
+//* Website base settings
+$conf['web']['website_basedir'] = '/var/www';
+$conf['web']['website_path'] = '/var/www/clients/client[client_id]/web[website_id]';
+$conf['web']['website_symlinks'] = '/var/www/[website_domain]/:/var/www/clients/client[client_id]/[website_domain]/';
+
+//* Apps base settings
+$conf['web']['apps_vhost_ip'] = '_default_';
+$conf['web']['apps_vhost_port'] = '8081';
+$conf['web']['apps_vhost_servername'] = '';
+$conf['web']['apps_vhost_user'] = 'ispapps';
+$conf['web']['apps_vhost_group'] = 'ispapps';
+
+//* AWStats settings
+$conf['awstats']['pl'] = '/usr/share/awstats/wwwroot/cgi-bin/awstats.pl';
+
+//* Fastcgi
+$conf['fastcgi']['fastcgi_phpini_path'] = '/etc/';
+$conf['fastcgi']['fastcgi_starter_path'] = '/var/www/php-fcgi-scripts/[system_user]/';
+$conf['fastcgi']['fastcgi_bin'] = '/usr/bin/php-cgi';
+
+//* Postfix
+$conf['postfix']['installed'] = false; // will be detected automatically during installation
+$conf['postfix']['config_dir'] = '/etc/postfix';
+$conf['postfix']['init_script'] = 'postfix';
+$conf['postfix']['user'] = 'postfix';
+$conf['postfix']['group'] = 'postfix';
+$conf['postfix']['vmail_userid'] = '5000';
+$conf['postfix']['vmail_username'] = 'vmail';
+$conf['postfix']['vmail_groupid'] = '5000';
+$conf['postfix']['vmail_groupname'] = 'vmail';
+$conf['postfix']['vmail_mailbox_base'] = '/var/vmail';
+
+//* Mailman
+$conf['mailman']['installed'] = false; // will be detected automatically during installation
+$conf['mailman']['config_dir'] = '/etc/mailman';
+$conf['mailman']['init_script'] = 'mailman';
+
+//* Getmail
+$conf['getmail']['installed'] = false; // will be detected automatically during installation
+$conf['getmail']['config_dir'] = '/etc/getmail';
+$conf['getmail']['program'] = '/usr/bin/getmail';
+
+//* Courier
+$conf['courier']['installed'] = false; // will be detected automatically during installation
+$conf['courier']['config_dir'] = '/etc/authlib';
+$conf['courier']['courier-authdaemon'] = 'courier-authlib';
+$conf['courier']['courier-imap'] = 'courier-imap';
+$conf['courier']['courier-imap-ssl'] = '';
+$conf['courier']['courier-pop'] = '';
+$conf['courier']['courier-pop-ssl'] = '';
+
+//* Dovecot
+$conf['dovecot']['installed'] = false; // will be detected automatically during installation
+$conf['dovecot']['config_dir'] = '/etc/dovecot';
+$conf['dovecot']['init_script'] = 'dovecot';
+
+//* SASL
+$conf['saslauthd']['installed'] = false; // will be detected automatically during installation
+$conf['saslauthd']['config'] = '/etc/sysconfig/saslauthd';
+$conf['saslauthd']['init_script'] = 'saslauthd';
+
+//* Amavisd
+$conf['amavis']['installed'] = false; // will be detected automatically during installation
+$conf['amavis']['config_dir'] = '/etc/amavisd';
+$conf['amavis']['init_script'] = 'amavisd';
+
+//* Rspamd
+$conf['rspamd']['installed'] = false; // will be detected automatically during installation
+$conf['rspamd']['config_dir'] = '/etc/rspamd';
+$conf['rspamd']['init_script'] = 'rspamd';
+
+//* ClamAV
+$conf['clamav']['installed'] = false; // will be detected automatically during installation
+$conf['clamav']['init_script'] = 'clamd@amavisd';
+
+//* Pureftpd
+$conf['pureftpd']['installed'] = false; // will be detected automatically during installation
+$conf['pureftpd']['config_dir'] = '/etc/pure-ftpd';
+$conf['pureftpd']['init_script'] = 'pure-ftpd';
+
+//* MyDNS
+$conf['mydns']['installed'] = false; // will be detected automatically during installation
+$conf['mydns']['config_dir'] = '/etc';
+$conf['mydns']['init_script'] = 'mydns';
+
+//* PowerDNS
+$conf['powerdns']['installed'] = false; // will be detected automatically during installation
+$conf['powerdns']['database'] = 'powerdns';
+$conf["powerdns"]["config_dir"] = '/etc/powerdns/pdns.d';
+$conf['powerdns']['init_script'] = 'pdns';
+
+//* BIND DNS Server
+$conf['bind']['installed'] = false; // will be detected automatically during installation
+$conf['bind']['bind_user'] = 'named';
+$conf['bind']['bind_group'] = 'named';
+$conf['bind']['bind_zonefiles_dir'] = '/var/named';
+$conf['bind']['named_conf_path'] = '/etc/named.conf';
+$conf['bind']['named_conf_local_path'] = '/etc/named.conf.local';
+$conf['bind']['init_script'] = 'named';
+
+//* Jailkit
+$conf['jailkit']['installed'] = false; // will be detected automatically during installation
+$conf['jailkit']['config_dir'] = '/etc/jailkit';
+$conf['jailkit']['jk_init'] = 'jk_init.ini';
+$conf['jailkit']['jk_chrootsh'] = 'jk_chrootsh.ini';
+$conf['jailkit']['jailkit_chroot_app_programs'] = '/usr/bin/groups /usr/bin/id /usr/bin/dircolors /bin/basename /usr/bin/dirname /usr/bin/nano';
+$conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php';
+
+//* Squid
+$conf['squid']['installed'] = false; // will be detected automatically during installation
+$conf['squid']['config_dir'] = '/etc/squid';
+$conf['squid']['init_script'] = 'squid';
+
+//* Nginx
+$conf['nginx']['installed'] = false; // will be detected automatically during installation
+$conf['nginx']['user'] = 'nginx';
+$conf['nginx']['group'] = 'nginx';
+$conf['nginx']['config_dir'] = '/etc/nginx';
+$conf['nginx']['vhost_conf_dir'] = '/etc/nginx/sites-available';
+$conf['nginx']['vhost_conf_enabled_dir'] = '/etc/nginx/sites-enabled';
+$conf['nginx']['init_script'] = 'nginx';
+$conf['nginx']['vhost_port'] = '8080';
+$conf['nginx']['cgi_socket'] = '/var/run/fcgiwrap.socket';
+$conf['nginx']['php_fpm_init_script'] = 'php-fpm';
+$conf['nginx']['php_fpm_ini_path'] = '/etc/php.ini';
+$conf['nginx']['php_fpm_pool_dir'] = '/etc/php-fpm.d';
+$conf['nginx']['php_fpm_start_port'] = 9010;
+$conf['nginx']['php_fpm_socket_dir'] = '/var/lib/php5-fpm';
+
+//* vlogger
+$conf['vlogger']['config_dir'] = '/etc';
+
+//* cron
+$conf['cron']['init_script'] = 'crond';
+$conf['cron']['crontab_dir'] = '/etc/cron.d';
+$conf['cron']['wget'] = '/usr/bin/wget';
+
+//* OpenVZ
+$conf['openvz']['installed'] = false;
+
+// AppArmor
+$conf['apparmor']['installed'] = false;
+
+?>
diff --git a/install/dist/lib/centos90.lib.php b/install/dist/lib/centos90.lib.php
new file mode 100644
index 0000000000..3dcd7494d3
--- /dev/null
+++ b/install/dist/lib/centos90.lib.php
@@ -0,0 +1,40 @@
+<?php
+
+/*
+Copyright (c) 2014, Till Brehm, ISPConfig UG
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+require_once realpath(dirname(__FILE__)) . '/centos_base.lib.php';
+
+class installer extends installer_centos {
+
+	protected $clamav_socket = '/var/run/clamd.amavisd/clamd.sock';
+	
+	// everything else is inherited from installer_centos class
+}
+
+?>
diff --git a/install/lib/install.lib.php b/install/lib/install.lib.php
index d9b482a842..7866715b47 100644
--- a/install/lib/install.lib.php
+++ b/install/lib/install.lib.php
@@ -295,88 +295,93 @@ function get_distname() {
 	}
 
 	//** RHEL (including compatible clones) & Fedora
-        elseif(file_exists('/etc/redhat-release') && file_exists('/etc/os-release')) {
-
-		$content = file_get_contents('/etc/os-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($prettyname[0], 'Fedora 32 (Thirty Two)')) {
-                        $distname = 'Fedora';
-                        $distver = '32';
-                        $distid = 'fedora32';
-                        $distbaseid = 'fedora';
-                        swriteln("Operating System: Fedora 32 or compatible\n");
-                } elseif(stristr($prettyname[0], 'Fedora 33 (Thirty Three)')) {
-                        $distname = 'Fedora';
-                        $distver = '33';
-                        $distid = 'fedora33';
-                        $distbaseid = 'fedora';
-                        swriteln("Operating System: Fedora 33 or compatible\n");
-                //** 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_version);
-                        $distname = $name[0];
-                        $distver = is_array($centos7_version)? implode('.', array_filter(array($centos7_version[1][0],$centos7_version[2][0],$centos7_version[3][0]),'strlen')) : $version[0];
-                        $distid = 'centos72';
-			$distbaseid = 'fedora';
-                        swriteln("Operating System: " . $distname . " " .  $distver . "\n");
-		//** 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';
-                        swriteln("Operating System: " . $prettyname[0] . "\n");
-		} else {
-                        $distname = 'Redhat';
-                        $distver = 'Unknown';
-                        $distid = 'fedora9';
-                        $distbaseid = 'fedora';
-                        swriteln("Operating System: Redhat or compatible\n");
-		}
+	elseif(file_exists('/etc/redhat-release') && file_exists('/etc/os-release')) {
+
+	$content = file_get_contents('/etc/os-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($prettyname[0], 'Fedora 32 (Thirty Two)')) {
+		$distname = 'Fedora';
+		$distver = '32';
+		$distid = 'fedora32';
+		$distbaseid = 'fedora';
+		swriteln("Operating System: Fedora 32 or compatible\n");
+	} elseif(stristr($prettyname[0], 'Fedora 33 (Thirty Three)')) {
+		$distname = 'Fedora';
+		$distver = '33';
+		$distid = 'fedora33';
+		$distbaseid = 'fedora';
+		swriteln("Operating System: Fedora 33 or compatible\n");
+	//** 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_version);
+		$distname = $name[0];
+		$distver = is_array($centos7_version)? implode('.', array_filter(array($centos7_version[1][0],$centos7_version[2][0],$centos7_version[3][0]),'strlen')) : $version[0];
+		$distid = 'centos72';
+		$distbaseid = 'fedora';
+		swriteln("Operating System: " . $distname . " " .  $distver . "\n");
+	//** 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';
+		swriteln("Operating System: " . $prettyname[0] . "\n");
+	//** RHEL 9 and compatible clones
+	} elseif(preg_match('/^(?:9|9\.[0-9]{1,2})$/', $versionid[0])) {
+		$distname = $name[0];
+		$distver = $version[0];
+		$distid = 'centos90';
+		$distbaseid = 'fedora';
+		swriteln("Operating System: " . $prettyname[0] . "\n");
+	} else {
+		$distname = 'Redhat';
+		$distver = 'Unknown';
+		$distid = 'fedora9';
+		$distbaseid = 'fedora';
+		swriteln("Operating System: Redhat or compatible\n");
+	}
 	//** CentOS 6
-        } elseif(file_exists('/etc/redhat-release') && !file_exists('/etc/os-release') && !file_exists('/etc/els-release')) {
+	} elseif(file_exists('/etc/redhat-release') && !file_exists('/etc/os-release') && !file_exists('/etc/els-release')) {
 
-                $content = file_get_contents('/etc/redhat-release');
+		$content = file_get_contents('/etc/redhat-release');
 
-                if(stristr($content, 'CentOS Linux release 6') || stristr($content, 'CentOS release 6')) {
-                        preg_match_all('/(6\.?([0-9]{0,2})\.?(\s)?([a-zA-Z()]+))$/', $content, $centos6_version);
-                        $distname = 'CentOS Linux';
+		if(stristr($content, 'CentOS Linux release 6') || stristr($content, 'CentOS release 6')) {
+			preg_match_all('/(6\.?([0-9]{0,2})\.?(\s)?([a-zA-Z()]+))$/', $content, $centos6_version);
+			$distname = 'CentOS Linux';
 			$distver = $centos6_version[0][0] ? $centos6_version[0][0] : '6';
 			$distid = 'centos53';
 			$distbaseid = 'fedora';
-                        swriteln("Operating System: " . $distname . " " .  $distver . "\n");
-
-                } else {
-                        $distname = 'Redhat';
-                        $distver = 'Unknown';
-                        $distid = 'fedora9';
-                        $distbaseid = 'fedora';
-                }
+			swriteln("Operating System: " . $distname . " " .  $distver . "\n");
+        } else {
+			$distname = 'Redhat';
+			$distver = 'Unknown';
+			$distid = 'fedora9';
+			$distbaseid = 'fedora';
+		}
 	//** CentOS 6 Extended Lifecycle Support by CloudLinux
-        } elseif(file_exists('/etc/redhat-release') && file_exists('/etc/els-release') && !file_exists('/etc/os-release')) {
+	} elseif(file_exists('/etc/redhat-release') && file_exists('/etc/els-release') && !file_exists('/etc/os-release')) {
 
-                $content = file_get_contents('/etc/els-release');
+		$content = file_get_contents('/etc/els-release');
 
-                if(stristr($content, 'CentOS Linux release 6') || stristr($content, 'CentOS release 6')) {
-                        preg_match_all('/(6)\.?([0-9]{0,2})?\.?\s([a-zA-Z(), ]+)?$/', $content, $centos6_version);
-                        $distname = 'CentOS Linux';
-                        $distver = $centos6_version[0][0] ? $centos6_version[0][0] : '6';
-                        $distid = 'centos53';
+		if(stristr($content, 'CentOS Linux release 6') || stristr($content, 'CentOS release 6')) {
+			preg_match_all('/(6)\.?([0-9]{0,2})?\.?\s([a-zA-Z(), ]+)?$/', $content, $centos6_version);
+			$distname = 'CentOS Linux';
+			$distver = $centos6_version[0][0] ? $centos6_version[0][0] : '6';
+			$distid = 'centos53';
 			$distbaseid = 'fedora';
-                        swriteln("Operating System: " . $distname . " " .  $distver . "\n");
-                } else {
-                        $distname = 'Redhat';
-                        $distver = 'Unknown';
-                        $distid = 'fedora9';
-                        $distbaseid = 'fedora';
-                }
-        }
-
+			swriteln("Operating System: " . $distname . " " .  $distver . "\n");
+		} else {
+			$distname = 'Redhat';
+			$distver = 'Unknown';
+			$distid = 'fedora9';
+			$distbaseid = 'fedora';
+		}
+	}
 
 	//** Gentoo
 	elseif(file_exists('/etc/gentoo-release')) {
diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php
index bb0124a26c..3d540ac8c8 100644
--- a/server/lib/classes/monitor_tools.inc.php
+++ b/server/lib/classes/monitor_tools.inc.php
@@ -275,7 +275,6 @@ class monitor_tools {
 		}
 	}
 
-
 	//** RHEL (including compatible clones) & Fedora
 	elseif(file_exists('/etc/redhat-release') && file_exists('/etc/os-release')) {
 
@@ -296,7 +295,7 @@ class monitor_tools {
 			$distver = '33';
 			$distid = 'fedora33';
 			$distbaseid = 'fedora';
-                //** RHEL 7 and compatible clones 
+        //** 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_version);
 			$distname = $name[0];
@@ -309,6 +308,12 @@ class monitor_tools {
 			$distver = $version[0];
 			$distid = 'centos80';
 			$distbaseid = 'fedora';
+		//** RHEL 9 and compatible clones
+		} elseif(preg_match('/^(?:9|9\.[0-9]{1,2})$/', $versionid[0])) {
+			$distname = $name[0];
+			$distver = $version[0];
+			$distid = 'centos90';
+			$distbaseid = 'fedora';
 		} else {
 			$distname = 'Redhat';
 			$distver = 'Unknown';
@@ -316,41 +321,40 @@ class monitor_tools {
 			$distbaseid = 'fedora';
 		}
         //** CentOS 6
-        } elseif(file_exists('/etc/redhat-release') && !file_exists('/etc/os-release') && !file_exists('/etc/els-release')) {
-
-                $content = file_get_contents('/etc/redhat-release');
-
-                if(stristr($content, 'CentOS Linux release 6') || stristr($content, 'CentOS release 6')) {
-                        preg_match_all('/(6\.?([0-9]{0,2})\.?(\s)?([a-zA-Z()]+))$/', $content, $centos6_version);
-                        $distname = 'CentOS Linux';
-                        $distver = $centos6_version[0][0] ? $centos6_version[0][0] : '6';
-                        $distid = 'centos53';
-                        $distbaseid = 'fedora';
-                } else {
-                        $distname = 'Redhat';
-                        $distver = 'Unknown';
-                        $distid = 'fedora9';
-                        $distbaseid = 'fedora';
-                }
+		} elseif(file_exists('/etc/redhat-release') && !file_exists('/etc/os-release') && !file_exists('/etc/els-release')) {
+
+			$content = file_get_contents('/etc/redhat-release');
+
+			if(stristr($content, 'CentOS Linux release 6') || stristr($content, 'CentOS release 6')) {
+				preg_match_all('/(6\.?([0-9]{0,2})\.?(\s)?([a-zA-Z()]+))$/', $content, $centos6_version);
+				$distname = 'CentOS Linux';
+				$distver = $centos6_version[0][0] ? $centos6_version[0][0] : '6';
+				$distid = 'centos53';
+				$distbaseid = 'fedora';
+			} else {
+				$distname = 'Redhat';
+				$distver = 'Unknown';
+				$distid = 'fedora9';
+				$distbaseid = 'fedora';
+			}
         //** CentOS 6 Extended Lifecycle Support by CloudLinux
         } elseif(file_exists('/etc/redhat-release') && file_exists('/etc/els-release') && !file_exists('/etc/os-release')) {
 
-                $content = file_get_contents('/etc/els-release');
-
-                if(stristr($content, 'CentOS Linux release 6') || stristr($content, 'CentOS release 6')) {
-                        preg_match_all('/(6)\.?([0-9]{0,2})?\.?\s([a-zA-Z(), ]+)?$/', $content, $centos6_version);
-                        $distname = 'CentOS Linux';
-                        $distver = $centos6_version[0][0] ? $centos6_version[0][0] : '6';
-                        $distid = 'centos53';
-                        $distbaseid = 'fedora';
-                } else {
-                        $distname = 'Redhat';
-                        $distver = 'Unknown';
-                        $distid = 'fedora9';
-                        $distbaseid = 'fedora';
-                }
-        }
+			$content = file_get_contents('/etc/els-release');
 
+			if(stristr($content, 'CentOS Linux release 6') || stristr($content, 'CentOS release 6')) {
+				preg_match_all('/(6)\.?([0-9]{0,2})?\.?\s([a-zA-Z(), ]+)?$/', $content, $centos6_version);
+				$distname = 'CentOS Linux';
+				$distver = $centos6_version[0][0] ? $centos6_version[0][0] : '6';
+				$distid = 'centos53';
+				$distbaseid = 'fedora';
+			} else {
+				$distname = 'Redhat';
+				$distver = 'Unknown';
+				$distid = 'fedora9';
+				$distbaseid = 'fedora';
+			}
+		}
 
 	//** Gentoo
 	elseif(file_exists('/etc/gentoo-release')) {
-- 
GitLab