Skip to content

Commit e801eb8

Browse files
committed
overhauled RHEL/Fedora detection
1 parent 8add9a8 commit e801eb8

File tree

1 file changed

+42
-62
lines changed

1 file changed

+42
-62
lines changed

server/lib/classes/monitor_tools.inc.php

Lines changed: 42 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -261,8 +261,8 @@ function get_distname() {
261261
$distbaseid = 'opensuse';
262262
} elseif(stristr(file_get_contents('/etc/os-release'), 'opensuse')) {
263263
$content = file_get_contents('/etc/os-release');
264-
preg_match_all('/NAME=\"([\w ]+)\"/m', $content, $name);
265-
preg_match_all('/VERSION_ID=\"([0-9]{1,2})\.?([0-9]{0,2})\.?([0-9]*).$/m', $content, $version);
264+
preg_match_all('/NAME=\"([\w ]+)\"/m', $content, $name);
265+
preg_match_all('/VERSION_ID=\"([0-9]{1,2})\.?([0-9]{0,2})\.?([0-9]*).$/m', $content, $version);
266266
$distname = is_array($name) ? $name[1][0] : 'openSUSE';
267267
$distver = is_array($version) ? implode('.', array_filter(array($version[1][0],$version[2][0],$version[3][0]),'strlen')) : 'Unknown';
268268
$distid = 'opensuse112';
@@ -276,85 +276,65 @@ function get_distname() {
276276
}
277277

278278

279-
//** Redhat
280-
elseif(file_exists('/etc/redhat-release')) {
279+
//** RHEL (including compatible clones) & Fedora
280+
elseif(file_exists('/etc/redhat-release') && file_exists('/etc/os-release')) {
281+
$content = file_get_contents('/etc/os-release');
281282

282-
$content = file_get_contents('/etc/redhat-release');
283+
//preg_match('/(?<=PRETTY_NAME=\").+?(?=\")/', $content, $prettyname);
284+
preg_match('/(?<=NAME=\").+?(?=\")/', $content, $name);
285+
preg_match('/(?<=VERSION=\").+?(?=\")/', $content, $version);
286+
preg_match('/(?<=VERSION_ID=\").+?(?=\")/', $content, $versionid);
283287

284-
if(stristr($content, 'Fedora release 9 (Sulphur)')) {
285-
$distname = 'Fedora';
286-
$distver = '9';
287-
$distid = 'fedora9';
288-
$distbaseid = 'fedora';
289-
} elseif(stristr($content, 'Fedora release 10 (Cambridge)')) {
290-
$distname = 'Fedora';
291-
$distver = '10';
292-
$distid = 'fedora9';
293-
$distbaseid = 'fedora';
294-
} elseif(stristr($content, 'Fedora release 10')) {
295-
$distname = 'Fedora';
296-
$distver = '11';
297-
$distid = 'fedora9';
298-
$distbaseid = 'fedora';
299-
} elseif(stristr($content, 'Fedora release 32 (Thirty Two)')) {
288+
if(stristr($prettyname[0], 'Fedora 32 (Thirty Two)')) {
300289
$distname = 'Fedora';
301290
$distver = '32';
302291
$distid = 'fedora32';
303292
$distbaseid = 'fedora';
304-
} elseif(stristr($content, 'Fedora release 33 (Thirty Three)')) {
293+
} elseif(stristr($prettyname[0], 'Fedora 33 (Thirty Three)')) {
305294
$distname = 'Fedora';
306295
$distver = '33';
307296
$distid = 'fedora33';
308297
$distbaseid = 'fedora';
309-
} elseif(stristr($content, 'CentOS release 5.2 (Final)')) {
310-
$distname = 'CentOS';
311-
$distver = '5.2';
312-
$distid = 'centos52';
313-
$distbaseid = 'fedora';
314-
} elseif(stristr($content, 'CentOS release 5.3 (Final)')) {
315-
$distname = 'CentOS';
316-
$distver = '5.3';
317-
$distid = 'centos53';
298+
//** RHEL 7 and compatible clones
299+
} elseif(preg_match('/^(?:7|7\.[0-9]{1,2})$/', $versionid[0])) {
300+
preg_match_all('/([0-9]{1,2})\.?([0-9]{0,2})\.?([0-9]*)/', file_get_contents('/etc/redhat-release'), $centos7_string);
301+
$distname = $name[0];
302+
$distver = is_array($centos7_string)? implode('.', array_filter(array($centos7_string[1][0],$centos7_string[2][0],$centos7_string[3][0]),'strlen')) : $version[0];
303+
$distid = 'centos72';
304+
$distbaseid = 'fedora';
305+
//** RHEL 8 and compatible clones
306+
} elseif(preg_match('/^(?:8|8\.[0-9]{1,2})$/', $versionid[0])) {
307+
$distname = $name[0];
308+
$distver = $version[0];
309+
$distid = 'centos80';
318310
$distbaseid = 'fedora';
319-
} elseif(stristr($content, 'CentOS release 5')) {
320-
$distname = 'CentOS';
321-
$distver = 'Unknown';
322-
$distid = 'centos53';
323-
$distbaseid = 'fedora';
324-
} elseif(stristr($content, 'CentOS Linux release 6') || stristr($content, 'CentOS release 6')) {
325-
$distname = 'CentOS';
326-
$distver = 'Unknown';
327-
$distid = 'centos53';
328-
$distbaseid = 'fedora';
329-
} elseif(stristr($content, 'CentOS Linux release 7')) {
330-
preg_match_all('/([0-9]{1,2})\.?([0-9]{0,2})\.?([0-9]*)/', $content, $version);
331-
$distname = 'CentOS';
332-
$distver = is_array($version)? implode('.', array_filter(array($version[1][0],$version[2][0],$version[3][0]),'strlen')) :'Unknown';
333-
$distbaseid = 'fedora';
334-
$var=explode(" ", $content);
335-
$var=explode(".", $var[3]);
336-
$var=$var[0].".".$var[1];
337-
if($var=='7.0' || $var=='7.1') {
338-
$distid = 'centos70';
339-
} else {
340-
$distid = 'centos72';
341-
}
342-
} elseif(stristr($content, 'CentOS Linux release 8')) {
343-
preg_match_all('/([0-9]{1,2})\.?([0-9]{0,2})\.?([0-9]*)/', $content, $version);
344-
$distname = 'CentOS';
345-
$distver = is_array($version)? implode('.', array_filter(array($version[1][0],$version[2][0],$version[3][0]),'strlen')) :'Unknown';
346-
$distbaseid = 'fedora';
347-
$var=explode(" ", $content);
348-
$var=explode(".", $var[3]);
349-
$var=$var[0].".".$var[1];
350311
} else {
351312
$distname = 'Redhat';
352313
$distver = 'Unknown';
353314
$distid = 'fedora9';
354315
$distbaseid = 'fedora';
355316
}
317+
} elseif(file_exists('/etc/redhat-release') && !file_exists('/etc/os-release')) {
318+
319+
$content = file_get_contents('/etc/redhat-release');
320+
321+
if(stristr($content, 'CentOS Linux release 6') || stristr($content, 'CentOS release 6')) {
322+
$distname = 'CentOS';
323+
$distver = 'Unknown';
324+
$distid = 'centos53';
325+
$distbaseid = 'fedora';
326+
} else {
327+
$distname = 'Redhat';
328+
$distver = 'Unknown';
329+
$distid = 'fedora9';
330+
$distbaseid = 'fedora';
331+
}
332+
356333
}
357334

335+
336+
337+
358338
//** Gentoo
359339
elseif(file_exists('/etc/gentoo-release')) {
360340

0 commit comments

Comments
 (0)