'.__('Update new GIS data:').'
';
if ($new_agent) {
$update_gis_data = true;
}
diff --git a/pandora_console/godmode/agentes/module_manager.php b/pandora_console/godmode/agentes/module_manager.php
index 6ad5267c0e..b7b1d296ec 100644
--- a/pandora_console/godmode/agentes/module_manager.php
+++ b/pandora_console/godmode/agentes/module_manager.php
@@ -842,7 +842,9 @@ foreach ($modules as $module) {
$module['str_warning'],
$module['max_critical'],
$module['min_critical'],
- $module['str_critical']
+ $module['str_critical'],
+ $module['warning_inverse'],
+ $module['critical_inverse']
);
} else {
$data[7] = '';
diff --git a/pandora_console/godmode/massive/massive_edit_agents.php b/pandora_console/godmode/massive/massive_edit_agents.php
index 0126aa93f9..83001be810 100755
--- a/pandora_console/godmode/massive/massive_edit_agents.php
+++ b/pandora_console/godmode/massive/massive_edit_agents.php
@@ -59,8 +59,10 @@ if ($update_agents) {
$values['id_grupo'] = get_parameter('group');
}
- if (get_parameter('interval', 0) != 0) {
- $values['intervalo'] = get_parameter('interval');
+ if (!(get_parameter('interval_select') == -1 && empty(get_parameter('interval_text')))) {
+ if (get_parameter('interval', 0) != 0) {
+ $values['intervalo'] = get_parameter('interval');
+ }
}
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][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][1] = html_print_select_from_sql(
diff --git a/pandora_console/godmode/menu.php b/pandora_console/godmode/menu.php
index b969edd3df..7175081912 100644
--- a/pandora_console/godmode/menu.php
+++ b/pandora_console/godmode/menu.php
@@ -21,27 +21,42 @@ require_once 'include/functions_menu.php';
$menu_godmode = [];
$menu_godmode['class'] = 'godmode';
-
-if (check_acl($config['id_user'], 0, 'PM')) {
+if (check_acl($config['id_user'], 0, 'AR')
+ || 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['godmode/servers/discovery&wiz=main']['text'] = __('Main');
$sub['godmode/servers/discovery&wiz=main']['id'] = 'Discovery';
-
$sub['godmode/servers/discovery&wiz=tasklist']['text'] = __('Task list');
$sub['godmode/servers/discovery&wiz=tasklist']['id'] = 'tasklist';
- $sub2 = [];
- $sub2['godmode/servers/discovery&wiz=hd&mode=netscan']['text'] = __('Network scan');
- enterprise_hook('hostdevices_submenu');
- $sub2['godmode/servers/discovery&wiz=hd&mode=customnetscan']['text'] = __('Custom network scan');
- $sub2['godmode/servers/discovery&wiz=hd&mode=managenetscanscripts']['text'] = __('Manage scan scripts');
- $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')
+ || check_acl($config['id_user'], 0, 'PM')
+ ) {
+ if (check_acl($config['id_user'], 0, 'AW')) {
+ $sub2 = [];
+ $sub2['godmode/servers/discovery&wiz=hd&mode=netscan']['text'] = __('Network scan');
+ enterprise_hook('hostdevices_submenu');
+ $sub2['godmode/servers/discovery&wiz=hd&mode=customnetscan']['text'] = __('Custom network scan');
+ }
- enterprise_hook('applications_menu');
- enterprise_hook('cloud_menu');
- enterprise_hook('console_task_menu');
+ if (check_acl($config['id_user'], 0, 'PM')) {
+ $sub2['godmode/servers/discovery&wiz=hd&mode=managenetscanscripts']['text'] = __('Manage scan scripts');
+ }
+
+ $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.
$menu_godmode['discovery']['text'] = __('Discovery');
@@ -92,7 +107,7 @@ if (!empty($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']['id'] = 'Manage agents groups';
}
diff --git a/pandora_console/godmode/reporting/graph_container.php b/pandora_console/godmode/reporting/graph_container.php
index ccc3b6dde6..3b87fc63e3 100644
--- a/pandora_console/godmode/reporting/graph_container.php
+++ b/pandora_console/godmode/reporting/graph_container.php
@@ -16,10 +16,10 @@ global $config;
// Check user credentials
check_login();
-if (! check_acl($config['id_user'], 0, 'RR')) {
+if (! check_acl($config['id_user'], 0, 'RR') || enterprise_installed() === false) {
db_pandora_audit(
'ACL Violation',
- 'Trying to access Inventory Module Management'
+ 'Trying to access Graph container'
);
include 'general/noaccess.php';
return;
diff --git a/pandora_console/godmode/reporting/graphs.php b/pandora_console/godmode/reporting/graphs.php
index fd8d3cff84..1fba644037 100644
--- a/pandora_console/godmode/reporting/graphs.php
+++ b/pandora_console/godmode/reporting/graphs.php
@@ -71,10 +71,12 @@ switch ($activeTab) {
break;
}
-$buttons['graph_container'] = [
- 'active' => false,
- 'text' => '
'.html_print_image('images/graph-container.png', true, ['title' => __('Graphs containers')]).'',
-];
+if ($enterpriseEnable) {
+ $buttons['graph_container'] = [
+ 'active' => false,
+ 'text' => '
'.html_print_image('images/graph-container.png', true, ['title' => __('Graphs containers')]).'',
+ ];
+}
$delete_graph = (bool) get_parameter('delete_graph');
$view_graph = (bool) get_parameter('view_graph');
diff --git a/pandora_console/godmode/reporting/reporting_builder.php b/pandora_console/godmode/reporting/reporting_builder.php
index 45993ec38e..40ce45b5bb 100755
--- a/pandora_console/godmode/reporting/reporting_builder.php
+++ b/pandora_console/godmode/reporting/reporting_builder.php
@@ -3144,17 +3144,19 @@ if ($enterpriseEnable && defined('METACONSOLE')) {
break;
}
- ui_print_page_header(
- $textReportName,
- 'images/op_reporting.png',
- false,
- $helpers,
- false,
- $buttons,
- false,
- '',
- 60
- );
+ if ($action !== 'update' && !is_metaconsole()) {
+ ui_print_page_header(
+ $textReportName,
+ 'images/op_reporting.png',
+ false,
+ $helpers,
+ false,
+ $buttons,
+ false,
+ '',
+ 60
+ );
+ }
}
if ($resultOperationDB !== null) {
@@ -3176,6 +3178,26 @@ if ($resultOperationDB !== null) {
__('Successfull action'),
__('Unsuccessful action
'.$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) {
diff --git a/pandora_console/godmode/servers/discovery.php b/pandora_console/godmode/servers/discovery.php
index 3f2166bb39..2d0fcec8a1 100755
--- a/pandora_console/godmode/servers/discovery.php
+++ b/pandora_console/godmode/servers/discovery.php
@@ -4,7 +4,14 @@ global $config;
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(
'ACL Violation',
'Trying to access Server Management'
@@ -134,11 +141,18 @@ if ($classname_selected === null) {
$classname = basename($classpath, '.class.php');
$obj = new $classname();
+ $button = $obj->load();
+
+ if ($button === false) {
+ // No acess, skip.
+ continue;
+ }
+
// DiscoveryTaskList must be first button.
if ($classname == 'DiscoveryTaskList') {
- array_unshift($wiz_data, $obj->load());
+ array_unshift($wiz_data, $button);
} else {
- $wiz_data[] = $obj->load();
+ $wiz_data[] = $button;
}
}
diff --git a/pandora_console/godmode/servers/plugin.php b/pandora_console/godmode/servers/plugin.php
index 3eb385332c..79fcfc61a2 100644
--- a/pandora_console/godmode/servers/plugin.php
+++ b/pandora_console/godmode/servers/plugin.php
@@ -928,10 +928,10 @@ if (($create != '') || ($view != '')) {
$other['plugin_type'] = $plugin_meta['plugin_type'];
$other['macros'] = urlencode($plugin_meta['macros']);
$other['parameters'] = urlencode($plugin_meta['parameters']);
- $other = implode('%7C', $other);
+ $other = implode('%7E', $other);
$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']);
$post = '';
if (file_exists($file_path)) {
diff --git a/pandora_console/godmode/users/configure_profile.php b/pandora_console/godmode/users/configure_profile.php
index 418add8aa8..8c69c0e0a9 100644
--- a/pandora_console/godmode/users/configure_profile.php
+++ b/pandora_console/godmode/users/configure_profile.php
@@ -18,7 +18,7 @@ check_login();
enterprise_hook('open_meta_frame');
-if (! check_acl($config['id_user'], 0, 'PM')) {
+if (! check_acl($config['id_user'], 0, 'UM')) {
db_pandora_audit(
'ACL Violation',
'Trying to access Profile Management'
@@ -320,24 +320,29 @@ if ($id_profile || $new_profile) {
$table->data['IM'] = $row;
$table->data[] = '
';
+ $disable_option = 'javascript: return false;';
+ if (check_acl($config['id_user'], 0, 'PM') || users_is_admin()) {
+ $disable_option = '';
+ }
+
// Users
$row = [];
$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[] = '
';
// DB
$row = [];
$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[] = '
';
// Pandora
$row = [];
$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[] = '
';
@@ -359,3 +364,18 @@ if ($id_profile || $new_profile) {
}
enterprise_hook('close_meta_frame');
+
+?>
+
+
diff --git a/pandora_console/godmode/users/profile_list.php b/pandora_console/godmode/users/profile_list.php
index da77dffd9f..a87323f0f8 100644
--- a/pandora_console/godmode/users/profile_list.php
+++ b/pandora_console/godmode/users/profile_list.php
@@ -362,7 +362,10 @@ foreach ($profiles as $profile) {
$data['PM'] = ($profile['pandora_management'] ? $img : '');
$table->cellclass[]['operations'] = 'action_buttons';
$data['operations'] = '
'.html_print_image('images/config.png', true, ['title' => __('Edit')]).'';
- $data['operations'] .= '
'.html_print_image('images/cross.png', true).'';
+ if (check_acl($config['id_user'], 0, 'PM') || users_is_admin()) {
+ $data['operations'] .= '
'.html_print_image('images/cross.png', true).'';
+ }
+
array_push($table->data, $data);
}
diff --git a/pandora_console/godmode/users/user_list.php b/pandora_console/godmode/users/user_list.php
index 4e8cfbb2c1..6a02f4bb57 100644
--- a/pandora_console/godmode/users/user_list.php
+++ b/pandora_console/godmode/users/user_list.php
@@ -420,7 +420,9 @@ else {
$u = get_user_info($key);
$g = users_get_groups($key, 'AR', $u['is_admin']);
$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;
}
diff --git a/pandora_console/godmode/wizards/DiscoveryTaskList.class.php b/pandora_console/godmode/wizards/DiscoveryTaskList.class.php
index ed7e1f3b10..ed523d0b82 100644
--- a/pandora_console/godmode/wizards/DiscoveryTaskList.class.php
+++ b/pandora_console/godmode/wizards/DiscoveryTaskList.class.php
@@ -200,7 +200,7 @@ class DiscoveryTaskList extends Wizard
{
global $config;
- if (! check_acl($config['id_user'], 0, 'PM')) {
+ if (! check_acl($config['id_user'], 0, 'AW')) {
db_pandora_audit(
'ACL Violation',
'Trying to access recon task viewer'
@@ -241,7 +241,7 @@ class DiscoveryTaskList extends Wizard
{
global $config;
- if (! check_acl($config['id_user'], 0, 'PM')) {
+ if (!$this->aclMulticheck('RR|RW|RM|PM')) {
db_pandora_audit(
'ACL Violation',
'Trying to access recon task viewer'
@@ -270,7 +270,7 @@ class DiscoveryTaskList extends Wizard
{
global $config;
- if (! check_acl($config['id_user'], 0, 'PM')) {
+ if (! check_acl($config['id_user'], 0, 'RM')) {
db_pandora_audit(
'ACL Violation',
'Trying to access recon task viewer'
@@ -313,13 +313,9 @@ class DiscoveryTaskList extends Wizard
check_login();
- if (! check_acl($config['id_user'], 0, 'PM')) {
- db_pandora_audit(
- 'ACL Violation',
- 'Trying to access recon task viewer'
- );
- include 'general/noaccess.php';
- return false;
+ if (!$this->aclMulticheck('AR|AW|AM')) {
+ // Tasklist are allowed only of agent managers.
+ return '';
}
// Get all discovery servers.
@@ -341,7 +337,7 @@ class DiscoveryTaskList extends Wizard
// --------------------------------
// FORCE A RECON TASK
// --------------------------------
- if (check_acl($config['id_user'], 0, 'PM')) {
+ if (check_acl($config['id_user'], 0, 'AW')) {
if (isset($_GET['force'])) {
$id = (int) get_parameter_get('force', 0);
servers_force_recon_task($id);
@@ -387,8 +383,10 @@ class DiscoveryTaskList extends Wizard
// Operations.
$table->headstyle[9] .= 'min-width: 150px; width: 150px;';
- $table->head[0] = __('Force');
- $table->align[0] = 'left';
+ if (check_acl($config['id_user'], 0, 'AW')) {
+ $table->head[0] = __('Force');
+ $table->align[0] = 'left';
+ }
$table->head[1] = __('Task name');
$table->align[1] = 'left';
@@ -455,11 +453,13 @@ class DiscoveryTaskList extends Wizard
}
if ($task['disabled'] == 0 && $server_name !== '') {
- $data[0] = '
';
- $data[0] .= html_print_image('images/target.png', true, ['title' => __('Force')]);
- $data[0] .= '';
+ if (check_acl($config['id_user'], 0, 'AW')) {
+ $data[0] = '
';
+ $data[0] .= html_print_image('images/target.png', true, ['title' => __('Force')]);
+ $data[0] .= '';
+ }
} else if ($task['disabled'] == 2) {
$data[0] = ui_print_help_tip(
__('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_CLOUD_AWS_RDS
) {
- $data[9] .= '
';
- $data[9] .= html_print_image(
- 'images/dynamic_network_icon.png',
- true
- );
- $data[9] .= '';
+ if (check_acl($config['id_user'], 0, 'MR')) {
+ $data[9] .= '
';
+ $data[9] .= html_print_image(
+ 'images/dynamic_network_icon.png',
+ true
+ );
+ $data[9] .= '';
+ }
}
if (check_acl(
$config['id_user'],
$task['id_group'],
- 'PM'
+ 'AW'
)
) {
if ($ipam === true) {
@@ -733,6 +735,16 @@ class DiscoveryTaskList extends Wizard
{
if ($script !== false) {
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:
switch ($task['type']) {
case DISCOVERY_CLOUD_AWS_EC2:
@@ -744,16 +756,6 @@ class DiscoveryTaskList extends Wizard
default:
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';
}
}
diff --git a/pandora_console/godmode/wizards/HostDevices.class.php b/pandora_console/godmode/wizards/HostDevices.class.php
index fb9fba2cdd..fd7811f2e9 100755
--- a/pandora_console/godmode/wizards/HostDevices.class.php
+++ b/pandora_console/godmode/wizards/HostDevices.class.php
@@ -87,6 +87,7 @@ class HostDevices extends Wizard
) {
$this->setBreadcrum([]);
+ $this->access = 'AW';
$this->task = [];
$this->msg = $msg;
$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.
*
@@ -116,37 +143,42 @@ class HostDevices extends Wizard
if ($mode === null) {
$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[] = [
- 'url' => $this->url.'&mode=importcsv',
- 'icon' => ENTERPRISE_DIR.'/images/wizard/csv.png',
- 'label' => __('Import CSV'),
+ 'url' => $this->url.'&mode=netscan',
+ 'icon' => 'images/wizard/netscan.png',
+ '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[] = [
- 'url' => $this->url.'&mode=deploy',
- 'icon' => ENTERPRISE_DIR.'/images/wizard/deployment.png',
- 'label' => __('Agent deployment'),
+ 'url' => $this->url.'&mode=customnetscan',
+ 'icon' => '/images/wizard/customnetscan.png',
+ 'label' => __('Custom NetScan'),
];
}
- $buttons[] = [
- 'url' => $this->url.'&mode=customnetscan',
- 'icon' => '/images/wizard/customnetscan.png',
- 'label' => __('Custom NetScan'),
- ];
-
- $buttons[] = [
- 'url' => $this->url.'&mode=managenetscanscripts',
- 'icon' => '/images/wizard/managenetscanscripts.png',
- 'label' => __('Manage NetScan scripts'),
- ];
+ if (check_acl($config['id_user'], 0, 'PM')) {
+ $buttons[] = [
+ 'url' => $this->url.'&mode=managenetscanscripts',
+ 'icon' => '/images/wizard/managenetscanscripts.png',
+ 'label' => __('Manage NetScan scripts'),
+ ];
+ }
$this->prepareBreadcrum(
[
@@ -311,11 +343,11 @@ class HostDevices extends Wizard
) {
// Default values, no data received.
// User is accesing directly to this page.
- if (users_is_admin() !== true && check_acl(
+ if (check_acl(
$config['id_usuario'],
$this->task['id_group'],
- 'PM'
- ) !== true
+ $this->access
+ ) != true
) {
$this->msg = __('You have no access to edit this task.');
return false;
@@ -487,7 +519,7 @@ class HostDevices extends Wizard
check_login();
- if (! check_acl($config['id_user'], 0, 'PM')) {
+ if (! check_acl($config['id_user'], 0, $this->access)) {
db_pandora_audit(
'ACL Violation',
'Trying to access Agent Management'
@@ -529,11 +561,11 @@ class HostDevices extends Wizard
// Check ACL. If user is not able to manage target task,
// redirect him to main page.
- if (users_is_admin() !== true && check_acl(
+ if (check_acl(
$config['id_usuario'],
$this->task['id_group'],
- 'PM'
- ) !== true
+ $this->access
+ ) != true
) {
$form['form']['action'] = $this->url.'&mode=netscan&page='.($this->page - 1);
}
@@ -750,7 +782,7 @@ class HostDevices extends Wizard
[
'name' => 'id_group',
'returnAllGroup' => false,
- 'privilege' => 'PM',
+ 'privilege' => $this->access,
'type' => 'select_groups',
'selected' => $this->task['id_group'],
'return' => true,
diff --git a/pandora_console/godmode/wizards/Wizard.main.php b/pandora_console/godmode/wizards/Wizard.main.php
index 3a65560285..cb29d78c06 100644
--- a/pandora_console/godmode/wizards/Wizard.main.php
+++ b/pandora_console/godmode/wizards/Wizard.main.php
@@ -87,6 +87,13 @@ class Wizard
*/
public $msg;
+ /**
+ * Defines access level to use this util.
+ *
+ * @var string
+ */
+ public $access = 'AR';
+
/**
* Setter for breadcrum
@@ -234,6 +241,42 @@ class Wizard
public function run()
{
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()
{
+ global $config;
+ // Check access.
+ check_login();
+
+ if (! $this->aclMulticheck()) {
+ return false;
+ }
+
return [
'icon' => $this->icon,
'label' => $this->label,
diff --git a/pandora_console/include/ajax/module.php b/pandora_console/include/ajax/module.php
index e34d287da5..bf528cbaca 100755
--- a/pandora_console/include/ajax/module.php
+++ b/pandora_console/include/ajax/module.php
@@ -1113,7 +1113,7 @@ if (check_login()) {
}
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 {
$data[6] = '';
}
diff --git a/pandora_console/include/class/CustomNetScan.class.php b/pandora_console/include/class/CustomNetScan.class.php
index dff9d227e1..77cf514158 100644
--- a/pandora_console/include/class/CustomNetScan.class.php
+++ b/pandora_console/include/class/CustomNetScan.class.php
@@ -65,6 +65,8 @@ class CustomNetScan extends Wizard
$this->url = ui_get_full_url(
'index.php?sec=gservers&sec2=godmode/servers/discovery&wiz=hd'
);
+
+ $this->access = 'AW';
$this->page = $page;
$this->breadcrum = $breadcrum;
}
@@ -77,6 +79,8 @@ class CustomNetScan extends Wizard
*/
public function parseNetScan()
{
+ global $config;
+
if (isset($this->page) === true && $this->page === 0) {
// Check if we're updating a task.
$task_id = get_parameter('task', null);
@@ -145,11 +149,11 @@ class CustomNetScan extends Wizard
) {
// Default values, no data received.
// User is accesing directly to this page.
- if (users_is_admin() !== true && check_acl(
- $config['id_usuario'],
+ if (check_acl(
+ $config['id_user'],
$this->task['id_group'],
- 'PM'
- ) !== true
+ $this->access
+ ) != true
) {
$this->msg = __('You have no access to edit this task.');
return false;
@@ -275,7 +279,7 @@ class CustomNetScan extends Wizard
{
global $config;
- if (!check_acl($config['id_user'], 0, 'PM')) {
+ if (!check_acl($config['id_user'], 0, $this->access)) {
db_pandora_audit(
'ACL Violation',
'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,
// redirect him to main page.
- if (users_is_admin() !== true && check_acl(
- $config['id_usuario'],
+ if (check_acl(
+ $config['id_user'],
$this->task['id_group'],
- 'PM'
- ) !== true
+ $this->access
+ ) != true
) {
$form['form']['action'] = $this->url.'&mode=customnetscan&page='.($this->page - 1);
}
@@ -496,7 +500,7 @@ class CustomNetScan extends Wizard
'arguments' => [
'name' => 'id_group',
'returnAllGroup' => false,
- 'privilege' => 'PM',
+ 'privilege' => $this->access,
'type' => 'select_groups',
'selected' => $this->task['id_group'],
'return' => true,
diff --git a/pandora_console/include/class/ManageNetScanScripts.class.php b/pandora_console/include/class/ManageNetScanScripts.class.php
index efc94cc8b6..c4a61bae37 100644
--- a/pandora_console/include/class/ManageNetScanScripts.class.php
+++ b/pandora_console/include/class/ManageNetScanScripts.class.php
@@ -65,6 +65,8 @@ class ManageNetScanScripts extends Wizard
$this->url = ui_get_full_url(
'index.php?sec=gservers&sec2=godmode/servers/discovery&wiz=hd'
);
+
+ $this->access = 'PM';
$this->page = $page;
$this->breadcrum = $breadcrum;
}
@@ -81,7 +83,7 @@ class ManageNetScanScripts extends Wizard
{
global $config;
- if (check_acl($config['id_user'], 0, 'AW') === 0) {
+ if (check_acl($config['id_user'], 0, $this->access) === 0) {
db_pandora_audit(
'ACL Violation',
'Trying to access Net Scan Script.'
diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php
index ee12eaa36d..90d63add35 100644
--- a/pandora_console/include/config_process.php
+++ b/pandora_console/include/config_process.php
@@ -20,7 +20,7 @@
/**
* Pandora build version and version
*/
-$build_version = 'PC191009';
+$build_version = 'PC191022';
$pandora_version = 'v7.0NG.739';
// Do not overwrite default timezone set if defined.
diff --git a/pandora_console/include/functions_api.php b/pandora_console/include/functions_api.php
index 899add9ec0..2473b5c2af 100644
--- a/pandora_console/include/functions_api.php
+++ b/pandora_console/include/functions_api.php
@@ -1492,7 +1492,7 @@ function api_set_new_agent($thrash1, $thrash2, $other, $thrash3)
global $config;
if (!check_acl($config['id_user'], 0, 'AW')) {
- returnError('forbidden', 'string');
+ returnError('forbidden', 'you havent got permissions to do this');
return;
}
@@ -1500,127 +1500,101 @@ function api_set_new_agent($thrash1, $thrash2, $other, $thrash3)
return;
}
- $alias = $other['data'][0];
- $ip = $other['data'][1];
- $idParent = $other['data'][2];
- $idGroup = $other['data'][3];
- $cascadeProtection = $other['data'][4];
- $cascadeProtectionModule = $other['data'][5];
- $intervalSeconds = $other['data'][6];
- $idOS = $other['data'][7];
- // $idServer = $other['data'][7];
- $nameServer = $other['data'][8];
- $customId = $other['data'][9];
- $learningMode = $other['data'][10];
- $disabled = $other['data'][11];
- $description = $other['data'][12];
- $alias_as_name = $other['data'][13];
+ $alias = io_safe_input(trim(preg_replace('/[\/\\\|%#&$]/', '', $other['data'][0])));
+ $direccion_agente = io_safe_input($other['data'][1]);
+ $nombre_agente = hash('sha256', $direccion_agente.'|'.$direccion_agente.'|'.time().'|'.sprintf('%04d', rand(0, 10000)));
+ $id_parent = (int) $other['data'][2];
+ $grupo = (int) $other['data'][3];
+ $cascade_protection = (int) $other['data'][4];
+ $cascade_protection_module = (int) $other['data'][5];
+ $intervalo = (string) $other['data'][6];
+ $id_os = (int) $other['data'][7];
+ $server_name = (string) $other['data'][8];
+ $custom_id = (string) $other['data'][9];
+ $modo = (int) $other['data'][10];
+ $disabled = (int) $other['data'][11];
+ $comentarios = (string) $other['data'][12];
+ $alias_as_name = (int) $other['data'][13];
+ $update_module_count = (int) $config['metaconsole_agent_cache'] == 1;
- if ($alias_as_name && !empty($alias)) {
- $name = $alias;
- } 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(
+ if ($cascade_protection == 1) {
+ if (($id_parent != 0) && (db_get_value_sql(
'SELECT id_agente_modulo
- FROM tagente_modulo
- WHERE id_agente = '.$idParent.' AND id_agente_modulo = '.$cascadeProtectionModule
+ FROM tagente_modulo
+ WHERE id_agente = '.$id_parent.' AND id_agente_modulo = '.$cascade_protection_module
) === false)
) {
returnError('parent_agent_not_exist', 'Is not a parent module to do cascade protection.');
+ return;
}
} else {
$cascadeProtectionModule = 0;
}
- switch ($config['dbtype']) {
- case 'mysql':
- $sql1 = 'SELECT name
- FROM tserver WHERE BINARY name LIKE "'.$nameServer.'"';
- break;
+ $server_name = db_get_value_sql('SELECT name FROM tserver WHERE BINARY name LIKE "'.$server_name.'"');
- case 'postgresql':
- case 'oracle':
- $sql1 = 'SELECT name
- FROM tserver WHERE name LIKE \''.$nameServer.'\'';
- 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)) {
+ // Check if agent exists (BUG WC-50518-2).
+ if ($alias == '' && $alias_as_name === 0) {
+ returnError('alias_not_specified', 'No agent alias specified');
+ } else if (agents_get_agent_id($name)) {
returnError('agent_name_exist', 'The name of agent yet exist in DB.');
- } else if (db_get_value_sql(
- 'SELECT id_grupo
- FROM tgrupo
- WHERE id_grupo = '.$idGroup
- ) === false
- ) {
+ } else if (db_get_value_sql('SELECT id_grupo FROM tgrupo WHERE id_grupo = '.$grupo) === false) {
returnError('id_grupo_not_exist', 'The group don`t exist.');
- } else if (db_get_value_sql(
- 'SELECT id_os
- FROM tconfig_os
- WHERE id_os = '.$idOS
- ) === false
- ) {
+ } else if (db_get_value_sql('SELECT id_os FROM tconfig_os WHERE id_os = '.$id_os) === false) {
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.');
} else {
- $idAgente = db_process_sql_insert(
- 'tagente',
- [
- '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 ($alias_as_name === 1) {
+ $exists_alias = db_get_row_sql('SELECT nombre FROM tagente WHERE nombre = "'.$alias.'"');
+ $nombre_agente = $alias;
}
- 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(
'SELECT id_policy FROM tpolicy_groups
- WHERE id_group = '.$idGroup
+ WHERE id_group = '.$grupo
);
if ($tpolicy_group_old) {
@@ -1629,18 +1603,54 @@ function api_set_new_agent($thrash1, $thrash2, $other, $thrash3)
'tpolicy_agents',
[
'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(
'string',
[
'type' => 'string',
- 'data' => $idAgente,
+ 'data' => $id_agente,
]
);
}
@@ -6215,9 +6225,8 @@ function api_set_planned_downtimes_created($id, $thrash1, $other, $thrash3)
return;
}
- $date_from = strtotime(html_entity_decode($other['data'][1]));
- $date_to = strtotime(html_entity_decode($other['data'][2]));
-
+ $date_from = strtotime(html_entity_decode($other['data'][1].' '.$other['data'][11]));
+ $date_to = strtotime(html_entity_decode($other['data'][2].' '.$other['data'][12]));
$values = [];
$values['name'] = $id;
$values = [
diff --git a/pandora_console/include/functions_events.php b/pandora_console/include/functions_events.php
index ccbe7f6dd2..9563732c68 100644
--- a/pandora_console/include/functions_events.php
+++ b/pandora_console/include/functions_events.php
@@ -4615,7 +4615,7 @@ function events_page_comments($event, $ajax=false)
foreach ($comm as $c) {
$data[0] = '
'.$c['action'].' by '.$c['id_user'].'';
$data[0] .= '
'.date($config['date_format'], $c['utimestamp']).'';
- $data[1] = $c['comment'];
+ $data[1] = '
'.$c['comment'].'
';
$table_comments->data[] = $data;
}
}
diff --git a/pandora_console/include/functions_networkmap.php b/pandora_console/include/functions_networkmap.php
index e4fb19e814..dda25538ee 100644
--- a/pandora_console/include/functions_networkmap.php
+++ b/pandora_console/include/functions_networkmap.php
@@ -2327,7 +2327,13 @@ function migrate_older_open_maps($id)
$new_map_filter = [];
$new_map_filter['dont_show_subgroups'] = $old_networkmap['dont_show_subgroups'];
$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['description'] = 'Mapa open migrado';
@@ -2340,11 +2346,7 @@ function migrate_older_open_maps($id)
$map_values['source_period'] = 60;
$map_values['source'] = 0;
$map_values['source_data'] = $old_networkmap['id_group'];
- if ($old_networkmap['type'] == 'radial_dinamic') {
- $map_values['generation_method'] = 6;
- } else {
- $map_values['generation_method'] = 4;
- }
+ $map_values['generation_method'] = 3;
$map_values['generated'] = 0;
diff --git a/pandora_console/include/functions_planned_downtimes.php b/pandora_console/include/functions_planned_downtimes.php
index 1147ad97a8..a9b701241b 100644
--- a/pandora_console/include/functions_planned_downtimes.php
+++ b/pandora_console/include/functions_planned_downtimes.php
@@ -796,6 +796,11 @@ function planned_downtimes_created($values)
'return' => false,
'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 {
if (trim(io_safe_output($values['name'])) != '') {
if (!$check) {
diff --git a/pandora_console/include/functions_reporting.php b/pandora_console/include/functions_reporting.php
index 4b5ad466a0..1d0355cf97 100755
--- a/pandora_console/include/functions_reporting.php
+++ b/pandora_console/include/functions_reporting.php
@@ -4191,6 +4191,19 @@ function reporting_sql_graph(
$return['description'] = $content['description'];
$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) {
case 'dinamic':
case 'static':
@@ -4207,6 +4220,16 @@ function reporting_sql_graph(
break;
case 'data':
+ $data = [];
+ foreach ($modules as $key => $value) {
+ $data[$value] = modules_get_agentmodule_data(
+ $value,
+ $content['period'],
+ $report['datetime']
+ );
+ }
+
+ $return['chart'] = $data;
break;
}
@@ -4407,6 +4430,7 @@ function reporting_netflow(
switch ($type) {
case 'dinamic':
case 'static':
+ case 'data':
$return['chart'] = netflow_draw_item(
($report['datetime'] - $content['period']),
$report['datetime'],
@@ -4880,22 +4904,23 @@ function reporting_value($report, $content, $type, $pdf=false)
if ($content['visual_format'] != 2) {
$time_begin = db_get_row_sql('select utimestamp from tagente_datos where id_agente_modulo ='.$content['id_agent_module'], true);
- 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[__('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']) {
switch ($type) {
case 'max':
- $row[__('Maximun')] = format_for_graph(reporting_get_agentmodule_data_max($content['id_agent_module'], $content['lapse'], $i), $config['graph_precision']).' '.$unit;
+ $row[__('Maximun')] = format_for_graph(reporting_get_agentmodule_data_max($content['id_agent_module'], $content['lapse'], ($i + $content['lapse'])), $config['graph_precision']).' '.$unit;
break;
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;
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;
}
} else {
@@ -7561,8 +7586,35 @@ function reporting_custom_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['subtitle'] = io_safe_output($graph['name']);
+ $return['agent_name'] = $agent_alias;
+ $return['module_name'] = $module_name;
$return['description'] = $content['description'];
$return['date'] = reporting_get_date_text(
$report,
@@ -7606,6 +7658,19 @@ function reporting_custom_graph(
);
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') {
diff --git a/pandora_console/include/functions_reports.php b/pandora_console/include/functions_reports.php
index 566b1028dc..319690946e 100755
--- a/pandora_console/include/functions_reports.php
+++ b/pandora_console/include/functions_reports.php
@@ -788,13 +788,15 @@ function reports_get_report_types($template=false, $not_editor=false)
'name' => __('Exception'),
];
if ($config['metaconsole'] != 1) {
- $types['agent_module'] = [
- 'optgroup' => __('Grouped'),
- 'name' => __('Agents/Modules'),
- ];
+ if (!$template) {
+ $types['agent_module'] = [
+ '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')) {
$types['sql'] = [
'optgroup' => __('Grouped'),
diff --git a/pandora_console/include/functions_ui.php b/pandora_console/include/functions_ui.php
index 6c0db1db8f..493cbd1156 100755
--- a/pandora_console/include/functions_ui.php
+++ b/pandora_console/include/functions_ui.php
@@ -39,7 +39,7 @@ if (isset($config['homedir'])) {
/**
- * Transform bbcode to HTML.
+ * Transform bbcode to HTML and truncate log.
*
* @param string $text Text.
* @param array $allowed_tags Allowed_tags.
@@ -48,16 +48,22 @@ if (isset($config['homedir'])) {
*/
function ui_bbcode_to_html($text, $allowed_tags=['[url]'])
{
- if (array_search('[url]', $allowed_tags) !== false) {
- // If link hasn't http, add it.
- if (preg_match('/https?:\/\//', $text)) {
- $html_bbcode = '
$2';
- } else {
- $html_bbcode = '
$2';
- }
-
+ if (array_search('[url]', $allowed_tags) !== false || a) {
// 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 = '
'.$t_text.'';
+ } else {
+ $return = '
'.$t_text.'';
+ }
+ } else {
+ $return = ui_print_truncate_text($text);
+ }
}
return $return;
@@ -2521,9 +2527,22 @@ function ui_print_module_warn_value(
$str_warning,
$max_critical,
$min_critical,
- $str_critical
+ $str_critical,
+ $warning_inverse=0,
+ $critical_inverse=0
) {
- $data = "
";
+ $war_inv = '';
+ $crit_inv = '';
+
+ if ($warning_inverse == 1) {
+ $war_inv = ' (inv)';
+ }
+
+ if ($critical_inverse == 1) {
+ $crit_inv = ' (inv)';
+ }
+
+ $data = "";
if ($max_warning != $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.classes.sPageButton = "'.$pagination_class.'";
dt_'.$table_id.' = $("#'.$table_id.'").DataTable({
- ';
+ drawCallback: function(settings) {';
if (isset($parameters['drawCallback'])) {
- $js .= 'drawCallback: function(settings) {
- '.$parameters['drawCallback'].'
- },';
+ $js .= $parameters['drawCallback'];
}
$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,
serverSide: true,
paging: true,
@@ -3303,6 +3326,7 @@ function ui_print_datatable(array $parameters)
dt_'.$table_id.'.draw().page(0)
});
});
+
';
// Order.
@@ -5650,3 +5674,62 @@ function ui_print_breadcrums($tab_name)
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('
', $comments);
+ $comments = str_replace(["\n", '
'], '
', $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 = ''.date($config['date_format'], $last_comment[0][0]['utimestamp']).' ('.$last_comment[0][0]['id_user'].'): '.$last_comment[0][0]['comment'].'';
+
+ if (strlen($comentario) > '200px') {
+ $comentario = ''.date($config['date_format'], $last_comment[0][0]['utimestamp']).' ('.$last_comment[0][0]['id_user'].'): '.$short_comment.'...';
+ }
+ } else {
+ $rest_time = (time() - $last_comment[0][0]['utimestamp']);
+ $time_last = (($rest_time / 60) / 60);
+ $comentario = ''.number_format($time_last, 0).' Hours ('.$last_comment[0][0]['id_user'].'): '.$last_comment[0][0]['comment'].'';
+
+ if (strlen($comentario) > '200px') {
+ $comentario = ''.number_format($time_last, 0).' Hours ('.$last_comment[0][0]['id_user'].'): '.$short_comment.'...';
+ }
+ }
+
+ return io_safe_output($comentario);
+
+}
diff --git a/pandora_console/include/graphs/flot/pandora.flot.js b/pandora_console/include/graphs/flot/pandora.flot.js
index c62614ccd3..6387bf5442 100644
--- a/pandora_console/include/graphs/flot/pandora.flot.js
+++ b/pandora_console/include/graphs/flot/pandora.flot.js
@@ -172,7 +172,6 @@ function pandoraFlotPieCustom(
show: true,
radius: 5 / 8,
formatter: function(label, series) {
- console.log(series);
return (
'" +
+ (d.getHours() < 10 ? "0" : "") +
+ d.getHours() +
":" +
- (v.getMinutes() < 10 ? "0" : "") +
- v.getMinutes();
+ (d.getMinutes() < 10 ? "0" : "") +
+ d.getMinutes();
return date_format;
}
}
diff --git a/pandora_console/include/graphs/functions_flot.php b/pandora_console/include/graphs/functions_flot.php
index 309ddf364b..eb5596cec4 100644
--- a/pandora_console/include/graphs/functions_flot.php
+++ b/pandora_console/include/graphs/functions_flot.php
@@ -786,6 +786,8 @@ function flot_slicesbar_graph(
// Get a unique identifier to graph
$graph_id = uniqid('graph_');
+ $height = ((int) $height + 15);
+
// Set some containers to legend, graph, timestamp tooltip, etc.
if ($stat_win) {
$return = "
";
@@ -804,8 +806,6 @@ function flot_slicesbar_graph(
$separator2 = ':,:,,,:,:';
// Transform data from our format to library format
- $labels = [];
- $a = [];
$vars = [];
$datacolor = [];
@@ -819,12 +819,12 @@ function flot_slicesbar_graph(
$fontsize = $config['font_size'];
$fontpath = $config['fontpath'];
- $extra_height = 15;
+ $extra_height = 40;
if (defined('METACONSOLE')) {
- $extra_height = 20;
+ $extra_height = 50;
}
- $return .= "";
+ $return .= '';
$maxticks = (int) 20;
@@ -842,11 +842,7 @@ function flot_slicesbar_graph(
$intervaltick = (int) $intervaltick;
- $acumulate = 0;
- $c = 0;
- $acumulate_data = [];
foreach ($graph_data as $label => $values) {
- $labels[] = $label;
$i--;
foreach ($values as $key => $value) {
@@ -857,19 +853,10 @@ function flot_slicesbar_graph(
}
$data[$jsvar][] = $value;
-
- $acumulate_data[$c] = $acumulate;
- $acumulate += $value;
- $c++;
-
- if ($value > $max) {
- $max = $value;
- }
}
}
- // Store serialized data to use it from javascript
- $labels = implode($separator, $labels);
+ // Store serialized data to use it from javascript.
$datacolor = implode($separator, $datacolor);
if (is_array($legend)) {
$legend = io_safe_output(implode($separator, $legend));
@@ -881,19 +868,11 @@ function flot_slicesbar_graph(
$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();
- $datelimit = (($date - $period) * 1000);
+ $datelimit = (($date - $period));
$i = 0;
-
$values2 = [];
-
foreach ($data as $jsvar => $values) {
$values2[] = implode($separator, $values);
$i ++;
@@ -901,10 +880,10 @@ function flot_slicesbar_graph(
$values = implode($separator2, $values2);
- // Javascript code
+ // Javascript code.
$return .= "';
diff --git a/pandora_console/include/javascript/pandora_events.js b/pandora_console/include/javascript/pandora_events.js
index 0fb6c1a6ef..79668406e1 100644
--- a/pandora_console/include/javascript/pandora_events.js
+++ b/pandora_console/include/javascript/pandora_events.js
@@ -63,6 +63,20 @@ function show_event_dialog(event, dialog_page, result) {
height: 600
})
.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");
$("div.vc-countdown").countdown("pause");
diff --git a/pandora_console/include/styles/login.css b/pandora_console/include/styles/login.css
index 8edd7d46c0..f6c072b314 100644
--- a/pandora_console/include/styles/login.css
+++ b/pandora_console/include/styles/login.css
@@ -261,6 +261,7 @@ div.login_button_saml input:hover {
.login_back input {
background-image: url("../../images/back_login.png");
background-position: left 5% center;
+ background-repeat: no-repeat;
}
.login_back input:hover {
diff --git a/pandora_console/include/styles/pandora.css b/pandora_console/include/styles/pandora.css
index 27b3094027..459cc5c54d 100644
--- a/pandora_console/include/styles/pandora.css
+++ b/pandora_console/include/styles/pandora.css
@@ -5888,3 +5888,18 @@ table.table_modal_alternate tr td:first-child {
.fullwidth {
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%;
+}
diff --git a/pandora_console/include/styles/wux.css b/pandora_console/include/styles/wux.css
new file mode 100644
index 0000000000..cd9e3f61e2
--- /dev/null
+++ b/pandora_console/include/styles/wux.css
@@ -0,0 +1,10 @@
+/*
+ * Wux style
+ */
+
+.wux_execution_result_transaction {
+ width: auto;
+ height: auto;
+ float: right;
+ margin-right: 200px;
+}
diff --git a/pandora_console/index.php b/pandora_console/index.php
index 74621dded1..f62a3da4cf 100755
--- a/pandora_console/index.php
+++ b/pandora_console/index.php
@@ -872,12 +872,6 @@ if (! isset($config['id_user'])) {
$loginhash_data = get_parameter('loginhash_data', '');
$loginhash_user = str_rot13(get_parameter('loginhash_user', ''));
$iduser = $_SESSION['id_usuario'];
-
- /*
- * Check why is not available.
- * logoff_db ($iduser, $_SERVER["REMOTE_ADDR"]);
- */
-
unset($_SESSION['id_usuario']);
unset($iduser);
@@ -913,7 +907,6 @@ if (! isset($config['id_user'])) {
$_POST = [];
$config['auth_error'] = __("User doesn\'t exist.");
$iduser = $_SESSION['id_usuario'];
- logoff_db($iduser, $_SERVER['REMOTE_ADDR']);
unset($_SESSION['id_usuario']);
unset($iduser);
include_once 'general/login_page.php';
@@ -933,7 +926,6 @@ if (! isset($config['id_user'])) {
$_POST = [];
$config['auth_error'] = __('User only can use the API.');
$iduser = $_SESSION['id_usuario'];
- logoff_db($iduser, $_SERVER['REMOTE_ADDR']);
unset($_SESSION['id_usuario']);
unset($iduser);
include_once 'general/login_page.php';
@@ -956,7 +948,6 @@ if (file_exists(ENTERPRISE_DIR.'/load_enterprise.php')) {
if (isset($_GET['bye'])) {
include 'general/logoff.php';
$iduser = $_SESSION['id_usuario'];
- db_logoff($iduser, $_SERVER['REMOTE_ADDR']);
$_SESSION = [];
session_destroy();
diff --git a/pandora_console/install.php b/pandora_console/install.php
index 61c9e376fa..9cda61dda8 100644
--- a/pandora_console/install.php
+++ b/pandora_console/install.php
@@ -129,7 +129,7 @@
graph_type == 'boolean') {
+ $fullscale = 1;
+ } else {
+ $fullscale = 0;
+ }
+ }
+
ob_start();
switch ($this->graph_type) {
case 'boolean':
@@ -188,6 +201,7 @@ class ModuleGraph
'menu' => false,
'type_graph' => $config['type_module_charts'],
'vconsole' => true,
+ 'fullscale' => $fullscale,
];
$graph = grafico_modulo_sparse($params);
diff --git a/pandora_console/operation/agentes/gis_view.php b/pandora_console/operation/agentes/gis_view.php
index 139f8f8ae9..352b66f7af 100644
--- a/pandora_console/operation/agentes/gis_view.php
+++ b/pandora_console/operation/agentes/gis_view.php
@@ -97,17 +97,6 @@ echo '
';
html_print_submit_button(__('Refresh path'), 'refresh', false, 'class = "sub upd" style="margin-top:0px"');
echo '';
-// 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
switch ($config['dbtype']) {
case 'mysql':
@@ -147,33 +136,39 @@ switch ($config['dbtype']) {
$result = db_get_all_rows_sql($sql, true);
-if ($result === false) {
- $sql2 = sprintf(
- '
- SELECT current_longitude AS longitude, current_latitude AS latitude, current_altitude AS altitude,
- start_timestamp, description, number_of_packages, manual_placement
- FROM tgis_data_status
- WHERE tagente_id_agente = %d
- ORDER BY start_timestamp DESC
- LIMIT %d OFFSET %d',
- $agentId,
- $config['block_size'],
- (int) get_parameter('offset')
- );
+$sql2 = sprintf(
+ '
+ SELECT current_longitude AS longitude, current_latitude AS latitude, current_altitude AS altitude,
+ start_timestamp, description, number_of_packages, manual_placement
+ FROM tgis_data_status
+ WHERE tagente_id_agente = %d
+ ORDER BY start_timestamp DESC
+ LIMIT %d OFFSET %d',
+ $agentId,
+ $config['block_size'],
+ (int) get_parameter('offset')
+);
$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.'));
+} else {
+ if ($result === false) {
+ $result = $result2;
} else {
$result2[0]['end_timestamp'] = date('Y-m-d H:i:s');
- $result = $result2;
+ array_unshift($result, $result2[0]);
}
}
+
if ($result !== false) {
echo ''.__('Positional data from the last').' '.human_time_description_raw($period).'';
+ // Get the total elements for UI pagination
+ $countData = count($result);
+
if ($countData > 0) {
ui_pagination($countData, false);
}
diff --git a/pandora_console/operation/agentes/pandora_networkmap.view.php b/pandora_console/operation/agentes/pandora_networkmap.view.php
index 77f3d2c8a5..2ee34806d9 100644
--- a/pandora_console/operation/agentes/pandora_networkmap.view.php
+++ b/pandora_console/operation/agentes/pandora_networkmap.view.php
@@ -713,11 +713,7 @@ if (is_ajax()) {
$values['options'] = json_encode($options);
- $return_update = db_process_sql_update('tnetworkmap_enterprise', $values, ['id' => $id_ent_map]);
- if (!$return_update) {
- $return_data['ent'] = false;
- break;
- }
+ db_process_sql_update('tnetworkmap_enterprise', $values, ['id' => $id_ent_map]);
}
}
}
@@ -735,11 +731,7 @@ if (is_ajax()) {
} else {
$values['text_filter'] = 'migrated';
- $return_update = db_process_sql_update('tnetwork_map', $values, ['id_networkmap' => $id_open_map]);
- if (!$return_update) {
- $return_data['open'] = false;
- break;
- }
+ db_process_sql_update('tnetwork_map', $values, ['id_networkmap' => $id_open_map]);
}
}
}
diff --git a/pandora_console/operation/agentes/status_monitor.php b/pandora_console/operation/agentes/status_monitor.php
index 0f7257663a..783c389269 100644
--- a/pandora_console/operation/agentes/status_monitor.php
+++ b/pandora_console/operation/agentes/status_monitor.php
@@ -1541,7 +1541,9 @@ if (!empty($result)) {
$row['str_warning'],
$row['max_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'])) {
diff --git a/pandora_console/operation/events/events.php b/pandora_console/operation/events/events.php
index ece97f1f9a..bc9c59eda5 100644
--- a/pandora_console/operation/events/events.php
+++ b/pandora_console/operation/events/events.php
@@ -280,6 +280,14 @@ if (is_ajax()) {
$events,
function ($carry, $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));
if (strlen($tmp->evento) >= 255) {
$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);
}
+ if ($tmp->comments) {
+ $tmp->comments = ui_print_comments($tmp->comments);
+ }
+
$tmp->agent_name = io_safe_output($tmp->agent_name);
$tmp->ack_utimestamp = ui_print_timestamp(
$tmp->ack_utimestamp,
@@ -1594,6 +1606,28 @@ function process_datatables_callback(table, settings) {
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 += ' ';
+
+ }
+
// Grouped events.
if(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. */
+
+ // Url to agent view.
+ var url_link = '';
+ 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 */
if (item.id_agente > 0) {
- item.agent_name = '' + item.agent_name + '';
+ item.agent_name = '' + item.agent_name + '';
} else {
item.agent_name = '';
}
@@ -1840,11 +1884,11 @@ function process_datatables_item(item) {
- item.id_agente = '' + item.id_agente + '';
+ item.id_agente = '' + item.id_agente + '';
- item.id_agente = '' + item.agent_name + '';
+ item.id_agente = '' + item.agent_name + '';
diff --git a/pandora_console/operation/search_policies.getdata.php b/pandora_console/operation/search_policies.getdata.php
index 5186f1f0a9..1274b17076 100644
--- a/pandora_console/operation/search_policies.getdata.php
+++ b/pandora_console/operation/search_policies.getdata.php
@@ -18,6 +18,11 @@ enterprise_include_once('include/functions_policies.php');
$searchpolicies = check_acl($config['id_user'], 0, 'AW');
+if (!$searchpolicies) {
+ $totalPolicies = 0;
+ return;
+}
+
$selectpolicieIDUp = '';
$selectpolicieIDDown = '';
$selectNameUp = '';
@@ -169,7 +174,7 @@ switch ($sortField) {
break;
}
-if ($searchpolicies == 0) {
+if ($searchpolicies) {
/*
We take the user groups to get policies that meet the requirements of the search
and which the user have permission on this groups
@@ -189,6 +194,7 @@ if ($searchpolicies == 0) {
$policies = db_process_sql($sql);
+
if ($policies !== false) {
$totalPolicies = count($policies);
diff --git a/pandora_console/operation/search_results.php b/pandora_console/operation/search_results.php
index 803a92cdd1..b856f5f14e 100644
--- a/pandora_console/operation/search_results.php
+++ b/pandora_console/operation/search_results.php
@@ -18,7 +18,7 @@ require_once $config['homedir'].'/include/functions_reporting.php';
enterprise_include('operation/reporting/custom_reporting.php');
$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');
$searchMain = true;
$searchHelps = true;
diff --git a/pandora_console/operation/search_users.getdata.php b/pandora_console/operation/search_users.getdata.php
index a39cdf70f1..5e67c90059 100644
--- a/pandora_console/operation/search_users.getdata.php
+++ b/pandora_console/operation/search_users.getdata.php
@@ -18,6 +18,10 @@ require_once $config['homedir'].'/include/functions_users.php';
require_once $config['homedir'].'/include/functions_groups.php';
$searchUsers = check_acl($config['id_user'], 0, 'UM');
+if (!$searchUsers) {
+ $totalUsers = 0;
+ return;
+}
$selectUserIDUp = '';
$selectUserIDDown = '';
diff --git a/pandora_console/operation/search_users.php b/pandora_console/operation/search_users.php
index 8014d5a261..b2232a44f9 100755
--- a/pandora_console/operation/search_users.php
+++ b/pandora_console/operation/search_users.php
@@ -91,7 +91,7 @@ if (!$users || !$searchUsers) {
}
echo ' ';
- ui_pagination($totalUsers);
+ // ui_pagination($totalUsers);
html_print_table($table);
unset($table);
ui_pagination($totalUsers);
diff --git a/pandora_console/operation/users/user_edit.php b/pandora_console/operation/users/user_edit.php
index ec065a6a52..fcc719dfaa 100644
--- a/pandora_console/operation/users/user_edit.php
+++ b/pandora_console/operation/users/user_edit.php
@@ -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/dashboard/main_dashboard'] = 'Dashboard';
$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/agentes/pandora_networkmap'] = 'Network map';
$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 pass = $('input#password-ehorus_user_level_pass').val();
- debugger;
+
var badRequestMessage = '';
var notFoundMessage = '';
var invalidPassMessage = '';
diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec
index 925027ef21..0e72887b26 100644
--- a/pandora_console/pandora_console.redhat.spec
+++ b/pandora_console/pandora_console.redhat.spec
@@ -3,7 +3,7 @@
#
%define name pandorafms_console
%define version 7.0NG.739
-%define release 191009
+%define release 191022
# User and Group under which Apache is running
%define httpd_name httpd
diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec
index 65e9d684ab..f2437d02b6 100644
--- a/pandora_console/pandora_console.rhel7.spec
+++ b/pandora_console/pandora_console.rhel7.spec
@@ -3,7 +3,7 @@
#
%define name pandorafms_console
%define version 7.0NG.739
-%define release 191009
+%define release 191022
# User and Group under which Apache is running
%define httpd_name httpd
diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec
index 089134d0eb..2e1d7a47e0 100644
--- a/pandora_console/pandora_console.spec
+++ b/pandora_console/pandora_console.spec
@@ -3,7 +3,7 @@
#
%define name pandorafms_console
%define version 7.0NG.739
-%define release 191009
+%define release 191022
%define httpd_name httpd
# User and Group under which Apache is running
%define httpd_name apache2
diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control
index 4fdc5d0329..7e7b0644dc 100644
--- a/pandora_server/DEBIAN/control
+++ b/pandora_server/DEBIAN/control
@@ -1,5 +1,5 @@
package: pandorafms-server
-Version: 7.0NG.739-191009
+Version: 7.0NG.739-191022
Architecture: all
Priority: optional
Section: admin
diff --git a/pandora_server/DEBIAN/make_deb_package.sh b/pandora_server/DEBIAN/make_deb_package.sh
index 9aa1162613..f77730bfbe 100644
--- a/pandora_server/DEBIAN/make_deb_package.sh
+++ b/pandora_server/DEBIAN/make_deb_package.sh
@@ -14,7 +14,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
-pandora_version="7.0NG.739-191009"
+pandora_version="7.0NG.739-191022"
package_cpan=0
package_pandora=1
diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm
index 77675ddd89..b185366bea 100644
--- a/pandora_server/lib/PandoraFMS/Config.pm
+++ b/pandora_server/lib/PandoraFMS/Config.pm
@@ -45,7 +45,7 @@ our @EXPORT = qw(
# version: Defines actual version of Pandora Server for this module only
my $pandora_version = "7.0NG.739";
-my $pandora_build = "191009";
+my $pandora_build = "191022";
our $VERSION = $pandora_version." ".$pandora_build;
# Setup hash
diff --git a/pandora_server/lib/PandoraFMS/Core.pm b/pandora_server/lib/PandoraFMS/Core.pm
index ef8a9c18bf..ae67d5ca70 100644
--- a/pandora_server/lib/PandoraFMS/Core.pm
+++ b/pandora_server/lib/PandoraFMS/Core.pm
@@ -1141,21 +1141,21 @@ sub pandora_execute_action ($$$$$$$$$;$) {
#logger($pa_config, "Clean name ".$clean_name, 10);
# User defined alert
if ($action->{'internal'} == 0) {
- $macros{_field1_} = subst_alert_macros ($field1, \%macros, $pa_config, $dbh, $agent, $module);
- $macros{_field2_} = subst_alert_macros ($field2, \%macros, $pa_config, $dbh, $agent, $module);
- $macros{_field3_} = subst_alert_macros ($field3, \%macros, $pa_config, $dbh, $agent, $module);
- $macros{_field4_} = subst_alert_macros ($field4, \%macros, $pa_config, $dbh, $agent, $module);
- $macros{_field5_} = subst_alert_macros ($field5, \%macros, $pa_config, $dbh, $agent, $module);
- $macros{_field6_} = subst_alert_macros ($field6, \%macros, $pa_config, $dbh, $agent, $module);
- $macros{_field7_} = subst_alert_macros ($field7, \%macros, $pa_config, $dbh, $agent, $module);
- $macros{_field8_} = subst_alert_macros ($field8, \%macros, $pa_config, $dbh, $agent, $module);
- $macros{_field9_} = subst_alert_macros ($field9, \%macros, $pa_config, $dbh, $agent, $module);
- $macros{_field10_} = subst_alert_macros ($field10, \%macros, $pa_config, $dbh, $agent, $module);
- $macros{_field11_} = subst_alert_macros ($field11, \%macros, $pa_config, $dbh, $agent, $module);
- $macros{_field12_} = subst_alert_macros ($field12, \%macros, $pa_config, $dbh, $agent, $module);
- $macros{_field13_} = subst_alert_macros ($field13, \%macros, $pa_config, $dbh, $agent, $module);
- $macros{_field14_} = subst_alert_macros ($field14, \%macros, $pa_config, $dbh, $agent, $module);
- $macros{_field15_} = subst_alert_macros ($field15, \%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, $alert);
+ $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, $alert);
+ $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, $alert);
+ $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, $alert);
+ $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, $alert);
+ $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, $alert);
+ $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, $alert);
+ $macros{_field15_} = subst_alert_macros ($field15, \%macros, $pa_config, $dbh, $agent, $module, $alert);
my @command_args = ();
# divide command into words based on quotes and whitespaces
@@ -1186,7 +1186,7 @@ sub pandora_execute_action ($$$$$$$$$;$) {
# 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);
# Email
@@ -1363,12 +1363,12 @@ sub pandora_execute_action ($$$$$$$$$;$) {
# Pandora FMS Event
} elsif ($clean_name eq "Monitoring Event") {
- $field1 = subst_alert_macros ($field1, \%macros, $pa_config, $dbh, $agent, $module);
- $field3 = subst_alert_macros ($field3, \%macros, $pa_config, $dbh, $agent, $module);
- $field4 = subst_alert_macros ($field4, \%macros, $pa_config, $dbh, $agent, $module);
- $field6 = subst_alert_macros ($field6, \%macros, $pa_config, $dbh, $agent, $module);
- $field7 = subst_alert_macros ($field7, \%macros, $pa_config, $dbh, $agent, $module);
- $field8 = subst_alert_macros ($field8, \%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, $alert);
+ $field4 = subst_alert_macros ($field4, \%macros, $pa_config, $dbh, $agent, $module, $alert);
+ $field6 = subst_alert_macros ($field6, \%macros, $pa_config, $dbh, $agent, $module, $alert);
+ $field7 = subst_alert_macros ($field7, \%macros, $pa_config, $dbh, $agent, $module, $alert);
+ $field8 = subst_alert_macros ($field8, \%macros, $pa_config, $dbh, $agent, $module, $alert);
# Field 1 (event text)
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_integria_user = pandora_get_tconfig_token ($dbh, 'integria_user', '');
my $config_integria_user_pass = pandora_get_tconfig_token ($dbh, 'integria_pass', '');
- $field1 = subst_alert_macros ($field1, \%macros, $pa_config, $dbh, $agent, $module);
- $field2 = subst_alert_macros ($field2, \%macros, $pa_config, $dbh, $agent, $module);
- $field3 = subst_alert_macros ($field3, \%macros, $pa_config, $dbh, $agent, $module);
- $field4 = subst_alert_macros ($field4, \%macros, $pa_config, $dbh, $agent, $module);
- $field5 = subst_alert_macros ($field5, \%macros, $pa_config, $dbh, $agent, $module);
- $field6 = subst_alert_macros ($field6, \%macros, $pa_config, $dbh, $agent, $module);
- $field7 = subst_alert_macros ($field7, \%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, $alert);
+ $field3 = subst_alert_macros ($field3, \%macros, $pa_config, $dbh, $agent, $module, $alert);
+ $field4 = subst_alert_macros ($field4, \%macros, $pa_config, $dbh, $agent, $module, $alert);
+ $field5 = subst_alert_macros ($field5, \%macros, $pa_config, $dbh, $agent, $module, $alert);
+ $field6 = subst_alert_macros ($field6, \%macros, $pa_config, $dbh, $agent, $module, $alert);
+ $field7 = subst_alert_macros ($field7, \%macros, $pa_config, $dbh, $agent, $module, $alert);
# Field 1 (Integria IMS API path)
my $api_path = $config_api_path . "/integria/include/api.php";
@@ -1513,8 +1513,7 @@ sub pandora_execute_action ($$$$$$$$$;$) {
} elsif ($clean_name eq "Generate Notification") {
# Translate macros
- $field3 = subst_alert_macros($field3, \%macros, $pa_config, $dbh, $agent, $module);
- $field4 = subst_alert_macros($field4, \%macros, $pa_config, $dbh, $agent, $module);
+ $field3 = subst_alert_macros($field3, \%macros, $pa_config, $dbh, $agent, $module, $alert);
# If no targets ignore notification
if (defined($field1) && defined($field2) && ($field1 ne "" || $field2 ne "")) {
diff --git a/pandora_server/lib/PandoraFMS/DataServer.pm b/pandora_server/lib/PandoraFMS/DataServer.pm
index b7beb919a3..df1cbbecfb 100644
--- a/pandora_server/lib/PandoraFMS/DataServer.pm
+++ b/pandora_server/lib/PandoraFMS/DataServer.pm
@@ -230,7 +230,7 @@ sub data_consumer ($$) {
}
# 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
if (! -f $file_name) {
diff --git a/pandora_server/lib/PandoraFMS/DiscoveryServer.pm b/pandora_server/lib/PandoraFMS/DiscoveryServer.pm
index b2d8e71619..7d90ff411a 100644
--- a/pandora_server/lib/PandoraFMS/DiscoveryServer.pm
+++ b/pandora_server/lib/PandoraFMS/DiscoveryServer.pm
@@ -360,8 +360,9 @@ sub PandoraFMS::Recon::Base::guess_os($$) {
if (-x $self->{'pa_config'}->{'xprobe2'}) {
my $return = `"$self->{pa_config}->{xprobe2}" $device 2>$DEVNULL`;
if ($? == 0) {
- my ($output) = $a =~ /Running OS:(.*)/;
- return pandora_get_os($self->{'dbh'}, $output);
+ if($return =~ /Running OS:(.*)/) {
+ 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`;
return OS_OTHER if ($? != 0);
- my ($output) = $return =~ /Aggressive OS guesses:\s*(.*)/;
- return pandora_get_os($self->{'dbh'}, $output);
+ if ($return =~ /Aggressive OS guesses:\s*(.*)/) {
+ return pandora_get_os($self->{'dbh'}, $1);
+ }
}
return OS_OTHER;
@@ -536,7 +538,7 @@ sub PandoraFMS::Recon::Base::create_agents($$) {
return undef;
}
- if ($agent->{'address'} ne '') {
+ if (defined($agent->{'address'}) && $agent->{'address'} ne '') {
pandora_add_agent_address(
$pa_config, $agent_id, $agent->{'agent_name'},
$agent->{'address'}, $dbh
@@ -582,44 +584,14 @@ sub PandoraFMS::Recon::Base::create_agent($$) {
# Clean name.
$device = clean_blank($device);
- my @agents = get_db_rows($self->{'dbh'},
- 'SELECT * FROM taddress, taddress_agent, tagente
- WHERE tagente.id_agente = taddress_agent.id_agent
- AND taddress_agent.id_a = taddress.id_a
- AND ip = ?', $device
- );
-
- # 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);
- }
+ # Resolve hostnames.
+ my $host_name = (($self->{'resolve_names'} == 1) ? gethostbyaddr(inet_aton($device), AF_INET) : $device);
+ # Fallback to device IP if host name could not be resolved.
+ $host_name = $device if (!defined($host_name) || $host_name eq '');
+ my $agent = locate_agent($self->{'pa_config'}, $self->{'dbh'}, $host_name);
my ($agent_id, $agent_learning);
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);
# Guess the OS.
diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm
index 8321e25620..fa93b3c85b 100644
--- a/pandora_server/lib/PandoraFMS/PluginTools.pm
+++ b/pandora_server/lib/PandoraFMS/PluginTools.pm
@@ -32,7 +32,7 @@ our @ISA = qw(Exporter);
# version: Defines actual version of Pandora Server for this module only
my $pandora_version = "7.0NG.739";
-my $pandora_build = "191009";
+my $pandora_build = "191022";
our $VERSION = $pandora_version." ".$pandora_build;
our %EXPORT_TAGS = ( 'all' => [ qw() ] );
@@ -762,7 +762,7 @@ sub transfer_xml {
my $file_path;
if (! (empty ($name))) {
- $file_name = $name . "." . sprintf("%d",time()) . ".data";
+ $file_name = $name . "." . sprintf("%d",getCurrentUTimeMilis(). (rand()*10000)) . ".data";
}
else {
# Inherit file name
diff --git a/pandora_server/lib/PandoraFMS/Tools.pm b/pandora_server/lib/PandoraFMS/Tools.pm
index df9d5b3901..114718ca6e 100755
--- a/pandora_server/lib/PandoraFMS/Tools.pm
+++ b/pandora_server/lib/PandoraFMS/Tools.pm
@@ -641,19 +641,29 @@ sub logger ($$;$) {
# Set the security level
my $security_level = 'info';
if ($level < 2) {
- $security = 'crit';
+ $security_level = 'crit';
} elsif ($level < 5) {
- $security = 'warn';
+ $security_level = 'warn';
}
openlog('pandora_server', 'ndelay', 'daemon');
syslog($security_level, $message);
closelog();
} 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'";
# Get an exclusive lock on the file (LOCK_EX)
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);
}
}
diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec
index 425636aa97..679a737188 100644
--- a/pandora_server/pandora_server.redhat.spec
+++ b/pandora_server/pandora_server.redhat.spec
@@ -3,7 +3,7 @@
#
%define name pandorafms_server
%define version 7.0NG.739
-%define release 191009
+%define release 191022
Summary: Pandora FMS Server
Name: %{name}
diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec
index a532f5d33e..c1059e3751 100644
--- a/pandora_server/pandora_server.spec
+++ b/pandora_server/pandora_server.spec
@@ -3,7 +3,7 @@
#
%define name pandorafms_server
%define version 7.0NG.739
-%define release 191009
+%define release 191022
Summary: Pandora FMS Server
Name: %{name}
diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer
index d72dae943a..226b940feb 100755
--- a/pandora_server/pandora_server_installer
+++ b/pandora_server/pandora_server_installer
@@ -9,7 +9,7 @@
# **********************************************************************
PI_VERSION="7.0NG.739"
-PI_BUILD="191009"
+PI_BUILD="191022"
MODE=$1
if [ $# -gt 1 ]; then
diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl
index 80e9193355..e071bbc994 100644
--- a/pandora_server/util/pandora_db.pl
+++ b/pandora_server/util/pandora_db.pl
@@ -34,7 +34,7 @@ use PandoraFMS::Config;
use PandoraFMS::DB;
# version: define current version
-my $version = "7.0NG.739 PS191009";
+my $version = "7.0NG.739 PS191022";
# Pandora server configuration
my %conf;
diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl
index 5faea24aa2..75ca74069e 100755
--- a/pandora_server/util/pandora_manage.pl
+++ b/pandora_server/util/pandora_manage.pl
@@ -36,7 +36,7 @@ use Encode::Locale;
Encode::Locale::decode_argv;
# version: define current version
-my $version = "7.0NG.739 PS191009";
+my $version = "7.0NG.739 PS191022";
# save program name for logging
my $progname = basename($0);
diff --git a/pandora_server/util/pandora_smpp.pl b/pandora_server/util/pandora_smpp.pl
index af85d496f5..720d0e9589 100755
--- a/pandora_server/util/pandora_smpp.pl
+++ b/pandora_server/util/pandora_smpp.pl
@@ -19,7 +19,7 @@ Usage:
$0 -server -user -password -source -destination -message [OPTIONS]
-- Comma separated list of destination numbers (+123456789,+234567891,...)
+- Comma separated list of destination numbers (123456789,234567891,...)
OPTIONS:
@@ -45,7 +45,7 @@ OPTIONS:
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
@@ -85,7 +85,7 @@ if (!$config->{'message'}){
my ($smsc_server, $smsc_port) = split /:/, $config->{'server'};
-my @destination_numbers = $config->{'destination'};
+my @destination_numbers = split /,/, $config->{'destination'};
if (!$smsc_port){
$smsc_port = 2775;
|