Merge remote-tracking branch 'origin/develop' into ent-13566-modo-proxy-no-funciona-como-root

This commit is contained in:
daniel 2024-05-07 20:16:01 +02:00
commit a992396d4d
45 changed files with 341 additions and 218 deletions

View File

@ -1,5 +1,5 @@
package: pandorafms-agent-unix
Version: 7.0NG.776-240503
Version: 7.0NG.776-240507
Architecture: all
Priority: optional
Section: admin

View File

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

View File

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

View File

@ -4,7 +4,7 @@
%global __os_install_post %{nil}
%define name pandorafms_agent_linux
%define version 7.0NG.776
%define release 240503
%define release 240507
Summary: Pandora FMS Linux agent, PERL version
Name: %{name}

View File

@ -5,7 +5,7 @@
%define name pandorafms_agent_linux_bin
%define source_name pandorafms_agent_linux
%define version 7.0NG.776
%define release 240503
%define release 240507
%define debug_package %{nil}
Summary: Pandora FMS Linux agent, binary version

View File

@ -5,7 +5,7 @@
%define name pandorafms_agent_linux_bin
%define source_name pandorafms_agent_linux
%define version 7.0NG.776
%define release 240503
%define release 240507
%define debug_package %{nil}
Summary: Pandora FMS Linux agent, binary version

View File

@ -5,7 +5,7 @@
%define name pandorafms_agent_linux_bin
%define source_name pandorafms_agent_linux
%define version 7.0NG.776
%define release 240503
%define release 240507
Summary: Pandora FMS Linux agent, binary version
Name: %{name}

View File

@ -4,7 +4,7 @@
%global __os_install_post %{nil}
%define name pandorafms_agent_linux
%define version 7.0NG.776
%define release 240503
%define release 240507
Summary: Pandora FMS Linux agent, PERL version
Name: %{name}

View File

@ -10,7 +10,7 @@
# **********************************************************************
PI_VERSION="7.0NG.776"
PI_BUILD="240503"
PI_BUILD="240507"
OS_NAME=`uname -s`
FORCE=0

View File

@ -186,7 +186,7 @@ UpgradeApplicationID
{}
Version
{240503}
{240507}
ViewReadme
{Yes}

View File

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

View File

@ -11,7 +11,7 @@ BEGIN
VALUE "LegalCopyright", "Pandora FMS"
VALUE "OriginalFilename", "PandoraAgent.exe"
VALUE "ProductName", "Pandora FMS Windows Agent"
VALUE "ProductVersion", "(7.0NG.776(Build 240503))"
VALUE "ProductVersion", "(7.0NG.776(Build 240507))"
VALUE "FileVersion", "1.0.0.0"
END
END

View File

@ -1,5 +1,5 @@
package: pandorafms-console
Version: 7.0NG.776-240503
Version: 7.0NG.776-240507
Architecture: all
Priority: optional
Section: admin

View File

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

View File

@ -69,38 +69,41 @@ function api_execute(
if (empty($url) === true) {
$url = 'http://'.$ip.$pandora_url.'/include/api.php?';
} else {
$url_schema = parse_url($url);
$url = $url_schema['scheme'].'://'.$url_schema['host'].$pandora_url.'/include/api.php?';
}
if (empty($op) === false) {
$data['op'] = $op;
}
if (empty($op) === false) {
$data['op'] = $op;
}
if (empty($op2) === false) {
$data['op2'] = $op2;
}
if (empty($op2) === false) {
$data['op2'] = $op2;
}
if (empty($id) === false) {
$data['id'] = $id;
}
if (empty($id) === false) {
$data['id'] = $id;
}
if (empty($id2) === false) {
$data['id2'] = $id2;
}
if (empty($id2) === false) {
$data['id2'] = $id2;
}
if (empty($return_type) === false) {
$data['return_type'] = $return_type;
}
if (empty($return_type) === false) {
$data['return_type'] = $return_type;
}
if (empty($other) === false) {
$data['other_mode'] = $other_mode;
$data['other'] = $other;
}
if (empty($other) === false) {
$data['other_mode'] = $other_mode;
$data['other'] = $other;
}
// If token is not reported,use old method.
if (empty($token) === true) {
$data['apipass'] = $apipass;
$data['user'] = $user;
$data['pass'] = $password;
}
// If token is not reported,use old method.
if (empty($token) === true) {
$data['apipass'] = $apipass;
$data['user'] = $user;
$data['pass'] = $password;
}
$url_protocol = parse_url($url)['scheme'];

View File

@ -15,6 +15,8 @@ ALTER TABLE tfiles_repo_group CONVERT TO CHARACTER SET UTF8MB4;
ALTER TABLE `tusuario`
ADD COLUMN `stop_lts_modal` TINYINT NOT NULL DEFAULT 0 AFTER `session_max_time_expire`;
ALTER TABLE `tlayout_template` ADD COLUMN `create_from` INT UNSIGNED NOT NULL DEFAULT 0;
-- START MIGRATION MSSQL --
SET @current_app_type = 12;
SET @short_name = 'pandorafms.mssql';
@ -7764,4 +7766,7 @@ DELETE FROM tconfig WHERE `token` = 'loginhash_pwd';
UPDATE `tdiscovery_apps` SET `version` = '1.5' WHERE `short_name` = 'pandorafms.vmware';
-- Delete Create incident from event, from tevent_response
DELETE FROM tevent_response WHERE name = 'Create incident from event';
COMMIT;

View File

@ -362,14 +362,20 @@ if (is_ajax() === true) {
$row['name'] = __('Admin secondary LDAP password');
$row['control'] = html_print_input_password(
'ldap_admin_pass_secondary',
io_output_password($config['ldap_admin_pass_secondary']),
(empty(io_output_password($config['ldap_admin_pass_secondary'])) === false) ? '*****' : '',
$alt = '',
60,
100,
true,
false,
false,
'w400px-important'
'w400px-important',
'on',
false,
'',
true,
false,
true
);
$table->data['ldap_admin_pass_secondary'] = $row;
break;

View File

@ -85,6 +85,13 @@ class SnmpConsole extends HTML
*/
private $filter_free_search;
/**
* Filter alias.
*
* @var string
*/
private $filter_alias_search;
/**
* Filter status.
*
@ -135,7 +142,8 @@ class SnmpConsole extends HTML
int $filter_group_by,
int $filter_hours_ago,
int $filter_trap_type,
int $refr
int $refr,
string $filter_alias_search
) {
global $config;
@ -157,6 +165,7 @@ class SnmpConsole extends HTML
$this->filter_alert = $filter_alert;
$this->filter_severity = $filter_severity;
$this->filter_free_search = $filter_free_search;
$this->filter_alias_search = $filter_alias_search;
$this->filter_status = $filter_status;
$this->filter_group_by = $filter_group_by;
$this->filter_hours_ago = $filter_hours_ago;
@ -375,13 +384,21 @@ class SnmpConsole extends HTML
'style' => 'widht:100%',
],
[
'label' => __('Free search'),
'label' => __('Search').ui_print_help_tip(__('It will search through the contents of the raw trap, which does not include the agent name. You can search by the next values: IP, OID, Value, Text, Description, User ID and Source.'), true),
'type' => 'text',
'id' => 'filter_free_search',
'input_class' => 'filter_input_datatable',
'name' => 'filter_free_search',
'value' => $this->filter_free_search,
],
[
'label' => __('Search Alias').ui_print_help_tip(__('It will search by the agent alias. This option could make the system slower.'), true),
'type' => 'text',
'id' => 'filter_alias_search',
'input_class' => 'filter_input_datatable',
'name' => 'filter_alias_search',
'value' => $this->filter_alias_search,
],
[
'label' => __('Status'),
'type' => 'select',
@ -449,7 +466,7 @@ class SnmpConsole extends HTML
1000,
],
],
'filter_main_class' => 'box-flat white_table_graph fixed_filter_bar',
'filter_main_class' => 'box-flat white_table_graph fixed_filter_bar snmp-console-filter',
]
);
} catch (Exception $e) {
@ -554,10 +571,6 @@ class SnmpConsole extends HTML
$filters = get_parameter('filter', []);
// Build ranges.
if (empty($filters['filter_hours_ago']) === true) {
$filters['filter_hours_ago'] = 8;
}
$now_timestamp = time();
$interval_seconds = ($filters['filter_hours_ago'] * 3600);
$ago_timestamp = ($now_timestamp - $interval_seconds);
@ -577,118 +590,148 @@ class SnmpConsole extends HTML
ob_start();
$data = [];
$user_groups = users_get_groups($config['id_user'], 'AR', false);
$prea = array_keys($user_groups);
$ids = join(',', $prea);
$whereSubquery = '';
$sql = 'SELECT
*
FROM
ttrap
%s
WHERE 1=1
%s
ORDER BY
timestamp DESC
LIMIT %d, %d';
$user_in_group_wo_agents = db_get_value_sql('select count(DISTINCT(id_usuario)) from tusuario_perfil where id_usuario ="'.$config['id_user'].'" and id_perfil = 1 and id_grupo in (select id_grupo from tgrupo where id_grupo in ('.$ids.') and id_grupo not in (select id_grupo from tagente))');
if ($user_in_group_wo_agents == 0) {
$sql_count = 'SELECT
COUNT(`ttrap`.`id_trap`)
FROM
ttrap
%s
WHERE 1=1
%s';
if (users_is_admin() === false || users_can_manage_group_all('AR') === false) {
$user_groups = users_get_groups($config['id_user'], 'AR', false);
$rows = db_get_all_rows_filter(
'tagente',
['id_grupo' => array_keys($user_groups)],
['id_agente']
);
$id_agents = [];
foreach ($rows as $row) {
$id_agents[] = $row['id_agente'];
}
if (!empty($id_agents)) {
if (empty($id_agents) === false) {
$address_by_user_groups = agents_get_addresses($id_agents);
foreach ($address_by_user_groups as $i => $a) {
$address_by_user_groups[$i] = '"'.$a.'"';
}
}
} else {
$rows = db_get_all_rows_filter(
'tagente',
[],
['id_agente']
if (empty($address_by_user_groups) === true) {
$address_by_user_groups = [];
array_unshift($address_by_user_groups, '""');
}
$whereSubquery .= sprintf(
'AND (
`ttrap`.`source` IN (%s) OR
`ttrap`.`source`=""
)',
implode(',', $address_by_user_groups)
);
$id_agents = [];
foreach ($rows as $row) {
$id_agents[] = $row['id_agente'];
}
$all_address_agents = agents_get_addresses($id_agents);
foreach ($all_address_agents as $i => $a) {
$all_address_agents[$i] = '"'.$a.'"';
}
}
if (empty($address_by_user_groups)) {
$address_by_user_groups = [];
array_unshift($address_by_user_groups, '""');
if ($filters['filter_alias_search'] !== '') {
$sql_join = '
LEFT JOIN `tagente`
ON `tagente`.`direccion` = `ttrap`.`source`
LEFT JOIN `taddress_agent`
ON `tagente`.`id_agente` = `taddress_agent`.`id_agent`
LEFT JOIN `taddress`
ON `taddress_agent`.`id_a` = `taddress`.`id_a`
';
} else {
$sql_join = '';
}
if (empty($all_address_agents)) {
$all_address_agents = [];
array_unshift($all_address_agents, '""');
}
$sql = 'SELECT * FROM ttrap
WHERE (
`source` IN ('.implode(',', $address_by_user_groups).") OR
`source`='' OR
`source` NOT IN (".implode(',', $all_address_agents).')
)
%s
ORDER BY timestamp DESC
LIMIT %d,%d';
$whereSubquery = '';
if ($filters['filter_alert'] != -1) {
$whereSubquery .= ' AND alerted = '.$filters['filter_alert'];
$whereSubquery .= ' AND `ttrap`.`alerted` = '.$filters['filter_alert'];
}
$filters['filter_severity'] = (int) $filters['filter_severity'];
if ($filters['filter_severity'] != -1) {
// There are two special severity values aimed to match two different trap standard severities
// in database: warning/critical and critical/normal.
if ($filters['filter_severity'] !== EVENT_CRIT_OR_NORMAL
&& $filters['filter_severity'] !== EVENT_CRIT_WARNING_OR_CRITICAL
&& $filters['filter_severity'] !== EVENT_CRIT_NOT_NORMAL
if ($filters['filter_severity'] != EVENT_CRIT_OR_NORMAL
&& $filters['filter_severity'] != EVENT_CRIT_WARNING_OR_CRITICAL
) {
// Test if enterprise is installed to search oid in text or oid field in ttrap.
$whereSubquery .= ' AND severity = '.$filters['filter_severity'];
if ($config['enterprise_installed']) {
$whereSubquery .= ' AND (
(`ttrap`.`alerted` = 0 AND `ttrap`.`severity` = '.$filters['filter_severity'].') OR
(`ttrap`.`alerted` = 1 AND `ttrap`.`priority` = '.$filters['filter_severity'].'))';
} else {
$whereSubquery .= ' AND (
(`ttrap`.`alerted` = 0 AND 1 = '.$filters['filter_severity'].') OR
(`ttrap`.`alerted` = 1 AND `ttrap`.`priority` = '.$filters['filter_severity'].'))';
}
} else if ($filters['filter_severity'] === EVENT_CRIT_WARNING_OR_CRITICAL) {
// Test if enterprise is installed to search oid in text or oid field in ttrap.
$whereSubquery .= ' AND (severity = '.EVENT_CRIT_WARNING.' OR severity = '.EVENT_CRIT_CRITICAL.' OR severity = '.EVENT_CRIT_WARNING_OR_CRITICAL.')';
if ($config['enterprise_installed']) {
$whereSubquery .= ' AND (
(`ttrap`.`alerted` = 0 AND (`ttrap`.`severity` = '.EVENT_CRIT_WARNING.' OR `ttrap`.`severity` = '.EVENT_CRIT_CRITICAL.')) OR
(`ttrap`.`alerted` = 1 AND (`ttrap`.`priority` = '.EVENT_CRIT_WARNING.' OR `ttrap`.`priority` = '.EVENT_CRIT_CRITICAL.')))';
} else {
$whereSubquery .= ' AND (
(`ttrap`.`alerted` = 1 AND (`ttrap`.`priority` = '.EVENT_CRIT_WARNING.' OR `ttrap`.`priority` = '.EVENT_CRIT_CRITICAL.')))';
}
} else if ($filters['filter_severity'] === EVENT_CRIT_OR_NORMAL) {
// Test if enterprise is installed to search oid in text or oid field in ttrap.
$whereSubquery .= ' AND (severity = '.EVENT_CRIT_NORMAL.' OR severity = '.EVENT_CRIT_CRITICAL.' OR severity = '.EVENT_CRIT_OR_NORMAL.')';
} else if ($filters['filter_severity'] === EVENT_CRIT_NOT_NORMAL) {
// Test if enterprise is installed to search oid in text or oid field in ttrap.
$whereSubquery .= ' AND (severity = '.EVENT_CRIT_WARNING.' OR severity = '.EVENT_CRIT_CRITICAL.' OR severity = '.EVENT_CRIT_NOT_NORMAL.')';
if ($config['enterprise_installed']) {
$whereSubquery .= ' AND (
(`ttrap`.`alerted` = 0 AND (`ttrap`.`severity` = '.EVENT_CRIT_NORMAL.' OR `ttrap`.`severity` = '.EVENT_CRIT_CRITICAL.')) OR
(`ttrap`.`alerted` = 1 AND (`ttrap`.`priority` = '.EVENT_CRIT_NORMAL.' OR `ttrap`.`priority` = '.EVENT_CRIT_CRITICAL.')))';
} else {
$whereSubquery .= ' AND (
(`ttrap`.`alerted` = 1 AND (`ttrap`.`priority` = '.EVENT_CRIT_NORMAL.' OR `ttrap`.`priority` = '.EVENT_CRIT_CRITICAL.')))';
}
}
}
if ($filters['filter_free_search'] !== '') {
$free_search_str = io_safe_output($filters['filter_free_search']);
$whereSubquery .= '
AND (source LIKE "%'.$free_search_str.'%" OR
oid LIKE "%'.$free_search_str.'%" OR
oid_custom LIKE "%'.$free_search_str.'%" OR
type_custom LIKE "%'.$free_search_str.'%" OR
value LIKE "%'.$free_search_str.'%" OR
value_custom LIKE "%'.$free_search_str.'%" OR
id_usuario LIKE "%'.$free_search_str.'%" OR
text LIKE "%'.$free_search_str.'%" OR
description LIKE "%'.$free_search_str.'%")';
AND (`ttrap`.`source` LIKE "%'.$free_search_str.'%" OR
`ttrap`.`oid` LIKE "%'.$free_search_str.'%" OR
`ttrap`.`oid_custom` LIKE "%'.$free_search_str.'%" OR
`ttrap`.`type_custom` LIKE "%'.$free_search_str.'%" OR
`ttrap`.`value` LIKE "%'.$free_search_str.'%" OR
`ttrap`.`value_custom` LIKE "%'.$free_search_str.'%" OR
`ttrap`.`id_usuario` LIKE "%'.$free_search_str.'%" OR
`ttrap`.`text` LIKE "%'.$free_search_str.'%" OR
`ttrap`.`description` LIKE "%'.$free_search_str.'%")';
}
if ($filters['filter_alias_search'] !== '') {
$alias_search = io_safe_output($filters['filter_alias_search']);
$whereSubquery .= '
AND `tagente`.`alias` LIKE "%'.$alias_search.'%"';
}
if ($filters['filter_status'] != -1) {
$whereSubquery .= ' AND status = '.$filters['filter_status'];
$whereSubquery .= ' AND `ttrap`.`status` = '.$filters['filter_status'];
}
if ($date_from_trap != '') {
if ($time_from_trap != '') {
$whereSubquery .= '
AND (utimestamp > '.$ago_timestamp.')
AND (`ttrap`.`utimestamp` > '.$ago_timestamp.')
';
} else {
$whereSubquery .= '
AND (UNIX_TIMESTAMP(timestamp) > UNIX_TIMESTAMP("'.$date_from_trap.' 23:59:59"))
AND (UNIX_TIMESTAMP(`ttrap`.`timestamp`) > UNIX_TIMESTAMP("'.$date_from_trap.' 23:59:59"))
';
}
}
@ -696,37 +739,31 @@ class SnmpConsole extends HTML
if ($date_to_trap != '') {
if ($time_to_trap) {
$whereSubquery .= '
AND (utimestamp < '.$now_timestamp.')
AND (`ttrap`.`utimestamp` < '.$now_timestamp.')
';
} else {
$whereSubquery .= '
AND (UNIX_TIMESTAMP(timestamp) < UNIX_TIMESTAMP("'.$date_to_trap.' 23:59:59"))
AND (UNIX_TIMESTAMP(`ttrap`.`timestamp`) < UNIX_TIMESTAMP("'.$date_to_trap.' 23:59:59"))
';
}
}
if ($filters['filter_trap_type'] == 5) {
$whereSubquery .= ' AND type NOT IN (0, 1, 2, 3, 4)';
$whereSubquery .= ' AND `ttrap`.`type` NOT IN (0, 1, 2, 3, 4)';
} else if ($filters['filter_trap_type'] != -1) {
$whereSubquery .= ' AND type = '.$filters['filter_trap_type'];
$whereSubquery .= ' AND `ttrap`.`type` = '.$filters['filter_trap_type'];
}
$where_without_group = '';
if ($filters['filter_group_by']) {
$where_without_group = $whereSubquery;
$whereSubquery .= ' GROUP BY source,oid';
$whereSubquery .= ' GROUP BY `ttrap`.`source`,`ttrap`.`oid`,`ttrap`.`id_trap`';
} else if ($filters['filter_alias_search'] !== '') {
$whereSubquery .= ' GROUP BY `ttrap`.`id_trap`';
}
$sql = sprintf($sql, $whereSubquery, $start, $length);
$sql_count = 'SELECT COUNT(id_trap) FROM ttrap
WHERE (
source IN ('.implode(',', $address_by_user_groups).") OR
source='' OR
source NOT IN (".implode(',', $all_address_agents).')
)
%s';
$sql_count = sprintf($sql_count, $whereSubquery);
$sql = sprintf($sql, $sql_join, $whereSubquery, $start, $length);
$sql_count = sprintf($sql_count, $sql_join, $whereSubquery);
$traps = db_get_all_rows_sql($sql, true);
$total = (int) db_get_value_sql($sql_count, false, false);
@ -781,8 +818,8 @@ class SnmpConsole extends HTML
$tmp->snmp_agent .= '<a class="'.$severity_class.'" href="index.php?sec=estado&sec2=godmode/agentes/configurar_agente&new_agent=1&direccion='.$tmp->source.'" title="'.__('Create agent').'">'.$tmp->source.'</a>';
} else {
$tmp->snmp_agent .= '<div class="'.$severity_class.' snmp-div"><a href="index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$agent['id_agente'].'" title="'.__('View agent details').'">';
$tmp->snmp_agent .= '<strong>'.$agent['alias'].'</strong></a>'.ui_print_help_tip($tmp->source, true);
'</div>';
$tmp->snmp_agent .= '<strong>'.$agent['alias'].ui_print_help_tip($tmp->source, true);
'</strong></a></div>';
}
// Enterprise string.
@ -819,7 +856,13 @@ class SnmpConsole extends HTML
// User ID.
$tmp->user_id = '<div class="'.$severity_class.' snmp-div">';
if (empty($status) === false) {
$tmp->user_id .= '<a href="index.php?sec=workspace&sec2=operation/users/user_edit&ver='.$tmp->id_usuario.'">'.substr($tmp->id_usuario, 0, 8).'</a>';
if (users_is_admin($config['id_user']) === true || check_acl($config['id_user'], 0, 'UM') === true) {
$url = ui_get_full_url('index.php?sec=gusuarios&sec2=godmode/users/configure_user&edit_user=1&pure=0&id_user='.$tmp->id_usuario);
$tmp->user_id .= '<a href="'.$url.'">'.substr($tmp->id_usuario, 0, 8).'</a>';
} else {
$tmp->user_id .= substr($tmp->id_usuario, 0, 8);
}
if (!empty($tmp->id_usuario)) {
$tmp->user_id .= ui_print_help_tip(get_user_fullname($tmp->id_usuario), true);
}
@ -1129,25 +1172,42 @@ class SnmpConsole extends HTML
$whereSubquery .= ' AND alerted = '.$$alert;
}
$severity = (int) $severity;
if ($severity !== -1) {
if ($severity != -1) {
// There are two special severity values aimed to match two different trap standard severities
// in database: warning/critical and critical/normal.
if ($severity !== EVENT_CRIT_OR_NORMAL
&& $severity !== EVENT_CRIT_WARNING_OR_CRITICAL
&& $severity !== EVENT_CRIT_NOT_NORMAL
if ($severity != EVENT_CRIT_OR_NORMAL
&& $severity != EVENT_CRIT_WARNING_OR_CRITICAL
) {
// Test if enterprise is installed to search oid in text or oid field in ttrap.
$whereSubquery .= ' AND severity = '.$severity;
if ($config['enterprise_installed']) {
$whereSubquery .= ' AND (
(alerted = 0 AND severity = '.$severity.') OR
(alerted = 1 AND priority = '.$severity.'))';
} else {
$whereSubquery .= ' AND (
(alerted = 0 AND 1 = '.$severity.') OR
(alerted = 1 AND priority = '.$severity.'))';
}
} else if ($severity === EVENT_CRIT_WARNING_OR_CRITICAL) {
// Test if enterprise is installed to search oid in text or oid field in ttrap.
$whereSubquery .= ' AND (severity = '.EVENT_CRIT_WARNING.' OR severity = '.EVENT_CRIT_CRITICAL.' OR severity = '.EVENT_CRIT_WARNING_OR_CRITICAL.')';
if ($config['enterprise_installed']) {
$whereSubquery .= ' AND (
(alerted = 0 AND (severity = '.EVENT_CRIT_WARNING.' OR severity = '.EVENT_CRIT_CRITICAL.')) OR
(alerted = 1 AND (priority = '.EVENT_CRIT_WARNING.' OR priority = '.EVENT_CRIT_CRITICAL.')))';
} else {
$whereSubquery .= ' AND (
(alerted = 1 AND (priority = '.EVENT_CRIT_WARNING.' OR priority = '.EVENT_CRIT_CRITICAL.')))';
}
} else if ($severity === EVENT_CRIT_OR_NORMAL) {
// Test if enterprise is installed to search oid in text or oid field in ttrap.
$whereSubquery .= ' AND (severity = '.EVENT_CRIT_NORMAL.' OR severity = '.EVENT_CRIT_CRITICAL.' OR severity = '.EVENT_CRIT_OR_NORMAL.')';
} else if ($severity === EVENT_CRIT_NOT_NORMAL) {
// Test if enterprise is installed to search oid in text or oid field in ttrap.
$whereSubquery .= ' AND (severity = '.EVENT_CRIT_WARNING.' OR severity = '.EVENT_CRIT_CRITICAL.' OR severity = '.EVENT_CRIT_NOT_NORMAL.')';
if ($config['enterprise_installed']) {
$whereSubquery .= ' AND (
(alerted = 0 AND (severity = '.EVENT_CRIT_NORMAL.' OR severity = '.EVENT_CRIT_CRITICAL.')) OR
(alerted = 1 AND (priority = '.EVENT_CRIT_NORMAL.' OR priority = '.EVENT_CRIT_CRITICAL.')))';
} else {
$whereSubquery .= ' AND (
(alerted = 1 AND (priority = '.EVENT_CRIT_NORMAL.' OR priority = '.EVENT_CRIT_CRITICAL.')))';
}
}
}

View File

@ -22,7 +22,7 @@ use DI\ContainerBuilder;
/*
* Pandora build version and version
*/
$build_version = 'PC240503';
$build_version = 'PC240507';
$pandora_version = 'v7.0NG.776';
// Do not overwrite default timezone set if defined.

View File

@ -741,8 +741,10 @@ function config_update_config()
$error_update[] = __('Admin secondary LDAP login');
}
if (config_update_value('ldap_admin_pass_secondary', get_parameter('ldap_admin_pass_secondary'), true, true) === false) {
$error_update[] = __('Admin secondary LDAP password');
if ((bool) get_parameter('ldap_admin_pass_secondary_password_changed', false) === true) {
if (config_update_value('ldap_admin_pass_secondary', get_parameter('ldap_admin_pass_secondary'), true, true) === false) {
$error_update[] = __('Admin LDAP password secondary');
}
}
if (config_update_value('fallback_local_auth', get_parameter('fallback_local_auth'), true) === false) {

View File

@ -134,11 +134,14 @@ function forecast_projection_graph(
// 3.1 Standard deviation for X: sqrt((Sum(Xi²)/Obs) - (avg X)²)
// 3.2 Standard deviation for Y: sqrt((Sum(Yi²)/Obs) - (avg Y)²)
// Linear correlation coefficient:
// Agent interval could be zero, 300 is the predefined
// Agent interval could be zero, 300 is the predefined.
if ($sum_obs == 0) {
$agent_interval = SECONDS_5MINUTES;
} else {
$agent_interval = ($sum_diff_dates / $sum_obs);
if ($agent_interval < 60) {
$agent_interval = SECONDS_1MINUTE;
}
}
// Could be a inverse correlation coefficient
@ -170,7 +173,7 @@ function forecast_projection_graph(
$a = 0;
}
// Data inicialization
// Data inicialization.
$output_data = [];
if ($prediction_period != false) {
$limit_timestamp = ($last_timestamp + $prediction_period);
@ -199,50 +202,54 @@ function forecast_projection_graph(
$time_format = 'M d';
}
// Aplying linear regression to module data in order to do the prediction
$idx = 0;
// Create data in graph format like
while ($in_range) {
$now = time();
try {
// Aplying linear regression to module data in order to do the prediction.
$idx = 0;
// Create data in graph format like.
while ($in_range) {
$now = time();
// Check that exec time is not greater than half max exec server time
if ($max_exec_time != false) {
if (($begin_time + ($max_exec_time / 2)) < $now) {
return false;
}
}
$timestamp_f = ($current_ts * 1000);
if ($csv) {
$output_data[$idx]['date'] = $current_ts;
$output_data[$idx]['data'] = ($a + ($b * $current_ts));
} else {
$output_data[$idx][0] = $timestamp_f;
$output_data[$idx][1] = ($a + ($b * $current_ts));
}
// Using this function for prediction_date
if ($prediction_period == false) {
// These statements stop the prediction when interval is greater than 2 years
if (($current_ts - $last_timestamp) >= 94608000
|| $max_value == $min_value
) {
return false;
// Check that exec time is not greater than half max exec server time.
if ($max_exec_time != false) {
if (($begin_time + ($max_exec_time / 2)) < $now) {
return false;
}
}
// Found it
if (($max_value >= $output_data[$idx][1])
&& ($min_value <= $output_data[$idx][0])
) {
return ($current_ts + ($sum_diff_dates * $agent_interval));
}
} else if ($current_ts > $limit_timestamp) {
$in_range = false;
}
$timestamp_f = ($current_ts * 1000);
$current_ts = ($current_ts + $agent_interval);
$idx++;
if ($csv) {
$output_data[$idx]['date'] = $current_ts;
$output_data[$idx]['data'] = ($a + ($b * $current_ts));
} else {
$output_data[$idx][0] = $timestamp_f;
$output_data[$idx][1] = ($a + ($b * $current_ts));
}
// Using this function for prediction_date.
if ($prediction_period == false) {
// These statements stop the prediction when interval is greater than 2 years.
if (($current_ts - $last_timestamp) >= 94608000
|| $max_value == $min_value
) {
return false;
}
// Found it.
if (($max_value >= $output_data[$idx][1])
&& ($min_value <= $output_data[$idx][0])
) {
return ($current_ts + ($sum_diff_dates * $agent_interval));
}
} else if ($current_ts > $limit_timestamp) {
$in_range = false;
}
$current_ts = ($current_ts + $agent_interval);
$idx++;
}
} catch (\Exception $e) {
return false;
}
return $output_data;

View File

@ -3509,7 +3509,7 @@ function graph_custom_sql_graph(
}
if ((int) $ttl === 2) {
$options['dataLabel'] = ['display' => 'auto'];
$options['dataLabel'] = ['display' => true];
if ($layout !== false && is_array($layout) === true) {
$options['layout'] = $layout;

View File

@ -7942,6 +7942,7 @@ function html_print_select_date_range(
$date_format_js='yy/mm/dd',
$time_format_js='HH:mm:ss',
$id='',
$units_selected='1',
) {
global $config;
@ -8136,7 +8137,7 @@ function html_print_select_date_range(
$output .= html_print_select(
$units,
$name.'_units',
'1',
$units_selected,
'',
'',
0,

View File

@ -6128,7 +6128,7 @@ function reporting_alert_get_fired($id_agent_module, $id_alert_template_module,
$datelimit = ($datetime - $period);
$empty = '----------------------------';
$empty = '';
if (empty($firedTimes)) {
$firedTimes = [];
$firedTimes[0]['timestamp'] = $empty;
@ -6429,7 +6429,7 @@ function reporting_alert_report_agent($report, $content)
$data_action[$naction]['name'] = $action['name'];
$fired = $action['fired'];
if ($fired == 0 || ($fired <= $datelimit || $fired > $datetime)) {
$data_action[$naction]['fired'] = '----------------------------';
$data_action[$naction]['fired'] = '';
} else {
$data_action[$naction]['fired'] = $fired;
}
@ -6441,7 +6441,7 @@ function reporting_alert_report_agent($report, $content)
$data_action[$naction]['name'] = $action['name'];
$fired = $action['fired'];
if ($fired == 0 || ($fired <= $datelimit || $fired > $datetime)) {
$data_action[$naction]['fired'] = '----------------------------';
$data_action[$naction]['fired'] = '';
} else {
$data_action[$naction]['fired'] = $fired;
}
@ -6453,7 +6453,7 @@ function reporting_alert_report_agent($report, $content)
$data_action[$naction]['name'] = $action['name'];
$fired = $action['fired'];
if ($fired == 0 || ($fired <= $datelimit || $fired > $datetime)) {
$data_action[$naction]['fired'] = '----------------------------';
$data_action[$naction]['fired'] = '';
} else {
$data_action[$naction]['fired'] = $fired;
}
@ -6604,7 +6604,7 @@ function reporting_alert_report_module($report, $content)
$data_action[$naction]['name'] = $action['name'];
$fired = $action['fired'];
if ($fired == 0 || ($fired <= $datelimit || $fired > $datetime)) {
$data_action[$naction]['fired'] = '----------------------------';
$data_action[$naction]['fired'] = '';
} else {
$data_action[$naction]['fired'] = $fired;
}
@ -6616,7 +6616,7 @@ function reporting_alert_report_module($report, $content)
$data_action[$naction]['name'] = $action['name'];
$fired = $action['fired'];
if ($fired == 0 || ($fired <= $datelimit || $fired > $datetime)) {
$data_action[$naction]['fired'] = '----------------------------';
$data_action[$naction]['fired'] = '';
} else {
$data_action[$naction]['fired'] = $fired;
}
@ -6628,7 +6628,7 @@ function reporting_alert_report_module($report, $content)
$data_action[$naction]['name'] = $action['name'];
$fired = $action['fired'];
if ($fired == 0 || ($fired <= $datelimit || $fired > $datetime)) {
$data_action[$naction]['fired'] = '----------------------------';
$data_action[$naction]['fired'] = '';
} else {
$data_action[$naction]['fired'] = $fired;
}
@ -6692,6 +6692,7 @@ function reporting_sql_graph(
switch ($type_sql_graph) {
case 'sql_graph_hbar':
default:
$layout = ['padding' => ['right' => '40']];
$return['type'] = 'sql_graph_hbar';
break;

View File

@ -1712,7 +1712,7 @@ function reporting_html_event_report_group($table, $item, $pdf=0)
$table1->head[3] = __('Name');
$table1->head[4] = __('Agent');
$table1->head[5] = __('Severity');
$table1->head[6] = __('Val. by');
$table1->head[6] = __('Validated by');
$table1->head[7] = __('Timestamp');
} else {
$table1->head[0] = __('Status');
@ -1720,7 +1720,7 @@ function reporting_html_event_report_group($table, $item, $pdf=0)
$table1->head[2] = __('Name');
$table1->head[3] = __('Agent');
$table1->head[4] = __('Severity');
$table1->head[5] = __('Val. by');
$table1->head[5] = __('Validated by');
$table1->head[6] = __('Timestamp');
}
@ -1801,7 +1801,11 @@ function reporting_html_event_report_group($table, $item, $pdf=0)
'id_user',
$event['id_usuario']
);
$data[] = io_safe_output($user_name);
if (isset($event['id_usuario']) === true && empty($event['id_usuario']) === false) {
$data[] = io_safe_output($user_name).' ('.$event['id_usuario'].')';
} else {
$data[] = '';
}
}
if ($item['show_summary_group']) {
@ -3845,7 +3849,7 @@ function reporting_html_event_report_agent($table, $item, $pdf=0)
$table1->head[2] = __('Name');
$table1->head[4] = __('Severity');
$table1->head[5] = __('Val. by');
$table1->head[5] = __('Validated by');
$table1->head[6] = __('Timestamp');
if ((bool) $item['show_custom_data'] === true) {
$table1->head[7] = __('Custom data');
@ -3904,7 +3908,11 @@ function reporting_html_event_report_agent($table, $item, $pdf=0)
$data[] = '<i>'.__('System').'</i>';
} else {
$user_name = db_get_value('fullname', 'tusuario', 'id_user', $event['validated_by']);
$data[] = io_safe_output($user_name);
if (isset($event['id_usuario']) === true && empty($event['id_usuario']) === false) {
$data[] = io_safe_output($user_name).' ('.$event['id_usuario'].')';
} else {
$data[] = '';
}
}
if ($item['show_summary_group']) {

View File

@ -1722,3 +1722,16 @@ function show_projection_period() {
$("#div_projection_period").hide();
}
}
// Paused and resume if edit mode is checked.
// eslint-disable-next-line no-unused-vars
function paused_resume_dashboard_countdown() {
$("#checkbox-edit-mode").on("click", function() {
let isChecked = $("#checkbox-edit-mode").is(":checked");
if (isChecked) {
$("#refrcounter").countdown("pause");
} else {
$("#refrcounter").countdown("resume");
}
});
}

View File

@ -131,7 +131,7 @@
<div style='padding-bottom: 50px'>
<?php
$version = '7.0NG.776';
$build = '240503';
$build = '240507';
$banner = "v$version Build $build";
error_reporting(0);

View File

@ -46,6 +46,7 @@ $date_init_less = (strtotime(date('Y/m/d')) - SECONDS_1DAY);
$date_init = get_parameter('date_init', date(DATE_FORMAT, $date_init_less));
$time_init = get_parameter('time_init', date(TIME_FORMAT, $date_init_less));
$datetime_init = strtotime($date_init.' '.$time_init);
$date_units = get_parameter('utimestamp_units');
if ($custom_date === '1') {
if ($datetime_init >= $datetime_end) {
$datetime_init = $date_init_less;
@ -55,7 +56,6 @@ if ($custom_date === '1') {
$date_end = date('Y/m/d H:i:s', $datetime_end);
$period = ($datetime_end - $datetime_init);
} else if ($custom_date === '2') {
$date_units = get_parameter('utimestamp_units');
$date_end = date('Y/m/d H:i:s');
$date_init = date('Y/m/d H:i:s', (strtotime($date_end) - ((int) $date_text * (int) $date_units)));
$period = (strtotime($date_end) - strtotime($date_init));
@ -768,7 +768,14 @@ if (is_metaconsole() === false) {
date('H:i:s', $date_init),
date('Y/m/d', $utimestamp),
date('H:i:s', $utimestamp),
$date_text
$date_text,
'w100p',
'Y/m/d',
'H:i:s',
'yy/mm/dd',
'HH:mm:ss',
'',
$date_units
)
);
}

View File

@ -55,11 +55,12 @@ if (is_ajax()) {
$search = io_safe_input($search_left);
// Agents.
// Concatenate AW and AD permisions to get all the possible groups where the user can manage.
// Concatenate AR, AW and AD permisions to get all the possible groups where the user can manage.
$user_groupsAW = users_get_groups($config['id_user'], 'AW');
$user_groupsAD = users_get_groups($config['id_user'], 'AD');
$user_groupsAR = users_get_groups($config['id_user'], 'AR');
$user_groups = ($user_groupsAW + $user_groupsAD);
$user_groups = ($user_groupsAW + $user_groupsAD + $user_groupsAR);
$user_groups_to_sql = implode(',', array_keys($user_groups));
$search_sql = ' AND (nombre LIKE "%%'.$search.'%%" OR alias LIKE "%%'.$search.'%%")';
@ -197,6 +198,9 @@ if (is_ajax()) {
'graph_analytics' => true,
];
// Included dependencies when is an ajax request.
include_javascript_dependencies_flot_graph(false);
$graph_return = graphic_combined_module(
$modules,
$params,

View File

@ -36,6 +36,7 @@ $ajaxPage = $config['homedir'].'/operation/snmpconsole/snmp_view';
$filter_alert = get_parameter('filter_alert', -1);
$filter_severity = get_parameter('filter_severity', -1);
$filter_free_search = get_parameter('filter_free_search', '');
$filter_alias_search = get_parameter('filter_alias_search', '');
$filter_status = get_parameter('filter_status', 0);
$filter_group_by = get_parameter('filter_group_by', 0);
$filter_hours_ago = get_parameter('filter_hours_ago', 8);
@ -54,7 +55,8 @@ try {
$filter_group_by,
$filter_hours_ago,
$filter_trap_type,
$refr
$refr,
$filter_alias_search
);
} catch (Exception $e) {
if ((bool) is_ajax() === true) {

View File

@ -6,7 +6,7 @@
%define debug_package %{nil}
%define name pandorafms_console
%define version 7.0NG.776
%define release 240503
%define release 240507
# User and Group under which Apache is running
%define httpd_name httpd

View File

@ -6,7 +6,7 @@
%define debug_package %{nil}
%define name pandorafms_console
%define version 7.0NG.776
%define release 240503
%define release 240507
# User and Group under which Apache is running
%define httpd_name httpd

View File

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

View File

@ -3777,6 +3777,7 @@ CREATE TABLE IF NOT EXISTS `tlayout_template` (
`maintenance_mode` TEXT,
`grid_color` VARCHAR(45) NOT NULL DEFAULT '#cccccc',
`grid_size` VARCHAR(45) NOT NULL DEFAULT '10',
`create_from` INT UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;

View File

@ -1217,7 +1217,7 @@ INSERT INTO `tagent_custom_fields` VALUES (1,'Serial&#x20;Number',0,0,'',0),(2,'
INSERT INTO `ttag` VALUES (1,'network','Network&#x20;equipment','http://pandorafms.com','','',''),(2,'critical','Critical&#x20;modules','','','',''),(3,'dmz','DMZ&#x20;Network&#x20;Zone','','','',''),(4,'performance','Performance&#x20;anda&#x20;capacity&#x20;modules','','','',''),(5,'configuration','','','','','');
INSERT INTO `tevent_response` VALUES (1,'Ping&#x20;to&#x20;host','Ping&#x20;to&#x20;the&#x20;agent&#x20;host','ping&#x20;-c&#x20;5&#x20;_agent_address_','command',0,620,500,0,'',0,90,0),(3,'Create&#x20;incident&#x20;from&#x20;event','Create&#x20;a&#x20;incident&#x20;from&#x20;the&#x20;event&#x20;with&#x20;the&#x20;standard&#x20;incidents&#x20;system&#x20;of&#x20;Pandora&#x20;FMS','index.php?sec=workspace&amp;sec2=operation/incidents/incident_detail&amp;insert_form&amp;from_event=_event_id_','url',0,0,0,1,'',0,90,0),(5,'Restart&#x20;agent','Restart&#x20;the&#x20;agent&#x20;with&#x20;using&#x20;UDP&#x20;protocol.&#x0d;&#x0a;&#x0d;&#x0a;To&#x20;use&#x20;this&#x20;response&#x20;is&#x20;necessary&#x20;to&#x20;have&#x20;installed&#x20;Pandora&#x20;FMS&#x20;server&#x20;and&#x20;console&#x20;in&#x20;the&#x20;same&#x20;machine.','/usr/share/pandora_server/util/udp_client.pl&#x20;_agent_address_&#x20;41122&#x20;&quot;REFRESH&#x20;AGENT&quot;','command',0,620,500,0,'',0,90,0),(6,'Ping&#x20;to&#x20;module&#x20;agent&#x20;host','Ping&#x20;to&#x20;the&#x20;module&#x20;agent&#x20;host','ping&#x20;-c&#x20;5&#x20;_module_address_','command',0,620,500,0,'',0,90,0),(7,'Create&#x20;ticket&#x20;in&#x20;Pandora&#x20;ITSM&#x20;from&#x20;event','Create&#x20;a&#x20;ticket&#x20;in&#x20;Pandora&#x20;ITSM&#x20;from&#x20;an&#x20;event','index.php?sec=manageTickets&amp;sec2=operation/ITSM/itsm&amp;operation=edit&amp;from_event=_event_id_','url',0,0,0,1,'',0,90,1);
INSERT INTO `tevent_response` VALUES (1,'Ping&#x20;to&#x20;host','Ping&#x20;to&#x20;the&#x20;agent&#x20;host','ping&#x20;-c&#x20;5&#x20;_agent_address_','command',0,620,500,0,'',0,90,0),(5,'Restart&#x20;agent','Restart&#x20;the&#x20;agent&#x20;with&#x20;using&#x20;UDP&#x20;protocol.&#x0d;&#x0a;&#x0d;&#x0a;To&#x20;use&#x20;this&#x20;response&#x20;is&#x20;necessary&#x20;to&#x20;have&#x20;installed&#x20;Pandora&#x20;FMS&#x20;server&#x20;and&#x20;console&#x20;in&#x20;the&#x20;same&#x20;machine.','/usr/share/pandora_server/util/udp_client.pl&#x20;_agent_address_&#x20;41122&#x20;&quot;REFRESH&#x20;AGENT&quot;','command',0,620,500,0,'',0,90,0),(6,'Ping&#x20;to&#x20;module&#x20;agent&#x20;host','Ping&#x20;to&#x20;the&#x20;module&#x20;agent&#x20;host','ping&#x20;-c&#x20;5&#x20;_module_address_','command',0,620,500,0,'',0,90,0),(7,'Create&#x20;ticket&#x20;in&#x20;Pandora&#x20;ITSM&#x20;from&#x20;event','Create&#x20;a&#x20;ticket&#x20;in&#x20;Pandora&#x20;ITSM&#x20;from&#x20;an&#x20;event','index.php?sec=manageTickets&amp;sec2=operation/ITSM/itsm&amp;operation=edit&amp;from_event=_event_id_','url',0,0,0,1,'',0,90,1);
INSERT INTO `tupdate_settings` VALUES ('current_update', '412'), ('customer_key', 'PANDORA-FREE'), ('updating_binary_path', 'Path where the updated binary files will be stored'), ('updating_code_path', 'Path where the updated code is stored'), ('dbname', ''), ('dbhost', ''), ('dbpass', ''), ('dbuser', ''), ('dbport', ''), ('proxy', ''), ('proxy_port', ''), ('proxy_user', ''), ('proxy_pass', '');

View File

@ -94,5 +94,8 @@ echo $output;
$("#button-add-widget-"+cellId).trigger("click");
}, 500);
}
// Paused and resume if edit mode is checked.
paused_resume_dashboard_countdown();
});
</script>

View File

@ -1,5 +1,5 @@
package: pandorafms-server
Version: 7.0NG.776-240503
Version: 7.0NG.776-240507
Architecture: all
Priority: optional
Section: admin

View File

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

View File

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

View File

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

View File

@ -7,7 +7,7 @@
%define debug_package %{nil}
%define name pandorafms_server
%define version 7.0NG.776
%define release 240503
%define release 240507
Summary: Pandora FMS Server
Name: %{name}

View File

@ -4,7 +4,7 @@
%global __os_install_post %{nil}
%define name pandorafms_server
%define version 7.0NG.776
%define release 240503
%define release 240507
Summary: Pandora FMS Server
Name: %{name}

View File

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

View File

@ -38,7 +38,7 @@ use PandoraFMS::Config;
use PandoraFMS::DB;
# version: define current version
my $version = "7.0NG.776 Build 240503";
my $version = "7.0NG.776 Build 240507";
# Pandora server configuration
my %conf;

View File

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