'test' . rand(1, 200), 'type' => 'varchar (255)', 'NULL' => false)); $sql = 'ALTER TABLE `' . $table . '` ADD `' . $column['name'] . '`'; if (!db_column_exists($table, $column['name'], false)) { $status = db_add_column($table, $column, false); } else { $status = 2; } db_install_add_cache ($status, $sql); } function db_install_add_key ($table, $type, $key, $columns) { if (!is_array($columns)) { $columns = array($columns); } $sql = 'ALTER TABLE `' . $table . '` ADD ' . $type . ' ' . $key . '(' . implode(',', $columns) . ')'; if (!db_index_exists($table, $key, false)) { $status = db_install_execute($sql); } else { db_install_add_cache (2, $sql); } } function db_install_drop_table ($table) { $sql = 'DROP TABLE `' . $table . '`'; if (db_table_exists($table, false)) { db_install_execute ($sql); } else { db_install_add_cache (2, $sql); } } function db_install_rename_table ($table, $newname) { $sql = 'RENAME TABLE `' . $table . '` TO `' . $newname . '`'; if (db_table_exists($table, false) && !db_table_exists($newname, false)) { db_install_execute ($sql); } else { db_install_add_cache (2, $sql); } } function db_install_drop_column ($table, $column) { $sql = 'ALTER TABLE `' . $table . '` DROP `' . $column . '`'; if (db_column_exists($table, $column, false)) { $status = (db_remove_column ($table, $column) ? 1 : 0); } else { $status = 2; } db_install_add_cache ($status, $sql); } function db_install_add_cache ($status, $sql) { global $upgrade_version, $session; if (isset($_SESSION)) { $sql_install_cache = (isset($_SESSION['sess_sql_install_cache']) ? $_SESSION['sess_sql_install_cache'] : array()); $sql_install_cache{sizeof($sql_install_cache)}[$upgrade_version][$status] = $sql; $_SESSION['sess_sql_install_cache'] = $sql_install_cache; }else{ $sql_install_cache = (isset($session['sess_sql_install_cache']) ? $session['sess_sql_install_cache'] : array()); $sql_install_cache{sizeof($sql_install_cache)}[$upgrade_version][$status] = $sql; $session['sess_sql_install_cache'] = $sql_install_cache; } } function find_best_path($binary_name) { global $config; if ($config['cacti_server_os'] == 'win32') { $search_paths = array('c:/usr/bin', 'c:/cacti', 'c:/rrdtool', 'c:/spine', 'c:/php', 'c:/progra~1/php', 'c:/net-snmp/bin', 'c:/progra~1/net-snmp/bin', 'd:/usr/bin', 'd:/net-snmp/bin', 'd:/progra~1/net-snmp/bin', 'd:/cacti', 'd:/rrdtool', 'd:/spine', 'd:/php', 'd:/progra~1/php'); }else{ $search_paths = array('/bin', '/sbin', '/usr/bin', '/usr/sbin', '/usr/local/bin', '/usr/local/sbin'); } for ($i=0; $i") !== FALSE) { $binary_signature = base64_decode(trim(str_replace(array('', ''), '', $x))); $x = " \n"; } $xml .= "$x"; } fclose($f); // Verify Signature $ok = openssl_verify($xml, $binary_signature, $public_key); if ($ok == 1) { //print " File is signed correctly\n"; } elseif ($ok == 0) { //print " ERROR: File has been tampered with\n"; //exit; return; } else { //print " ERROR: Could not verify signature!\n"; //exit; return; } //print "Loading Plugin Information from package\n"; $xmlget = simplexml_load_string($xml); $data = to_array($xmlget); $plugin = $data['info']['name']; //print "Verifying each files signature\n"; if (isset($data['files']['file']['data'])) { $data['files']['file'] = array($data['files']['file']); } foreach ($data['files']['file'] as $f) { $binary_signature = base64_decode($f['filesignature']); $fdata = base64_decode($f['data']); $ok = openssl_verify($fdata, $binary_signature, $public_key); if ($ok == 1) { //print " File OK : " . $f['name'] . "\n"; } else { //print " ERROR: Could not verify signature for file: " . $f['name'] . "\n"; //exit; return; } } include_once($config['base_path'] . "/lib/import.php"); $p = $config['base_path']; $error = false; //print "Writing Files\n"; foreach ($data['files']['file'] as $f) { $fdata = base64_decode($f['data']); $name = $f['name']; if (substr($name, 0, 8) == 'scripts/' || substr($name, 0, 9) == 'resource/') { $filename = "$p/$name"; //print " Writing $filename\n"; $file = fopen($filename,'wb'); fwrite($file ,$fdata, strlen($fdata)); fclose($file); clearstatcache(); if (!file_exists($filename)) { //print " Unable to create directory: $filename\n"; } } else { $debug_data = import_xml_data($fdata, false, 1); } } //print "File creation complete\n"; } function to_array ($data) { if (is_object($data)) { $data = get_object_vars($data); } return (is_array($data)) ? array_map(__FUNCTION__,$data) : $data; } /* Here, we define each name, default value, type, and path check for each value we want the user to input. The "name" field must exist in the 'settings' table for this to work. Cacti also uses different default values depending on what OS it is running on. */ function install_file_paths () { global $config, $settings; /* RRDTool Binary Path */ $input = array(); $input['path_rrdtool'] = $settings['path']['path_rrdtool']; if ($config['cacti_server_os'] == 'unix') { $which_rrdtool = find_best_path('rrdtool'); if (config_value_exists('path_rrdtool')) { $input['path_rrdtool']['default'] = read_config_option('path_rrdtool'); }else if (!empty($which_rrdtool)) { $input['path_rrdtool']['default'] = $which_rrdtool; }else{ $input['path_rrdtool']['default'] = '/usr/local/bin/rrdtool'; } }elseif ($config['cacti_server_os'] == 'win32') { $which_rrdtool = find_best_path('rrdtool.exe'); if (config_value_exists('path_rrdtool')) { $input['path_rrdtool']['default'] = read_config_option('path_rrdtool'); }else if (!empty($which_rrdtool)) { $input['path_rrdtool']['default'] = $which_rrdtool; }else{ $input['path_rrdtool']['default'] = 'c:/rrdtool/rrdtool.exe'; } } /* PHP Binary Path */ $input['path_php_binary'] = $settings['path']['path_php_binary']; if ($config['cacti_server_os'] == 'unix') { $which_php = find_best_path('php'); if (config_value_exists('path_php_binary')) { $input['path_php_binary']['default'] = read_config_option('path_php_binary'); }else if (!empty($which_php)) { $input['path_php_binary']['default'] = $which_php; }else{ $input['path_php_binary']['default'] = '/usr/bin/php'; } }elseif ($config['cacti_server_os'] == 'win32') { $which_php = find_best_path('php.exe'); if (config_value_exists('path_php_binary')) { $input['path_php_binary']['default'] = read_config_option('path_php_binary'); }else if (!empty($which_php)) { $input['path_php_binary']['default'] = $which_php; }else{ $input['path_php_binary']['default'] = 'c:/php/php.exe'; } } /* snmpwalk Binary Path */ $input['path_snmpwalk'] = $settings['path']['path_snmpwalk']; if ($config['cacti_server_os'] == 'unix') { $which_snmpwalk = find_best_path('snmpwalk'); if (config_value_exists('path_snmpwalk')) { $input['path_snmpwalk']['default'] = read_config_option('path_snmpwalk'); }else if (!empty($which_snmpwalk)) { $input['path_snmpwalk']['default'] = $which_snmpwalk; }else{ $input['path_snmpwalk']['default'] = '/usr/local/bin/snmpwalk'; } }elseif ($config['cacti_server_os'] == 'win32') { $which_snmpwalk = find_best_path('snmpwalk.exe'); if (config_value_exists('path_snmpwalk')) { $input['path_snmpwalk']['default'] = read_config_option('path_snmpwalk'); }else if (!empty($which_snmpwalk)) { $input['path_snmpwalk']['default'] = $which_snmpwalk; }else{ $input['path_snmpwalk']['default'] = 'c:/net-snmp/bin/snmpwalk.exe'; } } /* snmpget Binary Path */ $input['path_snmpget'] = $settings['path']['path_snmpget']; if ($config['cacti_server_os'] == 'unix') { $which_snmpget = find_best_path('snmpget'); if (config_value_exists('path_snmpget')) { $input['path_snmpget']['default'] = read_config_option('path_snmpget'); }else if (!empty($which_snmpget)) { $input['path_snmpget']['default'] = $which_snmpget; }else{ $input['path_snmpget']['default'] = '/usr/local/bin/snmpget'; } }elseif ($config['cacti_server_os'] == 'win32') { $which_snmpget = find_best_path('snmpget.exe'); if (config_value_exists('path_snmpget')) { $input['path_snmpget']['default'] = read_config_option('path_snmpget'); }else if (!empty($which_snmpget)) { $input['path_snmpget']['default'] = $which_snmpget; }else{ $input['path_snmpget']['default'] = 'c:/net-snmp/bin/snmpget.exe'; } } /* snmpbulkwalk Binary Path */ $input['path_snmpbulkwalk'] = $settings['path']['path_snmpbulkwalk']; if ($config['cacti_server_os'] == 'unix') { $which_snmpbulkwalk = find_best_path('snmpbulkwalk'); if (config_value_exists('path_snmpbulkwalk')) { $input['path_snmpbulkwalk']['default'] = read_config_option('path_snmpbulkwalk'); }else if (!empty($which_snmpbulkwalk)) { $input['path_snmpbulkwalk']['default'] = $which_snmpbulkwalk; }else{ $input['path_snmpbulkwalk']['default'] = '/usr/local/bin/snmpbulkwalk'; } }elseif ($config['cacti_server_os'] == 'win32') { $which_snmpbulkwalk = find_best_path('snmpbulkwalk.exe'); if (config_value_exists('path_snmpbulkwalk')) { $input['path_snmpbulkwalk']['default'] = read_config_option('path_snmpbulkwalk'); }else if (!empty($which_snmpbulkwalk)) { $input['path_snmpbulkwalk']['default'] = $which_snmpbulkwalk; }else{ $input['path_snmpbulkwalk']['default'] = 'c:/net-snmp/bin/snmpbulkwalk.exe'; } } /* snmpgetnext Binary Path */ $input['path_snmpgetnext'] = $settings['path']['path_snmpgetnext']; if ($config['cacti_server_os'] == 'unix') { $which_snmpgetnext = find_best_path('snmpgetnext'); if (config_value_exists('path_snmpgetnext')) { $input['path_snmpgetnext']['default'] = read_config_option('path_snmpgetnext'); }else if (!empty($which_snmpgetnext)) { $input['path_snmpgetnext']['default'] = $which_snmpgetnext; }else{ $input['path_snmpgetnext']['default'] = '/usr/local/bin/snmpgetnext'; } }elseif ($config['cacti_server_os'] == 'win32') { $which_snmpgetnext = find_best_path('snmpgetnext.exe'); if (config_value_exists('path_snmpgetnext')) { $input['path_snmpgetnext']['default'] = read_config_option('path_snmpgetnext'); }else if (!empty($which_snmpgetnext)) { $input['path_snmpgetnext']['default'] = $which_snmpgetnext; }else{ $input['path_snmpgetnext']['default'] = 'c:/net-snmp/bin/snmpgetnext.exe'; } } /* snmptrap Binary Path */ $input['path_snmptrap'] = $settings['path']['path_snmptrap']; if ($config['cacti_server_os'] == 'unix') { $which_snmptrap = find_best_path('snmptrap'); if (config_value_exists('path_snmptrap')) { $input['path_snmptrap']['default'] = read_config_option('path_snmptrap'); }else if (!empty($which_snmptrap)) { $input['path_snmptrap']['default'] = $which_snmptrap; }else{ $input['path_snmptrap']['default'] = '/usr/local/bin/snmptrap'; } }elseif ($config['cacti_server_os'] == 'win32') { $which_snmptrap = find_best_path('snmptrap.exe'); if (config_value_exists('path_snmptrap')) { $input['path_snmptrap']['default'] = read_config_option('path_snmptrap'); }else if (!empty($which_snmptrap)) { $input['path_snmptrap']['default'] = $which_snmptrap; }else{ $input['path_snmptrap']['default'] = 'c:/net-snmp/bin/snmptrap.exe'; } } /* log file path */ $input['path_cactilog'] = $settings['path']['path_cactilog']; $input['path_cactilog']['description'] = 'The path to your Cacti log file.'; if (config_value_exists('path_cactilog')) { $input['path_cactilog']['default'] = read_config_option('path_cactilog'); } else { $input['path_cactilog']['default'] = $config['base_path'] . '/log/cacti.log'; } /* Theme */ $input['selected_theme'] = $settings['visual']['selected_theme']; $input['selected_theme']['description'] = 'Please select one of the available Themes to skin your Cacti with.'; if (config_value_exists('selected_theme')) { $input['selected_theme']['default'] = read_config_option('selected_theme'); } else { $input['selected_theme']['default'] = 'modern'; } /* RRDTool Version */ if ((file_exists($input['path_rrdtool']['default'])) && (($config['cacti_server_os'] == 'win32') || (is_executable($input['path_rrdtool']['default']))) ) { $input['rrdtool_version'] = $settings['general']['rrdtool_version']; $out_array = array(); exec("\"" . $input['path_rrdtool']['default'] . "\"", $out_array); if (sizeof($out_array) > 0) { if (preg_match('/^RRDtool 1\.5/', $out_array[0])) { $input['rrdtool_version']['default'] = 'rrd-1.5.x'; }else if (preg_match('/^RRDtool 1\.4\./', $out_array[0])) { $input['rrdtool_version']['default'] = 'rrd-1.4.x'; }else if (preg_match('/^RRDtool 1\.3\./', $out_array[0])) { $input['rrdtool_version']['default'] = 'rrd-1.3.x'; }else if (preg_match('/^RRDtool 1\.2\./', $out_array[0])) { $input['rrdtool_version']['default'] = 'rrd-1.2.x'; }else if (preg_match('/^RRDtool 1\.0\./', $out_array[0])) { $input['rrdtool_version']['default'] = 'rrd-1.0.x'; } } } return $input; } function remote_update_config_file() { global $config, $rdatabase_type, $rdatabase_hostname, $rdatabase_username, $rdatabase_password, $rdatabase_default, $rdatabase_type, $rdatabase_port, $rdatabase_ssl; global $database_type, $database_hostname, $database_username, $database_password, $database_default, $database_type, $database_port, $database_ssl; $written = false; $newfile = array(); $config_file = $config['base_path'] . '/include/config.php'; $connection = db_connect_real($rdatabase_hostname, $rdatabase_username, $rdatabase_password, $rdatabase_default, $rdatabase_type, $rdatabase_port, $rdatabase_ssl); if (is_object($connection)) { if (function_exists('gethostname')) { $hostname = gethostname(); }else{ $hostname = php_uname('n'); } // Check for an existing poller $poller_id = db_fetch_cell_prepared('SELECT id FROM poller WHERE hostname = ?', array($hostname), true, $connection); if (empty($poller_id)) { $save['name'] = 'New Poller'; $save['hostname'] = $hostname; $save['dbdefault'] = $database_default; $save['dbhost'] = $database_hostname; $save['dbuser'] = $database_username; $save['dbpass'] = $database_password; $save['dbport'] = $database_port; $save['dbssl'] = $database_ssl; $poller_id = sql_save($save, 'poller', 'id', TRUE, $connection); } if (!empty($poller_id)) { if (is_writable($config_file)) { $file_array = file($config_file); if (sizeof($file_array)) { foreach($file_array as $line) { if (strpos(trim($line), "\$poller_id") !== false) { $newfile[] = "\$poller_id = $poller_id;\n"; }else{ $newfile[] = $line; } } $fp = fopen($config_file, 'w'); foreach($newfile as $line) { fwrite($fp, $line); } fclose($fp); $written = true; } } } db_close($connection); } return $written; }