Application version string * @var string $setGITVersion from prepend_adm.php -> Application version string - GIT version * @var int $chkDomainId from prepend_adm.php -> Configuration domain id * @var int $prePageKey from prepend_adm.php -> Admin access key * @var array $SETS Settings array * @var array $arrDescription from fieldvars.php -> Translated common strings */ /* Path settings */ $strPattern = '(admin/[^/]*.php)'; $preRelPath = preg_replace($strPattern, '', filter_input(INPUT_SERVER, 'PHP_SELF')); $preBasePath = preg_replace($strPattern, '', filter_input(INPUT_SERVER, 'SCRIPT_FILENAME')); /* Define common variables */ $prePageId = 40; $preContent = 'admin/support.htm.tpl'; $preAccess = 1; $preFieldvars = 1; $setSaveLangId = 'private'; $strErrorMessage = ''; $strInfoMessage = ''; /* Include preprocessing file */ require $preBasePath . 'functions/prepend_adm.php'; require $preBasePath . 'functions/prepend_content.php'; /* Start content */ $conttp->setVariable('TITLE', translate('NagiosQL support page')); $conttp->parse('header'); $conttp->show('header'); /* Single data form */ $conttp->setVariable('MAINSITE', $_SESSION['SETS']['path']['base_url'] . 'admin.php'); foreach ($arrDescription as $elem) { $conttp->setVariable($elem['name'], $elem['string']); } $conttp->setVariable('SUBTITLE_1', translate('Support contact information')); $conttp->setVariable('SUPPORT_TEXT_1', translate('For questions, the online support forum or contact information ' . 'visit our website:')); $conttp->setVariable('WEBSITE_LINK', translate('NagiosQL on sourceforge')); /* Donation */ $conttp->setVariable('SUBTITLE_2', translate('Donate to support NagiosQL')); $conttp->setVariable('SUPPORT_TEXT_2', translate('If you like NagiosQL and it simplifies your daily work, then you ' . 'may want to support the project by making a donation. This helps us to keep NagiosQL alive and to cover ' . 'our costs. Thank you for your donation!')); $conttp->setVariable('DONATE_LINK', translate('Donate for NagiosQL on sourceforge')); /* Translations */ $conttp->setVariable('SUBTITLE_3', translate('Translation services')); $conttp->setVariable('SUPPORT_TEXT_3', translate('NagiosQL was translated into various languages​​. Since some ' . 'translators are no longer available in later versions, there may be untranslated words or phrases. If ' . 'you want to help us complete the translation, correct them or introduce a new language​​, then sign up ' . 'with us now! The translations are simply feasible online - we use an open translation service where ' . 'you can register for free at any time:')); $conttp->setVariable('TRANSLATION_LINK', translate('Transifex translation service')); /* GIT repository */ $conttp->setVariable('SUBTITLE_8', translate('GIT software repository')); $conttp->setVariable('SUPPORT_TEXT_5', translate('The NagiosQL sources are available on GitLab. There you will ' . 'always find the latest bugfixes and changes as well as older branches.')); $conttp->setVariable('GIT_LINK', translate('GitLab')); /* Online version check */ $conttp->setVariable('SUBTITLE_4', translate('Version check')); if (!isset($SETS['common']['updcheck']) || ($SETS['common']['updcheck'] === '0')) { $conttp->setVariable('SUPPORT_TEXT_4', translate('The online version check is not enabled. You can enable it ' . 'on the settings page.')); } elseif (isset($SETS['common']['updcheck']) && ($SETS['common']['updcheck'] === '1')) { $conttp->setVariable('SUPPORT_TEXT_4', translate('The online version check connects the NagiosQL page to find ' . 'out, if your version is still up to date.')); $conttp->setVariable('LOADER_IMAGE', $_SESSION['SETS']['path']['base_url'] . 'images/loader.gif'); $conttp->setVariable('VERSION_IF_SRC', $_SESSION['SETS']['path']['base_url'] . 'admin/versioncheck.php?show=0'); $conttp->parse('versioncheck_frame'); $conttp->setVariable('VERSION_IF_SRC_RELOAD', $_SESSION['SETS']['path']['base_url'] . 'admin/versioncheck.php?show=1'); $conttp->parse('versioncheck_js'); } $conttp->setVariable('GIT_TITLE', translate('GIT code version')); $conttp->setVariable('GIT_VERSION', $setFileVersion . '-' . $setGITVersion); /* Environment check */ $conttp->setVariable('SUBTITLE_5', translate('Environment check')); /* Javascript check */ $conttp->setVariable('FAILED', translate('failed')); $conttp->setVariable('OK', translate('ok')); /* PHP version check */ $conttp->setVariable('PHP_VERSION', translate('PHP version')); if (PHP_VERSION_ID >= 50500) { $conttp->setVariable('PHP_CLASS', 'checkgreen'); $conttp->setVariable('PHP_RESULT', translate('ok') . ' (' . PHP_VERSION . ')'); } else { $conttp->setVariable('PHP_CLASS', 'checkred'); $conttp->setVariable('PHP_RESULT', translate('failed') . ' (' . PHP_VERSION . ' - ' . translate('Required:') . ' 5.5.0)'); } /* PHP modules / extensions */ $strExtPath = ini_get('extension_dir'); $strPrefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' : ''; $conttp->setVariable('PHP_SESSION_MODULE', translate('PHP module:') . ' session'); if (extension_loaded('session')) { $conttp->setVariable('PHP_SESSION_CLASS', 'checkgreen'); $conttp->setVariable('PHP_SESSION_RESULT', translate('ok')); } else { $conttp->setVariable('PHP_SESSION_CLASS', 'checkred'); $conttp->setVariable('PHP_SESSION_RESULT', translate('failed')); } $conttp->setVariable('PHP_GETTEXT_MODULE', translate('PHP module:') . ' gettext'); if (extension_loaded('gettext')) { $conttp->setVariable('PHP_GETTEXT_CLASS', 'checkgreen'); $conttp->setVariable('PHP_GETTEXT_RESULT', translate('ok')); } else { $conttp->setVariable('PHP_GETTEXT_CLASS', 'checkred'); $conttp->setVariable('PHP_GETTEXT_RESULT', translate('failed')); } $conttp->setVariable('PHP_FTP_MODULE', translate('PHP module:') . ' ftp'); if (extension_loaded('ftp')) { $conttp->setVariable('PHP_FTP_CLASS', 'checkgreen'); $conttp->setVariable('PHP_FTP_RESULT', translate('ok')); $intFTP_ok = 1; } else { $conttp->setVariable('PHP_FTP_CLASS', 'checkorange'); $conttp->setVariable('PHP_FTP_RESULT', translate('failed')); $intFTP_ok = 0; } $conttp->setVariable('PHP_SSH2_MODULE', translate('PHP module:') . ' ssh'); if (extension_loaded('ssh2')) { $conttp->setVariable('PHP_SSH2_CLASS', 'checkgreen'); $conttp->setVariable('PHP_SSH2_RESULT', translate('ok')); $intSSH_ok = 1; } else { $conttp->setVariable('PHP_SSH2_CLASS', 'checkorange'); $conttp->setVariable('PHP_SSH2_RESULT', translate('failed')); $intSSH_ok = 0; } /* Datenbankversion */ if ($SETS['db']['type'] === 'mysql') { $conttp->setVariable('DB_VERSION', translate('MySQL version')); $strSQL = "SHOW VARIABLES LIKE 'version'"; $booReturn = $myDBClass->hasSingleDataset($strSQL, $arrDataset); if ($booReturn && (count($arrDataset) !== 0)) { $strDBVersion = $arrDataset['Value']; if (version_compare($strDBVersion, '5.0.0', '>=')) { $conttp->setVariable('DB_CLASS', 'checkgreen'); $conttp->setVariable('DB_RESULT', translate('ok') . ' (' . $strDBVersion . ')'); } else { $conttp->setVariable('DB_CLASS', 'checkorange'); $conttp->setVariable('DB_RESULT', translate('failed') . ' (' . $strDBVersion . ' - ' . translate('Required:') . ' 5.0.0)'); } } } /* INI settings */ $conttp->setVariable('INI_FILE_UPLOADS', translate('PHP ini settings:') . ' file_uploads'); $strStatus1 = ini_get('file_uploads'); if (empty($strStatus1) || ($strStatus1 === '1')) { $conttp->setVariable('INI_FILE_UPLOADS_CLASS', 'checkgreen'); $conttp->setVariable('INI_FILE_UPLOADS_RESULT', translate('ok')); } else { $conttp->setVariable('INI_FILE_UPLOADS_CLASS', 'checkred'); $conttp->setVariable('INI_FILE_UPLOADS_RESULT', translate('failed')); } $conttp->setVariable('INI_AUTO_START', translate('PHP ini settings:') . ' session.auto_start'); $strStatus2 = ini_get('session.auto_start'); if (empty($strStatus2) || ($strStatus2 === '0')) { $conttp->setVariable('INI_AUTO_START_CLASS', 'checkgreen'); $conttp->setVariable('INI_AUTO_START_RESULT', translate('ok')); } else { $conttp->setVariable('INI_AUTO_START_CLASS', 'checkred'); $conttp->setVariable('INI_AUTO_START_RESULT', translate('failed')); } $conttp->setVariable('INI_SUHO_SESS_ENC', translate('PHP ini settings:') . ' suhosin.session.encrypt'); $strStatus3 = ini_get('suhosin.session.encrypt'); if (empty($strStatus3) || ($strStatus3 === '0')) { $conttp->setVariable('INI_SUHO_SESS_ENC_CLASS', 'checkgreen'); $conttp->setVariable('INI_SUHO_SESS_ENC_RESULT', translate('ok')); } else { $conttp->setVariable('INI_SUHO_SESS_ENC_CLASS', 'checkred'); $conttp->setVariable('INI_SUHO_SESS_ENC_RESULT', translate('failed')); } $conttp->setVariable('INI_DATE_TIMEZONE', translate('PHP ini settings:') . ' date.timezone'); $strStatus4 = ini_get('date.timezone'); if (!empty($strStatus4)) { $conttp->setVariable('INI_DATE_TIMEZONE_CLASS', 'checkgreen'); $conttp->setVariable('INI_DATE_TIMEZONE_RESULT', translate('ok') . ' (' . $strStatus4 . ')'); } else { $conttp->setVariable('INI_DATE_TIMEZONE_CLASS', 'checkred'); $conttp->setVariable('INI_DATE_TIMEZONE_RESULT', translate('failed')); } /* File access checks */ $conttp->setVariable('RW_CONFIG', translate('Read/Write access:') . ' settings.php'); $strConfigFile = '../config/settings.php'; if (file_exists($strConfigFile) && is_readable($strConfigFile) && is_writable($strConfigFile)) { $conttp->setVariable('RW_CONFIG_CLASS', 'checkgreen'); $conttp->setVariable('RW_CONFIG_RESULT', translate('ok')); } else { $conttp->setVariable('RW_CONFIG_CLASS', 'checkred'); $conttp->setVariable('RW_CONFIG_RESULT', translate('failed')); } /* Domain checks */ $myConfigClass->getConfigTargets($arrConfigSet); $intConfigId = $arrConfigSet[0]; $myConfigClass->getConfigValues($intConfigId, 'method', $strMethod); $intMethod = (int)$strMethod; if ($intConfigId !== 0) { $conttp->setVariable('SUBTITLE_6', translate('Config domain checks')); $conttp->setVariable('SUPPORT_TEXT_6', translate('The checks below are based on your data domain and config ' . 'domain settings. To change the data domain, use the pull down menu in the upper right corner. Repeat ' . 'this check for any data domain you have configured. To change the config domain, use the data domain ' . 'menu and select a different config domain value.')); $myConfigClass->getConfigValues($intConfigId, 'conffile', $strConffile); $myConfigClass->getConfigValues($intConfigId, 'target', $strConfName); $conttp->setVariable('DOMAIN_NAME', translate('Config domain name')); $conttp->setVariable('DOMAIN_NAME_VALUE', $strConfName); $conttp->setVariable('CONNECT_TYPE', translate('Connection type')); if ($intMethod === 1) { $conttp->setVariable('CONNECT_TYPE_CLASS', 'checkgreen'); $conttp->setVariable('CONNECT_TYPE_RESULT', 'Fileaccess'); } elseif ($intMethod === 2) { if ($intFTP_ok === 1) { $conttp->setVariable('CONNECT_TYPE_CLASS', 'checkgreen'); $conttp->setVariable('CONNECT_TYPE_RESULT', 'FTP'); } else { $conttp->setVariable('CONNECT_TYPE_CLASS', 'checkred'); $conttp->setVariable('CONNECT_TYPE_RESULT', 'FTP (no FTP module)'); } } elseif ($intMethod === 3) { if ($intSSH_ok === 1) { $conttp->setVariable('CONNECT_TYPE_CLASS', 'checkgreen'); $conttp->setVariable('CONNECT_TYPE_RESULT', 'SSH/SFTP'); } else { $conttp->setVariable('CONNECT_TYPE_CLASS', 'checkred'); $conttp->setVariable('CONNECT_TYPE_RESULT', 'SSH/SFTP (no SSH2 module)'); } } $conttp->setVariable('CONNECT_CHECK', translate('Connection check')); if ($intMethod === 1) { $conttp->setVariable('CONNECT_CHECK_CLASS', 'checkgreen'); $conttp->setVariable('CONNECT_CHECK_RESULT', translate('ok')); } elseif ($intMethod === 2) { $booReturn = 0; if (empty($myConfigClass->conFTPConId)) { $booReturn = $myConfigClass->getFTPConnection($intConfigId); } if ($booReturn === 1) { $conttp->setVariable('CONNECT_CHECK_CLASS', 'checkred'); $conttp->setVariable('CONNECT_CHECK_RESULT', translate('failed')); $myVisClass->processMessage($myConfigClass->strErrorMessage, $strErrorMessage); $intConnectCheck = 0; } else { $conttp->setVariable('CONNECT_CHECK_CLASS', 'checkgreen'); $conttp->setVariable('CONNECT_CHECK_RESULT', translate('ok')); $intConnectCheck = 1; } } elseif ($intMethod === 3) { $booReturn = 0; if (empty($myConfigClass->resSSHConId) || !is_resource($myConfigClass->resSSHConId)) { $booReturn = $myConfigClass->getSSHConnection($intConfigId); } if ($booReturn === 1) { $conttp->setVariable('CONNECT_CHECK_CLASS', 'checkred'); $conttp->setVariable('CONNECT_CHECK_RESULT', translate('failed')); $myVisClass->processMessage($myConfigClass->strErrorMessage, $strErrorMessage); $intConnectCheck = 0; } else { $conttp->setVariable('CONNECT_CHECK_CLASS', 'checkgreen'); $conttp->setVariable('CONNECT_CHECK_RESULT', translate('ok')); $intConnectCheck = 1; } } $conttp->setVariable('RW_NAG_CONF', translate('Nagios config file')); if ($intMethod === 1) { if (file_exists($strConffile) && is_readable($strConffile)) { if (is_writable($strConffile)) { $conttp->setVariable('RW_NAG_CONF_CLASS', 'checkgreen'); $conttp->setVariable('RW_NAG_CONF_RESULT', translate('ok')); } else { $conttp->setVariable('RW_NAG_CONF_CLASS', 'checkorange'); $conttp->setVariable('RW_NAG_CONF_RESULT', translate('ok') . ' (' . translate('readonly') . ')'); } } else { $conttp->setVariable('RW_NAG_CONF_CLASS', 'checkred'); $conttp->setVariable('RW_NAG_CONF_RESULT', translate('failed')); } } elseif (($intMethod === 2) || ($intMethod === 3)) { /* Write file to temporary */ $strFileName = tempnam($SETS['path']['tempdir'], 'nagiosql_conf'); /* Copy configuration from remote system */ $intReturn = $myConfigClass->remoteFileCopy($strConffile, $intConfigId, $strFileName); if ($intReturn === 0) { $intCheck = 0; } else { $intCheck = 1; $myVisClass->processMessage($myConfigClass->strErrorMessage, $strErrorMessage); if (file_exists($strFileName)) { unlink($strFileName); } } /* Copy configuration to remote system */ if ($intCheck === 0) { $intReturn = $myConfigClass->remoteFileCopy($strConffile, $intConfigId, $strFileName, 1); if ($intReturn === 0) { $intCheck = 0; } else { $myVisClass->processMessage($myConfigClass->strErrorMessage, $strErrorMessage); $intCheck = 2; } if (file_exists($strFileName)) { unlink($strFileName); } } /* Write Results */ if ($intCheck === 0) { $conttp->setVariable('RW_NAG_CONF_CLASS', 'checkgreen'); $conttp->setVariable('RW_NAG_CONF_RESULT', translate('ok')); } elseif ($intCheck === 1) { $conttp->setVariable('RW_NAG_CONF_CLASS', 'checkred'); $conttp->setVariable('RW_NAG_CONF_RESULT', translate('failed')); } elseif ($intCheck === 2) { $conttp->setVariable('RW_NAG_CONF_CLASS', 'checkorange'); $conttp->setVariable('RW_NAG_CONF_RESULT', translate('ok') . ' (' . translate('readonly') . ')'); } } $myConfigClass->getConfigValues($intConfigId, 'pidfile', $strPidfile); $myConfigClass->getConfigValues($intConfigId, 'binaryfile', $strBinary); $myConfigClass->getConfigValues($intConfigId, 'commandfile', $strCommandfile); $conttp->setVariable('CHECK_NAG_LOCK', translate('Nagios process file')); $intDemonOk = 0; $intCheck = 0; if ($intMethod === 1) { if (substr_count(PHP_OS, 'Linux') !== 0) { exec('ps -ef | grep ' . basename($strBinary) . ' | grep -v grep', $arrExec); } else { $arrExec[0] = 1; } if (isset($arrExec[0])) { if (file_exists($strPidfile)) { $conttp->setVariable('CHECK_NAG_LOCK_CLASS', 'checkgreen'); $conttp->setVariable('CHECK_NAG_LOCK_RESULT', translate('ok')); $intDemonOk = 0; } else { $conttp->setVariable('CHECK_NAG_LOCK_CLASS', 'checkorange'); $conttp->setVariable('CHECK_NAG_LOCK_RESULT', translate('ok') . ' (' . translate('file is missed or not used') . ')'); $intDemonOk = 1; } } else { $conttp->setVariable('CHECK_NAG_LOCK_CLASS', 'checkred'); $conttp->setVariable('CHECK_NAG_LOCK_RESULT', translate('failed')); $myVisClass->processMessage(translate('Nagios daemon is not running'), $strErrorMessage); $intDemonOk = 1; } } elseif ($intMethod === 2) { $conttp->setVariable('CHECK_NAG_LOCK_CLASS', 'checkorange'); $conttp->setVariable('CHECK_NAG_LOCK_RESULT', translate('ok') . ' (' . translate('not used with FTP') . ')'); $intDemonOk = 1; } elseif ($intMethod === 3) { $arrResultBinary = array(); $arrResultPid = array(); $intBinary = 1; $intPid = 1; if ($strBinary !== '') { $intBinary = $myConfigClass->sendSSHCommand('ps -ef | grep ' . basename($strBinary) . ' | grep ' . basename($strConffile) . ' | grep -v grep', $arrResultBinary); } if ($strPidfile !== '') { $intPid = $myConfigClass->sendSSHCommand('ls ' . $strPidfile, $arrResult2); } if (($intBinary === 0) && ($intPid === 0)) { $conttp->setVariable('CHECK_NAG_LOCK_CLASS', 'checkgreen'); $conttp->setVariable('CHECK_NAG_LOCK_RESULT', translate('ok')); $intDemonOk = 0; } elseif (($intBinary === 0) && ($intPid === 1)) { $conttp->setVariable('CHECK_NAG_LOCK_CLASS', 'checkorange'); $conttp->setVariable('CHECK_NAG_LOCK_RESULT', translate('ok') . ' (' . translate('file is missed or not used') . ')'); $intDemonOk = 1; } else { $conttp->setVariable('CHECK_NAG_LOCK_CLASS', 'checkred'); $conttp->setVariable('CHECK_NAG_LOCK_RESULT', translate('failed') . ' (' . translate('demon dead') . ')'); $myVisClass->processMessage(translate('Nagios daemon is not running'), $strErrorMessage); $intDemonOk = 1; } } /* Command file */ $conttp->setVariable('RW_NAG_COMMAND', translate('Nagios command file')); if ($intMethod === 1) { if (file_exists($strCommandfile) && is_readable($strCommandfile) && is_writable($strCommandfile)) { if ($intDemonOk === 0) { $conttp->setVariable('RW_NAG_COMMAND_CLASS', 'checkgreen'); $conttp->setVariable('RW_NAG_COMMAND_RESULT', translate('ok')); } else { $conttp->setVariable('RW_NAG_COMMAND_CLASS', 'checkorange'); $conttp->setVariable('RW_NAG_COMMAND_RESULT', translate('ok') . ' (' . translate('demon dead') . '?)'); } } if (!file_exists($strCommandfile)) { $conttp->setVariable('RW_NAG_COMMAND_CLASS', 'checkred'); $conttp->setVariable('RW_NAG_COMMAND_RESULT', translate('failed') . ' (' . translate('file is missed') . ')'); } elseif (!is_writable($strCommandfile)) { $conttp->setVariable('RW_NAG_COMMAND_CLASS', 'checkred'); $conttp->setVariable('RW_NAG_COMMAND_RESULT', translate('failed') . ' (' . translate('readonly') . ')'); } elseif (!is_readable($strCommandfile)) { $conttp->setVariable('RW_NAG_COMMAND_CLASS', 'checkred'); $conttp->setVariable('RW_NAG_COMMAND_RESULT', translate('failed')); } } elseif ($intMethod === 2) { $conttp->setVariable('RW_NAG_COMMAND_CLASS', 'checkorange'); $conttp->setVariable('RW_NAG_COMMAND_RESULT', translate('ok') . ' (' . translate('not used with FTP') . ')'); } elseif ($intMethod === 3) { if ($strCommandfile !== '') { if ($intDemonOk === 0) { $myConfigClass->sendSSHCommand('echo "TEST" >>' . $strCommandfile . '; echo $?; echo ""', $arrTemp); if ($arrTemp[0] === 0) { $conttp->setVariable('RW_NAG_COMMAND_CLASS', 'checkgreen'); $conttp->setVariable('RW_NAG_COMMAND_RESULT', translate('ok')); } else { $conttp->setVariable('RW_NAG_COMMAND_CLASS', 'checkred'); $conttp->setVariable('RW_NAG_COMMAND_RESULT', translate('failed') . ' (' . translate('readonly') . ')'); } } elseif ($intDemonOk === 1) { $conttp->setVariable('RW_NAG_COMMAND_CLASS', 'checkred'); $conttp->setVariable('RW_NAG_COMMAND_RESULT', translate('failed') . ' (' . translate('demon dead') . ')'); } else { $conttp->setVariable('RW_NAG_COMMAND_CLASS', 'checkred'); $conttp->setVariable('RW_NAG_COMMAND_RESULT', translate('failed') . ' (' . translate('file is missed') . ')'); } } else { $conttp->setVariable('RW_NAG_COMMAND_CLASS', 'checkred'); $conttp->setVariable('RW_NAG_COMMAND_RESULT', translate('failed') . ' (' . translate('file is missed') . ')'); } } /* Binary file */ $conttp->setVariable('EXE_NAG_BINARY', translate('Nagios binary file')); if ($intMethod === 1) { if (file_exists($strBinary)) { if (is_executable($strBinary)) { $conttp->setVariable('EXE_NAG_BINARY_CLASS', 'checkgreen'); $conttp->setVariable('EXE_NAG_BINARY_RESULT', translate('ok')); } else { $conttp->setVariable('EXE_NAG_BINARY_CLASS', 'checkred'); $conttp->setVariable('EXE_NAG_BINARY_RESULT', translate('failed') . ' (' . translate('not executable') . ')'); } } else { $conttp->setVariable('EXE_NAG_BINARY_CLASS', 'checkred'); $conttp->setVariable('EXE_NAG_BINARY_RESULT', translate('failed') . ' (' . translate('file is missed') . ')'); } } elseif ($intMethod === 2) { $conttp->setVariable('EXE_NAG_BINARY_CLASS', 'checkorange'); $conttp->setVariable('EXE_NAG_BINARY_RESULT', translate('ok') . ' (' . translate('not used with FTP') . ')'); } elseif ($intMethod === 3) { $booReturn = 0; if (empty($myConfigClass->resSSHConId) || !is_resource($myConfigClass->resSSHConId)) { $booReturn = $myConfigClass->getSSHConnection($intConfigId); } if ($booReturn === 1) { $myVisClass->processMessage($myConfigClass->strErrorMessage, $strErrorMessage); } else if (($strBinary !== '') && ($strConffile !== '') && ($myConfigClass->sendSSHCommand('ls ' . $strBinary, $arrTemp) === 0)) { $myConfigClass->sendSSHCommand($strBinary . ' -V', $arrResult); if (!is_array($arrResult) || (count($arrResult) === 0)) { $conttp->setVariable('EXE_NAG_BINARY_CLASS', 'checkred'); $conttp->setVariable('EXE_NAG_BINARY_RESULT', translate('failed') . ' (' . translate('not executable') . ')'); } else { $conttp->setVariable('EXE_NAG_BINARY_CLASS', 'checkgreen'); $conttp->setVariable('EXE_NAG_BINARY_RESULT', translate('ok')); } } else { $conttp->setVariable('EXE_NAG_BINARY_CLASS', 'checkred'); $conttp->setVariable('EXE_NAG_BINARY_RESULT', translate('failed') . ' (' . translate('file is missed') . ')'); } } /* Check config files */ $myConfigClass->getConfigValues($intConfigId, 'basedir', $strBasedir); $myConfigClass->getConfigValues($intConfigId, 'hostconfig', $strHostdir); $myConfigClass->getConfigValues($intConfigId, 'serviceconfig', $strServicedir); $conttp->setVariable('SUBTITLE_7', translate('Verify configuration files and demon configuration')); $conttp->setVariable('CONFIGURATION_NAME', translate('Configuration name')); $conttp->setVariable('USED', translate('Used in data domain')); $conttp->setVariable('DEMON_CONFIG', translate('Included in demon configuration') . ' (' . basename($strConffile) . ')'); $arrConfig = array(); $arrConfigFiles = array( 'Hosts' => array('table' => 'tbl_host', 'file' => 'directory'), 'Services' => array('table' => 'tbl_service', 'file' => 'directory'), 'Hostgroups' => array('table' => 'tbl_hostgroup', 'file' => 'hostgroups.cfg'), 'Servicegroups' => array('table' => 'tbl_servicegroup', 'file' => 'servicegroups.cfg'), 'Hosttemplates' => array('table' => 'tbl_hosttemplate', 'file' => 'hosttemplates.cfg'), 'servicetemplates' => array('table' => 'tbl_servicetemplate', 'file' => 'servicetemplates.cfg'), 'Contacts' => array('table' => 'tbl_contact', 'file' => 'contacts.cfg'), 'Contactgroups' => array('table' => 'tbl_contactgroup', 'file' => 'contactgroups.cfg'), 'Timeperiods' => array('table' => 'tbl_timeperiod', 'file' => 'timeperiods.cfg'), 'Contacttemplates' => array('table' => 'tbl_contacttemplate', 'file' => 'contacttemplates.cfg'), 'Commands' => array('table' => 'tbl_command', 'file' => 'commands.cfg'), 'Hostdependencies' => array('table' => 'tbl_hostdependency', 'file' => 'hostdependencies.cfg'), 'Hostescalations' => array('table' => 'tbl_hostescalation', 'file' => 'hostescalations.cfg'), 'Hostextinfo' => array('table' => 'tbl_hostextinfo', 'file' => 'hostextinfo.cfg'), 'Servicedependencies' => array('table' => 'tbl_servicedependency', 'file' => 'servicedependencies.cfg'), 'Serviceescalations' => array('table' => 'tbl_serviceescalation', 'file' => 'serviceescalations.cfg'), 'Serviceextinfo' => array('table' => 'tbl_serviceextinfo', 'file' => 'serviceextinfo.cfg')); if ($intMethod === 1) { $intCheck = 1; if (file_exists($strConffile) && is_readable($strConffile)) { $resFile = fopen($strConffile, 'rb'); while (!feof($resFile)) { $strLine = trim(fgets($resFile)); if ((0 === strpos($strLine, 'c')) && ((substr_count($strLine, 'cfg_dir') !== 0) || (substr_count($strLine, 'cfg_file') !== 0))) { $arrConfig[] = $strLine; } } $intCheck = 0; fclose($resFile); } } elseif (($intMethod === 2) || ($intMethod === 3)) { $intCheck = 1; /* Write file to temporary */ $strFileName = tempnam($SETS['path']['tempdir'], 'nagiosql_conf'); /* Copy configuration from remote system */ $intReturn = $myConfigClass->remoteFileCopy($strConffile, $intConfigId, $strFileName); if ($intReturn === 0) { $intCheck = 0; if (file_exists($strFileName) && is_readable($strFileName)) { $resFile = fopen($strFileName, 'rb'); while (!feof($resFile)) { $strLine = trim(fgets($resFile)); if ((0 === strpos($strLine, 'c')) && ((substr_count($strLine, 'cfg_dir') !== 0) || (substr_count($strLine, 'cfg_file') !== 0))) { $arrConfig[] = $strLine; } } fclose($resFile); $intCheck = 0; } } else { $intCheck = 1; $myVisClass->processMessage($myConfigClass->strErrorMessage, $strErrorMessage); if (file_exists($strFileName)) { unlink($strFileName); } } } $i = 0; foreach ($arrConfigFiles as $key => $elem) { /* Line colours */ $strClassL = 'tdlb'; $strClassM = 'tdmb'; if ($i % 2 === 1) { $strClassL = 'tdld'; $strClassM = 'tdmd'; } $conttp->setVariable('CLASS_L', $strClassL); $conttp->setVariable('CLASS_M', $strClassM); /* Write configuiration name */ $conttp->setVariable('CONFIG_NAME', $key); /* Count active datasets */ /** @noinspection SqlResolve */ $strSQL = 'SELECT * FROM `' . $elem['table'] . "` WHERE `active`='1' AND `config_id`=$chkDomainId"; $booReturn = $myDBClass->hasDataArray($strSQL, $arrDataLines, $intDataCount); if ($booReturn && ($intDataCount !== 0)) { $conttp->setVariable('ACTIVE_CONFIG_COUNT', '' . translate('ok') . ' (' . $intDataCount . ')'); } elseif ($intDataCount === 0) { $conttp->setVariable('ACTIVE_CONFIG_COUNT', '' . translate('not used') . ''); } else { $conttp->setVariable('ACTIVE_CONFIG_COUNT', '' . translate('failed') . ''); $myVisClass->processMessage($myDBClass->strErrorMessage, $strErrorMessage); } $conttp->setVariable('DEMON_CFG_OK', '' . translate('failed') . ' (' . translate('cfg definition missed') . ')'); if (($intCheck === 0) && is_array($arrConfig) && (count($arrConfig) !== 0)) { foreach ($arrConfig as $line) { if ($elem['file'] !== 'directory') { if ((substr_count($line, 'cfg_dir=' . $strBasedir) !== 0) && (substr_count($line, 'cfg_dir=' . substr($strHostdir, 0, -1)) === 0) && (substr_count($line, 'cfg_dir=' . substr($strServicedir, 0, -1)) === 0)) { $conttp->setVariable('DEMON_CFG_OK', '' . translate('ok') . ' (' . $line . ')'); break; } if (substr_count($line, $strBasedir . $elem['file']) !== 0) { $conttp->setVariable('DEMON_CFG_OK', '' . translate('ok') . ' (' . $line . ')'); break; } if ($intDataCount === 0) { $conttp->setVariable('DEMON_CFG_OK', '' . translate('ok') . ' (' . translate('cfg definition missed, but actually not used') . ')'); } elseif (substr_count($line, $elem['file']) !== 0) { $conttp->setVariable('DEMON_CFG_OK', '' . translate('failed') . ' (' . translate('wrong base path:') . ' ' . $line . ')'); break; } } elseif ($elem['table'] === 'tbl_host') { if (substr_count($line, 'cfg_dir=' . substr($strHostdir, 0, -1)) !== 0) { $conttp->setVariable('DEMON_CFG_OK', '' . translate('ok') . ' (' . $line . ')'); break; } if ($intDataCount === 0) { $conttp->setVariable('DEMON_CFG_OK', '' . translate('ok') . ' (' . translate('cfg definition missed, but actually not used') . ')'); break; } } elseif ($elem['table'] === 'tbl_service') { if (substr_count($line, 'cfg_dir=' . substr($strServicedir, 0, -1)) !== 0) { $conttp->setVariable('DEMON_CFG_OK', '' . translate('ok') . ' (' . $line . ')'); break; } if ($intDataCount === 0) { $conttp->setVariable('DEMON_CFG_OK', '' . translate('ok') . ' (' . translate('cfg definition missed, but actually not used') . ')'); break; } } } } else { $conttp->setVariable('DEMON_CFG_OK', '' . translate('failed') . ' (' . translate('cfg file not readable') . ')'); } $conttp->parse('configfileline'); $i++; } /* Check for unused config */ if (($intCheck === 0) && is_array($arrConfig) && (count($arrConfig) !== 0)) { foreach ($arrConfig as $line) { $intTest = 0; foreach ($arrConfigFiles as $elem) { if (substr_count($line, $elem['file']) !== 0) { $intTest = 1; } } if ($intTest === 0) { if (substr_count($line, substr('cfg_dir=' . $strHostdir, 0, -1)) !== 0) { $intTest = 1; } if (substr_count($line, substr('cfg_dir=' . $strServicedir, 0, -1)) !== 0) { $intTest = 1; } //if (substr_count($line,substr("cfg_dir=".$strBasedir,0,-1)) !== 0) $intTest = 1; } if ($intTest === 0) { /* Line colours */ $strClassL = 'tdlb'; $strClassM = 'tdmb'; if ($i % 2 === 1) { $strClassL = 'tdld'; $strClassM = 'tdmd'; } $conttp->setVariable('CLASS_L', $strClassL); $conttp->setVariable('CLASS_M', $strClassM); $conttp->setVariable('CONFIG_NAME', translate('Not used')); $conttp->setVariable('ACTIVE_CONFIG_COUNT', '' . translate('failed') . ''); $conttp->setVariable('DEMON_CFG_OK', '' . translate('unused - please delete!') . ' (' . $line . ')'); $conttp->parse('configfileline'); $i++; } } } $conttp->parse('configdomain'); } /* Messages */ if ($strErrorMessage !== '') { $conttp->setVariable('ERRORMESSAGE', $strErrorMessage); } if ($strInfoMessage !== '') { $conttp->setVariable('INFOMESSAGE', $strInfoMessage); } /* Check access rights for adding new objects */ if ($myVisClass->checkAccountGroup($prePageKey, 'write') !== 0) { $conttp->setVariable('ADD_CONTROL', 'disabled="disabled"'); } $conttp->parse('support'); $conttp->show('support'); /* Process footer */ $maintp->setVariable('VERSION_INFO', "NagiosQL $setFileVersion"); $maintp->parse('footer'); $maintp->show('footer');