From d890d25574910377663212b19f3c0a77d195f75b Mon Sep 17 00:00:00 2001 From: Luis Calvo <luis.calvo@artica.es> Date: Tue, 26 Mar 2019 15:57:54 +0100 Subject: [PATCH 01/79] Fixed db query bug Former-commit-id: 4eef9808433009c2725956103b4338f70bfe1403 --- .../godmode/reporting/reporting_builder.item_editor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandora_console/godmode/reporting/reporting_builder.item_editor.php b/pandora_console/godmode/reporting/reporting_builder.item_editor.php index aef5ac71a2..8fa3b2a219 100755 --- a/pandora_console/godmode/reporting/reporting_builder.item_editor.php +++ b/pandora_console/godmode/reporting/reporting_builder.item_editor.php @@ -1234,7 +1234,7 @@ $class = 'databox filters'; $all_modules = ''; } else { $all_modules = db_get_all_rows_sql( - 'SELECT DISTINCT nombre, id_agente_modulo FROM + 'SELECT DISTINCT nombre FROM tagente_modulo WHERE id_agente IN ('.implode(',', array_values($id_agents)).')' ); } From bac1e44608283f0f09fdb092ae00389399b62816 Mon Sep 17 00:00:00 2001 From: manuel <manuel.montes@artica.es> Date: Tue, 16 Apr 2019 12:37:06 +0200 Subject: [PATCH 02/79] Removed autofill proxi in auth server Former-commit-id: 448622c39e6697ead1a3a515da3e573abfc0384d --- .../godmode/agentes/configurar_agente.php | 198 ++++++++++-------- pandora_console/include/constants.php | 6 + 2 files changed, 113 insertions(+), 91 deletions(-) diff --git a/pandora_console/godmode/agentes/configurar_agente.php b/pandora_console/godmode/agentes/configurar_agente.php index dd7fad8fe8..9a6fdae246 100644 --- a/pandora_console/godmode/agentes/configurar_agente.php +++ b/pandora_console/godmode/agentes/configurar_agente.php @@ -23,10 +23,10 @@ ui_require_javascript_file('encode_decode_base64'); check_login(); -// Get tab parameter to check ACL in each tabs +// Get tab parameter to check ACL in each tabs. $tab = get_parameter('tab', 'main'); -// See if id_agente is set (either POST or GET, otherwise -1 +// See if id_agente is set (either POST or GET, otherwise -1. $id_agente = (int) get_parameter('id_agente'); $group = 0; $all_groups = [$group]; @@ -46,6 +46,7 @@ if (!check_acl_one_of_groups($config['id_user'], $all_groups, 'AW')) { break; default: + // Default. break; } @@ -63,11 +64,11 @@ require_once 'include/functions_modules.php'; require_once 'include/functions_alerts.php'; require_once 'include/functions_reporting.php'; -// Get passed variables +// Get passed variables. $alerttype = get_parameter('alerttype'); $id_agent_module = (int) get_parameter('id_agent_module'); -// Init vars +// Init vars. $descripcion = ''; $comentarios = ''; $campo_1 = ''; @@ -137,7 +138,7 @@ $alert_priority = 0; $server_name = ''; $grupo = 0; $id_os = 9; -// Windows +// Windows. $custom_id = ''; $cascade_protection = 0; $cascade_protection_modules = 0; @@ -156,7 +157,7 @@ $cps = 0; $create_agent = (bool) get_parameter('create_agent'); $module_macros = []; -// Create agent +// Create agent. if ($create_agent) { $mssg_warning = 0; $alias_safe_output = io_safe_output(get_parameter('alias', '')); @@ -165,14 +166,14 @@ if ($create_agent) { $direccion_agente = (string) get_parameter_post('direccion', ''); $unique_ip = (int) get_parameter_post('unique_ip', 0); - // safe_output only validate ip + // Safe_output only validate ip. $direccion_agente = trim(io_safe_output($direccion_agente)); if (!validate_address($direccion_agente)) { $mssg_warning = 1; } - // safe-input before validate ip + // Safe-input before validate ip. $direccion_agente = io_safe_input($direccion_agente); $nombre_agente = hash('sha256', $alias.'|'.$direccion_agente.'|'.time().'|'.sprintf('%04d', rand(0, 10000))); @@ -208,7 +209,7 @@ if ($create_agent) { $field_values[$field['id_field']] = (string) get_parameter_post('customvalue_'.$field['id_field'], ''); } - // Check if agent exists (BUG WC-50518-2) + // Check if agent exists (BUG WC-50518-2). if ($alias == '') { $agent_creation_error = __('No agent alias specified'); $agent_created_ok = 0; @@ -256,7 +257,7 @@ if ($create_agent) { } if ($id_agente !== false) { - // Create custom fields for this agent + // Create custom fields for this agent. foreach ($field_values as $key => $value) { $update_custom = db_process_sql_insert( 'tagent_custom_data', @@ -268,7 +269,7 @@ if ($create_agent) { ); } - // Create address for this agent in taddress + // Create address for this agent in taddress. if ($direccion_agente != '') { agents_add_address($id_agente, $direccion_agente); } @@ -311,7 +312,7 @@ if ($create_agent) { "Quiet":"'.(int) $quiet.'", "Cps":"'.(int) $cps.'"}'; - // Create the secondary groups + // Create the secondary groups. enterprise_hook( 'agents_update_secondary_groups', [ @@ -341,14 +342,14 @@ if ($create_agent) { } } -// Show tabs +// Show tabs. $img_style = [ 'class' => 'top', 'width' => 16, ]; if ($id_agente) { - // View tab + // View tab. $viewtab['text'] = '<a href="index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$id_agente.'">'.html_print_image('images/operation.png', true, ['title' => __('View')]).'</a>'; if ($tab == 'view') { @@ -359,7 +360,7 @@ if ($id_agente) { $viewtab['operation'] = 1; - // Main tab + // Main tab. $maintab['text'] = '<a href="index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=main&id_agente='.$id_agente.'">'.html_print_image('images/gm_setup.png', true, ['title' => __('Setup')]).'</a>'; if ($tab == 'main') { $maintab['active'] = true; @@ -367,7 +368,7 @@ if ($id_agente) { $maintab['active'] = false; } - // Module tab + // Module tab. $moduletab['text'] = '<a href="index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=module&id_agente='.$id_agente.'">'.html_print_image('images/gm_modules.png', true, ['title' => __('Modules')]).'</a>'; if ($tab == 'module') { @@ -376,7 +377,7 @@ if ($id_agente) { $moduletab['active'] = false; } - // Alert tab + // Alert tab. $alerttab['text'] = '<a href="index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=alert&id_agente='.$id_agente.'">'.html_print_image('images/gm_alerts.png', true, ['title' => __('Alerts')]).'</a>'; if ($tab == 'alert') { @@ -385,7 +386,7 @@ if ($id_agente) { $alerttab['active'] = false; } - // Template tab + // Template tab. $templatetab['text'] = '<a href="index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=template&id_agente='.$id_agente.'">'.html_print_image('images/templates.png', true, ['title' => __('Module templates')]).'</a>'; if ($tab == 'template') { @@ -395,7 +396,7 @@ if ($id_agente) { } - // Inventory + // Inventory. $inventorytab = enterprise_hook('inventory_tab'); if ($inventorytab == -1) { @@ -412,7 +413,7 @@ if ($id_agente) { } if ($has_remote_conf === true) { - // Plugins + // Plugins. $pluginstab = enterprise_hook('plugins_tab'); if ($pluginstab == -1) { $pluginstab = ''; @@ -421,21 +422,21 @@ if ($id_agente) { $pluginstab = ''; } - // Collection + // Collection. $collectiontab = enterprise_hook('collection_tab'); if ($collectiontab == -1) { $collectiontab = ''; } - // Group tab + // Group tab. $grouptab['text'] = '<a href="index.php?sec=gagente&sec2=godmode/agentes/modificar_agente&ag_group='.$group.'">'.html_print_image('images/group.png', true, [ 'title' => __('Group')]).'</a>'; $grouptab['active'] = false; $gistab = []; - // GIS tab + // GIS tab. if ($config['activate_gis']) { $gistab['text'] = '<a href="index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=gis&id_agente='.$id_agente.'">'.html_print_image('images/gm_gis.png', true, [ 'title' => __('GIS data')]).'</a>'; @@ -446,10 +447,10 @@ if ($id_agente) { } } - // Agent wizard tab + // Agent wizard tab. $agent_wizard['text'] = '<a href="javascript:" class="agent_wizard_tab">'.html_print_image('images/wand_agent.png', true, [ 'title' => __('Agent wizard')]).'</a>'; - // Hidden subtab layer + // Hidden subtab layer. $agent_wizard['sub_menu'] = '<ul class="mn subsubmenu" style="display:none; float:none;">'; $agent_wizard['sub_menu'] .= '<li class="nomn tab_godmode" style="text-align: center;">'; $agent_wizard['sub_menu'] .= '<a href="index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=agent_wizard&wizard_section=snmp_explorer&id_agente='.$id_agente.'">'.html_print_image('images/wand_snmp.png', true, [ 'title' => __('SNMP Wizard')]).'</a>'; @@ -471,7 +472,7 @@ if ($id_agente) { $total_incidents = agents_get_count_incidents($id_agente); - // Incident tab + // Incident tab. if ($total_incidents > 0) { $incidenttab['text'] = '<a href="index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=incident&id_agente='.$id_agente.'">'.html_print_image('images/book_edit.png', true, ['title' => __('Incidents')]).'</a>'; @@ -532,7 +533,7 @@ if ($id_agente) { ]; } - // Only if the agent has incidents associated show incidents tab + // Only if the agent has incidents associated show incidents tab. if ($total_incidents) { $onheader['incident'] = $incidenttab; } @@ -545,7 +546,7 @@ if ($id_agente) { ]; } - // Extensions tabs + // Extensions tabs. foreach ($config['extensions'] as $extension) { if (isset($extension['extension_god_tab'])) { if (check_acl($config['id_user'], $group, $extension['extension_god_tab']['acl'])) { @@ -574,7 +575,7 @@ if ($id_agente) { } $help_header = ''; - // This add information to the header + // This add information to the header. switch ($tab) { case 'main': $tab_description = '- '.__('Setup'); @@ -639,6 +640,10 @@ if ($id_agente) { case 'wmi_explorer': $tab_description = '- '.__('WMI Wizard'); break; + + default: + // Default. + break; } break; @@ -649,10 +654,15 @@ if ($id_agente) { $tab_description = '- '.__('SNMP explorer'); $help_header = 'snmp_explorer'; break; + + default: + // Default. + break; } break; default: + // Default. break; } @@ -668,7 +678,7 @@ if ($id_agente) { $config['item_title_size_text'] ); } else { - // Create agent + // Create agent. ui_print_page_header( __('Agent manager'), 'images/bricks.png', @@ -682,12 +692,12 @@ $delete_conf_file = (bool) get_parameter('delete_conf_file'); if ($delete_conf_file) { $correct = false; - // Delete remote configuration + // Delete remote configuration. if (isset($config['remote_config'])) { $agent_md5 = md5(io_safe_output(agents_get_name($id_agente, 'none')), false); if (file_exists($config['remote_config'].'/md5/'.$agent_md5.'.md5')) { - // Agent remote configuration editor + // Agent remote configuration editor. $file_name = $config['remote_config'].'/conf/'.$agent_md5.'.conf'; $correct = @unlink($file_name); @@ -703,7 +713,7 @@ if ($delete_conf_file) { ); } -// Show agent creation results +// Show agent creation results. if ($create_agent) { if (!isset($agent_creation_error)) { $agent_creation_error = __('Could not be created'); @@ -720,17 +730,17 @@ if ($create_agent) { } } -// Fix / Normalize module data +// Fix / Normalize module data. if (isset($_GET['fix_module'])) { $id_module = get_parameter_get('fix_module', 0); - // get info about this module + // Get info about this module. $media = reporting_get_agentmodule_data_average($id_module, 30758400); - // Get average over the year + // Get average over the year. $media *= 1.3; $error = ''; $result = true; - // If the value of media is 0 or something went wrong, don't delete + // If the value of media is 0 or something went wrong, don't delete. if (!empty($media)) { $where = [ 'datos' => '>'.$media, @@ -759,9 +769,9 @@ if (isset($_GET['fix_module'])) { $update_agent = (bool) get_parameter('update_agent'); -// Update AGENT +// Update AGENT. if ($update_agent) { - // if modified some agent paramenter + // If modified some agent paramenter. $mssg_warning = 0; $id_agente = (int) get_parameter_post('id_agente'); $nombre_agente = str_replace('`', '‘', (string) get_parameter_post('agente', '')); @@ -770,14 +780,14 @@ if ($update_agent) { $alias_as_name = (int) get_parameter_post('alias_as_name', 0); $direccion_agente = (string) get_parameter_post('direccion', ''); $unique_ip = (int) get_parameter_post('unique_ip', 0); - // safe_output only validate ip + // Safe_output only validate ip. $direccion_agente = trim(io_safe_output($direccion_agente)); if (!validate_address($direccion_agente)) { $mssg_warning = 1; } - // safe-input before validate ip + // Safe-input before validate ip. $direccion_agente = io_safe_input($direccion_agente); $address_list = (string) get_parameter_post('address_list', ''); @@ -789,7 +799,7 @@ if ($update_agent) { // If we selected another IP in the drop down list to be 'primary': // a) field is not the same as selectbox // b) field has not changed from current IP - // c) selectbox is not the current IP + // c) selectbox is not the current IP. if (!empty($address_list)) { $direccion_agente = $address_list; } @@ -799,7 +809,7 @@ if ($update_agent) { $intervalo = (int) get_parameter_post('intervalo', SECONDS_5MINUTES); $comentarios = str_replace('`', '‘', (string) get_parameter_post('comentarios', '')); $modo = (int) get_parameter_post('modo', 0); - // Mode: Learning, Normal or Autodisabled + // Mode: Learning, Normal or Autodisabled. $id_os = (int) get_parameter_post('id_os'); $disabled = (bool) get_parameter_post('disabled'); $server_name = (string) get_parameter_post('server_name', ''); @@ -837,7 +847,7 @@ if ($update_agent) { ); if ($old_value === false) { - // Create custom field if not exist + // Create custom field if not exist. $update_custom = db_process_sql_insert( 'tagent_custom_data', [ @@ -866,10 +876,10 @@ if ($update_agent) { ui_print_warning_message(__('The ip or dns name entered cannot be resolved')); } - // Verify if there is another agent with the same name but different ID + // Verify if there is another agent with the same name but different ID. if ($alias == '') { ui_print_error_message(__('No agent alias specified')); - // If there is an agent with the same name, but a different ID + // If there is an agent with the same name, but a different ID. } if ($unique_ip && $direccion_agente != '') { @@ -882,7 +892,7 @@ if ($update_agent) { } else if ($exists_ip) { ui_print_error_message(__('Duplicate main IP address')); } else { - // If different IP is specified than previous, add the IP + // If different IP is specified than previous, add the IP. if ($direccion_agente != '' && $direccion_agente != agents_get_address($id_agente) ) { @@ -890,7 +900,7 @@ if ($update_agent) { } $action_delete_ip = (bool) get_parameter('delete_ip', false); - // If IP is set for deletion, delete first + // If IP is set for deletion, delete first. if ($action_delete_ip) { $delete_ip = get_parameter_post('address_list'); @@ -939,11 +949,11 @@ if ($update_agent) { __('There was a problem updating the agent') ); } else { - // Update the agent from the metaconsole cache + // Update the agent from the metaconsole cache. enterprise_include_once('include/functions_agents.php'); enterprise_hook('agent_update_from_cache', [$id_agente, $values, $server_name]); - // Update the configuration files + // Update the configuration files. if ($old_values['intervalo'] != $intervalo) { enterprise_hook( 'config_agents_update_config_token', @@ -1057,9 +1067,9 @@ if ($update_agent) { } // Read agent data -// This should be at the end of all operation checks, to read the changes - $id_agente doesn't have to be retrieved +// This should be at the end of all operation checks, to read the changes - $id_agente doesn't have to be retrieved. if ($id_agente) { - // This has been done in the beginning of the page, but if an agent was created, this id might change + // This has been done in the beginning of the page, but if an agent was created, this id might change. $id_grupo = agents_get_agent_group($id_agente); if (!check_acl_one_of_groups($config['id_user'], $all_groups, 'AW') && !check_acl_one_of_groups($config['id_user'], $all_groups, 'AD')) { db_pandora_audit('ACL Violation', 'Trying to admin an agent without access'); @@ -1069,13 +1079,13 @@ if ($id_agente) { $agent = db_get_row('tagente', 'id_agente', $id_agente); if (empty($agent)) { - // Close out the page + // Close out the page. ui_print_error_message(__('There was a problem loading the agent')); return; } $intervalo = $agent['intervalo']; - // Define interval in seconds + // Define interval in seconds. $nombre_agente = $agent['nombre']; if (empty($alias)) { $alias = $agent['alias']; @@ -1111,11 +1121,11 @@ $create_module = (bool) get_parameter('create_module'); $delete_module = (bool) get_parameter('delete_module'); $enable_module = (int) get_parameter('enable_module'); $disable_module = (int) get_parameter('disable_module'); -// It is the id_agent_module to duplicate +// It is the id_agent_module to duplicate. $duplicate_module = (int) get_parameter('duplicate_module'); $edit_module = (bool) get_parameter('edit_module'); -// GET DATA for MODULE UPDATE OR MODULE INSERT +// GET DATA for MODULE UPDATE OR MODULE INSERT. if ($update_module || $create_module) { $id_grupo = agents_get_agent_group($id_agente); $all_groups = agents_get_all_groups_agent($id_agente, $id_grupo); @@ -1138,7 +1148,7 @@ if ($update_module || $create_module) { // Don't read as (float) because it lost it's decimals when put into MySQL // where are very big and PHP uses scientific notation, p.e: - // 1.23E-10 is 0.000000000123 + // 1.23E-10 is 0.000000000123. $post_process = (string) get_parameter('post_process', 0.0); if (get_parameter('prediction_module')) { $prediction_module = 1; @@ -1160,7 +1170,7 @@ if ($update_module || $create_module) { $tcp_send = (string) get_parameter('tcp_send'); $tcp_rcv = (string) get_parameter('tcp_rcv'); $tcp_port = (int) get_parameter('tcp_port'); - // Correction in order to not insert 0 as port + // Correction in order to not insert 0 as port. $is_port_empty = get_parameter('tcp_port', ''); if ($is_port_empty === '') { $tcp_port = null; @@ -1186,7 +1196,7 @@ if ($update_module || $create_module) { } if ($id_module_type == 25) { - // web analysis, from MODULE_WUX + // web analysis, from MODULE_WUX. $custom_string_1 = base64_encode((string) get_parameter('custom_string_1', $custom_string_1_default)); $custom_integer_1 = (int) get_parameter('custom_integer_1', $custom_integer_1_default); } else { @@ -1198,7 +1208,7 @@ if ($update_module || $create_module) { $custom_string_3 = (string) get_parameter('custom_string_3', $custom_string_3_default); $custom_integer_2 = (int) get_parameter('custom_integer_2', 0); - // Get macros + // Get macros. $macros = (string) get_parameter('macros'); if (!empty($macros)) { @@ -1225,7 +1235,7 @@ if ($update_module || $create_module) { if (preg_match('/^module_name\s*(.*)/', $line, $match)) { $new_configuration_data .= 'module_name '.io_safe_output($name)."\n"; } - // We delete from conf all the module macros starting with _field + // We delete from conf all the module macros starting with _field. else if (!preg_match('/^module_macro_field.*/', $line, $match)) { $new_configuration_data .= "$line\n"; } @@ -1269,16 +1279,16 @@ if ($update_module || $create_module) { $snmp_community = (string) get_parameter('snmp_community'); $snmp_oid = (string) get_parameter('snmp_oid'); - // Change double quotes by single + // Change double quotes by single. $snmp_oid = preg_replace('/"/', ''', $snmp_oid); if (empty($snmp_oid)) { - // The user did not set any OID manually but did a SNMP walk + // The user did not set any OID manually but did a SNMP walk. $snmp_oid = (string) get_parameter('select_snmp_oid'); } if ($id_module_type >= 15 && $id_module_type <= 18) { - // New support for snmp v3 + // New support for snmp v3. $tcp_send = (string) get_parameter('snmp_version'); $plugin_user = (string) get_parameter('snmp3_auth_user'); $plugin_pass = io_input_password((string) get_parameter('snmp3_auth_pass')); @@ -1300,7 +1310,11 @@ if ($update_module || $create_module) { $parent_module_id = (int) get_parameter('parent_module_id'); $ip_target = (string) get_parameter('ip_target'); - if ($ip_target == '') { + // No autofill if the module is a webserver module. + if ($ip_target == '' + && $id_module_type < MODULE_WEBSERVER_CHECK_LATENCY + && $id_module_type > MODULE_WEBSERVER_RETRIEVE_STRING_DATA + ) { $ip_target = 'auto'; } @@ -1410,7 +1424,7 @@ if ($update_module || $create_module) { $module_macro_values = (array) get_parameter('module_macro_values', []); $module_macros = modules_get_module_macros_json($module_macro_names, $module_macro_values); - // Make changes in the conf file if necessary + // Make changes in the conf file if necessary. enterprise_include_once('include/functions_config_agents.php'); $module_in_policy = enterprise_hook('policies_is_module_in_policy', [$id_agent_module]); @@ -1431,7 +1445,7 @@ if ($update_module || $create_module) { } } -// MODULE UPDATE +// MODULE UPDATE. if ($update_module) { $id_agent_module = (int) get_parameter('id_agent_module'); @@ -1517,7 +1531,7 @@ if ($update_module) { } } - // In local modules, the interval is updated by agent + // In local modules, the interval is updated by agent. $module_kind = (int) get_parameter('moduletype'); if ($module_kind == MODULE_DATA) { unset($values['module_interval']); @@ -1586,7 +1600,7 @@ if ($update_module) { ); } - // Update the module interval + // Update the module interval. cron_update_module_interval($id_agent_module, $cron_interval); ui_print_success_message(__('Module successfully updated')); @@ -1606,7 +1620,7 @@ if ($update_module) { } // MODULE INSERT -// ================= +// =================. if ($create_module) { if (isset($_POST['combo_snmp_oid'])) { $combo_snmp_oid = get_parameter_post('combo_snmp_oid'); @@ -1619,7 +1633,7 @@ if ($create_module) { $id_module = (int) get_parameter('id_module'); // Commented because can't create prediction modules /* - if ($id_module == 5) { + If ($id_module == 5) { $prediction_module = 1; } */ @@ -1630,6 +1644,10 @@ if ($create_module) { $description = ' '; } break; + + default: + // Default. + break; } $values = [ @@ -1755,7 +1773,7 @@ if ($create_module) { enterprise_hook('modules_create_synthetic_operations', [$id_agent_module, $serialize_ops]); } - // Update the module interval + // Update the module interval. cron_update_module_interval($id_agent_module, $cron_interval); ui_print_success_message(__('Module added successfully')); @@ -1776,7 +1794,7 @@ if ($create_module) { } // MODULE DELETION -// ================= +// =================. if ($delete_module) { // DELETE agent module ! $id_borrar_modulo = (int) get_parameter_get('delete_module', 0); @@ -1812,7 +1830,7 @@ if ($delete_module) { enterprise_include_once('include/functions_config_agents.php'); enterprise_hook('config_agents_delete_module_in_conf', [modules_get_agentmodule_agent($id_borrar_modulo), modules_get_agentmodule_name($id_borrar_modulo)]); - // Init transaction + // Init transaction. $error = 0; // First delete from tagente_modulo -> if not successful, increment @@ -1831,7 +1849,7 @@ if ($delete_module) { if ($result === false) { $error++; } else { - // Set flag to update module status count + // Set flag to update module status count. db_process_sql( 'UPDATE tagente SET update_module_count = 1, update_alert_count = 1 @@ -1873,7 +1891,7 @@ if ($delete_module) { } // Trick to detect if we are deleting a synthetic module (avg or arithmetic) - // If result is empty then module doesn't have this type of submodules + // If result is empty then module doesn't have this type of submodules. $ops_json = enterprise_hook('modules_get_synthetic_operations', [$id_borrar_modulo]); $result_ops_synthetic = json_decode($ops_json); if (!empty($result_ops_synthetic)) { @@ -1881,18 +1899,17 @@ if ($delete_module) { if ($result === false) { $error++; } - } //end if - else { + } else { $result_components = enterprise_hook('modules_get_synthetic_components', [$id_borrar_modulo]); $count_components = 1; if (!empty($result_components)) { - // Get number of components pending to delete to know when it's needed to update orders + // Get number of components pending to delete to know when it's needed to update orders. $num_components = count($result_components); $last_target_module = 0; foreach ($result_components as $id_target_module) { - // Detects change of component or last component to update orders + // Detects change of component or last component to update orders. if (($count_components == $num_components) - or ($last_target_module != $id_target_module) + || ($last_target_module != $id_target_module) ) { $update_orders = true; } else { @@ -1911,7 +1928,7 @@ if ($delete_module) { } } - // Check for errors + // Check for errors. if ($error != 0) { ui_print_error_message(__('There was a problem deleting the module')); } else { @@ -1928,8 +1945,7 @@ if ($delete_module) { } } -// MODULE DUPLICATION -// ================== +// MODULE DUPLICATION. if (!empty($duplicate_module)) { // DUPLICATE agent module ! $id_duplicate_module = $duplicate_module; @@ -1975,8 +1991,7 @@ if (!empty($duplicate_module)) { } } -// MODULE ENABLE/DISABLE -// ===================== +// MODULE ENABLE/DISABLE. if ($enable_module) { $result = modules_change_disabled($enable_module, 0); $modulo_nombre = db_get_row_sql('SELECT nombre FROM tagente_modulo WHERE id_agente_modulo = '.$enable_module.''); @@ -2015,8 +2030,7 @@ if ($disable_module) { ); } -// UPDATE GIS -// ========== +// UPDATE GIS. $updateGIS = get_parameter('update_gis', 0); if ($updateGIS) { $updateGisData = get_parameter('update_gis_data'); @@ -2105,8 +2119,10 @@ switch ($tab) { case 'alert': /* - Because $id_agente is set, it will show only agent alerts */ - // This var is for not display create button on alert list + * Because $id_agente is set, it will show only agent alerts + * This var is for not display create button on alert list + */ + $dont_display_alert_create_bttn = true; include 'godmode/alerts/alert_list.php'; break; @@ -2155,7 +2171,7 @@ switch ($tab) { default: if (enterprise_hook('switch_agent_tab', [$tab])) { // This will make sure that blank pages will have at least some - // debug info in them - do not translate debug + // debug info in them - do not translate debug. ui_print_error_message(__('Invalid tab specified')); } break; diff --git a/pandora_console/include/constants.php b/pandora_console/include/constants.php index ea18c90d3f..57b98be9b4 100644 --- a/pandora_console/include/constants.php +++ b/pandora_console/include/constants.php @@ -354,6 +354,12 @@ define('MODULE_PREDICTION_CLUSTER', 5); define('MODULE_PREDICTION_CLUSTER_AA', 6); define('MODULE_PREDICTION_CLUSTER_AP', 7); +// Type of Webserver Modules. +define('MODULE_WEBSERVER_CHECK_LATENCY', 30); +define('MODULE_WEBSERVER_CHECK_SERVER_RESPONSE', 31); +define('MODULE_WEBSERVER_RETRIEVE_NUMERIC_DATA', 32); +define('MODULE_WEBSERVER_RETRIEVE_STRING_DATA', 33); + // SNMP CONSTANTS. define('SNMP_DIR_MIBS', 'attachment/mibs'); From 89ff40e2b99451d539a1f2f8aa88446c0a10b871 Mon Sep 17 00:00:00 2001 From: alejandro-campos <alejandro.campos@artica.es> Date: Mon, 10 Jun 2019 09:43:27 +0200 Subject: [PATCH 03/79] moved mail server setup to general setup --- .../godmode/setup/setup_general.php | 42 ++++++++++++++ pandora_console/include/functions_config.php | 56 +++++++++---------- 2 files changed, 70 insertions(+), 28 deletions(-) diff --git a/pandora_console/godmode/setup/setup_general.php b/pandora_console/godmode/setup/setup_general.php index 8079aee1e8..eb37a608ea 100644 --- a/pandora_console/godmode/setup/setup_general.php +++ b/pandora_console/godmode/setup/setup_general.php @@ -32,6 +32,12 @@ $table->size[0] = '30%'; $table->style[0] = 'font-weight:bold'; $table->size[1] = '70%'; +$table_mail_conf = new stdClass(); +$table_mail_conf->width = '100%'; +$table_mail_conf->class = 'databox filters'; +$table_mail_conf->data = []; +$table_mail_conf->style[0] = 'font-weight: bold'; + // Current config["language"] could be set by user, not taken from global setup ! switch ($config['dbtype']) { case 'mysql': @@ -296,6 +302,42 @@ echo '<legend>'.__('General options').'</legend>'; html_print_input_hidden('update_config', 1); html_print_table($table); +$encryption = [ + 'ssl' => 'SSL/TLS', + 'sslv2' => 'SSLv2', + 'sslv3' => 'SSLv3', + 'tls' => 'STARTTLS', +]; + +echo '</fieldset>'; + +echo '<fieldset>'; +echo '<legend>'.__('Mail configuration').'</legend>'; + +$table_mail_conf->data[0][0] = __('From dir'); +$table_mail_conf->data[0][1] = html_print_input_text('email_from_dir', $config['email_from_dir'], '', 30, 100, true); + +$table_mail_conf->data[1][0] = __('From name'); +$table_mail_conf->data[1][2] = html_print_input_text('email_from_name', $config['email_from_name'], '', 30, 100, true); + +$table_mail_conf->data[2][0] = __('Server SMTP'); +$table_mail_conf->data[2][1] = html_print_input_text('email_smtpServer', $config['email_smtpServer'], '', 30, 100, true); + +$table_mail_conf->data[3][0] = __('Port SMTP'); +$table_mail_conf->data[3][1] = html_print_input_text('email_smtpPort', $config['email_smtpPort'], '', 30, 100, true); + +$table_mail_conf->data[4][0] = __('Encryption'); +$table_mail_conf->data[4][1] = html_print_select($encryption, 'email_encryption', $config['email_encryption'], '', __('none'), 0, true); + +$table_mail_conf->data[5][0] = __('Email user'); +$table_mail_conf->data[5][1] = html_print_input_text('email_username', $config['email_username'], '', 30, 100, true); + +$table_mail_conf->data[6][0] = __('Email password'); +$table_mail_conf->data[6][1] = html_print_input_password('email_password', io_output_password($config['email_password']), '', 30, 100, true); + +html_print_input_hidden('update_config', 1); +html_print_table($table_mail_conf); + echo '</fieldset>'; echo '<div class="action-buttons" style="width: '.$table->width.'">'; diff --git a/pandora_console/include/functions_config.php b/pandora_console/include/functions_config.php index 488d6a28cd..1b5af44a21 100644 --- a/pandora_console/include/functions_config.php +++ b/pandora_console/include/functions_config.php @@ -317,6 +317,34 @@ function config_update_config() if (!config_update_value('unique_ip', get_parameter('unique_ip'))) { $error_update[] = __('unique_ip'); } + + if (!config_update_value('email_smtpServer', get_parameter('email_smtpServer'))) { + $error_update[] = __('Server SMTP'); + } + + if (!config_update_value('email_from_dir', get_parameter('email_from_dir'))) { + $error_update[] = __('From dir'); + } + + if (!config_update_value('email_from_name', get_parameter('email_from_name'))) { + $error_update[] = __('From name'); + } + + if (!config_update_value('email_smtpPort', (int) get_parameter('email_smtpPort'))) { + $error_update[] = __('Port SMTP'); + } + + if (!config_update_value('email_encryption', get_parameter('email_encryption'))) { + $error_update[] = __('Encryption'); + } + + if (!config_update_value('email_username', get_parameter('email_username'))) { + $error_update[] = __('Email user'); + } + + if (!config_update_value('email_password', get_parameter('email_password'))) { + $error_update[] = __('Email password'); + } break; case 'enterprise': @@ -407,34 +435,6 @@ function config_update_config() if (!config_update_value('inventory_changes_blacklist', implode(',', $inventory_changes_blacklist))) { $error_update[] = __('Inventory changes blacklist'); } - - if (!config_update_value('email_from_dir', get_parameter('email_from_dir'))) { - $error_update[] = __('From dir'); - } - - if (!config_update_value('email_from_name', get_parameter('email_from_name'))) { - $error_update[] = __('From name'); - } - - if (!config_update_value('email_smtpServer', get_parameter('email_smtpServer'))) { - $error_update[] = __('Server SMTP'); - } - - if (!config_update_value('email_smtpPort', (int) get_parameter('email_smtpPort'))) { - $error_update[] = __('Port SMTP'); - } - - if (!config_update_value('email_encryption', get_parameter('email_encryption'))) { - $error_update[] = __('Encryption'); - } - - if (!config_update_value('email_username', get_parameter('email_username'))) { - $error_update[] = __('Email user'); - } - - if (!config_update_value('email_password', get_parameter('email_password'))) { - $error_update[] = __('Email password'); - } } break; From 03842df33e3b7afc549e44b8ecca6549a4ef00a0 Mon Sep 17 00:00:00 2001 From: Daniel Maya <daniel.maya@artica.es> Date: Fri, 28 Jun 2019 11:19:13 +0200 Subject: [PATCH 04/79] Added mr and uncommented code --- pandora_console/extras/30.sql | 7 +++++++ .../models/VisualConsole/Items/Group.php | 16 ++-------------- .../models/VisualConsole/Items/Icon.php | 16 ++-------------- .../models/VisualConsole/Items/StaticGraph.php | 18 ++---------------- 4 files changed, 13 insertions(+), 44 deletions(-) create mode 100644 pandora_console/extras/30.sql diff --git a/pandora_console/extras/30.sql b/pandora_console/extras/30.sql new file mode 100644 index 0000000000..eb6650dc5a --- /dev/null +++ b/pandora_console/extras/30.sql @@ -0,0 +1,7 @@ +START TRANSACTION; + +UPDATE `tlayout_data` SET `height` = 70 , `width` = 70 WHERE `height` = 0 && `width` = 0 && ((`type` IN (0,5)) || +(`type` = 10 && `image` IS NOT NULL && `image` != '' && `image` != 'none') || +(`type` = 11 && `image` IS NOT NULL && `image` != '' && `image` != 'none' && `show_statistics` = 0)); + +COMMIT; \ No newline at end of file diff --git a/pandora_console/include/rest-api/models/VisualConsole/Items/Group.php b/pandora_console/include/rest-api/models/VisualConsole/Items/Group.php index cbbe877f8d..53f2adcadd 100644 --- a/pandora_console/include/rest-api/models/VisualConsole/Items/Group.php +++ b/pandora_console/include/rest-api/models/VisualConsole/Items/Group.php @@ -291,21 +291,9 @@ final class Group extends Item $width = (int) $data['width']; $height = (int) $data['height']; if ($width === 0 || $height === 0) { - // TODO: This will be the default behaviour after we finish the - // builder. Don't delete this code. - // $sizeImage = getimagesize($config['homedir'].'/'.$imagePath); - // $data['width'] = $sizeImage[0]; - // $data['height'] = $sizeImage[1]; $sizeImage = getimagesize($config['homedir'].'/'.$imagePath); - $imageHeight = $sizeImage[1]; - - if ($width === 0) { - $data['width'] = 70; - } - - if ($height === 0) { - $data['height'] = ($imageHeight > 70) ? 70 : $imageHeight; - } + $data['width'] = $sizeImage[0]; + $data['height'] = $sizeImage[1]; } $data['html'] = '<img src="'.$data['statusImageSrc'].'">'; diff --git a/pandora_console/include/rest-api/models/VisualConsole/Items/Icon.php b/pandora_console/include/rest-api/models/VisualConsole/Items/Icon.php index 29605ffb4f..e67c76a6a7 100644 --- a/pandora_console/include/rest-api/models/VisualConsole/Items/Icon.php +++ b/pandora_console/include/rest-api/models/VisualConsole/Items/Icon.php @@ -120,21 +120,9 @@ final class Icon extends Item $width = (int) $data['width']; $height = (int) $data['height']; if ($width === 0 || $height === 0) { - // TODO: This will be the default behaviour after we finish the - // builder. Don't delete this code. - // $sizeImage = getimagesize($config['homedir'].'/'.$imagePath); - // $data['width'] = $sizeImage[0]; - // $data['height'] = $sizeImage[1]; $sizeImage = getimagesize($config['homedir'].'/'.$imagePath); - $imageHeight = $sizeImage[1]; - - if ($width === 0) { - $data['width'] = 70; - } - - if ($height === 0) { - $data['height'] = ($imageHeight > 70) ? 70 : $imageHeight; - } + $data['width'] = $sizeImage[0]; + $data['height'] = $sizeImage[1]; } return $data; diff --git a/pandora_console/include/rest-api/models/VisualConsole/Items/StaticGraph.php b/pandora_console/include/rest-api/models/VisualConsole/Items/StaticGraph.php index 9af4287d26..c43fb39136 100644 --- a/pandora_console/include/rest-api/models/VisualConsole/Items/StaticGraph.php +++ b/pandora_console/include/rest-api/models/VisualConsole/Items/StaticGraph.php @@ -184,23 +184,9 @@ final class StaticGraph extends Item $width = (int) $data['width']; $height = (int) $data['height']; if ($width === 0 || $height === 0) { - // TODO: This will be the default behaviour after we finish the - // builder. Don't delete this code. - // $sizeImage = getimagesize($config['homedir'].'/'.$imagePath); - // $data['width'] = $sizeImage[0]; - // $data['height'] = $sizeImage[1]; - // Default value. Will be replaced by a dynamic image size - // calculation after the phase 3. $sizeImage = getimagesize($config['homedir'].'/'.$imagePath); - $imageHeight = $sizeImage[1]; - - if ($width === 0) { - $data['width'] = 70; - } - - if ($height === 0) { - $data['height'] = ($imageHeight > 70) ? 70 : $imageHeight; - } + $data['width'] = $sizeImage[0]; + $data['height'] = $sizeImage[1]; } // Get last value. From 41d8afaeea8b1b379965e851ac9f3631e2e3c7bf Mon Sep 17 00:00:00 2001 From: Luis Calvo <luis.calvo@artica.es> Date: Fri, 12 Jul 2019 11:32:56 +0200 Subject: [PATCH 05/79] added summation report uncompressed module cehckbox --- .../reporting_builder.item_editor.php | 20 +++++++++++++++++++ .../godmode/reporting/reporting_builder.php | 9 +++++++++ .../include/functions_reporting.php | 12 ++++++++--- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/pandora_console/godmode/reporting/reporting_builder.item_editor.php b/pandora_console/godmode/reporting/reporting_builder.item_editor.php index ff8ca88e40..9244fd8c27 100755 --- a/pandora_console/godmode/reporting/reporting_builder.item_editor.php +++ b/pandora_console/godmode/reporting/reporting_builder.item_editor.php @@ -427,6 +427,7 @@ switch ($action) { ); $idAgentModule = $item['id_agent_module']; $period = $item['period']; + $uncompressed_module = $item['uncompressed_module']; break; case 'historical_data': @@ -2769,6 +2770,23 @@ $class = 'databox filters'; ?> </td> </tr> + + <tr id="row_uncompressed_module" style="" class="datos"> + <td style="font-weight:bold;"> + <?php + echo __('Uncompress module').ui_print_help_tip( + __('Use uncompressed module data.'), + true + ); + ?> + </td> + <td style=""> + <?php + html_print_checkbox('uncompressed_module', 1, false, false, false, '', false); + ?> + </td> + </tr> + </tbody> </table> @@ -4498,6 +4516,7 @@ function chooseType() { $('#row_select_fields').hide(); $("#row_select_fields2").hide(); $("#row_select_fields3").hide(); + $("#row_uncompressed_module").hide(); // SLA list default state. $("#sla_list").hide(); @@ -4706,6 +4725,7 @@ function chooseType() { $("#row_module").show(); $("#row_period").show(); $("#row_historical_db_check").hide(); + $("#row_uncompressed_module").show(); break; case 'historical_data': diff --git a/pandora_console/godmode/reporting/reporting_builder.php b/pandora_console/godmode/reporting/reporting_builder.php index 1e552b112a..43f5c1510b 100755 --- a/pandora_console/godmode/reporting/reporting_builder.php +++ b/pandora_console/godmode/reporting/reporting_builder.php @@ -1862,6 +1862,11 @@ switch ($action) { $values['id_agent'] = get_parameter('group'); } + if ($values['type'] = 'sumatory') { + $values['uncompressed_module'] = get_parameter('uncompressed_module', 0); + } + + $values['header_definition'] = get_parameter('header'); $values['column_separator'] = get_parameter('field'); $values['line_separator'] = get_parameter('line'); @@ -2400,6 +2405,10 @@ switch ($action) { $values['id_agent'] = get_parameter('group'); } + if ($values['type'] = 'sumatory') { + $values['uncompressed_module'] = get_parameter('uncompressed_module', 0); + } + $values['header_definition'] = get_parameter('header'); $values['column_separator'] = get_parameter('field'); $values['line_separator'] = get_parameter('line'); diff --git a/pandora_console/include/functions_reporting.php b/pandora_console/include/functions_reporting.php index 97766305a2..5861849f1e 100755 --- a/pandora_console/include/functions_reporting.php +++ b/pandora_console/include/functions_reporting.php @@ -10654,7 +10654,8 @@ function reporting_get_agentmodule_data_min($id_agent_module, $period=0, $date=0 function reporting_get_agentmodule_data_sum( $id_agent_module, $period=0, - $date=0 + $date=0, + $uncompressed_module=true ) { global $config; @@ -10680,7 +10681,10 @@ function reporting_get_agentmodule_data_sum( $id_module_type ); $module_interval = modules_get_interval($id_agent_module); - $uncompressed_module = is_module_uncompressed($module_name); + // Check if module must be compressed + if (!$uncompressed_module) { + $uncompressed_module = is_module_uncompressed($module_name); + } // Wrong module type if (is_module_data_string($module_name)) { @@ -10735,7 +10739,9 @@ function reporting_get_agentmodule_data_sum( break; } - if (!$module_inc) { + if ($uncompressed_module) { + $total += $data['datos']; + } else if (!$module_inc) { foreach ($data['data'] as $val) { if (is_numeric($val['datos'])) { $partial_total += $val['datos']; From ef9502a552372051f72ce07851503e297e88000e Mon Sep 17 00:00:00 2001 From: Luis Calvo <luis.calvo@artica.es> Date: Mon, 15 Jul 2019 11:56:57 +0200 Subject: [PATCH 06/79] Fixed errors on sum report uncompressed checkbox --- .../godmode/reporting/reporting_builder.item_editor.php | 4 ++-- pandora_console/include/functions_db.php | 1 + pandora_console/include/functions_reporting.php | 8 +++++--- pandora_console/operation/reporting/reporting_viewer.php | 2 +- pandora_console/pandoradb.sql | 1 + 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/pandora_console/godmode/reporting/reporting_builder.item_editor.php b/pandora_console/godmode/reporting/reporting_builder.item_editor.php index 9244fd8c27..52a4852d2d 100755 --- a/pandora_console/godmode/reporting/reporting_builder.item_editor.php +++ b/pandora_console/godmode/reporting/reporting_builder.item_editor.php @@ -153,6 +153,7 @@ $checks_in_ok_status = true; $unknown_checks = true; $agent_max_value = true; $agent_min_value = true; +$uncompressed_module = true; switch ($action) { case 'new': @@ -811,7 +812,6 @@ switch ($action) { break; } - $urlForm = $config['homeurl'].'index.php?sec=reporting&sec2=godmode/reporting/reporting_builder&tab=item_editor&action='.$actionParameter.'&id_report='.$idReport; echo '<form action="'.$urlForm.'" method="post">'; @@ -2782,7 +2782,7 @@ $class = 'databox filters'; </td> <td style=""> <?php - html_print_checkbox('uncompressed_module', 1, false, false, false, '', false); + html_print_checkbox('uncompressed_module', 1, $item['uncompressed_module'], false, false, '', false); ?> </td> </tr> diff --git a/pandora_console/include/functions_db.php b/pandora_console/include/functions_db.php index 3efbf59628..6bec03c9c2 100644 --- a/pandora_console/include/functions_db.php +++ b/pandora_console/include/functions_db.php @@ -520,6 +520,7 @@ function db_get_sql($sql, $field=0, $search_history_db=false) * Get all the result rows using an SQL statement. * * @param string SQL statement to execute. + global $config; * @param bool If want to search in history database also * @param bool If want to use cache (true by default) * diff --git a/pandora_console/include/functions_reporting.php b/pandora_console/include/functions_reporting.php index 5861849f1e..9382cfb938 100755 --- a/pandora_console/include/functions_reporting.php +++ b/pandora_console/include/functions_reporting.php @@ -4879,7 +4879,8 @@ function reporting_value($report, $content, $type, $pdf=false) $value = reporting_get_agentmodule_data_sum( $content['id_agent_module'], $content['period'], - $report['datetime'] + $report['datetime'], + $content['uncompressed_module'] ); if (!$config['simple_module_value']) { $formated_value = $value; @@ -10648,6 +10649,7 @@ function reporting_get_agentmodule_data_min($id_agent_module, $period=0, $date=0 * @param int Agent module id to get the sumatory. * @param int Period of time to check (in seconds) * @param int Top date to check the values. Default current time. + * @param boolean Show uncompressed data from module * * @return float The sumatory of the module values in the interval. */ @@ -10694,7 +10696,7 @@ function reporting_get_agentmodule_data_sum( // Incremental modules are treated differently $module_inc = is_module_inc($module_name); - if ($uncompressed_module) { + if (!$uncompressed_module) { // Get module data $interval_data = db_get_all_rows_sql( ' @@ -10739,7 +10741,7 @@ function reporting_get_agentmodule_data_sum( break; } - if ($uncompressed_module) { + if (!$uncompressed_module) { $total += $data['datos']; } else if (!$module_inc) { foreach ($data['data'] as $val) { diff --git a/pandora_console/operation/reporting/reporting_viewer.php b/pandora_console/operation/reporting/reporting_viewer.php index e8431ddeb2..96431e9791 100755 --- a/pandora_console/operation/reporting/reporting_viewer.php +++ b/pandora_console/operation/reporting/reporting_viewer.php @@ -17,7 +17,7 @@ global $config; check_login(); enterprise_hook('open_meta_frame'); - +hd($_POST); $id_report = (int) get_parameter('id'); if (! $id_report) { diff --git a/pandora_console/pandoradb.sql b/pandora_console/pandoradb.sql index 95d6caadfd..9f9020990e 100644 --- a/pandora_console/pandoradb.sql +++ b/pandora_console/pandoradb.sql @@ -1455,6 +1455,7 @@ CREATE TABLE IF NOT EXISTS `treport_content` ( `current_month` TINYINT(1) DEFAULT '1', `failover_mode` tinyint(1) DEFAULT '1', `failover_type` tinyint(1) DEFAULT '1', + `uncompressed_module` TINYINT DEFAULT '1', PRIMARY KEY(`id_rc`), FOREIGN KEY (`id_report`) REFERENCES treport(`id_report`) ON UPDATE CASCADE ON DELETE CASCADE From 53c239f55833c05f5544ce0f30f00a25bd135f5c Mon Sep 17 00:00:00 2001 From: Luis Calvo <luis.calvo@artica.es> Date: Wed, 17 Jul 2019 10:34:56 +0200 Subject: [PATCH 07/79] fixed minor errors --- pandora_console/include/functions_db.php | 1 - pandora_console/operation/reporting/reporting_viewer.php | 1 - 2 files changed, 2 deletions(-) diff --git a/pandora_console/include/functions_db.php b/pandora_console/include/functions_db.php index 6bec03c9c2..3efbf59628 100644 --- a/pandora_console/include/functions_db.php +++ b/pandora_console/include/functions_db.php @@ -520,7 +520,6 @@ function db_get_sql($sql, $field=0, $search_history_db=false) * Get all the result rows using an SQL statement. * * @param string SQL statement to execute. - global $config; * @param bool If want to search in history database also * @param bool If want to use cache (true by default) * diff --git a/pandora_console/operation/reporting/reporting_viewer.php b/pandora_console/operation/reporting/reporting_viewer.php index 96431e9791..0bba865711 100755 --- a/pandora_console/operation/reporting/reporting_viewer.php +++ b/pandora_console/operation/reporting/reporting_viewer.php @@ -17,7 +17,6 @@ global $config; check_login(); enterprise_hook('open_meta_frame'); -hd($_POST); $id_report = (int) get_parameter('id'); if (! $id_report) { From adbb48ab87d45adb85eae88da47e8e56511ba1c6 Mon Sep 17 00:00:00 2001 From: fbsanchez <fborja.sanchez@artica.es> Date: Sat, 10 Aug 2019 02:13:01 +0200 Subject: [PATCH 08/79] pandora HA review --- pandora_console/extras/mr/31.sql | 9 +++ .../pandoradb_migrate_6.0_to_7.0.mysql.sql | 15 ++-- .../general/firts_task/HA_cluster_builder.php | 69 +++++++------------ pandora_console/include/constants.php | 18 +++++ pandora_console/include/functions_agents.php | 51 ++++++++++++++ pandora_console/include/functions_db.php | 19 +++++ pandora_console/include/functions_html.php | 4 +- pandora_console/include/functions_ui.php | 1 + pandora_console/include/javascript/pandora.js | 4 +- pandora_console/include/styles/pandora.css | 3 + pandora_console/pandoradb.sql | 15 ++-- 11 files changed, 148 insertions(+), 60 deletions(-) diff --git a/pandora_console/extras/mr/31.sql b/pandora_console/extras/mr/31.sql index 3e527bff53..6a743c38fc 100644 --- a/pandora_console/extras/mr/31.sql +++ b/pandora_console/extras/mr/31.sql @@ -9,4 +9,13 @@ DELETE FROM `tconfig` WHERE `token` LIKE 'integria_api_password'; DELETE FROM `tconfig` WHERE `token` LIKE 'integria_inventory'; DELETE FROM `tconfig` WHERE `token` LIKE 'integria_url'; +ALTER TABLE `tdatabase` MODIFY `last_error` text; +ALTER TABLE `tdatabase` MODIFY `host` VARCHAR(255); +ALTER TABLE `tdatabase` ADD COLUMN `label` VARCHAR(255); +ALTER TABLE `tdatabase` MODIFY `os_user` VARCHAR(255); +ALTER TABLE `tdatabase` MODIFY `db_port` INT UNSIGNED NOT NULL; +ALTER TABLE `tdatabase` MODIFY `os_port` INT UNSIGNED NOT NULL; +ALTER TABLE `tdatabase` ADD COLUMN `ssh_key` TEXT; +ALTER TABLE `tdatabase` ADD COLUMN `ssh_pubkey` TEXT; + COMMIT; \ No newline at end of file diff --git a/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql b/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql index 964441c6c1..a588b7809b 100644 --- a/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql +++ b/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql @@ -219,14 +219,17 @@ CREATE TABLE IF NOT EXISTS `tdashboard` ( -- Table `tdatabase` -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `tdatabase` ( - `id` int(10) unsigned NOT NULL auto_increment, - `host` varchar(100) default '', - `os_port` int(4) unsigned default '22', - `os_user` varchar(100) default '', - `db_port` int(4) unsigned default '3306', + `id` INT(10) unsigned NOT NULL auto_increment, + `host` VARCHAR(255) default '', + `label` VARCHAR(255) default '', + `os_port` int unsigned default 22, + `os_user` VARCHAR(255) default '', + `db_port` int unsigned default 3306, `status` tinyint(1) unsigned default '0', `action` tinyint(1) unsigned default '0', - `last_error` varchar(255) default '', + `ssh_key` TEXT, + `ssh_pubkey` TEXT, + `last_error` TEXT, PRIMARY KEY (`id`) ) ENGINE = InnoDB DEFAULT CHARSET=utf8 ; diff --git a/pandora_console/general/firts_task/HA_cluster_builder.php b/pandora_console/general/firts_task/HA_cluster_builder.php index fa85e28381..6d82d94ad0 100644 --- a/pandora_console/general/firts_task/HA_cluster_builder.php +++ b/pandora_console/general/firts_task/HA_cluster_builder.php @@ -1,15 +1,25 @@ <?php -// Pandora FMS - http://pandorafms.com -// ================================================== -// Copyright (c) 2005-2018 Artica Soluciones Tecnologicas -// Please see http://pandorafms.org for full contribution list -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; version 2 -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +/** + * Manage database HA cluster. + * + * @category Manager + * @package Pandora FMS + * @subpackage Database HA cluster + * @version 1.0.0 + * @license See below + * + * ______ ___ _______ _______ ________ + * | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __| + * | __/| _ | | _ || _ | _| _ | | ___| |__ | + * |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______| + * + * ============================================================================ + * Copyright (c) 2007-2012 Artica Soluciones Tecnologicas, http://www.artica.es + * This code is NOT free software. This code is NOT licenced under GPL2 licence + * You cannnot redistribute it without written permission of copyright holder. + * ============================================================================ + */ + global $config; check_login(); @@ -24,8 +34,6 @@ if (! check_acl($config['id_user'], 0, 'PM')) { } ui_require_css_file('firts_task'); -?> -<?php ui_print_info_message(['no_close' => true, 'message' => __('There are no HA clusters defined yet.') ]); ?> @@ -44,8 +52,9 @@ ui_print_info_message(['no_close' => true, 'message' => __('There are no HA clus </p> <?php - if (check_acl($config['id_user'], 0, 'AW')) { + if (check_acl($config['id_user'], 0, 'PM')) { echo "<div id='create_master_window'></div>"; + echo "<div id='msg'></div>"; ?> <input style="margin-bottom:20px;" onclick="show_create_ha_cluster();" type="submit" class="button_task" value="<?php echo __('Add new node'); ?>" /> <?php @@ -53,35 +62,3 @@ ui_print_info_message(['no_close' => true, 'message' => __('There are no HA clus ?> </div> </div> -<script type="text/javascript"> - function show_create_ha_cluster() { - var params = {}; - params["dialog_master"] = 1; - params["page"] = "enterprise/include/ajax/HA_cluster.ajax"; - jQuery.ajax ({ - data: params, - dataType: "html", - type: "POST", - url: "ajax.php", - success: function (data) { - $("#create_master_window").dialog ({ - title: '<?php echo __('Add master node'); ?>', - resizable: true, - draggable: true, - modal: true, - close: function() { - - }, - overlay: { - opacity: 0.5, - background: "black" - }, - width: 800, - height: 600 - }).empty() - .html(data) - .show (); - } - }); - } -</script> diff --git a/pandora_console/include/constants.php b/pandora_console/include/constants.php index 899b5b609b..da6c9b23f2 100644 --- a/pandora_console/include/constants.php +++ b/pandora_console/include/constants.php @@ -624,3 +624,21 @@ define('DEFAULT_NODE_COLOR', COL_NOTINIT); define('DEFAULT_NODE_IMAGE', 'images/networkmap/unknown.png'); define('NODE_IMAGE_PADDING', 5); + +// Pandora Database HA constants. +define('HA_ACTION_NONE', 0); +define('HA_ACTION_DEPLOY', 1); +define('HA_ACTION_RECOVER', 2); +define('HA_ACTION_PROMOTE', 3); +define('HA_ACTION_DEMOTE', 4); +define('HA_ACTION_DISABLE', 5); +define('HA_ACTION_ENABLE', 6); +define('HA_ACTION_CLEANUP', 7); +define('HA_ACTION_RESYNC', 8); + +define('HA_UNINITIALIZED', 0); +define('HA_ONLINE', 1); +define('HA_PENDING', 2); +define('HA_PROCESSING', 3); +define('HA_DISABLED', 4); +define('HA_FAILED', 5); diff --git a/pandora_console/include/functions_agents.php b/pandora_console/include/functions_agents.php index fdcce4457a..826ca971c5 100644 --- a/pandora_console/include/functions_agents.php +++ b/pandora_console/include/functions_agents.php @@ -68,6 +68,57 @@ function agents_get_agent_id_by_module_id($id_agente_modulo) } +/** + * Search for agent data anywhere. + * + * Note: This method matches with server (perl) locate_agent. + * Do not change order! + * + * @param string $field Alias, name or IP address of searchable agent. + * + * @return array Agent of false if not found. + */ +function agents_locate_agent(string $field) +{ + global $config; + + $table = 'tagente'; + if (is_metaconsole()) { + $table = 'tmetaconsole_agent'; + } + + // Alias. + $sql = sprintf( + 'SELECT * + FROM %s + WHERE alias = "%s"', + $table, + $field + ); + $agent = db_get_row_sql($sql); + + if ($agent !== false) { + return $agent; + } + + // Addr. + $agent = agents_get_agent_with_ip($field); + if ($agent !== false) { + return $agent; + } + + // Name. + $sql = sprintf( + 'SELECT * + FROM %s + WHERE nombre = "%s"', + $table, + $field + ); + return db_get_row_sql($sql); +} + + /** * Get agent id from an agent alias. * diff --git a/pandora_console/include/functions_db.php b/pandora_console/include/functions_db.php index 3efbf59628..a99ab2e41e 100644 --- a/pandora_console/include/functions_db.php +++ b/pandora_console/include/functions_db.php @@ -46,6 +46,25 @@ function db_select_engine() } +/** + * Connects to target DB. + * + * @param array $setup Database definition. + * + * @return mixed Dbconnection or null. + */ +function get_dbconnection(array $setup) +{ + return mysqli_connect( + $setup['dbhost'], + $setup['dbuser'], + $setup['dbpass'], + $setup['dbname'], + $setup['dbport'] + ); +} + + function db_connect($host=null, $db=null, $user=null, $pass=null, $port=null, $critical=true, $charset=null) { global $config; diff --git a/pandora_console/include/functions_html.php b/pandora_console/include/functions_html.php index fc704e2d46..b5955630b8 100644 --- a/pandora_console/include/functions_html.php +++ b/pandora_console/include/functions_html.php @@ -1570,6 +1570,7 @@ function html_print_input_image($name, $src, $value, $style='', $return=false, $ 'onkeypress', 'onkeydown', 'onkeyup', + 'class', ]; foreach ($attrs as $attribute) { @@ -3152,7 +3153,8 @@ function html_print_input($data, $wrapper='div', $input_only=false) ((isset($data['return']) === true) ? $data['return'] : false), ((isset($data['disabled']) === true) ? $data['disabled'] : false), ((isset($data['required']) === true) ? $data['required'] : false), - ((isset($data['class']) === true) ? $data['class'] : '') + ((isset($data['class']) === true) ? $data['class'] : ''), + ((isset($data['autocomplete']) === true) ? $data['autocomplete'] : 'off') ); break; diff --git a/pandora_console/include/functions_ui.php b/pandora_console/include/functions_ui.php index b511481dc6..92bf680a4d 100755 --- a/pandora_console/include/functions_ui.php +++ b/pandora_console/include/functions_ui.php @@ -2678,6 +2678,7 @@ function get_shape_status_set($type) case STATUS_MODULE_UNKNOWN: case STATUS_AGENT_UNKNOWN: case STATUS_AGENT_DOWN: + case STATUS_AGENT_NO_MONITORS: $return = ['class' => 'status_rounded_rectangles']; break; diff --git a/pandora_console/include/javascript/pandora.js b/pandora_console/include/javascript/pandora.js index 05009e7292..1fc5912fb9 100644 --- a/pandora_console/include/javascript/pandora.js +++ b/pandora_console/include/javascript/pandora.js @@ -1915,7 +1915,9 @@ function load_modal(settings) { text: settings.modal.cancel, click: function() { $(this).dialog("close"); - settings.cleanup(); + if (typeof settings.cleanup == "function") { + settings.cleanup(); + } } }, { diff --git a/pandora_console/include/styles/pandora.css b/pandora_console/include/styles/pandora.css index 8c12d11d04..5aacc90075 100644 --- a/pandora_console/include/styles/pandora.css +++ b/pandora_console/include/styles/pandora.css @@ -452,6 +452,9 @@ select:-internal-list-box { .mw120px { min-width: 120px; } +.mw180px { + min-width: 180px; +} .mw250px { min-width: 250px; } diff --git a/pandora_console/pandoradb.sql b/pandora_console/pandoradb.sql index d1de66ab07..8436624366 100644 --- a/pandora_console/pandoradb.sql +++ b/pandora_console/pandoradb.sql @@ -2438,14 +2438,17 @@ CREATE TABLE IF NOT EXISTS `tdashboard` ( -- Table `tdatabase` -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `tdatabase` ( - `id` int(10) unsigned NOT NULL auto_increment, - `host` varchar(100) default '', - `os_port` int(4) unsigned default '22', - `os_user` varchar(100) default '', - `db_port` int(4) unsigned default '3306', + `id` INT(10) unsigned NOT NULL auto_increment, + `host` VARCHAR(255) default '', + `label` VARCHAR(255) default '', + `os_port` int unsigned default 22, + `os_user` VARCHAR(255) default '', + `db_port` int unsigned default 3306, `status` tinyint(1) unsigned default '0', `action` tinyint(1) unsigned default '0', - `last_error` varchar(255) default '', + `ssh_key` TEXT, + `ssh_pubkey` TEXT, + `last_error` TEXT, PRIMARY KEY (`id`) ) ENGINE = InnoDB DEFAULT CHARSET=utf8 ; From 62ec37cf59c8e717b14c8b480f0e22db9ade4e16 Mon Sep 17 00:00:00 2001 From: fbsanchez <fborja.sanchez@artica.es> Date: Sat, 10 Aug 2019 03:18:45 +0200 Subject: [PATCH 09/79] propagate tdatabase updates --- pandora_console/extras/mr/31.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pandora_console/extras/mr/31.sql b/pandora_console/extras/mr/31.sql index 6a743c38fc..23076c9daa 100644 --- a/pandora_console/extras/mr/31.sql +++ b/pandora_console/extras/mr/31.sql @@ -18,4 +18,6 @@ ALTER TABLE `tdatabase` MODIFY `os_port` INT UNSIGNED NOT NULL; ALTER TABLE `tdatabase` ADD COLUMN `ssh_key` TEXT; ALTER TABLE `tdatabase` ADD COLUMN `ssh_pubkey` TEXT; +UPDATE `tdatabase` set `label`=`host`; + COMMIT; \ No newline at end of file From bdee45c2dd20816e5e649848f4e79fb506973e05 Mon Sep 17 00:00:00 2001 From: Tatiana Llorente <tatiana.llorente@artica.es> Date: Mon, 12 Aug 2019 14:24:26 +0200 Subject: [PATCH 10/79] Fixed duplicated names - #4280 --- pandora_console/include/functions_menu.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandora_console/include/functions_menu.php b/pandora_console/include/functions_menu.php index 98191d231f..a6af269e53 100644 --- a/pandora_console/include/functions_menu.php +++ b/pandora_console/include/functions_menu.php @@ -544,9 +544,9 @@ function menu_add_extras(&$menu) $menu_extra['estado']['sub']['godmode/snmpconsole/snmp_alert']['text'] = __('SNMP alerts'); $menu_extra['estado']['sub']['godmode/snmpconsole/snmp_filters']['text'] = __('SNMP filters'); $menu_extra['estado']['sub']['enterprise/godmode/snmpconsole/snmp_trap_editor']['text'] = __('SNMP trap editor'); - $menu_extra['estado']['sub']['snmpconsole']['sub2']['godmode/snmpconsole/snmp_trap_generator']['text'] = __('SNMP trap generator'); + $menu_extra['estado']['sub']['godmode/snmpconsole/snmp_trap_generator']['text'] = __('SNMP trap generator'); - $menu_extra['estado']['sub']['snmpconsole']['sub2']['operation/snmpconsole/snmp_view']['text'] = __('SNMP console'); + $menu_extra['estado']['sub']['operation/snmpconsole/snmp_view']['text'] = __('SNMP console'); $menu_extra['workspace']['sub']['operation/incidents/incident_detail']['text'] = __('Manage incident'); From d46e013567680d9891e03c6175eb9b8ad70a665c Mon Sep 17 00:00:00 2001 From: "marcos.alconada" <marcos.alconada@artica.es> Date: Mon, 19 Aug 2019 14:29:04 +0200 Subject: [PATCH 11/79] =?UTF-8?q?fixed=20visual=20error!=20=C3=A72?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../godmode/agentes/agent_wizard.wmi_explorer.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pandora_console/godmode/agentes/agent_wizard.wmi_explorer.php b/pandora_console/godmode/agentes/agent_wizard.wmi_explorer.php index b40cf80855..47a5cc5a35 100644 --- a/pandora_console/godmode/agentes/agent_wizard.wmi_explorer.php +++ b/pandora_console/godmode/agentes/agent_wizard.wmi_explorer.php @@ -353,7 +353,7 @@ html_print_table($table); echo "<div style='text-align:right; width:".$table->width."'>"; echo '<span id="oid_loading" class="invisible">'.html_print_image('images/spinner.gif', true).'</span>'; html_print_submit_button(__('WMI Explore'), 'wmi_explore', false, ['class' => 'sub next']); -echo '</div>'; +echo '</div><br>'; if ($wmiexplore && $fail) { ui_print_error_message(__('Unable to do WMI explorer')); @@ -364,7 +364,7 @@ unset($table); echo '</form>'; if ($wmiexplore && !$fail) { - echo '<span id ="none_text" style="display: none;">'.__('None').'</span>'; + echo '<br><span id ="none_text" style="display: none;">'.__('None').'</span>'; echo "<form method='post' action='index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=agent_wizard&wizard_section=wmi_explorer&id_agente=$id_agent'>"; echo '<span id="form_interfaces">'; @@ -379,7 +379,7 @@ if ($wmiexplore && !$fail) { // Namespace html_print_input_hidden('server_to_exec', $server_to_exec); - $table->width = '98%'; + $table->width = '100%'; // Mode selector $modes = []; @@ -404,7 +404,7 @@ if ($wmiexplore && !$fail) { $table->colspan[1][0] = 2; $table->data[1][2] = '<b>'.__('Modules').'</b>'; - $table->cellstyle[1][2] = 'vertical-align: middle;'; + $table->cellstyle[1][2] = 'text-align: center;'; // Components list $table->data[2][0] = '<div class="wizard_mode_form wizard_mode_components">'; @@ -495,7 +495,7 @@ if ($wmiexplore && !$fail) { 'width: 300px;' ); $table->data[2][0] .= '</div>'; - $table->cellstyle[2][0] = 'vertical-align: top; text-align: center;'; + $table->cellstyle[2][0] = 'vertical-align: bottom; text-align: center;'; // Components arrow From d515e510f3a6bc0d7c1e588e486cd7d3931c5931 Mon Sep 17 00:00:00 2001 From: Tatiana Llorente <tatiana.llorente@artica.es> Date: Wed, 21 Aug 2019 13:38:53 +0200 Subject: [PATCH 12/79] Fixed bug in custom unit #4166 --- pandora_console/godmode/agentes/configurar_agente.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandora_console/godmode/agentes/configurar_agente.php b/pandora_console/godmode/agentes/configurar_agente.php index 842f6c3d46..82898832fe 100644 --- a/pandora_console/godmode/agentes/configurar_agente.php +++ b/pandora_console/godmode/agentes/configurar_agente.php @@ -1382,7 +1382,7 @@ if ($update_module || $create_module) { $each_ff = (int) get_parameter('each_ff'); $ff_timeout = (int) get_parameter('ff_timeout'); $unit = (string) get_parameter('unit_select'); - if ($unit == 'none') { + if ($unit == 'none' || $unit == '') { $unit = (string) get_parameter('unit_text'); } From b444be87b4014a9b0b781768babe880f661c05f4 Mon Sep 17 00:00:00 2001 From: Tatiana Llorente <tatiana.llorente@artica.es> Date: Wed, 21 Aug 2019 14:46:58 +0200 Subject: [PATCH 13/79] Fixed bug in custom unit #4166 --- pandora_console/godmode/agentes/configurar_agente.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/pandora_console/godmode/agentes/configurar_agente.php b/pandora_console/godmode/agentes/configurar_agente.php index 82898832fe..99b5a68446 100644 --- a/pandora_console/godmode/agentes/configurar_agente.php +++ b/pandora_console/godmode/agentes/configurar_agente.php @@ -1381,11 +1381,7 @@ if ($update_module || $create_module) { $ff_type = (int) get_parameter('ff_type'); $each_ff = (int) get_parameter('each_ff'); $ff_timeout = (int) get_parameter('ff_timeout'); - $unit = (string) get_parameter('unit_select'); - if ($unit == 'none' || $unit == '') { - $unit = (string) get_parameter('unit_text'); - } - + $unit = (string) get_parameter('unit'); $id_tag = (array) get_parameter('id_tag_selected'); $serialize_ops = (string) get_parameter('serialize_ops'); $critical_instructions = (string) get_parameter('critical_instructions'); From 63da85798e543b59364bea7dbd399408a43c4ad1 Mon Sep 17 00:00:00 2001 From: Daniel Maya <daniel.maya@artica.es> Date: Mon, 26 Aug 2019 16:10:06 +0200 Subject: [PATCH 14/79] Change mr --- pandora_console/extras/30.sql | 7 ------- pandora_console/extras/mr/31.sql | 4 ++++ 2 files changed, 4 insertions(+), 7 deletions(-) delete mode 100644 pandora_console/extras/30.sql diff --git a/pandora_console/extras/30.sql b/pandora_console/extras/30.sql deleted file mode 100644 index eb6650dc5a..0000000000 --- a/pandora_console/extras/30.sql +++ /dev/null @@ -1,7 +0,0 @@ -START TRANSACTION; - -UPDATE `tlayout_data` SET `height` = 70 , `width` = 70 WHERE `height` = 0 && `width` = 0 && ((`type` IN (0,5)) || -(`type` = 10 && `image` IS NOT NULL && `image` != '' && `image` != 'none') || -(`type` = 11 && `image` IS NOT NULL && `image` != '' && `image` != 'none' && `show_statistics` = 0)); - -COMMIT; \ No newline at end of file diff --git a/pandora_console/extras/mr/31.sql b/pandora_console/extras/mr/31.sql index 3e527bff53..0d6e69bf2a 100644 --- a/pandora_console/extras/mr/31.sql +++ b/pandora_console/extras/mr/31.sql @@ -9,4 +9,8 @@ DELETE FROM `tconfig` WHERE `token` LIKE 'integria_api_password'; DELETE FROM `tconfig` WHERE `token` LIKE 'integria_inventory'; DELETE FROM `tconfig` WHERE `token` LIKE 'integria_url'; +UPDATE `tlayout_data` SET `height` = 70 , `width` = 70 WHERE `height` = 0 && `width` = 0 && ((`type` IN (0,5)) || +(`type` = 10 && `image` IS NOT NULL && `image` != '' && `image` != 'none') || +(`type` = 11 && `image` IS NOT NULL && `image` != '' && `image` != 'none' && `show_statistics` = 0)); + COMMIT; \ No newline at end of file From d38f1f8aec1fb5b7a3902fd68e95be47416f5a8e Mon Sep 17 00:00:00 2001 From: Tatiana Llorente <tatiana.llorente@artica.es> Date: Tue, 27 Aug 2019 12:21:00 +0200 Subject: [PATCH 15/79] Fixed bug in unit in massive operations - #4166 --- pandora_console/godmode/massive/massive_edit_modules.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/pandora_console/godmode/massive/massive_edit_modules.php b/pandora_console/godmode/massive/massive_edit_modules.php index f52707cb2a..013aa83498 100755 --- a/pandora_console/godmode/massive/massive_edit_modules.php +++ b/pandora_console/godmode/massive/massive_edit_modules.php @@ -1930,11 +1930,7 @@ function process_manage_edit($module_name, $agents_select=null, $module_status=' case 'unit_select': if ($value != -1) { - if ($value == 'none') { - $values['unit'] = (string) get_parameter('unit_text'); - } else { - $values['unit'] = $value; - } + $values['unit'] = (string) get_parameter('unit'); } break; From 25354f6f3bed7f6e4c73e8c3429699874d72d7ab Mon Sep 17 00:00:00 2001 From: Daniel Maya <daniel.maya@artica.es> Date: Fri, 30 Aug 2019 08:47:49 +0200 Subject: [PATCH 16/79] delete session open by api calls --- pandora_console/include/load_session.php | 5 +++++ pandora_server/util/pandora_db.pl | 21 +++++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/pandora_console/include/load_session.php b/pandora_console/include/load_session.php index 80fb8643ef..39e0973287 100644 --- a/pandora_console/include/load_session.php +++ b/pandora_console/include/load_session.php @@ -91,6 +91,11 @@ function pandora_session_write($session_id, $data) { $session_id = addslashes($session_id); + // If it's an api call, the session must not be created. + if (get_parameter('op', false) && get_parameter('op2', false)) { + return true; + } + if (is_ajax()) { // Avoid session upadte while processing ajax responses - notifications. if (get_parameter('check_new_notifications', false)) { diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index d16a65bc91..0c717e9abb 100644 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -136,7 +136,7 @@ sub pandora_purgedb ($$) { pandora_delete_old_export_data ($dbh, $ulimit_timestamp); # Delete sessions data - pandora_delete_old_session_data ($dbh, $ulimit_timestamp); + pandora_delete_old_session_data (\%conf, $dbh, $ulimit_timestamp); # Delete old inventory data @@ -678,6 +678,7 @@ sub pandora_load_config_pdb ($) { $conf->{'_netflow_nfexpire'} = get_db_value ($dbh, "SELECT value FROM tconfig WHERE token = 'netflow_nfexpire'"); $conf->{'_netflow_path'} = get_db_value ($dbh, "SELECT value FROM tconfig WHERE token = 'netflow_path'"); $conf->{'_delete_notinit'} = get_db_value ($dbh, "SELECT value FROM tconfig WHERE token = 'delete_notinit'"); + $conf->{'_session_timeout'} = get_db_value ($dbh, "SELECT value FROM tconfig WHERE token = 'session_timeout'"); $conf->{'_big_operation_step_datos_purge'} = get_db_value ($dbh, "SELECT value FROM tconfig WHERE token = 'big_operation_step_datos_purge'"); $conf->{'_small_operation_step_datos_purge'} = get_db_value ($dbh, "SELECT value FROM tconfig WHERE token = 'small_operation_step_datos_purge'"); @@ -990,12 +991,28 @@ sub pandora_delete_old_export_data { # Delete old session data. ############################################################################## sub pandora_delete_old_session_data { - my ($dbh, $ulimit_timestamp) = @_; + my ($conf, $dbh, $ulimit_timestamp) = @_; + + my $session_timeout = $conf->{'_session_timeout'}; + + if ($session_timeout ne '') { + if ($session_timeout == -1) { + # The session expires in 10 years + $session_timeout = 315576000; + } else { + $session_timeout *= 60; + } + + $ulimit_timestamp = time() - $session_timeout; + } log_message ('PURGE', "Deleting old session data from tsessions_php\n"); while(db_delete_limit ($dbh, 'tsessions_php', 'last_active < ?', $SMALL_OPERATION_STEP, $ulimit_timestamp) ne '0E0') { usleep (10000); }; + + db_do ($dbh, "DELETE FROM tsessions_php WHERE + data IS NULL OR id_session REGEXP '^cron-'"); } ############################################################################### From de472757354f557a000f5fbaf5a78a796346c486 Mon Sep 17 00:00:00 2001 From: Daniel Maya <daniel.maya@artica.es> Date: Fri, 30 Aug 2019 10:34:52 +0200 Subject: [PATCH 17/79] Fixed mr --- pandora_console/extras/mr/31.sql | 4 ---- pandora_console/extras/mr/32.sql | 7 +++++++ 2 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 pandora_console/extras/mr/32.sql diff --git a/pandora_console/extras/mr/31.sql b/pandora_console/extras/mr/31.sql index 0d6e69bf2a..3e527bff53 100644 --- a/pandora_console/extras/mr/31.sql +++ b/pandora_console/extras/mr/31.sql @@ -9,8 +9,4 @@ DELETE FROM `tconfig` WHERE `token` LIKE 'integria_api_password'; DELETE FROM `tconfig` WHERE `token` LIKE 'integria_inventory'; DELETE FROM `tconfig` WHERE `token` LIKE 'integria_url'; -UPDATE `tlayout_data` SET `height` = 70 , `width` = 70 WHERE `height` = 0 && `width` = 0 && ((`type` IN (0,5)) || -(`type` = 10 && `image` IS NOT NULL && `image` != '' && `image` != 'none') || -(`type` = 11 && `image` IS NOT NULL && `image` != '' && `image` != 'none' && `show_statistics` = 0)); - COMMIT; \ No newline at end of file diff --git a/pandora_console/extras/mr/32.sql b/pandora_console/extras/mr/32.sql new file mode 100644 index 0000000000..3100d73092 --- /dev/null +++ b/pandora_console/extras/mr/32.sql @@ -0,0 +1,7 @@ +START TRANSACTION; + +UPDATE `tlayout_data` SET `height` = 70 , `width` = 70 WHERE `height` = 0 && `width` = 0 && image NOT LIKE '%dot%' && ((`type` IN (0,5)) || +(`type` = 10 && `image` IS NOT NULL && `image` != '' && `image` != 'none') || +(`type` = 11 && `image` IS NOT NULL && `image` != '' && `image` != 'none' && `show_statistics` = 0)); + +COMMIT; \ No newline at end of file From 5c535514e16b2cdcf12c1394d3f2a0d3fdfdfdbc Mon Sep 17 00:00:00 2001 From: fbsanchez <fborja.sanchez@artica.es> Date: Mon, 2 Sep 2019 15:44:48 +0200 Subject: [PATCH 18/79] Updated MR reference --- pandora_console/extras/mr/31.sql | 11 ----------- pandora_console/extras/mr/32.sql | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 11 deletions(-) create mode 100644 pandora_console/extras/mr/32.sql diff --git a/pandora_console/extras/mr/31.sql b/pandora_console/extras/mr/31.sql index 23076c9daa..3e527bff53 100644 --- a/pandora_console/extras/mr/31.sql +++ b/pandora_console/extras/mr/31.sql @@ -9,15 +9,4 @@ DELETE FROM `tconfig` WHERE `token` LIKE 'integria_api_password'; DELETE FROM `tconfig` WHERE `token` LIKE 'integria_inventory'; DELETE FROM `tconfig` WHERE `token` LIKE 'integria_url'; -ALTER TABLE `tdatabase` MODIFY `last_error` text; -ALTER TABLE `tdatabase` MODIFY `host` VARCHAR(255); -ALTER TABLE `tdatabase` ADD COLUMN `label` VARCHAR(255); -ALTER TABLE `tdatabase` MODIFY `os_user` VARCHAR(255); -ALTER TABLE `tdatabase` MODIFY `db_port` INT UNSIGNED NOT NULL; -ALTER TABLE `tdatabase` MODIFY `os_port` INT UNSIGNED NOT NULL; -ALTER TABLE `tdatabase` ADD COLUMN `ssh_key` TEXT; -ALTER TABLE `tdatabase` ADD COLUMN `ssh_pubkey` TEXT; - -UPDATE `tdatabase` set `label`=`host`; - COMMIT; \ No newline at end of file diff --git a/pandora_console/extras/mr/32.sql b/pandora_console/extras/mr/32.sql new file mode 100644 index 0000000000..dd99e7b9d9 --- /dev/null +++ b/pandora_console/extras/mr/32.sql @@ -0,0 +1,14 @@ +START TRANSACTION + +ALTER TABLE `tdatabase` MODIFY `last_error` text; +ALTER TABLE `tdatabase` MODIFY `host` VARCHAR(255); +ALTER TABLE `tdatabase` ADD COLUMN `label` VARCHAR(255); +ALTER TABLE `tdatabase` MODIFY `os_user` VARCHAR(255); +ALTER TABLE `tdatabase` MODIFY `db_port` INT UNSIGNED NOT NULL; +ALTER TABLE `tdatabase` MODIFY `os_port` INT UNSIGNED NOT NULL; +ALTER TABLE `tdatabase` ADD COLUMN `ssh_key` TEXT; +ALTER TABLE `tdatabase` ADD COLUMN `ssh_pubkey` TEXT; + +UPDATE `tdatabase` set `label`=`host`; + +COMMIT \ No newline at end of file From b60b41878cea35739a08203a06595ed33f9c669e Mon Sep 17 00:00:00 2001 From: Jose Gonzalez <jose.gonzalez@artica.es> Date: Tue, 3 Sep 2019 11:14:33 +0200 Subject: [PATCH 19/79] Changed name for alias when identify an agent in SNMP statistics --- pandora_console/operation/snmpconsole/snmp_statistics.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandora_console/operation/snmpconsole/snmp_statistics.php b/pandora_console/operation/snmpconsole/snmp_statistics.php index afe05be977..076ca806d7 100755 --- a/pandora_console/operation/snmpconsole/snmp_statistics.php +++ b/pandora_console/operation/snmpconsole/snmp_statistics.php @@ -155,7 +155,7 @@ foreach ($traps_generated_by_source as $trap) { $row['source'] = '<a href="index.php?sec=estado&sec2=godmode/agentes/configurar_agente&new_agent=1&direccion='.$trap['source'].'" title="'.__('Create agent').'">'.$trap['source'].'</a>'; } else { $agent_id = $agent['id_agente']; - $agent_name = ui_print_truncate_text($agent['nombre'], 'agent_medium', true, true, true, '[…]', ''); + $agent_name = ui_print_truncate_text($agent['alias'], 'agent_medium', true, true, true, '[…]', ''); $row['source'] = "<a href=\"index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente=$agent_id\" title=\"".__('View agent details').'">'; $row['source'] .= "<strong>$agent_name</strong></a>"; } From 291dece85453ef6ae633ae05244eb0249978d136 Mon Sep 17 00:00:00 2001 From: fbsanchez <fborja.sanchez@artica.es> Date: Tue, 3 Sep 2019 12:40:16 +0200 Subject: [PATCH 20/79] obhd encapsulated debug print --- pandora_console/include/functions_html.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/pandora_console/include/functions_html.php b/pandora_console/include/functions_html.php index b5955630b8..8e88f66c02 100644 --- a/pandora_console/include/functions_html.php +++ b/pandora_console/include/functions_html.php @@ -98,6 +98,23 @@ function hd($var, $file='', $oneline=false) } +/** + * Encapsulation (ob) for debug print function. + * + * @param mixed $var Variable to be dumped. + * @param string $file Target file path. + * @param boolean $oneline Show in oneline. + * + * @return string Dump string. + */ +function obhd($var, $file='', $oneline=false) +{ + ob_start(); + hd($var, $file, $oneline); + return ob_get_clean(); +} + + function debug() { $args_num = func_num_args(); From 914ac2815125e0647ade5a3db83ef868f95ebca8 Mon Sep 17 00:00:00 2001 From: Jose Gonzalez <jose.gonzalez@artica.es> Date: Tue, 3 Sep 2019 12:59:24 +0200 Subject: [PATCH 21/79] Changed checkboxes for combo multiselect in File repository manager --- .../extensions/files_repo/files_repo_form.php | 16 ++++------------ .../files_repo/functions_files_repo.php | 2 +- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/pandora_console/extensions/files_repo/files_repo_form.php b/pandora_console/extensions/files_repo/files_repo_form.php index 2035cfbd1a..b8e6a084b9 100644 --- a/pandora_console/extensions/files_repo/files_repo_form.php +++ b/pandora_console/extensions/files_repo/files_repo_form.php @@ -44,24 +44,16 @@ $groups = groups_get_all(); // Add the All group to the beginning to be always the first // Use this instead array_unshift to keep the array keys $groups = ([0 => __('All')] + $groups); -$html = ''; -$style = 'style="padding: 2px 10px; display: inline-block;"'; +$groups_selected = []; foreach ($groups as $id => $name) { - $checked = in_array($id, $file['groups']); - $all_checked = false; - if ($id === 0) { - $checkbox = html_print_checkbox_extended('groups[]', $id, $checked, false, '', 'class="chkb_all"', true); - $all_checked = $checked; - } else { - $checkbox = html_print_checkbox_extended('groups[]', $id, $checked, $all_checked, '', 'class="chkb_group"', true); + if (in_array($id, $file['groups'])) { + $groups_selected[] = $id; } - - $html .= "<div $style>$name $checkbox</div>"; } $row = []; $row[0] = __('Groups'); -$row[1] = $html; +$row[1] = html_print_select($groups, 'groups[]', $groups_selected, '', '', '', true, true, '', '', ''); $table->data[] = $row; $table->colspan[][1] = 3; diff --git a/pandora_console/extensions/files_repo/functions_files_repo.php b/pandora_console/extensions/files_repo/functions_files_repo.php index 3d9bdccd38..32ce4c216c 100644 --- a/pandora_console/extensions/files_repo/functions_files_repo.php +++ b/pandora_console/extensions/files_repo/functions_files_repo.php @@ -193,7 +193,7 @@ function files_repo_add_file($file_input_name='upfile', $description='', $groups global $config; $attachment_path = io_safe_output($config['attachment_store']); - $files_repo_path = $attachment_path.'/'.'files_repo'; + $files_repo_path = $attachment_path.'/files_repo'; $result = []; $result['status'] = false; From b18f72dcdd56f87a00e208e3ba0975c687c7a5bd Mon Sep 17 00:00:00 2001 From: "marcos.alconada" <marcos.alconada@artica.es> Date: Tue, 3 Sep 2019 13:04:12 +0200 Subject: [PATCH 22/79] Add new visual console Host Alive Keep Alive --- .../console/background/fondo-keep-alive.jpg | Bin 0 -> 234679 bytes .../images/console/icons/status.png | Bin 0 -> 12996 bytes .../images/console/icons/status_bad.png | Bin 0 -> 13530 bytes .../images/console/icons/status_ok.png | Bin 0 -> 17452 bytes .../images/console/icons/status_warning.png | Bin 0 -> 17254 bytes .../include/visual-console-client/vc.main.css | 47 +++++++++--------- pandora_console/pandoradb_data.sql | 22 ++++++-- 7 files changed, 42 insertions(+), 27 deletions(-) create mode 100644 pandora_console/images/console/background/fondo-keep-alive.jpg create mode 100644 pandora_console/images/console/icons/status.png create mode 100644 pandora_console/images/console/icons/status_bad.png create mode 100644 pandora_console/images/console/icons/status_ok.png create mode 100644 pandora_console/images/console/icons/status_warning.png diff --git a/pandora_console/images/console/background/fondo-keep-alive.jpg b/pandora_console/images/console/background/fondo-keep-alive.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fbb5b90a5c6a775c0ef452637e6ed10bad4c5e39 GIT binary patch literal 234679 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 literal 0 HcmV?d00001 diff --git a/pandora_console/images/console/icons/status.png b/pandora_console/images/console/icons/status.png new file mode 100644 index 0000000000000000000000000000000000000000..6fba320b6fdd32856803b4b682121999ba6a3cec GIT binary patch literal 12996 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 GLSTZDm4;^k literal 0 HcmV?d00001 diff --git a/pandora_console/images/console/icons/status_bad.png b/pandora_console/images/console/icons/status_bad.png new file mode 100644 index 0000000000000000000000000000000000000000..a6935a5a1975e8edac0bc8745d237137d8c39660 GIT binary patch literal 13530 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 UevYEJDF6Tf07*qoM6N<$g8dLmO#lD@ literal 0 HcmV?d00001 diff --git a/pandora_console/images/console/icons/status_ok.png b/pandora_console/images/console/icons/status_ok.png new file mode 100644 index 0000000000000000000000000000000000000000..a23d4dad2e19685cf6bde52355ceea398cc5b26f GIT binary patch literal 17452 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 literal 0 HcmV?d00001 diff --git a/pandora_console/images/console/icons/status_warning.png b/pandora_console/images/console/icons/status_warning.png new file mode 100644 index 0000000000000000000000000000000000000000..387de1c755222d00567f3035be3c89ddf57c7491 GIT binary patch literal 17254 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 FV1n)9Gd2JK literal 0 HcmV?d00001 diff --git a/pandora_console/include/visual-console-client/vc.main.css b/pandora_console/include/visual-console-client/vc.main.css index 16ecacd33c..22c3cce748 100644 --- a/pandora_console/include/visual-console-client/vc.main.css +++ b/pandora_console/include/visual-console-client/vc.main.css @@ -13,27 +13,27 @@ display: flex; -webkit-box-orient: initial; -webkit-box-direction: initial; - -ms-flex-direction: initial; - flex-direction: initial; + -ms-flex-direction: initial; + flex-direction: initial; justify-items: center; -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; + -ms-flex-align: center; + align-items: center; -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; } .visual-console-item.is-editing { border: 2px dashed #b2b2b2; -webkit-transform: translateX(-2px) translateY(-2px); - transform: translateX(-2px) translateY(-2px); + transform: translateX(-2px) translateY(-2px); cursor: move; -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } .visual-console-item.is-editing > .resize-draggable { @@ -60,17 +60,17 @@ display: flex; -webkit-box-orient: vertical; -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; + -ms-flex-pack: center; + justify-content: center; justify-items: center; -ms-flex-line-pack: center; - align-content: center; + align-content: center; -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; + -ms-flex-align: center; + align-items: center; } .visual-console-item .digital-clock > span { @@ -89,7 +89,7 @@ } .visual-console-item .digital-clock > span.timezone { - font-size: 25px; + font-size: 28px; } /* Analog clock */ @@ -100,18 +100,17 @@ .visual-console-item .analogic-clock .hour-hand { -webkit-animation: rotate-hour 43200s infinite linear; - animation: rotate-hour 43200s infinite linear; + animation: rotate-hour 43200s infinite linear; } .visual-console-item .analogic-clock .minute-hand { -webkit-animation: rotate-minute 3600s infinite linear; - animation: rotate-minute 3600s infinite linear; + animation: rotate-minute 3600s infinite linear; } .visual-console-item .analogic-clock .second-hand { -webkit-animation: rotate-second 60s infinite linear; - animation: rotate-second 60s infinite linear; + animation: rotate-second 60s infinite linear; } - -/*# sourceMappingURL=vc.main.css.map*/ \ No newline at end of file +/*# sourceMappingURL=vc.main.css.map*/ diff --git a/pandora_console/pandoradb_data.sql b/pandora_console/pandoradb_data.sql index a02f88fe5f..4939efb4df 100644 --- a/pandora_console/pandoradb_data.sql +++ b/pandora_console/pandoradb_data.sql @@ -1317,7 +1317,8 @@ UPDATE `tnotification_source` SET `enabled`=1 WHERE `description` = 'System  -- INSERT INTO `tlayout` VALUES - (1, 'Demo visual console', 0, 'fondo.jpg', 1080, 1920, 'white', 0); + (1, 'Demo visual console', 0, 'fondo.jpg', 1080, 1920, 'white', 0), + (16,'Demo visual console 2',0,'fondo-keep-alive.jpg',1080,1920,'#FFF',0); -- -- Dumping data for table `tlayout_data` @@ -1420,5 +1421,20 @@ VALUES (94,1,580,904,0,0,'<p style="text-align: center; overflow: hidden;"><span class="visual_font_size_28pt" style="color: #ffffff; font-family: opensans;"><strong><span class="visual_font_size_28pt" style="color: #ffffff; font-family: opensans;">Office 7 -&nbsp;</span></strong></span><span class="visual_font_size_28pt" style="color: #ffffff; font-family: opensans;">Rack 2</span></p>','white',4,3600,1,1,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,'0.000','0.000',0,0,'analogic_1','time','Europe/Madrid',0,0), (95,1,132,907,0,0,'<p style="text-align: center; overflow: hidden;"><span class="visual_font_size_28pt" style="color: #ffffff; font-family: opensans;"><strong><span class="visual_font_size_28pt" style="color: #ffffff; font-family: opensans;">Office 7 -&nbsp;</span></strong></span><span class="visual_font_size_28pt" style="color: #ffffff; font-family: opensans;">Rack 1</span></p>','white',4,3600,1,1,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,'0.000','0.000',0,0,'analogic_1','time','Europe/Madrid',0,0), (96,1,733,20,0,0,'<p style="overflow: hidden;"><span class="visual_font_size_48pt"><strong><span style="color: #ffffff; font-family: opensans;">OFFICE RACKS</span></strong></span></p>','white',4,3600,1,1,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,'0.000','0.000',0,0,'analogic_1','time','Europe/Madrid',0,0), - (97,1,1479,260,174,29,'','rack_server_rack',0,3600,1,1,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,'0.000','0.000',0,0,'analogic_1','time','Europe/Madrid',0,60) -; \ No newline at end of file + (97,1,1479,260,174,29,'','rack_server_rack',0,3600,1,1,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,'0.000','0.000',0,0,'analogic_1','time','Europe/Madrid',0,60), + (160,16,709,103,0,400,'','white',19,3600,0,0,0,0,1,0,0,0,0,'line','down','','#FFFFFF',0,0,'default',0,0.000,0.000,0,0,'digital_1','timedate','Europe/Madrid',0,0), + (161,16,178,481,111,111,'','status',0,3600,11556,430,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (162,16,542,481,111,111,'','status',0,3600,13,2,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (163,16,905,481,111,111,'','status',0,3600,114,11,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (164,16,1276,481,111,111,'','status',0,3600,7,1,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (165,16,1631,482,111,111,'','status',0,3600,11547,1,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (166,16,157,393,0,0,'<p style=\"line-height: 18px;\"><span class=\"visual_font_size_28pt\" style=\"line-height: 18px; color: #ffffff;\">Backups</span></p>\n<p style=\"line-height: 18px;\"> </p>','white', +4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (167,16,512,382,96,172,'<p style="overflow: hidden;"><span class="visual_font_size_28pt" style="font-family: opensans; color: #ffffff;">DB Status</span></p>
<p style="overflow: hidden;">&nbsp;</p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (168,16,886,382,0,0,'<p style=\"line-height: 18px; overflow: hidden;\"><span class=\"visual_font_size_28pt\" style=\"color: #ffffff; font-family: opensans;\">Disk slave</span></p>\n<p style=\"line-height: 18px; overflow: hidden;\"> </p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (169,16,1251,382,0,0,'<p style=\"line-height: 18px; overflow: hidden;\"><span class=\"visual_font_size_28pt\" style=\"color: #ffffff; font-family: opensans;\">Disk /var</span></p>\n<p style=\"line-height: 18px; overflow: hidden;\"> </p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (170,16,1547,382,0,0,'<p style="line-height: 18px; overflow: hidden;"><span class="visual_font_size_28pt" style="color: #ffffff; font-family: opensans;">Authentification</span></p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (171,16,126,820,0,0,'<p style="line-height: 18px; overflow: hidden;"><strong><span class="visual_font_size_36pt" style="font-family: opensans; color: #ffffff;">Processing</span></strong></p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (172,16,755,820,0,0,'<p style="line-height: 18px; overflow: hidden;"><strong><span class="visual_font_size_36pt" style="font-family: opensans; color: #ffffff;">Network</span></strong></p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (173,16,1281,820,0,0,'<p style="line-height: 18px; overflow: hidden;"><strong><span class="visual_font_size_36pt" style="color: #ffffff; font-family: opensans;">Storage</span></strong></p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0) +; From a468c79a670d3d347ccab16213e45a9d084ee855 Mon Sep 17 00:00:00 2001 From: Marcos Alconada <marcos.alconada@artica.es> Date: Wed, 4 Sep 2019 10:05:44 +0200 Subject: [PATCH 23/79] Changed visual console ID --- pandora_console/pandoradb_data.sql | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/pandora_console/pandoradb_data.sql b/pandora_console/pandoradb_data.sql index 4939efb4df..efdb48e01e 100644 --- a/pandora_console/pandoradb_data.sql +++ b/pandora_console/pandoradb_data.sql @@ -1318,7 +1318,7 @@ UPDATE `tnotification_source` SET `enabled`=1 WHERE `description` = 'System  INSERT INTO `tlayout` VALUES (1, 'Demo visual console', 0, 'fondo.jpg', 1080, 1920, 'white', 0), - (16,'Demo visual console 2',0,'fondo-keep-alive.jpg',1080,1920,'#FFF',0); + (2,'Demo visual console 2',0,'fondo-keep-alive.jpg',1080,1920,'#FFF',0); -- -- Dumping data for table `tlayout_data` @@ -1422,19 +1422,19 @@ VALUES (95,1,132,907,0,0,'<p style="text-align: center; overflow: hidden;"><span class="visual_font_size_28pt" style="color: #ffffff; font-family: opensans;"><strong><span class="visual_font_size_28pt" style="color: #ffffff; font-family: opensans;">Office 7 -&nbsp;</span></strong></span><span class="visual_font_size_28pt" style="color: #ffffff; font-family: opensans;">Rack 1</span></p>','white',4,3600,1,1,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,'0.000','0.000',0,0,'analogic_1','time','Europe/Madrid',0,0), (96,1,733,20,0,0,'<p style="overflow: hidden;"><span class="visual_font_size_48pt"><strong><span style="color: #ffffff; font-family: opensans;">OFFICE RACKS</span></strong></span></p>','white',4,3600,1,1,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,'0.000','0.000',0,0,'analogic_1','time','Europe/Madrid',0,0), (97,1,1479,260,174,29,'','rack_server_rack',0,3600,1,1,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,'0.000','0.000',0,0,'analogic_1','time','Europe/Madrid',0,60), - (160,16,709,103,0,400,'','white',19,3600,0,0,0,0,1,0,0,0,0,'line','down','','#FFFFFF',0,0,'default',0,0.000,0.000,0,0,'digital_1','timedate','Europe/Madrid',0,0), - (161,16,178,481,111,111,'','status',0,3600,11556,430,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (162,16,542,481,111,111,'','status',0,3600,13,2,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (163,16,905,481,111,111,'','status',0,3600,114,11,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (164,16,1276,481,111,111,'','status',0,3600,7,1,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (165,16,1631,482,111,111,'','status',0,3600,11547,1,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (166,16,157,393,0,0,'<p style=\"line-height: 18px;\"><span class=\"visual_font_size_28pt\" style=\"line-height: 18px; color: #ffffff;\">Backups</span></p>\n<p style=\"line-height: 18px;\"> </p>','white', + (160,2,709,103,0,400,'','white',19,3600,0,0,0,0,1,0,0,0,0,'line','down','','#FFFFFF',0,0,'default',0,0.000,0.000,0,0,'digital_1','timedate','Europe/Madrid',0,0), + (161,2,178,481,111,111,'','status',0,3600,11556,430,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (162,2,542,481,111,111,'','status',0,3600,13,2,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (163,2,905,481,111,111,'','status',0,3600,114,11,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (164,2,1276,481,111,111,'','status',0,3600,7,1,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (165,2,1631,482,111,111,'','status',0,3600,11547,1,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (166,2,157,393,0,0,'<p style=\"line-height: 18px;\"><span class=\"visual_font_size_28pt\" style=\"line-height: 18px; color: #ffffff;\">Backups</span></p>\n<p style=\"line-height: 18px;\"> </p>','white', 4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (167,16,512,382,96,172,'<p style="overflow: hidden;"><span class="visual_font_size_28pt" style="font-family: opensans; color: #ffffff;">DB Status</span></p>
<p style="overflow: hidden;">&nbsp;</p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (168,16,886,382,0,0,'<p style=\"line-height: 18px; overflow: hidden;\"><span class=\"visual_font_size_28pt\" style=\"color: #ffffff; font-family: opensans;\">Disk slave</span></p>\n<p style=\"line-height: 18px; overflow: hidden;\"> </p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (169,16,1251,382,0,0,'<p style=\"line-height: 18px; overflow: hidden;\"><span class=\"visual_font_size_28pt\" style=\"color: #ffffff; font-family: opensans;\">Disk /var</span></p>\n<p style=\"line-height: 18px; overflow: hidden;\"> </p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (170,16,1547,382,0,0,'<p style="line-height: 18px; overflow: hidden;"><span class="visual_font_size_28pt" style="color: #ffffff; font-family: opensans;">Authentification</span></p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (171,16,126,820,0,0,'<p style="line-height: 18px; overflow: hidden;"><strong><span class="visual_font_size_36pt" style="font-family: opensans; color: #ffffff;">Processing</span></strong></p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (172,16,755,820,0,0,'<p style="line-height: 18px; overflow: hidden;"><strong><span class="visual_font_size_36pt" style="font-family: opensans; color: #ffffff;">Network</span></strong></p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (173,16,1281,820,0,0,'<p style="line-height: 18px; overflow: hidden;"><strong><span class="visual_font_size_36pt" style="color: #ffffff; font-family: opensans;">Storage</span></strong></p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0) + (167,2,512,382,96,172,'<p style="overflow: hidden;"><span class="visual_font_size_28pt" style="font-family: opensans; color: #ffffff;">DB Status</span></p>
<p style="overflow: hidden;">&nbsp;</p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (168,2,886,382,0,0,'<p style=\"line-height: 18px; overflow: hidden;\"><span class=\"visual_font_size_28pt\" style=\"color: #ffffff; font-family: opensans;\">Disk slave</span></p>\n<p style=\"line-height: 18px; overflow: hidden;\"> </p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (169,2,1251,382,0,0,'<p style=\"line-height: 18px; overflow: hidden;\"><span class=\"visual_font_size_28pt\" style=\"color: #ffffff; font-family: opensans;\">Disk /var</span></p>\n<p style=\"line-height: 18px; overflow: hidden;\"> </p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (170,2,1547,382,0,0,'<p style="line-height: 18px; overflow: hidden;"><span class="visual_font_size_28pt" style="color: #ffffff; font-family: opensans;">Authentification</span></p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (171,2,126,820,0,0,'<p style="line-height: 18px; overflow: hidden;"><strong><span class="visual_font_size_36pt" style="font-family: opensans; color: #ffffff;">Processing</span></strong></p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (172,2,755,820,0,0,'<p style="line-height: 18px; overflow: hidden;"><strong><span class="visual_font_size_36pt" style="font-family: opensans; color: #ffffff;">Network</span></strong></p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (173,2,1281,820,0,0,'<p style="line-height: 18px; overflow: hidden;"><strong><span class="visual_font_size_36pt" style="color: #ffffff; font-family: opensans;">Storage</span></strong></p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0) ; From e472e5dd9f9a013f14c882d950e5684eccd42774 Mon Sep 17 00:00:00 2001 From: Kike <enrique.martin@artica.es> Date: Wed, 4 Sep 2019 12:43:30 +0200 Subject: [PATCH 24/79] Added pandora_agente_daemon service to systemd --- pandora_agents/unix/pandora_agent_installer | 26 ++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index 018e589961..7378d21edd 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -162,7 +162,15 @@ uninstall () { rm -Rf $PANDORA_BASE$PANDORA_EXEC_BIN 2> /dev/null rm -Rf $PANDORA_BASE$PANDORA_REVENT_BIN 2> /dev/null rm -f $DESTDIR/etc/logrotate.d/pandora_agent - + + # Remove systemd service if exists + if [ $(systemctl --v | grep systemd | wc -l) != 0 ] + then + PANDORA_AGENT_SERVICE="/etc/systemd/system/pandora_agent_daemon.service" + rm -f $PANDORA_AGENT_SERVICE + systemctl reset-failed + fi + #Test if exist Pandora Server in this machine if [ -d $PANDORA_BASE$PANDORA_TEMP/data_in ] then @@ -465,6 +473,22 @@ install () { else RCDIRS="/etc/rc2.d /etc/rc3.d" fi + + # Create systemd service + if [ $(systemctl --v | grep systemd | wc -l) != 0 ] + then + echo "Creating systemd service for pandora_agent_daemon" + + PANDORA_AGENT_SERVICE="/etc/systemd/system/pandora_agent_daemon.service" + EXEC_START='ExecStart='$PANDORA_BASE$PANDORA_BIN' '$PANDORA_BASE$PANDORA_CFG + + rm -f $PANDORA_AGENT_SERVICE + cp pandora_agent_daemon.service $PANDORA_AGENT_SERVICE + + sed -i "s|^ExecStart=.*$|$EXEC_START|g" $PANDORA_AGENT_SERVICE + + systemctl daemon-reload + fi fi [ "$RCDIRS" ] && for RCDIR in $RCDIRS do From bb256793440fabef47fbd520c9ca24d595d9a113 Mon Sep 17 00:00:00 2001 From: Jose Gonzalez <jose.gonzalez@artica.es> Date: Wed, 4 Sep 2019 14:12:38 +0200 Subject: [PATCH 25/79] Added ui_get_full_url in all links --- .../include/class/ConsoleSupervisor.php | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/pandora_console/include/class/ConsoleSupervisor.php b/pandora_console/include/class/ConsoleSupervisor.php index 07cd4f492e..87a6f2dca0 100644 --- a/pandora_console/include/class/ConsoleSupervisor.php +++ b/pandora_console/include/class/ConsoleSupervisor.php @@ -727,7 +727,7 @@ class ConsoleSupervisor 'type' => 'NOTIF.LICENSE.LIMITED', 'title' => __('Limited mode.'), 'message' => io_safe_output($config['limited_mode']), - 'url' => 'index.php?sec=gsetup&sec2=godmode/setup/license', + 'url' => ui_get_full_url('index.php?sec=gsetup&sec2=godmode/setup/license'), ] ); } else { @@ -745,7 +745,7 @@ class ConsoleSupervisor 'Your license will expire in %d days. Please, contact our sales department.', $days_to_expiry ), - 'url' => 'index.php?sec=gsetup&sec2=godmode/setup/license', + 'url' => ui_get_full_url('index.php?sec=gsetup&sec2=godmode/setup/license'), ] ); } else if ($days_to_expiry < 0) { @@ -755,7 +755,7 @@ class ConsoleSupervisor 'type' => 'NOTIF.LICENSE.EXPIRATION', 'title' => __('Expired license'), 'message' => __('Your license has expired. Please, contact our sales department.'), - 'url' => 'index.php?sec=gsetup&sec2=godmode/setup/license', + 'url' => ui_get_full_url('index.php?sec=gsetup&sec2=godmode/setup/license'), ] ); return false; @@ -832,7 +832,7 @@ class ConsoleSupervisor 'Directory %s is not writable. Please, configure corresponding permissions.', $config['attachment_store'] ), - 'url' => 'index.php?sec=general&sec2=godmode/setup/setup§ion=general', + 'url' => ui_get_full_url('index.php?sec=general&sec2=godmode/setup/setup§ion=general'), ] ); return; @@ -854,7 +854,7 @@ class ConsoleSupervisor 'There are more than %d files in attachment, consider cleaning up attachment directory manually.', $config['num_files_attachment'] ), - 'url' => 'index.php?sec=general&sec2=godmode/setup/setup§ion=perf', + 'url' => ui_get_full_url('index.php?sec=general&sec2=godmode/setup/setup§ion=perf'), ] ); } else { @@ -886,7 +886,7 @@ class ConsoleSupervisor 'Remote configuration directory %s is not readable. Please, adjust configuration.', $config['remote_config'] ), - 'url' => 'index.php?sec=general&sec2=godmode/setup/setup§ion=general', + 'url' => ui_get_full_url('index.php?sec=general&sec2=godmode/setup/setup§ion=general'), ] ); return; @@ -905,7 +905,7 @@ class ConsoleSupervisor 'Remote configuration directory %s is not writable. Please, adjust configuration.', $config['remote_config'].'/conf' ), - 'url' => 'index.php?sec=general&sec2=godmode/setup/setup§ion=general', + 'url' => ui_get_full_url('index.php?sec=general&sec2=godmode/setup/setup§ion=general'), ] ); } else { @@ -923,7 +923,7 @@ class ConsoleSupervisor 'Collections directory %s is not writable. Please, adjust configuration.', $config['remote_config'].'/collections' ), - 'url' => 'index.php?sec=general&sec2=godmode/setup/setup§ion=general', + 'url' => ui_get_full_url('index.php?sec=general&sec2=godmode/setup/setup§ion=general'), ] ); } else { @@ -941,7 +941,7 @@ class ConsoleSupervisor 'MD5 directory %s is not writable. Please, adjust configuration.', $config['remote_config'].'/md5' ), - 'url' => 'index.php?sec=general&sec2=godmode/setup/setup§ion=general', + 'url' => ui_get_full_url('index.php?sec=general&sec2=godmode/setup/setup§ion=general'), ] ); } else { @@ -972,7 +972,7 @@ class ConsoleSupervisor $MAX_FILES_DATA_IN, $config['remote_config'] ), - 'url' => 'index.php?sec=general&sec2=godmode/setup/setup§ion=perf', + 'url' => ui_get_full_url('index.php?sec=general&sec2=godmode/setup/setup§ion=perf'), ] ); } else { @@ -995,7 +995,7 @@ class ConsoleSupervisor $MAX_BADXML_FILES_DATA_IN, $config['remote_config'] ), - 'url' => 'index.php?sec=general&sec2=godmode/setup/setup§ion=perf', + 'url' => ui_get_full_url('index.php?sec=general&sec2=godmode/setup/setup§ion=perf'), ] ); } else { @@ -1081,7 +1081,7 @@ class ConsoleSupervisor $modules_queued, $queue['queued_modules'] ), - 'url' => 'index.php?sec=gservers&sec2=godmode/servers/modificar_server&refr=60', + 'url' => ui_get_full_url('index.php?sec=gservers&sec2=godmode/servers/modificar_server&refr=60'), ] ); } else { @@ -1191,7 +1191,7 @@ class ConsoleSupervisor 'type' => 'NOTIF.SERVER.STATUS.'.$server['id_server'], 'title' => $msg, 'message' => $description, - 'url' => 'index.php?sec=gservers&sec2=godmode/servers/modificar_server&refr=60', + 'url' => ui_get_full_url('index.php?sec=gservers&sec2=godmode/servers/modificar_server&refr=60'), ] ); } @@ -1499,7 +1499,7 @@ class ConsoleSupervisor 'type' => 'NOTIF.HISTORYDB', 'title' => __('Historical database not available'), 'message' => __('Historical database is enabled, though not accessible with the current configuration.'), - 'url' => 'index.php?sec=general&sec2=godmode/setup/setup§ion=hist_db', + 'url' => ui_get_full_url('index.php?sec=general&sec2=godmode/setup/setup§ion=hist_db'), ] ); } else { @@ -1546,7 +1546,7 @@ class ConsoleSupervisor 'Your database hasn\'t been through maintenance for 48hrs. Please, check documentation on how to perform this maintenance process on %s and enable it as soon as possible.', io_safe_output(get_product_name()) ), - 'url' => 'index.php?sec=general&sec2=godmode/setup/setup§ion=perf', + 'url' => ui_get_full_url('index.php?sec=general&sec2=godmode/setup/setup§ion=perf'), ] ); } else { @@ -1606,7 +1606,7 @@ class ConsoleSupervisor 'Historical database maintenance problem.' ), 'message' => __('Your historical database hasn\'t been through maintenance for 48hrs. Please, check documentation on how to perform this maintenance process on %s and enable it as soon as possible.', get_product_name()), - 'url' => 'index.php?sec=general&sec2=godmode/setup/setup§ion=perf', + 'url' => ui_get_full_url('index.php?sec=general&sec2=godmode/setup/setup§ion=perf'), ] ); } else { @@ -1645,7 +1645,7 @@ class ConsoleSupervisor 'type' => 'NOTIF.HISTORYDB.MR', 'title' => __('Historical database MR mismatch'), 'message' => __('Your historical database is not using the same schema as the main DB. This could produce anomalies while storing historical data.'), - 'url' => 'index.php?sec=general&sec2=godmode/setup/setup§ion=hist_db', + 'url' => ui_get_full_url('index.php?sec=general&sec2=godmode/setup/setup§ion=hist_db'), ] ); } else { @@ -1687,7 +1687,7 @@ class ConsoleSupervisor 'type' => 'NOTIF.EXT.ELASTICSEARCH', 'title' => __('Log collector cannot connect to ElasticSearch'), 'message' => __('ElasticSearch is not available using current configuration.'), - 'url' => 'index.php?sec=general&sec2=godmode/setup/setup§ion=log', + 'url' => ui_get_full_url('index.php?sec=general&sec2=godmode/setup/setup§ion=log'), ] ); } else { @@ -1757,7 +1757,7 @@ class ConsoleSupervisor 'type' => 'NOTIF.METACONSOLE.DB_CONNECTION', 'title' => __('Metaconsole DB is not available.'), 'message' => __('Cannot connect with Metaconsole DB using current configuration.'), - 'url' => 'index.php?sec=general&sec2=godmode/setup/setup§ion=enterprise', + 'url' => ui_get_full_url('index.php?sec=general&sec2=godmode/setup/setup§ion=enterprise'), ] ); } @@ -1786,7 +1786,7 @@ class ConsoleSupervisor 'type' => 'NOTIF.DOWNTIME', 'title' => __('Scheduled downtime running.'), 'message' => __('A scheduled downtime is running. Some monitoring data won\'t be available while downtime is taking place.'), - 'url' => 'index.php?sec=gagente&sec2=godmode/agentes/planned_downtime.list', + 'url' => ui_get_full_url('index.php?sec=gagente&sec2=godmode/agentes/planned_downtime.list'), ] ); return; @@ -1947,7 +1947,7 @@ class ConsoleSupervisor date('M j, G:i:s ', $next_downtime_begin), date('M j, G:i:s ', $next_downtime_end) ), - 'url' => 'index.php?sec=gagente&sec2=godmode/agentes/planned_downtime.list', + 'url' => ui_get_full_url('index.php?sec=gagente&sec2=godmode/agentes/planned_downtime.list'), ] ); return; @@ -2043,7 +2043,7 @@ class ConsoleSupervisor 'type' => 'NOTIF.SECURITY.DEFAULT_PASSWORD', 'title' => __('Default password for "Admin" user has not been changed'), 'message' => __('Please, change the default password since it is a commonly reported vulnerability.'), - 'url' => 'index.php?sec=gusuarios&sec2=godmode/users/user_list', + 'url' => ui_get_full_url('index.php?sec=gusuarios&sec2=godmode/users/user_list'), ] ); } else { @@ -2069,7 +2069,7 @@ class ConsoleSupervisor 'type' => 'NOTIF.MISC.FONTPATH', 'title' => __('Default font doesn\'t exist'), 'message' => __('Your defined font doesn\'t exist or is not defined. Please, check font parameters in your config'), - 'url' => 'index.php?sec=gsetup&sec2=godmode/setup/setup§ion=vis', + 'url' => ui_get_full_url('index.php?sec=gsetup&sec2=godmode/setup/setup§ion=vis'), ] ); } else { @@ -2096,7 +2096,7 @@ class ConsoleSupervisor 'Your %s has the "develop_bypass" mode enabled. This is a developer mode and should be disabled in a production environment. This value is located in the main index.php file', get_product_name() ), - 'url' => 'index.php', + 'url' => ui_get_full_url('index.php'), ] ); } else { @@ -2119,7 +2119,7 @@ class ConsoleSupervisor 'type' => 'NOTIF.MISC.EVENTSTORMPROTECTION', 'title' => __('Event storm protection is enabled.'), 'message' => __('Some events may get lost while this mode is enabled. The server must be restarted after altering this setting.'), - 'url' => 'index.php?sec=gsetup&sec2=godmode/setup/setup§ion=general', + 'url' => ui_get_full_url('index.php?sec=gsetup&sec2=godmode/setup/setup§ion=general'), ] ); } else { @@ -2146,7 +2146,7 @@ class ConsoleSupervisor 'type' => 'NOTIF.UPDATEMANAGER.OPENSETUP', 'title' => __('Failed to retrieve updates, please configure utility'), 'message' => $message, - 'url' => 'index.php?sec=gsetup&sec2=godmode/setup/setup§ion=general', + 'url' => ui_get_full_url('index.php?sec=gsetup&sec2=godmode/setup/setup§ion=general'), ] ); } @@ -2165,8 +2165,8 @@ class ConsoleSupervisor 'New %s Console update', get_product_name() ), - 'message' => __('There is a new update available. Please<a style="font-weight:bold;" href="index.php?sec=gsetup&sec2=godmode/update_manager/update_manager&tab=online"> go to Administration:Setup:Update Manager</a> for more details.'), - 'url' => 'index.php?sec=gsetup&sec2=godmode/update_manager/update_manager&tab=online', + 'message' => __('There is a new update available. Please<a style="font-weight:bold;" href="'.ui_get_full_url('index.php?sec=gsetup&sec2=godmode/update_manager/update_manager&tab=online').'"> go to Administration:Setup:Update Manager</a> for more details.'), + 'url' => ui_get_full_url('index.php?sec=gsetup&sec2=godmode/update_manager/update_manager&tab=online'), ] ); } else { @@ -2204,7 +2204,7 @@ class ConsoleSupervisor 'There is one or more minor releases available. <a style="font-size:8pt;font-style:italic;" target="blank" href="%s">.About minor release update</a>.', $url ), - 'url' => 'index.php?sec=messages&sec2=godmode/update_manager/update_manager&tab=online', + 'url' => ui_get_full_url('index.php?sec=messages&sec2=godmode/update_manager/update_manager&tab=online'), ] ); } else { @@ -2253,7 +2253,7 @@ class ConsoleSupervisor 'type' => 'NOTIF.CRON.CONFIGURED', 'title' => __('DiscoveryConsoleTasks is not configured.'), 'message' => __($message_conf_cron), - 'url' => 'index.php?sec=gservers&sec2=godmode/servers/discovery&wiz=tasklist', + 'url' => ui_get_full_url('index.php?sec=gservers&sec2=godmode/servers/discovery&wiz=tasklist'), ] ); } else { From 148cd5cce6f42fba05c3013ebe5add028bc9fcac Mon Sep 17 00:00:00 2001 From: fbsanchez <fborja.sanchez@artica.es> Date: Thu, 5 Sep 2019 10:45:17 +0200 Subject: [PATCH 26/79] db updates pandora_db --- pandora_console/extras/mr/32.sql | 10 +++++----- .../extras/pandoradb_migrate_6.0_to_7.0.mysql.sql | 4 ++-- pandora_console/pandoradb.sql | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pandora_console/extras/mr/32.sql b/pandora_console/extras/mr/32.sql index dd99e7b9d9..eea330c8aa 100644 --- a/pandora_console/extras/mr/32.sql +++ b/pandora_console/extras/mr/32.sql @@ -1,11 +1,11 @@ START TRANSACTION ALTER TABLE `tdatabase` MODIFY `last_error` text; -ALTER TABLE `tdatabase` MODIFY `host` VARCHAR(255); -ALTER TABLE `tdatabase` ADD COLUMN `label` VARCHAR(255); -ALTER TABLE `tdatabase` MODIFY `os_user` VARCHAR(255); -ALTER TABLE `tdatabase` MODIFY `db_port` INT UNSIGNED NOT NULL; -ALTER TABLE `tdatabase` MODIFY `os_port` INT UNSIGNED NOT NULL; +ALTER TABLE `tdatabase` MODIFY `host` VARCHAR(255) DEFAULT ''; +ALTER TABLE `tdatabase` ADD COLUMN `label` VARCHAR(255) DEFAULT ''; +ALTER TABLE `tdatabase` MODIFY `os_user` VARCHAR(255) DEFAULT ''; +ALTER TABLE `tdatabase` MODIFY `db_port` INT UNSIGNED NOT NULL DEFAULT 3306; +ALTER TABLE `tdatabase` MODIFY `os_port` INT UNSIGNED NOT NULL DEFAULT 22; ALTER TABLE `tdatabase` ADD COLUMN `ssh_key` TEXT; ALTER TABLE `tdatabase` ADD COLUMN `ssh_pubkey` TEXT; diff --git a/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql b/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql index b54e0522a3..6ed7588202 100644 --- a/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql +++ b/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql @@ -222,9 +222,9 @@ CREATE TABLE IF NOT EXISTS `tdatabase` ( `id` INT(10) unsigned NOT NULL auto_increment, `host` VARCHAR(255) default '', `label` VARCHAR(255) default '', - `os_port` int unsigned default 22, + `os_port` INT UNSIGNED NOT NULL DEFAULT 22, `os_user` VARCHAR(255) default '', - `db_port` int unsigned default 3306, + `db_port` INT UNSIGNED NOT NULL DEFAULT 3306, `status` tinyint(1) unsigned default '0', `action` tinyint(1) unsigned default '0', `ssh_key` TEXT, diff --git a/pandora_console/pandoradb.sql b/pandora_console/pandoradb.sql index 8436624366..33a69dcfc4 100644 --- a/pandora_console/pandoradb.sql +++ b/pandora_console/pandoradb.sql @@ -2441,9 +2441,9 @@ CREATE TABLE IF NOT EXISTS `tdatabase` ( `id` INT(10) unsigned NOT NULL auto_increment, `host` VARCHAR(255) default '', `label` VARCHAR(255) default '', - `os_port` int unsigned default 22, + `os_port` INT UNSIGNED NOT NULL DEFAULT 22, `os_user` VARCHAR(255) default '', - `db_port` int unsigned default 3306, + `db_port` INT UNSIGNED NOT NULL DEFAULT 3306, `status` tinyint(1) unsigned default '0', `action` tinyint(1) unsigned default '0', `ssh_key` TEXT, From 315d9728ec4f519457271144bff4c5e17c57e5de Mon Sep 17 00:00:00 2001 From: fbsanchez <fborja.sanchez@artica.es> Date: Thu, 5 Sep 2019 10:54:14 +0200 Subject: [PATCH 27/79] quick fix short news titles --- pandora_console/include/styles/pandora.css | 1 + 1 file changed, 1 insertion(+) diff --git a/pandora_console/include/styles/pandora.css b/pandora_console/include/styles/pandora.css index 5aacc90075..27b3094027 100644 --- a/pandora_console/include/styles/pandora.css +++ b/pandora_console/include/styles/pandora.css @@ -3185,6 +3185,7 @@ table#policy_modules td * { #news_board { min-width: 530px; + width: 100%; } #right_column_logon_ok { From ae474a27317ad259d7bf37c304540c751d5e5268 Mon Sep 17 00:00:00 2001 From: artica <artica.devel@gmail.com> Date: Fri, 6 Sep 2019 00:01:10 +0200 Subject: [PATCH 28/79] Auto-updated build strings. --- pandora_agents/unix/DEBIAN/control | 2 +- pandora_agents/unix/DEBIAN/make_deb_package.sh | 2 +- pandora_agents/unix/pandora_agent | 2 +- pandora_agents/unix/pandora_agent.redhat.spec | 2 +- pandora_agents/unix/pandora_agent.spec | 2 +- pandora_agents/unix/pandora_agent_installer | 2 +- pandora_agents/win32/installer/pandora.mpi | 2 +- pandora_agents/win32/pandora.cc | 2 +- pandora_agents/win32/versioninfo.rc | 2 +- pandora_console/DEBIAN/control | 2 +- pandora_console/DEBIAN/make_deb_package.sh | 2 +- pandora_console/include/config_process.php | 2 +- pandora_console/install.php | 2 +- pandora_console/pandora_console.redhat.spec | 2 +- pandora_console/pandora_console.rhel7.spec | 2 +- pandora_console/pandora_console.spec | 2 +- pandora_server/DEBIAN/control | 2 +- pandora_server/DEBIAN/make_deb_package.sh | 2 +- pandora_server/lib/PandoraFMS/Config.pm | 2 +- pandora_server/lib/PandoraFMS/PluginTools.pm | 2 +- pandora_server/pandora_server.redhat.spec | 2 +- pandora_server/pandora_server.spec | 2 +- pandora_server/pandora_server_installer | 2 +- pandora_server/util/pandora_db.pl | 2 +- pandora_server/util/pandora_manage.pl | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 60178d6c50..79ec8e1e38 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.738-190905 +Version: 7.0NG.738-190906 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index e02ac99a67..a1152c73bb 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190905" +pandora_version="7.0NG.738-190906" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index 9b5a24d515..80a2c23b12 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -42,7 +42,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.738'; -use constant AGENT_BUILD => '190905'; +use constant AGENT_BUILD => '190906'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index a22caf27cc..13cc96d73e 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190905 +%define release 190906 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index ee53894623..8b77150184 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190905 +%define release 190906 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index b8234a70cd..54858a1d3e 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190905" +PI_BUILD="190906" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index ebac265083..daa57b099d 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{190905} +{190906} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 5b5fb5fc5e..9ef2d6ec82 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.738(Build 190905)") +#define PANDORA_VERSION ("7.0NG.738(Build 190906)") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index 2d39c90e46..60ee89d3f1 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.738(Build 190905))" + VALUE "ProductVersion", "(7.0NG.738(Build 190906))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index d406b35c6e..305bc5d62d 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.738-190905 +Version: 7.0NG.738-190906 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index 7097063187..b0d6e3e085 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190905" +pandora_version="7.0NG.738-190906" package_pear=0 package_pandora=1 diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index fb51f94fe4..9deb7fa7b7 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC190905'; +$build_version = 'PC190906'; $pandora_version = 'v7.0NG.738'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/install.php b/pandora_console/install.php index 99fc5e653e..c04064aaa2 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@ <div style='height: 10px'> <?php $version = '7.0NG.738'; - $build = '190905'; + $build = '190906'; $banner = "v$version Build $build"; error_reporting(0); diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec index 7a54e6069d..3d42434718 100644 --- a/pandora_console/pandora_console.redhat.spec +++ b/pandora_console/pandora_console.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190905 +%define release 190906 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec index 08a7875cf1..ad7d448cbf 100644 --- a/pandora_console/pandora_console.rhel7.spec +++ b/pandora_console/pandora_console.rhel7.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190905 +%define release 190906 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec index 96873768d8..1865074deb 100644 --- a/pandora_console/pandora_console.spec +++ b/pandora_console/pandora_console.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190905 +%define release 190906 %define httpd_name httpd # User and Group under which Apache is running %define httpd_name apache2 diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control index 17aa3441d9..8cafd9c319 100644 --- a/pandora_server/DEBIAN/control +++ b/pandora_server/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-server -Version: 7.0NG.738-190905 +Version: 7.0NG.738-190906 Architecture: all Priority: optional Section: admin diff --git a/pandora_server/DEBIAN/make_deb_package.sh b/pandora_server/DEBIAN/make_deb_package.sh index fe232eda41..37caeae281 100644 --- a/pandora_server/DEBIAN/make_deb_package.sh +++ b/pandora_server/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190905" +pandora_version="7.0NG.738-190906" package_cpan=0 package_pandora=1 diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 9639dc4770..0bd92497dc 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -45,7 +45,7 @@ our @EXPORT = qw( # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190905"; +my $pandora_build = "190906"; our $VERSION = $pandora_version." ".$pandora_build; # Setup hash diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index c4bb24d4b1..cdb7da8680 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -32,7 +32,7 @@ our @ISA = qw(Exporter); # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190905"; +my $pandora_build = "190906"; our $VERSION = $pandora_version." ".$pandora_build; our %EXPORT_TAGS = ( 'all' => [ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index ab274c7d02..c8d7c85652 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190905 +%define release 190906 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index 49bd12b3b8..f368d394bf 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190905 +%define release 190906 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index ccecb6e6ed..ab51df1d95 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190905" +PI_BUILD="190906" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index 9f9b0bd653..daa4f0d901 100644 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -34,7 +34,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.738 PS190905"; +my $version = "7.0NG.738 PS190906"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index ab01849bc5..0536aa058b 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.738 PS190905"; +my $version = "7.0NG.738 PS190906"; # save program name for logging my $progname = basename($0); From 3680555bae64ceb0c3db4bf5cfecfb86c33f5f5c Mon Sep 17 00:00:00 2001 From: artica <artica.devel@gmail.com> Date: Sat, 7 Sep 2019 00:01:10 +0200 Subject: [PATCH 29/79] Auto-updated build strings. --- pandora_agents/unix/DEBIAN/control | 2 +- pandora_agents/unix/DEBIAN/make_deb_package.sh | 2 +- pandora_agents/unix/pandora_agent | 2 +- pandora_agents/unix/pandora_agent.redhat.spec | 2 +- pandora_agents/unix/pandora_agent.spec | 2 +- pandora_agents/unix/pandora_agent_installer | 2 +- pandora_agents/win32/installer/pandora.mpi | 2 +- pandora_agents/win32/pandora.cc | 2 +- pandora_agents/win32/versioninfo.rc | 2 +- pandora_console/DEBIAN/control | 2 +- pandora_console/DEBIAN/make_deb_package.sh | 2 +- pandora_console/include/config_process.php | 2 +- pandora_console/install.php | 2 +- pandora_console/pandora_console.redhat.spec | 2 +- pandora_console/pandora_console.rhel7.spec | 2 +- pandora_console/pandora_console.spec | 2 +- pandora_server/DEBIAN/control | 2 +- pandora_server/DEBIAN/make_deb_package.sh | 2 +- pandora_server/lib/PandoraFMS/Config.pm | 2 +- pandora_server/lib/PandoraFMS/PluginTools.pm | 2 +- pandora_server/pandora_server.redhat.spec | 2 +- pandora_server/pandora_server.spec | 2 +- pandora_server/pandora_server_installer | 2 +- pandora_server/util/pandora_db.pl | 2 +- pandora_server/util/pandora_manage.pl | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 79ec8e1e38..5c8864cc71 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.738-190906 +Version: 7.0NG.738-190907 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index a1152c73bb..3707fb91c4 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190906" +pandora_version="7.0NG.738-190907" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index 80a2c23b12..c187c4e856 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -42,7 +42,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.738'; -use constant AGENT_BUILD => '190906'; +use constant AGENT_BUILD => '190907'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index 13cc96d73e..818b0f78cb 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190906 +%define release 190907 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index 8b77150184..dd59df95fe 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190906 +%define release 190907 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index 54858a1d3e..5bb08bced2 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190906" +PI_BUILD="190907" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index daa57b099d..218916199f 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{190906} +{190907} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 9ef2d6ec82..4884afb225 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.738(Build 190906)") +#define PANDORA_VERSION ("7.0NG.738(Build 190907)") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index 60ee89d3f1..2d2c67c296 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.738(Build 190906))" + VALUE "ProductVersion", "(7.0NG.738(Build 190907))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index 305bc5d62d..44b13c8cac 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.738-190906 +Version: 7.0NG.738-190907 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index b0d6e3e085..4bcf839517 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190906" +pandora_version="7.0NG.738-190907" package_pear=0 package_pandora=1 diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index 9deb7fa7b7..274d663c44 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC190906'; +$build_version = 'PC190907'; $pandora_version = 'v7.0NG.738'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/install.php b/pandora_console/install.php index c04064aaa2..497d0d577f 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@ <div style='height: 10px'> <?php $version = '7.0NG.738'; - $build = '190906'; + $build = '190907'; $banner = "v$version Build $build"; error_reporting(0); diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec index 3d42434718..1d000876bd 100644 --- a/pandora_console/pandora_console.redhat.spec +++ b/pandora_console/pandora_console.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190906 +%define release 190907 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec index ad7d448cbf..94ef68c74c 100644 --- a/pandora_console/pandora_console.rhel7.spec +++ b/pandora_console/pandora_console.rhel7.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190906 +%define release 190907 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec index 1865074deb..40fef3fc23 100644 --- a/pandora_console/pandora_console.spec +++ b/pandora_console/pandora_console.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190906 +%define release 190907 %define httpd_name httpd # User and Group under which Apache is running %define httpd_name apache2 diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control index 8cafd9c319..e0cf5f0df1 100644 --- a/pandora_server/DEBIAN/control +++ b/pandora_server/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-server -Version: 7.0NG.738-190906 +Version: 7.0NG.738-190907 Architecture: all Priority: optional Section: admin diff --git a/pandora_server/DEBIAN/make_deb_package.sh b/pandora_server/DEBIAN/make_deb_package.sh index 37caeae281..6571e6f5cd 100644 --- a/pandora_server/DEBIAN/make_deb_package.sh +++ b/pandora_server/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190906" +pandora_version="7.0NG.738-190907" package_cpan=0 package_pandora=1 diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 0bd92497dc..12a518b19a 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -45,7 +45,7 @@ our @EXPORT = qw( # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190906"; +my $pandora_build = "190907"; our $VERSION = $pandora_version." ".$pandora_build; # Setup hash diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index cdb7da8680..6f934314db 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -32,7 +32,7 @@ our @ISA = qw(Exporter); # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190906"; +my $pandora_build = "190907"; our $VERSION = $pandora_version." ".$pandora_build; our %EXPORT_TAGS = ( 'all' => [ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index c8d7c85652..d4ae517195 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190906 +%define release 190907 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index f368d394bf..4518158ed0 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190906 +%define release 190907 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index ab51df1d95..be4e88b247 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190906" +PI_BUILD="190907" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index daa4f0d901..3192954b07 100644 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -34,7 +34,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.738 PS190906"; +my $version = "7.0NG.738 PS190907"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index 0536aa058b..c9740be5aa 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.738 PS190906"; +my $version = "7.0NG.738 PS190907"; # save program name for logging my $progname = basename($0); From f088f4760563abdcfb676a94b48ce2659d90e43b Mon Sep 17 00:00:00 2001 From: artica <artica.devel@gmail.com> Date: Sun, 8 Sep 2019 00:01:06 +0200 Subject: [PATCH 30/79] Auto-updated build strings. --- pandora_agents/unix/DEBIAN/control | 2 +- pandora_agents/unix/DEBIAN/make_deb_package.sh | 2 +- pandora_agents/unix/pandora_agent | 2 +- pandora_agents/unix/pandora_agent.redhat.spec | 2 +- pandora_agents/unix/pandora_agent.spec | 2 +- pandora_agents/unix/pandora_agent_installer | 2 +- pandora_agents/win32/installer/pandora.mpi | 2 +- pandora_agents/win32/pandora.cc | 2 +- pandora_agents/win32/versioninfo.rc | 2 +- pandora_console/DEBIAN/control | 2 +- pandora_console/DEBIAN/make_deb_package.sh | 2 +- pandora_console/include/config_process.php | 2 +- pandora_console/install.php | 2 +- pandora_console/pandora_console.redhat.spec | 2 +- pandora_console/pandora_console.rhel7.spec | 2 +- pandora_console/pandora_console.spec | 2 +- pandora_server/DEBIAN/control | 2 +- pandora_server/DEBIAN/make_deb_package.sh | 2 +- pandora_server/lib/PandoraFMS/Config.pm | 2 +- pandora_server/lib/PandoraFMS/PluginTools.pm | 2 +- pandora_server/pandora_server.redhat.spec | 2 +- pandora_server/pandora_server.spec | 2 +- pandora_server/pandora_server_installer | 2 +- pandora_server/util/pandora_db.pl | 2 +- pandora_server/util/pandora_manage.pl | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 5c8864cc71..fa2f8c1bd1 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.738-190907 +Version: 7.0NG.738-190908 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index 3707fb91c4..32935ec9a9 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190907" +pandora_version="7.0NG.738-190908" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index c187c4e856..5183db1b22 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -42,7 +42,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.738'; -use constant AGENT_BUILD => '190907'; +use constant AGENT_BUILD => '190908'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index 818b0f78cb..64400b64ed 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190907 +%define release 190908 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index dd59df95fe..647505eef7 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190907 +%define release 190908 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index 5bb08bced2..3e43fa9d7e 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190907" +PI_BUILD="190908" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index 218916199f..fa30af90be 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{190907} +{190908} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 4884afb225..fd950e3566 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.738(Build 190907)") +#define PANDORA_VERSION ("7.0NG.738(Build 190908)") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index 2d2c67c296..c46728cab1 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.738(Build 190907))" + VALUE "ProductVersion", "(7.0NG.738(Build 190908))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index 44b13c8cac..7101e8b16c 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.738-190907 +Version: 7.0NG.738-190908 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index 4bcf839517..b1d21f6a7e 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190907" +pandora_version="7.0NG.738-190908" package_pear=0 package_pandora=1 diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index 274d663c44..49bdd2e1c3 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC190907'; +$build_version = 'PC190908'; $pandora_version = 'v7.0NG.738'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/install.php b/pandora_console/install.php index 497d0d577f..1c1e5260bd 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@ <div style='height: 10px'> <?php $version = '7.0NG.738'; - $build = '190907'; + $build = '190908'; $banner = "v$version Build $build"; error_reporting(0); diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec index 1d000876bd..bea202fa91 100644 --- a/pandora_console/pandora_console.redhat.spec +++ b/pandora_console/pandora_console.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190907 +%define release 190908 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec index 94ef68c74c..fac2fc243d 100644 --- a/pandora_console/pandora_console.rhel7.spec +++ b/pandora_console/pandora_console.rhel7.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190907 +%define release 190908 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec index 40fef3fc23..c3e4065443 100644 --- a/pandora_console/pandora_console.spec +++ b/pandora_console/pandora_console.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190907 +%define release 190908 %define httpd_name httpd # User and Group under which Apache is running %define httpd_name apache2 diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control index e0cf5f0df1..d6e9e204e2 100644 --- a/pandora_server/DEBIAN/control +++ b/pandora_server/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-server -Version: 7.0NG.738-190907 +Version: 7.0NG.738-190908 Architecture: all Priority: optional Section: admin diff --git a/pandora_server/DEBIAN/make_deb_package.sh b/pandora_server/DEBIAN/make_deb_package.sh index 6571e6f5cd..d19b6b2109 100644 --- a/pandora_server/DEBIAN/make_deb_package.sh +++ b/pandora_server/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190907" +pandora_version="7.0NG.738-190908" package_cpan=0 package_pandora=1 diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 12a518b19a..d1241e1791 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -45,7 +45,7 @@ our @EXPORT = qw( # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190907"; +my $pandora_build = "190908"; our $VERSION = $pandora_version." ".$pandora_build; # Setup hash diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index 6f934314db..ccc47c543e 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -32,7 +32,7 @@ our @ISA = qw(Exporter); # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190907"; +my $pandora_build = "190908"; our $VERSION = $pandora_version." ".$pandora_build; our %EXPORT_TAGS = ( 'all' => [ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index d4ae517195..e3f3015df8 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190907 +%define release 190908 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index 4518158ed0..65e18cf16f 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190907 +%define release 190908 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index be4e88b247..b15841dd6c 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190907" +PI_BUILD="190908" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index 3192954b07..8d205e91b1 100644 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -34,7 +34,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.738 PS190907"; +my $version = "7.0NG.738 PS190908"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index c9740be5aa..044adcd5fc 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.738 PS190907"; +my $version = "7.0NG.738 PS190908"; # save program name for logging my $progname = basename($0); From 5526bb49ed8bd43d50c80c623a2ff0264c9e152a Mon Sep 17 00:00:00 2001 From: artica <artica.devel@gmail.com> Date: Mon, 9 Sep 2019 00:01:07 +0200 Subject: [PATCH 31/79] Auto-updated build strings. --- pandora_agents/unix/DEBIAN/control | 2 +- pandora_agents/unix/DEBIAN/make_deb_package.sh | 2 +- pandora_agents/unix/pandora_agent | 2 +- pandora_agents/unix/pandora_agent.redhat.spec | 2 +- pandora_agents/unix/pandora_agent.spec | 2 +- pandora_agents/unix/pandora_agent_installer | 2 +- pandora_agents/win32/installer/pandora.mpi | 2 +- pandora_agents/win32/pandora.cc | 2 +- pandora_agents/win32/versioninfo.rc | 2 +- pandora_console/DEBIAN/control | 2 +- pandora_console/DEBIAN/make_deb_package.sh | 2 +- pandora_console/include/config_process.php | 2 +- pandora_console/install.php | 2 +- pandora_console/pandora_console.redhat.spec | 2 +- pandora_console/pandora_console.rhel7.spec | 2 +- pandora_console/pandora_console.spec | 2 +- pandora_server/DEBIAN/control | 2 +- pandora_server/DEBIAN/make_deb_package.sh | 2 +- pandora_server/lib/PandoraFMS/Config.pm | 2 +- pandora_server/lib/PandoraFMS/PluginTools.pm | 2 +- pandora_server/pandora_server.redhat.spec | 2 +- pandora_server/pandora_server.spec | 2 +- pandora_server/pandora_server_installer | 2 +- pandora_server/util/pandora_db.pl | 2 +- pandora_server/util/pandora_manage.pl | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index fa2f8c1bd1..5d6aba65a6 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.738-190908 +Version: 7.0NG.738-190909 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index 32935ec9a9..a4fd07cf63 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190908" +pandora_version="7.0NG.738-190909" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index 5183db1b22..1c19f797bc 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -42,7 +42,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.738'; -use constant AGENT_BUILD => '190908'; +use constant AGENT_BUILD => '190909'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index 64400b64ed..ea00c14413 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190908 +%define release 190909 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index 647505eef7..c644bf1b1c 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190908 +%define release 190909 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index 3e43fa9d7e..4ee6a8d596 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190908" +PI_BUILD="190909" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index fa30af90be..cba1df14f2 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{190908} +{190909} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index fd950e3566..e798768f8f 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.738(Build 190908)") +#define PANDORA_VERSION ("7.0NG.738(Build 190909)") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index c46728cab1..3e2ae25a0c 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.738(Build 190908))" + VALUE "ProductVersion", "(7.0NG.738(Build 190909))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index 7101e8b16c..bb7b6fd134 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.738-190908 +Version: 7.0NG.738-190909 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index b1d21f6a7e..7809ffbdad 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190908" +pandora_version="7.0NG.738-190909" package_pear=0 package_pandora=1 diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index 49bdd2e1c3..0782527285 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC190908'; +$build_version = 'PC190909'; $pandora_version = 'v7.0NG.738'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/install.php b/pandora_console/install.php index 1c1e5260bd..f97b8840fa 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@ <div style='height: 10px'> <?php $version = '7.0NG.738'; - $build = '190908'; + $build = '190909'; $banner = "v$version Build $build"; error_reporting(0); diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec index bea202fa91..279151b176 100644 --- a/pandora_console/pandora_console.redhat.spec +++ b/pandora_console/pandora_console.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190908 +%define release 190909 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec index fac2fc243d..ceb602f232 100644 --- a/pandora_console/pandora_console.rhel7.spec +++ b/pandora_console/pandora_console.rhel7.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190908 +%define release 190909 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec index c3e4065443..301889cc77 100644 --- a/pandora_console/pandora_console.spec +++ b/pandora_console/pandora_console.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190908 +%define release 190909 %define httpd_name httpd # User and Group under which Apache is running %define httpd_name apache2 diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control index d6e9e204e2..a18ab0669d 100644 --- a/pandora_server/DEBIAN/control +++ b/pandora_server/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-server -Version: 7.0NG.738-190908 +Version: 7.0NG.738-190909 Architecture: all Priority: optional Section: admin diff --git a/pandora_server/DEBIAN/make_deb_package.sh b/pandora_server/DEBIAN/make_deb_package.sh index d19b6b2109..c476726125 100644 --- a/pandora_server/DEBIAN/make_deb_package.sh +++ b/pandora_server/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190908" +pandora_version="7.0NG.738-190909" package_cpan=0 package_pandora=1 diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index d1241e1791..3b36b03c22 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -45,7 +45,7 @@ our @EXPORT = qw( # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190908"; +my $pandora_build = "190909"; our $VERSION = $pandora_version." ".$pandora_build; # Setup hash diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index ccc47c543e..5ff15430a1 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -32,7 +32,7 @@ our @ISA = qw(Exporter); # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190908"; +my $pandora_build = "190909"; our $VERSION = $pandora_version." ".$pandora_build; our %EXPORT_TAGS = ( 'all' => [ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index e3f3015df8..9654edff1d 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190908 +%define release 190909 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index 65e18cf16f..25d770f321 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190908 +%define release 190909 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index b15841dd6c..9e64c7809a 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190908" +PI_BUILD="190909" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index 8d205e91b1..c8664cd5fd 100644 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -34,7 +34,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.738 PS190908"; +my $version = "7.0NG.738 PS190909"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index 044adcd5fc..6adcb5a86b 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.738 PS190908"; +my $version = "7.0NG.738 PS190909"; # save program name for logging my $progname = basename($0); From 16912732d239ef49e63ae2552fd64bd2ceb25b91 Mon Sep 17 00:00:00 2001 From: artica <artica.devel@gmail.com> Date: Tue, 10 Sep 2019 00:01:08 +0200 Subject: [PATCH 32/79] Auto-updated build strings. --- pandora_agents/unix/DEBIAN/control | 2 +- pandora_agents/unix/DEBIAN/make_deb_package.sh | 2 +- pandora_agents/unix/pandora_agent | 2 +- pandora_agents/unix/pandora_agent.redhat.spec | 2 +- pandora_agents/unix/pandora_agent.spec | 2 +- pandora_agents/unix/pandora_agent_installer | 2 +- pandora_agents/win32/installer/pandora.mpi | 2 +- pandora_agents/win32/pandora.cc | 2 +- pandora_agents/win32/versioninfo.rc | 2 +- pandora_console/DEBIAN/control | 2 +- pandora_console/DEBIAN/make_deb_package.sh | 2 +- pandora_console/include/config_process.php | 2 +- pandora_console/install.php | 2 +- pandora_console/pandora_console.redhat.spec | 2 +- pandora_console/pandora_console.rhel7.spec | 2 +- pandora_console/pandora_console.spec | 2 +- pandora_server/DEBIAN/control | 2 +- pandora_server/DEBIAN/make_deb_package.sh | 2 +- pandora_server/lib/PandoraFMS/Config.pm | 2 +- pandora_server/lib/PandoraFMS/PluginTools.pm | 2 +- pandora_server/pandora_server.redhat.spec | 2 +- pandora_server/pandora_server.spec | 2 +- pandora_server/pandora_server_installer | 2 +- pandora_server/util/pandora_db.pl | 2 +- pandora_server/util/pandora_manage.pl | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 5d6aba65a6..255369ec50 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.738-190909 +Version: 7.0NG.738-190910 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index a4fd07cf63..d8a9edb81f 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190909" +pandora_version="7.0NG.738-190910" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index 1c19f797bc..b2aa44bf57 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -42,7 +42,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.738'; -use constant AGENT_BUILD => '190909'; +use constant AGENT_BUILD => '190910'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index ea00c14413..6cb9511740 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190909 +%define release 190910 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index c644bf1b1c..4d92dceec8 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190909 +%define release 190910 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index 4ee6a8d596..fb2d0d497f 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190909" +PI_BUILD="190910" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index cba1df14f2..41ca38cb18 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{190909} +{190910} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index e798768f8f..32a7a4e667 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.738(Build 190909)") +#define PANDORA_VERSION ("7.0NG.738(Build 190910)") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index 3e2ae25a0c..0792a3830d 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.738(Build 190909))" + VALUE "ProductVersion", "(7.0NG.738(Build 190910))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index bb7b6fd134..492c6c2e8d 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.738-190909 +Version: 7.0NG.738-190910 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index 7809ffbdad..061f4e26a8 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190909" +pandora_version="7.0NG.738-190910" package_pear=0 package_pandora=1 diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index 0782527285..40f90a23e8 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC190909'; +$build_version = 'PC190910'; $pandora_version = 'v7.0NG.738'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/install.php b/pandora_console/install.php index f97b8840fa..8db1605ace 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@ <div style='height: 10px'> <?php $version = '7.0NG.738'; - $build = '190909'; + $build = '190910'; $banner = "v$version Build $build"; error_reporting(0); diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec index 279151b176..98b32aa5f4 100644 --- a/pandora_console/pandora_console.redhat.spec +++ b/pandora_console/pandora_console.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190909 +%define release 190910 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec index ceb602f232..ff32401349 100644 --- a/pandora_console/pandora_console.rhel7.spec +++ b/pandora_console/pandora_console.rhel7.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190909 +%define release 190910 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec index 301889cc77..2f73a11a49 100644 --- a/pandora_console/pandora_console.spec +++ b/pandora_console/pandora_console.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190909 +%define release 190910 %define httpd_name httpd # User and Group under which Apache is running %define httpd_name apache2 diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control index a18ab0669d..9b3c18d64d 100644 --- a/pandora_server/DEBIAN/control +++ b/pandora_server/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-server -Version: 7.0NG.738-190909 +Version: 7.0NG.738-190910 Architecture: all Priority: optional Section: admin diff --git a/pandora_server/DEBIAN/make_deb_package.sh b/pandora_server/DEBIAN/make_deb_package.sh index c476726125..29331a2c9d 100644 --- a/pandora_server/DEBIAN/make_deb_package.sh +++ b/pandora_server/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190909" +pandora_version="7.0NG.738-190910" package_cpan=0 package_pandora=1 diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 3b36b03c22..5a5ce64a27 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -45,7 +45,7 @@ our @EXPORT = qw( # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190909"; +my $pandora_build = "190910"; our $VERSION = $pandora_version." ".$pandora_build; # Setup hash diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index 5ff15430a1..ef1c654689 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -32,7 +32,7 @@ our @ISA = qw(Exporter); # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190909"; +my $pandora_build = "190910"; our $VERSION = $pandora_version." ".$pandora_build; our %EXPORT_TAGS = ( 'all' => [ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index 9654edff1d..e9026587a6 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190909 +%define release 190910 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index 25d770f321..adf070d130 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190909 +%define release 190910 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index 9e64c7809a..167aa068fb 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190909" +PI_BUILD="190910" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index c8664cd5fd..bfb97460aa 100644 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -34,7 +34,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.738 PS190909"; +my $version = "7.0NG.738 PS190910"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index 6adcb5a86b..98cca10392 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.738 PS190909"; +my $version = "7.0NG.738 PS190910"; # save program name for logging my $progname = basename($0); From 4ec832f523cd3688da6675a4bf417dafb6018a5e Mon Sep 17 00:00:00 2001 From: alejandro-campos <alejandro.campos@artica.es> Date: Tue, 10 Sep 2019 10:03:30 +0200 Subject: [PATCH 33/79] ddded comment --- pandora_console/godmode/setup/setup_general.php | 1 + 1 file changed, 1 insertion(+) diff --git a/pandora_console/godmode/setup/setup_general.php b/pandora_console/godmode/setup/setup_general.php index eb37a608ea..9880065ca6 100644 --- a/pandora_console/godmode/setup/setup_general.php +++ b/pandora_console/godmode/setup/setup_general.php @@ -32,6 +32,7 @@ $table->size[0] = '30%'; $table->style[0] = 'font-weight:bold'; $table->size[1] = '70%'; +// Mail configuration table. $table_mail_conf = new stdClass(); $table_mail_conf->width = '100%'; $table_mail_conf->class = 'databox filters'; From c2e47e0ffaba128cbf632e7b719c47527ebbdc6b Mon Sep 17 00:00:00 2001 From: alejandro-campos <alejandro.campos@artica.es> Date: Tue, 10 Sep 2019 10:06:33 +0200 Subject: [PATCH 34/79] Revert "ddded comment" This reverts commit 4ec832f523cd3688da6675a4bf417dafb6018a5e. --- pandora_console/godmode/setup/setup_general.php | 1 - 1 file changed, 1 deletion(-) diff --git a/pandora_console/godmode/setup/setup_general.php b/pandora_console/godmode/setup/setup_general.php index 9880065ca6..eb37a608ea 100644 --- a/pandora_console/godmode/setup/setup_general.php +++ b/pandora_console/godmode/setup/setup_general.php @@ -32,7 +32,6 @@ $table->size[0] = '30%'; $table->style[0] = 'font-weight:bold'; $table->size[1] = '70%'; -// Mail configuration table. $table_mail_conf = new stdClass(); $table_mail_conf->width = '100%'; $table_mail_conf->class = 'databox filters'; From 4722d4a08bc1226c4e954746a171d4831a5db805 Mon Sep 17 00:00:00 2001 From: alejandro-campos <alejandro.campos@artica.es> Date: Tue, 10 Sep 2019 11:38:02 +0200 Subject: [PATCH 35/79] changed setup option text --- pandora_console/godmode/setup/setup_general.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandora_console/godmode/setup/setup_general.php b/pandora_console/godmode/setup/setup_general.php index 8d9636e438..40678ee9c5 100644 --- a/pandora_console/godmode/setup/setup_general.php +++ b/pandora_console/godmode/setup/setup_general.php @@ -354,10 +354,10 @@ $table_mail_conf->data[0][1] = html_print_input_text('email_from_dir', $config[' $table_mail_conf->data[1][0] = __('From name'); $table_mail_conf->data[1][2] = html_print_input_text('email_from_name', $config['email_from_name'], '', 30, 100, true); -$table_mail_conf->data[2][0] = __('Server SMTP'); +$table_mail_conf->data[2][0] = __('SMTP Server'); $table_mail_conf->data[2][1] = html_print_input_text('email_smtpServer', $config['email_smtpServer'], '', 30, 100, true); -$table_mail_conf->data[3][0] = __('Port SMTP'); +$table_mail_conf->data[3][0] = __('SMTP Port'); $table_mail_conf->data[3][1] = html_print_input_text('email_smtpPort', $config['email_smtpPort'], '', 30, 100, true); $table_mail_conf->data[4][0] = __('Encryption'); From b1987001721ffb3a8c9170d2ef324ce139cb90cf Mon Sep 17 00:00:00 2001 From: Tatiana Llorente <tatiana.llorente@artica.es> Date: Tue, 10 Sep 2019 12:18:17 +0200 Subject: [PATCH 36/79] Fixed duplicated names - #4280 --- pandora_console/include/functions_menu.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/pandora_console/include/functions_menu.php b/pandora_console/include/functions_menu.php index a6af269e53..7bec03c3f1 100644 --- a/pandora_console/include/functions_menu.php +++ b/pandora_console/include/functions_menu.php @@ -543,10 +543,8 @@ function menu_add_extras(&$menu) $menu_extra['estado']['sub']['enterprise/godmode/services/manage_services']['text'] = __('Manage services'); $menu_extra['estado']['sub']['godmode/snmpconsole/snmp_alert']['text'] = __('SNMP alerts'); $menu_extra['estado']['sub']['godmode/snmpconsole/snmp_filters']['text'] = __('SNMP filters'); - $menu_extra['estado']['sub']['enterprise/godmode/snmpconsole/snmp_trap_editor']['text'] = __('SNMP trap editor'); - $menu_extra['estado']['sub']['godmode/snmpconsole/snmp_trap_generator']['text'] = __('SNMP trap generator'); - - $menu_extra['estado']['sub']['operation/snmpconsole/snmp_view']['text'] = __('SNMP console'); + $menu_extra['estado']['sub']['snmpconsole']['sub2']['godmode/snmpconsole/snmp_trap_generator']['text'] = __('SNMP trap generator'); + $menu_extra['estado']['sub']['snmpconsole']['sub2']['operation/snmpconsole/snmp_view']['text'] = __('SNMP console'); $menu_extra['workspace']['sub']['operation/incidents/incident_detail']['text'] = __('Manage incident'); From c842c96d08daf1dbbc941cda6813131da795e298 Mon Sep 17 00:00:00 2001 From: Tatiana Llorente <tatiana.llorente@artica.es> Date: Tue, 10 Sep 2019 12:19:53 +0200 Subject: [PATCH 37/79] Fixed duplicated names - #4280 --- pandora_console/include/functions_menu.php | 1 + 1 file changed, 1 insertion(+) diff --git a/pandora_console/include/functions_menu.php b/pandora_console/include/functions_menu.php index 7bec03c3f1..36785064ef 100644 --- a/pandora_console/include/functions_menu.php +++ b/pandora_console/include/functions_menu.php @@ -543,6 +543,7 @@ function menu_add_extras(&$menu) $menu_extra['estado']['sub']['enterprise/godmode/services/manage_services']['text'] = __('Manage services'); $menu_extra['estado']['sub']['godmode/snmpconsole/snmp_alert']['text'] = __('SNMP alerts'); $menu_extra['estado']['sub']['godmode/snmpconsole/snmp_filters']['text'] = __('SNMP filters'); + $menu_extra['estado']['sub']['enterprise/godmode/snmpconsole/snmp_trap_editor']['text'] = __('SNMP trap editor'); $menu_extra['estado']['sub']['snmpconsole']['sub2']['godmode/snmpconsole/snmp_trap_generator']['text'] = __('SNMP trap generator'); $menu_extra['estado']['sub']['snmpconsole']['sub2']['operation/snmpconsole/snmp_view']['text'] = __('SNMP console'); From 33d9ce9de802add582c8d65ea680bbe973660f63 Mon Sep 17 00:00:00 2001 From: Ramon Novoa <rnovoa@artica.es> Date: Tue, 10 Sep 2019 15:53:47 +0200 Subject: [PATCH 38/79] Add SSL/STARTTLS support to pandora_sendmail. --- pandora_server/conf/pandora_server.conf.new | 4 + .../conf/pandora_server.conf.windows | 4 + pandora_server/lib/PandoraFMS/Config.pm | 35 ++++- pandora_server/lib/PandoraFMS/Sendmail.pm | 138 +++++++++++------- pandora_server/lib/PandoraFMS/Tools.pm | 20 ++- 5 files changed, 141 insertions(+), 60 deletions(-) diff --git a/pandora_server/conf/pandora_server.conf.new b/pandora_server/conf/pandora_server.conf.new index 33d34082c0..89b9cde24d 100644 --- a/pandora_server/conf/pandora_server.conf.new +++ b/pandora_server/conf/pandora_server.conf.new @@ -250,6 +250,10 @@ mta_address localhost #mta_from Pandora FMS <pandora@mydomain.com> +# SMTP encryption protocol (none, ssl, starttls) + +#mta_encryption none + # Set 1 if want eMail deliver alert in separate mail (default). # Set 0 if want eMail deliver shared mail by all destination. mail_in_separate 1 diff --git a/pandora_server/conf/pandora_server.conf.windows b/pandora_server/conf/pandora_server.conf.windows index a602f7abc4..19bc989008 100644 --- a/pandora_server/conf/pandora_server.conf.windows +++ b/pandora_server/conf/pandora_server.conf.windows @@ -235,6 +235,10 @@ dataserver_threads 2 # probably you need to change it to avoid problems with your antispam #mta_from pandora@sampledomain.com +# SMTP encryption protocol (none, ssl, starttls) + +#mta_encryption none + # xprobe2: Optional package to detect OS types using advanced TCP/IP # fingerprinting tecniques, much more accurates than stadard nmap. # If not provided, nmap is used insted xprobe2 diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 0bd92497dc..886a04e23e 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -187,6 +187,33 @@ sub pandora_get_sharedconfig ($$) { [$dbh] ); $pa_config->{'rb_product_name'} = 'Pandora FMS' unless (defined ($pa_config->{'rb_product_name'}) && $pa_config->{'rb_product_name'} ne ''); + + # Mail transport agent configuration. Local configuration takes precedence. + if ($pa_config->{"mta_address"} eq '') { + $pa_config->{"mta_address"} = pandora_get_tconfig_token ($dbh, 'email_smtpServer', ''); + $pa_config->{"mta_from"} = '"' . pandora_get_tconfig_token ($dbh, 'email_from_name', 'Pandora FMS') . '" <' . + pandora_get_tconfig_token ($dbh, 'email_from_dir', 'pandora@pandorafms.org') . '>'; + $pa_config->{"mta_pass"} = pandora_get_tconfig_token ($dbh, 'email_password', ''); + $pa_config->{"mta_port"} = pandora_get_tconfig_token ($dbh, 'email_smtpPort', ''); + $pa_config->{"mta_user"} = pandora_get_tconfig_token ($dbh, 'email_username', ''); + $pa_config->{"mta_encryption"} = pandora_get_tconfig_token ($dbh, 'email_encryption', ''); + + # Auto-negotiate the auth mechanism, since it cannot be set from the console. + # Do not include PLAIN, it generates the following error: + # 451 4.5.0 SMTP protocol violation, see RFC 2821 + $pa_config->{"mta_auth"} = 'DIGEST-MD5 CRAM-MD5 LOGIN'; + + # Fix the format of mta_encryption. + if ($pa_config->{"mta_encryption"} eq 'tls') { + $pa_config->{"mta_encryption"} = 'starttls'; + } + elsif ($pa_config->{"mta_encryption"} =~ m/^ssl/) { + $pa_config->{"mta_encryption"} = 'ssl'; + } + else { + $pa_config->{"mta_encryption"} = 'none'; + } + } } ########################################################################## @@ -303,12 +330,13 @@ sub pandora_load_config { $pa_config->{"dynamic_constant"} = 10; # 7.0 # Internal MTA for alerts, each server need its own config. - $pa_config->{"mta_address"} = '127.0.0.1'; # Introduced on 2.0 - $pa_config->{"mta_port"} = '25'; # Introduced on 2.0 + $pa_config->{"mta_address"} = ''; # Introduced on 2.0 + $pa_config->{"mta_port"} = ''; # Introduced on 2.0 $pa_config->{"mta_user"} = ''; # Introduced on 2.0 $pa_config->{"mta_pass"} = ''; # Introduced on 2.0 $pa_config->{"mta_auth"} = 'none'; # Introduced on 2.0 (Support LOGIN PLAIN CRAM-MD5 DIGEST-MD) $pa_config->{"mta_from"} = 'pandora@localhost'; # Introduced on 2.0 + $pa_config->{"mta_encryption"} = 'none'; $pa_config->{"mail_in_separate"} = 1; # 1: eMail deliver alert mail in separate mails. # 0: eMail deliver 1 mail with all destination. @@ -592,6 +620,9 @@ sub pandora_load_config { elsif ($parametro =~ m/^mta_from\s(.*)/i) { $pa_config->{'mta_from'}= clean_blank($1); } + elsif ($parametro =~ m/^mta_encryption\s(.*)/i) { + $pa_config->{'mta_encryption'}= clean_blank($1); + } elsif ($parametro =~ m/^mail_in_separate\s+([0-9]*)/i) { $pa_config->{'mail_in_separate'}= clean_blank($1); } diff --git a/pandora_server/lib/PandoraFMS/Sendmail.pm b/pandora_server/lib/PandoraFMS/Sendmail.pm index 394add6d1f..551d713dd3 100644 --- a/pandora_server/lib/PandoraFMS/Sendmail.pm +++ b/pandora_server/lib/PandoraFMS/Sendmail.pm @@ -32,7 +32,9 @@ $VERSION = '0.79_16'; 'tz' => '', # only to override automatic detection 'port' => 25, # change it if you always use a non-standard port - 'debug' => 0 # prints stuff to STDERR + 'debug' => 0, # prints stuff to STDERR + 'encryption' => 'none', # no, ssl or starttls + 'timeout' => 5, # timeout for socket reads/writes in seconds ); # ******************************************************************* @@ -54,7 +56,8 @@ use vars qw( $auth_support ); -use Socket; +use IO::Socket::INET; +use IO::Select; use Time::Local; # for automatic time zone detection use Sys::Hostname; # for use of hostname in HELO @@ -62,6 +65,12 @@ use Sys::Hostname; # for use of hostname in HELO $auth_support = 'DIGEST-MD5 CRAM-MD5 PLAIN LOGIN'; +# IO::Socket object. +my $S; + +# IO::Select object. +my $Sel; + # use MIME::QuotedPrint if available and configured in %mailcfg eval("use MIME::QuotedPrint"); $mailcfg{'mime'} &&= (!$@); @@ -178,9 +187,9 @@ sub sendmail { local $_; my (%mail, $k, - $smtp, $server, $port, $connected, $localhost, + $smtp, $server, $port, $localhost, $fromaddr, $recip, @recipients, $to, $header, - %esmtp, @wanted_methods, + %esmtp, @wanted_methods, $encryption ); use vars qw($server_reply); # -------- a few internal subs ---------- @@ -191,7 +200,7 @@ sub sendmail { $error .= "Server said: $server_reply\n"; print STDERR "Server said: $server_reply\n" if $^W; } - close S; + close $S if defined($S); return 0; } @@ -200,7 +209,7 @@ sub sendmail { for $i (0..$#_) { # accept references, so we don't copy potentially big data my $data = ref($_[$i]) ? $_[$i] : \$_[$i]; - if ($mailcfg{'debug'} > 5) { + if ($mailcfg{'debug'} > 9) { if (length($$data) < 500) { print ">", $$data; } @@ -208,23 +217,32 @@ sub sendmail { print "> [...", length($$data), " bytes sent ...]\n"; } } - print(S $$data) || return 0; + my @sockets = $Sel->can_write($mailcfg{'timeout'}); + return 0 if (!@sockets); + syswrite($sockets[0], $$data) || return 0; } 1; } sub socket_read { + my $buffer; $server_reply = ""; - do { - $_ = <S>; - $server_reply .= $_; - #chomp $_; - print "<$_" if $mailcfg{'debug'} > 5; - if (/^[45]/ or !$_) { - chomp $server_reply; - return; # return false - } - } while (/^[\d]+-/); + + while (my @sockets = $Sel->can_read($mailcfg{'timeout'})) { + return if (!@sockets); + # 16kByte is the maximum size of an SSL frame and because sysread + # returns data from only a single SSL frame you can guarantee that + # there are no pending data. + sysread($sockets[0], $buffer, 65535) || return; + $server_reply .= $buffer; + last if ($buffer =~ m/\n$/); + } + + print "<$server_reply" if $mailcfg{'debug'} > 9; + if ($server_reply =~ /^[45]/) { + chomp $server_reply; + return; # return false + } chomp $server_reply; return $server_reply; } @@ -262,11 +280,13 @@ sub sendmail { $smtp = $mail{'Smtp'} || $mail{'Server'}; unshift @{$mailcfg{'smtp'}}, $smtp if ($smtp and $mailcfg{'smtp'}->[0] ne $smtp); + $encryption = $mail{'Encryption'} || $mail{'Encryption'}; + # delete non-header keys, so we don't send them later as mail headers # I like this syntax, but it doesn't seem to work with AS port 5.003_07: # delete @mail{'Smtp', 'Server'}; # so instead: - delete $mail{'Smtp'}; delete $mail{'Server'}; + delete $mail{'Smtp'}; delete $mail{'Server'}; delete $mail{'Encryption'}; $mailcfg{'port'} = $mail{'Port'} || $mailcfg{'port'} || 25; delete $mail{'Port'}; @@ -343,48 +363,36 @@ sub sendmail { $localhost = hostname() || 'localhost'; foreach $server ( @{$mailcfg{'smtp'}} ) { - # open socket needs to be inside this foreach loop on Linux, - # otherwise all servers fail if 1st one fails !??! why? - unless ( socket S, AF_INET, SOCK_STREAM, scalar(getprotobyname 'tcp') ) { - return fail("socket failed ($!)") - } - - print "- trying $server\n" if $mailcfg{'debug'} > 1; + print "- trying $server\n" if $mailcfg{'debug'} > 9; $server =~ s/\s+//go; # remove spaces just in case of a typo # extract port if server name like "mail.domain.com:2525" $port = ($server =~ s/:(\d+)$//o) ? $1 : $mailcfg{'port'}; $smtp = $server; # save $server for use outside foreach loop - my $smtpaddr = inet_aton $server; - unless ($smtpaddr) { - $error .= "$server not found\n"; - next; # next server + # load IO::Socket SSL if needed + if ($encryption ne 'none') { + eval "require IO::Socket::SSL" || return fail("IO::Socket::SSL is not available"); } - my $retried = 0; # reset retries for each server - while ( ( not $connected = connect S, pack_sockaddr_in($port, $smtpaddr) ) - and ( $retried < $mailcfg{'retries'} ) - ) { - $retried++; - $error .= "connect to $server failed ($!)\n"; - print "- connect to $server failed ($!)\n" if $mailcfg{'debug'} > 1; - print "retrying in $mailcfg{'delay'} seconds...\n" if $mailcfg{'debug'} > 1; - sleep $mailcfg{'delay'}; + if ($encryption ne 'ssl') { + $S = new IO::Socket::INET(PeerPort => $port, PeerAddr => $server, Proto => 'tcp'); } - - if ( $connected ) { - print "- connected to $server\n" if $mailcfg{'debug'} > 3; + else { + $S = new IO::Socket::SSL(PeerPort => $port, PeerAddr => $server, Proto => 'tcp', SSL_verify => 0, Domain => AF_INET); + } + if ( $S ) { + print "- connected to $server\n" if $mailcfg{'debug'} > 9; last; } else { $error .= "connect to $server failed\n"; - print "- connect to $server failed, next server...\n" if $mailcfg{'debug'} > 1; + print "- connect to $server failed, next server...\n" if $mailcfg{'debug'} > 9; next; # next server } } - unless ( $connected ) { + unless ( $S ) { return fail("connect to $smtp failed ($!) no (more) retries!") }; @@ -397,8 +405,9 @@ sub sendmail { ; } - my($oldfh) = select(S); $| = 1; select($oldfh); - + $Sel = new IO::Select() || return fail("IO::Select error"); + $Sel->add($S); + socket_read() || return fail("Connection error from $smtp on port $port ($_)"); socket_write("EHLO $localhost$CRLF") @@ -418,8 +427,37 @@ sub sendmail { || return fail("send HELO error (lost connection?)"); } - if ($auth) { - warn "AUTH requested\n" if ($mailcfg{debug} > 4); + # STARTTLS + if ($encryption eq 'starttls') { + defined($esmtp{'STARTTLS'}) + || return fail('STARTTLS not supported'); + socket_write("STARTTLS$CRLF") || return fail("send STARTTLS error"); + socket_read() + || return fail('STARTTLS error'); + IO::Socket::SSL->start_SSL($S, SSL_hostname => $server) + || return fail("start_SSL failed"); + + # The client SHOULD send an EHLO command as the + # first command after a successful TLS negotiation. + socket_write("EHLO $localhost$CRLF") + || return fail("send EHLO error (lost connection?)"); + my $ehlo = socket_read(); + if ($ehlo) { + # The server MUST discard any knowledge + # obtained from the client. + %esmtp = (); + + # parse EHLO response + map { + s/^\d+[- ]//; + my ($k, $v) = split /\s+/, $_, 2; + $esmtp{$k} = $v || 1 if $k; + } split(/\n/, $ehlo); + } + } + + if (defined($auth) && $auth->{'user'} ne '') { + warn "AUTH requested\n" if ($mailcfg{debug} > 9); # reduce wanted methods to those supported my @methods = grep {$esmtp{'AUTH'}=~/(^|\s)$_(\s|$)/i} grep {$auth_support =~ /(^|\s)$_(\s|$)/i} @@ -480,9 +518,9 @@ sub sendmail { my $challenge = socket_read() || return fail("AUTH DIGEST-MD5 failed: $server_reply"); $challenge =~ s/^\d+\s+//; $challenge =~ s/[\r\n]+$//; - warn "\nCHALLENGE=", decode_base64($challenge), "\n" if ($mailcfg{debug} > 10); + warn "\nCHALLENGE=", decode_base64($challenge), "\n" if ($mailcfg{debug} > 9); my $response = _digest_md5($auth->{user}, $auth->{password}, decode_base64($challenge), $auth->{realm}); - warn "\nRESPONSE=$response\n" if ($mailcfg{debug} > 10); + warn "\nRESPONSE=$response\n" if ($mailcfg{debug} > 9); socket_write(encode_base64($response, ""), $CRLF) || return fail("AUTH DIGEST-MD5 failed: $server_reply"); my $status = socket_read() @@ -562,7 +600,7 @@ sub sendmail { socket_write("QUIT$CRLF") || return fail("send QUIT error"); socket_read(); - close S; + close $S; return 1; } # end sub sendmail diff --git a/pandora_server/lib/PandoraFMS/Tools.pm b/pandora_server/lib/PandoraFMS/Tools.pm index 36050e4275..5089581aad 100755 --- a/pandora_server/lib/PandoraFMS/Tools.pm +++ b/pandora_server/lib/PandoraFMS/Tools.pm @@ -518,7 +518,14 @@ sub pandora_sendmail { Smtp => $pa_config->{"mta_address"}, Port => $pa_config->{"mta_port"}, From => $pa_config->{"mta_from"}, + Encryption => $pa_config->{"mta_encryption"}, ); + + # Set the timeout. + $PandoraFMS::Sendmail::mailcfg{'timeout'} = $pa_config->{"tcp_timeout"}; + + # Enable debugging. + $PandoraFMS::Sendmail::mailcfg{'debug'} = $pa_config->{"verbosity"}; if (defined($content_type)) { $mail{'Content-Type'} = $content_type; @@ -535,15 +542,12 @@ sub pandora_sendmail { $mail{auth} = {user=>$pa_config->{"mta_user"}, password=>$pa_config->{"mta_pass"}, method=>$pa_config->{"mta_auth"}, required=>1 }; } - if (sendmail %mail) { - return; - } - else { - logger ($pa_config, "[ERROR] Sending email to $to_address with subject $subject", 1); - if (defined($Mail::Sendmail::error)){ - logger ($pa_config, "ERROR Code: $Mail::Sendmail::error", 5); + eval { + if (!sendmail(%mail)) { + logger ($pa_config, "[ERROR] Sending email to $to_address with subject $subject", 1); + logger ($pa_config, "ERROR Code: $Mail::Sendmail::error", 5) if (defined($Mail::Sendmail::error)); } - } + }; } ########################################################################## From fdef0b5188c1122b71e5e6fb99583de1c414a06c Mon Sep 17 00:00:00 2001 From: artica <artica.devel@gmail.com> Date: Wed, 11 Sep 2019 00:01:10 +0200 Subject: [PATCH 39/79] Auto-updated build strings. --- pandora_agents/unix/DEBIAN/control | 2 +- pandora_agents/unix/DEBIAN/make_deb_package.sh | 2 +- pandora_agents/unix/pandora_agent | 2 +- pandora_agents/unix/pandora_agent.redhat.spec | 2 +- pandora_agents/unix/pandora_agent.spec | 2 +- pandora_agents/unix/pandora_agent_installer | 2 +- pandora_agents/win32/installer/pandora.mpi | 2 +- pandora_agents/win32/pandora.cc | 2 +- pandora_agents/win32/versioninfo.rc | 2 +- pandora_console/DEBIAN/control | 2 +- pandora_console/DEBIAN/make_deb_package.sh | 2 +- pandora_console/include/config_process.php | 2 +- pandora_console/install.php | 2 +- pandora_console/pandora_console.redhat.spec | 2 +- pandora_console/pandora_console.rhel7.spec | 2 +- pandora_console/pandora_console.spec | 2 +- pandora_server/DEBIAN/control | 2 +- pandora_server/DEBIAN/make_deb_package.sh | 2 +- pandora_server/lib/PandoraFMS/Config.pm | 2 +- pandora_server/lib/PandoraFMS/PluginTools.pm | 2 +- pandora_server/pandora_server.redhat.spec | 2 +- pandora_server/pandora_server.spec | 2 +- pandora_server/pandora_server_installer | 2 +- pandora_server/util/pandora_db.pl | 2 +- pandora_server/util/pandora_manage.pl | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 255369ec50..44d1bcd1db 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.738-190910 +Version: 7.0NG.738-190911 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index d8a9edb81f..f307703547 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190910" +pandora_version="7.0NG.738-190911" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index b2aa44bf57..3bc7f95a14 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -42,7 +42,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.738'; -use constant AGENT_BUILD => '190910'; +use constant AGENT_BUILD => '190911'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index 6cb9511740..962c581eb4 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190910 +%define release 190911 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index 4d92dceec8..5e23b721d5 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190910 +%define release 190911 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index fb2d0d497f..23b842c33d 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190910" +PI_BUILD="190911" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index 41ca38cb18..e258a3c759 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{190910} +{190911} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 32a7a4e667..8f5fd6be91 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.738(Build 190910)") +#define PANDORA_VERSION ("7.0NG.738(Build 190911)") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index 0792a3830d..f19e26659f 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.738(Build 190910))" + VALUE "ProductVersion", "(7.0NG.738(Build 190911))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index 492c6c2e8d..7d75b987dd 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.738-190910 +Version: 7.0NG.738-190911 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index 061f4e26a8..e1576a1f87 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190910" +pandora_version="7.0NG.738-190911" package_pear=0 package_pandora=1 diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index 40f90a23e8..e7ccc00a4d 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC190910'; +$build_version = 'PC190911'; $pandora_version = 'v7.0NG.738'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/install.php b/pandora_console/install.php index 8db1605ace..1d055f0087 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@ <div style='height: 10px'> <?php $version = '7.0NG.738'; - $build = '190910'; + $build = '190911'; $banner = "v$version Build $build"; error_reporting(0); diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec index 98b32aa5f4..f71fdaf43e 100644 --- a/pandora_console/pandora_console.redhat.spec +++ b/pandora_console/pandora_console.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190910 +%define release 190911 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec index ff32401349..d2774ad91f 100644 --- a/pandora_console/pandora_console.rhel7.spec +++ b/pandora_console/pandora_console.rhel7.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190910 +%define release 190911 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec index 2f73a11a49..c1e6899e0c 100644 --- a/pandora_console/pandora_console.spec +++ b/pandora_console/pandora_console.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190910 +%define release 190911 %define httpd_name httpd # User and Group under which Apache is running %define httpd_name apache2 diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control index 9b3c18d64d..6c8ca0aeed 100644 --- a/pandora_server/DEBIAN/control +++ b/pandora_server/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-server -Version: 7.0NG.738-190910 +Version: 7.0NG.738-190911 Architecture: all Priority: optional Section: admin diff --git a/pandora_server/DEBIAN/make_deb_package.sh b/pandora_server/DEBIAN/make_deb_package.sh index 29331a2c9d..47c2524a42 100644 --- a/pandora_server/DEBIAN/make_deb_package.sh +++ b/pandora_server/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190910" +pandora_version="7.0NG.738-190911" package_cpan=0 package_pandora=1 diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 5a5ce64a27..845abf64fd 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -45,7 +45,7 @@ our @EXPORT = qw( # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190910"; +my $pandora_build = "190911"; our $VERSION = $pandora_version." ".$pandora_build; # Setup hash diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index ef1c654689..3344bc65e0 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -32,7 +32,7 @@ our @ISA = qw(Exporter); # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190910"; +my $pandora_build = "190911"; our $VERSION = $pandora_version." ".$pandora_build; our %EXPORT_TAGS = ( 'all' => [ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index e9026587a6..b639e17a76 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190910 +%define release 190911 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index adf070d130..a137157567 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190910 +%define release 190911 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index 167aa068fb..233e445841 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190910" +PI_BUILD="190911" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index bfb97460aa..de5e222084 100644 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -34,7 +34,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.738 PS190910"; +my $version = "7.0NG.738 PS190911"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index 98cca10392..fb5e640f2c 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.738 PS190910"; +my $version = "7.0NG.738 PS190911"; # save program name for logging my $progname = basename($0); From 39d5285720a3037546a119b4023eb3340b8bee78 Mon Sep 17 00:00:00 2001 From: Ramon Novoa <rnovoa@artica.es> Date: Wed, 11 Sep 2019 09:25:40 +0200 Subject: [PATCH 40/79] Re-read the configuration from the DB periodically. --- pandora_server/bin/pandora_server | 6 ++++-- pandora_server/lib/PandoraFMS/Config.pm | 6 ++++-- pandora_server/lib/PandoraFMS/Sendmail.pm | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/pandora_server/bin/pandora_server b/pandora_server/bin/pandora_server index bb177be783..1209922537 100755 --- a/pandora_server/bin/pandora_server +++ b/pandora_server/bin/pandora_server @@ -365,9 +365,11 @@ sub pandora_server_tasks ($) { # COMMON TASKS (master and non-master) # --------------------------------------------------------------- - - # Rotate Log File if (($counter % 30) == 0) { + # Update configuration options from the console. + pandora_get_sharedconfig ($pa_config, $dbh); + + # Rotate the log file. pandora_rotate_logfile($pa_config); # Set event storm protection diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 886a04e23e..1c23875688 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -189,7 +189,7 @@ sub pandora_get_sharedconfig ($$) { $pa_config->{'rb_product_name'} = 'Pandora FMS' unless (defined ($pa_config->{'rb_product_name'}) && $pa_config->{'rb_product_name'} ne ''); # Mail transport agent configuration. Local configuration takes precedence. - if ($pa_config->{"mta_address"} eq '') { + if ($pa_config->{"mta_local"} eq 0) { $pa_config->{"mta_address"} = pandora_get_tconfig_token ($dbh, 'email_smtpServer', ''); $pa_config->{"mta_from"} = '"' . pandora_get_tconfig_token ($dbh, 'email_from_name', 'Pandora FMS') . '" <' . pandora_get_tconfig_token ($dbh, 'email_from_dir', 'pandora@pandorafms.org') . '>'; @@ -336,7 +336,8 @@ sub pandora_load_config { $pa_config->{"mta_pass"} = ''; # Introduced on 2.0 $pa_config->{"mta_auth"} = 'none'; # Introduced on 2.0 (Support LOGIN PLAIN CRAM-MD5 DIGEST-MD) $pa_config->{"mta_from"} = 'pandora@localhost'; # Introduced on 2.0 - $pa_config->{"mta_encryption"} = 'none'; + $pa_config->{"mta_encryption"} = 'none'; # 7.0 739 + $pa_config->{"mta_local"} = 0; # 7.0 739 $pa_config->{"mail_in_separate"} = 1; # 1: eMail deliver alert mail in separate mails. # 0: eMail deliver 1 mail with all destination. @@ -610,6 +611,7 @@ sub pandora_load_config { } elsif ($parametro =~ m/^mta_address\s(.*)/i) { $pa_config->{'mta_address'}= clean_blank($1); + $pa_config->{'mta_local'}=1; } elsif ($parametro =~ m/^mta_port\s(.*)/i) { $pa_config->{'mta_port'}= clean_blank($1); diff --git a/pandora_server/lib/PandoraFMS/Sendmail.pm b/pandora_server/lib/PandoraFMS/Sendmail.pm index 551d713dd3..0917c5a910 100644 --- a/pandora_server/lib/PandoraFMS/Sendmail.pm +++ b/pandora_server/lib/PandoraFMS/Sendmail.pm @@ -278,7 +278,7 @@ sub sendmail { } $smtp = $mail{'Smtp'} || $mail{'Server'}; - unshift @{$mailcfg{'smtp'}}, $smtp if ($smtp and $mailcfg{'smtp'}->[0] ne $smtp); + $mailcfg{'smtp'}->[0] = $smtp if ($smtp and $mailcfg{'smtp'}->[0] ne $smtp); $encryption = $mail{'Encryption'} || $mail{'Encryption'}; From 4f2b2df1b0d3b9ee9cd2949ae97a2c2b1fb1634b Mon Sep 17 00:00:00 2001 From: Ramon Novoa <rnovoa@artica.es> Date: Wed, 11 Sep 2019 12:42:52 +0200 Subject: [PATCH 41/79] Comment mta_address by default. --- pandora_server/conf/pandora_server.conf.new | 3 ++- pandora_server/conf/pandora_server.conf.windows | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/pandora_server/conf/pandora_server.conf.new b/pandora_server/conf/pandora_server.conf.new index 89b9cde24d..6d92d7417d 100644 --- a/pandora_server/conf/pandora_server.conf.new +++ b/pandora_server/conf/pandora_server.conf.new @@ -226,8 +226,9 @@ recon_threads 1 dataserver_threads 1 # mta_address: External Mailer (MTA) IP Address to be used by Pandora FMS internal email capabilities +# If not set, the MTA configuration specified in the Pandora FMS Console will be used. -mta_address localhost +#mta_address localhost # mta_port, this is the mail server port (default 25) diff --git a/pandora_server/conf/pandora_server.conf.windows b/pandora_server/conf/pandora_server.conf.windows index 19bc989008..c7c5db64b4 100644 --- a/pandora_server/conf/pandora_server.conf.windows +++ b/pandora_server/conf/pandora_server.conf.windows @@ -214,6 +214,7 @@ recon_threads 2 dataserver_threads 2 # mta_address: External Mailer (MTA) IP Address to be used by Pandora FMS internal email capabilities +# If not set, the MTA configuration specified in the Pandora FMS Console will be used. #mta_address localhost From 9809443016dc0b65431c161c6c1251399035c6bd Mon Sep 17 00:00:00 2001 From: Ramon Novoa <rnovoa@artica.es> Date: Wed, 11 Sep 2019 13:36:14 +0200 Subject: [PATCH 42/79] Add IO::Socket::SSL to the list of dependencies. --- pandora_server/DEBIAN/control | 2 +- pandora_server/pandora_server.redhat.spec | 2 +- pandora_server/pandora_server.spec | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control index 8cafd9c319..3a29a12a66 100644 --- a/pandora_server/DEBIAN/control +++ b/pandora_server/DEBIAN/control @@ -6,5 +6,5 @@ Section: admin Installed-Size: 640 Maintainer: ÁRTICA ST <info@artica.es> Homepage: http://pandorafms.org/ -Depends: perl (>= 5.8), libdbi-perl, libdbd-mysql-perl, libtime-format-perl, libnetaddr-ip-perl, libtime-format-perl, libxml-simple-perl, libxml-twig-perl, libhtml-parser-perl, snmp, snmpd, traceroute, xprobe2, nmap, sudo, libwww-perl, libsocket6-perl, libio-socket-inet6-perl, snmp-mibs-downloader, libjson-perl, libnet-telnet-perl, libencode-locale-perl, libgeo-ip-perl +Depends: perl (>= 5.8), libdbi-perl, libdbd-mysql-perl, libtime-format-perl, libnetaddr-ip-perl, libtime-format-perl, libxml-simple-perl, libxml-twig-perl, libhtml-parser-perl, snmp, snmpd, traceroute, xprobe2, nmap, sudo, libwww-perl, libsocket6-perl, libio-socket-inet6-perl, libio-socket-ssl-perl, snmp-mibs-downloader, libjson-perl, libnet-telnet-perl, libencode-locale-perl, libgeo-ip-perl Description: Pandora FMS is a monitoring system for big IT environments. It uses remote tests, or local agents to grab information. Pandora supports all standard OS (Linux, AIX, HP-UX, Solaris and Windows XP,2000/2003), and support multiple setups in HA enviroments. This is the server package. Server makes the remote checks and process information transfer by Pandora FMS agents to the server. diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index c8d7c85652..232f696caa 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -27,7 +27,7 @@ Requires: perl(DBI) perl(DBD::mysql) Requires: perl(HTTP::Request::Common) perl(LWP::Simple) perl(LWP::UserAgent) Requires: perl(XML::Simple) perl(XML::Twig) net-snmp-utils Requires: perl(NetAddr::IP) net-snmp net-tools -Requires: perl(IO::Socket::INET6) perl(Net::Telnet) +Requires: perl(IO::Socket::INET6) perl(IO::Socket::SSL) perl(Net::Telnet) Requires: nmap sudo perl(JSON) Requires: perl(Time::HiRes) perl(Encode::Locale) Requires: perl perl(Sys::Syslog) perl(HTML::Entities) perl(Geo::IP) diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index f368d394bf..3174fc1493 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -24,7 +24,7 @@ Provides: %{name}-%{version} Requires: perl-DBI perl-DBD-mysql perl-libwww-perl Requires: perl-NetAddr-IP net-snmp net-tools perl-XML-Twig Requires: nmap sudo perl-HTML-Tree perl-XML-Simple perl-Net-Telnet -Requires: perl-IO-Socket-INET6 perl-Socket6 snmp-mibs perl-JSON +Requires: perl-IO-Socket-INET6 perl-Socket6 perl-IO-Socket-SSL snmp-mibs perl-JSON Requires: perl-Encode-Locale perl-Geo-IP %description From d9dc03dd91cdf59c48e8e8cfb756abe9c0607361 Mon Sep 17 00:00:00 2001 From: Daniel Maya <daniel.maya@artica.es> Date: Wed, 11 Sep 2019 18:08:40 +0200 Subject: [PATCH 43/79] Fixed max,min,avg report --- .../include/functions_reporting.php | 374 ++++-------------- .../include/functions_reporting_html.php | 130 +++++- 2 files changed, 197 insertions(+), 307 deletions(-) diff --git a/pandora_console/include/functions_reporting.php b/pandora_console/include/functions_reporting.php index 4abf5152c1..536449c6bc 100755 --- a/pandora_console/include/functions_reporting.php +++ b/pandora_console/include/functions_reporting.php @@ -4785,12 +4785,10 @@ function reporting_value($report, $content, $type, $pdf=false) 'period' => $content['period'], 'width' => '600px', 'pure' => false, - // true 'date' => $report['datetime'], 'only_image' => $only_image, 'homeurl' => ui_get_full_url(false, false, false, false), 'ttl' => 1, - // 2 'type_graph' => $config['type_module_charts'], 'time_interval' => $content['lapse'], 'server_id' => $id_meta, @@ -4800,323 +4798,105 @@ function reporting_value($report, $content, $type, $pdf=false) switch ($type) { case 'max': - if ($content['lapse_calc'] == 0) { - $value = reporting_get_agentmodule_data_max( - $content['id_agent_module'], - $content['period'], - $report['datetime'] - ); - if (!$config['simple_module_value']) { - $formated_value = $value; - } else { - $formated_value = format_for_graph($value, $config['graph_precision']).' '.$unit; - } - } else { - $value = ' - <table border="0" style="margin:0 auto;text-align:center;"> - <tr> - <td width="400px;" height="20%;">'; - if ($content['visual_format'] == 1 || $content['visual_format'] == 2 || $content['visual_format'] == 3) { - $value .= ' - <table style="width:90%;margin:0 auto;background-color:#eee;border: solid lightgray 1px;"> - <tr> - <th style="padding:5px;background-color:#82b92e;"> - '.__('Agent').' - </th> - <th style="padding:5px;background-color:#82b92e;"> - '.__('Module').' - </th> - <th style="padding:5px;background-color:#82b92e;"> - '.__('Maximum').' - </th> - <tr> - <td style="padding:5px;"> - '.$agent_name.' - </td> - <td style="padding:5px;"> - '.$module_name.' - </td> - <td style="padding:5px;"> - '.format_for_graph(reporting_get_agentmodule_data_max($content['id_agent_module'], $content['period'], $report['datetime']), $config['graph_precision']).' '.$unit.' - </td> - </tr> - </table>'; - } - - $value .= ' - </td> - <td rowspan="2" width="150px"> - </td> - <td rowspan="2">'; - - if ($content['visual_format'] == 2 || $content['visual_format'] == 3) { - $params['force_interval'] = 'max_only'; - $value .= grafico_modulo_sparse($params); - } - - $value .= ' - - </td> - </tr> - <tr> - <td>'; - - if ($content['visual_format'] == 1 || $content['visual_format'] == 3) { - $value .= ' - <table style="width:90%;margin:0 auto;margin-top:30px;background-color:#eee;border: solid lightgray 1px;"> - <tr> - <th style="padding:5px;background-color:#82b92e;"> - '.__('Lapse').' - </th> - <th style="padding:5px;background-color:#82b92e;"> - '.__('Maximum').' - </th> - </tr> - <tr>'; - $time_begin = db_get_row_sql('select utimestamp from tagente_datos where id_agente_modulo ='.$content['id_agent_module'], true); - $date_reference = getdate(); - - for ($i = $date_reference[0]; $i > ($date_reference[0] - $content['period']); $i -= $content['lapse']) { - $value .= '<tr><td style="padding:5px;">'.date('Y-m-d H:i:s', ($i - $content['lapse'] + 1)).' to '.date('Y-m-d H:i:s', $i).'</td><td>'; - - if ($i > $time_begin['utimestamp']) { - $value .= format_for_graph( - reporting_get_agentmodule_data_max( - $content['id_agent_module'], - $content['lapse'], - $i - ), - $config['graph_precision'] - ).' '.$unit.'</td></tr>'; - } else { - $value .= 'N/A</td></tr>'; - } - } - - $value .= '</table>'; - } - - $value .= ' - </td> - </tr> - </table>'; - - $formated_value = $value; - } - break; - case 'min': - if ($content['lapse_calc'] == 0) { - $value = reporting_get_agentmodule_data_min( - $content['id_agent_module'], - $content['period'], - $report['datetime'] - ); - - if (!$config['simple_module_value']) { - $formated_value = $value; - } else { - $formated_value = format_for_graph($value, $config['graph_precision']).' '.$unit; - } - } else { - $value = ' - <table border="0" style="margin:0 auto;text-align:center;"> - <tr> - <td width="400px;" height="20%;">'; - - if ($content['visual_format'] == 1 || $content['visual_format'] == 2 || $content['visual_format'] == 3) { - $value .= ' - <table style="width:90%;margin:0 auto;background-color:#eee;border: solid lightgray 1px;"> - <tr> - <th style="padding:5px;background-color:#82b92e;"> - '.__('Agent').' - </th> - <th style="padding:5px;background-color:#82b92e;"> - '.__('Module').' - </th> - <th style="padding:5px;background-color:#82b92e;"> - '.__('Minimum').' - </th> - <tr> - <td style="padding:5px;"> - '.$agent_name.' - </td> - <td style="padding:5px;"> - '.$module_name.' - </td> - <td style="padding:5px;"> - '.format_for_graph(reporting_get_agentmodule_data_min($content['id_agent_module'], $content['period'], $report['datetime']), $config['graph_precision']).' '.$unit.' - </td> - </tr> - </table>'; - } - - $value .= ' - </td> - <td rowspan="2" width="150px"> - </td> - <td rowspan="2">'; - - if ($content['visual_format'] == 2 || $content['visual_format'] == 3) { - $params['force_interval'] = 'min_only'; - $value .= grafico_modulo_sparse($params); - } - - $value .= ' - </td> - </tr> - <tr> - <td>'; - - if ($content['visual_format'] == 1 || $content['visual_format'] == 3) { - $value .= ' - <table style="width:90%;margin:0 auto;margin-top:30px;background-color:#eee;border: solid lightgray 1px;"> - <tr> - <th style="padding:5px;background-color:#82b92e;"> - '.__('Lapse').' - </th> - <th style="padding:5px;background-color:#82b92e;"> - '.__('Minimum').' - </th> - </tr> - <tr>'; - $time_begin = db_get_row_sql('select utimestamp from tagente_datos where id_agente_modulo ='.$content['id_agent_module']); - $date_reference = getdate(); - - for ($i = $date_reference[0]; $i > ($date_reference[0] - $content['period']); $i -= $content['lapse']) { - $value .= '<tr><td style="padding:5px;">'.date('Y-m-d H:i:s', ($i - $content['lapse'] + 1)).' to '.date('Y-m-d H:i:s', $i).'</td><td>'; - - if ($i > $time_begin['utimestamp']) { - $value .= format_for_graph( - reporting_get_agentmodule_data_min( - $content['id_agent_module'], - $content['lapse'], - $i - ), - $config['graph_precision'] - ).' '.$unit.'</td></tr>'; - } else { - $value .= 'N/A</td></tr>'; - } - } - - $value .= '</table>'; - } - - $value .= ' - - </td> - </tr> - </table>'; - - $formated_value = $value; - } - break; - case 'avg': if ($content['lapse_calc'] == 0) { - $value = reporting_get_agentmodule_data_average( - $content['id_agent_module'], - $content['period'], - $report['datetime'] - ); + switch ($type) { + case 'max': + $value = reporting_get_agentmodule_data_max( + $content['id_agent_module'], + $content['period'], + $report['datetime'] + ); + break; + + case 'min': + $value = reporting_get_agentmodule_data_min( + $content['id_agent_module'], + $content['period'], + $report['datetime'] + ); + break; + + case 'avg': + $value = reporting_get_agentmodule_data_average( + $content['id_agent_module'], + $content['period'], + $report['datetime'] + ); + break; + } + if (!$config['simple_module_value']) { $formated_value = $value; } else { $formated_value = format_for_graph($value, $config['graph_precision']).' '.$unit; } } else { - $value = ' - <table border="0" style="margin:0 auto;text-align:center;"> - <tr> - <td width="400px;" height="20%;">'; + $return['visual_format'] = $content['visual_format']; - if ($content['visual_format'] == 1 || $content['visual_format'] == 2 || $content['visual_format'] == 3) { - $value .= ' - <table style="width:90%;margin:0 auto;background-color:#eee;border: solid lightgray 1px;"> - <tr> - <th style="padding:5px;background-color:#82b92e;"> - '.__('Agent').' - </th> - <th style="padding:5px;background-color:#82b92e;"> - '.__('Module').' - </th> - <th style="padding:5px;background-color:#82b92e;"> - '.__('Average').' - </th> - <tr> - <td style="padding:5px;"> - '.$agent_name.' - </td> - <td style="padding:5px;"> - '.$module_name.' - </td> - <td style="padding:5px;"> - '.format_for_graph(reporting_get_agentmodule_data_average($content['id_agent_module'], $content['period'], $report['datetime']), $config['graph_precision']).' '.$unit.' - </td> - </tr> - </table>'; + switch ($type) { + case 'max': + $params['force_interval'] = 'max_only'; + $value = format_for_graph(reporting_get_agentmodule_data_max($content['id_agent_module'], $content['period'], $report['datetime']), $config['graph_precision']).' '.$unit; + break; + + case 'min': + $params['force_interval'] = 'min_only'; + $value = format_for_graph(reporting_get_agentmodule_data_min($content['id_agent_module'], $content['period'], $report['datetime']), $config['graph_precision']).' '.$unit; + break; + + case 'avg': + $params['force_interval'] = 'avg_only'; + $value = format_for_graph(reporting_get_agentmodule_data_average($content['id_agent_module'], $content['period'], $report['datetime']), $config['graph_precision']).' '.$unit; + break; } - $value .= ' - </td> - <td rowspan="2" width="150px"> - </td> - <td rowspan="2">'; - if ($content['visual_format'] == 2 || $content['visual_format'] == 3) { - $params['force_interval'] = 'avg_only'; - $value .= grafico_modulo_sparse($params); + $return['data'][] = [ + __('Agent') => $agent_name, + __('Module') => $module_name, + __('Maximun') => $value, + ]; + + if ($content['visual_format'] != 1) { + $graph = grafico_modulo_sparse($params); + $return['data'][] = ['value' => $graph]; } - $value .= ' - - </td> - </tr> - <tr> - <td>'; - - if ($content['visual_format'] == 1 || $content['visual_format'] == 3) { - $value .= ' - <table style="width:90%;margin:0 auto;margin-top:30px;background-color:#eee;border: solid lightgray 1px;"> - <tr> - <th style="padding:5px;background-color:#82b92e;"> - '.__('Lapse').' - </th> - <th style="padding:5px;background-color:#82b92e;"> - '.__('Average').' - </th> - </tr> - <tr>'; - $time_begin = db_get_row_sql('select utimestamp from tagente_datos where id_agente_modulo ='.$content['id_agent_module']); + if ($content['visual_format'] != 2) { + $time_begin = db_get_row_sql('select utimestamp from tagente_datos where id_agente_modulo ='.$content['id_agent_module'], true); $date_reference = getdate(); - for ($i = $date_reference[0]; $i > ($date_reference[0] - $content['period']); $i -= $content['lapse']) { - $value .= '<tr><td style="padding:5px;">'.date('Y-m-d H:i:s', ($i - $content['lapse'] + 1)).' to '.date('Y-m-d H:i:s', $i).'</td><td>'; + $row = []; + $row[__('Lapse')] = date('Y-m-d H:i:s', ($i - $content['lapse'] + 1)).' to '.date('Y-m-d H:i:s', $i); if ($i > $time_begin['utimestamp']) { - $value .= format_for_graph( - reporting_get_agentmodule_data_average( - $content['id_agent_module'], - $content['lapse'], - $i - ), - $config['graph_precision'] - ).' '.$unit.'</td></tr>'; - } else { - $value .= 'N/A</td></tr>'; - } - } + switch ($type) { + case 'max': + $row[__('Maximun')] = format_for_graph(reporting_get_agentmodule_data_max($content['id_agent_module'], $content['lapse'], $i), $config['graph_precision']).' '.$unit; + break; - $value .= '</table>'; + case 'min': + $row[__('Maximun')] = format_for_graph(reporting_get_agentmodule_data_min($content['id_agent_module'], $content['lapse'], $i), $config['graph_precision']).' '.$unit; + break; + + case 'avg': + $row[__('Maximun')] = format_for_graph(reporting_get_agentmodule_data_average($content['id_agent_module'], $content['lapse'], $i), $config['graph_precision']).' '.$unit; + break; + } + } else { + $row[__('Maximun')] = 'N/A'; + } + + $return['data'][] = $row; + } } - $value .= ' - - </td> - </tr> - </table>'; + if ($config['metaconsole']) { + metaconsole_restore_db(); + } - $formated_value = $value; + return reporting_check_structure_content($return); } break; diff --git a/pandora_console/include/functions_reporting_html.php b/pandora_console/include/functions_reporting_html.php index 6a7d60c620..c2ace5699e 100644 --- a/pandora_console/include/functions_reporting_html.php +++ b/pandora_console/include/functions_reporting_html.php @@ -2784,20 +2784,130 @@ function reporting_html_value(&$table, $item, $mini, $only_value=false, $check_e $font_size = '3'; } - $table->colspan['data']['cell'] = 3; - $table->cellstyle['data']['cell'] = 'text-align: left;'; + if (isset($item['visual_format']) && $item['visual_format'] != 0 + && ($item['type'] == 'max_value' || $item['type'] == 'min_value' || $item['type'] == 'avg_value') + ) { + $table2 = new stdClass(); + $table2->width = '100%'; + switch ($item['type']) { + case 'max_value': + $table2->head = [ + __('Agent'), + __('Module'), + __('Maximun'), + ]; + break; - $table->data['data']['cell'] = '<p style="font: bold '.$font_size.'em Arial, Sans-serif; color: #000000;">'; + case 'min_value': + $table2->head = [ + __('Agent'), + __('Module'), + __('Minimun'), + ]; + break; - if ($check_empty && empty($item['data']['value'])) { - $table->data['data']['cell'] .= __('Unknown'); - } else if ($only_value) { - $table->data['data']['cell'] .= $item['data']['value']; + case 'avg_value': + $table2->head = [ + __('Agent'), + __('Module'), + __('Average'), + ]; + break; + } + + $table2->data = []; + + $data = $item['data'][0]; + + $row = [ + $data[__('Agent')], + $data[__('Module')], + $data[__('Maximun')], + ]; + + $table2->data[] = $row; + + $table2->title = $item['title']; + $table2->titleclass = 'title_table_pdf'; + $table2->titlestyle = 'text-align:left;'; + $table->colspan[1][0] = 3; + $table->colspan[2][0] = 3; + $table->colspan[3][0] = 3; + + array_push($table->data, html_print_table($table2, true)); + unset($item['data'][0]); + + if ($item['visual_format'] != 1) { + $value = $item['data'][1]['value']; + array_push($table->data, $value); + unset($item['data'][1]); + } + + if ($item['visual_format'] != 2) { + $table1 = new stdClass(); + $table1->width = '100%'; + switch ($item['type']) { + case 'max_value': + $table1->head = [ + __('Lapse'), + __('Maximun'), + ]; + break; + + case 'min_value': + $table1->head = [ + __('Lapse'), + __('Minimun'), + ]; + break; + + case 'avg_value': + $table1->head = [ + __('Lapse'), + __('Average'), + ]; + break; + } + + $table1->data = []; + foreach ($item['data'] as $data) { + if (!is_numeric($data[__('Maximun')])) { + $row = [ + $data[__('Lapse')], + $data[__('Maximun')], + ]; + } else { + $row = [ + $data[__('Lapse')], + remove_right_zeros(number_format($data[__('Maximun')], $config['graph_precision'])), + ]; + } + + $table1->data[] = $row; + } + + $table1->title = $item['title']; + $table1->titleclass = 'title_table_pdf'; + $table1->titlestyle = 'text-align:left;'; + + array_push($table->data, html_print_table($table1, true)); + } } else { - $table->data['data']['cell'] .= $item['data']['formated_value']; - } + $table->colspan['data']['cell'] = 3; + $table->cellstyle['data']['cell'] = 'text-align: left;'; - $table->data['data']['cell'] .= '</p>'; + $table->data['data']['cell'] = '<p style="font: bold '.$font_size.'em Arial, Sans-serif; color: #000000;">'; + + if ($check_empty && empty($item['data']['value'])) { + $table->data['data']['cell'] .= __('Unknown'); + } else if ($only_value) { + $table->data['data']['cell'] .= $item['data']['value']; + } else { + $table->data['data']['cell'] .= $item['data']['formated_value']; + } + + $table->data['data']['cell'] .= '</p>'; + } } From 602c9ccb5eab20f6f0725ec6dce1413cb0d16073 Mon Sep 17 00:00:00 2001 From: artica <artica.devel@gmail.com> Date: Thu, 12 Sep 2019 00:01:26 +0200 Subject: [PATCH 44/79] Auto-updated build strings. --- pandora_agents/unix/DEBIAN/control | 2 +- pandora_agents/unix/DEBIAN/make_deb_package.sh | 2 +- pandora_agents/unix/pandora_agent | 2 +- pandora_agents/unix/pandora_agent.redhat.spec | 2 +- pandora_agents/unix/pandora_agent.spec | 2 +- pandora_agents/unix/pandora_agent_installer | 2 +- pandora_agents/win32/installer/pandora.mpi | 2 +- pandora_agents/win32/pandora.cc | 2 +- pandora_agents/win32/versioninfo.rc | 2 +- pandora_console/DEBIAN/control | 2 +- pandora_console/DEBIAN/make_deb_package.sh | 2 +- pandora_console/include/config_process.php | 2 +- pandora_console/install.php | 2 +- pandora_console/pandora_console.redhat.spec | 2 +- pandora_console/pandora_console.rhel7.spec | 2 +- pandora_console/pandora_console.spec | 2 +- pandora_server/DEBIAN/control | 2 +- pandora_server/DEBIAN/make_deb_package.sh | 2 +- pandora_server/lib/PandoraFMS/Config.pm | 2 +- pandora_server/lib/PandoraFMS/PluginTools.pm | 2 +- pandora_server/pandora_server.redhat.spec | 2 +- pandora_server/pandora_server.spec | 2 +- pandora_server/pandora_server_installer | 2 +- pandora_server/util/pandora_db.pl | 2 +- pandora_server/util/pandora_manage.pl | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 44d1bcd1db..5480607cec 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.738-190911 +Version: 7.0NG.738-190912 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index f307703547..b7dc8d9876 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190911" +pandora_version="7.0NG.738-190912" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index 3bc7f95a14..e1f08acc1c 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -42,7 +42,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.738'; -use constant AGENT_BUILD => '190911'; +use constant AGENT_BUILD => '190912'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index 962c581eb4..185e5e26f7 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190911 +%define release 190912 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index 5e23b721d5..8be1f7daa4 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190911 +%define release 190912 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index 23b842c33d..dff6af01fa 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190911" +PI_BUILD="190912" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index e258a3c759..44e1b88f2e 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{190911} +{190912} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 8f5fd6be91..068df33b71 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.738(Build 190911)") +#define PANDORA_VERSION ("7.0NG.738(Build 190912)") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index f19e26659f..296ba8e550 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.738(Build 190911))" + VALUE "ProductVersion", "(7.0NG.738(Build 190912))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index 7d75b987dd..7e7ccb472e 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.738-190911 +Version: 7.0NG.738-190912 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index e1576a1f87..669f032651 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190911" +pandora_version="7.0NG.738-190912" package_pear=0 package_pandora=1 diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index e7ccc00a4d..60ae8204a7 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC190911'; +$build_version = 'PC190912'; $pandora_version = 'v7.0NG.738'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/install.php b/pandora_console/install.php index 1d055f0087..085bc511ca 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@ <div style='height: 10px'> <?php $version = '7.0NG.738'; - $build = '190911'; + $build = '190912'; $banner = "v$version Build $build"; error_reporting(0); diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec index f71fdaf43e..213ef4dd60 100644 --- a/pandora_console/pandora_console.redhat.spec +++ b/pandora_console/pandora_console.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190911 +%define release 190912 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec index d2774ad91f..64dc0f0b38 100644 --- a/pandora_console/pandora_console.rhel7.spec +++ b/pandora_console/pandora_console.rhel7.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190911 +%define release 190912 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec index c1e6899e0c..d0e637f608 100644 --- a/pandora_console/pandora_console.spec +++ b/pandora_console/pandora_console.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190911 +%define release 190912 %define httpd_name httpd # User and Group under which Apache is running %define httpd_name apache2 diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control index 6c8ca0aeed..5efaaacf68 100644 --- a/pandora_server/DEBIAN/control +++ b/pandora_server/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-server -Version: 7.0NG.738-190911 +Version: 7.0NG.738-190912 Architecture: all Priority: optional Section: admin diff --git a/pandora_server/DEBIAN/make_deb_package.sh b/pandora_server/DEBIAN/make_deb_package.sh index 47c2524a42..a22ac428b8 100644 --- a/pandora_server/DEBIAN/make_deb_package.sh +++ b/pandora_server/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190911" +pandora_version="7.0NG.738-190912" package_cpan=0 package_pandora=1 diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 845abf64fd..2149c2d867 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -45,7 +45,7 @@ our @EXPORT = qw( # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190911"; +my $pandora_build = "190912"; our $VERSION = $pandora_version." ".$pandora_build; # Setup hash diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index 3344bc65e0..3d76917db1 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -32,7 +32,7 @@ our @ISA = qw(Exporter); # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190911"; +my $pandora_build = "190912"; our $VERSION = $pandora_version." ".$pandora_build; our %EXPORT_TAGS = ( 'all' => [ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index b639e17a76..a472f9273f 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190911 +%define release 190912 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index a137157567..492cc2b958 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190911 +%define release 190912 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index 233e445841..76eca733a7 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190911" +PI_BUILD="190912" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index 62985fffea..f42c1e7898 100644 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -34,7 +34,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.738 PS190911"; +my $version = "7.0NG.738 PS190912"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index fb5e640f2c..1d058f810f 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.738 PS190911"; +my $version = "7.0NG.738 PS190912"; # save program name for logging my $progname = basename($0); From 3d8486659e505c9200857695a22fe5411a1c1d1b Mon Sep 17 00:00:00 2001 From: Daniel Maya <daniel.maya@artica.es> Date: Thu, 12 Sep 2019 12:52:40 +0200 Subject: [PATCH 45/79] Fixed period in template --- pandora_console/include/functions_reporting.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pandora_console/include/functions_reporting.php b/pandora_console/include/functions_reporting.php index 536449c6bc..3494eed389 100755 --- a/pandora_console/include/functions_reporting.php +++ b/pandora_console/include/functions_reporting.php @@ -4865,8 +4865,7 @@ function reporting_value($report, $content, $type, $pdf=false) if ($content['visual_format'] != 2) { $time_begin = db_get_row_sql('select utimestamp from tagente_datos where id_agente_modulo ='.$content['id_agent_module'], true); - $date_reference = getdate(); - for ($i = $date_reference[0]; $i > ($date_reference[0] - $content['period']); $i -= $content['lapse']) { + for ($i = $report['datetime']; $i > ($report['datetime'] - $content['period']); $i -= $content['lapse']) { $row = []; $row[__('Lapse')] = date('Y-m-d H:i:s', ($i - $content['lapse'] + 1)).' to '.date('Y-m-d H:i:s', $i); From 2218ad7d60ec68726bda1e59e6d1b95747caeaad Mon Sep 17 00:00:00 2001 From: alejandro-campos <alejandro.campos@artica.es> Date: Thu, 12 Sep 2019 15:37:16 +0200 Subject: [PATCH 46/79] Added email check functionality --- .../godmode/setup/setup_general.php | 74 ++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/pandora_console/godmode/setup/setup_general.php b/pandora_console/godmode/setup/setup_general.php index 40678ee9c5..1385a9f193 100644 --- a/pandora_console/godmode/setup/setup_general.php +++ b/pandora_console/godmode/setup/setup_general.php @@ -58,6 +58,16 @@ global $config; check_login(); +if (is_ajax()) { + enterprise_include_once('include/functions_cron.php'); + + $test_address = get_parameter('test_address', ''); + + $res = enterprise_hook('send_email_attachment', [$test_address, __('This is an email test sent from Pandora FMS. If you can read this, your configuration works.'), __('Testing Pandora FMS email'), null]); + + echo $res; +} + $table = new StdClass(); $table->class = 'databox filters'; $table->id = 'setup_general'; @@ -348,7 +358,7 @@ echo '</fieldset>'; echo '<fieldset>'; echo '<legend>'.__('Mail configuration').'</legend>'; -$table_mail_conf->data[0][0] = __('From dir'); +$table_mail_conf->data[0][0] = __('From address'); $table_mail_conf->data[0][1] = html_print_input_text('email_from_dir', $config['email_from_dir'], '', 30, 100, true); $table_mail_conf->data[1][0] = __('From name'); @@ -369,9 +379,16 @@ $table_mail_conf->data[5][1] = html_print_input_text('email_username', $config[' $table_mail_conf->data[6][0] = __('Email password'); $table_mail_conf->data[6][1] = html_print_input_password('email_password', io_output_password($config['email_password']), '', 30, 100, true); +$uniqid = uniqid(); + +$table_mail_conf->data[7][0] = html_print_button(__('Email test'), 'email_test_dialog', false, "show_email_test('$uniqid');", 'class="sub next"', true).ui_print_help_tip(__('Check the current saved email configuration by sending a test email to a desired account.'), true); + +print_email_test_modal_window($uniqid); + html_print_input_hidden('update_config', 1); html_print_table($table_mail_conf); + echo '</fieldset>'; echo '<div class="action-buttons" style="width: '.$table->width.'">'; @@ -379,6 +396,25 @@ html_print_submit_button(__('Update'), 'update_button', false, 'class="sub upd"' echo '</div>'; echo '</form>'; +// Print the modal window for the summary of each alerts group +function print_email_test_modal_window($id) +{ + // Email config table. + $table_mail_test = new stdClass(); + $table_mail_test->width = '100%'; + $table_mail_test->class = 'databox filters'; + $table_mail_test->data = []; + $table_mail_test->style[0] = 'font-weight: bold'; + $table_mail_test->colspan[1][0] = 2; + + $table_mail_test->data[0][0] = __('Address').ui_print_help_tip(__('Email address to which the test email will be sent. Please check your inbox after email is sent.'), true); + $table_mail_test->data[0][1] = html_print_input_text('email_test_address', '', '', 40, 100, true); + + $table_mail_test->data[1][0] = html_print_button(__('Send'), 'email_test', false, '', 'class="sub next"', true).'  <span id="email_test_sent_message" style="display:none;">Email sent</span><span id="email_test_failure_message" style="display:none;">Email could not been sent</span>'; + + echo '<div id="email_test_'.$id.'" title="'.__('Check mail configuration').'" style="display:none">'.html_print_table($table_mail_test, true).'</div>'; +} + ?> <script type="text/javascript"> @@ -417,6 +453,40 @@ function show_timezone () { }); } +function show_email_test(id) { + $('#email_test_sent_message').hide(); + $('#email_test_failure_message').hide(); + + $("#email_test_"+id).dialog({ + resizable: true, + draggable: true, + modal: true, + height: 175, + width: 450, + overlay: { + opacity: 0.5, + background: "black" + } + }); +} + +function perform_email_test () { + var test_address = $('#text-email_test_address').val(); + + $.ajax({ + type: "POST", + url: "ajax.php", + data: "page=godmode/setup/setup_general&test_address="+test_address, + dataType: "html", + success: function(data) { + $('#email_test_sent_message').show(); + }, + error: function() { + $('#email_test_failure_message').show(); + }, + }); +} + $(document).ready (function () { $("#zone").attr("hidden", true); @@ -473,5 +543,7 @@ $(document).ready (function () { }); } }) + + $('input#button-email_test').click(perform_email_test); }); </script> From aa6c10584147ac24e1d51f3d694d55a158d493ac Mon Sep 17 00:00:00 2001 From: fbsanchez <fborja.sanchez@artica.es> Date: Thu, 12 Sep 2019 17:47:49 +0200 Subject: [PATCH 47/79] Update 32.sql missed ';' --- pandora_console/extras/mr/32.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandora_console/extras/mr/32.sql b/pandora_console/extras/mr/32.sql index 9227f9f702..46e02d3503 100644 --- a/pandora_console/extras/mr/32.sql +++ b/pandora_console/extras/mr/32.sql @@ -1,4 +1,4 @@ -START TRANSACTION +START TRANSACTION; ALTER TABLE `tdatabase` MODIFY `last_error` text; ALTER TABLE `tdatabase` MODIFY `host` VARCHAR(255) DEFAULT ''; From 2f45d3d6ecd6a1e0d565955df0e2d2b8800a796e Mon Sep 17 00:00:00 2001 From: artica <artica.devel@gmail.com> Date: Fri, 13 Sep 2019 00:01:11 +0200 Subject: [PATCH 48/79] Auto-updated build strings. --- pandora_agents/unix/DEBIAN/control | 2 +- pandora_agents/unix/DEBIAN/make_deb_package.sh | 2 +- pandora_agents/unix/pandora_agent | 2 +- pandora_agents/unix/pandora_agent.redhat.spec | 2 +- pandora_agents/unix/pandora_agent.spec | 2 +- pandora_agents/unix/pandora_agent_installer | 2 +- pandora_agents/win32/installer/pandora.mpi | 2 +- pandora_agents/win32/pandora.cc | 2 +- pandora_agents/win32/versioninfo.rc | 2 +- pandora_console/DEBIAN/control | 2 +- pandora_console/DEBIAN/make_deb_package.sh | 2 +- pandora_console/include/config_process.php | 2 +- pandora_console/install.php | 2 +- pandora_console/pandora_console.redhat.spec | 2 +- pandora_console/pandora_console.rhel7.spec | 2 +- pandora_console/pandora_console.spec | 2 +- pandora_server/DEBIAN/control | 2 +- pandora_server/DEBIAN/make_deb_package.sh | 2 +- pandora_server/lib/PandoraFMS/Config.pm | 2 +- pandora_server/lib/PandoraFMS/PluginTools.pm | 2 +- pandora_server/pandora_server.redhat.spec | 2 +- pandora_server/pandora_server.spec | 2 +- pandora_server/pandora_server_installer | 2 +- pandora_server/util/pandora_db.pl | 2 +- pandora_server/util/pandora_manage.pl | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 5480607cec..00e5de0dc5 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.738-190912 +Version: 7.0NG.738-190913 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index b7dc8d9876..4035bca720 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190912" +pandora_version="7.0NG.738-190913" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index e1f08acc1c..35a86a656b 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -42,7 +42,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.738'; -use constant AGENT_BUILD => '190912'; +use constant AGENT_BUILD => '190913'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index 185e5e26f7..965a1aa0d1 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190912 +%define release 190913 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index 8be1f7daa4..55bda1c48a 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190912 +%define release 190913 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index dff6af01fa..f9eaab41c0 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190912" +PI_BUILD="190913" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index 44e1b88f2e..5b62310d00 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{190912} +{190913} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 068df33b71..22d0d1eff5 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.738(Build 190912)") +#define PANDORA_VERSION ("7.0NG.738(Build 190913)") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index 296ba8e550..eb4e892c56 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.738(Build 190912))" + VALUE "ProductVersion", "(7.0NG.738(Build 190913))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index 7e7ccb472e..a9e7857cc1 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.738-190912 +Version: 7.0NG.738-190913 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index 669f032651..4b12f61d10 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190912" +pandora_version="7.0NG.738-190913" package_pear=0 package_pandora=1 diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index 60ae8204a7..b85e6ce713 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC190912'; +$build_version = 'PC190913'; $pandora_version = 'v7.0NG.738'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/install.php b/pandora_console/install.php index 085bc511ca..bcf623db56 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@ <div style='height: 10px'> <?php $version = '7.0NG.738'; - $build = '190912'; + $build = '190913'; $banner = "v$version Build $build"; error_reporting(0); diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec index 213ef4dd60..e72aa4fa98 100644 --- a/pandora_console/pandora_console.redhat.spec +++ b/pandora_console/pandora_console.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190912 +%define release 190913 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec index 64dc0f0b38..1b2607b739 100644 --- a/pandora_console/pandora_console.rhel7.spec +++ b/pandora_console/pandora_console.rhel7.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190912 +%define release 190913 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec index d0e637f608..29e49dfa69 100644 --- a/pandora_console/pandora_console.spec +++ b/pandora_console/pandora_console.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190912 +%define release 190913 %define httpd_name httpd # User and Group under which Apache is running %define httpd_name apache2 diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control index 5efaaacf68..e699a5f1f1 100644 --- a/pandora_server/DEBIAN/control +++ b/pandora_server/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-server -Version: 7.0NG.738-190912 +Version: 7.0NG.738-190913 Architecture: all Priority: optional Section: admin diff --git a/pandora_server/DEBIAN/make_deb_package.sh b/pandora_server/DEBIAN/make_deb_package.sh index a22ac428b8..e9a318fb60 100644 --- a/pandora_server/DEBIAN/make_deb_package.sh +++ b/pandora_server/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190912" +pandora_version="7.0NG.738-190913" package_cpan=0 package_pandora=1 diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 2149c2d867..84aec70255 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -45,7 +45,7 @@ our @EXPORT = qw( # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190912"; +my $pandora_build = "190913"; our $VERSION = $pandora_version." ".$pandora_build; # Setup hash diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index 3d76917db1..d0673b4223 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -32,7 +32,7 @@ our @ISA = qw(Exporter); # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190912"; +my $pandora_build = "190913"; our $VERSION = $pandora_version." ".$pandora_build; our %EXPORT_TAGS = ( 'all' => [ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index a472f9273f..547ef9e026 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190912 +%define release 190913 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index 492cc2b958..68b47d82b0 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190912 +%define release 190913 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index 76eca733a7..0197261987 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190912" +PI_BUILD="190913" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index f42c1e7898..374b742a1c 100644 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -34,7 +34,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.738 PS190912"; +my $version = "7.0NG.738 PS190913"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index 1d058f810f..53b18b8cd9 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.738 PS190912"; +my $version = "7.0NG.738 PS190913"; # save program name for logging my $progname = basename($0); From 00fc4c9238c77d0c313737304e8280c8c95be354 Mon Sep 17 00:00:00 2001 From: manuel <manuel.montes@artica.es> Date: Fri, 13 Sep 2019 09:39:09 +0200 Subject: [PATCH 49/79] Fixed bug in item type monitor report --- pandora_console/include/functions_reporting_html.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandora_console/include/functions_reporting_html.php b/pandora_console/include/functions_reporting_html.php index c2ace5699e..a15340ce4b 100644 --- a/pandora_console/include/functions_reporting_html.php +++ b/pandora_console/include/functions_reporting_html.php @@ -2532,7 +2532,7 @@ function reporting_html_monitor_report($table, $item, $mini, $pdf=0) true ).' '.__('OK').': '.remove_right_zeros( number_format( - $item['data']['ok']['formated_value'], + $item['data']['ok']['value'], $config['graph_precision'] ) ).' %</p>'; @@ -2543,7 +2543,7 @@ function reporting_html_monitor_report($table, $item, $mini, $pdf=0) true ).' '.__('Not OK').': '.remove_right_zeros( number_format( - $item['data']['fail']['formated_value'], + $item['data']['fail']['value'], $config['graph_precision'] ) ).' % '.'</p>'; From 3eabfb745602f433842da52f5f34c20adecae0bd Mon Sep 17 00:00:00 2001 From: fbsanchez <fborja.sanchez@artica.es> Date: Fri, 13 Sep 2019 11:35:57 +0200 Subject: [PATCH 50/79] Added a subroutine to get a list of enabled servers --- pandora_server/lib/PandoraFMS/Tools.pm | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/pandora_server/lib/PandoraFMS/Tools.pm b/pandora_server/lib/PandoraFMS/Tools.pm index 36050e4275..bac4574c24 100755 --- a/pandora_server/lib/PandoraFMS/Tools.pm +++ b/pandora_server/lib/PandoraFMS/Tools.pm @@ -140,6 +140,7 @@ our @EXPORT = qw( generate_agent_name_hash long_to_ip ip_to_long + get_enabled_servers ); # ID of the different servers @@ -2049,6 +2050,25 @@ sub long_to_ip { return inet_ntoa pack("N", ($ip_long)); } +############################################################################### +# Returns a list with enabled servers. +############################################################################### +sub get_enabled_servers { + my $conf = shift; + + if (ref($conf) ne "HASH") { + return (); + } + + my @server_list = map { + if ($_ =~ /server$/i && $conf->{$_} > 0) { + $_ + } else { + } + } keys %{$conf}; + + return @server_list; +} # End of function declaration # End of defined Code From a4a84c154f04c49283499880cc4d27cd1ce60e9f Mon Sep 17 00:00:00 2001 From: Daniel Maya <daniel.maya@artica.es> Date: Fri, 13 Sep 2019 12:04:30 +0200 Subject: [PATCH 51/79] Fixed refresh --- .../operation/visual_console/legacy_public_view.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pandora_console/operation/visual_console/legacy_public_view.php b/pandora_console/operation/visual_console/legacy_public_view.php index 7bea2a22c9..ab6def4f70 100644 --- a/pandora_console/operation/visual_console/legacy_public_view.php +++ b/pandora_console/operation/visual_console/legacy_public_view.php @@ -115,6 +115,7 @@ echo '</li>'; // Countdown. echo '<li class="nomn">'; echo '<div class="vc-refr">'; +echo '<div class="vc-countdown style="display: inline;"></div>'; echo '<div id="vc-refr-form">'; echo __('Refresh').':'; echo html_print_select( @@ -187,7 +188,7 @@ $ignored_params['refr'] = ''; var controls = document.getElementById('vc-controls'); autoHideElement(controls, 1000); - $('select#refr').change(function (event) { + $('#vc-controls').change(function (event) { refr = Number.parseInt(event.target.value, 10); startCountDown(refr, false); }); From bc36ed132d3284b4251ee9ebb27063da0e57dd61 Mon Sep 17 00:00:00 2001 From: artica <artica.devel@gmail.com> Date: Sat, 14 Sep 2019 00:01:23 +0200 Subject: [PATCH 52/79] Auto-updated build strings. --- pandora_agents/unix/DEBIAN/control | 2 +- pandora_agents/unix/DEBIAN/make_deb_package.sh | 2 +- pandora_agents/unix/pandora_agent | 2 +- pandora_agents/unix/pandora_agent.redhat.spec | 2 +- pandora_agents/unix/pandora_agent.spec | 2 +- pandora_agents/unix/pandora_agent_installer | 2 +- pandora_agents/win32/installer/pandora.mpi | 2 +- pandora_agents/win32/pandora.cc | 2 +- pandora_agents/win32/versioninfo.rc | 2 +- pandora_console/DEBIAN/control | 2 +- pandora_console/DEBIAN/make_deb_package.sh | 2 +- pandora_console/include/config_process.php | 2 +- pandora_console/install.php | 2 +- pandora_console/pandora_console.redhat.spec | 2 +- pandora_console/pandora_console.rhel7.spec | 2 +- pandora_console/pandora_console.spec | 2 +- pandora_server/DEBIAN/control | 2 +- pandora_server/DEBIAN/make_deb_package.sh | 2 +- pandora_server/lib/PandoraFMS/Config.pm | 2 +- pandora_server/lib/PandoraFMS/PluginTools.pm | 2 +- pandora_server/pandora_server.redhat.spec | 2 +- pandora_server/pandora_server.spec | 2 +- pandora_server/pandora_server_installer | 2 +- pandora_server/util/pandora_db.pl | 2 +- pandora_server/util/pandora_manage.pl | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 00e5de0dc5..38fb753f1e 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.738-190913 +Version: 7.0NG.738-190914 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index 4035bca720..c6aafdbf19 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190913" +pandora_version="7.0NG.738-190914" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index 35a86a656b..f363f42366 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -42,7 +42,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.738'; -use constant AGENT_BUILD => '190913'; +use constant AGENT_BUILD => '190914'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index 965a1aa0d1..3b91350cd8 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190913 +%define release 190914 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index 55bda1c48a..38f814395f 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190913 +%define release 190914 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index f9eaab41c0..21cdaf8e72 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190913" +PI_BUILD="190914" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index 5b62310d00..bf810ad5b6 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{190913} +{190914} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 22d0d1eff5..1e1036f069 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.738(Build 190913)") +#define PANDORA_VERSION ("7.0NG.738(Build 190914)") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index eb4e892c56..a98b893eab 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.738(Build 190913))" + VALUE "ProductVersion", "(7.0NG.738(Build 190914))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index a9e7857cc1..e0d41216ad 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.738-190913 +Version: 7.0NG.738-190914 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index 4b12f61d10..6ab8fde37b 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190913" +pandora_version="7.0NG.738-190914" package_pear=0 package_pandora=1 diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index b85e6ce713..cfe4e4063d 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC190913'; +$build_version = 'PC190914'; $pandora_version = 'v7.0NG.738'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/install.php b/pandora_console/install.php index bcf623db56..127bd589ea 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@ <div style='height: 10px'> <?php $version = '7.0NG.738'; - $build = '190913'; + $build = '190914'; $banner = "v$version Build $build"; error_reporting(0); diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec index e72aa4fa98..2f63668e35 100644 --- a/pandora_console/pandora_console.redhat.spec +++ b/pandora_console/pandora_console.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190913 +%define release 190914 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec index 1b2607b739..26dd958548 100644 --- a/pandora_console/pandora_console.rhel7.spec +++ b/pandora_console/pandora_console.rhel7.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190913 +%define release 190914 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec index 29e49dfa69..c7ac1a5318 100644 --- a/pandora_console/pandora_console.spec +++ b/pandora_console/pandora_console.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190913 +%define release 190914 %define httpd_name httpd # User and Group under which Apache is running %define httpd_name apache2 diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control index e699a5f1f1..d1341896bc 100644 --- a/pandora_server/DEBIAN/control +++ b/pandora_server/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-server -Version: 7.0NG.738-190913 +Version: 7.0NG.738-190914 Architecture: all Priority: optional Section: admin diff --git a/pandora_server/DEBIAN/make_deb_package.sh b/pandora_server/DEBIAN/make_deb_package.sh index e9a318fb60..0cdd3b779b 100644 --- a/pandora_server/DEBIAN/make_deb_package.sh +++ b/pandora_server/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190913" +pandora_version="7.0NG.738-190914" package_cpan=0 package_pandora=1 diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 84aec70255..06281cedfb 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -45,7 +45,7 @@ our @EXPORT = qw( # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190913"; +my $pandora_build = "190914"; our $VERSION = $pandora_version." ".$pandora_build; # Setup hash diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index d0673b4223..26359bb77e 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -32,7 +32,7 @@ our @ISA = qw(Exporter); # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190913"; +my $pandora_build = "190914"; our $VERSION = $pandora_version." ".$pandora_build; our %EXPORT_TAGS = ( 'all' => [ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index 547ef9e026..695ea38cda 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190913 +%define release 190914 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index 68b47d82b0..48156ccb9d 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190913 +%define release 190914 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index 0197261987..9985baa24e 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190913" +PI_BUILD="190914" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index 374b742a1c..60d09cabcd 100644 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -34,7 +34,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.738 PS190913"; +my $version = "7.0NG.738 PS190914"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index 53b18b8cd9..980036a448 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.738 PS190913"; +my $version = "7.0NG.738 PS190914"; # save program name for logging my $progname = basename($0); From 05eeb6f3d2c02e7efc8c0437bc35c8d84f814d00 Mon Sep 17 00:00:00 2001 From: artica <artica.devel@gmail.com> Date: Sun, 15 Sep 2019 00:01:08 +0200 Subject: [PATCH 53/79] Auto-updated build strings. --- pandora_agents/unix/DEBIAN/control | 2 +- pandora_agents/unix/DEBIAN/make_deb_package.sh | 2 +- pandora_agents/unix/pandora_agent | 2 +- pandora_agents/unix/pandora_agent.redhat.spec | 2 +- pandora_agents/unix/pandora_agent.spec | 2 +- pandora_agents/unix/pandora_agent_installer | 2 +- pandora_agents/win32/installer/pandora.mpi | 2 +- pandora_agents/win32/pandora.cc | 2 +- pandora_agents/win32/versioninfo.rc | 2 +- pandora_console/DEBIAN/control | 2 +- pandora_console/DEBIAN/make_deb_package.sh | 2 +- pandora_console/include/config_process.php | 2 +- pandora_console/install.php | 2 +- pandora_console/pandora_console.redhat.spec | 2 +- pandora_console/pandora_console.rhel7.spec | 2 +- pandora_console/pandora_console.spec | 2 +- pandora_server/DEBIAN/control | 2 +- pandora_server/DEBIAN/make_deb_package.sh | 2 +- pandora_server/lib/PandoraFMS/Config.pm | 2 +- pandora_server/lib/PandoraFMS/PluginTools.pm | 2 +- pandora_server/pandora_server.redhat.spec | 2 +- pandora_server/pandora_server.spec | 2 +- pandora_server/pandora_server_installer | 2 +- pandora_server/util/pandora_db.pl | 2 +- pandora_server/util/pandora_manage.pl | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 38fb753f1e..577fe45e78 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.738-190914 +Version: 7.0NG.738-190915 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index c6aafdbf19..6d85610008 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190914" +pandora_version="7.0NG.738-190915" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index f363f42366..cc44f924b1 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -42,7 +42,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.738'; -use constant AGENT_BUILD => '190914'; +use constant AGENT_BUILD => '190915'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index 3b91350cd8..8b14a01bf2 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190914 +%define release 190915 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index 38f814395f..c7b5f8babe 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190914 +%define release 190915 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index 21cdaf8e72..cddfccdb0a 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190914" +PI_BUILD="190915" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index bf810ad5b6..794960a6b5 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{190914} +{190915} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 1e1036f069..6dec9ff4f6 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.738(Build 190914)") +#define PANDORA_VERSION ("7.0NG.738(Build 190915)") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index a98b893eab..d9aacc7db2 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.738(Build 190914))" + VALUE "ProductVersion", "(7.0NG.738(Build 190915))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index e0d41216ad..514162ac90 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.738-190914 +Version: 7.0NG.738-190915 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index 6ab8fde37b..da342d2b91 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190914" +pandora_version="7.0NG.738-190915" package_pear=0 package_pandora=1 diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index cfe4e4063d..2b33a7df96 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC190914'; +$build_version = 'PC190915'; $pandora_version = 'v7.0NG.738'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/install.php b/pandora_console/install.php index 127bd589ea..ef90cd4bf0 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@ <div style='height: 10px'> <?php $version = '7.0NG.738'; - $build = '190914'; + $build = '190915'; $banner = "v$version Build $build"; error_reporting(0); diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec index 2f63668e35..a7153addb8 100644 --- a/pandora_console/pandora_console.redhat.spec +++ b/pandora_console/pandora_console.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190914 +%define release 190915 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec index 26dd958548..05781de553 100644 --- a/pandora_console/pandora_console.rhel7.spec +++ b/pandora_console/pandora_console.rhel7.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190914 +%define release 190915 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec index c7ac1a5318..edf41060ae 100644 --- a/pandora_console/pandora_console.spec +++ b/pandora_console/pandora_console.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190914 +%define release 190915 %define httpd_name httpd # User and Group under which Apache is running %define httpd_name apache2 diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control index d1341896bc..2c77999930 100644 --- a/pandora_server/DEBIAN/control +++ b/pandora_server/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-server -Version: 7.0NG.738-190914 +Version: 7.0NG.738-190915 Architecture: all Priority: optional Section: admin diff --git a/pandora_server/DEBIAN/make_deb_package.sh b/pandora_server/DEBIAN/make_deb_package.sh index 0cdd3b779b..dd86c020eb 100644 --- a/pandora_server/DEBIAN/make_deb_package.sh +++ b/pandora_server/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190914" +pandora_version="7.0NG.738-190915" package_cpan=0 package_pandora=1 diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 06281cedfb..713547b8be 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -45,7 +45,7 @@ our @EXPORT = qw( # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190914"; +my $pandora_build = "190915"; our $VERSION = $pandora_version." ".$pandora_build; # Setup hash diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index 26359bb77e..297160b8f2 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -32,7 +32,7 @@ our @ISA = qw(Exporter); # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190914"; +my $pandora_build = "190915"; our $VERSION = $pandora_version." ".$pandora_build; our %EXPORT_TAGS = ( 'all' => [ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index 695ea38cda..b523ca4c62 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190914 +%define release 190915 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index 48156ccb9d..ed6c88b01b 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190914 +%define release 190915 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index 9985baa24e..90e64b0eff 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190914" +PI_BUILD="190915" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index 60d09cabcd..a667e34dc8 100644 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -34,7 +34,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.738 PS190914"; +my $version = "7.0NG.738 PS190915"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index 980036a448..f0ca781da1 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.738 PS190914"; +my $version = "7.0NG.738 PS190915"; # save program name for logging my $progname = basename($0); From 2e121e2cc5b3a2f9fdf5b18d13c81e2293c78945 Mon Sep 17 00:00:00 2001 From: artica <artica.devel@gmail.com> Date: Mon, 16 Sep 2019 00:01:08 +0200 Subject: [PATCH 54/79] Auto-updated build strings. --- pandora_agents/unix/DEBIAN/control | 2 +- pandora_agents/unix/DEBIAN/make_deb_package.sh | 2 +- pandora_agents/unix/pandora_agent | 2 +- pandora_agents/unix/pandora_agent.redhat.spec | 2 +- pandora_agents/unix/pandora_agent.spec | 2 +- pandora_agents/unix/pandora_agent_installer | 2 +- pandora_agents/win32/installer/pandora.mpi | 2 +- pandora_agents/win32/pandora.cc | 2 +- pandora_agents/win32/versioninfo.rc | 2 +- pandora_console/DEBIAN/control | 2 +- pandora_console/DEBIAN/make_deb_package.sh | 2 +- pandora_console/include/config_process.php | 2 +- pandora_console/install.php | 2 +- pandora_console/pandora_console.redhat.spec | 2 +- pandora_console/pandora_console.rhel7.spec | 2 +- pandora_console/pandora_console.spec | 2 +- pandora_server/DEBIAN/control | 2 +- pandora_server/DEBIAN/make_deb_package.sh | 2 +- pandora_server/lib/PandoraFMS/Config.pm | 2 +- pandora_server/lib/PandoraFMS/PluginTools.pm | 2 +- pandora_server/pandora_server.redhat.spec | 2 +- pandora_server/pandora_server.spec | 2 +- pandora_server/pandora_server_installer | 2 +- pandora_server/util/pandora_db.pl | 2 +- pandora_server/util/pandora_manage.pl | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 577fe45e78..1a4e8a2121 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.738-190915 +Version: 7.0NG.738-190916 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index 6d85610008..5ebc768ca9 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190915" +pandora_version="7.0NG.738-190916" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index cc44f924b1..42a6fb38d8 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -42,7 +42,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.738'; -use constant AGENT_BUILD => '190915'; +use constant AGENT_BUILD => '190916'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index 8b14a01bf2..8cf4666656 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190915 +%define release 190916 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index c7b5f8babe..6af72cc966 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190915 +%define release 190916 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index cddfccdb0a..e51d9cb3d1 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190915" +PI_BUILD="190916" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index 794960a6b5..e01ce765e0 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{190915} +{190916} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 6dec9ff4f6..88a69124af 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.738(Build 190915)") +#define PANDORA_VERSION ("7.0NG.738(Build 190916)") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index d9aacc7db2..f67a031fae 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.738(Build 190915))" + VALUE "ProductVersion", "(7.0NG.738(Build 190916))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index 514162ac90..c6757cd683 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.738-190915 +Version: 7.0NG.738-190916 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index da342d2b91..8bd5474f4e 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190915" +pandora_version="7.0NG.738-190916" package_pear=0 package_pandora=1 diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index 2b33a7df96..fde2c962c9 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC190915'; +$build_version = 'PC190916'; $pandora_version = 'v7.0NG.738'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/install.php b/pandora_console/install.php index ef90cd4bf0..f5dab45f3c 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@ <div style='height: 10px'> <?php $version = '7.0NG.738'; - $build = '190915'; + $build = '190916'; $banner = "v$version Build $build"; error_reporting(0); diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec index a7153addb8..09db43ca49 100644 --- a/pandora_console/pandora_console.redhat.spec +++ b/pandora_console/pandora_console.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190915 +%define release 190916 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec index 05781de553..a1e0dda629 100644 --- a/pandora_console/pandora_console.rhel7.spec +++ b/pandora_console/pandora_console.rhel7.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190915 +%define release 190916 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec index edf41060ae..240c3d7ff7 100644 --- a/pandora_console/pandora_console.spec +++ b/pandora_console/pandora_console.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190915 +%define release 190916 %define httpd_name httpd # User and Group under which Apache is running %define httpd_name apache2 diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control index 2c77999930..5fe8b7e2e2 100644 --- a/pandora_server/DEBIAN/control +++ b/pandora_server/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-server -Version: 7.0NG.738-190915 +Version: 7.0NG.738-190916 Architecture: all Priority: optional Section: admin diff --git a/pandora_server/DEBIAN/make_deb_package.sh b/pandora_server/DEBIAN/make_deb_package.sh index dd86c020eb..cdd59f8df4 100644 --- a/pandora_server/DEBIAN/make_deb_package.sh +++ b/pandora_server/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190915" +pandora_version="7.0NG.738-190916" package_cpan=0 package_pandora=1 diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 713547b8be..429df2c9b7 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -45,7 +45,7 @@ our @EXPORT = qw( # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190915"; +my $pandora_build = "190916"; our $VERSION = $pandora_version." ".$pandora_build; # Setup hash diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index 297160b8f2..7f428e3d82 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -32,7 +32,7 @@ our @ISA = qw(Exporter); # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190915"; +my $pandora_build = "190916"; our $VERSION = $pandora_version." ".$pandora_build; our %EXPORT_TAGS = ( 'all' => [ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index b523ca4c62..49646f1c6a 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190915 +%define release 190916 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index ed6c88b01b..d5e6b4bc70 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190915 +%define release 190916 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index 90e64b0eff..c79790daca 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190915" +PI_BUILD="190916" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index a667e34dc8..70a1628e97 100644 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -34,7 +34,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.738 PS190915"; +my $version = "7.0NG.738 PS190916"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index f0ca781da1..04b3ab222c 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.738 PS190915"; +my $version = "7.0NG.738 PS190916"; # save program name for logging my $progname = basename($0); From 1596078bcb4be3919cc089fab9bafde799596791 Mon Sep 17 00:00:00 2001 From: fbsanchez <fborja.sanchez@artica.es> Date: Mon, 16 Sep 2019 11:14:00 +0200 Subject: [PATCH 55/79] exclude publishing while QA_ENV is active --- extras/docker/build_and_push.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/extras/docker/build_and_push.sh b/extras/docker/build_and_push.sh index 91e6fa15e5..c58a73bf8e 100755 --- a/extras/docker/build_and_push.sh +++ b/extras/docker/build_and_push.sh @@ -1,3 +1,4 @@ #!/bin/bash docker build --rm=true --pull --no-cache --build-arg BRANCH="develop" --build-arg DB_PASS="pandora" -t pandorafms/pandorafms:7 . && \ +[ "$QA_ENV" == "" ] && \ docker push pandorafms/pandorafms:7 From e89efea0223cd901cd2a8c961dbf4980d8d25c8d Mon Sep 17 00:00:00 2001 From: Luis Calvo <luis.calvo@artica.es> Date: Mon, 16 Sep 2019 11:18:01 +0200 Subject: [PATCH 56/79] Added column 'uncompressed_module' to 'treport_content' --- pandora_console/extras/mr/32.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pandora_console/extras/mr/32.sql b/pandora_console/extras/mr/32.sql index 3100d73092..5d2e0904d8 100644 --- a/pandora_console/extras/mr/32.sql +++ b/pandora_console/extras/mr/32.sql @@ -4,4 +4,6 @@ UPDATE `tlayout_data` SET `height` = 70 , `width` = 70 WHERE `height` = 0 && `wi (`type` = 10 && `image` IS NOT NULL && `image` != '' && `image` != 'none') || (`type` = 11 && `image` IS NOT NULL && `image` != '' && `image` != 'none' && `show_statistics` = 0)); +ALTER TABLE `treport_content` ADD COLUMN `uncompressed_module` TINYINT DEFAULT '1'; + COMMIT; \ No newline at end of file From 0b8ff69a36edf48bb4e81562a08fe9ad6149929e Mon Sep 17 00:00:00 2001 From: Luis Calvo <luis.calvo@artica.es> Date: Mon, 16 Sep 2019 12:57:37 +0200 Subject: [PATCH 57/79] Fixed modules first load on edit agent/module item report --- .../godmode/reporting/reporting_builder.item_editor.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pandora_console/godmode/reporting/reporting_builder.item_editor.php b/pandora_console/godmode/reporting/reporting_builder.item_editor.php index 6072e58595..7407ba93fd 100755 --- a/pandora_console/godmode/reporting/reporting_builder.item_editor.php +++ b/pandora_console/godmode/reporting/reporting_builder.item_editor.php @@ -3527,6 +3527,9 @@ $(document).ready (function () { $("#id_agents").change(agent_changed_by_multiple_agents); + // Load selected modules by default + $("#id_agents2").trigger('click'); + $("#combo_group").change ( function () { jQuery.post ("ajax.php", From 15a5d6f2e5dd5405ef9ffbc531ec50d7b545a145 Mon Sep 17 00:00:00 2001 From: artica <artica.devel@gmail.com> Date: Tue, 17 Sep 2019 00:01:57 +0200 Subject: [PATCH 58/79] Auto-updated build strings. --- pandora_agents/unix/DEBIAN/control | 2 +- pandora_agents/unix/DEBIAN/make_deb_package.sh | 2 +- pandora_agents/unix/pandora_agent | 2 +- pandora_agents/unix/pandora_agent.redhat.spec | 2 +- pandora_agents/unix/pandora_agent.spec | 2 +- pandora_agents/unix/pandora_agent_installer | 2 +- pandora_agents/win32/installer/pandora.mpi | 2 +- pandora_agents/win32/pandora.cc | 2 +- pandora_agents/win32/versioninfo.rc | 2 +- pandora_console/DEBIAN/control | 2 +- pandora_console/DEBIAN/make_deb_package.sh | 2 +- pandora_console/include/config_process.php | 2 +- pandora_console/install.php | 2 +- pandora_console/pandora_console.redhat.spec | 2 +- pandora_console/pandora_console.rhel7.spec | 2 +- pandora_console/pandora_console.spec | 2 +- pandora_server/DEBIAN/control | 2 +- pandora_server/DEBIAN/make_deb_package.sh | 2 +- pandora_server/lib/PandoraFMS/Config.pm | 2 +- pandora_server/lib/PandoraFMS/PluginTools.pm | 2 +- pandora_server/pandora_server.redhat.spec | 2 +- pandora_server/pandora_server.spec | 2 +- pandora_server/pandora_server_installer | 2 +- pandora_server/util/pandora_db.pl | 2 +- pandora_server/util/pandora_manage.pl | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 1a4e8a2121..7e42ae4d5b 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.738-190916 +Version: 7.0NG.738-190917 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index 5ebc768ca9..30415bbf2d 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190916" +pandora_version="7.0NG.738-190917" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index 42a6fb38d8..d59918a23a 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -42,7 +42,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.738'; -use constant AGENT_BUILD => '190916'; +use constant AGENT_BUILD => '190917'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index 8cf4666656..5aff896605 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190916 +%define release 190917 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index 6af72cc966..bbda32204f 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190916 +%define release 190917 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index e51d9cb3d1..1e0ad5a270 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190916" +PI_BUILD="190917" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index e01ce765e0..456592fc89 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{190916} +{190917} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 88a69124af..202abedb26 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.738(Build 190916)") +#define PANDORA_VERSION ("7.0NG.738(Build 190917)") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index f67a031fae..09ca69e564 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.738(Build 190916))" + VALUE "ProductVersion", "(7.0NG.738(Build 190917))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index c6757cd683..b02f55ae10 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.738-190916 +Version: 7.0NG.738-190917 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index 8bd5474f4e..297d984583 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190916" +pandora_version="7.0NG.738-190917" package_pear=0 package_pandora=1 diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index fde2c962c9..2bd4450654 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC190916'; +$build_version = 'PC190917'; $pandora_version = 'v7.0NG.738'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/install.php b/pandora_console/install.php index f5dab45f3c..576b2bb22a 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@ <div style='height: 10px'> <?php $version = '7.0NG.738'; - $build = '190916'; + $build = '190917'; $banner = "v$version Build $build"; error_reporting(0); diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec index 09db43ca49..41e7137924 100644 --- a/pandora_console/pandora_console.redhat.spec +++ b/pandora_console/pandora_console.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190916 +%define release 190917 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec index a1e0dda629..a122fa592e 100644 --- a/pandora_console/pandora_console.rhel7.spec +++ b/pandora_console/pandora_console.rhel7.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190916 +%define release 190917 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec index 240c3d7ff7..76b6a9b084 100644 --- a/pandora_console/pandora_console.spec +++ b/pandora_console/pandora_console.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190916 +%define release 190917 %define httpd_name httpd # User and Group under which Apache is running %define httpd_name apache2 diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control index 5fe8b7e2e2..f9767ec87d 100644 --- a/pandora_server/DEBIAN/control +++ b/pandora_server/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-server -Version: 7.0NG.738-190916 +Version: 7.0NG.738-190917 Architecture: all Priority: optional Section: admin diff --git a/pandora_server/DEBIAN/make_deb_package.sh b/pandora_server/DEBIAN/make_deb_package.sh index cdd59f8df4..26b71b9cbb 100644 --- a/pandora_server/DEBIAN/make_deb_package.sh +++ b/pandora_server/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190916" +pandora_version="7.0NG.738-190917" package_cpan=0 package_pandora=1 diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 429df2c9b7..9cce6136ea 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -45,7 +45,7 @@ our @EXPORT = qw( # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190916"; +my $pandora_build = "190917"; our $VERSION = $pandora_version." ".$pandora_build; # Setup hash diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index 7f428e3d82..916996c2bc 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -32,7 +32,7 @@ our @ISA = qw(Exporter); # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190916"; +my $pandora_build = "190917"; our $VERSION = $pandora_version." ".$pandora_build; our %EXPORT_TAGS = ( 'all' => [ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index 49646f1c6a..46d969e2d5 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190916 +%define release 190917 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index d5e6b4bc70..59faf45f6b 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190916 +%define release 190917 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index c79790daca..5cfd628fa4 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190916" +PI_BUILD="190917" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index 70a1628e97..3263698402 100644 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -34,7 +34,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.738 PS190916"; +my $version = "7.0NG.738 PS190917"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index 04b3ab222c..120cc4bfa7 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.738 PS190916"; +my $version = "7.0NG.738 PS190917"; # save program name for logging my $progname = basename($0); From e409b33c6ce9fe22037b6223f22c14b73f790753 Mon Sep 17 00:00:00 2001 From: Luis Calvo <luis.calvo@artica.es> Date: Tue, 17 Sep 2019 12:32:07 +0200 Subject: [PATCH 59/79] Added changes to treport_content_template to db --- pandora_console/extras/mr/32.sql | 2 ++ pandora_console/pandoradb.sql | 1 + 2 files changed, 3 insertions(+) diff --git a/pandora_console/extras/mr/32.sql b/pandora_console/extras/mr/32.sql index 5d2e0904d8..ce78011739 100644 --- a/pandora_console/extras/mr/32.sql +++ b/pandora_console/extras/mr/32.sql @@ -5,5 +5,7 @@ UPDATE `tlayout_data` SET `height` = 70 , `width` = 70 WHERE `height` = 0 && `wi (`type` = 11 && `image` IS NOT NULL && `image` != '' && `image` != 'none' && `show_statistics` = 0)); ALTER TABLE `treport_content` ADD COLUMN `uncompressed_module` TINYINT DEFAULT '1'; +ALTER TABLE `treport_content_template` ADD COLUMN `uncompressed_module` TINYINT DEFAULT '1'; + COMMIT; \ No newline at end of file diff --git a/pandora_console/pandoradb.sql b/pandora_console/pandoradb.sql index 13aac100e9..e6d6e4d625 100644 --- a/pandora_console/pandoradb.sql +++ b/pandora_console/pandoradb.sql @@ -2999,6 +2999,7 @@ CREATE TABLE IF NOT EXISTS `treport_content_template` ( `current_month` TINYINT(1) DEFAULT '1', `failover_mode` tinyint(1) DEFAULT '1', `failover_type` tinyint(1) DEFAULT '1', + `uncompressed_module` TINYINT DEFAULT '1', PRIMARY KEY(`id_rc`) ) ENGINE = InnoDB DEFAULT CHARSET=utf8; From 0c60f13ccdfb3cd0c2b28650eb64b1e07fa56101 Mon Sep 17 00:00:00 2001 From: Luis Calvo <luis.calvo@artica.es> Date: Tue, 17 Sep 2019 19:54:34 +0200 Subject: [PATCH 60/79] Event column instructions maked unsortabe --- pandora_console/operation/events/events.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pandora_console/operation/events/events.php b/pandora_console/operation/events/events.php index 786743b8d0..851bce345a 100644 --- a/pandora_console/operation/events/events.php +++ b/pandora_console/operation/events/events.php @@ -1247,6 +1247,14 @@ try { ]; } + // Identifies column instructions to make it unsortable. + if (in_array('instructions', $fields) > 0) { + $fields[array_search('instructions', $fields)] = [ + 'text' => 'instructions', + 'class' => 'column-instructions', + ]; + } + $evento_id = array_search('evento', $fields); if ($evento_id !== false) { $fields[$evento_id] = [ @@ -1411,6 +1419,7 @@ try { 'no_sortable_columns' => [ -1, -2, + 'column-instructions', ], 'ajax_postprocess' => 'process_datatables_item(item)', 'drawCallback' => 'process_datatables_callback(this, settings)', From 47be6a611fdae8d43d7f0798bdcbbbba7f0a704a Mon Sep 17 00:00:00 2001 From: artica <artica.devel@gmail.com> Date: Wed, 18 Sep 2019 00:01:11 +0200 Subject: [PATCH 61/79] Auto-updated build strings. --- pandora_agents/unix/DEBIAN/control | 2 +- pandora_agents/unix/DEBIAN/make_deb_package.sh | 2 +- pandora_agents/unix/pandora_agent | 2 +- pandora_agents/unix/pandora_agent.redhat.spec | 2 +- pandora_agents/unix/pandora_agent.spec | 2 +- pandora_agents/unix/pandora_agent_installer | 2 +- pandora_agents/win32/installer/pandora.mpi | 2 +- pandora_agents/win32/pandora.cc | 2 +- pandora_agents/win32/versioninfo.rc | 2 +- pandora_console/DEBIAN/control | 2 +- pandora_console/DEBIAN/make_deb_package.sh | 2 +- pandora_console/include/config_process.php | 2 +- pandora_console/install.php | 2 +- pandora_console/pandora_console.redhat.spec | 2 +- pandora_console/pandora_console.rhel7.spec | 2 +- pandora_console/pandora_console.spec | 2 +- pandora_server/DEBIAN/control | 2 +- pandora_server/DEBIAN/make_deb_package.sh | 2 +- pandora_server/lib/PandoraFMS/Config.pm | 2 +- pandora_server/lib/PandoraFMS/PluginTools.pm | 2 +- pandora_server/pandora_server.redhat.spec | 2 +- pandora_server/pandora_server.spec | 2 +- pandora_server/pandora_server_installer | 2 +- pandora_server/util/pandora_db.pl | 2 +- pandora_server/util/pandora_manage.pl | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 7e42ae4d5b..436742c998 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.738-190917 +Version: 7.0NG.738-190918 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index 30415bbf2d..9d1267941f 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190917" +pandora_version="7.0NG.738-190918" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index d59918a23a..8c23906074 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -42,7 +42,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.738'; -use constant AGENT_BUILD => '190917'; +use constant AGENT_BUILD => '190918'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index 5aff896605..de15423433 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190917 +%define release 190918 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index bbda32204f..a3df706fbd 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190917 +%define release 190918 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index 1e0ad5a270..ae22fe6afa 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190917" +PI_BUILD="190918" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index 456592fc89..197edbf033 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{190917} +{190918} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 202abedb26..6081bda4d4 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.738(Build 190917)") +#define PANDORA_VERSION ("7.0NG.738(Build 190918)") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index 09ca69e564..eb2dc557fb 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.738(Build 190917))" + VALUE "ProductVersion", "(7.0NG.738(Build 190918))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index b02f55ae10..0bdac02b14 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.738-190917 +Version: 7.0NG.738-190918 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index 297d984583..0bcc536034 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190917" +pandora_version="7.0NG.738-190918" package_pear=0 package_pandora=1 diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index 2bd4450654..477fa5a35a 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC190917'; +$build_version = 'PC190918'; $pandora_version = 'v7.0NG.738'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/install.php b/pandora_console/install.php index 576b2bb22a..900cd0ccb0 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@ <div style='height: 10px'> <?php $version = '7.0NG.738'; - $build = '190917'; + $build = '190918'; $banner = "v$version Build $build"; error_reporting(0); diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec index 41e7137924..fd56e93b6f 100644 --- a/pandora_console/pandora_console.redhat.spec +++ b/pandora_console/pandora_console.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190917 +%define release 190918 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec index a122fa592e..803b1cc1b8 100644 --- a/pandora_console/pandora_console.rhel7.spec +++ b/pandora_console/pandora_console.rhel7.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190917 +%define release 190918 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec index 76b6a9b084..f344e71b4b 100644 --- a/pandora_console/pandora_console.spec +++ b/pandora_console/pandora_console.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190917 +%define release 190918 %define httpd_name httpd # User and Group under which Apache is running %define httpd_name apache2 diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control index f9767ec87d..ee8554bbe8 100644 --- a/pandora_server/DEBIAN/control +++ b/pandora_server/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-server -Version: 7.0NG.738-190917 +Version: 7.0NG.738-190918 Architecture: all Priority: optional Section: admin diff --git a/pandora_server/DEBIAN/make_deb_package.sh b/pandora_server/DEBIAN/make_deb_package.sh index 26b71b9cbb..64aa380443 100644 --- a/pandora_server/DEBIAN/make_deb_package.sh +++ b/pandora_server/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190917" +pandora_version="7.0NG.738-190918" package_cpan=0 package_pandora=1 diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 9cce6136ea..9e946576b0 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -45,7 +45,7 @@ our @EXPORT = qw( # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190917"; +my $pandora_build = "190918"; our $VERSION = $pandora_version." ".$pandora_build; # Setup hash diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index 916996c2bc..2d2d3d3f46 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -32,7 +32,7 @@ our @ISA = qw(Exporter); # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190917"; +my $pandora_build = "190918"; our $VERSION = $pandora_version." ".$pandora_build; our %EXPORT_TAGS = ( 'all' => [ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index 46d969e2d5..6327df5d87 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190917 +%define release 190918 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index 59faf45f6b..02bb3d40fb 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190917 +%define release 190918 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index 5cfd628fa4..c2a295f2e8 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190917" +PI_BUILD="190918" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index 3263698402..3a248e4bfc 100644 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -34,7 +34,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.738 PS190917"; +my $version = "7.0NG.738 PS190918"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index 120cc4bfa7..ed0e29eab2 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.738 PS190917"; +my $version = "7.0NG.738 PS190918"; # save program name for logging my $progname = basename($0); From 43af2269eedf04ece9d8efb3fd38c5132858c2bd Mon Sep 17 00:00:00 2001 From: Luis Calvo <luis.calvo@artica.es> Date: Wed, 18 Sep 2019 11:51:01 +0200 Subject: [PATCH 62/79] Fixed default values uncompress data --- pandora_console/extras/mr/32.sql | 4 ++-- pandora_console/pandoradb.sql | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pandora_console/extras/mr/32.sql b/pandora_console/extras/mr/32.sql index ce78011739..56855a02d8 100644 --- a/pandora_console/extras/mr/32.sql +++ b/pandora_console/extras/mr/32.sql @@ -4,8 +4,8 @@ UPDATE `tlayout_data` SET `height` = 70 , `width` = 70 WHERE `height` = 0 && `wi (`type` = 10 && `image` IS NOT NULL && `image` != '' && `image` != 'none') || (`type` = 11 && `image` IS NOT NULL && `image` != '' && `image` != 'none' && `show_statistics` = 0)); -ALTER TABLE `treport_content` ADD COLUMN `uncompressed_module` TINYINT DEFAULT '1'; -ALTER TABLE `treport_content_template` ADD COLUMN `uncompressed_module` TINYINT DEFAULT '1'; +ALTER TABLE `treport_content` ADD COLUMN `uncompressed_module` TINYINT DEFAULT '0'; +ALTER TABLE `treport_content_template` ADD COLUMN `uncompressed_module` TINYINT DEFAULT '0'; COMMIT; \ No newline at end of file diff --git a/pandora_console/pandoradb.sql b/pandora_console/pandoradb.sql index e6d6e4d625..232b340b46 100644 --- a/pandora_console/pandoradb.sql +++ b/pandora_console/pandoradb.sql @@ -1455,7 +1455,7 @@ CREATE TABLE IF NOT EXISTS `treport_content` ( `current_month` TINYINT(1) DEFAULT '1', `failover_mode` tinyint(1) DEFAULT '1', `failover_type` tinyint(1) DEFAULT '1', - `uncompressed_module` TINYINT DEFAULT '1', + `uncompressed_module` TINYINT DEFAULT '0', PRIMARY KEY(`id_rc`), FOREIGN KEY (`id_report`) REFERENCES treport(`id_report`) ON UPDATE CASCADE ON DELETE CASCADE @@ -2999,7 +2999,7 @@ CREATE TABLE IF NOT EXISTS `treport_content_template` ( `current_month` TINYINT(1) DEFAULT '1', `failover_mode` tinyint(1) DEFAULT '1', `failover_type` tinyint(1) DEFAULT '1', - `uncompressed_module` TINYINT DEFAULT '1', + `uncompressed_module` TINYINT DEFAULT '0', PRIMARY KEY(`id_rc`) ) ENGINE = InnoDB DEFAULT CHARSET=utf8; From 056bbb7348d79d83f0b683d37ba9d1ca76d56176 Mon Sep 17 00:00:00 2001 From: Daniel Barbero Martin <daniel.barbero@artica.es> Date: Wed, 18 Sep 2019 13:16:05 +0200 Subject: [PATCH 63/79] fixed minor error --- .../include/functions_reporting.php | 25 ++++++------------- 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/pandora_console/include/functions_reporting.php b/pandora_console/include/functions_reporting.php index b27a2ff9f4..4edd0ef642 100755 --- a/pandora_console/include/functions_reporting.php +++ b/pandora_console/include/functions_reporting.php @@ -10738,7 +10738,7 @@ function reporting_get_agentmodule_data_sum( ) { global $config; - // Initialize variables + // Initialize variables. if (empty($date)) { $date = get_system_time(); } @@ -10760,7 +10760,7 @@ function reporting_get_agentmodule_data_sum( $id_module_type ); $module_interval = modules_get_interval($id_agent_module); - // Check if module must be compressed + // Check if module must be compressed. if (!$uncompressed_module) { $uncompressed_module = is_module_uncompressed($module_name); } @@ -10770,14 +10770,14 @@ function reporting_get_agentmodule_data_sum( return 0; } - // Incremental modules are treated differently + // Incremental modules are treated differently. $module_inc = is_module_inc($module_name); if (!$uncompressed_module) { - // Get module data + // Get module data. $interval_data = db_get_all_rows_sql( ' - SELECT * FROM tagente_datos + SELECT * FROM tagente_datos WHERE id_agente_modulo = '.(int) $id_agent_module.' AND utimestamp > '.(int) $datelimit.' AND utimestamp < '.(int) $date.' @@ -10798,7 +10798,7 @@ function reporting_get_agentmodule_data_sum( return false; } - // Set initial conditions + // Set initial conditions. $total = 0; $partial_total = 0; $count_sum = 0; @@ -10807,17 +10807,6 @@ function reporting_get_agentmodule_data_sum( $partial_total = 0; $count_sum = 0; - switch ($config['dbtype']) { - case 'mysql': - case 'postgresql': - // Do none - break; - - case 'oracle': - $data['datos'] = oracle_format_float_to_php($data['datos']); - break; - } - if (!$uncompressed_module) { $total += $data['datos']; } else if (!$module_inc) { @@ -10832,7 +10821,7 @@ function reporting_get_agentmodule_data_sum( continue; } - $total += ($partial_total / $count_sum); + $total += $partial_total; } else { $last = end($data['data']); $total += $last['datos']; From 73a341912f684682d14ca20a35c99230d189793a Mon Sep 17 00:00:00 2001 From: Jose Gonzalez <jose.gonzalez@artica.es> Date: Wed, 18 Sep 2019 13:35:11 +0200 Subject: [PATCH 64/79] Changed caption Expires --- pandora_console/godmode/setup/license.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandora_console/godmode/setup/license.php b/pandora_console/godmode/setup/license.php index 06d7d2e7e3..c459cdb39f 100644 --- a/pandora_console/godmode/setup/license.php +++ b/pandora_console/godmode/setup/license.php @@ -107,7 +107,7 @@ $table->data = []; $table->data[0][0] = '<strong>'.__('Customer key').'</strong>'; $table->data[0][1] = html_print_textarea('keys[customer_key]', 10, 255, $settings->customer_key, 'style="height:50px; width:450px;"', true); -$table->data[1][0] = '<strong>'.__('Expires').'</strong>'; +$table->data[1][0] = '<strong>'.__($license['expiry_caption']).'</strong>'; $table->data[1][1] = html_print_input_text('expires', $license['expiry_date'], '', 10, 255, true, true); $table->data[2][0] = '<strong>'.__('Platform Limit').'</strong>'; From a4e22d325d1f2710dbe8950fb4cc05a61942e9d8 Mon Sep 17 00:00:00 2001 From: Jose Gonzalez <jose.gonzalez@artica.es> Date: Wed, 18 Sep 2019 15:39:33 +0200 Subject: [PATCH 65/79] Solved issue --- pandora_console/extras/pandora_diag.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pandora_console/extras/pandora_diag.php b/pandora_console/extras/pandora_diag.php index 9258a3be42..1fb516f372 100644 --- a/pandora_console/extras/pandora_diag.php +++ b/pandora_console/extras/pandora_diag.php @@ -47,6 +47,9 @@ if ($update_settings) { ui_require_javascript_file_enterprise('load_enterprise'); enterprise_include_once('include/functions_license.php'); +$config['license_mode'] = 1; +var_dump($config['license_mode']); + $license = enterprise_hook('license_get_info'); $rows = db_get_all_rows_in_table('tupdate_settings'); @@ -726,7 +729,7 @@ render_info_data( echo "<tr><th style='background-color:#b1b1b1;font-weight:bold;font-style:italic;border-radius:2px;' align=center colspan='2'>".__(' Pandora FMS Licence Information').'</th></tr>'; render_row(html_print_textarea('keys[customer_key]', 10, 255, $settings->customer_key, 'style="height:40px; width:450px;"', true), 'Customer key'); - render_row($license['expiry_date'], 'Expires'); + render_row($license['expiry_date'], $license['expiry_caption']); render_row($license['limit'].' agents', 'Platform Limit'); render_row($license['count'].' agents', 'Current Platform Count'); render_row($license['count_enabled'].' agents', 'Current Platform Count (enabled: items)'); From be1cde5466e12fb091bddb8c3db4edfd0d8e590d Mon Sep 17 00:00:00 2001 From: Jose Gonzalez <jose.gonzalez@artica.es> Date: Wed, 18 Sep 2019 15:41:20 +0200 Subject: [PATCH 66/79] Deleted tests --- pandora_console/extras/pandora_diag.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/pandora_console/extras/pandora_diag.php b/pandora_console/extras/pandora_diag.php index 1fb516f372..eb9a199456 100644 --- a/pandora_console/extras/pandora_diag.php +++ b/pandora_console/extras/pandora_diag.php @@ -47,9 +47,6 @@ if ($update_settings) { ui_require_javascript_file_enterprise('load_enterprise'); enterprise_include_once('include/functions_license.php'); -$config['license_mode'] = 1; -var_dump($config['license_mode']); - $license = enterprise_hook('license_get_info'); $rows = db_get_all_rows_in_table('tupdate_settings'); From 4628e41f69cfc4998d98b7cd19d15b2155df5f23 Mon Sep 17 00:00:00 2001 From: Luis Calvo <luis.calvo@artica.es> Date: Wed, 18 Sep 2019 16:39:05 +0200 Subject: [PATCH 67/79] Added missing changes to pandora_migratte --- pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql b/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql index 704ab61d74..ba6e5c4da0 100644 --- a/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql +++ b/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql @@ -798,6 +798,8 @@ ALTER TABLE `treport_content_template` ADD COLUMN `agent_min_value` TINYINT(1) D ALTER TABLE `treport_content_template` ADD COLUMN `current_month` TINYINT(1) DEFAULT '1'; ALTER TABLE `treport_content_template` ADD COLUMN `failover_mode` tinyint(1) DEFAULT '1'; ALTER TABLE `treport_content_template` ADD COLUMN `failover_type` tinyint(1) DEFAULT '1'; +ALTER TABLE `treport_content_template` ADD COLUMN `uncompressed_module` TINYINT DEFAULT '0'; + -- ----------------------------------------------------- -- Table `treport_content_sla_com_temp` (treport_content_sla_combined_template) @@ -1454,6 +1456,7 @@ ALTER TABLE `treport_content` ADD COLUMN `current_month` TINYINT(1) DEFAULT '1'; ALTER TABLE `treport_content` ADD COLUMN `failover_mode` tinyint(1) DEFAULT '0'; ALTER TABLE `treport_content` ADD COLUMN `failover_type` tinyint(1) DEFAULT '0'; ALTER table `treport_content` MODIFY COLUMN `name` varchar(300) NULL; +ALTER TABLE `treport_content` ADD COLUMN `uncompressed_module` TINYINT DEFAULT '0'; -- --------------------------------------------------------------------- -- Table `tmodule_relationship` From 0c72fe718cd25bd39d72290bea8ef78ca844cfe9 Mon Sep 17 00:00:00 2001 From: Luis <luis.calvo@artica.es> Date: Wed, 18 Sep 2019 16:42:09 +0200 Subject: [PATCH 68/79] Update pandoradb_migrate_6.0_to_7.0.mysql.sql --- pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql | 1 - 1 file changed, 1 deletion(-) diff --git a/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql b/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql index ba6e5c4da0..5e42ebb514 100644 --- a/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql +++ b/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql @@ -800,7 +800,6 @@ ALTER TABLE `treport_content_template` ADD COLUMN `failover_mode` tinyint(1) DEF ALTER TABLE `treport_content_template` ADD COLUMN `failover_type` tinyint(1) DEFAULT '1'; ALTER TABLE `treport_content_template` ADD COLUMN `uncompressed_module` TINYINT DEFAULT '0'; - -- ----------------------------------------------------- -- Table `treport_content_sla_com_temp` (treport_content_sla_combined_template) -- ----------------------------------------------------- From 42c0fa9a5a947f8ff2d57f1e90ad1de76b242686 Mon Sep 17 00:00:00 2001 From: fbsanchez <fborja.sanchez@artica.es> Date: Wed, 18 Sep 2019 16:58:02 +0200 Subject: [PATCH 69/79] web2image control phantomjs flow --- pandora_console/include/web2image.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pandora_console/include/web2image.js b/pandora_console/include/web2image.js index bf183a73c4..09f840e45e 100644 --- a/pandora_console/include/web2image.js +++ b/pandora_console/include/web2image.js @@ -61,6 +61,7 @@ page.onConsoleMessage = function(msg) { page.onError = function(msg) { console.log(msg); page.close(); + phantom.exit(); }; page.onCallback = function(st) { @@ -74,4 +75,9 @@ page.onCallback = function(st) { phantom.exit(); }; -page.open(url, "POST", post_data, function(status) {}); +page.open(url, "POST", post_data, function(status) { + if (status == "fail") { + console.out("Failed to generate chart."); + phantom.exit(); + } +}); From 14f73f147f34410e966054e185f8db4d926b94f9 Mon Sep 17 00:00:00 2001 From: artica <artica.devel@gmail.com> Date: Thu, 19 Sep 2019 00:01:10 +0200 Subject: [PATCH 70/79] Auto-updated build strings. --- pandora_agents/unix/DEBIAN/control | 2 +- pandora_agents/unix/DEBIAN/make_deb_package.sh | 2 +- pandora_agents/unix/pandora_agent | 2 +- pandora_agents/unix/pandora_agent.redhat.spec | 2 +- pandora_agents/unix/pandora_agent.spec | 2 +- pandora_agents/unix/pandora_agent_installer | 2 +- pandora_agents/win32/installer/pandora.mpi | 2 +- pandora_agents/win32/pandora.cc | 2 +- pandora_agents/win32/versioninfo.rc | 2 +- pandora_console/DEBIAN/control | 2 +- pandora_console/DEBIAN/make_deb_package.sh | 2 +- pandora_console/include/config_process.php | 2 +- pandora_console/install.php | 2 +- pandora_console/pandora_console.redhat.spec | 2 +- pandora_console/pandora_console.rhel7.spec | 2 +- pandora_console/pandora_console.spec | 2 +- pandora_server/DEBIAN/control | 2 +- pandora_server/DEBIAN/make_deb_package.sh | 2 +- pandora_server/lib/PandoraFMS/Config.pm | 2 +- pandora_server/lib/PandoraFMS/PluginTools.pm | 2 +- pandora_server/pandora_server.redhat.spec | 2 +- pandora_server/pandora_server.spec | 2 +- pandora_server/pandora_server_installer | 2 +- pandora_server/util/pandora_db.pl | 2 +- pandora_server/util/pandora_manage.pl | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 436742c998..15a54e51db 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.738-190918 +Version: 7.0NG.738-190919 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index 9d1267941f..c8154f495f 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190918" +pandora_version="7.0NG.738-190919" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index 8c23906074..f97ba2fc4e 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -42,7 +42,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.738'; -use constant AGENT_BUILD => '190918'; +use constant AGENT_BUILD => '190919'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index de15423433..e1c252eef8 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190918 +%define release 190919 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index a3df706fbd..c94e3f3656 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190918 +%define release 190919 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index ae22fe6afa..0c65224531 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190918" +PI_BUILD="190919" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index 197edbf033..9eb3a6cd07 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{190918} +{190919} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 6081bda4d4..8101c88e2e 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.738(Build 190918)") +#define PANDORA_VERSION ("7.0NG.738(Build 190919)") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index eb2dc557fb..77616f62dd 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.738(Build 190918))" + VALUE "ProductVersion", "(7.0NG.738(Build 190919))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index 0bdac02b14..428fe52564 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.738-190918 +Version: 7.0NG.738-190919 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index 0bcc536034..c7f7078f73 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190918" +pandora_version="7.0NG.738-190919" package_pear=0 package_pandora=1 diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index 477fa5a35a..51ba7f2af7 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC190918'; +$build_version = 'PC190919'; $pandora_version = 'v7.0NG.738'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/install.php b/pandora_console/install.php index 900cd0ccb0..5ba3926259 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@ <div style='height: 10px'> <?php $version = '7.0NG.738'; - $build = '190918'; + $build = '190919'; $banner = "v$version Build $build"; error_reporting(0); diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec index fd56e93b6f..57c654851d 100644 --- a/pandora_console/pandora_console.redhat.spec +++ b/pandora_console/pandora_console.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190918 +%define release 190919 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec index 803b1cc1b8..505c7f7640 100644 --- a/pandora_console/pandora_console.rhel7.spec +++ b/pandora_console/pandora_console.rhel7.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190918 +%define release 190919 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec index f344e71b4b..8127bedc75 100644 --- a/pandora_console/pandora_console.spec +++ b/pandora_console/pandora_console.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190918 +%define release 190919 %define httpd_name httpd # User and Group under which Apache is running %define httpd_name apache2 diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control index ee8554bbe8..ad82103ea8 100644 --- a/pandora_server/DEBIAN/control +++ b/pandora_server/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-server -Version: 7.0NG.738-190918 +Version: 7.0NG.738-190919 Architecture: all Priority: optional Section: admin diff --git a/pandora_server/DEBIAN/make_deb_package.sh b/pandora_server/DEBIAN/make_deb_package.sh index 64aa380443..33b89f2f2e 100644 --- a/pandora_server/DEBIAN/make_deb_package.sh +++ b/pandora_server/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190918" +pandora_version="7.0NG.738-190919" package_cpan=0 package_pandora=1 diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 9e946576b0..7941e627b6 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -45,7 +45,7 @@ our @EXPORT = qw( # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190918"; +my $pandora_build = "190919"; our $VERSION = $pandora_version." ".$pandora_build; # Setup hash diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index 2d2d3d3f46..1fd4edcf4a 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -32,7 +32,7 @@ our @ISA = qw(Exporter); # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190918"; +my $pandora_build = "190919"; our $VERSION = $pandora_version." ".$pandora_build; our %EXPORT_TAGS = ( 'all' => [ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index 6327df5d87..2376c07b2c 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190918 +%define release 190919 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index 02bb3d40fb..58a9a051fc 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190918 +%define release 190919 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index c2a295f2e8..40e9c53839 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190918" +PI_BUILD="190919" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index 3a248e4bfc..e0ba24f054 100644 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -34,7 +34,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.738 PS190918"; +my $version = "7.0NG.738 PS190919"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index ed0e29eab2..ab951ab0f7 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.738 PS190918"; +my $version = "7.0NG.738 PS190919"; # save program name for logging my $progname = basename($0); From 37fd876a22466e61752ebe7e765df080178eade6 Mon Sep 17 00:00:00 2001 From: Luis Calvo <luis.calvo@artica.es> Date: Thu, 19 Sep 2019 10:31:54 +0200 Subject: [PATCH 71/79] Fixed bug --- pandora_console/godmode/reporting/reporting_builder.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandora_console/godmode/reporting/reporting_builder.php b/pandora_console/godmode/reporting/reporting_builder.php index 501d4b9edd..fa2e7440fa 100755 --- a/pandora_console/godmode/reporting/reporting_builder.php +++ b/pandora_console/godmode/reporting/reporting_builder.php @@ -1908,7 +1908,7 @@ switch ($action) { $values['id_agent'] = get_parameter('group'); } - if ($values['type'] = 'sumatory') { + if ($values['type'] == 'sumatory') { $values['uncompressed_module'] = get_parameter('uncompressed_module', 0); } @@ -2469,7 +2469,7 @@ switch ($action) { $values['id_agent'] = get_parameter('group'); } - if ($values['type'] = 'sumatory') { + if ($values['type'] == 'sumatory') { $values['uncompressed_module'] = get_parameter('uncompressed_module', 0); } From 6107d141c05ddd2c2df00f9ae86e69ca0248be3d Mon Sep 17 00:00:00 2001 From: Marcos Alconada <marcos.alconada@artica.es> Date: Thu, 19 Sep 2019 12:40:53 +0200 Subject: [PATCH 72/79] Update pandoradb_data.sql --- pandora_console/pandoradb_data.sql | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/pandora_console/pandoradb_data.sql b/pandora_console/pandoradb_data.sql index efdb48e01e..01f069b8b6 100644 --- a/pandora_console/pandoradb_data.sql +++ b/pandora_console/pandoradb_data.sql @@ -1422,19 +1422,19 @@ VALUES (95,1,132,907,0,0,'<p style="text-align: center; overflow: hidden;"><span class="visual_font_size_28pt" style="color: #ffffff; font-family: opensans;"><strong><span class="visual_font_size_28pt" style="color: #ffffff; font-family: opensans;">Office 7 -&nbsp;</span></strong></span><span class="visual_font_size_28pt" style="color: #ffffff; font-family: opensans;">Rack 1</span></p>','white',4,3600,1,1,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,'0.000','0.000',0,0,'analogic_1','time','Europe/Madrid',0,0), (96,1,733,20,0,0,'<p style="overflow: hidden;"><span class="visual_font_size_48pt"><strong><span style="color: #ffffff; font-family: opensans;">OFFICE RACKS</span></strong></span></p>','white',4,3600,1,1,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,'0.000','0.000',0,0,'analogic_1','time','Europe/Madrid',0,0), (97,1,1479,260,174,29,'','rack_server_rack',0,3600,1,1,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,'0.000','0.000',0,0,'analogic_1','time','Europe/Madrid',0,60), - (160,2,709,103,0,400,'','white',19,3600,0,0,0,0,1,0,0,0,0,'line','down','','#FFFFFF',0,0,'default',0,0.000,0.000,0,0,'digital_1','timedate','Europe/Madrid',0,0), - (161,2,178,481,111,111,'','status',0,3600,11556,430,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (162,2,542,481,111,111,'','status',0,3600,13,2,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (163,2,905,481,111,111,'','status',0,3600,114,11,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (164,2,1276,481,111,111,'','status',0,3600,7,1,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (165,2,1631,482,111,111,'','status',0,3600,11547,1,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (166,2,157,393,0,0,'<p style=\"line-height: 18px;\"><span class=\"visual_font_size_28pt\" style=\"line-height: 18px; color: #ffffff;\">Backups</span></p>\n<p style=\"line-height: 18px;\"> </p>','white', + (98,2,709,103,0,400,'','white',19,3600,0,0,0,0,1,0,0,0,0,'line','down','','#FFFFFF',0,0,'default',0,0.000,0.000,0,0,'digital_1','timedate','Europe/Madrid',0,0), + (99,2,178,481,111,111,'','status',0,3600,11556,430,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (100,2,542,481,111,111,'','status',0,3600,13,2,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (101,2,905,481,111,111,'','status',0,3600,114,11,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (102,2,1276,481,111,111,'','status',0,3600,7,1,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (103,2,1631,482,111,111,'','status',0,3600,11547,1,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (104,2,157,393,0,0,'<p style=\"line-height: 18px;\"><span class=\"visual_font_size_28pt\" style=\"line-height: 18px; color: #ffffff;\">Backups</span></p>\n<p style=\"line-height: 18px;\"> </p>','white', 4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (167,2,512,382,96,172,'<p style="overflow: hidden;"><span class="visual_font_size_28pt" style="font-family: opensans; color: #ffffff;">DB Status</span></p>
<p style="overflow: hidden;">&nbsp;</p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (168,2,886,382,0,0,'<p style=\"line-height: 18px; overflow: hidden;\"><span class=\"visual_font_size_28pt\" style=\"color: #ffffff; font-family: opensans;\">Disk slave</span></p>\n<p style=\"line-height: 18px; overflow: hidden;\"> </p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (169,2,1251,382,0,0,'<p style=\"line-height: 18px; overflow: hidden;\"><span class=\"visual_font_size_28pt\" style=\"color: #ffffff; font-family: opensans;\">Disk /var</span></p>\n<p style=\"line-height: 18px; overflow: hidden;\"> </p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (170,2,1547,382,0,0,'<p style="line-height: 18px; overflow: hidden;"><span class="visual_font_size_28pt" style="color: #ffffff; font-family: opensans;">Authentification</span></p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (171,2,126,820,0,0,'<p style="line-height: 18px; overflow: hidden;"><strong><span class="visual_font_size_36pt" style="font-family: opensans; color: #ffffff;">Processing</span></strong></p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (172,2,755,820,0,0,'<p style="line-height: 18px; overflow: hidden;"><strong><span class="visual_font_size_36pt" style="font-family: opensans; color: #ffffff;">Network</span></strong></p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), - (173,2,1281,820,0,0,'<p style="line-height: 18px; overflow: hidden;"><strong><span class="visual_font_size_36pt" style="color: #ffffff; font-family: opensans;">Storage</span></strong></p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0) + (105,2,512,382,96,172,'<p style="overflow: hidden;"><span class="visual_font_size_28pt" style="font-family: opensans; color: #ffffff;">DB Status</span></p>
<p style="overflow: hidden;">&nbsp;</p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (106,2,886,382,0,0,'<p style=\"line-height: 18px; overflow: hidden;\"><span class=\"visual_font_size_28pt\" style=\"color: #ffffff; font-family: opensans;\">Disk slave</span></p>\n<p style=\"line-height: 18px; overflow: hidden;\"> </p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (107,2,1251,382,0,0,'<p style=\"line-height: 18px; overflow: hidden;\"><span class=\"visual_font_size_28pt\" style=\"color: #ffffff; font-family: opensans;\">Disk /var</span></p>\n<p style=\"line-height: 18px; overflow: hidden;\"> </p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (108,2,1547,382,0,0,'<p style="line-height: 18px; overflow: hidden;"><span class="visual_font_size_28pt" style="color: #ffffff; font-family: opensans;">Authentification</span></p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (109,2,126,820,0,0,'<p style="line-height: 18px; overflow: hidden;"><strong><span class="visual_font_size_36pt" style="font-family: opensans; color: #ffffff;">Processing</span></strong></p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (110,2,755,820,0,0,'<p style="line-height: 18px; overflow: hidden;"><strong><span class="visual_font_size_36pt" style="font-family: opensans; color: #ffffff;">Network</span></strong></p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0), + (111,2,1281,820,0,0,'<p style="line-height: 18px; overflow: hidden;"><strong><span class="visual_font_size_36pt" style="color: #ffffff; font-family: opensans;">Storage</span></strong></p>','white',4,3600,0,0,0,0,1,0,0,0,0,'line','down','','',0,0,'default',0,0.000,0.000,0,0,'analogic_1','time','Europe/Madrid',0,0) ; From 0e281c7a0a95c3ae82740ff12b23eea1d98a25fe Mon Sep 17 00:00:00 2001 From: Ramon Novoa <rnovoa@artica.es> Date: Thu, 19 Sep 2019 12:43:31 +0200 Subject: [PATCH 73/79] Send sendmail errors to pandora_server.error. --- pandora_server/lib/PandoraFMS/Sendmail.pm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pandora_server/lib/PandoraFMS/Sendmail.pm b/pandora_server/lib/PandoraFMS/Sendmail.pm index 0917c5a910..b0c4cf4955 100644 --- a/pandora_server/lib/PandoraFMS/Sendmail.pm +++ b/pandora_server/lib/PandoraFMS/Sendmail.pm @@ -211,10 +211,10 @@ sub sendmail { my $data = ref($_[$i]) ? $_[$i] : \$_[$i]; if ($mailcfg{'debug'} > 9) { if (length($$data) < 500) { - print ">", $$data; + print STDERR ">", $$data; } else { - print "> [...", length($$data), " bytes sent ...]\n"; + print STDERR "> [...", length($$data), " bytes sent ...]\n"; } } my @sockets = $Sel->can_write($mailcfg{'timeout'}); @@ -238,7 +238,7 @@ sub sendmail { last if ($buffer =~ m/\n$/); } - print "<$server_reply" if $mailcfg{'debug'} > 9; + print STDERR "<$server_reply" if $mailcfg{'debug'} > 9; if ($server_reply =~ /^[45]/) { chomp $server_reply; return; # return false @@ -363,7 +363,7 @@ sub sendmail { $localhost = hostname() || 'localhost'; foreach $server ( @{$mailcfg{'smtp'}} ) { - print "- trying $server\n" if $mailcfg{'debug'} > 9; + print STDERR "- trying $server\n" if $mailcfg{'debug'} > 9; $server =~ s/\s+//go; # remove spaces just in case of a typo # extract port if server name like "mail.domain.com:2525" @@ -382,12 +382,12 @@ sub sendmail { $S = new IO::Socket::SSL(PeerPort => $port, PeerAddr => $server, Proto => 'tcp', SSL_verify => 0, Domain => AF_INET); } if ( $S ) { - print "- connected to $server\n" if $mailcfg{'debug'} > 9; + print STDERR "- connected to $server\n" if $mailcfg{'debug'} > 9; last; } else { $error .= "connect to $server failed\n"; - print "- connect to $server failed, next server...\n" if $mailcfg{'debug'} > 9; + print STDERR "- connect to $server failed, next server...\n" if $mailcfg{'debug'} > 9; next; # next server } } From 274b6b9327ec4daf692348d62c861b5cbc7f9bcd Mon Sep 17 00:00:00 2001 From: Ramon Novoa <rnovoa@artica.es> Date: Thu, 19 Sep 2019 15:27:46 +0200 Subject: [PATCH 74/79] Disable certificate verification until it can be turned on/off from the console. --- pandora_server/lib/PandoraFMS/Sendmail.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandora_server/lib/PandoraFMS/Sendmail.pm b/pandora_server/lib/PandoraFMS/Sendmail.pm index b0c4cf4955..21b56d1b86 100644 --- a/pandora_server/lib/PandoraFMS/Sendmail.pm +++ b/pandora_server/lib/PandoraFMS/Sendmail.pm @@ -379,7 +379,7 @@ sub sendmail { $S = new IO::Socket::INET(PeerPort => $port, PeerAddr => $server, Proto => 'tcp'); } else { - $S = new IO::Socket::SSL(PeerPort => $port, PeerAddr => $server, Proto => 'tcp', SSL_verify => 0, Domain => AF_INET); + $S = new IO::Socket::SSL(PeerPort => $port, PeerAddr => $server, Proto => 'tcp', SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE(), Domain => AF_INET); } if ( $S ) { print STDERR "- connected to $server\n" if $mailcfg{'debug'} > 9; From d8ab1defcbf9e989204ec84613113ba5fb6e6bd7 Mon Sep 17 00:00:00 2001 From: artica <artica.devel@gmail.com> Date: Fri, 20 Sep 2019 00:01:09 +0200 Subject: [PATCH 75/79] Auto-updated build strings. --- pandora_agents/unix/DEBIAN/control | 2 +- pandora_agents/unix/DEBIAN/make_deb_package.sh | 2 +- pandora_agents/unix/pandora_agent | 2 +- pandora_agents/unix/pandora_agent.redhat.spec | 2 +- pandora_agents/unix/pandora_agent.spec | 2 +- pandora_agents/unix/pandora_agent_installer | 2 +- pandora_agents/win32/installer/pandora.mpi | 2 +- pandora_agents/win32/pandora.cc | 2 +- pandora_agents/win32/versioninfo.rc | 2 +- pandora_console/DEBIAN/control | 2 +- pandora_console/DEBIAN/make_deb_package.sh | 2 +- pandora_console/include/config_process.php | 2 +- pandora_console/install.php | 2 +- pandora_console/pandora_console.redhat.spec | 2 +- pandora_console/pandora_console.rhel7.spec | 2 +- pandora_console/pandora_console.spec | 2 +- pandora_server/DEBIAN/control | 2 +- pandora_server/DEBIAN/make_deb_package.sh | 2 +- pandora_server/lib/PandoraFMS/Config.pm | 2 +- pandora_server/lib/PandoraFMS/PluginTools.pm | 2 +- pandora_server/pandora_server.redhat.spec | 2 +- pandora_server/pandora_server.spec | 2 +- pandora_server/pandora_server_installer | 2 +- pandora_server/util/pandora_db.pl | 2 +- pandora_server/util/pandora_manage.pl | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 15a54e51db..5e5dabfb7f 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.738-190919 +Version: 7.0NG.738-190920 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index c8154f495f..cb275c2e53 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190919" +pandora_version="7.0NG.738-190920" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index f97ba2fc4e..190ace7b38 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -42,7 +42,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.738'; -use constant AGENT_BUILD => '190919'; +use constant AGENT_BUILD => '190920'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index e1c252eef8..21eb1a01b2 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190919 +%define release 190920 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index c94e3f3656..07e61aa6b8 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190919 +%define release 190920 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index 0c65224531..6950b20fde 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190919" +PI_BUILD="190920" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index 9eb3a6cd07..b7e0b3c260 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{190919} +{190920} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 8101c88e2e..66e5852583 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.738(Build 190919)") +#define PANDORA_VERSION ("7.0NG.738(Build 190920)") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index 77616f62dd..d8277f5f7f 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.738(Build 190919))" + VALUE "ProductVersion", "(7.0NG.738(Build 190920))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index 428fe52564..73fe6b111f 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.738-190919 +Version: 7.0NG.738-190920 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index c7f7078f73..fc87c9fe8b 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190919" +pandora_version="7.0NG.738-190920" package_pear=0 package_pandora=1 diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index 51ba7f2af7..7529126224 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC190919'; +$build_version = 'PC190920'; $pandora_version = 'v7.0NG.738'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/install.php b/pandora_console/install.php index 5ba3926259..01e1e99fbd 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@ <div style='height: 10px'> <?php $version = '7.0NG.738'; - $build = '190919'; + $build = '190920'; $banner = "v$version Build $build"; error_reporting(0); diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec index 57c654851d..2e794ce981 100644 --- a/pandora_console/pandora_console.redhat.spec +++ b/pandora_console/pandora_console.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190919 +%define release 190920 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec index 505c7f7640..d5938ce965 100644 --- a/pandora_console/pandora_console.rhel7.spec +++ b/pandora_console/pandora_console.rhel7.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190919 +%define release 190920 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec index 8127bedc75..618229adff 100644 --- a/pandora_console/pandora_console.spec +++ b/pandora_console/pandora_console.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190919 +%define release 190920 %define httpd_name httpd # User and Group under which Apache is running %define httpd_name apache2 diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control index ad82103ea8..a76b817f64 100644 --- a/pandora_server/DEBIAN/control +++ b/pandora_server/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-server -Version: 7.0NG.738-190919 +Version: 7.0NG.738-190920 Architecture: all Priority: optional Section: admin diff --git a/pandora_server/DEBIAN/make_deb_package.sh b/pandora_server/DEBIAN/make_deb_package.sh index 33b89f2f2e..abde6de7e3 100644 --- a/pandora_server/DEBIAN/make_deb_package.sh +++ b/pandora_server/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190919" +pandora_version="7.0NG.738-190920" package_cpan=0 package_pandora=1 diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 7941e627b6..a16dca68d1 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -45,7 +45,7 @@ our @EXPORT = qw( # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190919"; +my $pandora_build = "190920"; our $VERSION = $pandora_version." ".$pandora_build; # Setup hash diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index 1fd4edcf4a..650e809570 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -32,7 +32,7 @@ our @ISA = qw(Exporter); # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190919"; +my $pandora_build = "190920"; our $VERSION = $pandora_version." ".$pandora_build; our %EXPORT_TAGS = ( 'all' => [ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index 2376c07b2c..f24f6ccb37 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190919 +%define release 190920 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index 58a9a051fc..21096e31ae 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190919 +%define release 190920 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index 40e9c53839..e60ea3d496 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190919" +PI_BUILD="190920" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index e0ba24f054..b6efec70f8 100644 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -34,7 +34,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.738 PS190919"; +my $version = "7.0NG.738 PS190920"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index ab951ab0f7..91c63ecc1c 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.738 PS190919"; +my $version = "7.0NG.738 PS190920"; # save program name for logging my $progname = basename($0); From 0bdf96725987feeda23a004104052153d0b5f791 Mon Sep 17 00:00:00 2001 From: Ramon Novoa <rnovoa@artica.es> Date: Fri, 20 Sep 2019 10:36:56 +0200 Subject: [PATCH 76/79] Temporarily disable cert verification for STARTTLS too. --- pandora_server/lib/PandoraFMS/Sendmail.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandora_server/lib/PandoraFMS/Sendmail.pm b/pandora_server/lib/PandoraFMS/Sendmail.pm index 21b56d1b86..08819c78ab 100644 --- a/pandora_server/lib/PandoraFMS/Sendmail.pm +++ b/pandora_server/lib/PandoraFMS/Sendmail.pm @@ -434,7 +434,7 @@ sub sendmail { socket_write("STARTTLS$CRLF") || return fail("send STARTTLS error"); socket_read() || return fail('STARTTLS error'); - IO::Socket::SSL->start_SSL($S, SSL_hostname => $server) + IO::Socket::SSL->start_SSL($S, SSL_hostname => $server, SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE()) || return fail("start_SSL failed"); # The client SHOULD send an EHLO command as the From 27d8c5025ef1c97c9182b589cedb4218b6f47d2e Mon Sep 17 00:00:00 2001 From: artica <artica.devel@gmail.com> Date: Sat, 21 Sep 2019 00:01:09 +0200 Subject: [PATCH 77/79] Auto-updated build strings. --- pandora_agents/unix/DEBIAN/control | 2 +- pandora_agents/unix/DEBIAN/make_deb_package.sh | 2 +- pandora_agents/unix/pandora_agent | 2 +- pandora_agents/unix/pandora_agent.redhat.spec | 2 +- pandora_agents/unix/pandora_agent.spec | 2 +- pandora_agents/unix/pandora_agent_installer | 2 +- pandora_agents/win32/installer/pandora.mpi | 2 +- pandora_agents/win32/pandora.cc | 2 +- pandora_agents/win32/versioninfo.rc | 2 +- pandora_console/DEBIAN/control | 2 +- pandora_console/DEBIAN/make_deb_package.sh | 2 +- pandora_console/include/config_process.php | 2 +- pandora_console/install.php | 2 +- pandora_console/pandora_console.redhat.spec | 2 +- pandora_console/pandora_console.rhel7.spec | 2 +- pandora_console/pandora_console.spec | 2 +- pandora_server/DEBIAN/control | 2 +- pandora_server/DEBIAN/make_deb_package.sh | 2 +- pandora_server/lib/PandoraFMS/Config.pm | 2 +- pandora_server/lib/PandoraFMS/PluginTools.pm | 2 +- pandora_server/pandora_server.redhat.spec | 2 +- pandora_server/pandora_server.spec | 2 +- pandora_server/pandora_server_installer | 2 +- pandora_server/util/pandora_db.pl | 2 +- pandora_server/util/pandora_manage.pl | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 5e5dabfb7f..023664430e 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.738-190920 +Version: 7.0NG.738-190921 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index cb275c2e53..184f6ec6b7 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190920" +pandora_version="7.0NG.738-190921" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index 190ace7b38..e89b391de6 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -42,7 +42,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.738'; -use constant AGENT_BUILD => '190920'; +use constant AGENT_BUILD => '190921'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index 21eb1a01b2..f235ae28e3 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190920 +%define release 190921 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index 07e61aa6b8..adcec1d8b1 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190920 +%define release 190921 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index 6950b20fde..f69a3cc155 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190920" +PI_BUILD="190921" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index b7e0b3c260..1e39862b92 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{190920} +{190921} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 66e5852583..714d43790f 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.738(Build 190920)") +#define PANDORA_VERSION ("7.0NG.738(Build 190921)") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index d8277f5f7f..6d9abe6705 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.738(Build 190920))" + VALUE "ProductVersion", "(7.0NG.738(Build 190921))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index 73fe6b111f..0277553ff7 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.738-190920 +Version: 7.0NG.738-190921 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index fc87c9fe8b..ce9fdbe5da 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190920" +pandora_version="7.0NG.738-190921" package_pear=0 package_pandora=1 diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index 7529126224..4115a277c0 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC190920'; +$build_version = 'PC190921'; $pandora_version = 'v7.0NG.738'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/install.php b/pandora_console/install.php index 01e1e99fbd..bf38c0e3c0 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@ <div style='height: 10px'> <?php $version = '7.0NG.738'; - $build = '190920'; + $build = '190921'; $banner = "v$version Build $build"; error_reporting(0); diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec index 2e794ce981..762e00900d 100644 --- a/pandora_console/pandora_console.redhat.spec +++ b/pandora_console/pandora_console.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190920 +%define release 190921 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec index d5938ce965..96a0865a2c 100644 --- a/pandora_console/pandora_console.rhel7.spec +++ b/pandora_console/pandora_console.rhel7.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190920 +%define release 190921 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec index 618229adff..66612ff973 100644 --- a/pandora_console/pandora_console.spec +++ b/pandora_console/pandora_console.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190920 +%define release 190921 %define httpd_name httpd # User and Group under which Apache is running %define httpd_name apache2 diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control index e52fbc8ba1..48cbe64944 100644 --- a/pandora_server/DEBIAN/control +++ b/pandora_server/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-server -Version: 7.0NG.738-190920 +Version: 7.0NG.738-190921 Architecture: all Priority: optional Section: admin diff --git a/pandora_server/DEBIAN/make_deb_package.sh b/pandora_server/DEBIAN/make_deb_package.sh index abde6de7e3..12d1278085 100644 --- a/pandora_server/DEBIAN/make_deb_package.sh +++ b/pandora_server/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190920" +pandora_version="7.0NG.738-190921" package_cpan=0 package_pandora=1 diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 089e9cc15f..cc0d21fe83 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -45,7 +45,7 @@ our @EXPORT = qw( # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190920"; +my $pandora_build = "190921"; our $VERSION = $pandora_version." ".$pandora_build; # Setup hash diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index 650e809570..9f220ce286 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -32,7 +32,7 @@ our @ISA = qw(Exporter); # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190920"; +my $pandora_build = "190921"; our $VERSION = $pandora_version." ".$pandora_build; our %EXPORT_TAGS = ( 'all' => [ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index cad6da15d4..e9cb84b1ac 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190920 +%define release 190921 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index e881c44d10..b361114b92 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190920 +%define release 190921 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index e60ea3d496..4f7871d685 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190920" +PI_BUILD="190921" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index b6efec70f8..1ac8fdf207 100644 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -34,7 +34,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.738 PS190920"; +my $version = "7.0NG.738 PS190921"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index 91c63ecc1c..e588ffd7f5 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.738 PS190920"; +my $version = "7.0NG.738 PS190921"; # save program name for logging my $progname = basename($0); From b763650177496bde4905003c40fef9a2fac242be Mon Sep 17 00:00:00 2001 From: artica <artica.devel@gmail.com> Date: Sun, 22 Sep 2019 00:01:06 +0200 Subject: [PATCH 78/79] Auto-updated build strings. --- pandora_agents/unix/DEBIAN/control | 2 +- pandora_agents/unix/DEBIAN/make_deb_package.sh | 2 +- pandora_agents/unix/pandora_agent | 2 +- pandora_agents/unix/pandora_agent.redhat.spec | 2 +- pandora_agents/unix/pandora_agent.spec | 2 +- pandora_agents/unix/pandora_agent_installer | 2 +- pandora_agents/win32/installer/pandora.mpi | 2 +- pandora_agents/win32/pandora.cc | 2 +- pandora_agents/win32/versioninfo.rc | 2 +- pandora_console/DEBIAN/control | 2 +- pandora_console/DEBIAN/make_deb_package.sh | 2 +- pandora_console/include/config_process.php | 2 +- pandora_console/install.php | 2 +- pandora_console/pandora_console.redhat.spec | 2 +- pandora_console/pandora_console.rhel7.spec | 2 +- pandora_console/pandora_console.spec | 2 +- pandora_server/DEBIAN/control | 2 +- pandora_server/DEBIAN/make_deb_package.sh | 2 +- pandora_server/lib/PandoraFMS/Config.pm | 2 +- pandora_server/lib/PandoraFMS/PluginTools.pm | 2 +- pandora_server/pandora_server.redhat.spec | 2 +- pandora_server/pandora_server.spec | 2 +- pandora_server/pandora_server_installer | 2 +- pandora_server/util/pandora_db.pl | 2 +- pandora_server/util/pandora_manage.pl | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 023664430e..4b83c5e657 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.738-190921 +Version: 7.0NG.738-190922 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index 184f6ec6b7..daa569565c 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190921" +pandora_version="7.0NG.738-190922" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index e89b391de6..c95e42de07 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -42,7 +42,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.738'; -use constant AGENT_BUILD => '190921'; +use constant AGENT_BUILD => '190922'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index f235ae28e3..415631e82a 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190921 +%define release 190922 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index adcec1d8b1..eae8ee0f20 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190921 +%define release 190922 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index f69a3cc155..3cde9f5290 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190921" +PI_BUILD="190922" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index 1e39862b92..aad9523e05 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{190921} +{190922} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 714d43790f..69f676ec71 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.738(Build 190921)") +#define PANDORA_VERSION ("7.0NG.738(Build 190922)") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index 6d9abe6705..673f0f8f4b 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.738(Build 190921))" + VALUE "ProductVersion", "(7.0NG.738(Build 190922))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index 0277553ff7..25ab48355d 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.738-190921 +Version: 7.0NG.738-190922 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index ce9fdbe5da..d102f79a22 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190921" +pandora_version="7.0NG.738-190922" package_pear=0 package_pandora=1 diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index 4115a277c0..0a90c25da0 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC190921'; +$build_version = 'PC190922'; $pandora_version = 'v7.0NG.738'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/install.php b/pandora_console/install.php index bf38c0e3c0..3ca2f0111f 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@ <div style='height: 10px'> <?php $version = '7.0NG.738'; - $build = '190921'; + $build = '190922'; $banner = "v$version Build $build"; error_reporting(0); diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec index 762e00900d..45f05bba39 100644 --- a/pandora_console/pandora_console.redhat.spec +++ b/pandora_console/pandora_console.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190921 +%define release 190922 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec index 96a0865a2c..af1bae9baf 100644 --- a/pandora_console/pandora_console.rhel7.spec +++ b/pandora_console/pandora_console.rhel7.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190921 +%define release 190922 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec index 66612ff973..e3c7375d6e 100644 --- a/pandora_console/pandora_console.spec +++ b/pandora_console/pandora_console.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190921 +%define release 190922 %define httpd_name httpd # User and Group under which Apache is running %define httpd_name apache2 diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control index 48cbe64944..b449bcc2a3 100644 --- a/pandora_server/DEBIAN/control +++ b/pandora_server/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-server -Version: 7.0NG.738-190921 +Version: 7.0NG.738-190922 Architecture: all Priority: optional Section: admin diff --git a/pandora_server/DEBIAN/make_deb_package.sh b/pandora_server/DEBIAN/make_deb_package.sh index 12d1278085..61f01a4a95 100644 --- a/pandora_server/DEBIAN/make_deb_package.sh +++ b/pandora_server/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190921" +pandora_version="7.0NG.738-190922" package_cpan=0 package_pandora=1 diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index cc0d21fe83..f3389f4c18 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -45,7 +45,7 @@ our @EXPORT = qw( # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190921"; +my $pandora_build = "190922"; our $VERSION = $pandora_version." ".$pandora_build; # Setup hash diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index 9f220ce286..9744f05ddb 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -32,7 +32,7 @@ our @ISA = qw(Exporter); # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190921"; +my $pandora_build = "190922"; our $VERSION = $pandora_version." ".$pandora_build; our %EXPORT_TAGS = ( 'all' => [ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index e9cb84b1ac..2905ef8132 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190921 +%define release 190922 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index b361114b92..21afab4430 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190921 +%define release 190922 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index 4f7871d685..1bb9a1ba1a 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190921" +PI_BUILD="190922" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index 1ac8fdf207..82981551b1 100644 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -34,7 +34,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.738 PS190921"; +my $version = "7.0NG.738 PS190922"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index e588ffd7f5..c31a80044f 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.738 PS190921"; +my $version = "7.0NG.738 PS190922"; # save program name for logging my $progname = basename($0); From 2543f54413ee2da2743ccdd009326b425c5c3714 Mon Sep 17 00:00:00 2001 From: artica <artica.devel@gmail.com> Date: Mon, 23 Sep 2019 00:01:17 +0200 Subject: [PATCH 79/79] Auto-updated build strings. --- pandora_agents/unix/DEBIAN/control | 2 +- pandora_agents/unix/DEBIAN/make_deb_package.sh | 2 +- pandora_agents/unix/pandora_agent | 2 +- pandora_agents/unix/pandora_agent.redhat.spec | 2 +- pandora_agents/unix/pandora_agent.spec | 2 +- pandora_agents/unix/pandora_agent_installer | 2 +- pandora_agents/win32/installer/pandora.mpi | 2 +- pandora_agents/win32/pandora.cc | 2 +- pandora_agents/win32/versioninfo.rc | 2 +- pandora_console/DEBIAN/control | 2 +- pandora_console/DEBIAN/make_deb_package.sh | 2 +- pandora_console/include/config_process.php | 2 +- pandora_console/install.php | 2 +- pandora_console/pandora_console.redhat.spec | 2 +- pandora_console/pandora_console.rhel7.spec | 2 +- pandora_console/pandora_console.spec | 2 +- pandora_server/DEBIAN/control | 2 +- pandora_server/DEBIAN/make_deb_package.sh | 2 +- pandora_server/lib/PandoraFMS/Config.pm | 2 +- pandora_server/lib/PandoraFMS/PluginTools.pm | 2 +- pandora_server/pandora_server.redhat.spec | 2 +- pandora_server/pandora_server.spec | 2 +- pandora_server/pandora_server_installer | 2 +- pandora_server/util/pandora_db.pl | 2 +- pandora_server/util/pandora_manage.pl | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 4b83c5e657..67cd410a32 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.738-190922 +Version: 7.0NG.738-190923 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index daa569565c..385336710c 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190922" +pandora_version="7.0NG.738-190923" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index c95e42de07..4b6aec04ba 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -42,7 +42,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.738'; -use constant AGENT_BUILD => '190922'; +use constant AGENT_BUILD => '190923'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index 415631e82a..f189eea490 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190922 +%define release 190923 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index eae8ee0f20..561e65e18a 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.738 -%define release 190922 +%define release 190923 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index 3cde9f5290..4d92b3088d 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190922" +PI_BUILD="190923" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index aad9523e05..b8f1bcf5e7 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{190922} +{190923} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 69f676ec71..9b445b24aa 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.738(Build 190922)") +#define PANDORA_VERSION ("7.0NG.738(Build 190923)") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index 673f0f8f4b..b185cf6fec 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.738(Build 190922))" + VALUE "ProductVersion", "(7.0NG.738(Build 190923))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index 25ab48355d..d883d99eac 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.738-190922 +Version: 7.0NG.738-190923 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index d102f79a22..6ed2c0da18 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190922" +pandora_version="7.0NG.738-190923" package_pear=0 package_pandora=1 diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index 0a90c25da0..7e3667dd2c 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC190922'; +$build_version = 'PC190923'; $pandora_version = 'v7.0NG.738'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/install.php b/pandora_console/install.php index 3ca2f0111f..a06e476f1e 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@ <div style='height: 10px'> <?php $version = '7.0NG.738'; - $build = '190922'; + $build = '190923'; $banner = "v$version Build $build"; error_reporting(0); diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec index 45f05bba39..573a742276 100644 --- a/pandora_console/pandora_console.redhat.spec +++ b/pandora_console/pandora_console.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190922 +%define release 190923 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec index af1bae9baf..7e44602da4 100644 --- a/pandora_console/pandora_console.rhel7.spec +++ b/pandora_console/pandora_console.rhel7.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190922 +%define release 190923 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec index e3c7375d6e..659938b9aa 100644 --- a/pandora_console/pandora_console.spec +++ b/pandora_console/pandora_console.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.738 -%define release 190922 +%define release 190923 %define httpd_name httpd # User and Group under which Apache is running %define httpd_name apache2 diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control index b449bcc2a3..cdf6610772 100644 --- a/pandora_server/DEBIAN/control +++ b/pandora_server/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-server -Version: 7.0NG.738-190922 +Version: 7.0NG.738-190923 Architecture: all Priority: optional Section: admin diff --git a/pandora_server/DEBIAN/make_deb_package.sh b/pandora_server/DEBIAN/make_deb_package.sh index 61f01a4a95..7bb767b956 100644 --- a/pandora_server/DEBIAN/make_deb_package.sh +++ b/pandora_server/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.738-190922" +pandora_version="7.0NG.738-190923" package_cpan=0 package_pandora=1 diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index f3389f4c18..3b77520174 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -45,7 +45,7 @@ our @EXPORT = qw( # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190922"; +my $pandora_build = "190923"; our $VERSION = $pandora_version." ".$pandora_build; # Setup hash diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index 9744f05ddb..a45d1108f2 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -32,7 +32,7 @@ our @ISA = qw(Exporter); # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.738"; -my $pandora_build = "190922"; +my $pandora_build = "190923"; our $VERSION = $pandora_version." ".$pandora_build; our %EXPORT_TAGS = ( 'all' => [ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index 2905ef8132..f2819ac79b 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190922 +%define release 190923 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index 21afab4430..56cbacb03d 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.738 -%define release 190922 +%define release 190923 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index 1bb9a1ba1a..158d1e9deb 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.738" -PI_BUILD="190922" +PI_BUILD="190923" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index 82981551b1..427e6817a2 100644 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -34,7 +34,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.738 PS190922"; +my $version = "7.0NG.738 PS190923"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index c31a80044f..974f7d06c9 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.738 PS190922"; +my $version = "7.0NG.738 PS190923"; # save program name for logging my $progname = basename($0);