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_ssl)) $rdatabase_ssl = false;
/* gather the existing cactidb version */
$config['cacti_db_version'] = db_fetch_cell('SELECT cacti FROM version LIMIT 1', false, $local_db_cnn_id);
// We are a remote poller also try to connect to the remote database
$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'] && $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;
}
if ($remote_db_cnn_id && $config['connection'] != 'recovery' && $config['cacti_db_version'] != 'new_install') {
$config['connection'] = 'online';
} else {
$config['connection'] = 'offline';
}
} elseif (!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)) {
$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'] ? '' : '';
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;
exit;
} else {
/* 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)) {
die('System log file is not available for writing, please enable write access' . PHP_EOL . 'Log: ' . $log_filename . PHP_EOL);
}
if ($config['poller_id'] > 1) {
$timezone = db_fetch_cell_prepared('SELECT timezone
FROM poller
WHERE id = ?',
array($config['poller_id']));
if ($timezone != '') {
db_execute_prepared('SET time_zone = ?', array($timezone));
}
}
if ($config['poller_id'] > 1 && $config['connection'] == 'online') {
$boost_records = db_fetch_cell('SELECT COUNT(*)
FROM poller_output_boost', '', true, $local_db_cnn_id);
if ($boost_records > 0) {
$config['connection'] = 'recovery';
}
}
if (isset($cacti_db_session) && $cacti_db_session && db_table_exists('sessions')) {
include(dirname(__FILE__) . '/session.php');
} else {
$cacti_db_session = false;
}
if (!defined('IN_CACTI_INSTALL')) {
set_error_handler('CactiErrorHandler');
register_shutdown_function('CactiShutdownHandler');
}
/* verify the cacti database is initialized before moving past here */
db_cacti_initialized($config['is_web']);
if ($config['is_web']) {
/* set the maximum post size */
ini_set('post_max_size', '8M');
ini_set('max_input_vars', '5000');
ini_set('session.cookie_httponly', '1');
/* we don't want these pages cached */
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('X-Frame-Options: SAMEORIGIN');
/* prevent IE from silently rejects cookies sent from third party sites. */
header('P3P: CP="CAO PSA OUR"');
/* initialize php session */
if (!function_exists('session_name')) {
die('PHP Session Management is missing, please install PHP Session module');
}
session_name($cacti_session_name);
if (!session_id()) session_start();
/* we never run with magic quotes on */
if (get_magic_quotes_gpc()) {
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
foreach ($process as $key => $val) {
foreach ($val as $k => $v) {
unset($process[$key][$k]);
if (is_array($v)) {
$process[$key][stripslashes($k)] = $v;
$process[] = &$process[$key][stripslashes($k)];
} else {
$process[$key][stripslashes($k)] = stripslashes($v);
}
}
}
unset($process);
}
/* make sure to start only only Cacti session at a time */
if (!isset($_SESSION['cacti_cwd'])) {
$_SESSION['cacti_cwd'] = $config['base_path'];
} else {
if ($_SESSION['cacti_cwd'] != $config['base_path']) {
session_unset();
session_destroy();
}
}
}
/* emulate 'register_globals' = 'off' if turned on */
if ((bool)ini_get('register_globals')) {
$not_unset = array('_GET', '_POST', '_COOKIE', '_SERVER', '_SESSION', '_ENV', '_FILES', 'database_type', 'database_default', 'database_hostname', 'database_username', 'database_password', 'config', 'colors');
/* Not only will array_merge give a warning if a parameter is not an array, it will
* actually fail. So we check if HTTP_SESSION_VARS has been initialised. */
if (!isset($_SESSION)) {
$_SESSION = array();
}
/* Merge all into one extremely huge array; unset this later */
$input = array_merge($_GET, $_POST, $_COOKIE, $_SERVER, $_SESSION, $_ENV, $_FILES);
unset($input['input']);
unset($input['not_unset']);
foreach ($input as $var => $val) {
if (!in_array($var, $not_unset)) {
unset($$var);
}
}
unset($input);
}
define('CACTI_DATE_TIME_FORMAT', date_time_format());
include_once($config['include_path'] . '/global_languages.php');
include_once($config['library_path'] . '/auth.php');
include_once($config['library_path'] . '/plugins.php');
include_once($config['include_path'] . '/plugins.php');
include_once($config['library_path'] . '/html_validate.php');
include_once($config['library_path'] . '/html_utility.php');
include_once($config['include_path'] . '/global_arrays.php');
include_once($config['include_path'] . '/global_settings.php');
include_once($config['include_path'] . '/global_form.php');
include_once($config['library_path'] . '/html.php');
include_once($config['library_path'] . '/html_form.php');
include_once($config['library_path'] . '/html_filter.php');
include_once($config['library_path'] . '/variables.php');
include_once($config['library_path'] . '/mib_cache.php');
include_once($config['library_path'] . '/snmpagent.php');
include_once($config['library_path'] . '/aggregate.php');
include_once($config['library_path'] . '/api_automation.php');
/* cross site request forgery library */
if ($config['is_web']) {
function csrf_startup() {
global $config;
csrf_conf('rewrite-js', $config['url_path'] . 'include/vendor/csrf/csrf-magic.js');
csrf_conf('callback', 'csrf_error_callback');
csrf_conf('expires', 7200);
}
function csrf_error_callback() {
raise_message('csrf_timeout');
header('Location: ' . sanitize_uri($_SERVER['REQUEST_URI']));
exit;
}
include_once($config['include_path'] . '/vendor/csrf/csrf-magic.php');
if (isset_request_var('newtheme')) {
unset($_SESSION['selected_theme']);
}
if (isset_request_var('csrf_timeout')) {
raise_message('csrf_ptimeout');
}
if (read_config_option('force_https') == 'on') {
if (!isset($_SERVER['HTTPS']) && isset($_SERVER['HTTP_HOST']) && isset($_SERVER['REQUEST_URI'])) {
Header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . PHP_EOL . PHP_EOL);
exit;
}
}
}
api_plugin_hook('config_insert');
/* set config cacti_version for plugins */
$config['cacti_version'] = CACTI_VERSION;;