Merge branch 'develop' into ent-4690-revision-completa-de-informes-templates-en-meta

Conflicts:
	pandora_console/include/functions_graph.php
This commit is contained in:
manuel 2019-10-22 15:51:38 +02:00
commit bbeb750e46
72 changed files with 876 additions and 475 deletions

View File

@ -1,5 +1,5 @@
package: pandorafms-agent-unix package: pandorafms-agent-unix
Version: 7.0NG.739-191009 Version: 7.0NG.739-191022
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.739-191009" pandora_version="7.0NG.739-191022"
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.739'; use constant AGENT_VERSION => '7.0NG.739';
use constant AGENT_BUILD => '191009'; use constant AGENT_BUILD => '191022';
# 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.739 %define version 7.0NG.739
%define release 191009 %define release 191022
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.739 %define version 7.0NG.739
%define release 191009 %define release 191022
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.739" PI_VERSION="7.0NG.739"
PI_BUILD="191009" PI_BUILD="191022"
OS_NAME=`uname -s` OS_NAME=`uname -s`
FORCE=0 FORCE=0

View File

@ -186,7 +186,7 @@ UpgradeApplicationID
{} {}
Version Version
{191009} {191022}
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.739(Build 191009)") #define PANDORA_VERSION ("7.0NG.739(Build 191022)")
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.739(Build 191009))" VALUE "ProductVersion", "(7.0NG.739(Build 191022))"
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.739-191009 Version: 7.0NG.739-191022
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.739-191009" pandora_version="7.0NG.739-191022"
package_pear=0 package_pear=0
package_pandora=1 package_pandora=1

View File

@ -765,7 +765,7 @@ $table_adv_agent_icon .= html_print_select(
).'</div>'; ).'</div>';
if ($config['activate_gis']) { if ($config['activate_gis']) {
$table_adv_gis = '<div class="label_select_simple label_simple_one_item"><p class="input_label input_label_simple">'.__('Ignore new GIS data:').'</p>'; $table_adv_gis = '<div class="label_select_simple label_simple_one_item"><p class="input_label input_label_simple">'.__('Update new GIS data:').'</p>';
if ($new_agent) { if ($new_agent) {
$update_gis_data = true; $update_gis_data = true;
} }

View File

@ -842,7 +842,9 @@ foreach ($modules as $module) {
$module['str_warning'], $module['str_warning'],
$module['max_critical'], $module['max_critical'],
$module['min_critical'], $module['min_critical'],
$module['str_critical'] $module['str_critical'],
$module['warning_inverse'],
$module['critical_inverse']
); );
} else { } else {
$data[7] = ''; $data[7] = '';

View File

@ -59,8 +59,10 @@ if ($update_agents) {
$values['id_grupo'] = get_parameter('group'); $values['id_grupo'] = get_parameter('group');
} }
if (get_parameter('interval', 0) != 0) { if (!(get_parameter('interval_select') == -1 && empty(get_parameter('interval_text')))) {
$values['intervalo'] = get_parameter('interval'); if (get_parameter('interval', 0) != 0) {
$values['intervalo'] = get_parameter('interval');
}
} }
if (get_parameter('id_os', '') != -1) { if (get_parameter('id_os', '') != -1) {
@ -523,7 +525,7 @@ $table->data[1][1] = html_print_select_groups(false, 'AR', false, 'group', $grou
$table->data[2][0] = __('Interval'); $table->data[2][0] = __('Interval');
$table->data[2][1] = html_print_extended_select_for_time('interval', 0, '', __('No change'), '0', 10, true, 'width: 150px'); $table->data[2][1] = html_print_extended_select_for_time('interval', 0, '', __('No change'), '0', 10, true, 'width: 150px', false);
$table->data[3][0] = __('OS'); $table->data[3][0] = __('OS');
$table->data[3][1] = html_print_select_from_sql( $table->data[3][1] = html_print_select_from_sql(

View File

@ -21,27 +21,42 @@ require_once 'include/functions_menu.php';
$menu_godmode = []; $menu_godmode = [];
$menu_godmode['class'] = 'godmode'; $menu_godmode['class'] = 'godmode';
if (check_acl($config['id_user'], 0, 'AR')
if (check_acl($config['id_user'], 0, 'PM')) { || check_acl($config['id_user'], 0, 'AW')
|| check_acl($config['id_user'], 0, 'RR')
|| check_acl($config['id_user'], 0, 'RW')
|| check_acl($config['id_user'], 0, 'PM')
) {
$sub = []; $sub = [];
$sub['godmode/servers/discovery&wiz=main']['text'] = __('Main'); $sub['godmode/servers/discovery&wiz=main']['text'] = __('Main');
$sub['godmode/servers/discovery&wiz=main']['id'] = 'Discovery'; $sub['godmode/servers/discovery&wiz=main']['id'] = 'Discovery';
$sub['godmode/servers/discovery&wiz=tasklist']['text'] = __('Task list'); $sub['godmode/servers/discovery&wiz=tasklist']['text'] = __('Task list');
$sub['godmode/servers/discovery&wiz=tasklist']['id'] = 'tasklist'; $sub['godmode/servers/discovery&wiz=tasklist']['id'] = 'tasklist';
$sub2 = []; if (check_acl($config['id_user'], 0, 'AW')
$sub2['godmode/servers/discovery&wiz=hd&mode=netscan']['text'] = __('Network scan'); || check_acl($config['id_user'], 0, 'PM')
enterprise_hook('hostdevices_submenu'); ) {
$sub2['godmode/servers/discovery&wiz=hd&mode=customnetscan']['text'] = __('Custom network scan'); if (check_acl($config['id_user'], 0, 'AW')) {
$sub2['godmode/servers/discovery&wiz=hd&mode=managenetscanscripts']['text'] = __('Manage scan scripts'); $sub2 = [];
$sub['godmode/servers/discovery&wiz=hd']['text'] = __('Host & devices'); $sub2['godmode/servers/discovery&wiz=hd&mode=netscan']['text'] = __('Network scan');
$sub['godmode/servers/discovery&wiz=hd']['id'] = 'hd'; enterprise_hook('hostdevices_submenu');
$sub['godmode/servers/discovery&wiz=hd']['sub2'] = $sub2; $sub2['godmode/servers/discovery&wiz=hd&mode=customnetscan']['text'] = __('Custom network scan');
}
enterprise_hook('applications_menu'); if (check_acl($config['id_user'], 0, 'PM')) {
enterprise_hook('cloud_menu'); $sub2['godmode/servers/discovery&wiz=hd&mode=managenetscanscripts']['text'] = __('Manage scan scripts');
enterprise_hook('console_task_menu'); }
$sub['godmode/servers/discovery&wiz=hd']['text'] = __('Host & devices');
$sub['godmode/servers/discovery&wiz=hd']['id'] = 'hd';
$sub['godmode/servers/discovery&wiz=hd']['sub2'] = $sub2;
}
if (check_acl($config['id_user'], 0, 'AW')) {
enterprise_hook('applications_menu');
enterprise_hook('cloud_menu');
enterprise_hook('console_task_menu');
}
// Add to menu. // Add to menu.
$menu_godmode['discovery']['text'] = __('Discovery'); $menu_godmode['discovery']['text'] = __('Discovery');
@ -92,7 +107,7 @@ if (!empty($sub)) {
} }
$sub = []; $sub = [];
if (check_acl($config['id_user'], 0, 'AW')) { if (check_acl($config['id_user'], 0, 'PM')) {
$sub['godmode/groups/group_list']['text'] = __('Manage agents groups'); $sub['godmode/groups/group_list']['text'] = __('Manage agents groups');
$sub['godmode/groups/group_list']['id'] = 'Manage agents groups'; $sub['godmode/groups/group_list']['id'] = 'Manage agents groups';
} }

View File

@ -16,10 +16,10 @@ global $config;
// Check user credentials // Check user credentials
check_login(); check_login();
if (! check_acl($config['id_user'], 0, 'RR')) { if (! check_acl($config['id_user'], 0, 'RR') || enterprise_installed() === false) {
db_pandora_audit( db_pandora_audit(
'ACL Violation', 'ACL Violation',
'Trying to access Inventory Module Management' 'Trying to access Graph container'
); );
include 'general/noaccess.php'; include 'general/noaccess.php';
return; return;

View File

@ -71,10 +71,12 @@ switch ($activeTab) {
break; break;
} }
$buttons['graph_container'] = [ if ($enterpriseEnable) {
'active' => false, $buttons['graph_container'] = [
'text' => '<a href="index.php?sec=reporting&sec2=godmode/reporting/graph_container">'.html_print_image('images/graph-container.png', true, ['title' => __('Graphs containers')]).'</a>', 'active' => false,
]; 'text' => '<a href="index.php?sec=reporting&sec2=godmode/reporting/graph_container">'.html_print_image('images/graph-container.png', true, ['title' => __('Graphs containers')]).'</a>',
];
}
$delete_graph = (bool) get_parameter('delete_graph'); $delete_graph = (bool) get_parameter('delete_graph');
$view_graph = (bool) get_parameter('view_graph'); $view_graph = (bool) get_parameter('view_graph');

View File

@ -3144,17 +3144,19 @@ if ($enterpriseEnable && defined('METACONSOLE')) {
break; break;
} }
ui_print_page_header( if ($action !== 'update' && !is_metaconsole()) {
$textReportName, ui_print_page_header(
'images/op_reporting.png', $textReportName,
false, 'images/op_reporting.png',
$helpers, false,
false, $helpers,
$buttons, false,
false, $buttons,
'', false,
60 '',
); 60
);
}
} }
if ($resultOperationDB !== null) { if ($resultOperationDB !== null) {
@ -3176,6 +3178,26 @@ if ($resultOperationDB !== null) {
__('Successfull action'), __('Successfull action'),
__('Unsuccessful action<br><br>'.$err) __('Unsuccessful action<br><br>'.$err)
); );
if ($action == 'update') {
$buttons[$activeTab]['active'] = false;
$activeTab = 'list_items';
$buttons[$activeTab]['active'] = true;
if (!is_metaconsole()) {
ui_print_page_header(
$textReportName,
'images/op_reporting.png',
false,
$helpers,
false,
$buttons,
false,
'',
60
);
}
}
} }
switch ($activeTab) { switch ($activeTab) {

View File

@ -4,7 +4,14 @@ global $config;
check_login(); check_login();
if (! check_acl($config['id_user'], 0, 'AW')) { if (! check_acl($config['id_user'], 0, 'AR')
&& ! check_acl($config['id_user'], 0, 'AW')
&& ! check_acl($config['id_user'], 0, 'AM')
&& ! check_acl($config['id_user'], 0, 'RR')
&& ! check_acl($config['id_user'], 0, 'RW')
&& ! check_acl($config['id_user'], 0, 'RM')
&& ! check_acl($config['id_user'], 0, 'PM')
) {
db_pandora_audit( db_pandora_audit(
'ACL Violation', 'ACL Violation',
'Trying to access Server Management' 'Trying to access Server Management'
@ -134,11 +141,18 @@ if ($classname_selected === null) {
$classname = basename($classpath, '.class.php'); $classname = basename($classpath, '.class.php');
$obj = new $classname(); $obj = new $classname();
$button = $obj->load();
if ($button === false) {
// No acess, skip.
continue;
}
// DiscoveryTaskList must be first button. // DiscoveryTaskList must be first button.
if ($classname == 'DiscoveryTaskList') { if ($classname == 'DiscoveryTaskList') {
array_unshift($wiz_data, $obj->load()); array_unshift($wiz_data, $button);
} else { } else {
$wiz_data[] = $obj->load(); $wiz_data[] = $button;
} }
} }

View File

@ -928,10 +928,10 @@ if (($create != '') || ($view != '')) {
$other['plugin_type'] = $plugin_meta['plugin_type']; $other['plugin_type'] = $plugin_meta['plugin_type'];
$other['macros'] = urlencode($plugin_meta['macros']); $other['macros'] = urlencode($plugin_meta['macros']);
$other['parameters'] = urlencode($plugin_meta['parameters']); $other['parameters'] = urlencode($plugin_meta['parameters']);
$other = implode('%7C', $other); $other = implode('%7E', $other);
$auth_token = json_decode($value['auth_token']); $auth_token = json_decode($value['auth_token']);
$url = $value['server_url'].'include/api.php?op=set&op2=push_plugin'.'&id='.$pluginid.'&other_mode=url_encode_separator_%7C&other='.$other."&apipass=$auth_token->api_password"."&user=$auth_token->console_user&pass=$auth_token->console_password"; $url = $value['server_url'].'include/api.php?op=set&op2=push_plugin'.'&id='.$pluginid.'&other_mode=url_encode_separator_%7E&other='.$other."&apipass=$auth_token->api_password"."&user=$auth_token->console_user&pass=$auth_token->console_password";
$file_path = realpath($plugin_meta['execute']); $file_path = realpath($plugin_meta['execute']);
$post = ''; $post = '';
if (file_exists($file_path)) { if (file_exists($file_path)) {

View File

@ -18,7 +18,7 @@ check_login();
enterprise_hook('open_meta_frame'); enterprise_hook('open_meta_frame');
if (! check_acl($config['id_user'], 0, 'PM')) { if (! check_acl($config['id_user'], 0, 'UM')) {
db_pandora_audit( db_pandora_audit(
'ACL Violation', 'ACL Violation',
'Trying to access Profile Management' 'Trying to access Profile Management'
@ -320,24 +320,29 @@ if ($id_profile || $new_profile) {
$table->data['IM'] = $row; $table->data['IM'] = $row;
$table->data[] = '<hr>'; $table->data[] = '<hr>';
$disable_option = 'javascript: return false;';
if (check_acl($config['id_user'], 0, 'PM') || users_is_admin()) {
$disable_option = '';
}
// Users // Users
$row = []; $row = [];
$row['name'] = __('Manage users'); $row['name'] = __('Manage users');
$row['input'] = html_print_checkbox('user_management', 1, $user_management, true); $row['input'] = html_print_checkbox('user_management', 1, $user_management, true, false, $disable_option);
$table->data['UM'] = $row; $table->data['UM'] = $row;
$table->data[] = '<hr>'; $table->data[] = '<hr>';
// DB // DB
$row = []; $row = [];
$row['name'] = __('Manage database'); $row['name'] = __('Manage database');
$row['input'] = html_print_checkbox('db_management', 1, $db_management, true); $row['input'] = html_print_checkbox('db_management', 1, $db_management, true, false, $disable_option);
$table->data['DM'] = $row; $table->data['DM'] = $row;
$table->data[] = '<hr>'; $table->data[] = '<hr>';
// Pandora // Pandora
$row = []; $row = [];
$row['name'] = __('%s management', get_product_name()); $row['name'] = __('%s management', get_product_name());
$row['input'] = html_print_checkbox('pandora_management', 1, $pandora_management, true); $row['input'] = html_print_checkbox('pandora_management', 1, $pandora_management, true, false, $disable_option);
$table->data['PM'] = $row; $table->data['PM'] = $row;
$table->data[] = '<hr>'; $table->data[] = '<hr>';
@ -359,3 +364,18 @@ if ($id_profile || $new_profile) {
} }
enterprise_hook('close_meta_frame'); enterprise_hook('close_meta_frame');
?>
<script type="text/javascript" language="javascript">
$(document).ready (function () {
var disable_option = '<?php echo $disable_option; ?>';
if (disable_option != '') {
var ids = ['#checkbox-db_management', '#checkbox-user_management', '#checkbox-pandora_management'];
ids.forEach(id => {
$(id).css({'cursor':'not-allowed', 'opacity':'0.5'});
});
}
});
</script>

View File

@ -362,7 +362,10 @@ foreach ($profiles as $profile) {
$data['PM'] = ($profile['pandora_management'] ? $img : ''); $data['PM'] = ($profile['pandora_management'] ? $img : '');
$table->cellclass[]['operations'] = 'action_buttons'; $table->cellclass[]['operations'] = 'action_buttons';
$data['operations'] = '<a href="index.php?sec='.$sec.'&amp;sec2=godmode/users/configure_profile&id='.$profile['id_perfil'].'&pure='.$pure.'">'.html_print_image('images/config.png', true, ['title' => __('Edit')]).'</a>'; $data['operations'] = '<a href="index.php?sec='.$sec.'&amp;sec2=godmode/users/configure_profile&id='.$profile['id_perfil'].'&pure='.$pure.'">'.html_print_image('images/config.png', true, ['title' => __('Edit')]).'</a>';
$data['operations'] .= '<a href="index.php?sec='.$sec.'&sec2=godmode/users/profile_list&delete_profile=1&id='.$profile['id_perfil'].'&pure='.$pure.'" onClick="if (!confirm(\' '.__('Are you sure?').'\')) return false;">'.html_print_image('images/cross.png', true).'</a>'; if (check_acl($config['id_user'], 0, 'PM') || users_is_admin()) {
$data['operations'] .= '<a href="index.php?sec='.$sec.'&sec2=godmode/users/profile_list&delete_profile=1&id='.$profile['id_perfil'].'&pure='.$pure.'" onClick="if (!confirm(\' '.__('Are you sure?').'\')) return false;">'.html_print_image('images/cross.png', true).'</a>';
}
array_push($table->data, $data); array_push($table->data, $data);
} }

View File

@ -420,7 +420,9 @@ else {
$u = get_user_info($key); $u = get_user_info($key);
$g = users_get_groups($key, 'AR', $u['is_admin']); $g = users_get_groups($key, 'AR', $u['is_admin']);
$result = array_intersect($g, $own_groups); $result = array_intersect($g, $own_groups);
if (!$usr['is_admin'] && !empty($result)) {
// Show users without profile too.
if (!$usr['is_admin'] && !empty($result) || (!$usr['is_admin'] && db_get_all_rows_field_filter('tusuario_perfil', 'id_usuario', $usr['id_user']) === false)) {
$info[$key] = $usr; $info[$key] = $usr;
} }

View File

@ -200,7 +200,7 @@ class DiscoveryTaskList extends Wizard
{ {
global $config; global $config;
if (! check_acl($config['id_user'], 0, 'PM')) { if (! check_acl($config['id_user'], 0, 'AW')) {
db_pandora_audit( db_pandora_audit(
'ACL Violation', 'ACL Violation',
'Trying to access recon task viewer' 'Trying to access recon task viewer'
@ -241,7 +241,7 @@ class DiscoveryTaskList extends Wizard
{ {
global $config; global $config;
if (! check_acl($config['id_user'], 0, 'PM')) { if (!$this->aclMulticheck('RR|RW|RM|PM')) {
db_pandora_audit( db_pandora_audit(
'ACL Violation', 'ACL Violation',
'Trying to access recon task viewer' 'Trying to access recon task viewer'
@ -270,7 +270,7 @@ class DiscoveryTaskList extends Wizard
{ {
global $config; global $config;
if (! check_acl($config['id_user'], 0, 'PM')) { if (! check_acl($config['id_user'], 0, 'RM')) {
db_pandora_audit( db_pandora_audit(
'ACL Violation', 'ACL Violation',
'Trying to access recon task viewer' 'Trying to access recon task viewer'
@ -313,13 +313,9 @@ class DiscoveryTaskList extends Wizard
check_login(); check_login();
if (! check_acl($config['id_user'], 0, 'PM')) { if (!$this->aclMulticheck('AR|AW|AM')) {
db_pandora_audit( // Tasklist are allowed only of agent managers.
'ACL Violation', return '';
'Trying to access recon task viewer'
);
include 'general/noaccess.php';
return false;
} }
// Get all discovery servers. // Get all discovery servers.
@ -341,7 +337,7 @@ class DiscoveryTaskList extends Wizard
// -------------------------------- // --------------------------------
// FORCE A RECON TASK // FORCE A RECON TASK
// -------------------------------- // --------------------------------
if (check_acl($config['id_user'], 0, 'PM')) { if (check_acl($config['id_user'], 0, 'AW')) {
if (isset($_GET['force'])) { if (isset($_GET['force'])) {
$id = (int) get_parameter_get('force', 0); $id = (int) get_parameter_get('force', 0);
servers_force_recon_task($id); servers_force_recon_task($id);
@ -387,8 +383,10 @@ class DiscoveryTaskList extends Wizard
// Operations. // Operations.
$table->headstyle[9] .= 'min-width: 150px; width: 150px;'; $table->headstyle[9] .= 'min-width: 150px; width: 150px;';
$table->head[0] = __('Force'); if (check_acl($config['id_user'], 0, 'AW')) {
$table->align[0] = 'left'; $table->head[0] = __('Force');
$table->align[0] = 'left';
}
$table->head[1] = __('Task name'); $table->head[1] = __('Task name');
$table->align[1] = 'left'; $table->align[1] = 'left';
@ -455,11 +453,13 @@ class DiscoveryTaskList extends Wizard
} }
if ($task['disabled'] == 0 && $server_name !== '') { if ($task['disabled'] == 0 && $server_name !== '') {
$data[0] = '<a href="'.ui_get_full_url( if (check_acl($config['id_user'], 0, 'AW')) {
'index.php?sec=gservers&sec2=godmode/servers/discovery&wiz=tasklist&server_id='.$id_server.'&force='.$task['id_rt'] $data[0] = '<a href="'.ui_get_full_url(
).'">'; 'index.php?sec=gservers&sec2=godmode/servers/discovery&wiz=tasklist&server_id='.$id_server.'&force='.$task['id_rt']
$data[0] .= html_print_image('images/target.png', true, ['title' => __('Force')]); ).'">';
$data[0] .= '</a>'; $data[0] .= html_print_image('images/target.png', true, ['title' => __('Force')]);
$data[0] .= '</a>';
}
} else if ($task['disabled'] == 2) { } else if ($task['disabled'] == 2) {
$data[0] = ui_print_help_tip( $data[0] = ui_print_help_tip(
__('This task has not been completely defined, please edit it'), __('This task has not been completely defined, please edit it'),
@ -622,18 +622,20 @@ class DiscoveryTaskList extends Wizard
&& $task['type'] != DISCOVERY_APP_ORACLE && $task['type'] != DISCOVERY_APP_ORACLE
&& $task['type'] != DISCOVERY_CLOUD_AWS_RDS && $task['type'] != DISCOVERY_CLOUD_AWS_RDS
) { ) {
$data[9] .= '<a href="#" onclick="show_map('.$task['id_rt'].',\''.$task['name'].'\')">'; if (check_acl($config['id_user'], 0, 'MR')) {
$data[9] .= html_print_image( $data[9] .= '<a href="#" onclick="show_map('.$task['id_rt'].',\''.$task['name'].'\')">';
'images/dynamic_network_icon.png', $data[9] .= html_print_image(
true 'images/dynamic_network_icon.png',
); true
$data[9] .= '</a>'; );
$data[9] .= '</a>';
}
} }
if (check_acl( if (check_acl(
$config['id_user'], $config['id_user'],
$task['id_group'], $task['id_group'],
'PM' 'AW'
) )
) { ) {
if ($ipam === true) { if ($ipam === true) {
@ -733,6 +735,16 @@ class DiscoveryTaskList extends Wizard
{ {
if ($script !== false) { if ($script !== false) {
switch ($script['type']) { switch ($script['type']) {
case DISCOVERY_SCRIPT_APP_VMWARE:
return 'wiz=app&mode=vmware&page=0';
case DISCOVERY_SCRIPT_IPAM_RECON:
return '';
case DISCOVERY_SCRIPT_IPMI_RECON:
default:
return 'wiz=hd&mode=customnetscan';
case DISCOVERY_SCRIPT_CLOUD_AWS: case DISCOVERY_SCRIPT_CLOUD_AWS:
switch ($task['type']) { switch ($task['type']) {
case DISCOVERY_CLOUD_AWS_EC2: case DISCOVERY_CLOUD_AWS_EC2:
@ -744,16 +756,6 @@ class DiscoveryTaskList extends Wizard
default: default:
return 'wiz=cloud'; return 'wiz=cloud';
} }
case DISCOVERY_SCRIPT_APP_VMWARE:
return 'wiz=app&mode=vmware&page=0';
case DISCOVERY_SCRIPT_IPAM_RECON:
return '';
case DISCOVERY_SCRIPT_IPMI_RECON:
default:
return 'wiz=hd&mode=customnetscan';
} }
} }

View File

@ -87,6 +87,7 @@ class HostDevices extends Wizard
) { ) {
$this->setBreadcrum([]); $this->setBreadcrum([]);
$this->access = 'AW';
$this->task = []; $this->task = [];
$this->msg = $msg; $this->msg = $msg;
$this->icon = $icon; $this->icon = $icon;
@ -100,6 +101,32 @@ class HostDevices extends Wizard
} }
/**
* Checks if environment is ready,
* returns array
* icon: icon to be displayed
* label: label to be displayed
*
* @return array With data.
**/
public function load()
{
global $config;
// Check access.
check_login();
if (! $this->aclMulticheck('AW|PM')) {
return false;
}
return [
'icon' => $this->icon,
'label' => $this->label,
'url' => $this->url,
];
}
/** /**
* Run wizard manager. * Run wizard manager.
* *
@ -116,37 +143,42 @@ class HostDevices extends Wizard
if ($mode === null) { if ($mode === null) {
$buttons = []; $buttons = [];
$buttons[] = [
'url' => $this->url.'&mode=netscan',
'icon' => 'images/wizard/netscan.png',
'label' => __('Net Scan'),
];
if (enterprise_installed()) { if (check_acl($config['id_user'], 0, $this->access)) {
$buttons[] = [ $buttons[] = [
'url' => $this->url.'&mode=importcsv', 'url' => $this->url.'&mode=netscan',
'icon' => ENTERPRISE_DIR.'/images/wizard/csv.png', 'icon' => 'images/wizard/netscan.png',
'label' => __('Import CSV'), 'label' => __('Net Scan'),
]; ];
if (enterprise_installed()) {
$buttons[] = [
'url' => $this->url.'&mode=importcsv',
'icon' => ENTERPRISE_DIR.'/images/wizard/csv.png',
'label' => __('Import CSV'),
];
$buttons[] = [
'url' => $this->url.'&mode=deploy',
'icon' => ENTERPRISE_DIR.'/images/wizard/deployment.png',
'label' => __('Agent deployment'),
];
}
$buttons[] = [ $buttons[] = [
'url' => $this->url.'&mode=deploy', 'url' => $this->url.'&mode=customnetscan',
'icon' => ENTERPRISE_DIR.'/images/wizard/deployment.png', 'icon' => '/images/wizard/customnetscan.png',
'label' => __('Agent deployment'), 'label' => __('Custom NetScan'),
]; ];
} }
$buttons[] = [ if (check_acl($config['id_user'], 0, 'PM')) {
'url' => $this->url.'&mode=customnetscan', $buttons[] = [
'icon' => '/images/wizard/customnetscan.png', 'url' => $this->url.'&mode=managenetscanscripts',
'label' => __('Custom NetScan'), 'icon' => '/images/wizard/managenetscanscripts.png',
]; 'label' => __('Manage NetScan scripts'),
];
$buttons[] = [ }
'url' => $this->url.'&mode=managenetscanscripts',
'icon' => '/images/wizard/managenetscanscripts.png',
'label' => __('Manage NetScan scripts'),
];
$this->prepareBreadcrum( $this->prepareBreadcrum(
[ [
@ -311,11 +343,11 @@ class HostDevices extends Wizard
) { ) {
// Default values, no data received. // Default values, no data received.
// User is accesing directly to this page. // User is accesing directly to this page.
if (users_is_admin() !== true && check_acl( if (check_acl(
$config['id_usuario'], $config['id_usuario'],
$this->task['id_group'], $this->task['id_group'],
'PM' $this->access
) !== true ) != true
) { ) {
$this->msg = __('You have no access to edit this task.'); $this->msg = __('You have no access to edit this task.');
return false; return false;
@ -487,7 +519,7 @@ class HostDevices extends Wizard
check_login(); check_login();
if (! check_acl($config['id_user'], 0, 'PM')) { if (! check_acl($config['id_user'], 0, $this->access)) {
db_pandora_audit( db_pandora_audit(
'ACL Violation', 'ACL Violation',
'Trying to access Agent Management' 'Trying to access Agent Management'
@ -529,11 +561,11 @@ class HostDevices extends Wizard
// Check ACL. If user is not able to manage target task, // Check ACL. If user is not able to manage target task,
// redirect him to main page. // redirect him to main page.
if (users_is_admin() !== true && check_acl( if (check_acl(
$config['id_usuario'], $config['id_usuario'],
$this->task['id_group'], $this->task['id_group'],
'PM' $this->access
) !== true ) != true
) { ) {
$form['form']['action'] = $this->url.'&mode=netscan&page='.($this->page - 1); $form['form']['action'] = $this->url.'&mode=netscan&page='.($this->page - 1);
} }
@ -750,7 +782,7 @@ class HostDevices extends Wizard
[ [
'name' => 'id_group', 'name' => 'id_group',
'returnAllGroup' => false, 'returnAllGroup' => false,
'privilege' => 'PM', 'privilege' => $this->access,
'type' => 'select_groups', 'type' => 'select_groups',
'selected' => $this->task['id_group'], 'selected' => $this->task['id_group'],
'return' => true, 'return' => true,

View File

@ -87,6 +87,13 @@ class Wizard
*/ */
public $msg; public $msg;
/**
* Defines access level to use this util.
*
* @var string
*/
public $access = 'AR';
/** /**
* Setter for breadcrum * Setter for breadcrum
@ -234,6 +241,42 @@ class Wizard
public function run() public function run()
{ {
ui_require_css_file('wizard'); ui_require_css_file('wizard');
// Check access.
check_login();
if (! $this->aclMulticheck()) {
return;
}
}
/**
* Check multiple acl perms.
*
* @param string $access Access in PM|AR|RR format. Optional.
*
* @return boolean Alowed or not.
*/
public function aclMulticheck($access=null)
{
global $config;
if (isset($access)) {
$perms = explode('|', $access);
} else {
$perms = explode('|', $this->access);
}
$allowed = false;
foreach ($perms as $perm) {
$allowed = $allowed || (bool) check_acl(
$config['id_user'],
0,
$perm
);
}
return $allowed;
} }
@ -247,6 +290,14 @@ class Wizard
**/ **/
public function load() public function load()
{ {
global $config;
// Check access.
check_login();
if (! $this->aclMulticheck()) {
return false;
}
return [ return [
'icon' => $this->icon, 'icon' => $this->icon,
'label' => $this->label, 'label' => $this->label,

View File

@ -1113,7 +1113,7 @@ if (check_login()) {
} }
if ($module['id_tipo_modulo'] != 25) { if ($module['id_tipo_modulo'] != 25) {
$data[6] = ui_print_module_warn_value($module['max_warning'], $module['min_warning'], $module['str_warning'], $module['max_critical'], $module['min_critical'], $module['str_critical']); $data[6] = ui_print_module_warn_value($module['max_warning'], $module['min_warning'], $module['str_warning'], $module['max_critical'], $module['min_critical'], $module['str_critical'], $module['warning_inverse'], $module['critical_inverse']);
} else { } else {
$data[6] = ''; $data[6] = '';
} }

View File

@ -65,6 +65,8 @@ class CustomNetScan extends Wizard
$this->url = ui_get_full_url( $this->url = ui_get_full_url(
'index.php?sec=gservers&sec2=godmode/servers/discovery&wiz=hd' 'index.php?sec=gservers&sec2=godmode/servers/discovery&wiz=hd'
); );
$this->access = 'AW';
$this->page = $page; $this->page = $page;
$this->breadcrum = $breadcrum; $this->breadcrum = $breadcrum;
} }
@ -77,6 +79,8 @@ class CustomNetScan extends Wizard
*/ */
public function parseNetScan() public function parseNetScan()
{ {
global $config;
if (isset($this->page) === true && $this->page === 0) { if (isset($this->page) === true && $this->page === 0) {
// Check if we're updating a task. // Check if we're updating a task.
$task_id = get_parameter('task', null); $task_id = get_parameter('task', null);
@ -145,11 +149,11 @@ class CustomNetScan extends Wizard
) { ) {
// Default values, no data received. // Default values, no data received.
// User is accesing directly to this page. // User is accesing directly to this page.
if (users_is_admin() !== true && check_acl( if (check_acl(
$config['id_usuario'], $config['id_user'],
$this->task['id_group'], $this->task['id_group'],
'PM' $this->access
) !== true ) != true
) { ) {
$this->msg = __('You have no access to edit this task.'); $this->msg = __('You have no access to edit this task.');
return false; return false;
@ -275,7 +279,7 @@ class CustomNetScan extends Wizard
{ {
global $config; global $config;
if (!check_acl($config['id_user'], 0, 'PM')) { if (!check_acl($config['id_user'], 0, $this->access)) {
db_pandora_audit( db_pandora_audit(
'ACL Violation', 'ACL Violation',
'Trying to access Custom Net Scan.' 'Trying to access Custom Net Scan.'
@ -317,11 +321,11 @@ class CustomNetScan extends Wizard
// Check ACL. If user is not able to manage target task, // Check ACL. If user is not able to manage target task,
// redirect him to main page. // redirect him to main page.
if (users_is_admin() !== true && check_acl( if (check_acl(
$config['id_usuario'], $config['id_user'],
$this->task['id_group'], $this->task['id_group'],
'PM' $this->access
) !== true ) != true
) { ) {
$form['form']['action'] = $this->url.'&mode=customnetscan&page='.($this->page - 1); $form['form']['action'] = $this->url.'&mode=customnetscan&page='.($this->page - 1);
} }
@ -496,7 +500,7 @@ class CustomNetScan extends Wizard
'arguments' => [ 'arguments' => [
'name' => 'id_group', 'name' => 'id_group',
'returnAllGroup' => false, 'returnAllGroup' => false,
'privilege' => 'PM', 'privilege' => $this->access,
'type' => 'select_groups', 'type' => 'select_groups',
'selected' => $this->task['id_group'], 'selected' => $this->task['id_group'],
'return' => true, 'return' => true,

View File

@ -65,6 +65,8 @@ class ManageNetScanScripts extends Wizard
$this->url = ui_get_full_url( $this->url = ui_get_full_url(
'index.php?sec=gservers&sec2=godmode/servers/discovery&wiz=hd' 'index.php?sec=gservers&sec2=godmode/servers/discovery&wiz=hd'
); );
$this->access = 'PM';
$this->page = $page; $this->page = $page;
$this->breadcrum = $breadcrum; $this->breadcrum = $breadcrum;
} }
@ -81,7 +83,7 @@ class ManageNetScanScripts extends Wizard
{ {
global $config; global $config;
if (check_acl($config['id_user'], 0, 'AW') === 0) { if (check_acl($config['id_user'], 0, $this->access) === 0) {
db_pandora_audit( db_pandora_audit(
'ACL Violation', 'ACL Violation',
'Trying to access Net Scan Script.' 'Trying to access Net Scan Script.'

View File

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

View File

@ -1492,7 +1492,7 @@ function api_set_new_agent($thrash1, $thrash2, $other, $thrash3)
global $config; global $config;
if (!check_acl($config['id_user'], 0, 'AW')) { if (!check_acl($config['id_user'], 0, 'AW')) {
returnError('forbidden', 'string'); returnError('forbidden', 'you havent got permissions to do this');
return; return;
} }
@ -1500,127 +1500,101 @@ function api_set_new_agent($thrash1, $thrash2, $other, $thrash3)
return; return;
} }
$alias = $other['data'][0]; $alias = io_safe_input(trim(preg_replace('/[\/\\\|%#&$]/', '', $other['data'][0])));
$ip = $other['data'][1]; $direccion_agente = io_safe_input($other['data'][1]);
$idParent = $other['data'][2]; $nombre_agente = hash('sha256', $direccion_agente.'|'.$direccion_agente.'|'.time().'|'.sprintf('%04d', rand(0, 10000)));
$idGroup = $other['data'][3]; $id_parent = (int) $other['data'][2];
$cascadeProtection = $other['data'][4]; $grupo = (int) $other['data'][3];
$cascadeProtectionModule = $other['data'][5]; $cascade_protection = (int) $other['data'][4];
$intervalSeconds = $other['data'][6]; $cascade_protection_module = (int) $other['data'][5];
$idOS = $other['data'][7]; $intervalo = (string) $other['data'][6];
// $idServer = $other['data'][7]; $id_os = (int) $other['data'][7];
$nameServer = $other['data'][8]; $server_name = (string) $other['data'][8];
$customId = $other['data'][9]; $custom_id = (string) $other['data'][9];
$learningMode = $other['data'][10]; $modo = (int) $other['data'][10];
$disabled = $other['data'][11]; $disabled = (int) $other['data'][11];
$description = $other['data'][12]; $comentarios = (string) $other['data'][12];
$alias_as_name = $other['data'][13]; $alias_as_name = (int) $other['data'][13];
$update_module_count = (int) $config['metaconsole_agent_cache'] == 1;
if ($alias_as_name && !empty($alias)) { if ($cascade_protection == 1) {
$name = $alias; if (($id_parent != 0) && (db_get_value_sql(
} else {
$name = hash('sha256', $alias.'|'.$direccion_agente.'|'.time().'|'.sprintf('%04d', rand(0, 10000)));
if (empty($alias)) {
$alias = $name;
}
}
if ($cascadeProtection == 1) {
if (($idParent != 0) && (db_get_value_sql(
'SELECT id_agente_modulo 'SELECT id_agente_modulo
FROM tagente_modulo FROM tagente_modulo
WHERE id_agente = '.$idParent.' AND id_agente_modulo = '.$cascadeProtectionModule WHERE id_agente = '.$id_parent.' AND id_agente_modulo = '.$cascade_protection_module
) === false) ) === false)
) { ) {
returnError('parent_agent_not_exist', 'Is not a parent module to do cascade protection.'); returnError('parent_agent_not_exist', 'Is not a parent module to do cascade protection.');
return;
} }
} else { } else {
$cascadeProtectionModule = 0; $cascadeProtectionModule = 0;
} }
switch ($config['dbtype']) { $server_name = db_get_value_sql('SELECT name FROM tserver WHERE BINARY name LIKE "'.$server_name.'"');
case 'mysql':
$sql1 = 'SELECT name
FROM tserver WHERE BINARY name LIKE "'.$nameServer.'"';
break;
case 'postgresql': // Check if agent exists (BUG WC-50518-2).
case 'oracle': if ($alias == '' && $alias_as_name === 0) {
$sql1 = 'SELECT name returnError('alias_not_specified', 'No agent alias specified');
FROM tserver WHERE name LIKE \''.$nameServer.'\''; } else if (agents_get_agent_id($name)) {
break;
}
$nameServer = db_get_value_sql($sql1);
// Check ACL group
if (!check_acl($config['id_user'], $idGroup, 'AW')) {
returnError('forbidden', 'string');
return;
}
// Check selected parent
if ($idParent != 0) {
$parentCheck = agents_check_access_agent($idParent);
if ($parentCheck === null) {
returnError('parent_agent_not_exist', __('The agent parent don`t exist.'));
return;
}
if ($parentCheck === false) {
returnError('parent_agent_forbidden', __('The user cannot access to parent agent.'));
return;
}
}
if (agents_get_agent_id($name)) {
returnError('agent_name_exist', 'The name of agent yet exist in DB.'); returnError('agent_name_exist', 'The name of agent yet exist in DB.');
} else if (db_get_value_sql( } else if (db_get_value_sql('SELECT id_grupo FROM tgrupo WHERE id_grupo = '.$grupo) === false) {
'SELECT id_grupo
FROM tgrupo
WHERE id_grupo = '.$idGroup
) === false
) {
returnError('id_grupo_not_exist', 'The group don`t exist.'); returnError('id_grupo_not_exist', 'The group don`t exist.');
} else if (db_get_value_sql( } else if (db_get_value_sql('SELECT id_os FROM tconfig_os WHERE id_os = '.$id_os) === false) {
'SELECT id_os
FROM tconfig_os
WHERE id_os = '.$idOS
) === false
) {
returnError('id_os_not_exist', 'The OS don`t exist.'); returnError('id_os_not_exist', 'The OS don`t exist.');
} else if (db_get_value_sql($sql1) === false) { } else if ($server_name === false) {
returnError('server_not_exist', 'The '.get_product_name().' Server don`t exist.'); returnError('server_not_exist', 'The '.get_product_name().' Server don`t exist.');
} else { } else {
$idAgente = db_process_sql_insert( if ($alias_as_name === 1) {
'tagente', $exists_alias = db_get_row_sql('SELECT nombre FROM tagente WHERE nombre = "'.$alias.'"');
[ $nombre_agente = $alias;
'nombre' => $name,
'alias' => $alias,
'direccion' => $ip,
'id_grupo' => $idGroup,
'intervalo' => $intervalSeconds,
'comentarios' => $description,
'modo' => $learningMode,
'id_os' => $idOS,
'disabled' => $disabled,
'cascade_protection' => $cascadeProtection,
'cascade_protection_module' => $cascadeProtectionModule,
'server_name' => $nameServer,
'id_parent' => $idParent,
'custom_id' => $customId,
]
);
if (!empty($idAgente) && !empty($ip)) {
// register ip for this agent in 'taddress'
agents_add_address($idAgente, $ip);
} }
if ($idGroup && !empty($idAgente)) { if ($direccion_agente != '') {
$exists_ip = db_get_row_sql('SELECT direccion FROM tagente WHERE direccion = "'.$direccion_agente.'"');
}
if (!$exists_alias && !$exists_ip) {
$id_agente = db_process_sql_insert(
'tagente',
[
'nombre' => $nombre_agente,
'alias' => $alias,
'alias_as_name' => $alias_as_name,
'direccion' => $direccion_agente,
'id_grupo' => $grupo,
'intervalo' => $intervalo,
'comentarios' => $comentarios,
'modo' => $modo,
'id_os' => $id_os,
'disabled' => $disabled,
'cascade_protection' => $cascade_protection,
'cascade_protection_module' => $cascade_protection_module,
'server_name' => $server_name,
'id_parent' => $id_parent,
'custom_id' => $custom_id,
'os_version' => '',
'agent_version' => '',
'timezone_offset' => 0,
'icon_path' => '',
'url_address' => '',
'update_module_count' => $update_module_count,
]
);
enterprise_hook('update_agent', [$id_agente]);
} else {
$id_agente = false;
}
if ($id_agente !== false) {
// Create address for this agent in taddress.
if ($direccion_agente != '') {
agents_add_address($id_agente, $direccion_agente);
}
$tpolicy_group_old = db_get_all_rows_sql( $tpolicy_group_old = db_get_all_rows_sql(
'SELECT id_policy FROM tpolicy_groups 'SELECT id_policy FROM tpolicy_groups
WHERE id_group = '.$idGroup WHERE id_group = '.$grupo
); );
if ($tpolicy_group_old) { if ($tpolicy_group_old) {
@ -1629,18 +1603,54 @@ function api_set_new_agent($thrash1, $thrash2, $other, $thrash3)
'tpolicy_agents', 'tpolicy_agents',
[ [
'id_policy' => $old_group['id_policy'], 'id_policy' => $old_group['id_policy'],
'id_agent' => $idAgente, 'id_agent' => $id_agente,
] ]
); );
} }
} }
$info = '{"Name":"'.$nombre_agente.'",
"IP":"'.$direccion_agente.'",
"Group":"'.$grupo.'",
"Interval":"'.$intervalo.'",
"Comments":"'.$comentarios.'",
"Mode":"'.$modo.'",
"ID_parent:":"'.$id_parent.'",
"Server":"'.$server_name.'",
"ID os":"'.$id_os.'",
"Disabled":"'.$disabled.'",
"Custom ID":"'.$custom_id.'",
"Cascade protection":"'.$cascade_protection.'",
"Cascade protection module":"'.$cascade_protection_module.'"}';
$unsafe_alias = io_safe_output($alias);
db_pandora_audit(
'Agent management',
'Created agent '.$unsafe_alias,
false,
true,
$info
);
} else {
$id_agente = 0;
if ($exists_alias) {
$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');
} else {
$agent_creation_error = __('Could not be created for unknown reason');
}
returnError('generic error', $agent_creation_error);
return;
} }
returnData( returnData(
'string', 'string',
[ [
'type' => 'string', 'type' => 'string',
'data' => $idAgente, 'data' => $id_agente,
] ]
); );
} }
@ -6215,9 +6225,8 @@ function api_set_planned_downtimes_created($id, $thrash1, $other, $thrash3)
return; return;
} }
$date_from = strtotime(html_entity_decode($other['data'][1])); $date_from = strtotime(html_entity_decode($other['data'][1].' '.$other['data'][11]));
$date_to = strtotime(html_entity_decode($other['data'][2])); $date_to = strtotime(html_entity_decode($other['data'][2].' '.$other['data'][12]));
$values = []; $values = [];
$values['name'] = $id; $values['name'] = $id;
$values = [ $values = [

View File

@ -4615,7 +4615,7 @@ function events_page_comments($event, $ajax=false)
foreach ($comm as $c) { foreach ($comm as $c) {
$data[0] = '<b>'.$c['action'].' by '.$c['id_user'].'</b>'; $data[0] = '<b>'.$c['action'].' by '.$c['id_user'].'</b>';
$data[0] .= '<br><br><i>'.date($config['date_format'], $c['utimestamp']).'</i>'; $data[0] .= '<br><br><i>'.date($config['date_format'], $c['utimestamp']).'</i>';
$data[1] = $c['comment']; $data[1] = '<p style="word-break: break-word;">'.$c['comment'].'</p>';
$table_comments->data[] = $data; $table_comments->data[] = $data;
} }
} }

View File

@ -2327,7 +2327,13 @@ function migrate_older_open_maps($id)
$new_map_filter = []; $new_map_filter = [];
$new_map_filter['dont_show_subgroups'] = $old_networkmap['dont_show_subgroups']; $new_map_filter['dont_show_subgroups'] = $old_networkmap['dont_show_subgroups'];
$new_map_filter['node_radius'] = 40; $new_map_filter['node_radius'] = 40;
$new_map_filter['id_migrate_map'] = $id; $new_map_filter['x_offs'] = 0;
$new_map_filter['y_offs'] = 0;
$new_map_filter['z_dash'] = '0.5';
$new_map_filter['node_sep'] = '0.1';
$new_map_filter['rank_sep'] = 1;
$new_map_filter['mindist'] = 1;
$new_map_filter['kval'] = '0.1';
$map_values['filter'] = json_encode($new_map_filter); $map_values['filter'] = json_encode($new_map_filter);
$map_values['description'] = 'Mapa open migrado'; $map_values['description'] = 'Mapa open migrado';
@ -2340,11 +2346,7 @@ function migrate_older_open_maps($id)
$map_values['source_period'] = 60; $map_values['source_period'] = 60;
$map_values['source'] = 0; $map_values['source'] = 0;
$map_values['source_data'] = $old_networkmap['id_group']; $map_values['source_data'] = $old_networkmap['id_group'];
if ($old_networkmap['type'] == 'radial_dinamic') { $map_values['generation_method'] = 3;
$map_values['generation_method'] = 6;
} else {
$map_values['generation_method'] = 4;
}
$map_values['generated'] = 0; $map_values['generated'] = 0;

View File

@ -796,6 +796,11 @@ function planned_downtimes_created($values)
'return' => false, 'return' => false,
'message' => __('Not created. Error inserting data').'. '.__('There is no group with such id'), 'message' => __('Not created. Error inserting data').'. '.__('There is no group with such id'),
]; ];
} else if (!$values['date_from'] || !$values['date_to']) {
return [
'return' => false,
'message' => __('Not created. Error inserting data').'. '.__('Date is wrong formatted'),
];
} else { } else {
if (trim(io_safe_output($values['name'])) != '') { if (trim(io_safe_output($values['name'])) != '') {
if (!$check) { if (!$check) {

View File

@ -4191,6 +4191,19 @@ function reporting_sql_graph(
$return['description'] = $content['description']; $return['description'] = $content['description'];
$return['date'] = reporting_get_date_text(); $return['date'] = reporting_get_date_text();
$module_source = db_get_all_rows_sql(
'SELECT id_agent_module
FROM tgraph_source
WHERE id_graph = '.$content['id_gs']
);
if (isset($module_source) && is_array($module_source)) {
$modules = [];
foreach ($module_source as $key => $value) {
$modules[$key] = $value['id_agent_module'];
}
}
switch ($type) { switch ($type) {
case 'dinamic': case 'dinamic':
case 'static': case 'static':
@ -4207,6 +4220,16 @@ function reporting_sql_graph(
break; break;
case 'data': case 'data':
$data = [];
foreach ($modules as $key => $value) {
$data[$value] = modules_get_agentmodule_data(
$value,
$content['period'],
$report['datetime']
);
}
$return['chart'] = $data;
break; break;
} }
@ -4407,6 +4430,7 @@ function reporting_netflow(
switch ($type) { switch ($type) {
case 'dinamic': case 'dinamic':
case 'static': case 'static':
case 'data':
$return['chart'] = netflow_draw_item( $return['chart'] = netflow_draw_item(
($report['datetime'] - $content['period']), ($report['datetime'] - $content['period']),
$report['datetime'], $report['datetime'],
@ -4880,22 +4904,23 @@ function reporting_value($report, $content, $type, $pdf=false)
if ($content['visual_format'] != 2) { if ($content['visual_format'] != 2) {
$time_begin = db_get_row_sql('select utimestamp from tagente_datos where id_agente_modulo ='.$content['id_agent_module'], true); $time_begin = db_get_row_sql('select utimestamp from tagente_datos where id_agente_modulo ='.$content['id_agent_module'], true);
for ($i = $report['datetime']; $i > ($report['datetime'] - $content['period']); $i -= $content['lapse']) {
for ($i = ($report['datetime'] - $content['period']); $i < $report['datetime']; $i += $content['lapse']) {
$row = []; $row = [];
$row[__('Lapse')] = date('Y-m-d H:i:s', ($i - $content['lapse'] + 1)).' to '.date('Y-m-d H:i:s', $i); $row[__('Lapse')] = date('Y-m-d H:i:s', ($i + 1)).' to '.date('Y-m-d H:i:s', (($i + $content['lapse']) ));
if ($i > $time_begin['utimestamp']) { if ($i > $time_begin['utimestamp']) {
switch ($type) { switch ($type) {
case 'max': case 'max':
$row[__('Maximun')] = format_for_graph(reporting_get_agentmodule_data_max($content['id_agent_module'], $content['lapse'], $i), $config['graph_precision']).' '.$unit; $row[__('Maximun')] = format_for_graph(reporting_get_agentmodule_data_max($content['id_agent_module'], $content['lapse'], ($i + $content['lapse'])), $config['graph_precision']).' '.$unit;
break; break;
case 'min': case 'min':
$row[__('Maximun')] = format_for_graph(reporting_get_agentmodule_data_min($content['id_agent_module'], $content['lapse'], $i), $config['graph_precision']).' '.$unit; $row[__('Maximun')] = format_for_graph(reporting_get_agentmodule_data_min($content['id_agent_module'], $content['lapse'], ($i + $content['lapse'])), $config['graph_precision']).' '.$unit;
break; break;
case 'avg': case 'avg':
$row[__('Maximun')] = format_for_graph(reporting_get_agentmodule_data_average($content['id_agent_module'], $content['lapse'], $i), $config['graph_precision']).' '.$unit; $row[__('Maximun')] = format_for_graph(reporting_get_agentmodule_data_average($content['id_agent_module'], $content['lapse'], ($i + $content['lapse'])), $config['graph_precision']).' '.$unit;
break; break;
} }
} else { } else {
@ -7561,8 +7586,35 @@ function reporting_custom_graph(
$content['name'] = __('Simple graph'); $content['name'] = __('Simple graph');
} }
$module_source = db_get_all_rows_sql(
'SELECT id_agent_module
FROM tgraph_source
WHERE id_graph = '.$content['id_gs']
);
if (isset($module_source) && is_array($module_source)) {
$modules = [];
foreach ($module_source as $key => $value) {
$modules[$key] = $value['id_agent_module'];
}
}
$agent_description = agents_get_description($id_agent);
$agent_group = agents_get_agent_group($id_agent);
$agent_address = agents_get_address($id_agent);
$agent_alias = agents_get_alias($id_agent);
$module_name = modules_get_agentmodule_name(
$id_agent_module
);
$module_description = modules_get_agentmodule_descripcion(
$id_agent_module
);
$return['title'] = $content['name']; $return['title'] = $content['name'];
$return['subtitle'] = io_safe_output($graph['name']); $return['subtitle'] = io_safe_output($graph['name']);
$return['agent_name'] = $agent_alias;
$return['module_name'] = $module_name;
$return['description'] = $content['description']; $return['description'] = $content['description'];
$return['date'] = reporting_get_date_text( $return['date'] = reporting_get_date_text(
$report, $report,
@ -7606,6 +7658,19 @@ function reporting_custom_graph(
); );
break; break;
case 'data':
$data = [];
foreach ($modules as $key => $value) {
$data[$value] = modules_get_agentmodule_data(
$value,
$content['period'],
$report['datetime']
);
}
$return['chart'] = $data;
break;
} }
if ($type_report == 'custom_graph') { if ($type_report == 'custom_graph') {

View File

@ -788,13 +788,15 @@ function reports_get_report_types($template=false, $not_editor=false)
'name' => __('Exception'), 'name' => __('Exception'),
]; ];
if ($config['metaconsole'] != 1) { if ($config['metaconsole'] != 1) {
$types['agent_module'] = [ if (!$template) {
'optgroup' => __('Grouped'), $types['agent_module'] = [
'name' => __('Agents/Modules'), 'optgroup' => __('Grouped'),
]; 'name' => __('Agents/Modules'),
];
}
} }
// Only pandora managers have access to the whole database // Only pandora managers have access to the whole database.
if (check_acl($config['id_user'], 0, 'PM')) { if (check_acl($config['id_user'], 0, 'PM')) {
$types['sql'] = [ $types['sql'] = [
'optgroup' => __('Grouped'), 'optgroup' => __('Grouped'),

View File

@ -39,7 +39,7 @@ if (isset($config['homedir'])) {
/** /**
* Transform bbcode to HTML. * Transform bbcode to HTML and truncate log.
* *
* @param string $text Text. * @param string $text Text.
* @param array $allowed_tags Allowed_tags. * @param array $allowed_tags Allowed_tags.
@ -48,16 +48,22 @@ if (isset($config['homedir'])) {
*/ */
function ui_bbcode_to_html($text, $allowed_tags=['[url]']) function ui_bbcode_to_html($text, $allowed_tags=['[url]'])
{ {
if (array_search('[url]', $allowed_tags) !== false) { if (array_search('[url]', $allowed_tags) !== false || a) {
// If link hasn't http, add it.
if (preg_match('/https?:\/\//', $text)) {
$html_bbcode = '<a target="_blank" rel="noopener noreferrer" href="$1">$2</a>';
} else {
$html_bbcode = '<a target="_blank" rel="noopener noreferrer" href="http://$1">$2</a>';
}
// Replace bbcode format [url=www.example.org] String [/url] with or without http and slashes // Replace bbcode format [url=www.example.org] String [/url] with or without http and slashes
$return = preg_replace('/\[url(?|](((?:https?:\/\/)?[^[]+))|(?:=[\'"]?((?:https?:\/\/)?[^]]+?)[\'"]?)](.+?))\[\/url]/', $html_bbcode, $text); preg_match('/\[url(?|](((?:https?:\/\/)?[^[]+))|(?:=[\'"]?((?:https?:\/\/)?[^]]+?)[\'"]?)](.+?))\[\/url]/', $text, $matches);
if ($matches) {
$url = $matches[1];
// Truncate text
$t_text = ui_print_truncate_text($matches[2]);
// If link hasn't http, add it.
if (preg_match('/https?:\/\//', $text)) {
$return = '<a target="_blank" rel="noopener noreferrer" href="'.$matches[1].'">'.$t_text.'</a>';
} else {
$return = '<a target="_blank" rel="noopener noreferrer" href="http://'.$matches[1].'">'.$t_text.'</a>';
}
} else {
$return = ui_print_truncate_text($text);
}
} }
return $return; return $return;
@ -2521,9 +2527,22 @@ function ui_print_module_warn_value(
$str_warning, $str_warning,
$max_critical, $max_critical,
$min_critical, $min_critical,
$str_critical $str_critical,
$warning_inverse=0,
$critical_inverse=0
) { ) {
$data = "<span title='".__('Warning').': '.__('Max').$max_warning.'/'.__('Min').$min_warning.' - '.__('Critical').': '.__('Max').$max_critical.'/'.__('Min').$min_critical."'>"; $war_inv = '';
$crit_inv = '';
if ($warning_inverse == 1) {
$war_inv = ' (inv)';
}
if ($critical_inverse == 1) {
$crit_inv = ' (inv)';
}
$data = "<span title='".__('Warning').': '.__('Max').$max_warning.'/'.__('Min').$min_warning.$war_inv.' - '.__('Critical').': '.__('Max').$max_critical.'/'.__('Min').$min_critical.$crit_inv."'>";
if ($max_warning != $min_warning) { if ($max_warning != $min_warning) {
$data .= format_for_graph($max_warning).'/'.format_for_graph($min_warning); $data .= format_for_graph($max_warning).'/'.format_for_graph($min_warning);
@ -3191,14 +3210,18 @@ function ui_print_datatable(array $parameters)
$.fn.dataTable.ext.errMode = "none"; $.fn.dataTable.ext.errMode = "none";
$.fn.dataTable.ext.classes.sPageButton = "'.$pagination_class.'"; $.fn.dataTable.ext.classes.sPageButton = "'.$pagination_class.'";
dt_'.$table_id.' = $("#'.$table_id.'").DataTable({ dt_'.$table_id.' = $("#'.$table_id.'").DataTable({
'; drawCallback: function(settings) {';
if (isset($parameters['drawCallback'])) { if (isset($parameters['drawCallback'])) {
$js .= 'drawCallback: function(settings) { $js .= $parameters['drawCallback'];
'.$parameters['drawCallback'].'
},';
} }
$js .= ' $js .= '
if (dt_'.$table_id.'.page.info().pages > 1) {
$("#'.$table_id.'_wrapper > .dataTables_paginate.paging_simple_numbers").show()
} else {
$("#'.$table_id.'_wrapper > .dataTables_paginate.paging_simple_numbers").hide()
}
},
processing: true, processing: true,
serverSide: true, serverSide: true,
paging: true, paging: true,
@ -3303,6 +3326,7 @@ function ui_print_datatable(array $parameters)
dt_'.$table_id.'.draw().page(0) dt_'.$table_id.'.draw().page(0)
}); });
}); });
</script>'; </script>';
// Order. // Order.
@ -5650,3 +5674,62 @@ function ui_print_breadcrums($tab_name)
return $section; return $section;
} }
/**
* Show last comment
*
* @param array $comments array with comments
*
* @return string HTML string with the last comment of the events.
*/
function ui_print_comments($comments)
{
global $config;
$comments = explode('<br>', $comments);
$comments = str_replace(["\n", '&#x0a;'], '<br>', $comments);
if (is_array($comments)) {
foreach ($comments as $comm) {
if (empty($comm)) {
continue;
}
$comments_array[] = json_decode(io_safe_output($comm), true);
}
}
foreach ($comments_array as $comm) {
// Show the comments more recent first.
if (is_array($comm)) {
$last_comment[] = array_reverse($comm);
}
}
// Only show the last comment. If commment its too long,the comment will short with ...
// If $config['prominent_time'] is timestamp the date show Month, day, hour and minutes.
// Else show comments hours ago
if ($last_comment[0][0]['action'] != 'Added comment') {
$last_comment[0][0]['comment'] = $last_comment[0][0]['action'];
}
$short_comment = substr($last_comment[0][0]['comment'], 0, '80px');
if ($config['prominent_time'] == 'timestamp') {
$comentario = '<i>'.date($config['date_format'], $last_comment[0][0]['utimestamp']).'&nbsp;('.$last_comment[0][0]['id_user'].'):&nbsp;'.$last_comment[0][0]['comment'].'';
if (strlen($comentario) > '200px') {
$comentario = '<i>'.date($config['date_format'], $last_comment[0][0]['utimestamp']).'&nbsp;('.$last_comment[0][0]['id_user'].'):&nbsp;'.$short_comment.'...';
}
} else {
$rest_time = (time() - $last_comment[0][0]['utimestamp']);
$time_last = (($rest_time / 60) / 60);
$comentario = '<i>'.number_format($time_last, 0).'&nbsp; Hours &nbsp;('.$last_comment[0][0]['id_user'].'):&nbsp;'.$last_comment[0][0]['comment'].'';
if (strlen($comentario) > '200px') {
$comentario = '<i>'.number_format($time_last, 0).'&nbsp; Hours &nbsp;('.$last_comment[0][0]['id_user'].'):&nbsp;'.$short_comment.'...';
}
}
return io_safe_output($comentario);
}

View File

@ -172,7 +172,6 @@ function pandoraFlotPieCustom(
show: true, show: true,
radius: 5 / 8, radius: 5 / 8,
formatter: function(label, series) { formatter: function(label, series) {
console.log(series);
return ( return (
'<div style="font-size:' + '<div style="font-size:' +
font_size + font_size +
@ -783,9 +782,7 @@ function pandoraFlotSlicebar(
graph_id, graph_id,
values, values,
datacolor, datacolor,
labels,
legend, legend,
acumulate_data,
intervaltick, intervaltick,
font, font,
font_size, font_size,
@ -794,12 +791,11 @@ function pandoraFlotSlicebar(
id_agent, id_agent,
full_legend, full_legend,
not_interactive, not_interactive,
show_date show_date,
datelimit
) { ) {
values = values.split(separator2); values = values.split(separator2);
labels = labels.split(separator);
legend = legend.split(separator); legend = legend.split(separator);
acumulate_data = acumulate_data.split(separator);
datacolor = datacolor.split(separator); datacolor = datacolor.split(separator);
if (full_legend != false) { if (full_legend != false) {
@ -822,9 +818,7 @@ function pandoraFlotSlicebar(
var serie = values[i].split(separator); var serie = values[i].split(separator);
var aux = new Array(); var aux = new Array();
$.each(serie, function(i, v) { aux.push([parseInt(serie[0]), 0]);
aux.push([v, i]);
});
datas.push({ datas.push({
data: aux, data: aux,
@ -902,18 +896,16 @@ function pandoraFlotSlicebar(
} }
$("#extra_" + graph_id).text(from + "-" + to); $("#extra_" + graph_id).text(from + "-" + to);
var extra_height = parseInt(
$("#extra_" + graph_id)
.css("height")
.split("px")[0]
);
var extra_width = parseInt( var extra_width = parseInt(
$("#extra_" + graph_id) $("#extra_" + graph_id)
.css("width") .css("width")
.split("px")[0] .split("px")[0]
); );
$("#extra_" + graph_id).css("left", pos.pageX - extra_width / 4 + "px");
//$('#extra_'+graph_id).css('top',plot.offset().top-extra_height-5+'px'); $("#extra_" + graph_id).css(
"left",
parseInt(pos.pageX - extra_width - 200) + "px"
);
$("#extra_" + graph_id).show(); $("#extra_" + graph_id).show();
} }
}); });
@ -992,13 +984,33 @@ function pandoraFlotSlicebar(
// Format functions // Format functions
function xFormatter(v, axis) { function xFormatter(v, axis) {
v = new Date(1000 * v); d = new Date(1000 * (v + datelimit));
date_format = var monthNames = [
(v.getHours() < 10 ? "0" : "") + "Jan",
v.getHours() + "Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"
];
var date_format =
(d.getDate() < 10 ? "0" : "") +
d.getDate() +
" " +
monthNames[d.getMonth()] +
"<br>" +
(d.getHours() < 10 ? "0" : "") +
d.getHours() +
":" + ":" +
(v.getMinutes() < 10 ? "0" : "") + (d.getMinutes() < 10 ? "0" : "") +
v.getMinutes(); d.getMinutes();
return date_format; return date_format;
} }
} }

View File

@ -786,6 +786,8 @@ function flot_slicesbar_graph(
// Get a unique identifier to graph // Get a unique identifier to graph
$graph_id = uniqid('graph_'); $graph_id = uniqid('graph_');
$height = ((int) $height + 15);
// Set some containers to legend, graph, timestamp tooltip, etc. // Set some containers to legend, graph, timestamp tooltip, etc.
if ($stat_win) { if ($stat_win) {
$return = "<div id='$graph_id' class='noresizevc graph $adapt_key' style='width: ".$width.'%; height: '.$height."px; display: inline-block;'></div>"; $return = "<div id='$graph_id' class='noresizevc graph $adapt_key' style='width: ".$width.'%; height: '.$height."px; display: inline-block;'></div>";
@ -804,8 +806,6 @@ function flot_slicesbar_graph(
$separator2 = ':,:,,,:,:'; $separator2 = ':,:,,,:,:';
// Transform data from our format to library format // Transform data from our format to library format
$labels = [];
$a = [];
$vars = []; $vars = [];
$datacolor = []; $datacolor = [];
@ -819,12 +819,12 @@ function flot_slicesbar_graph(
$fontsize = $config['font_size']; $fontsize = $config['font_size'];
$fontpath = $config['fontpath']; $fontpath = $config['fontpath'];
$extra_height = 15; $extra_height = 40;
if (defined('METACONSOLE')) { if (defined('METACONSOLE')) {
$extra_height = 20; $extra_height = 50;
} }
$return .= "<div id='extra_$graph_id' style='font-size: ".$fontsize.'pt; display:none; position:absolute; overflow: auto; height: '.$extra_height."px; background:#fff; padding: 2px 2px 2px 2px; border: solid #000 1px;'></div>"; $return .= '<div id="extra_'.$graph_id.'" class="slicebar-box-hover-styles" style="display:none; font-size:'.$fontsize.'"></div>';
$maxticks = (int) 20; $maxticks = (int) 20;
@ -842,11 +842,7 @@ function flot_slicesbar_graph(
$intervaltick = (int) $intervaltick; $intervaltick = (int) $intervaltick;
$acumulate = 0;
$c = 0;
$acumulate_data = [];
foreach ($graph_data as $label => $values) { foreach ($graph_data as $label => $values) {
$labels[] = $label;
$i--; $i--;
foreach ($values as $key => $value) { foreach ($values as $key => $value) {
@ -857,19 +853,10 @@ function flot_slicesbar_graph(
} }
$data[$jsvar][] = $value; $data[$jsvar][] = $value;
$acumulate_data[$c] = $acumulate;
$acumulate += $value;
$c++;
if ($value > $max) {
$max = $value;
}
} }
} }
// Store serialized data to use it from javascript // Store serialized data to use it from javascript.
$labels = implode($separator, $labels);
$datacolor = implode($separator, $datacolor); $datacolor = implode($separator, $datacolor);
if (is_array($legend)) { if (is_array($legend)) {
$legend = io_safe_output(implode($separator, $legend)); $legend = io_safe_output(implode($separator, $legend));
@ -881,19 +868,11 @@ function flot_slicesbar_graph(
$full_legend_date = false; $full_legend_date = false;
} }
$acumulate_data = io_safe_output(implode($separator, $acumulate_data));
// Store data series in javascript format
$jsvars = '';
$jsseries = [];
$date = get_system_time(); $date = get_system_time();
$datelimit = (($date - $period) * 1000); $datelimit = (($date - $period));
$i = 0; $i = 0;
$values2 = []; $values2 = [];
foreach ($data as $jsvar => $values) { foreach ($data as $jsvar => $values) {
$values2[] = implode($separator, $values); $values2[] = implode($separator, $values);
$i ++; $i ++;
@ -901,10 +880,10 @@ function flot_slicesbar_graph(
$values = implode($separator2, $values2); $values = implode($separator2, $values2);
// Javascript code // Javascript code.
$return .= "<script type='text/javascript'>"; $return .= "<script type='text/javascript'>";
$return .= "//<![CDATA[\n"; $return .= "//<![CDATA[\n";
$return .= "pandoraFlotSlicebar('$graph_id','$values','$datacolor','$labels','$legend','$acumulate_data',$intervaltick,'$fontpath',$fontsize,'$separator','$separator2',$id_agent,'$full_legend_date',$not_interactive, '$show')"; $return .= "pandoraFlotSlicebar('$graph_id','$values','$datacolor','$legend',$intervaltick,'$fontpath',$fontsize,'$separator','$separator2',$id_agent,'$full_legend_date',$not_interactive, '$show', $datelimit)";
$return .= "\n//]]>"; $return .= "\n//]]>";
$return .= '</script>'; $return .= '</script>';

View File

@ -63,6 +63,20 @@ function show_event_dialog(event, dialog_page, result) {
height: 600 height: 600
}) })
.show(); .show();
$.post({
url: "ajax.php",
data: {
page: "include/ajax/events",
get_comments: 1,
event: event,
filter: values
},
dataType: "html",
success: function(data) {
$("#extended_event_comments_page").empty();
$("#extended_event_comments_page").html(data);
}
});
$("#refrcounter").countdown("pause"); $("#refrcounter").countdown("pause");
$("div.vc-countdown").countdown("pause"); $("div.vc-countdown").countdown("pause");

View File

@ -261,6 +261,7 @@ div.login_button_saml input:hover {
.login_back input { .login_back input {
background-image: url("../../images/back_login.png"); background-image: url("../../images/back_login.png");
background-position: left 5% center; background-position: left 5% center;
background-repeat: no-repeat;
} }
.login_back input:hover { .login_back input:hover {

View File

@ -5888,3 +5888,18 @@ table.table_modal_alternate tr td:first-child {
.fullwidth { .fullwidth {
width: 100%; width: 100%;
} }
.slicebar-box-hover-styles {
position: absolute;
background-color: #fff;
width: 80px;
height: 20px;
text-align: center;
font-family: arial, sans-serif, verdana;
padding: 3px;
border: 1px solid black;
}
.flot-text {
width: 101%;
}

View File

@ -0,0 +1,10 @@
/*
* Wux style
*/
.wux_execution_result_transaction {
width: auto;
height: auto;
float: right;
margin-right: 200px;
}

View File

@ -872,12 +872,6 @@ if (! isset($config['id_user'])) {
$loginhash_data = get_parameter('loginhash_data', ''); $loginhash_data = get_parameter('loginhash_data', '');
$loginhash_user = str_rot13(get_parameter('loginhash_user', '')); $loginhash_user = str_rot13(get_parameter('loginhash_user', ''));
$iduser = $_SESSION['id_usuario']; $iduser = $_SESSION['id_usuario'];
/*
* Check why is not available.
* logoff_db ($iduser, $_SERVER["REMOTE_ADDR"]);
*/
unset($_SESSION['id_usuario']); unset($_SESSION['id_usuario']);
unset($iduser); unset($iduser);
@ -913,7 +907,6 @@ if (! isset($config['id_user'])) {
$_POST = []; $_POST = [];
$config['auth_error'] = __("User doesn\'t exist."); $config['auth_error'] = __("User doesn\'t exist.");
$iduser = $_SESSION['id_usuario']; $iduser = $_SESSION['id_usuario'];
logoff_db($iduser, $_SERVER['REMOTE_ADDR']);
unset($_SESSION['id_usuario']); unset($_SESSION['id_usuario']);
unset($iduser); unset($iduser);
include_once 'general/login_page.php'; include_once 'general/login_page.php';
@ -933,7 +926,6 @@ if (! isset($config['id_user'])) {
$_POST = []; $_POST = [];
$config['auth_error'] = __('User only can use the API.'); $config['auth_error'] = __('User only can use the API.');
$iduser = $_SESSION['id_usuario']; $iduser = $_SESSION['id_usuario'];
logoff_db($iduser, $_SERVER['REMOTE_ADDR']);
unset($_SESSION['id_usuario']); unset($_SESSION['id_usuario']);
unset($iduser); unset($iduser);
include_once 'general/login_page.php'; include_once 'general/login_page.php';
@ -956,7 +948,6 @@ if (file_exists(ENTERPRISE_DIR.'/load_enterprise.php')) {
if (isset($_GET['bye'])) { if (isset($_GET['bye'])) {
include 'general/logoff.php'; include 'general/logoff.php';
$iduser = $_SESSION['id_usuario']; $iduser = $_SESSION['id_usuario'];
db_logoff($iduser, $_SERVER['REMOTE_ADDR']);
$_SESSION = []; $_SESSION = [];
session_destroy(); session_destroy();

View File

@ -129,7 +129,7 @@
<div style='height: 10px'> <div style='height: 10px'>
<?php <?php
$version = '7.0NG.739'; $version = '7.0NG.739';
$build = '191009'; $build = '191022';
$banner = "v$version Build $build"; $banner = "v$version Build $build";
error_reporting(0); error_reporting(0);

View File

@ -166,6 +166,19 @@ class ModuleGraph
$time_compare = 'overlapped'; $time_compare = 'overlapped';
} }
// Graph TIP view.
if (!isset($config['full_scale_option']) || $config['full_scale_option'] == 0) {
$fullscale = 0;
} else if ($config['full_scale_option'] == 1) {
$fullscale = 1;
} else if ($config['full_scale_option'] == 2) {
if ($this->graph_type == 'boolean') {
$fullscale = 1;
} else {
$fullscale = 0;
}
}
ob_start(); ob_start();
switch ($this->graph_type) { switch ($this->graph_type) {
case 'boolean': case 'boolean':
@ -188,6 +201,7 @@ class ModuleGraph
'menu' => false, 'menu' => false,
'type_graph' => $config['type_module_charts'], 'type_graph' => $config['type_module_charts'],
'vconsole' => true, 'vconsole' => true,
'fullscale' => $fullscale,
]; ];
$graph = grafico_modulo_sparse($params); $graph = grafico_modulo_sparse($params);

View File

@ -97,17 +97,6 @@ echo '<td>';
html_print_submit_button(__('Refresh path'), 'refresh', false, 'class = "sub upd" style="margin-top:0px"'); html_print_submit_button(__('Refresh path'), 'refresh', false, 'class = "sub upd" style="margin-top:0px"');
echo '</table></form>'; echo '</table></form>';
// Get the total number of Elements for the pagination
$sqlCount = sprintf(
'SELECT COUNT(*)
FROM tgis_data_history
WHERE tagente_id_agente = %d AND end_timestamp > FROM_UNIXTIME(%d)
ORDER BY end_timestamp DESC',
$agentId,
(get_system_time() - $period)
);
$countData = (int) db_get_value_sql($sqlCount);
// Get the elements to present in this page // Get the elements to present in this page
switch ($config['dbtype']) { switch ($config['dbtype']) {
case 'mysql': case 'mysql':
@ -147,33 +136,39 @@ switch ($config['dbtype']) {
$result = db_get_all_rows_sql($sql, true); $result = db_get_all_rows_sql($sql, true);
if ($result === false) { $sql2 = sprintf(
$sql2 = sprintf( '
' SELECT current_longitude AS longitude, current_latitude AS latitude, current_altitude AS altitude,
SELECT current_longitude AS longitude, current_latitude AS latitude, current_altitude AS altitude, start_timestamp, description, number_of_packages, manual_placement
start_timestamp, description, number_of_packages, manual_placement FROM tgis_data_status
FROM tgis_data_status WHERE tagente_id_agente = %d
WHERE tagente_id_agente = %d ORDER BY start_timestamp DESC
ORDER BY start_timestamp DESC LIMIT %d OFFSET %d',
LIMIT %d OFFSET %d', $agentId,
$agentId, $config['block_size'],
$config['block_size'], (int) get_parameter('offset')
(int) get_parameter('offset') );
);
$result2 = db_get_all_rows_sql($sql2, true); $result2 = db_get_all_rows_sql($sql2, true);
if ($result2 === false) { if ($result === false && $result2 === false) {
ui_print_empty_data(__('This agent doesn\'t have any GIS data.')); ui_print_empty_data(__('This agent doesn\'t have any GIS data.'));
} else {
if ($result === false) {
$result = $result2;
} else { } else {
$result2[0]['end_timestamp'] = date('Y-m-d H:i:s'); $result2[0]['end_timestamp'] = date('Y-m-d H:i:s');
$result = $result2; array_unshift($result, $result2[0]);
} }
} }
if ($result !== false) { if ($result !== false) {
echo '<h4>'.__('Positional data from the last').' '.human_time_description_raw($period).'</h4>'; echo '<h4>'.__('Positional data from the last').' '.human_time_description_raw($period).'</h4>';
// Get the total elements for UI pagination
$countData = count($result);
if ($countData > 0) { if ($countData > 0) {
ui_pagination($countData, false); ui_pagination($countData, false);
} }

View File

@ -713,11 +713,7 @@ if (is_ajax()) {
$values['options'] = json_encode($options); $values['options'] = json_encode($options);
$return_update = db_process_sql_update('tnetworkmap_enterprise', $values, ['id' => $id_ent_map]); db_process_sql_update('tnetworkmap_enterprise', $values, ['id' => $id_ent_map]);
if (!$return_update) {
$return_data['ent'] = false;
break;
}
} }
} }
} }
@ -735,11 +731,7 @@ if (is_ajax()) {
} else { } else {
$values['text_filter'] = 'migrated'; $values['text_filter'] = 'migrated';
$return_update = db_process_sql_update('tnetwork_map', $values, ['id_networkmap' => $id_open_map]); db_process_sql_update('tnetwork_map', $values, ['id_networkmap' => $id_open_map]);
if (!$return_update) {
$return_data['open'] = false;
break;
}
} }
} }
} }

View File

@ -1541,7 +1541,9 @@ if (!empty($result)) {
$row['str_warning'], $row['str_warning'],
$row['max_critical'], $row['max_critical'],
$row['min_critical'], $row['min_critical'],
$row['str_critical'] $row['str_critical'],
$row['warning_inverse'],
$row['critical_inverse']
); );
if (is_numeric($row['datos']) && !modules_is_string_type($row['module_type'])) { if (is_numeric($row['datos']) && !modules_is_string_type($row['module_type'])) {

View File

@ -280,6 +280,14 @@ if (is_ajax()) {
$events, $events,
function ($carry, $item) { function ($carry, $item) {
$tmp = (object) $item; $tmp = (object) $item;
$tmp->meta = is_metaconsole();
if (is_metaconsole()) {
if ($tmp->server_name !== null) {
$tmp->data_server = metaconsole_get_servers($tmp->server_id);
$tmp->server_url_hash = metaconsole_get_servers_url_hash($tmp->data_server);
}
}
$tmp->evento = str_replace('"', '', io_safe_output($tmp->evento)); $tmp->evento = str_replace('"', '', io_safe_output($tmp->evento));
if (strlen($tmp->evento) >= 255) { if (strlen($tmp->evento) >= 255) {
$tmp->evento = ui_print_truncate_text($tmp->evento, 255, $tmp->evento, true, false); $tmp->evento = ui_print_truncate_text($tmp->evento, 255, $tmp->evento, true, false);
@ -289,6 +297,10 @@ if (is_ajax()) {
$tmp->module_name = io_safe_output($tmp->module_name); $tmp->module_name = io_safe_output($tmp->module_name);
} }
if ($tmp->comments) {
$tmp->comments = ui_print_comments($tmp->comments);
}
$tmp->agent_name = io_safe_output($tmp->agent_name); $tmp->agent_name = io_safe_output($tmp->agent_name);
$tmp->ack_utimestamp = ui_print_timestamp( $tmp->ack_utimestamp = ui_print_timestamp(
$tmp->ack_utimestamp, $tmp->ack_utimestamp,
@ -1594,6 +1606,28 @@ function process_datatables_callback(table, settings) {
function process_datatables_item(item) { function process_datatables_item(item) {
// Url to go to node from meta.
var server_url = '';
var hashdata = '';
if(item.meta === true){
if(typeof item.data_server !== 'undefined' && typeof item.server_url_hash !== 'undefined'){
server_url = item.data_server.server_url;
hashdata = item.server_url_hash;
}
}
// Show comments events.
item.user_comment = item.comments
if(item.comments.length > 80){
item.user_comment += '&nbsp;&nbsp;<a id="show_comments" href="javascript:" onclick="show_event_dialog(\'';
item.user_comment += item.b64+"','comments'," + $("#group_rep").val()+');">';
item.user_comment += '<?php echo html_print_image('images/eye.png', true, ['title' => __('Show more')]); ?></a>';
}
// Grouped events. // Grouped events.
if(item.max_id_evento) { if(item.max_id_evento) {
item.id_evento = item.max_id_evento item.id_evento = item.max_id_evento
@ -1828,9 +1862,19 @@ function process_datatables_item(item) {
/* Update column content now to avoid json poisoning. */ /* Update column content now to avoid json poisoning. */
// Url to agent view.
var url_link = '<?php echo ui_get_full_url('index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='); ?>';
var url_link_hash = '';
if(item.meta === true){
url_link = server_url+'/index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente=';
url_link_hash = hashdata;
}
/* Agent name link */ /* Agent name link */
if (item.id_agente > 0) { if (item.id_agente > 0) {
item.agent_name = '<a href="<?php echo ui_get_full_url('index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='); ?>' +item.id_agente+'">' + item.agent_name + '</a>'; item.agent_name = '<a href="'+url_link+item.id_agente+url_link_hash+'">' + item.agent_name + '</a>';
} else { } else {
item.agent_name = ''; item.agent_name = '';
} }
@ -1840,11 +1884,11 @@ function process_datatables_item(item) {
<?php <?php
if (in_array('agent_name', $fields)) { if (in_array('agent_name', $fields)) {
?> ?>
item.id_agente = '<a href="<?php echo ui_get_full_url('index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='); ?>'+item.id_agente+'">' + item.id_agente + '</a>'; item.id_agente = '<a href="'+url_link+item.id_agente+url_link_hash+'">' + item.id_agente + '</a>';
<?php <?php
} else { } else {
?> ?>
item.id_agente = '<a href="<?php echo ui_get_full_url('index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='); ?>'+item.id_agente+'">' + item.agent_name + '</a>'; item.id_agente = '<a href="'+url_link+item.id_agente+url_link_hash+'">' + item.agent_name + '</a>';
<?php <?php
} }
?> ?>

View File

@ -18,6 +18,11 @@ enterprise_include_once('include/functions_policies.php');
$searchpolicies = check_acl($config['id_user'], 0, 'AW'); $searchpolicies = check_acl($config['id_user'], 0, 'AW');
if (!$searchpolicies) {
$totalPolicies = 0;
return;
}
$selectpolicieIDUp = ''; $selectpolicieIDUp = '';
$selectpolicieIDDown = ''; $selectpolicieIDDown = '';
$selectNameUp = ''; $selectNameUp = '';
@ -169,7 +174,7 @@ switch ($sortField) {
break; break;
} }
if ($searchpolicies == 0) { if ($searchpolicies) {
/* /*
We take the user groups to get policies that meet the requirements of the search We take the user groups to get policies that meet the requirements of the search
and which the user have permission on this groups and which the user have permission on this groups
@ -189,6 +194,7 @@ if ($searchpolicies == 0) {
$policies = db_process_sql($sql); $policies = db_process_sql($sql);
if ($policies !== false) { if ($policies !== false) {
$totalPolicies = count($policies); $totalPolicies = count($policies);

View File

@ -18,7 +18,7 @@ require_once $config['homedir'].'/include/functions_reporting.php';
enterprise_include('operation/reporting/custom_reporting.php'); enterprise_include('operation/reporting/custom_reporting.php');
$searchAgents = $searchAlerts = $searchModules = check_acl($config['id_user'], 0, 'AR'); $searchAgents = $searchAlerts = $searchModules = check_acl($config['id_user'], 0, 'AR');
$searchUsers = $searchPolicies = check_acl($config['id_user'], 0, 'AW'); $searchUsers = $searchPolicies = check_acl($config['id_user'], 0, 'AR');
$searchMaps = $searchReports = $searchGraphs = check_acl($config['id_user'], 0, 'IR'); $searchMaps = $searchReports = $searchGraphs = check_acl($config['id_user'], 0, 'IR');
$searchMain = true; $searchMain = true;
$searchHelps = true; $searchHelps = true;

View File

@ -18,6 +18,10 @@ require_once $config['homedir'].'/include/functions_users.php';
require_once $config['homedir'].'/include/functions_groups.php'; require_once $config['homedir'].'/include/functions_groups.php';
$searchUsers = check_acl($config['id_user'], 0, 'UM'); $searchUsers = check_acl($config['id_user'], 0, 'UM');
if (!$searchUsers) {
$totalUsers = 0;
return;
}
$selectUserIDUp = ''; $selectUserIDUp = '';
$selectUserIDDown = ''; $selectUserIDDown = '';

View File

@ -91,7 +91,7 @@ if (!$users || !$searchUsers) {
} }
echo '<br />'; echo '<br />';
ui_pagination($totalUsers); // ui_pagination($totalUsers);
html_print_table($table); html_print_table($table);
unset($table); unset($table);
ui_pagination($totalUsers); ui_pagination($totalUsers);

View File

@ -462,6 +462,8 @@ $autorefresh_list_out['operation/agentes/status_monitor'] = 'Monitor detail';
$autorefresh_list_out['enterprise/operation/services/services'] = 'Services'; $autorefresh_list_out['enterprise/operation/services/services'] = 'Services';
$autorefresh_list_out['enterprise/dashboard/main_dashboard'] = 'Dashboard'; $autorefresh_list_out['enterprise/dashboard/main_dashboard'] = 'Dashboard';
$autorefresh_list_out['operation/reporting/graph_viewer'] = 'Graph Viewer'; $autorefresh_list_out['operation/reporting/graph_viewer'] = 'Graph Viewer';
$autorefresh_list_out['operation/gis_maps/render_view'] = 'Gis Map';
$autorefresh_list_out['operation/snmpconsole/snmp_view'] = 'SNMP console'; $autorefresh_list_out['operation/snmpconsole/snmp_view'] = 'SNMP console';
$autorefresh_list_out['operation/agentes/pandora_networkmap'] = 'Network map'; $autorefresh_list_out['operation/agentes/pandora_networkmap'] = 'Network map';
$autorefresh_list_out['operation/visual_console/render_view'] = 'Visual console'; $autorefresh_list_out['operation/visual_console/render_view'] = 'Visual console';
@ -1150,7 +1152,7 @@ function ehorus_connection_test(host, port) {
var user = $('input#text-ehorus_user_level_user').val(); var user = $('input#text-ehorus_user_level_user').val();
var pass = $('input#password-ehorus_user_level_pass').val(); var pass = $('input#password-ehorus_user_level_pass').val();
debugger;
var badRequestMessage = '<?php echo __('Empty user or password'); ?>'; var badRequestMessage = '<?php echo __('Empty user or password'); ?>';
var notFoundMessage = '<?php echo __('User not found'); ?>'; var notFoundMessage = '<?php echo __('User not found'); ?>';
var invalidPassMessage = '<?php echo __('Invalid password'); ?>'; var invalidPassMessage = '<?php echo __('Invalid password'); ?>';

View File

@ -3,7 +3,7 @@
# #
%define name pandorafms_console %define name pandorafms_console
%define version 7.0NG.739 %define version 7.0NG.739
%define release 191009 %define release 191022
# 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.739 %define version 7.0NG.739
%define release 191009 %define release 191022
# 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.739 %define version 7.0NG.739
%define release 191009 %define release 191022
%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.739-191009 Version: 7.0NG.739-191022
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.739-191009" pandora_version="7.0NG.739-191022"
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.739"; my $pandora_version = "7.0NG.739";
my $pandora_build = "191009"; my $pandora_build = "191022";
our $VERSION = $pandora_version." ".$pandora_build; our $VERSION = $pandora_version." ".$pandora_build;
# Setup hash # Setup hash

View File

@ -1141,21 +1141,21 @@ sub pandora_execute_action ($$$$$$$$$;$) {
#logger($pa_config, "Clean name ".$clean_name, 10); #logger($pa_config, "Clean name ".$clean_name, 10);
# User defined alert # User defined alert
if ($action->{'internal'} == 0) { if ($action->{'internal'} == 0) {
$macros{_field1_} = subst_alert_macros ($field1, \%macros, $pa_config, $dbh, $agent, $module); $macros{_field1_} = subst_alert_macros ($field1, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$macros{_field2_} = subst_alert_macros ($field2, \%macros, $pa_config, $dbh, $agent, $module); $macros{_field2_} = subst_alert_macros ($field2, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$macros{_field3_} = subst_alert_macros ($field3, \%macros, $pa_config, $dbh, $agent, $module); $macros{_field3_} = subst_alert_macros ($field3, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$macros{_field4_} = subst_alert_macros ($field4, \%macros, $pa_config, $dbh, $agent, $module); $macros{_field4_} = subst_alert_macros ($field4, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$macros{_field5_} = subst_alert_macros ($field5, \%macros, $pa_config, $dbh, $agent, $module); $macros{_field5_} = subst_alert_macros ($field5, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$macros{_field6_} = subst_alert_macros ($field6, \%macros, $pa_config, $dbh, $agent, $module); $macros{_field6_} = subst_alert_macros ($field6, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$macros{_field7_} = subst_alert_macros ($field7, \%macros, $pa_config, $dbh, $agent, $module); $macros{_field7_} = subst_alert_macros ($field7, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$macros{_field8_} = subst_alert_macros ($field8, \%macros, $pa_config, $dbh, $agent, $module); $macros{_field8_} = subst_alert_macros ($field8, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$macros{_field9_} = subst_alert_macros ($field9, \%macros, $pa_config, $dbh, $agent, $module); $macros{_field9_} = subst_alert_macros ($field9, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$macros{_field10_} = subst_alert_macros ($field10, \%macros, $pa_config, $dbh, $agent, $module); $macros{_field10_} = subst_alert_macros ($field10, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$macros{_field11_} = subst_alert_macros ($field11, \%macros, $pa_config, $dbh, $agent, $module); $macros{_field11_} = subst_alert_macros ($field11, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$macros{_field12_} = subst_alert_macros ($field12, \%macros, $pa_config, $dbh, $agent, $module); $macros{_field12_} = subst_alert_macros ($field12, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$macros{_field13_} = subst_alert_macros ($field13, \%macros, $pa_config, $dbh, $agent, $module); $macros{_field13_} = subst_alert_macros ($field13, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$macros{_field14_} = subst_alert_macros ($field14, \%macros, $pa_config, $dbh, $agent, $module); $macros{_field14_} = subst_alert_macros ($field14, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$macros{_field15_} = subst_alert_macros ($field15, \%macros, $pa_config, $dbh, $agent, $module); $macros{_field15_} = subst_alert_macros ($field15, \%macros, $pa_config, $dbh, $agent, $module, $alert);
my @command_args = (); my @command_args = ();
# divide command into words based on quotes and whitespaces # divide command into words based on quotes and whitespaces
@ -1186,7 +1186,7 @@ sub pandora_execute_action ($$$$$$$$$;$) {
# Internal Audit # Internal Audit
} elsif ($clean_name eq "Internal Audit") { } elsif ($clean_name eq "Internal Audit") {
$field1 = subst_alert_macros ($field1, \%macros, $pa_config, $dbh, $agent, $module); $field1 = subst_alert_macros ($field1, \%macros, $pa_config, $dbh, $agent, $module, $alert);
pandora_audit ($pa_config, $field1, defined ($agent) ? safe_output($agent->{'alias'}) : 'N/A', 'Alert (' . safe_output($alert->{'description'}) . ')', $dbh); pandora_audit ($pa_config, $field1, defined ($agent) ? safe_output($agent->{'alias'}) : 'N/A', 'Alert (' . safe_output($alert->{'description'}) . ')', $dbh);
# Email # Email
@ -1363,12 +1363,12 @@ sub pandora_execute_action ($$$$$$$$$;$) {
# Pandora FMS Event # Pandora FMS Event
} elsif ($clean_name eq "Monitoring Event") { } elsif ($clean_name eq "Monitoring Event") {
$field1 = subst_alert_macros ($field1, \%macros, $pa_config, $dbh, $agent, $module); $field1 = subst_alert_macros ($field1, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$field3 = subst_alert_macros ($field3, \%macros, $pa_config, $dbh, $agent, $module); $field3 = subst_alert_macros ($field3, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$field4 = subst_alert_macros ($field4, \%macros, $pa_config, $dbh, $agent, $module); $field4 = subst_alert_macros ($field4, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$field6 = subst_alert_macros ($field6, \%macros, $pa_config, $dbh, $agent, $module); $field6 = subst_alert_macros ($field6, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$field7 = subst_alert_macros ($field7, \%macros, $pa_config, $dbh, $agent, $module); $field7 = subst_alert_macros ($field7, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$field8 = subst_alert_macros ($field8, \%macros, $pa_config, $dbh, $agent, $module); $field8 = subst_alert_macros ($field8, \%macros, $pa_config, $dbh, $agent, $module, $alert);
# Field 1 (event text) # Field 1 (event text)
my $event_text = $field1; my $event_text = $field1;
@ -1448,13 +1448,13 @@ sub pandora_execute_action ($$$$$$$$$;$) {
my $config_api_pass = pandora_get_tconfig_token ($dbh, 'integria_api_pass', ''); my $config_api_pass = pandora_get_tconfig_token ($dbh, 'integria_api_pass', '');
my $config_integria_user = pandora_get_tconfig_token ($dbh, 'integria_user', ''); my $config_integria_user = pandora_get_tconfig_token ($dbh, 'integria_user', '');
my $config_integria_user_pass = pandora_get_tconfig_token ($dbh, 'integria_pass', ''); my $config_integria_user_pass = pandora_get_tconfig_token ($dbh, 'integria_pass', '');
$field1 = subst_alert_macros ($field1, \%macros, $pa_config, $dbh, $agent, $module); $field1 = subst_alert_macros ($field1, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$field2 = subst_alert_macros ($field2, \%macros, $pa_config, $dbh, $agent, $module); $field2 = subst_alert_macros ($field2, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$field3 = subst_alert_macros ($field3, \%macros, $pa_config, $dbh, $agent, $module); $field3 = subst_alert_macros ($field3, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$field4 = subst_alert_macros ($field4, \%macros, $pa_config, $dbh, $agent, $module); $field4 = subst_alert_macros ($field4, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$field5 = subst_alert_macros ($field5, \%macros, $pa_config, $dbh, $agent, $module); $field5 = subst_alert_macros ($field5, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$field6 = subst_alert_macros ($field6, \%macros, $pa_config, $dbh, $agent, $module); $field6 = subst_alert_macros ($field6, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$field7 = subst_alert_macros ($field7, \%macros, $pa_config, $dbh, $agent, $module); $field7 = subst_alert_macros ($field7, \%macros, $pa_config, $dbh, $agent, $module, $alert);
# Field 1 (Integria IMS API path) # Field 1 (Integria IMS API path)
my $api_path = $config_api_path . "/integria/include/api.php"; my $api_path = $config_api_path . "/integria/include/api.php";
@ -1513,8 +1513,7 @@ sub pandora_execute_action ($$$$$$$$$;$) {
} elsif ($clean_name eq "Generate Notification") { } elsif ($clean_name eq "Generate Notification") {
# Translate macros # Translate macros
$field3 = subst_alert_macros($field3, \%macros, $pa_config, $dbh, $agent, $module); $field3 = subst_alert_macros($field3, \%macros, $pa_config, $dbh, $agent, $module, $alert);
$field4 = subst_alert_macros($field4, \%macros, $pa_config, $dbh, $agent, $module);
# If no targets ignore notification # If no targets ignore notification
if (defined($field1) && defined($field2) && ($field1 ne "" || $field2 ne "")) { if (defined($field1) && defined($field2) && ($field1 ne "" || $field2 ne "")) {

View File

@ -230,7 +230,7 @@ sub data_consumer ($$) {
} }
# Ignore the timestamp in the XML and use the file timestamp instead # Ignore the timestamp in the XML and use the file timestamp instead
$xml_data->{'timestamp'} = strftime ("%Y-%m-%d %H:%M:%S", localtime((stat($file_name))[9])) if ($pa_config->{'use_xml_timestamp'} eq '1' || ! defined ($xml_data->{'timestamp'})); $xml_data->{'timestamp'} = strftime ("%Y-%m-%d %H:%M:%S", localtime((stat($file_name))[9])) if ($pa_config->{'use_xml_timestamp'} eq '0' || ! defined ($xml_data->{'timestamp'}));
# Double check that the file exists # Double check that the file exists
if (! -f $file_name) { if (! -f $file_name) {

View File

@ -360,8 +360,9 @@ sub PandoraFMS::Recon::Base::guess_os($$) {
if (-x $self->{'pa_config'}->{'xprobe2'}) { if (-x $self->{'pa_config'}->{'xprobe2'}) {
my $return = `"$self->{pa_config}->{xprobe2}" $device 2>$DEVNULL`; my $return = `"$self->{pa_config}->{xprobe2}" $device 2>$DEVNULL`;
if ($? == 0) { if ($? == 0) {
my ($output) = $a =~ /Running OS:(.*)/; if($return =~ /Running OS:(.*)/) {
return pandora_get_os($self->{'dbh'}, $output); return pandora_get_os($self->{'dbh'}, $1);
}
} }
} }
@ -370,8 +371,9 @@ sub PandoraFMS::Recon::Base::guess_os($$) {
my $return = `"$self->{pa_config}->{nmap}" -F -O $device 2>$DEVNULL`; my $return = `"$self->{pa_config}->{nmap}" -F -O $device 2>$DEVNULL`;
return OS_OTHER if ($? != 0); return OS_OTHER if ($? != 0);
my ($output) = $return =~ /Aggressive OS guesses:\s*(.*)/; if ($return =~ /Aggressive OS guesses:\s*(.*)/) {
return pandora_get_os($self->{'dbh'}, $output); return pandora_get_os($self->{'dbh'}, $1);
}
} }
return OS_OTHER; return OS_OTHER;
@ -536,7 +538,7 @@ sub PandoraFMS::Recon::Base::create_agents($$) {
return undef; return undef;
} }
if ($agent->{'address'} ne '') { if (defined($agent->{'address'}) && $agent->{'address'} ne '') {
pandora_add_agent_address( pandora_add_agent_address(
$pa_config, $agent_id, $agent->{'agent_name'}, $pa_config, $agent_id, $agent->{'agent_name'},
$agent->{'address'}, $dbh $agent->{'address'}, $dbh
@ -582,44 +584,14 @@ sub PandoraFMS::Recon::Base::create_agent($$) {
# Clean name. # Clean name.
$device = clean_blank($device); $device = clean_blank($device);
my @agents = get_db_rows($self->{'dbh'}, # Resolve hostnames.
'SELECT * FROM taddress, taddress_agent, tagente my $host_name = (($self->{'resolve_names'} == 1) ? gethostbyaddr(inet_aton($device), AF_INET) : $device);
WHERE tagente.id_agente = taddress_agent.id_agent # Fallback to device IP if host name could not be resolved.
AND taddress_agent.id_a = taddress.id_a $host_name = $device if (!defined($host_name) || $host_name eq '');
AND ip = ?', $device my $agent = locate_agent($self->{'pa_config'}, $self->{'dbh'}, $host_name);
);
# Does the host already exist?
my $agent;
foreach my $candidate (@agents) {
$agent = {map {$_} %$candidate}; # copy contents, do not use shallow copy
# exclude $device itself, because it handle corner case when target includes NAT
my @registered = map {$_->{ip}} get_db_rows($self->{'dbh'},
'SELECT ip FROM taddress, taddress_agent, tagente
WHERE tagente.id_agente = taddress_agent.id_agent
AND taddress_agent.id_a = taddress.id_a
AND tagente.id_agente = ?
AND taddress.ip != ?', $agent->{id_agente}, $device
);
foreach my $ip_addr (@registered) {
my @matched = grep { $_ =~ /^$ip_addr$/ } $self->get_addresses($device);
if (scalar(@matched) == 0) {
$agent = undef;
last;
}
}
last if(defined($agent)); # exit loop if match all ip_addr
}
if (!defined($agent)) {
$agent = get_agent_from_name($self->{'dbh'}, $device);
}
my ($agent_id, $agent_learning); my ($agent_id, $agent_learning);
if (!defined($agent)) { if (!defined($agent)) {
# Resolve hostnames.
my $host_name = $self->{'resolve_names'} == 1 ? gethostbyaddr (inet_aton($device), AF_INET) : $device;
$host_name = $device unless defined ($host_name); $host_name = $device unless defined ($host_name);
# Guess the OS. # Guess the OS.

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.739"; my $pandora_version = "7.0NG.739";
my $pandora_build = "191009"; my $pandora_build = "191022";
our $VERSION = $pandora_version." ".$pandora_build; our $VERSION = $pandora_version." ".$pandora_build;
our %EXPORT_TAGS = ( 'all' => [ qw() ] ); our %EXPORT_TAGS = ( 'all' => [ qw() ] );
@ -762,7 +762,7 @@ sub transfer_xml {
my $file_path; my $file_path;
if (! (empty ($name))) { if (! (empty ($name))) {
$file_name = $name . "." . sprintf("%d",time()) . ".data"; $file_name = $name . "." . sprintf("%d",getCurrentUTimeMilis(). (rand()*10000)) . ".data";
} }
else { else {
# Inherit file name # Inherit file name

View File

@ -641,19 +641,29 @@ sub logger ($$;$) {
# Set the security level # Set the security level
my $security_level = 'info'; my $security_level = 'info';
if ($level < 2) { if ($level < 2) {
$security = 'crit'; $security_level = 'crit';
} elsif ($level < 5) { } elsif ($level < 5) {
$security = 'warn'; $security_level = 'warn';
} }
openlog('pandora_server', 'ndelay', 'daemon'); openlog('pandora_server', 'ndelay', 'daemon');
syslog($security_level, $message); syslog($security_level, $message);
closelog(); closelog();
} else { } else {
# Obtain the script that invoke this log
my $parent_caller = "";
$parent_caller = ( caller(2) )[1];
if (defined $parent_caller) {
$parent_caller = (split '/', $parent_caller)[-1];
$parent_caller =~ s/\.[^.]+$//;
$parent_caller = " ** " . $parent_caller . " **: ";
} else {
$parent_caller = " ";
}
open (FILE, ">> $file") or die "[FATAL] Could not open logfile '$file'"; open (FILE, ">> $file") or die "[FATAL] Could not open logfile '$file'";
# Get an exclusive lock on the file (LOCK_EX) # Get an exclusive lock on the file (LOCK_EX)
flock (FILE, 2); flock (FILE, 2);
print FILE strftime ("%Y-%m-%d %H:%M:%S", localtime()) . " " . (defined($pa_config->{'servername'}) ? $pa_config->{'servername'} : '') . " [V". $level ."] " . $message . "\n"; print FILE strftime ("%Y-%m-%d %H:%M:%S", localtime()) . $parent_caller . (defined($pa_config->{'servername'}) ? $pa_config->{'servername'} : '') . " [V". $level ."] " . $message . "\n";
close (FILE); close (FILE);
} }
} }

View File

@ -3,7 +3,7 @@
# #
%define name pandorafms_server %define name pandorafms_server
%define version 7.0NG.739 %define version 7.0NG.739
%define release 191009 %define release 191022
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.739 %define version 7.0NG.739
%define release 191009 %define release 191022
Summary: Pandora FMS Server Summary: Pandora FMS Server
Name: %{name} Name: %{name}

View File

@ -9,7 +9,7 @@
# ********************************************************************** # **********************************************************************
PI_VERSION="7.0NG.739" PI_VERSION="7.0NG.739"
PI_BUILD="191009" PI_BUILD="191022"
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.739 PS191009"; my $version = "7.0NG.739 PS191022";
# 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.739 PS191009"; my $version = "7.0NG.739 PS191022";
# save program name for logging # save program name for logging
my $progname = basename($0); my $progname = basename($0);

View File

@ -19,7 +19,7 @@ Usage:
$0 -server <smsc_server:port> -user <user_id> -password <user_password> -source <source_number> -destination <destination_numbers> -message <short_message> [OPTIONS] $0 -server <smsc_server:port> -user <user_id> -password <user_password> -source <source_number> -destination <destination_numbers> -message <short_message> [OPTIONS]
- <destination_numbers> Comma separated list of destination numbers (+123456789,+234567891,...) - <destination_numbers> Comma separated list of destination numbers (123456789,234567891,...)
OPTIONS: OPTIONS:
@ -45,7 +45,7 @@ OPTIONS:
Example: Example:
$0 -server 192.168.1.50:2775 -user myuser -password mypassword -source +123456789 -destination +234567891 -message "Content of SMS message" $0 -server 192.168.1.50:2775 -user myuser -password mypassword -source 123456789 -destination 234567891 -message "Content of SMS message"
EO_H EO_H
@ -85,7 +85,7 @@ if (!$config->{'message'}){
my ($smsc_server, $smsc_port) = split /:/, $config->{'server'}; my ($smsc_server, $smsc_port) = split /:/, $config->{'server'};
my @destination_numbers = $config->{'destination'}; my @destination_numbers = split /,/, $config->{'destination'};
if (!$smsc_port){ if (!$smsc_port){
$smsc_port = 2775; $smsc_port = 2775;