Merge remote-tracking branch 'origin/develop' into 339-No_cortar_elementos_en_PDF

Conflicts:
	pandora_console/install.php


Former-commit-id: e10a178c783187df7d07027f11b4fa1c06f923b0
This commit is contained in:
daniel 2019-02-18 13:16:43 +01:00
commit e00ae31862
38 changed files with 830 additions and 307 deletions

View File

@ -1,5 +1,5 @@
package: pandorafms-agent-unix package: pandorafms-agent-unix
Version: 7.0NG.731-190214 Version: 7.0NG.731-190218
Architecture: all Architecture: all
Priority: optional Priority: optional
Section: admin Section: admin

View File

@ -14,7 +14,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
pandora_version="7.0NG.731-190214" pandora_version="7.0NG.731-190218"
echo "Test if you has the tools for to make the packages." echo "Test if you has the tools for to make the packages."
whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null

View File

@ -42,7 +42,7 @@ my $Sem = undef;
my $ThreadSem = undef; my $ThreadSem = undef;
use constant AGENT_VERSION => '7.0NG.731'; use constant AGENT_VERSION => '7.0NG.731';
use constant AGENT_BUILD => '190214'; use constant AGENT_BUILD => '190218';
# Agent log default file size maximum and instances # Agent log default file size maximum and instances
use constant DEFAULT_MAX_LOG_SIZE => 600000; use constant DEFAULT_MAX_LOG_SIZE => 600000;

View File

@ -3,7 +3,7 @@
# #
%define name pandorafms_agent_unix %define name pandorafms_agent_unix
%define version 7.0NG.731 %define version 7.0NG.731
%define release 190214 %define release 190218
Summary: Pandora FMS Linux agent, PERL version Summary: Pandora FMS Linux agent, PERL version
Name: %{name} Name: %{name}

View File

@ -3,7 +3,7 @@
# #
%define name pandorafms_agent_unix %define name pandorafms_agent_unix
%define version 7.0NG.731 %define version 7.0NG.731
%define release 190214 %define release 190218
Summary: Pandora FMS Linux agent, PERL version Summary: Pandora FMS Linux agent, PERL version
Name: %{name} Name: %{name}

View File

@ -10,7 +10,7 @@
# ********************************************************************** # **********************************************************************
PI_VERSION="7.0NG.731" PI_VERSION="7.0NG.731"
PI_BUILD="190214" PI_BUILD="190218"
OS_NAME=`uname -s` OS_NAME=`uname -s`
FORCE=0 FORCE=0

View File

@ -186,7 +186,7 @@ UpgradeApplicationID
{} {}
Version Version
{190214} {190218}
ViewReadme ViewReadme
{Yes} {Yes}

View File

@ -30,7 +30,7 @@ using namespace Pandora;
using namespace Pandora_Strutils; using namespace Pandora_Strutils;
#define PATH_SIZE _MAX_PATH+1 #define PATH_SIZE _MAX_PATH+1
#define PANDORA_VERSION ("7.0NG.731(Build 190214)") #define PANDORA_VERSION ("7.0NG.731(Build 190218)")
string pandora_path; string pandora_path;
string pandora_dir; string pandora_dir;

View File

@ -11,7 +11,7 @@ BEGIN
VALUE "LegalCopyright", "Artica ST" VALUE "LegalCopyright", "Artica ST"
VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "OriginalFilename", "PandoraAgent.exe"
VALUE "ProductName", "Pandora FMS Windows Agent" VALUE "ProductName", "Pandora FMS Windows Agent"
VALUE "ProductVersion", "(7.0NG.731(Build 190214))" VALUE "ProductVersion", "(7.0NG.731(Build 190218))"
VALUE "FileVersion", "1.0.0.0" VALUE "FileVersion", "1.0.0.0"
END END
END END

View File

@ -1,5 +1,5 @@
package: pandorafms-console package: pandorafms-console
Version: 7.0NG.731-190214 Version: 7.0NG.731-190218
Architecture: all Architecture: all
Priority: optional Priority: optional
Section: admin Section: admin

View File

@ -14,7 +14,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
pandora_version="7.0NG.731-190214" pandora_version="7.0NG.731-190218"
package_pear=0 package_pear=0
package_pandora=1 package_pandora=1

View File

@ -328,4 +328,3 @@ function mainModuleGroups()
extensions_add_operation_menu_option(__('Module groups'), 'estado', 'module_groups/brick.png', 'v1r1', 'view'); extensions_add_operation_menu_option(__('Module groups'), 'estado', 'module_groups/brick.png', 'v1r1', 'view');
extensions_add_main_function('mainModuleGroups'); extensions_add_main_function('mainModuleGroups');

View File

@ -236,7 +236,7 @@ if ($new_agent) {
} }
$table->data[2][0] = __('IP Address'); $table->data[2][0] = __('IP Address');
$table->data[2][1] = html_print_input_text('direccion', $direccion_agente, '', 16, 100, true); $table->data[2][1] = html_print_input_text('direccion', $direccion_agente, '', 16, 100, true).html_print_checkbox('unique_ip', 1, $config['unique_ip'], true).__('Unique IP').ui_print_help_tip(__('Set the primary IP address as the unique IP, preventing the same primary IP address from being used in more than one agent'), true);
if ($id_agente) { if ($id_agente) {
$table->data[2][1] .= '    '; $table->data[2][1] .= '    ';

View File

@ -81,6 +81,7 @@ $alias_as_name = 0;
$direccion_agente = get_parameter('direccion', ''); $direccion_agente = get_parameter('direccion', '');
$direccion_agente = trim(io_safe_output($direccion_agente)); $direccion_agente = trim(io_safe_output($direccion_agente));
$direccion_agente = io_safe_input($direccion_agente); $direccion_agente = io_safe_input($direccion_agente);
$unique_ip = 0;
$intervalo = SECONDS_5MINUTES; $intervalo = SECONDS_5MINUTES;
$ff_interval = 0; $ff_interval = 0;
$quiet_module = 0; $quiet_module = 0;
@ -161,6 +162,7 @@ if ($create_agent) {
$alias = (string) get_parameter_post('alias', ''); $alias = (string) get_parameter_post('alias', '');
$alias_as_name = (int) get_parameter_post('alias_as_name', 0); $alias_as_name = (int) get_parameter_post('alias_as_name', 0);
$direccion_agente = (string) get_parameter_post('direccion', ''); $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)); $direccion_agente = trim(io_safe_output($direccion_agente));
@ -216,7 +218,12 @@ if ($create_agent) {
$nombre_agente = $alias; $nombre_agente = $alias;
} }
if (!$exists_alias) { if ($unique_ip && $direccion_agente != '') {
$sql = 'SELECT direccion FROM tagente WHERE direccion = "'.$direccion_agente.'"';
$exists_ip = db_get_row_sql($sql);
}
if (!$exists_alias && !$exists_ip) {
$id_agente = db_process_sql_insert( $id_agente = db_process_sql_insert(
'tagente', 'tagente',
[ [
@ -326,6 +333,8 @@ if ($create_agent) {
$agent_creation_error = __('Could not be created'); $agent_creation_error = __('Could not be created');
if ($exists_alias) { if ($exists_alias) {
$agent_creation_error = __('Could not be created, because name already exists'); $agent_creation_error = __('Could not be created, because name already exists');
} else if ($exists_ip) {
$agent_creation_error = __('Could not be created, because IP already exists');
} }
} }
} }
@ -758,6 +767,7 @@ if ($update_agent) {
$alias = str_replace('`', '‘', (string) get_parameter_post('alias', '')); $alias = str_replace('`', '‘', (string) get_parameter_post('alias', ''));
$alias_as_name = (int) get_parameter_post('alias_as_name', 0); $alias_as_name = (int) get_parameter_post('alias_as_name', 0);
$direccion_agente = (string) get_parameter_post('direccion', ''); $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)); $direccion_agente = trim(io_safe_output($direccion_agente));
@ -860,8 +870,15 @@ if ($update_agent) {
// 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 != '') {
$sql = 'SELECT direccion FROM tagente WHERE direccion = "'.$direccion_agente.'"';
$exists_ip = db_get_row_sql($sql);
}
if ($grupo <= 0) { if ($grupo <= 0) {
ui_print_error_message(__('The group id %d is incorrect.', $grupo)); ui_print_error_message(__('The group id %d is incorrect.', $grupo));
} else if ($exists_ip) {
ui_print_error_message(__('Duplicate main IP address'));
} else { } else {
// If different IP is specified than previous, add the IP // If different IP is specified than previous, add the IP
if ($direccion_agente != '' if ($direccion_agente != ''

View File

@ -143,7 +143,7 @@ if ($update) {
} }
} }
} else { } else {
// Standard procedure // Standard procedure.
foreach ($agents_ as $agent_) { foreach ($agents_ as $agent_) {
if ($modules_ == false) { if ($modules_ == false) {
$modules_ = []; $modules_ = [];
@ -315,7 +315,7 @@ if ($module_type != '') {
$names = agents_get_modules( $names = agents_get_modules(
array_keys($agents), array_keys($agents),
'DISTINCT(tagente_modulo.nombre)', 'tagente_modulo.nombre',
$filter, $filter,
false false
); );
@ -1965,4 +1965,3 @@ function process_manage_edit($module_name, $agents_select=null, $module_status='
return true; return true;
} }

View File

@ -2721,7 +2721,7 @@ function edit_custom_graph() {
} }
}); });
window.location.href = server_url + "/index.php?sec=reporting&sec2=godmode/reporting/graph_builder&edit_graph=1&id=" + id_element_graph + hash_data; window.location.href = server_url + "index.php?sec=reporting&sec2=godmode/reporting/graph_builder&edit_graph=1&id=" + id_element_graph + hash_data;
<?php <?php
} else { } else {
?> ?>

View File

@ -1,37 +1,242 @@
<?php <?php
/**
* Extension to manage a list of gateways and the node address where they should
* point to.
*
* @category Extensions
* @package Pandora FMS
* @subpackage Community
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2019 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 for 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.
* ============================================================================
*/
// Pandora FMS - http://pandorafms.com // Load global vars.
// ==================================================
// Copyright (c) 2005-2009 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 for 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.
// Load global vars
global $config; global $config;
require_once 'include/config.php';
check_login(); check_login();
if (! check_acl($config['id_user'], 0, 'PM') && ! is_user_admin($config['id_user'])) { if (! check_acl($config['id_user'], 0, 'PM')
&& ! is_user_admin($config['id_user'])
) {
db_pandora_audit('ACL Violation', 'Trying to access Setup Management'); db_pandora_audit('ACL Violation', 'Trying to access Setup Management');
include 'general/noaccess.php'; include 'general/noaccess.php';
return; return;
} }
// Load enterprise extensions $update_config = get_parameter('update_config', 0);
// ~ enterprise_include_once ('godmode/setup/setup.php'); if ($update_config == 1 && $config['history_db_enabled'] == 1) {
/* if (! isset($config['history_db_connection'])
NOTICE FOR DEVELOPERS: || $config['history_db_connection'] === false
) {
$config['history_db_connection'] = db_connect(
$config['history_db_host'],
$config['history_db_name'],
$config['history_db_user'],
io_output_password($config['history_db_pass']),
$config['history_db_port'],
false
);
}
if ($config['history_db_connection'] !== false) {
$historical_days_purge = get_parameter('historical_days_purge', 0);
$historical_days_compact = get_parameter('historical_days_compact', 0);
$historical_step_compact = get_parameter('historical_step_compact', 0);
$historical_event_purge = get_parameter('historical_event_purge', 0);
$historical_string_purge = get_parameter('historical_string_purge', 0);
$history_connect = @mysql_db_process_sql(
'SELECT 1 FROM tconfig',
'affected_rows',
$config['history_db_connection'],
false
);
$config_history = false;
if ($history_connect !== false) {
$config_history = mysql_db_process_sql(
'SELECT * FROM tconfig',
'affected_rows',
$config['history_db_connection'],
false
);
if (!$config_history) {
$sql = "INSERT INTO tconfig (token, `value`) VALUES
('days_purge', ".$historical_days_purge."),
('days_compact', ".$historical_days_compact."),
('step_compact', ".$historical_step_compact."),
('event_purge', ".$historical_event_purge."),
('string_purge', ".$historical_string_purge."),
('history_db_enabled', 0)";
mysql_db_process_sql(
$sql,
'insert_id',
$config['history_db_connection'],
false
);
} else {
$sql = 'UPDATE tconfig SET `value` = '.$historical_days_purge." WHERE token = 'days_purge'";
mysql_db_process_sql(
$sql,
'update_id',
$config['history_db_connection'],
false
);
$sql = 'UPDATE tconfig SET `value` = '.$historical_days_compact." WHERE token = 'days_compact'";
mysql_db_process_sql(
$sql,
'update_id',
$config['history_db_connection'],
false
);
$sql = 'UPDATE tconfig SET `value` = '.$historical_step_compact." WHERE token = 'step_compact'";
mysql_db_process_sql(
$sql,
'update_id',
$config['history_db_connection'],
false
);
$sql = 'UPDATE tconfig SET `value` = '.$historical_event_purge." WHERE token = 'event_purge'";
mysql_db_process_sql(
$sql,
'update_id',
$config['history_db_connection'],
false
);
$sql = 'UPDATE tconfig SET `value` = '.$historical_string_purge." WHERE token = 'string_purge'";
mysql_db_process_sql(
$sql,
'update_id',
$config['history_db_connection'],
false
);
$sql = "UPDATE tconfig SET `value` = 0 WHERE token = 'history_db_enabled'";
mysql_db_process_sql(
$sql,
'update_id',
$config['history_db_connection'],
false
);
}
}
}
}
$table_status = new StdClass();
$table_status->width = '100%';
$table_status->class = 'databox filters';
$table_status->style[0] = 'font-weight: bold';
$table_status->size[0] = '10%';
$table_status->data = [];
$sql = "SELECT UNIX_TIMESTAMP(NOW()) - `value` AS updated_at
FROM tconfig
WHERE token = 'db_maintance'";
$time_pandora_db_active = db_get_sql($sql);
if ($time_pandora_db_active < SECONDS_12HOURS) {
$table_status->data[0][0] = html_print_image(
'images/dot_green.png',
true
);
} else {
$table_status->data[0][0] = html_print_image(
'images/dot_red.png',
true
);
}
$table_status->data[0][0] .= ' '.__('Pandora_db running in active database.');
$table_status->data[0][0] .= ' '.__('Executed:').' ';
$table_status->data[0][0] .= human_time_description_raw(
$time_pandora_db_active,
true
);
$table_status->data[0][0] .= ' '.__('ago').'.';
if ($config['history_db_enabled'] == 1) {
if (! isset($config['history_db_connection'])
|| $config['history_db_connection'] === false
) {
$config['history_db_connection'] = db_connect(
$config['history_db_host'],
$config['history_db_name'],
$config['history_db_user'],
io_output_password($config['history_db_pass']),
$config['history_db_port'],
false
);
}
$history_connect = @mysql_db_process_sql(
'SELECT 1 FROM tconfig',
'affected_rows',
$config['history_db_connection'],
false
);
$time_pandora_db_history = false;
if ($history_connect !== false) {
if ($config['history_db_connection'] !== false) {
$time_pandora_db_history = mysql_db_process_sql(
$sql,
'insert_id',
$config['history_db_connection'],
false
);
}
}
if ($time_pandora_db_history !== false
&& $time_pandora_db_history[0]['updated_at'] < SECONDS_12HOURS
) {
$table_status->data[1][0] = html_print_image(
'images/dot_green.png',
true
);
} else {
$table_status->data[1][0] = html_print_image(
'images/dot_red.png',
true
);
}
$table_status->data[1][0] .= ' '.__('Pandora_db running in historical database.');
$table_status->data[1][0] .= ' '.__('Executed:').' ';
if ($time_pandora_db_history !== false) {
$table_status->data[1][0] .= human_time_description_raw(
$time_pandora_db_history[0]['updated_at'],
true
).' '.__('ago').'.';
} else {
$table_status->data[1][0] .= __('not executed');
}
}
Update operation is done in config_process.php
This is done in that way so the user can see the changes inmediatly.
If you added a new token, please check config_update_config() in functions_config.php
to add it there.
*/
$table = new StdClass(); $table = new StdClass();
$table->width = '100%'; $table->width = '100%';
@ -44,42 +249,279 @@ $table->size[1] = '30%';
enterprise_hook('enterprise_warnings_history_days'); enterprise_hook('enterprise_warnings_history_days');
$table->data[1][0] = __('Max. days before delete events').ui_print_help_tip(__('If the compaction or purge of the data is more frequent than the events deletion, anomalies in module graphs could appear'), true); $table->data[1][0] = __('Max. days before delete events');
$table->data[1][1] = html_print_input_text('event_purge', $config['event_purge'], '', 5, 5, true); $table->data[1][0] .= ui_print_help_tip(
__('If the compaction or purge of the data is more frequent than the events deletion, anomalies in module graphs could appear'),
true
);
$table->data[1][1] = html_print_input_text(
'event_purge',
$config['event_purge'],
'',
5,
5,
true
);
$table->data[2][0] = __('Max. days before delete traps'); $table->data[2][0] = __('Max. days before delete traps');
$table->data[2][1] = html_print_input_text('trap_purge', $config['trap_purge'], '', 5, 5, true); $table->data[2][1] = html_print_input_text(
'trap_purge',
$config['trap_purge'],
'',
5,
5,
true
);
$table->data[3][0] = __('Max. days before delete audit events'); $table->data[3][0] = __('Max. days before delete audit events');
$table->data[3][1] = html_print_input_text('audit_purge', $config['audit_purge'], '', 5, 5, true); $table->data[3][1] = html_print_input_text(
'audit_purge',
$config['audit_purge'],
'',
5,
5,
true
);
$table->data[4][0] = __('Max. days before delete string data'); $table->data[4][0] = __('Max. days before delete string data');
$table->data[4][1] = html_print_input_text('string_purge', $config['string_purge'], '', 5, 5, true); $table->data[4][1] = html_print_input_text(
'string_purge',
$config['string_purge'],
'',
5,
5,
true
);
$table->data[5][0] = __('Max. days before delete GIS data'); $table->data[5][0] = __('Max. days before delete GIS data');
$table->data[5][1] = html_print_input_text('gis_purge', $config['gis_purge'], '', 5, 5, true); $table->data[5][1] = html_print_input_text(
'gis_purge',
$config['gis_purge'],
'',
5,
5,
true
);
$table->data[6][0] = __('Max. days before purge').ui_print_help_tip(__('Configure a purge period more frequent than a compact data period has no sense'), true); $table->data[6][0] = __('Max. days before purge');
$table->data[6][1] = html_print_input_text('days_purge', $config['days_purge'], '', 5, 5, true); $table->data[6][0] .= ui_print_help_tip(
__('Configure a purge period more frequent than a compact data period has no sense'),
true
);
$table->data[6][1] = html_print_input_text(
'days_purge',
$config['days_purge'],
'',
5,
5,
true
);
$table->data[7][0] = __('Max. days before compact data'); $table->data[7][0] = __('Max. days before compact data');
$table->data[7][1] = html_print_input_text('days_compact', $config['days_compact'], '', 5, 5, true); $table->data[7][1] = html_print_input_text(
'days_compact',
$config['days_compact'],
'',
5,
5,
true
);
$table->data[8][0] = __('Max. days before delete unknown modules'); $table->data[8][0] = __('Max. days before delete unknown modules');
$table->data[8][1] = html_print_input_text('days_delete_unknown', $config['days_delete_unknown'], '', 5, 5, true); $table->data[8][1] = html_print_input_text(
'days_delete_unknown',
$config['days_delete_unknown'],
'',
5,
5,
true
);
$table->data[9][0] = __('Max. days before delete autodisabled agents'); $table->data[9][0] = __('Max. days before delete autodisabled agents');
$table->data[9][1] = html_print_input_text('days_autodisable_deletion', $config['days_autodisable_deletion'], '', 5, 5, true); $table->data[9][1] = html_print_input_text(
'days_autodisable_deletion',
$config['days_autodisable_deletion'],
'',
5,
5,
true
);
$table->data[10][0] = __('Retention period of past special days').ui_print_help_tip(__('This number is days to keep past special days. 0 means never remove.'), true); $table->data[10][0] = __('Retention period of past special days');
$table->data[10][1] = html_print_input_text('num_past_special_days', $config['num_past_special_days'], '', 5, 5, true); $table->data[10][0] .= ui_print_help_tip(
__('This number is days to keep past special days. 0 means never remove.'),
true
);
$table->data[10][1] = html_print_input_text(
'num_past_special_days',
$config['num_past_special_days'],
'',
5,
5,
true
);
$table->data[11][0] = __('Max. macro data fields').ui_print_help_tip(__('Number of macro fields in alerts and templates between 1 and 15'), true); $table->data[11][0] = __('Max. macro data fields');
$table->data[11][1] = html_print_input_text('max_macro_fields', $config['max_macro_fields'], '', 5, 5, true, false, false, 'onChange="change_macro_fields()"'); $table->data[11][0] .= ui_print_help_tip(
__('Number of macro fields in alerts and templates between 1 and 15'),
true
);
$table->data[11][1] = html_print_input_text(
'max_macro_fields',
$config['max_macro_fields'],
'',
5,
5,
true,
false,
false,
'onChange="change_macro_fields()"'
);
if (enterprise_installed()) { if (enterprise_installed()) {
$table->data[12][0] = __('Max. days before delete inventory data'); $table->data[12][0] = __('Max. days before delete inventory data');
$table->data[12][1] = html_print_input_text('inventory_purge', $config['inventory_purge'], '', 5, 5, true); $table->data[12][1] = html_print_input_text(
'inventory_purge',
$config['inventory_purge'],
'',
5,
5,
true
);
}
if ($config['history_db_enabled'] == 1) {
if (! isset($config['history_db_connection'])
|| $config['history_db_connection'] === false
) {
$config['history_db_connection'] = db_connect(
$config['history_db_host'],
$config['history_db_name'],
$config['history_db_user'],
io_output_password($config['history_db_pass']),
$config['history_db_port'],
false
);
}
$history_connect = @mysql_db_process_sql(
'SELECT 1 FROM tconfig',
'affected_rows',
$config['history_db_connection'],
false
);
$config_history = false;
if ($history_connect !== false) {
if ($config['history_db_connection'] != false) {
$config_history_array = mysql_db_process_sql(
'SELECT * FROM tconfig',
'affected_rows',
$config['history_db_connection'],
false
);
if (isset($config_history_array) && is_array($config_history_array)) {
foreach ($config_history_array as $key => $value) {
$config_history[$value['token']] = $value['value'];
}
}
}
} else {
echo ui_print_error_message(
__('The tconfig table does not exist in the historical database')
);
}
if ($config_history === false) {
$config_history = [];
$config_history['days_purge'] = 180;
$config_history['days_compact'] = 120;
$config_history['step_compact'] = 1;
$config_history['event_purge'] = 180;
$config_history['string_purge'] = 180;
}
$table_historical = new StdClass();
$table_historical->width = '100%';
$table_historical->class = 'databox filters';
$table_historical->data = [];
$table_historical->style[0] = 'font-weight: bold';
$table_historical->size[0] = '70%';
$table_historical->size[1] = '30%';
enterprise_hook('enterprise_warnings_history_days');
$table_historical->data[0][0] = __('Max. days before purge');
$table_historical->data[0][0] .= ui_print_help_tip(
__('Configure a purge period more frequent than a compact data period has no sense'),
true
);
$table_historical->data[0][1] = html_print_input_text(
'historical_days_purge',
$config_history['days_purge'],
'',
5,
5,
true
);
$table_historical->data[1][0] = __('Max. days before compact data');
$table_historical->data[1][1] = html_print_input_text(
'historical_days_compact',
$config_history['days_compact'],
'',
5,
5,
true
);
$table_historical->data[2][0] = __('Compact interpolation in hours (1 Fine-20 bad)');
$table_historical->data[2][0] .= ui_print_help_tip(
__('Data will be compacted in intervals of the specified length.'),
true
);
$table_historical->data[2][1] = html_print_input_text(
'historical_step_compact',
$config_history['step_compact'],
'',
5,
5,
true
);
$table_historical->data[3][0] = __('Max. days before delete events');
$table_historical->data[3][0] .= ui_print_help_tip(
__('If the compaction or purge of the data is more frequent than the events deletion, anomalies in module graphs could appear'),
true
);
$table_historical->data[3][1] = html_print_input_text(
'historical_event_purge',
$config_history['event_purge'],
'',
5,
5,
true
);
$table_historical->data[4][0] = __('Max. days before delete string data');
$table_historical->data[4][1] = html_print_input_text(
'historical_string_purge',
$config_history['string_purge'],
'',
5,
5,
true
);
$table_historical->data[4][1] .= html_print_input_hidden(
'historical_history_db_enabled',
0,
true
);
} }
$table_other = new stdClass(); $table_other = new stdClass();
@ -91,7 +533,11 @@ $table_other->style[0] = 'font-weight: bold';
$table_other->size[0] = '70%'; $table_other->size[0] = '70%';
$table_other->size[1] = '30%'; $table_other->size[1] = '30%';
$table_other->data[1][0] = __('Item limit for realtime reports').ui_print_help_tip(__('Set a value too high cause a slowdown on console and a performance penalty in the system.'), true); $table_other->data[1][0] = __('Item limit for realtime reports');
$table_other->data[1][0] .= ui_print_help_tip(
__('Set a value too high cause a slowdown on console and a performance penalty in the system.'),
true
);
$table_other->data[1][1] = html_print_input_text( $table_other->data[1][1] = html_print_input_text(
'report_limit', 'report_limit',
$config['report_limit'], $config['report_limit'],
@ -101,7 +547,11 @@ $table_other->data[1][1] = html_print_input_text(
true true
); );
$table_other->data[2][0] = __('Compact interpolation in hours (1 Fine-20 bad)').ui_print_help_tip(__('Data will be compacted in intervals of the specified length.'), true); $table_other->data[2][0] = __('Compact interpolation in hours (1 Fine-20 bad)');
$table_other->data[2][0] .= ui_print_help_tip(
__('Data will be compacted in intervals of the specified length.'),
true
);
$table_other->data[2][1] = html_print_input_text( $table_other->data[2][1] = html_print_input_text(
'step_compact', 'step_compact',
$config['step_compact'], $config['step_compact'],
@ -122,46 +572,131 @@ $intervals[SECONDS_2WEEK] = __('2 weeks');
$intervals[SECONDS_1MONTH] = __('Last month'); $intervals[SECONDS_1MONTH] = __('Last month');
$table_other->data[3][0] = __('Default hours for event view'); $table_other->data[3][0] = __('Default hours for event view');
$table_other->data[3][1] = html_print_input_text('event_view_hr', $config['event_view_hr'], '', 5, 5, true); $table_other->data[3][1] = html_print_input_text(
'event_view_hr',
$config['event_view_hr'],
'',
5,
5,
true
);
$table_other->data[5][0] = __('Use realtime statistics'); $table_other->data[5][0] = __('Use realtime statistics');
$table_other->data[5][1] = html_print_checkbox_toogle_switch('realtimestats', 1, $config['realtimestats'], true); $table_other->data[5][1] = html_print_checkbox_toogle_switch(
'realtimestats',
1,
$config['realtimestats'],
true
);
$table_other->data[6][0] = __('Batch statistics period (secs)').ui_print_help_tip(__('If realtime statistics are disabled, statistics interval resfresh will be set here.'), true); $table_other->data[6][0] = __('Batch statistics period (secs)');
$table_other->data[6][1] = html_print_input_text('stats_interval', $config['stats_interval'], '', 5, 5, true); $table_other->data[6][0] .= ui_print_help_tip(
__('If realtime statistics are disabled, statistics interval resfresh will be set here.'),
true
);
$table_other->data[6][1] = html_print_input_text(
'stats_interval',
$config['stats_interval'],
'',
5,
5,
true
);
$table_other->data[7][0] = __('Use agent access graph').ui_print_help_icon('agent_access', true); $table_other->data[7][0] = __('Use agent access graph').ui_print_help_icon('agent_access', true);
$table_other->data[7][1] = html_print_checkbox_toogle_switch('agentaccess', 1, $config['agentaccess'], true); $table_other->data[7][1] = html_print_checkbox_toogle_switch('agentaccess', 1, $config['agentaccess'], true);
$table_other->data[8][0] = __('Max. recommended number of files in attachment directory').ui_print_help_tip(__('This number is the maximum number of files in attachment directory. If this number is reached then a warning message will appear in the header notification space.'), true); $table_other->data[8][0] = __('Max. recommended number of files in attachment directory');
$table_other->data[8][1] = html_print_input_text('num_files_attachment', $config['num_files_attachment'], '', 5, 5, true); $table_other->data[8][0] .= ui_print_help_tip(
__('This number is the maximum number of files in attachment directory. If this number is reached then a warning message will appear in the header notification space.'),
true
);
$table_other->data[8][1] = html_print_input_text(
'num_files_attachment',
$config['num_files_attachment'],
'',
5,
5,
true
);
$table_other->data[9][0] = __('Delete not init modules'); $table_other->data[9][0] = __('Delete not init modules');
$table_other->data[9][1] = html_print_checkbox_toogle_switch('delete_notinit', 1, $config['delete_notinit'], true); $table_other->data[9][1] = html_print_checkbox_toogle_switch('delete_notinit', 1, $config['delete_notinit'], true);
$table_other->data[10][0] = __('Big Operation Step to purge old data').ui_print_help_tip(__('The number of blocks that a time interval is split into. A bigger value means bigger blocks, which is faster but heavier on the database. Default is 100.'), true); $table_other->data[10][0] = __('Big Operation Step to purge old data');
$table_other->data[10][1] = html_print_input_text('big_operation_step_datos_purge', $config['big_operation_step_datos_purge'], '', 5, 5, true); $table_other->data[10][0] .= ui_print_help_tip(
__('The number of blocks that a time interval is split into. A bigger value means bigger blocks, which is faster but heavier on the database. Default is 100.'),
true
);
$table_other->data[10][1] = html_print_input_text(
'big_operation_step_datos_purge',
$config['big_operation_step_datos_purge'],
'',
5,
5,
true
);
$table_other->data[11][0] = __('Small Operation Step to purge old data').ui_print_help_tip(__('The number of rows that are processed in a single query in deletion. Default is 1000. Increase to 3000-5000 in fast systems. Decrease to 500 or 250 on systems with locks.'), true); $table_other->data[11][0] = __('Small Operation Step to purge old data');
$table_other->data[11][1] = html_print_input_text('small_operation_step_datos_purge', $config['small_operation_step_datos_purge'], '', 5, 5, true); $table_other->data[11][0] .= ui_print_help_tip(
__('The number of rows that are processed in a single query in deletion. Default is 1000. Increase to 3000-5000 in fast systems. Decrease to 500 or 250 on systems with locks.'),
true
);
$table_other->data[11][1] = html_print_input_text(
'small_operation_step_datos_purge',
$config['small_operation_step_datos_purge'],
'',
5,
5,
true
);
$table_other->data[12][0] = __('Graph container - Max. Items').ui_print_help_tip(__('The number of graphs that are viewed in a container. Default is 10 .Increasing this number could lead to performance problems'), true); $table_other->data[12][0] = __('Graph container - Max. Items');
$table_other->data[12][1] = html_print_input_text('max_graph_container', $config['max_graph_container'], '', 5, 5, true); $table_other->data[12][0] .= ui_print_help_tip(
__('The number of graphs that are viewed in a container. Default is 10 .Increasing this number could lead to performance problems'),
true
);
$table_other->data[12][1] = html_print_input_text(
'max_graph_container',
$config['max_graph_container'],
'',
5,
5,
true
);
echo '<form id="form_setup" method="post">'; echo '<form id="form_setup" method="post">';
echo '<fieldset>'; echo '<fieldset>';
echo '<legend>'.__('Database maintenance options').'</legend>'; echo '<legend>'.__('Database maintenance status').'</legend>';
html_print_input_hidden('update_config', 1); html_print_table($table_status);
html_print_table($table);
echo '</fieldset>'; echo '</fieldset>';
echo '<fieldset>'; echo '<fieldset>';
echo '<legend>'.__('Others').'</legend>'; echo '<legend>'.__('Database maintenance options').'</legend>';
html_print_input_hidden('update_config', 1); html_print_table($table);
html_print_table($table_other);
echo '</fieldset>'; echo '</fieldset>';
if ($config['history_db_enabled'] == 1) {
echo '<fieldset>';
echo '<legend>'.__('Historical database maintenance options').'</legend>';
html_print_table($table_historical);
echo '</fieldset>';
}
echo '<fieldset>';
echo '<legend>'.__('Others').'</legend>';
html_print_table($table_other);
echo '</fieldset>';
echo '<div class="action-buttons" style="width: '.$table->width.'">'; echo '<div class="action-buttons" style="width: '.$table->width.'">';
html_print_submit_button(__('Update'), 'update_button', false, 'class="sub upd"'); html_print_input_hidden('update_config', 1);
html_print_submit_button(
__('Update'),
'update_button',
false,
'class="sub upd"'
);
echo '</div>'; echo '</div>';
echo '</form>'; echo '</form>';
?> ?>
@ -170,7 +705,6 @@ echo '</form>';
function change_macro_fields() { function change_macro_fields() {
var value = $("#text-max_macro_fields").val(); var value = $("#text-max_macro_fields").val();
console.log(value);
if (value <= 0) { if (value <= 0) {
$("#text-max_macro_fields").val(1); $("#text-max_macro_fields").val(1);
} }

View File

@ -1,17 +1,32 @@
<?php <?php
/**
* Extension to manage a list of gateways and the node address where they should
* point to.
*
* @category Extensions
* @package Pandora FMS
* @subpackage Community
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2019 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 for 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.
* ============================================================================
*/
// Pandora FMS - http://pandorafms.com
// ==================================================
// Copyright (c) 2005-2011 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 for 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.
// Load global vars
global $config; global $config;
check_login(); check_login();
@ -49,7 +64,7 @@ if (! check_acl($config['id_user'], 0, 'PM') && ! is_user_admin($config['id_user
return; return;
} }
// Load enterprise extensions // Load enterprise extensions.
enterprise_include_once('include/functions_setup.php'); enterprise_include_once('include/functions_setup.php');
enterprise_include_once('include/functions_io.php'); enterprise_include_once('include/functions_io.php');
enterprise_include_once('godmode/setup/setup.php'); enterprise_include_once('godmode/setup/setup.php');
@ -63,12 +78,12 @@ enterprise_include_once('godmode/setup/setup.php');
to add it there. to add it there.
*/ */
// Gets section to jump to another section // Gets section to jump to another section.
$section = (string) get_parameter('section', 'general'); $section = (string) get_parameter('section', 'general');
$buttons = []; $buttons = [];
// Draws header // Draws header.
$buttons['general'] = [ $buttons['general'] = [
'active' => false, 'active' => false,
'text' => '<a href="index.php?sec=gsetup&sec2=godmode/setup/setup&amp;section=general">'.html_print_image('images/gm_setup.png', true, ['title' => __('General')]).'</a>', 'text' => '<a href="index.php?sec=gsetup&sec2=godmode/setup/setup&amp;section=general">'.html_print_image('images/gm_setup.png', true, ['title' => __('General')]).'</a>',
@ -114,6 +129,7 @@ if (enterprise_installed()) {
switch ($section) { switch ($section) {
case 'general': case 'general':
default:
$buttons['general']['active'] = true; $buttons['general']['active'] = true;
$subpage = ' &raquo '.__('General'); $subpage = ' &raquo '.__('General');
break; break;
@ -145,7 +161,7 @@ switch ($section) {
break; break;
} }
// Header // Header.
ui_print_page_header(__('Configuration').$subpage, '', false, $help_header, true, $buttons); ui_print_page_header(__('Configuration').$subpage, '', false, $help_header, true, $buttons);
if (isset($config['error_config_update_config'])) { if (isset($config['error_config_update_config'])) {

View File

@ -269,7 +269,13 @@ $table->data[37][0] = __('Audit log directory').ui_print_help_tip(__('Directory
$table->data[37][1] = html_print_input_text('auditdir', io_safe_output($config['auditdir']), '', 30, 100, true); $table->data[37][1] = html_print_input_text('auditdir', io_safe_output($config['auditdir']), '', 30, 100, true);
$table->data[38][0] = __('Set alias as name by default in agent creation'); $table->data[38][0] = __('Set alias as name by default in agent creation');
$table->data[38][1] = html_print_checkbox_toogle_switch('alias_as_name', 1, $config['alias_as_name'], true); $table->data[38][1] = __('Yes').'&nbsp;&nbsp;&nbsp;'.html_print_radio_button('alias_as_name', 1, '', $config['alias_as_name'], true).'&nbsp;&nbsp;';
$table->data[38][1] .= __('No').'&nbsp;&nbsp;&nbsp;'.html_print_radio_button('alias_as_name', 0, '', $config['alias_as_name'], true);
$table->data[39][0] = __('Unique IP').ui_print_help_tip(__('Set the primary IP address as the unique IP, preventing the same primary IP address from being used in more than one agent'), true);
$table->data[39][1] = __('Yes').'&nbsp;&nbsp;&nbsp;'.html_print_radio_button('unique_ip', 1, '', $config['unique_ip'], true).'&nbsp;&nbsp;';
$table->data[39][1] .= __('No').'&nbsp;&nbsp;&nbsp;'.html_print_radio_button('unique_ip', 0, '', $config['unique_ip'], true);
echo '<form id="form_setup" method="post" action="index.php?sec=gsetup&sec2=godmode/setup/setup&amp;section=general&amp;pure='.$config['pure'].'">'; echo '<form id="form_setup" method="post" action="index.php?sec=gsetup&sec2=godmode/setup/setup&amp;section=general&amp;pure='.$config['pure'].'">';
echo '<fieldset>'; echo '<fieldset>';

View File

@ -198,12 +198,7 @@ if ($get_metaconsole_hash_data) {
$console_password = $auth_serialized['console_password']; $console_password = $auth_serialized['console_password'];
} }
$pwd = $auth_token; $url_hash = metaconsole_get_servers_url_hash($server);
// Create HASH login info
$user = str_rot13($config['id_user']);
$hashdata = $user.$pwd;
$hashdata = md5($hashdata);
$url_hash = "&loginhash=auto&loginhash_data=$hashdata&loginhash_user=$user";
echo $url_hash; echo $url_hash;
return; return;

View File

@ -20,7 +20,7 @@
/** /**
* Pandora build version and version * Pandora build version and version
*/ */
$build_version = 'PC190214'; $build_version = 'PC190218';
$pandora_version = 'v7.0NG.731'; $pandora_version = 'v7.0NG.731';
// Do not overwrite default timezone set if defined. // Do not overwrite default timezone set if defined.

View File

@ -363,23 +363,18 @@ function api_get_test_event_replication_db()
// -------------------------DEFINED OPERATIONS FUNCTIONS----------------- // -------------------------DEFINED OPERATIONS FUNCTIONS-----------------
function api_get_groups($thrash1, $thrash2, $other, $returnType, $user_in_db) function api_get_groups($thrash1, $thrash2, $other, $returnType, $user_in_db)
{ {
if (defined('METACONSOLE')) { $returnAllGroup = true;
return; $returnAllColumns = false;
if (isset($other['data'][1])) {
$returnAllGroup = ( $other['data'][1] == '1' ? true : false);
} }
if ($other['type'] == 'string') { if (isset($other['data'][2])) {
if ($other['data'] != '') { $returnAllColumns = ( $other['data'][2] == '1' ? true : false);
returnError('error_parameter', 'Error in the parameters.');
return;
} else {
// Default values
$separator = ';';
}
} else if ($other['type'] == 'array') {
$separator = $other['data'][0];
} }
$groups = users_get_groups($user_in_db, 'IR'); $groups = users_get_groups($user_in_db, 'IR', $returnAllGroup, $returnAllColumns);
$data_groups = []; $data_groups = [];
foreach ($groups as $id => $group) { foreach ($groups as $id => $group) {
@ -389,6 +384,13 @@ function api_get_groups($thrash1, $thrash2, $other, $returnType, $user_in_db)
]; ];
} }
if (!isset($other['data'][0])) {
$separator = ';';
// by default
} else {
$separator = $other['data'][0];
}
$data['type'] = 'array'; $data['type'] = 'array';
$data['data'] = $data_groups; $data['data'] = $data_groups;

View File

@ -294,6 +294,10 @@ function config_update_config()
if (!config_update_value('auditdir', get_parameter('auditdir'))) { if (!config_update_value('auditdir', get_parameter('auditdir'))) {
$error_update[] = __('Audit log directory'); $error_update[] = __('Audit log directory');
} }
if (!config_update_value('unique_ip', get_parameter('unique_ip'))) {
$error_update[] = __('unique_ip');
}
break; break;
case 'enterprise': case 'enterprise':
@ -1657,6 +1661,10 @@ function config_process_config()
config_update_value('limit_parameters_massive', (ini_get('max_input_vars') / 2)); config_update_value('limit_parameters_massive', (ini_get('max_input_vars') / 2));
} }
if (!isset($config['unique_ip'])) {
config_update_value('unique_ip', 0);
}
/* /*
*Parse the ACL IP list for access API *Parse the ACL IP list for access API
*/ */
@ -2843,7 +2851,7 @@ function config_check()
); );
} }
$result_ejecution = exec($config['phantomjs_bin'].'/phantomjs --version'); $result_ejecution = exec('"'.io_safe_output($config['phantomjs_bin']).'/phantomjs" --version');
if (!isset($result_ejecution) || $result_ejecution == '') { if (!isset($result_ejecution) || $result_ejecution == '') {
if ($config['language'] == 'es') { if ($config['language'] == 'es') {
set_pandora_error_for_header( set_pandora_error_for_header(

View File

@ -166,92 +166,30 @@ function events_get_events_grouped(
$groupby_extra = ''; $groupby_extra = '';
} }
switch ($config['dbtype']) { db_process_sql('SET group_concat_max_len = 9999999');
case 'mysql': $event_lj = events_get_secondary_groups_left_join($table);
db_process_sql('SET group_concat_max_len = 9999999'); if ($total) {
$event_lj = events_get_secondary_groups_left_join($table); $sql = "SELECT COUNT(*) FROM (SELECT id_evento
if ($total) { FROM $table te $event_lj
$sql = "SELECT COUNT(*) FROM (SELECT * WHERE 1=1 ".$sql_post.'
FROM $table te $event_lj GROUP BY estado, evento, id_agente, id_agentmodule'.$groupby_extra.') AS t';
WHERE 1=1 ".$sql_post.' } else {
GROUP BY estado, evento, id_agente, id_agentmodule'.$groupby_extra.') AS t'; $sql = "SELECT *, MAX(id_evento) AS id_evento,
} else { GROUP_CONCAT(DISTINCT user_comment SEPARATOR '<br>') AS user_comment,
$sql = "SELECT *, MAX(id_evento) AS id_evento, GROUP_CONCAT(DISTINCT id_evento SEPARATOR ',') AS similar_ids,
GROUP_CONCAT(DISTINCT user_comment SEPARATOR '<br>') AS user_comment, COUNT(id_evento) AS event_rep, MAX(utimestamp) AS timestamp_rep,
GROUP_CONCAT(DISTINCT id_evento SEPARATOR ',') AS similar_ids, MIN(utimestamp) AS timestamp_rep_min,
COUNT(*) AS event_rep, MAX(utimestamp) AS timestamp_rep, (SELECT owner_user FROM $table WHERE id_evento = MAX(te.id_evento)) owner_user,
MIN(utimestamp) AS timestamp_rep_min, (SELECT id_usuario FROM $table WHERE id_evento = MAX(te.id_evento)) id_usuario,
(SELECT owner_user FROM $table WHERE id_evento = MAX(te.id_evento)) owner_user, (SELECT id_agente FROM $table WHERE id_evento = MAX(te.id_evento)) id_agente,
(SELECT id_usuario FROM $table WHERE id_evento = MAX(te.id_evento)) id_usuario, (SELECT criticity FROM $table WHERE id_evento = MAX(te.id_evento)) AS criticity,
(SELECT id_agente FROM $table WHERE id_evento = MAX(te.id_evento)) id_agente, (SELECT ack_utimestamp FROM $table WHERE id_evento = MAX(te.id_evento)) AS ack_utimestamp,
(SELECT criticity FROM $table WHERE id_evento = MAX(te.id_evento)) AS criticity, (SELECT nombre FROM tagente_modulo WHERE id_agente_modulo = te.id_agentmodule) AS module_name
(SELECT ack_utimestamp FROM $table WHERE id_evento = MAX(te.id_evento)) AS ack_utimestamp, FROM $table te $event_lj
(SELECT nombre FROM tagente_modulo WHERE id_agente_modulo = te.id_agentmodule) AS module_name WHERE 1=1 ".$sql_post.'
FROM $table te $event_lj GROUP BY estado, evento, id_agente, id_agentmodule'.$groupby_extra;
WHERE 1=1 ".$sql_post.' $sql .= ' '.events_get_sql_order($sort_field, $order, 2);
GROUP BY estado, evento, id_agente, id_agentmodule'.$groupby_extra; $sql .= ' LIMIT '.$offset.','.$pagination;
$sql .= ' '.events_get_sql_order($sort_field, $order, 2);
$sql .= ' LIMIT '.$offset.','.$pagination;
}
break;
case 'postgresql':
if ($total) {
$sql = "SELECT COUNT(*)
FROM $table te
WHERE 1=1 ".$sql_post.'
GROUP BY estado, evento, id_agentmodule, id_evento, id_agente, id_usuario, id_grupo, estado, timestamp, utimestamp, event_type, id_alert_am, criticity, user_comment, tags, source, id_extra'.$groupby_extra;
} else {
$sql = "SELECT *, MAX(id_evento) AS id_evento, array_to_string(array_agg(DISTINCT user_comment), '<br>') AS user_comment,
array_to_string(array_agg(DISTINCT id_evento), ',') AS similar_ids,
COUNT(*) AS event_rep, MAX(utimestamp) AS timestamp_rep,
MIN(utimestamp) AS timestamp_rep_min,
(SELECT owner_user FROM $table WHERE id_evento = MAX(te.id_evento)) owner_user,
(SELECT id_usuario FROM $table WHERE id_evento = MAX(te.id_evento)) id_usuario,
(SELECT id_agente FROM $table WHERE id_evento = MAX(te.id_evento)) id_agente,
(SELECT criticity FROM $table WHERE id_evento = MAX(te.id_evento)) AS criticity,
(SELECT ack_utimestamp FROM $table WHERE id_evento = MAX(te.id_evento)) AS ack_utimestamp
FROM $table te
WHERE 1=1 ".$sql_post.'
GROUP BY estado, evento, id_agentmodule, id_evento,
id_agente, id_usuario, id_grupo, estado,
timestamp, utimestamp, event_type, id_alert_am,
criticity, user_comment, tags, source, id_extra,
te.critical_instructions,
te.warning_instructions,
te.unknown_instructions,
te.owner_user,
te.ack_utimestamp,
te.custom_data '.$groupby_extra.'
ORDER BY timestamp_rep ASC LIMIT '.$pagination.' OFFSET '.$offset;
}
break;
case 'oracle':
if ($total) {
$sql = "SELECT COUNT(*)
FROM $table te
WHERE 1=1 $sql_post
GROUP BY estado, to_char(evento), id_agentmodule".$groupby_extra.') b ';
} else {
$set = [];
$set['limit'] = $pagination;
$set['offset'] = $offset;
$sql = "SELECT ta.*, tb.event_rep, tb.timestamp_rep, tb.timestamp_rep_min, tb.user_comments, tb.similar_ids
FROM $table ta
INNER JOIN (SELECT MAX(id_evento) AS id_evento, COUNT(id_evento) AS event_rep,
MAX(utimestamp) AS timestamp_rep, MIN(utimestamp) AS timestamp_rep_min,
TAB_TO_STRING(CAST(COLLECT(TO_CHAR(user_comment) ORDER BY id_evento ASC) AS t_varchar2_tab), '<br>') AS user_comments,
TAB_TO_STRING(CAST(COLLECT(CAST(id_evento AS VARCHAR2(4000)) ORDER BY id_evento ASC) AS t_varchar2_tab)) AS similar_ids
FROM $table te
WHERE 1=1 $sql_post
GROUP BY estado, to_char(evento), id_agentmodule$groupby_extra) tb
ON ta.id_evento = tb.id_evento
ORDER BY tb.timestamp_rep ASC";
$sql = oracle_recode_query($sql, $set);
}
break;
} }
// Extract the events by filter (or not) from db // Extract the events by filter (or not) from db
@ -260,16 +198,6 @@ function events_get_events_grouped(
if ($total) { if ($total) {
return reset($events[0]); return reset($events[0]);
} else { } else {
// Override the column 'user_comment' with the column 'user_comments' when oracle
if (!empty($events) && $config['dbtype'] == 'oracle') {
array_walk(
$events,
function (&$value, $key) {
set_if_defined($value['user_comment'], $value['user_comments']);
}
);
}
return $events; return $events;
} }
} }
@ -4871,6 +4799,10 @@ function events_get_sql_order($sort_field='timestamp', $sort='DESC', $group_rep=
*/ */
function events_get_secondary_groups_left_join($table) function events_get_secondary_groups_left_join($table)
{ {
if (users_is_admin()) {
return '';
}
if ($table == 'tevento') { if ($table == 'tevento') {
return 'LEFT JOIN tagent_secondary_group tasg ON te.id_agente = tasg.id_agent'; return 'LEFT JOIN tagent_secondary_group tasg ON te.id_agente = tasg.id_agent';
} }

View File

@ -144,7 +144,7 @@ function gd_histogram($width, $height, $mode, $data, $max_value, $font, $title,
foreach ($data as $label => $value) { foreach ($data as $label => $value) {
imagefilledrectangle($image, $leftmargin, $margin_up, (($value / $size_per) + $leftmargin), ($margin_up + $rectangle_height - 1), $colors[$c]); imagefilledrectangle($image, $leftmargin, $margin_up, (($value / $size_per) + $leftmargin), ($margin_up + $rectangle_height - 1), $colors[$c]);
if ($mode != 2) { if ($mode != 2) {
ImageTTFText($image, $fontsize, 0, 0, ($margin_up + 8), $black, $font, $label); imagettftext($image, $fontsize, 0, 0, ($margin_up + 8), $black, $font, $label);
} }
$margin_up += ($rectangle_height + 1); $margin_up += ($rectangle_height + 1);
@ -164,9 +164,9 @@ function gd_histogram($width, $height, $mode, $data, $max_value, $font, $title,
imageline($image, $risk_low, 0, $risk_low, $height, $grey); imageline($image, $risk_low, 0, $risk_low, $height, $grey);
imageline($image, $risk_med, 0, $risk_med, $height, $grey); imageline($image, $risk_med, 0, $risk_med, $height, $grey);
imageline($image, $risk_high, 0, $risk_high, $height, $grey); imageline($image, $risk_high, 0, $risk_high, $height, $grey);
ImageTTFText($image, $fontsize, 0, ($risk_low - 20), $height, $grey, $font, 'Low'); imagettftext($image, $fontsize, 0, ($risk_low - 20), $height, $grey, $font, 'Low');
ImageTTFText($image, $fontsize, 0, ($risk_med - 20), $height, $grey, $font, 'Med.'); imagettftext($image, $fontsize, 0, ($risk_med - 20), $height, $grey, $font, 'Med.');
ImageTTFText($image, $fontsize, 0, ($risk_high - 25), $height, $grey, $font, 'High'); imagettftext($image, $fontsize, 0, ($risk_high - 25), $height, $grey, $font, 'High');
} }
imagepng($image); imagepng($image);
@ -279,7 +279,7 @@ function gd_progress_bubble($width, $height, $progress, $title, $font, $out_of_l
// Write the value // Write the value
$size = imagettfbbox($fontsize, 0, $font, $value_text); $size = imagettfbbox($fontsize, 0, $font, $value_text);
ImageTTFText( imagettftext(
$image, $image,
$fontsize, $fontsize,
0, 0,
@ -409,12 +409,12 @@ function drawRating($rating, $width, $height, $font, $out_of_lim_str, $mode, $fo
if ($rating > 50) { if ($rating > 50) {
if ($rating > 100) { if ($rating > 100) {
ImageTTFText($image, ($fontsize + 2), 0, ($width / 4), (($height / 2) + ($height / 5)), $back, $font, $out_of_lim_str); imagettftext($image, ($fontsize + 2), 0, ($width / 4), (($height / 2) + ($height / 5)), $back, $font, $out_of_lim_str);
} else { } else {
ImageTTFText($image, $fontsize, 0, (($width / 2) - ($width / 10)), (($height / 2) + ($height / 5)), $back, $font, $value_text); imagettftext($image, $fontsize, 0, (($width / 2) - ($width / 10)), (($height / 2) + ($height / 5)), $back, $font, $value_text);
} }
} else { } else {
ImageTTFText($image, $fontsize, 0, (($width / 2) - ($width / 10)), (($height / 2) + ($height / 5)), $text, $font, $value_text); imagettftext($image, $fontsize, 0, (($width / 2) - ($width / 10)), (($height / 2) + ($height / 5)), $text, $font, $value_text);
} }
break; break;

View File

@ -1,16 +1,32 @@
<?php <?php
/**
* Extension to manage a list of gateways and the node address where they should
* point to.
*
* @category Extensions
* @package Pandora FMS
* @subpackage Community
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2019 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 for 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.
* ============================================================================
*/
// Pandora FMS - http://pandorafms.com
// ==================================================
// Copyright (c) 2005-2012 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 Lesser 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.
?> ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html> <html>
@ -113,7 +129,7 @@
<div style='height: 10px'> <div style='height: 10px'>
<?php <?php
$version = '7.0NG.731'; $version = '7.0NG.731';
$build = '190214'; $build = '190218';
$banner = "v$version Build $build"; $banner = "v$version Build $build";
error_reporting(0); error_reporting(0);

View File

@ -19,7 +19,6 @@ if (check_acl($id_user, 0, 'ER')) {
$groups = users_get_groups($id_user, 'EM'); $groups = users_get_groups($id_user, 'EM');
} }
$propagate = db_get_value('propagate', 'tgrupo', 'id_grupo', $id_group); $propagate = db_get_value('propagate', 'tgrupo', 'id_grupo', $id_group);
if ($id_group > 0) { if ($id_group > 0) {
@ -41,24 +40,67 @@ if ($id_group > 0) {
$childrens_ids = array_keys($groups); $childrens_ids = array_keys($groups);
} }
// Group selection if (!isset($date_from)) {
$date_from = '';
}
if (!isset($date_to)) {
$date_to = '';
}
if (($date_from === '') && ($date_to === '')) {
if ($event_view_hr > 0) {
$filter_resume['hours_max'] = $event_view_hr;
$unixtime = (get_system_time() - ($event_view_hr * SECONDS_1HOUR));
$sql_post .= ' AND (utimestamp > '.$unixtime.')';
}
} else {
// Some of this values will have the user's timezone,
// so we need to reverse it to the system's timezone
// before using it into the db.
$fixed_offset = get_fixed_offset();
if (!empty($date_from)) {
if (empty($time_from)) {
$time_from = '00:00:00';
}
$utimestamp_from = (strtotime($date_from.' '.$time_from) - $fixed_offset);
$filter_resume['time_from'] = date(DATE_FORMAT.' '.TIME_FORMAT, $utimestamp_from);
$sql_post .= ' AND (utimestamp >= '.$utimestamp_from.')';
}
if (!empty($date_to)) {
if (empty($time_to)) {
$time_to = '23:59:59';
}
$utimestamp_to = (strtotime($date_to.' '.$time_to) - $fixed_offset);
$filter_resume['time_to'] = date(DATE_FORMAT.' '.TIME_FORMAT, $utimestamp_to);
$sql_post .= ' AND (utimestamp <= '.$utimestamp_to.')';
}
}
// Group selection.
if ($id_group > 0 && in_array($id_group, array_keys($groups))) { if ($id_group > 0 && in_array($id_group, array_keys($groups))) {
if ($propagate) { if ($propagate) {
$childrens_str = implode(',', $childrens_ids); $childrens_str = implode(',', $childrens_ids);
$sql_post = " AND (id_grupo IN ($childrens_str) OR id_group IN ($childrens_str))"; $sql_post .= " AND (id_grupo IN ($childrens_str) OR id_group IN ($childrens_str))";
} else { } else {
// If a group is selected and it's in the groups allowed // If a group is selected and it's in the groups allowed.
$sql_post = " AND (id_grupo = $id_group OR id_group = $id_group)"; $sql_post .= " AND (id_grupo = $id_group OR id_group = $id_group)";
} }
} else { } else {
$sql_post = sprintf( if (!users_is_admin() && !users_can_manage_group_all('ER')) {
' AND (id_grupo IN (%s) OR id_group IN (%s)) ', $sql_post .= sprintf(
implode(',', array_keys($groups)), ' AND (id_grupo IN (%s) OR id_group IN (%s)) ',
implode(',', array_keys($groups)) implode(',', array_keys($groups)),
); implode(',', array_keys($groups))
);
}
} }
// Skip system messages if user is not PM // Skip system messages if user is not PM.
if (!check_acl($id_user, 0, 'PM')) { if (!check_acl($id_user, 0, 'PM')) {
$sql_post .= ' AND id_grupo != 0'; $sql_post .= ' AND id_grupo != 0';
} }
@ -164,7 +206,7 @@ if ($source != '') {
$sql_post .= " AND source LIKE '%$source%'"; $sql_post .= " AND source LIKE '%$source%'";
} }
// In metaconsole mode the agent search is performed by name // In metaconsole mode the agent search is performed by name.
if ($meta) { if ($meta) {
$text_agent = get_parameter('text_agent', ''); $text_agent = get_parameter('text_agent', '');
$id_agent = get_parameter('id_agent', 0); $id_agent = get_parameter('id_agent', 0);
@ -179,7 +221,7 @@ if ($meta) {
break; break;
case -1: case -1:
// Agent doesnt exist. No results will returned // Agent doesnt exist. No results will returned.
$sql_post .= ' AND 1 = 0'; $sql_post .= ' AND 1 = 0';
break; break;
@ -192,9 +234,7 @@ if ($meta) {
if ($meta) { if (!$meta) {
// There is another filter.
} else {
if (!empty($text_module)) { if (!empty($text_module)) {
$filter_resume['module'] = $text_module; $filter_resume['module'] = $text_module;
$sql_post .= " AND id_agentmodule IN ( $sql_post .= " AND id_agentmodule IN (
@ -210,48 +250,7 @@ if ($id_user_ack != '0') {
$sql_post .= " AND id_usuario = '".$id_user_ack."'"; $sql_post .= " AND id_usuario = '".$id_user_ack."'";
} }
if (!isset($date_from)) { // Search by tag.
$date_from = '';
}
if (!isset($date_to)) {
$date_to = '';
}
if (($date_from == '') && ($date_to == '')) {
if ($event_view_hr > 0) {
$filter_resume['hours_max'] = $event_view_hr;
$unixtime = (get_system_time() - ($event_view_hr * SECONDS_1HOUR));
$sql_post .= ' AND (utimestamp > '.$unixtime.')';
}
} else {
// Some of this values will have the user's timezone,
// so we need to reverse it to the system's timezone
// before using it into the db
$fixed_offset = get_fixed_offset();
if (!empty($date_from)) {
if (empty($time_from)) {
$time_from = '00:00:00';
}
$utimestamp_from = (strtotime($date_from.' '.$time_from) - $fixed_offset);
$filter_resume['time_from'] = date(DATE_FORMAT.' '.TIME_FORMAT, $utimestamp_from);
$sql_post .= ' AND (utimestamp >= '.$utimestamp_from.')';
}
if (!empty($date_to)) {
if (empty($time_to)) {
$time_to = '23:59:59';
}
$utimestamp_to = (strtotime($date_to.' '.$time_to) - $fixed_offset);
$filter_resume['time_to'] = date(DATE_FORMAT.' '.TIME_FORMAT, $utimestamp_to);
$sql_post .= ' AND (utimestamp <= '.$utimestamp_to.')';
}
}
// Search by tag
if (!empty($tag_with)) { if (!empty($tag_with)) {
if (!users_is_admin()) { if (!users_is_admin()) {
$user_tags = array_flip(tags_get_tags_for_module_search()); $user_tags = array_flip(tags_get_tags_for_module_search());
@ -305,7 +304,7 @@ if (!empty($tag_without)) {
$sql_post .= ' ) '; $sql_post .= ' ) ';
} }
// Filter/Only alerts // Filter/Only alerts.
if (isset($filter_only_alert)) { if (isset($filter_only_alert)) {
if ($filter_only_alert == 0) { if ($filter_only_alert == 0) {
$filter_resume['alerts'] = $filter_only_alert; $filter_resume['alerts'] = $filter_only_alert;
@ -316,7 +315,7 @@ if (isset($filter_only_alert)) {
} }
} }
// Tags ACLS // Tags ACLS.
if ($id_group > 0 && in_array($id_group, array_keys($groups))) { if ($id_group > 0 && in_array($id_group, array_keys($groups))) {
$group_array = (array) $id_group; $group_array = (array) $id_group;
} else { } else {
@ -335,7 +334,7 @@ if (check_acl($id_user, 0, 'ER')) {
[], [],
true true
); );
// FORCE CHECK SQL "(TAG = tag1 AND id_grupo = 1)" // FORCE CHECK SQL "(TAG = tag1 AND id_grupo = 1)".
} else if (check_acl($id_user, 0, 'EW')) { } else if (check_acl($id_user, 0, 'EW')) {
$tags_acls_condition = tags_get_acl_tags( $tags_acls_condition = tags_get_acl_tags(
$id_user, $id_user,
@ -348,7 +347,7 @@ if (check_acl($id_user, 0, 'ER')) {
[], [],
true true
); );
// FORCE CHECK SQL "(TAG = tag1 AND id_grupo = 1)" // FORCE CHECK SQL "(TAG = tag1 AND id_grupo = 1)".
} else if (check_acl($id_user, 0, 'EM')) { } else if (check_acl($id_user, 0, 'EM')) {
$tags_acls_condition = tags_get_acl_tags( $tags_acls_condition = tags_get_acl_tags(
$id_user, $id_user,
@ -361,14 +360,14 @@ if (check_acl($id_user, 0, 'ER')) {
[], [],
true true
); );
// FORCE CHECK SQL "(TAG = tag1 AND id_grupo = 1)" // FORCE CHECK SQL "(TAG = tag1 AND id_grupo = 1)".
} }
if (($tags_acls_condition != ERR_WRONG_PARAMETERS) && ($tags_acls_condition != ERR_ACL) && ($tags_acls_condition != -110000)) { if (($tags_acls_condition != ERR_WRONG_PARAMETERS) && ($tags_acls_condition != ERR_ACL) && ($tags_acls_condition != -110000)) {
$sql_post .= $tags_acls_condition; $sql_post .= $tags_acls_condition;
} }
// Metaconsole fitlers // Metaconsole fitlers.
if ($meta) { if ($meta) {
if ($server_id) { if ($server_id) {
$filter_resume['server'] = $server_id; $filter_resume['server'] = $server_id;

View File

@ -3,7 +3,7 @@
# #
%define name pandorafms_console %define name pandorafms_console
%define version 7.0NG.731 %define version 7.0NG.731
%define release 190214 %define release 190218
# User and Group under which Apache is running # User and Group under which Apache is running
%define httpd_name httpd %define httpd_name httpd

View File

@ -3,7 +3,7 @@
# #
%define name pandorafms_console %define name pandorafms_console
%define version 7.0NG.731 %define version 7.0NG.731
%define release 190214 %define release 190218
%define httpd_name httpd %define httpd_name httpd
# User and Group under which Apache is running # User and Group under which Apache is running
%define httpd_name apache2 %define httpd_name apache2

View File

@ -1,5 +1,5 @@
package: pandorafms-server package: pandorafms-server
Version: 7.0NG.731-190214 Version: 7.0NG.731-190218
Architecture: all Architecture: all
Priority: optional Priority: optional
Section: admin Section: admin

View File

@ -14,7 +14,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
pandora_version="7.0NG.731-190214" pandora_version="7.0NG.731-190218"
package_cpan=0 package_cpan=0
package_pandora=1 package_pandora=1

View File

@ -45,7 +45,7 @@ our @EXPORT = qw(
# version: Defines actual version of Pandora Server for this module only # version: Defines actual version of Pandora Server for this module only
my $pandora_version = "7.0NG.731"; my $pandora_version = "7.0NG.731";
my $pandora_build = "190214"; my $pandora_build = "190218";
our $VERSION = $pandora_version." ".$pandora_build; our $VERSION = $pandora_version." ".$pandora_build;
# Setup hash # Setup hash

View File

@ -32,7 +32,7 @@ our @ISA = qw(Exporter);
# version: Defines actual version of Pandora Server for this module only # version: Defines actual version of Pandora Server for this module only
my $pandora_version = "7.0NG.731"; my $pandora_version = "7.0NG.731";
my $pandora_build = "190214"; my $pandora_build = "190218";
our $VERSION = $pandora_version." ".$pandora_build; our $VERSION = $pandora_version." ".$pandora_build;
our %EXPORT_TAGS = ( 'all' => [ qw() ] ); our %EXPORT_TAGS = ( 'all' => [ qw() ] );

View File

@ -3,7 +3,7 @@
# #
%define name pandorafms_server %define name pandorafms_server
%define version 7.0NG.731 %define version 7.0NG.731
%define release 190214 %define release 190218
Summary: Pandora FMS Server Summary: Pandora FMS Server
Name: %{name} Name: %{name}

View File

@ -3,7 +3,7 @@
# #
%define name pandorafms_server %define name pandorafms_server
%define version 7.0NG.731 %define version 7.0NG.731
%define release 190214 %define release 190218
Summary: Pandora FMS Server Summary: Pandora FMS Server
Name: %{name} Name: %{name}

View File

@ -9,7 +9,7 @@
# ********************************************************************** # **********************************************************************
PI_VERSION="7.0NG.731" PI_VERSION="7.0NG.731"
PI_BUILD="190214" PI_BUILD="190218"
MODE=$1 MODE=$1
if [ $# -gt 1 ]; then if [ $# -gt 1 ]; then

View File

@ -34,7 +34,7 @@ use PandoraFMS::Config;
use PandoraFMS::DB; use PandoraFMS::DB;
# version: define current version # version: define current version
my $version = "7.0NG.731 PS190214"; my $version = "7.0NG.731 PS190218";
# Pandora server configuration # Pandora server configuration
my %conf; my %conf;

View File

@ -36,7 +36,7 @@ use Encode::Locale;
Encode::Locale::decode_argv; Encode::Locale::decode_argv;
# version: define current version # version: define current version
my $version = "7.0NG.731 PS190214"; my $version = "7.0NG.731 PS190218";
# save program name for logging # save program name for logging
my $progname = basename($0); my $progname = basename($0);