This script is only meant to run at the command line.');
}
/* this should be auto-detected, set it manually if needed */
$config['cacti_server_os'] = (strstr(PHP_OS, 'WIN')) ? 'win32' : 'unix';
$config['is_web'] = CACTI_WEB;
/* load cacti version from file */
$cacti_version_file = __DIR__ . '/cacti_version';
if (!file_exists($cacti_version_file)) {
die('ERROR: failed to find cacti version file');
}
$cacti_version = file_get_contents($cacti_version_file, false);
if ($cacti_version === false) {
die('ERROR: failed to load cacti version file');
}
$cacti_version = trim($cacti_version);
// define documentation table of contents
define('CACTI_DOCUMENTATION_TOC', 'docs/Table-of-Contents.html');
//By default, we assume that it is not
//an AJAX request.
global $is_request_ajax;
$is_request_ajax = false;
//If HTTP_X_REQUESTED_WITH is equal to xmlhttprequest
//We assume this is an ajax call
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
strcasecmp($_SERVER['HTTP_X_REQUESTED_WITH'], 'xmlhttprequest') == 0) {
$is_request_ajax = true;
}
// NOTE: Cannot use isset_request_var() as that is in lib/html_utility.php
// which is not included yet!
//if (isset($_REQUEST['headercontent'])) {
// $is_request_ajax = false;
//}
/* Default database settings*/
$database_type = 'mysql';
$database_default = 'cacti';
$database_hostname = 'localhost';
$database_username = 'cactiuser';
$database_password = 'cactiuser';
$database_port = '3306';
$database_retries = 2;
$database_ssl = false;
$database_ssl_key = '';
$database_ssl_cert = '';
$database_ssl_ca = '';
$database_persist = true;
/* Default session name - Session name must contain alpha characters */
$cacti_session_name = 'Cacti';
/* define default url path */
$url_path = '/cacti/';
/* disable log rotation setting */
$disable_log_rotation = false;
/* Include configuration, or use the defaults */
if (file_exists(__DIR__ . '/config.php')) {
if (!is_readable(__DIR__ . '/config.php')) {
die('Configuration file include/config.php is present, but unreadable.' . PHP_EOL);
}
include(__DIR__ . '/config.php');
}
if (isset($config['cacti_version'])) {
die('Invalid include/config.php file detected.' . PHP_EOL);
exit;
}
/* Define global paths */
include_once(__DIR__ . '/global_path.php');
/* Should we allow proxy ip headers? */
$config['proxy_headers'] = $proxy_headers ?? array();
/* Set the poller_id */
if (isset($poller_id)) {
$config['poller_id'] = $poller_id;
} else {
$config['poller_id'] = 1;
}
$db_var_defaults = array(
'database_type' => 'mysql',
'database_default' => null,
'database_hostname' => null,
'database_username' => null,
'database_password' => null,
'database_port' => '3306',
'database_retries' => 2,
'database_ssl' => false,
'database_ssl_key' => '',
'database_ssl_cert' => '',
'database_ssl_ca' => '',
);
$db_var_prefixes = array('');
if ($config['poller_id'] > 1 || isset($rdatabase_hostname)) {
$db_var_prefixes[] = 'r';
}
$db_missing_vars = '';
foreach ($db_var_prefixes as $db_var_prefix) {
foreach ($db_var_defaults as $db_var_name => $db_var_default) {
$db_var_full = $db_var_prefix . $db_var_name;
if (!isset($$db_var_full)) {
if ($db_var_default !== null) {
$$db_var_full = $db_var_default;
} else {
$db_missing_vars .= (($db_missing_vars == '') ? 'missing ' : ', ') . $db_var_full;
}
}
}
}
if (!empty($db_missing_vars)) {
die("config.php is $db_missing_vars" . PHP_EOL);
}
/* set the local for international users */
setlocale(LC_CTYPE, 'en_US.UTF-8');
$colors = array();
/* this should be auto-detected, set it manually if needed */
$config['cacti_server_os'] = (strstr(PHP_OS, 'WIN')) ? 'win32' : 'unix';
if (!empty($path_csrf_secret)) {
$config['path_csrf_secret'] = $path_csrf_secret;
}
/* built-in snmp support */
if ((isset($php_snmp_support) && $php_snmp_support == false) || !function_exists('snmpget')) {
$config['php_snmp_support'] = false;
} else {
$config['php_snmp_support'] = class_exists('SNMP');
}
/* PHP binary location */
if (isset($php_path)) {
$config['php_path'] = $php_path;
}
/* Set various debug fields */
$config['DEBUG_READ_CONFIG_OPTION'] = defined('DEBUG_READ_CONFIG_OPTION');
$config['DEBUG_READ_CONFIG_OPTION_DB_OPEN'] = defined('DEBUG_READ_CONFIG_OPTION_DB_OPEN');
$config['DEBUG_SQL_CMD'] = defined('DEBUG_SQL_CMD');
$config['DEBUG_SQL_FLOW'] = defined('DEBUG_SQL_FLOW');
/* check for an empty database port */
if (empty($database_port)) {
$database_port = '3306';
}
if (isset($input_whitelist)) {
$config['input_whitelist'] = $input_whitelist;
}
/* define required path as constants */
/* define any additional paths as constants */
foreach ($config as $key => $value) {
if (substr($key, -5) == '_path') {
$path_name = substr($key, 0, -5);
$constant_name = 'CACTI_PATH_' . strtoupper($path_name);
if (!defined($constant_name)) {
define($constant_name, $value);
}
}
}
if (isset($i18n_handler)) {
$config['i18n_language_handler'] = $i18n_handler;
}
if (isset($i18n_force_language)) {
$config['i18n_force_language'] = $i18n_force_language;
}
if (isset($i18n_log)) {
$config['i18n_log'] = $i18n_log;
}
if (isset($i18n_text_log)) {
$config['i18n_text_log'] = $i18n_text_log;
}
/* include base modules */
include_once(CACTI_PATH_LIBRARY . '/database.php');
include_once(CACTI_PATH_LIBRARY . '/functions.php');
include_once(CACTI_PATH_INCLUDE . '/global_constants.php');
define('CACTI_VERSION', format_cacti_version($cacti_version, CACTI_VERSION_FORMAT_SHORT));
define('CACTI_VERSION_FULL', format_cacti_version($cacti_version, CACTI_VERSION_FORMAT_FULL));
include_once(CACTI_PATH_LIBRARY . '/html.php');
include_once(CACTI_PATH_LIBRARY . '/html_utility.php');
include_once(CACTI_PATH_LIBRARY . '/html_validate.php');
$filename = get_current_page();
if (isset($no_http_headers) && $no_http_headers == true) {
$config['is_web'] = false;
}
if ($config['is_web'] && ini_get('session.auto_start') == 1) {
print 'FATAL: PHP setting session.auto_start NOT supported. Disable in your php.ini file and then restart your Web Service' . PHP_EOL;
exit;
}
/* set poller mode */
global $local_db_cnn_id, $remote_db_cnn_id, $conn_mode;
$config['connection'] = 'online';
$ps = $config['is_web'] ? '' : '';
$sp = $config['is_web'] ? '
' : PHP_EOL;
$ul = $config['is_web'] ? '' : PHP_EOL;
$li = $config['is_web'] ? '- ' : PHP_EOL . ' - ';
$lu = $config['is_web'] ? '
' : '';
$il = $config['is_web'] ? '' : '';
if ($config['poller_id'] > 1 || isset($rdatabase_hostname)) {
$local_db_cnn_id = db_connect_real($database_hostname, $database_username, $database_password, $database_default, $database_type, $database_port, $database_retries, $database_ssl, $database_ssl_key, $database_ssl_cert, $database_ssl_ca);
if (!isset($rdatabase_retries)) {
$rdatabase_retries = 2;
}
if (!isset($rdatabase_ssl)) {
$rdatabase_ssl = false;
}
if (!isset($rdatabase_ssl_key)) {
$rdatabase_ssl_key = false;
}
if (!isset($rdatabase_ssl_cert)) {
$rdatabase_ssl_cert = false;
}
if (!isset($rdatabase_ssl_ca)) {
$rdatabase_ssl_ca = false;
}
// Check for recovery
if (is_object($local_db_cnn_id)) {
$boost_records = db_fetch_cell('SELECT COUNT(*)
FROM poller_output_boost', '', true, $local_db_cnn_id);
if ($boost_records > 0) {
$config['connection'] = 'recovery';
}
}
/* gather the existing cactidb version */
$config['cacti_db_version'] = db_fetch_cell('SELECT cacti FROM version LIMIT 1', false, $local_db_cnn_id);
/**
* If we have not been forced offline by the $conn_mode global and since we are
* a remote poller, let's attempt to get back online.
*/
if ($conn_mode != 'offline') {
$remote_db_cnn_id = db_connect_real($rdatabase_hostname, $rdatabase_username, $rdatabase_password, $rdatabase_default, $rdatabase_type, $rdatabase_port, $database_retries, $rdatabase_ssl, $rdatabase_ssl_key, $rdatabase_ssl_cert, $rdatabase_ssl_ca);
}
if ($config['is_web'] && is_object($remote_db_cnn_id) &&
$config['connection'] != 'recovery' &&
$config['cacti_db_version'] != 'new_install') {
// Connection worked, so now override the default settings so that it will always utilize the remote connection
$database_default = $rdatabase_default;
$database_hostname = $rdatabase_hostname;
$database_username = $rdatabase_username;
$database_password = $rdatabase_password;
$database_port = $rdatabase_port;
$database_ssl = $rdatabase_ssl;
$database_ssl_key = $rdatabase_ssl_key;
$database_ssl_cert = $rdatabase_ssl_cert;
$database_ssl_ca = $rdatabase_ssl_ca;
} elseif (is_object($remote_db_cnn_id)) {
if ($config['connection'] != 'recovery') {
$config['connection'] = 'online';
}
} else {
$config['connection'] = 'offline';
}
} else {
if (!isset($database_ssl)) {
$database_ssl = false;
}
if (!isset($database_ssl_key)) {
$database_ssl_key = false;
}
if (!isset($database_ssl_cert)) {
$database_ssl_cert = false;
}
if (!isset($database_ssl_ca)) {
$database_ssl_ca = false;
}
if (!db_connect_real($database_hostname, $database_username, $database_password, $database_default, $database_type, $database_port, $database_retries, $database_ssl, $database_ssl_key, $database_ssl_cert, $database_ssl_ca)) {
print $ps . 'FATAL: Connection to Cacti database failed. Please ensure: ' . $ul;
print $li . 'the PHP MySQL module is installed and enabled.' . $il;
print $li . 'the database is running.' . $il;
print $li . 'the credentials in config.php are valid.' . $il;
print $lu . $sp;
if (isset($_REQUEST['display_db_errors']) && !empty($config['DATABASE_ERROR'])) {
print $ps . 'The following database errors occurred: ' . $ul;
foreach ($config['DATABASE_ERROR'] as $e) {
print $li . $e['Code'] . ': ' . $e['Error'] . $il;
}
print $lu . $sp;
}
exit;
}
if (!db_table_exists('settings') || !db_table_exists('version')) {
print $ps . 'FATAL: Connection to Cacti database succeed but `Settings` table not found. Please ensure: ' . $ul;
print $li . 'the PHP MySQL module is installed and enabled.' . $il;
print $li . 'the database is running.' . $il;
print $li . 'the cacti.sql has been imported.' . $il;
print $li . 'the credentials in config.php are valid and correct.' . $il;
print $lu . $sp;
if (isset($_REQUEST['display_db_errors']) && !empty($config['DATABASE_ERROR'])) {
print $ps . 'The following database errors occurred: ' . $ul;
foreach ($config['DATABASE_ERROR'] as $e) {
print $li . $e['Code'] . ': ' . $e['Error'] . $il;
}
print $lu . $sp;
}
exit;
}
/* gather the existing cactidb version */
$config['cacti_db_version'] = db_fetch_cell('SELECT cacti FROM version LIMIT 1');
}
/* check cacti log is available */
$log_filename = cacti_log_file();
if (!is_resource_writable($log_filename)) {
print $ps . 'FATAL: System log file is not available for writing. Please ensure: ' . $ul;
print $li . 'the log folder is correctly set.' . $il;
if (CACTI_CLI) {
print $li . 'the script was run as the website user. ' . $il;
}
print $li . 'the log folder is writable by the website user.' . $il;
print $li . 'there is enough disk space.' . $il;
print $lu . $sp;
if (CACTI_CLI) {
print $ps . 'To run as the website user, use sudo -u php -q