resolved conflict
This commit is contained in:
commit
e408b4258b
|
@ -1,5 +1,5 @@
|
|||
package: pandorafms-agent-unix
|
||||
Version: 7.0NG.763-220808
|
||||
Version: 7.0NG.763-220810
|
||||
Architecture: all
|
||||
Priority: optional
|
||||
Section: admin
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
pandora_version="7.0NG.763-220808"
|
||||
pandora_version="7.0NG.763-220810"
|
||||
|
||||
echo "Test if you has the tools for to make the packages."
|
||||
whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null
|
||||
|
|
|
@ -1015,7 +1015,7 @@ my $Sem = undef;
|
|||
my $ThreadSem = undef;
|
||||
|
||||
use constant AGENT_VERSION => '7.0NG.763';
|
||||
use constant AGENT_BUILD => '220808';
|
||||
use constant AGENT_BUILD => '220810';
|
||||
|
||||
# Agent log default file size maximum and instances
|
||||
use constant DEFAULT_MAX_LOG_SIZE => 600000;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#
|
||||
%define name pandorafms_agent_unix
|
||||
%define version 7.0NG.763
|
||||
%define release 220808
|
||||
%define release 220810
|
||||
|
||||
Summary: Pandora FMS Linux agent, PERL version
|
||||
Name: %{name}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#
|
||||
%define name pandorafms_agent_unix
|
||||
%define version 7.0NG.763
|
||||
%define release 220808
|
||||
%define release 220810
|
||||
|
||||
Summary: Pandora FMS Linux agent, PERL version
|
||||
Name: %{name}
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
# **********************************************************************
|
||||
|
||||
PI_VERSION="7.0NG.763"
|
||||
PI_BUILD="220808"
|
||||
PI_BUILD="220810"
|
||||
OS_NAME=`uname -s`
|
||||
|
||||
FORCE=0
|
||||
|
|
|
@ -186,7 +186,7 @@ UpgradeApplicationID
|
|||
{}
|
||||
|
||||
Version
|
||||
{220808}
|
||||
{220810}
|
||||
|
||||
ViewReadme
|
||||
{Yes}
|
||||
|
|
|
@ -30,7 +30,7 @@ using namespace Pandora;
|
|||
using namespace Pandora_Strutils;
|
||||
|
||||
#define PATH_SIZE _MAX_PATH+1
|
||||
#define PANDORA_VERSION ("7.0NG.763 Build 220808")
|
||||
#define PANDORA_VERSION ("7.0NG.763 Build 220810")
|
||||
|
||||
string pandora_path;
|
||||
string pandora_dir;
|
||||
|
|
|
@ -11,7 +11,7 @@ BEGIN
|
|||
VALUE "LegalCopyright", "Artica ST"
|
||||
VALUE "OriginalFilename", "PandoraAgent.exe"
|
||||
VALUE "ProductName", "Pandora FMS Windows Agent"
|
||||
VALUE "ProductVersion", "(7.0NG.763(Build 220808))"
|
||||
VALUE "ProductVersion", "(7.0NG.763(Build 220810))"
|
||||
VALUE "FileVersion", "1.0.0.0"
|
||||
END
|
||||
END
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
package: pandorafms-console
|
||||
Version: 7.0NG.763-220808
|
||||
Version: 7.0NG.763-220810
|
||||
Architecture: all
|
||||
Priority: optional
|
||||
Section: admin
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
pandora_version="7.0NG.763-220808"
|
||||
pandora_version="7.0NG.763-220810"
|
||||
|
||||
package_pear=0
|
||||
package_pandora=1
|
||||
|
|
|
@ -38,6 +38,10 @@ ALTER TABLE `tautoconfig` ADD COLUMN `executed` TINYINT UNSIGNED NOT NULL DEFAUL
|
|||
|
||||
ALTER TABLE `tusuario` DROP COLUMN `metaconsole_assigned_server`;
|
||||
|
||||
ALTER TABLE `tipam_network` DROP FOREIGN KEY `tipam_network_ibfk_1`;
|
||||
ALTER TABLE `tipam_network` MODIFY COLUMN `id_recon_task` INT UNSIGNED DEFAULT 0;
|
||||
ALTER TABLE `tipam_network` ADD CONSTRAINT `tipam_network_ibfk_1` FOREIGN KEY (`id_recon_task`) REFERENCES trecon_task(`id_rt`) ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE `tevent_filter` ADD COLUMN `search_secondary_groups` INT NOT NULL DEFAULT 0;
|
||||
|
||||
COMMIT;
|
||||
|
|
|
@ -436,9 +436,22 @@ echo sprintf('<div id="header_table" class="header_table_%s">', $menuTypeClass);
|
|||
);
|
||||
$header_logout .= '</a></div>';
|
||||
|
||||
if (is_reporting_console_node() === true) {
|
||||
echo '<div class="header_left">';
|
||||
echo '<span class="header_title">';
|
||||
echo $config['custom_title_header'];
|
||||
echo '</span>';
|
||||
echo '<span class="header_subtitle">';
|
||||
echo $config['custom_subtitle_header'];
|
||||
echo '</span>';
|
||||
echo '</div>';
|
||||
echo '<div class="header_center"></div>';
|
||||
echo '<div class="header_right">'.$header_support, $header_docu, $header_user, $header_logout.'</div>';
|
||||
} else {
|
||||
echo '<div class="header_left"><span class="header_title">'.$config['custom_title_header'].'</span><span class="header_subtitle">'.$config['custom_subtitle_header'].'</span></div>
|
||||
<div class="header_center">'.$header_searchbar.'</div>
|
||||
<div class="header_right">'.$header_autorefresh, $header_autorefresh_counter, $header_discovery, $servers_list, $header_feedback, $header_support, $header_docu, $header_user, $header_logout.'</div>';
|
||||
}
|
||||
?>
|
||||
</div> <!-- Closes #table_header_inner -->
|
||||
</div> <!-- Closes #table_header -->
|
||||
|
|
|
@ -58,6 +58,10 @@ if (isset($config['autohidden_menu']) === true && (bool) $config['autohidden_men
|
|||
|
||||
// Start of full lateral menu.
|
||||
echo sprintf('<div id="menu_full" class="menu_full_%s">', $menuTypeClass);
|
||||
$url_logo = ui_get_full_url('index.php');
|
||||
if (is_reporting_console_node() === true) {
|
||||
$url_logo = 'index.php?logged=1&sec=discovery&sec2=godmode/servers/discovery&wiz=tasklist';
|
||||
}
|
||||
|
||||
// Header logo.
|
||||
html_print_div(
|
||||
|
@ -65,7 +69,7 @@ html_print_div(
|
|||
'class' => 'logo_green',
|
||||
'content' => html_print_anchor(
|
||||
[
|
||||
'href' => ui_get_full_url('index.php'),
|
||||
'href' => $url_logo,
|
||||
'content' => html_print_header_logo_image(
|
||||
$menuCollapsed,
|
||||
true
|
||||
|
|
|
@ -0,0 +1,103 @@
|
|||
<?php
|
||||
/**
|
||||
* Static page to lock access to console but console reporting
|
||||
*
|
||||
* @category Reporting
|
||||
* @package Pandora FMS
|
||||
* @subpackage Applications
|
||||
* @version 1.0.0
|
||||
* @license See below
|
||||
*
|
||||
* ______ ___ _______ _______ ________
|
||||
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
|
||||
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
|
||||
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
|
||||
*
|
||||
* ============================================================================
|
||||
* Copyright (c) 2005-2022 Artica Soluciones Tecnologicas
|
||||
* Please see http://pandorafms.org for full contribution list
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation for version 2.
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* ============================================================================
|
||||
*/
|
||||
|
||||
global $config;
|
||||
|
||||
// Begin.
|
||||
echo ui_require_css_file('maintenance', 'include/styles/', true);
|
||||
|
||||
$data = [];
|
||||
$data['id_node'] = $config['metaconsole_node_id'];
|
||||
$data['check_ver'] = $config['current_package'];
|
||||
$data['check_mr'] = $config['MR'];
|
||||
$data['collection_max_size'] = $config['collection_max_size'];
|
||||
$data['check_post_max_size'] = ini_get('post_max_size');
|
||||
$data['check_upload_max_filesize'] = ini_get('upload_max_filesize');
|
||||
$data['check_memory_limit'] = ini_get('memory_limit');
|
||||
$data['check_php_version'] = phpversion();
|
||||
|
||||
?>
|
||||
<html>
|
||||
<body class="responsive-height">
|
||||
<div class="responsive center padding-6">
|
||||
<p><?php echo __('Console only reporting node'); ?></p>
|
||||
<br>
|
||||
<br>
|
||||
|
||||
<?php
|
||||
html_print_image(
|
||||
'images/maintenance.png',
|
||||
false,
|
||||
[
|
||||
'class' => 'responsive',
|
||||
'width' => 800,
|
||||
]
|
||||
);
|
||||
?>
|
||||
|
||||
<br>
|
||||
<br>
|
||||
<p><?php echo __('Info'); ?></p>
|
||||
<ul class="container-list">
|
||||
<li>
|
||||
<span class=title>
|
||||
<?php echo __('Version'); ?>:
|
||||
</span>
|
||||
<span>
|
||||
<?php echo $config['current_package']; ?>
|
||||
</span>
|
||||
</li>
|
||||
<li>
|
||||
<span class=title>
|
||||
<?php echo __('Mr'); ?>:
|
||||
</span>
|
||||
<span>
|
||||
<?php echo $config['MR']; ?>
|
||||
</span>
|
||||
</li>
|
||||
<li>
|
||||
<span class=title>
|
||||
<?php echo __('Memory limit'); ?>:
|
||||
</span>
|
||||
<span>
|
||||
<?php echo ini_get('memory_limit'); ?>
|
||||
</span>
|
||||
</li>
|
||||
<li>
|
||||
<span class=title>
|
||||
<?php echo __('Php version'); ?>:
|
||||
</span>
|
||||
<span>
|
||||
<?php echo phpversion(); ?>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -797,13 +797,29 @@ $table = new StdClass();
|
|||
$table->class = 'databox filters';
|
||||
$table->width = '100%';
|
||||
$table->data = [];
|
||||
$table->size[0] = '25%';
|
||||
|
||||
$table->data[0][0] = __('Group filter');
|
||||
$table->data[0][1] = html_print_select_groups(false, $access, $return_all_group, 'filter_group', $filter_group, '', '', '', true, false, true, '', false, 'min-width:180px;margin-right:15px;');
|
||||
$table->data[0][1] = html_print_select_groups(
|
||||
false,
|
||||
$access,
|
||||
$return_all_group,
|
||||
'filter_group',
|
||||
$filter_group,
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
true,
|
||||
false,
|
||||
true,
|
||||
'',
|
||||
false,
|
||||
'min-width:180px;margin-right:15px;'
|
||||
);
|
||||
$table->data[0][2] = __('Recursion').'  '.html_print_checkbox('recursion', 1, $recursion, true, false, '');
|
||||
|
||||
$table->data[1][0] = __('Available agents');
|
||||
$table->data[1][1] = html_print_select($agents, 'id_agents[]', -1, '', _('Any'), -2, true, true, true, '', false, 'width: 180px;');
|
||||
$table->data[1][1] = html_print_select($agents, 'id_agents[]', -1, '', _('Any'), -2, true, true, true, '', false, 'min-width: 250px;width: 70%;');
|
||||
|
||||
|
||||
if ($type_downtime != 'quiet') {
|
||||
|
@ -855,7 +871,7 @@ $table->data[3][1] = html_print_select(
|
|||
true,
|
||||
'',
|
||||
false,
|
||||
'width: 180px;'
|
||||
'min-width: 250px;width: 70%;'
|
||||
);
|
||||
echo '</div>';
|
||||
|
||||
|
|
|
@ -28,15 +28,18 @@
|
|||
|
||||
// Begin.
|
||||
require_once 'include/config.php';
|
||||
require_once 'include/functions_menu.php';
|
||||
|
||||
check_login();
|
||||
|
||||
enterprise_include('godmode/menu.php');
|
||||
require_once 'include/functions_menu.php';
|
||||
|
||||
$access_console_node = !is_reporting_console_node();
|
||||
$menu_godmode = [];
|
||||
$menu_godmode['class'] = 'godmode';
|
||||
|
||||
if ($access_console_node === true) {
|
||||
enterprise_include('godmode/menu.php');
|
||||
}
|
||||
|
||||
if ((bool) check_acl($config['id_user'], 0, 'AR') === true
|
||||
|| (bool) check_acl($config['id_user'], 0, 'AW') === true
|
||||
|| (bool) check_acl($config['id_user'], 0, 'RR') === true
|
||||
|
@ -46,9 +49,11 @@ if ((bool) check_acl($config['id_user'], 0, 'AR') === true
|
|||
$sub = [];
|
||||
$sub['godmode/servers/discovery&wiz=main']['text'] = __('Start');
|
||||
$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';
|
||||
|
||||
if ($access_console_node === true) {
|
||||
if ((bool) check_acl($config['id_user'], 0, 'AW') === true
|
||||
|| (bool) check_acl($config['id_user'], 0, 'PM') === true
|
||||
) {
|
||||
|
@ -73,6 +78,7 @@ if ((bool) check_acl($config['id_user'], 0, 'AR') === true
|
|||
enterprise_hook('cloud_menu');
|
||||
enterprise_hook('console_task_menu');
|
||||
}
|
||||
}
|
||||
|
||||
// Add to menu.
|
||||
$menu_godmode['discovery']['text'] = __('Discovery');
|
||||
|
@ -81,7 +87,7 @@ if ((bool) check_acl($config['id_user'], 0, 'AR') === true
|
|||
$menu_godmode['discovery']['sub'] = $sub;
|
||||
}
|
||||
|
||||
|
||||
if ($access_console_node === true) {
|
||||
$sub = [];
|
||||
if ((bool) check_acl($config['id_user'], 0, 'AW') === true || (bool) check_acl($config['id_user'], 0, 'AD') === true) {
|
||||
$sub['godmode/agentes/modificar_agente']['text'] = __('Manage agents');
|
||||
|
@ -383,6 +389,8 @@ if ((bool) check_acl($config['id_user'], 0, 'PM') === true) {
|
|||
|
||||
$menu_godmode['gsetup']['sub'] = $sub;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ((bool) check_acl($config['id_user'], 0, 'PM') === true || (bool) check_acl($config['id_user'], 0, 'DM') === true) {
|
||||
$menu_godmode['gextensions']['text'] = __('Admin tools');
|
||||
|
@ -392,6 +400,7 @@ if ((bool) check_acl($config['id_user'], 0, 'PM') === true || (bool) check_acl($
|
|||
$sub = [];
|
||||
|
||||
if ((bool) check_acl($config['id_user'], 0, 'PM') === true) {
|
||||
if ($access_console_node === true) {
|
||||
// Audit //meter en extensiones.
|
||||
$sub['godmode/audit_log']['text'] = __('System audit log');
|
||||
$sub['godmode/audit_log']['id'] = 'System audit log';
|
||||
|
@ -404,9 +413,12 @@ if ((bool) check_acl($config['id_user'], 0, 'PM') === true || (bool) check_acl($
|
|||
|
||||
$sub['godmode/setup/news']['text'] = __('Site news');
|
||||
$sub['godmode/setup/news']['id'] = 'Site news';
|
||||
}
|
||||
|
||||
$sub['godmode/setup/file_manager']['text'] = __('File manager');
|
||||
$sub['godmode/setup/file_manager']['id'] = 'File manager';
|
||||
|
||||
if ($access_console_node === true) {
|
||||
if (is_user_admin($config['id_user']) === true) {
|
||||
$sub['extensions/db_status']['text'] = __('DB Schema Check');
|
||||
$sub['extensions/db_status']['id'] = 'DB Schema Check';
|
||||
|
@ -418,10 +430,12 @@ if ((bool) check_acl($config['id_user'], 0, 'PM') === true || (bool) check_acl($
|
|||
enterprise_hook('elasticsearch_interface_menu');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$menu_godmode['gextensions']['sub'] = $sub;
|
||||
}
|
||||
|
||||
if ($access_console_node === true) {
|
||||
if (is_array($config['extensions']) === true) {
|
||||
$sub = [];
|
||||
$sub2 = [];
|
||||
|
@ -523,11 +537,11 @@ foreach ($rows as $row) {
|
|||
}
|
||||
|
||||
$menu_godmode['links']['sub'] = $sub;
|
||||
}
|
||||
|
||||
// Warp Manager.
|
||||
if ((bool) check_acl($config['id_user'], 0, 'PM') === true && (bool) $config['enable_update_manager'] === true) {
|
||||
$menu_godmode['messages']['text'] = __('Warp Update');
|
||||
;
|
||||
$menu_godmode['messages']['id'] = 'god-um_messages';
|
||||
$menu_godmode['messages']['sec2'] = '';
|
||||
|
||||
|
@ -547,6 +561,7 @@ if ((bool) check_acl($config['id_user'], 0, 'PM') === true && (bool) $config['en
|
|||
$menu_godmode['messages']['sub'] = $sub;
|
||||
}
|
||||
|
||||
if ($access_console_node === true) {
|
||||
// Module library.
|
||||
if ((bool) check_acl($config['id_user'], 0, 'AR') === true) {
|
||||
$menu_godmode['gmodule_library']['text'] = __('Module library');
|
||||
|
@ -561,6 +576,7 @@ if ((bool) check_acl($config['id_user'], 0, 'AR') === true) {
|
|||
|
||||
$menu_godmode['gmodule_library']['sub'] = $sub;
|
||||
}
|
||||
}
|
||||
|
||||
if ((bool) $config['pure'] === false) {
|
||||
menu_print_menu($menu_godmode);
|
||||
|
|
|
@ -158,6 +158,12 @@ if ($classname_selected === null) {
|
|||
// Load classes and print selector.
|
||||
$wiz_data = [];
|
||||
foreach ($classes as $classpath) {
|
||||
if (is_reporting_console_node() === true) {
|
||||
if ($classpath !== '/var/www/html/pandora_console/godmode/wizards/DiscoveryTaskList.class.php') {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
$classname = basename($classpath, '.class.php');
|
||||
$obj = new $classname();
|
||||
|
||||
|
|
|
@ -122,7 +122,6 @@ if (isset($_GET['server'])) {
|
|||
|
||||
$buttons = '';
|
||||
|
||||
if ($server_type !== 13) {
|
||||
// Buttons.
|
||||
$buttons = [
|
||||
'standard_editor' => [
|
||||
|
@ -135,13 +134,32 @@ if (isset($_GET['server'])) {
|
|||
],
|
||||
];
|
||||
|
||||
$buttons[$tab]['active'] = true;
|
||||
if ($server_type === SERVER_TYPE_ENTERPRISE_SATELLITE) {
|
||||
$buttons['agent_editor'] = [
|
||||
'active' => false,
|
||||
'text' => '<a href="index.php?sec=gservers&sec2=godmode/servers/modificar_server&server_remote='.$id_server.'&ext='.$ext.'&tab=agent_editor&pure='.$pure.'">'.html_print_image('images/agent.png', true, ['title' => __('Advanced editor')]).'</a>',
|
||||
|
||||
];
|
||||
}
|
||||
|
||||
$buttons[$tab]['active'] = true;
|
||||
|
||||
ui_print_page_header(__('Remote Configuration'), 'images/gm_servers.png', false, 'servers', true, $buttons);
|
||||
|
||||
if ($server_type !== 13 && $tab == 'standard_editor') {
|
||||
if ($tab === 'standard_editor') {
|
||||
$advanced_editor = false;
|
||||
|
||||
if ($server_type === 13) {
|
||||
echo "<table cellpadding='4' cellspacing='4' class='databox filters font_bold margin-bottom-10' width='100%'>
|
||||
<tr>";
|
||||
echo '<td class="w100p">';
|
||||
echo __('Dynamic search').' ';
|
||||
html_print_input_text('search_config_token', $search, '', 12);
|
||||
echo '</td>';
|
||||
echo '</tr></table>';
|
||||
}
|
||||
} else if ($tab === 'agent_editor' && $server_type === SERVER_TYPE_ENTERPRISE_SATELLITE) {
|
||||
$advanced_editor = 'agent_editor';
|
||||
}
|
||||
|
||||
enterprise_include('godmode/servers/server_disk_conf_editor.php');
|
||||
|
|
|
@ -497,6 +497,17 @@ $table->data[$i++][1] = html_print_checkbox_switch(
|
|||
true
|
||||
);
|
||||
|
||||
$table->data[$i][0] = __('Enable console report').ui_print_help_tip(
|
||||
__('Enable console report'),
|
||||
true
|
||||
);
|
||||
$table->data[$i++][1] = html_print_checkbox_switch(
|
||||
'reporting_console_enable',
|
||||
1,
|
||||
$config['reporting_console_enable'],
|
||||
true
|
||||
);
|
||||
|
||||
echo '<form id="form_setup" method="post" action="index.php?sec=gsetup&sec2=godmode/setup/setup&section=general&pure='.$config['pure'].'">';
|
||||
|
||||
echo '<fieldset>';
|
||||
|
|
|
@ -162,7 +162,9 @@ class DiscoveryTaskList extends HTML
|
|||
$ret = false;
|
||||
}
|
||||
|
||||
if (is_reporting_console_node() === false) {
|
||||
$ret2 = $this->showList();
|
||||
}
|
||||
|
||||
if ($ret === false && $ret2 === false) {
|
||||
include_once $config['homedir'].'/general/first_task/recon_view.php';
|
||||
|
|
|
@ -0,0 +1,768 @@
|
|||
<?php
|
||||
// phpcs:disable Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
|
||||
/**
|
||||
* Controller for Audit Logs
|
||||
*
|
||||
* @category Controller
|
||||
* @package Pandora FMS
|
||||
* @subpackage Community
|
||||
* @version 1.0.0
|
||||
* @license See below
|
||||
*
|
||||
* ______ ___ _______ _______ ________
|
||||
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
|
||||
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
|
||||
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
|
||||
*
|
||||
* ============================================================================
|
||||
* Copyright (c) 2005-2022 Artica Soluciones Tecnologicas
|
||||
* Please see http://pandorafms.org for full contribution list
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation for version 2.
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* ============================================================================
|
||||
*/
|
||||
|
||||
use Mpdf\Tag\Address;
|
||||
use PandoraFMS\Agent as PandoraFMSAgent;
|
||||
use PandoraFMS\Enterprise\Agent;
|
||||
|
||||
use function Composer\Autoload\includeFile;
|
||||
|
||||
// Begin.
|
||||
global $config;
|
||||
|
||||
// Necessary classes for extends.
|
||||
require_once $config['homedir'].'/include/class/HTML.class.php';
|
||||
require_once $config['homedir'].'/include/functions_servers.php';
|
||||
enterprise_include_once('include/functions_satellite.php');
|
||||
|
||||
/**
|
||||
* Class SatelliteAgent
|
||||
*/
|
||||
class SatelliteAgent extends HTML
|
||||
{
|
||||
|
||||
/**
|
||||
* Allowed methods to be called using AJAX request.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $AJAXMethods = [
|
||||
'draw',
|
||||
'addAgent',
|
||||
'deleteAgent',
|
||||
'loadModal',
|
||||
];
|
||||
|
||||
/**
|
||||
* Ajax page.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $ajaxController;
|
||||
|
||||
|
||||
/**
|
||||
* Class constructor
|
||||
*
|
||||
* @param string $ajaxController Ajax controller.
|
||||
*/
|
||||
public function __construct(string $ajaxController)
|
||||
{
|
||||
global $config;
|
||||
|
||||
check_login();
|
||||
|
||||
if (check_acl($config['id_user'], 0, 'PM') === false
|
||||
&& is_user_admin($config['id_user']) === true
|
||||
) {
|
||||
db_pandora_audit(
|
||||
AUDIT_LOG_ACL_VIOLATION,
|
||||
'Trying to access Satellite agents'
|
||||
);
|
||||
include 'general/noaccess.php';
|
||||
return;
|
||||
}
|
||||
|
||||
// Set the ajax controller.
|
||||
$this->ajaxController = $ajaxController;
|
||||
// Capture all parameters before start.
|
||||
$this->satellite_server = (int) get_parameter('server_remote');
|
||||
if ($this->satellite_server !== 0) {
|
||||
$this->satellite_name = servers_get_name($this->satellite_server);
|
||||
$this->satellite_config = (array) config_satellite_get_config_file($this->satellite_name);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Run view
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
// Javascript.
|
||||
ui_require_jquery_file('pandora');
|
||||
// CSS.
|
||||
ui_require_css_file('wizard');
|
||||
ui_require_css_file('discovery');
|
||||
|
||||
global $config;
|
||||
// Datatables list.
|
||||
try {
|
||||
$columns = [
|
||||
'name',
|
||||
'address',
|
||||
'actions',
|
||||
];
|
||||
|
||||
$column_names = [
|
||||
__('Agent Name'),
|
||||
__('IP Adrress'),
|
||||
__('Actions'),
|
||||
];
|
||||
|
||||
$this->tableId = 'satellite_agents';
|
||||
|
||||
if (is_metaconsole() === true) {
|
||||
// Only in case of Metaconsole, format the frame.
|
||||
open_meta_frame();
|
||||
}
|
||||
|
||||
// Load datatables user interface.
|
||||
ui_print_datatable(
|
||||
[
|
||||
'id' => $this->tableId,
|
||||
'class' => 'info_table',
|
||||
'style' => 'width: 100%',
|
||||
'columns' => $columns,
|
||||
'column_names' => $column_names,
|
||||
'ajax_url' => $this->ajaxController,
|
||||
'ajax_data' => [
|
||||
'method' => 'draw',
|
||||
'server_remote' => $this->satellite_server,
|
||||
],
|
||||
'ajax_postprocces' => 'process_datatables_item(item)',
|
||||
'no_sortable_columns' => [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
],
|
||||
'search_button_class' => 'sub filter float-right',
|
||||
'form' => [
|
||||
'inputs' => [
|
||||
[
|
||||
'label' => __('Search').ui_print_help_tip(
|
||||
__('Search filter by alias, name, description, IP address or custom fields content'),
|
||||
true
|
||||
),
|
||||
'type' => 'text',
|
||||
'name' => 'filter_search',
|
||||
'size' => 12,
|
||||
],
|
||||
|
||||
],
|
||||
],
|
||||
]
|
||||
);
|
||||
} catch (Exception $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
|
||||
if (is_metaconsole() === true) {
|
||||
// Close the frame.
|
||||
close_meta_frame();
|
||||
}
|
||||
|
||||
// Auxiliar div.
|
||||
$modal = '<div id="modal" class="invisible"></div>';
|
||||
$msg = '<div id="msg" class="invisible"></div>';
|
||||
$aux = '<div id="aux" class="invisible"></div>';
|
||||
|
||||
echo $modal.$msg.$aux;
|
||||
|
||||
// Create button.
|
||||
echo '<div class="w100p flex-content-right">';
|
||||
html_print_submit_button(
|
||||
__('Add host'),
|
||||
'create',
|
||||
false,
|
||||
'class="sub next"'
|
||||
);
|
||||
|
||||
echo '</div>';
|
||||
// Load own javascript file.
|
||||
echo $this->loadJS();
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the data for draw the table.
|
||||
*
|
||||
* @return void.
|
||||
*/
|
||||
public function draw()
|
||||
{
|
||||
global $config;
|
||||
// Initialice filter.
|
||||
$filter = '1=1';
|
||||
// Init data.
|
||||
$data = [];
|
||||
// Count of total records.
|
||||
$count = 0;
|
||||
// Catch post parameters.
|
||||
$start = get_parameter('start', 0);
|
||||
$length = get_parameter('length', $config['block_size']);
|
||||
$order = get_datatable_order(true);
|
||||
$filters = get_parameter('filter', []);
|
||||
|
||||
try {
|
||||
ob_start();
|
||||
$data = [];
|
||||
|
||||
foreach ($this->satellite_config as $line) {
|
||||
$re = '/^#*add_host \b(\S+) (\S*)$/m';
|
||||
|
||||
if (preg_match($re, $line, $matches, PREG_OFFSET_CAPTURE, 0) > 0) {
|
||||
$agent['address'] = $matches[1][0];
|
||||
if (isset($matches[2][0]) === false || empty($matches[2][0]) === true) {
|
||||
$agent['name'] = '';
|
||||
} else {
|
||||
$agent['name'] = $matches[2][0];
|
||||
}
|
||||
|
||||
if (empty($filters['filter_search']) === false) {
|
||||
if (empty(preg_grep('/'.$filters['filter_search'].'?/mi', array_values($agent))) === true) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
array_push($data, $agent);
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($data) === false) {
|
||||
$data = array_reduce(
|
||||
$data,
|
||||
function ($carry, $item) {
|
||||
global $config;
|
||||
// Transforms array of arrays $data into an array
|
||||
// of objects, making a post-process of certain fields.
|
||||
$tmp = (object) $item;
|
||||
|
||||
$tmp->actions .= html_print_image(
|
||||
'images/cross.png',
|
||||
true,
|
||||
[
|
||||
'border' => '0',
|
||||
'class' => 'action_button_img invert_filter',
|
||||
'onclick' => 'delete_agent(\''.$tmp->address.'\',\''.$tmp->name.'\')',
|
||||
]
|
||||
);
|
||||
|
||||
$carry[] = $tmp;
|
||||
return $carry;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
$data = array_slice($data, $start, $length, true);
|
||||
$total = count($data);
|
||||
|
||||
echo json_encode(
|
||||
[
|
||||
'data' => $data,
|
||||
'recordsTotal' => $total,
|
||||
'recordsFiltered' => $total,
|
||||
]
|
||||
);
|
||||
// Capture output.
|
||||
$response = ob_get_clean();
|
||||
} catch (Exception $e) {
|
||||
echo json_encode(['error' => $e->getMessage()]);
|
||||
exit;
|
||||
}
|
||||
|
||||
// If not valid, show error with issue.
|
||||
json_decode($response);
|
||||
if (json_last_error() == JSON_ERROR_NONE) {
|
||||
// If valid dump.
|
||||
echo $response;
|
||||
} else {
|
||||
echo json_encode(
|
||||
['error' => $response]
|
||||
);
|
||||
}
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Prints inputs for modal "Add agent".
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function loadModal()
|
||||
{
|
||||
$values['address'] = get_parameter('address', null);
|
||||
$values['name'] = get_parameter('name', null);
|
||||
|
||||
echo $this->printInputs($values);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Generates inputs for new/update agents.
|
||||
*
|
||||
* @param array $values Values or null.
|
||||
*
|
||||
* @return string Inputs.
|
||||
*/
|
||||
public function printInputs($values=null)
|
||||
{
|
||||
if (!is_array($values)) {
|
||||
$values = [];
|
||||
}
|
||||
|
||||
$return_all_group = false;
|
||||
|
||||
if (users_can_manage_group_all('AR') === true) {
|
||||
$return_all_group = true;
|
||||
}
|
||||
|
||||
$form = [
|
||||
'action' => '#',
|
||||
'id' => 'modal_form',
|
||||
'onsubmit' => 'return false;',
|
||||
'class' => 'modal',
|
||||
];
|
||||
|
||||
$inputs = [];
|
||||
|
||||
$inputs[] = [
|
||||
'label' => __('Agent address'),
|
||||
'id' => 'div-identifier',
|
||||
'arguments' => [
|
||||
'name' => 'address',
|
||||
'type' => 'text',
|
||||
'value' => $values['address'],
|
||||
'return' => true,
|
||||
],
|
||||
];
|
||||
|
||||
$inputs[] = [
|
||||
'label' => __('Agent name'),
|
||||
'id' => 'div-identifier',
|
||||
'arguments' => [
|
||||
'name' => 'name',
|
||||
'type' => 'text',
|
||||
'value' => $values['name'],
|
||||
'return' => true,
|
||||
],
|
||||
];
|
||||
|
||||
return $this->printForm(
|
||||
[
|
||||
'form' => $form,
|
||||
'inputs' => $inputs,
|
||||
],
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Add agent to satellite conf.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function addAgent()
|
||||
{
|
||||
global $config;
|
||||
|
||||
$values['address'] = get_parameter('address');
|
||||
$values['name'] = get_parameter('name');
|
||||
|
||||
if ($this->parseSatelliteConf('save', $values) === false) {
|
||||
$this->ajaxMsg('error', __('Error saving agent'));
|
||||
} else {
|
||||
$this->ajaxMsg('result', _('Host '.$values['addres'].' added.'));
|
||||
}
|
||||
|
||||
exit;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Delete agent from satellite conf.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function deleteAgent()
|
||||
{
|
||||
$values['address'] = get_parameter('address', '');
|
||||
$values['name'] = get_parameter('name', '');
|
||||
|
||||
if ($this->parseSatelliteConf('delete', $values) === false) {
|
||||
$this->ajaxMsg('error', __('Error saving agent'));
|
||||
} else {
|
||||
$this->ajaxMsg('result', _('Host '.$values['addres'].' added.'));
|
||||
}
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Parse satellite configuration .
|
||||
*
|
||||
* @param string $action Action to perform (save, delete).
|
||||
* @param array $values.
|
||||
* @return void
|
||||
*/
|
||||
private function parseSatelliteConf(string $action, array $values)
|
||||
{
|
||||
switch ($action) {
|
||||
case 'save':
|
||||
if (isset($values['address']) === true && empty($values['address']) === false) {
|
||||
$string_hosts = 'add_host '.$values['address'].' '.$values['name']."\n";
|
||||
|
||||
// Add host to conf
|
||||
array_push($this->satellite_config, $string_hosts);
|
||||
|
||||
// Check config.
|
||||
if (empty($this->satellite_config)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$conf = implode('', $this->satellite_config);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'delete':
|
||||
$conf = implode('', $this->satellite_config);
|
||||
// Find agent to mark for deletion.
|
||||
$pattern = io_safe_expreg($values['address'].' '.$values['name']);
|
||||
$re = "/add_host ($pattern)/m";
|
||||
$subst = 'delete_host $1';
|
||||
$conf = preg_replace($re, $subst, $conf);
|
||||
break;
|
||||
|
||||
default:
|
||||
$this->ajaxMsg('error', __('Error'));
|
||||
exit;
|
||||
}
|
||||
|
||||
return $this->saveAgent($conf);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Saves agent to satellite cofiguration file.
|
||||
*
|
||||
* @param array $values
|
||||
* @return void
|
||||
*/
|
||||
private function saveAgent(string $new_conf)
|
||||
{
|
||||
global $config;
|
||||
|
||||
if (empty($new_conf)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
db_pandora_audit(
|
||||
AUDIT_LOG_SYSTEM,
|
||||
'Update remote config for server '.$this->satellite_name
|
||||
);
|
||||
|
||||
// Convert to config file encoding.
|
||||
$encoding = config_satellite_get_encoding($new_conf);
|
||||
if ($encoding !== false) {
|
||||
$converted_server_config = mb_convert_encoding($new_conf, $encoding, 'UTF-8');
|
||||
if ($converted_server_config !== false) {
|
||||
$new_conf = $converted_server_config;
|
||||
}
|
||||
}
|
||||
|
||||
// Get filenames.
|
||||
if ($this->satellite_server !== false) {
|
||||
$files = config_satellite_get_satellite_config_filenames($this->satellite_name);
|
||||
} else {
|
||||
$files = [];
|
||||
$files['conf'] = $config['remote_config'].'/conf/'.md5($this->satellite_name).'.srv.conf';
|
||||
$files['md5'] = $config['remote_config'].'/md5/'.md5($this->satellite_name).'.srv.md5';
|
||||
}
|
||||
|
||||
// Save configuration
|
||||
$result = file_put_contents($files['conf'], $new_conf);
|
||||
|
||||
if ($result === false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Save configuration md5
|
||||
$result = file_put_contents($files['md5'], md5($new_conf));
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Checks if target method is available to be called using AJAX.
|
||||
*
|
||||
* @param string $method Target method.
|
||||
*
|
||||
* @return boolean True allowed, false not.
|
||||
*/
|
||||
public function ajaxMethod(string $method)
|
||||
{
|
||||
return in_array($method, $this->AJAXMethods);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Minor function to dump json message as ajax response.
|
||||
*
|
||||
* @param string $type Type: result || error.
|
||||
* @param string $msg Message.
|
||||
* @param boolean $delete Deletion messages.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function ajaxMsg($type, $msg, $delete=false)
|
||||
{
|
||||
$msg_err = 'Failed while saving: %s';
|
||||
$msg_ok = 'Successfully saved agent ';
|
||||
|
||||
if ($delete) {
|
||||
$msg_err = 'Failed while removing: %s';
|
||||
$msg_ok = 'Successfully deleted ';
|
||||
}
|
||||
|
||||
if ($type == 'error') {
|
||||
echo json_encode(
|
||||
[
|
||||
$type => ui_print_error_message(
|
||||
__(
|
||||
$msg_err,
|
||||
$msg
|
||||
),
|
||||
'',
|
||||
true
|
||||
),
|
||||
]
|
||||
);
|
||||
} else {
|
||||
echo json_encode(
|
||||
[
|
||||
$type => ui_print_success_message(
|
||||
__(
|
||||
$msg_ok,
|
||||
$msg
|
||||
),
|
||||
'',
|
||||
true
|
||||
),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Load Javascript code.
|
||||
*
|
||||
* @return string.
|
||||
*/
|
||||
public function loadJS()
|
||||
{
|
||||
// Nothing for this moment.
|
||||
ob_start();
|
||||
|
||||
// Javascript content.
|
||||
?>
|
||||
<script type="text/javascript">
|
||||
|
||||
/**
|
||||
* Cleanup current dom entries.
|
||||
*/
|
||||
function cleanupDOM() {
|
||||
$('#div-address').empty();
|
||||
$('#div-name').empty();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Process ajax responses and shows a dialog with results.
|
||||
*/
|
||||
function showMsg(data) {
|
||||
var title = "<?php echo __('Success'); ?>";
|
||||
var dt_satellite_agents = $("#satellite_agents").DataTable();
|
||||
|
||||
var text = '';
|
||||
var failed = 0;
|
||||
try {
|
||||
data = JSON.parse(data);
|
||||
text = data['result'];
|
||||
} catch (err) {
|
||||
title = "<?php echo __('Failed'); ?>";
|
||||
text = err.message;
|
||||
failed = 1;
|
||||
}
|
||||
if (!failed && data['error'] != undefined) {
|
||||
title = "<?php echo __('Failed'); ?>";
|
||||
text = data['error'];
|
||||
failed = 1;
|
||||
}
|
||||
if (data['report'] != undefined) {
|
||||
data['report'].forEach(function (item){
|
||||
text += '<br>'+item;
|
||||
});
|
||||
}
|
||||
|
||||
$('#msg').empty();
|
||||
$('#msg').html(text);
|
||||
$('#msg').dialog({
|
||||
width: 450,
|
||||
position: {
|
||||
my: 'center',
|
||||
at: 'center',
|
||||
of: window,
|
||||
collision: 'fit'
|
||||
},
|
||||
title: title,
|
||||
buttons: [
|
||||
{
|
||||
class: "ui-widget ui-state-default ui-corner-all ui-button-text-only sub ok submit-next",
|
||||
text: 'OK',
|
||||
click: function(e) {
|
||||
if (!failed) {
|
||||
$(".ui-dialog-content").dialog("close");
|
||||
$('.info').hide();
|
||||
cleanupDOM();
|
||||
dt_<?php echo $this->tableId; ?>.draw(false);
|
||||
} else {
|
||||
$(this).dialog('close');
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads modal from AJAX to add a new agent.
|
||||
*/
|
||||
|
||||
function show_form(address) {
|
||||
var btn_ok_text = '<?php echo __('OK'); ?>';
|
||||
var btn_cancel_text = '<?php echo __('Cancel'); ?>';
|
||||
var title = '<?php echo __('Add agent to satellite'); ?>';
|
||||
var method = 'addAgent';
|
||||
|
||||
|
||||
load_modal({
|
||||
target: $('#modal'),
|
||||
form: 'modal_form',
|
||||
url: '<?php echo ui_get_full_url('ajax.php', false, false, false); ?>',
|
||||
ajax_callback: showMsg,
|
||||
cleanup: cleanupDOM,
|
||||
modal: {
|
||||
title: title,
|
||||
ok: btn_ok_text,
|
||||
cancel: btn_cancel_text,
|
||||
},
|
||||
extradata: [
|
||||
{
|
||||
name: 'server_remote',
|
||||
value: <?php echo $this->satellite_server; ?>,
|
||||
}
|
||||
],
|
||||
onshow: {
|
||||
page: '<?php echo $this->ajaxController; ?>',
|
||||
method: 'loadModal'
|
||||
},
|
||||
onsubmit: {
|
||||
page: '<?php echo $this->ajaxController; ?>',
|
||||
method: method
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete selected agent
|
||||
*/
|
||||
function delete_agent(address, name) {
|
||||
$('#aux').empty();
|
||||
$('#aux').text('<?php echo __('Are you sure?'); ?>');
|
||||
$('#aux').dialog({
|
||||
title: '<?php echo __('Delete'); ?> ' + address,
|
||||
buttons: [
|
||||
{
|
||||
class: 'ui-widget ui-state-default ui-corner-all ui-button-text-only sub upd submit-cancel',
|
||||
text: '<?php echo __('Cancel'); ?>',
|
||||
click: function(e) {
|
||||
$(this).dialog('close');
|
||||
cleanupDOM();
|
||||
|
||||
}
|
||||
},
|
||||
{
|
||||
text: 'Delete',
|
||||
class: 'ui-widget ui-state-default ui-corner-all ui-button-text-only sub ok submit-next',
|
||||
click: function(e) {
|
||||
$.ajax({
|
||||
method: 'post',
|
||||
url: '<?php echo ui_get_full_url('ajax.php', false, false, false); ?>',
|
||||
data: {
|
||||
page: 'enterprise/godmode/servers/agents_satellite',
|
||||
method: 'deleteAgent',
|
||||
address: address,
|
||||
name: name,
|
||||
server_remote: <?php echo $this->satellite_server; ?>,
|
||||
},
|
||||
datatype: "json",
|
||||
success: function (data) {
|
||||
showMsg(data);
|
||||
},
|
||||
error: function(e) {
|
||||
showMsg(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
|
||||
$("#submit-create").on('click', function(){
|
||||
show_form();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
<?php
|
||||
// EOF Javascript content.
|
||||
return ob_get_clean();
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -20,7 +20,7 @@
|
|||
/**
|
||||
* Pandora build version and version
|
||||
*/
|
||||
$build_version = 'PC220808';
|
||||
$build_version = 'PC220810';
|
||||
$pandora_version = 'v7.0NG.763';
|
||||
|
||||
// Do not overwrite default timezone set if defined.
|
||||
|
|
|
@ -5996,6 +5996,26 @@ function send_test_email(
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check ip is valid into network
|
||||
*
|
||||
* @param string $ip Ip XXX.XXX.XXX.XXX.
|
||||
* @param string $cidr Network XXX.XXX.XXX.XXX/XX.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
function cidr_match($ip, $cidr)
|
||||
{
|
||||
list($subnet, $mask) = explode('/', $cidr);
|
||||
|
||||
if ((ip2long($ip) & ~((1 << (32 - $mask)) - 1) ) == ip2long($subnet)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Microtime float number.
|
||||
*
|
||||
|
@ -6077,3 +6097,123 @@ if (function_exists('str_contains') === false) {
|
|||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Is reporting console node.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
function is_reporting_console_node()
|
||||
{
|
||||
global $config;
|
||||
if (isset($config['reporting_console_enable']) === true
|
||||
&& (bool) $config['reporting_console_enable'] === true
|
||||
&& isset($config['reporting_console_node']) === true
|
||||
&& (bool) $config['reporting_console_node'] === true
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Acl reporting console node.
|
||||
*
|
||||
* @param string $path Path.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
function acl_reporting_console_node($path, $tab='')
|
||||
{
|
||||
global $config;
|
||||
if (is_reporting_console_node() === false) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (is_metaconsole() === true) {
|
||||
if ($path === 'advanced/metasetup') {
|
||||
switch ($tab) {
|
||||
case 'update_manager_online':
|
||||
case 'update_manager_offline':
|
||||
case 'update_manager_history':
|
||||
case 'update_manager_setup':
|
||||
case 'file_manager':
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if ($path === 'advanced/users_setup') {
|
||||
switch ($tab) {
|
||||
case 'user_edit':
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if ($path === $config['homedir'].'/godmode/users/configure_user'
|
||||
|| $path === 'advanced/links'
|
||||
|| $path === $config['homedir'].'/enterprise/extensions/cron'
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if ($path === 'godmode/servers/discovery') {
|
||||
switch ($tab) {
|
||||
case 'main':
|
||||
case 'tasklist':
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if ($path === 'operation/users/user_edit'
|
||||
|| $path === 'operation/users/user_edit_notifications'
|
||||
|| $path === 'godmode/setup/file_manager'
|
||||
|| $path === 'godmode/update_manager/update_manager'
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Necessary checks for the reporting console.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function notify_reporting_console_node()
|
||||
{
|
||||
$return = '';
|
||||
|
||||
// Check php memory limit.
|
||||
$PHPmemory_limit = config_return_in_bytes(ini_get('memory_limit'));
|
||||
if ($PHPmemory_limit !== -1) {
|
||||
$url = 'http://php.net/manual/en/ini.core.php#ini.memory-limit';
|
||||
if ($config['language'] == 'es') {
|
||||
$url = 'http://php.net/manual/es/ini.core.php#ini.memory-limit';
|
||||
}
|
||||
|
||||
$msg = __("Not recommended '%s' value in PHP configuration", $PHPmemory_limit);
|
||||
$msg .= '<br>'.__('Recommended value is: -1');
|
||||
$msg .= '<br>'.__('Please, change it on your PHP configuration file (php.ini) or contact with administrator');
|
||||
$msg .= '<br><a href="'.$url.'" target="_blank">'.__('Documentation').'</a>';
|
||||
|
||||
$return = ui_print_error_message($msg, '', true);
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
|
|
@ -358,6 +358,10 @@ function config_update_config()
|
|||
$error_update[] = __('Module Custom ID read only');
|
||||
}
|
||||
|
||||
if (config_update_value('reporting_console_enable', get_parameter('reporting_console_enable'), true) === false) {
|
||||
$error_update[] = __('Enable console report');
|
||||
}
|
||||
|
||||
if (config_update_value('unique_ip', get_parameter('unique_ip'), true) === false) {
|
||||
$error_update[] = __('Unique IP');
|
||||
}
|
||||
|
@ -2193,6 +2197,10 @@ function config_process_config()
|
|||
config_update_value('module_custom_id_ro', 0);
|
||||
}
|
||||
|
||||
if (!isset($config['reporting_console_enable'])) {
|
||||
config_update_value('reporting_console_enable', 0);
|
||||
}
|
||||
|
||||
if (!isset($config['elasticsearch_ip'])) {
|
||||
config_update_value('elasticsearch_ip', '');
|
||||
}
|
||||
|
|
|
@ -422,10 +422,36 @@ function cron_list_table()
|
|||
array_keys(users_get_groups())
|
||||
);
|
||||
|
||||
$defined_tasks = db_get_all_rows_filter(
|
||||
'tuser_task_scheduled',
|
||||
'id_grupo IN ('.$user_groups.')'
|
||||
$filter = '';
|
||||
if (is_reporting_console_node() === true) {
|
||||
$write_perms = false;
|
||||
$manage_perms = false;
|
||||
$manage_pandora = false;
|
||||
|
||||
$filter .= sprintf(
|
||||
' AND (
|
||||
tuser_task.function_name = "cron_task_generate_report"
|
||||
OR tuser_task.function_name = "cron_task_generate_report_by_template"
|
||||
OR tuser_task.function_name = "cron_task_save_report_to_disk"
|
||||
)'
|
||||
);
|
||||
}
|
||||
|
||||
// Admin.
|
||||
$sql = sprintf(
|
||||
'SELECT tuser_task_scheduled.*
|
||||
FROM tuser_task_scheduled
|
||||
INNER JOIN tuser_task
|
||||
ON tuser_task_scheduled.id_user_task = tuser_task.id
|
||||
WHERE
|
||||
id_grupo IN (%s)
|
||||
%s
|
||||
',
|
||||
$user_groups,
|
||||
$filter
|
||||
);
|
||||
|
||||
$defined_tasks = db_get_all_rows_sql($sql);
|
||||
|
||||
if (!check_acl($config['id_user'], 0, 'PM')) {
|
||||
$read_tasks = [];
|
||||
|
@ -466,7 +492,10 @@ function cron_list_table()
|
|||
$table->head[4] = __('Next execution');
|
||||
$table->head[5] = __('Last run');
|
||||
$table->head[6] = __('Group');
|
||||
if ($manage_perms || $manage_pandora) {
|
||||
$table->head[7] = __('Actions');
|
||||
}
|
||||
|
||||
$table->align[7] = 'left';
|
||||
|
||||
foreach ($defined_tasks as $task) {
|
||||
|
@ -521,7 +550,7 @@ function cron_list_table()
|
|||
break;
|
||||
|
||||
case 'cron_task_generate_report':
|
||||
if ((bool) $task['enabled'] === true && ($write_perms === true || $manage_pandora === true)) {
|
||||
if ((bool) $task['enabled'] === true) {
|
||||
$data[0] = html_print_anchor(
|
||||
[
|
||||
'href' => sprintf(
|
||||
|
@ -576,7 +605,7 @@ function cron_list_table()
|
|||
break;
|
||||
|
||||
case 'cron_task_generate_report_by_template':
|
||||
if ((bool) $task['enabled'] === true && ($write_perms === true || $manage_pandora === true)) {
|
||||
if ((bool) $task['enabled'] === true) {
|
||||
$data[0] = html_print_anchor(
|
||||
[
|
||||
'href' => sprintf(
|
||||
|
@ -928,6 +957,7 @@ function cron_list_table()
|
|||
}
|
||||
}
|
||||
|
||||
if ($manage_perms || $manage_pandora) {
|
||||
$data[7] .= html_print_anchor(
|
||||
[
|
||||
'href' => sprintf(
|
||||
|
@ -947,6 +977,7 @@ function cron_list_table()
|
|||
],
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
array_push($table->data, $data);
|
||||
}
|
||||
|
|
|
@ -539,7 +539,7 @@ class BlockHistogram extends Widget
|
|||
25,
|
||||
false,
|
||||
true,
|
||||
true,
|
||||
true
|
||||
);
|
||||
break;
|
||||
|
||||
|
|
|
@ -10,6 +10,14 @@
|
|||
height: auto;
|
||||
}
|
||||
|
||||
.responsive-height {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-content: center;
|
||||
}
|
||||
|
||||
html {
|
||||
font-size: 18px;
|
||||
font-family: "lato-bolder", "Open Sans", sans-serif;
|
||||
|
@ -58,3 +66,13 @@ a:hover {
|
|||
color: #333;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.container-list {
|
||||
list-style: none;
|
||||
width: 20%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: space-around;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
|
|
@ -605,6 +605,13 @@ if (isset($config['id_user']) === false) {
|
|||
}
|
||||
}
|
||||
|
||||
if (is_reporting_console_node() === true) {
|
||||
$_GET['sec'] = 'discovery';
|
||||
$_GET['sec2'] = 'godmode/servers/discovery';
|
||||
$_GET['wiz'] = 'tasklist';
|
||||
$home_page = '';
|
||||
}
|
||||
|
||||
db_logon($nick_in_db, $_SERVER['REMOTE_ADDR']);
|
||||
$_SESSION['id_usuario'] = $nick_in_db;
|
||||
$config['id_user'] = $nick_in_db;
|
||||
|
@ -624,8 +631,6 @@ if (isset($config['id_user']) === false) {
|
|||
config_prepare_session();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ==========================================================
|
||||
// -------- SET THE CUSTOM CONFIGS OF USER ------------------
|
||||
config_user_set_custom_config();
|
||||
|
@ -1042,6 +1047,13 @@ if ((bool) ($config['maintenance_mode'] ?? false) === true
|
|||
exit('</html>');
|
||||
}
|
||||
|
||||
if (is_reporting_console_node() === true
|
||||
&& (bool) users_is_admin() === false
|
||||
) {
|
||||
include 'general/reporting_console_node.php';
|
||||
exit;
|
||||
}
|
||||
|
||||
/*
|
||||
* ----------------------------------------------------------------------
|
||||
* EXTENSIONS
|
||||
|
@ -1199,6 +1211,10 @@ if ($config['pure'] == 0) {
|
|||
echo '<div id="main">';
|
||||
}
|
||||
|
||||
if (is_reporting_console_node() === true) {
|
||||
echo notify_reporting_console_node();
|
||||
}
|
||||
|
||||
// Page loader / selector.
|
||||
if ($searchPage) {
|
||||
include 'operation/search_results.php';
|
||||
|
@ -1224,6 +1240,17 @@ if ($searchPage) {
|
|||
$sec2 = '';
|
||||
}
|
||||
|
||||
$tab = get_parameter('tab', '');
|
||||
if (empty($tab) === true) {
|
||||
$tab = get_parameter('wiz', '');
|
||||
}
|
||||
|
||||
$acl_reporting_console_node = acl_reporting_console_node($page, $tab);
|
||||
if ($acl_reporting_console_node === false) {
|
||||
include 'general/reporting_console_node.php';
|
||||
exit;
|
||||
}
|
||||
|
||||
$page .= '.php';
|
||||
|
||||
// Enterprise ACL check.
|
||||
|
|
|
@ -129,7 +129,7 @@
|
|||
<div style='height: 10px'>
|
||||
<?php
|
||||
$version = '7.0NG.763';
|
||||
$build = '220808';
|
||||
$build = '220810';
|
||||
$banner = "v$version Build $build";
|
||||
|
||||
error_reporting(0);
|
||||
|
|
|
@ -25,9 +25,11 @@ enterprise_include('operation/menu.php');
|
|||
$menu_operation = [];
|
||||
$menu_operation['class'] = 'operation';
|
||||
|
||||
$access_console_node = !is_reporting_console_node();
|
||||
if ($access_console_node === true) {
|
||||
// Agent read, Server read.
|
||||
if (check_acl($config['id_user'], 0, 'AR')) {
|
||||
// View agents
|
||||
// View agents.
|
||||
$menu_operation['estado']['text'] = __('Monitoring');
|
||||
$menu_operation['estado']['sec2'] = 'operation/agentes/tactical';
|
||||
$menu_operation['estado']['refr'] = 0;
|
||||
|
@ -136,7 +138,7 @@ if (check_acl($config['id_user'], 0, 'LW') || check_acl($config['id_user'], 0, '
|
|||
$sub2['godmode/snmpconsole/snmp_trap_generator']['text'] = __('SNMP trap generator');
|
||||
}
|
||||
|
||||
if (!empty($sub2)) {
|
||||
if (empty($sub2) === false) {
|
||||
$sub['snmpconsole']['sub2'] = $sub2;
|
||||
$sub['snmpconsole']['text'] = __('SNMP');
|
||||
$sub['snmpconsole']['id'] = 'SNMP';
|
||||
|
@ -149,7 +151,6 @@ enterprise_hook('cluster_menu');
|
|||
enterprise_hook('aws_menu');
|
||||
enterprise_hook('SAP_view');
|
||||
|
||||
|
||||
if (!empty($sub)) {
|
||||
$menu_operation['estado']['text'] = __('Monitoring');
|
||||
$menu_operation['estado']['sec2'] = 'operation/agentes/tactical';
|
||||
|
@ -171,6 +172,7 @@ if (check_acl($config['id_user'], 0, 'MR') || check_acl($config['id_user'], 0, '
|
|||
|
||||
enterprise_hook('services_menu');
|
||||
|
||||
|
||||
if (check_acl($config['id_user'], 0, 'VR') || check_acl($config['id_user'], 0, 'VW') || check_acl($config['id_user'], 0, 'VM')) {
|
||||
if (!isset($config['vc_favourite_view']) || $config['vc_favourite_view'] == 0) {
|
||||
// Visual console.
|
||||
|
@ -253,7 +255,6 @@ if (check_acl($config['id_user'], 0, 'VR') || check_acl($config['id_user'], 0, '
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
if (check_acl($config['id_user'], 0, 'MR') || check_acl($config['id_user'], 0, 'MW') || check_acl($config['id_user'], 0, 'MM')) {
|
||||
// INI GIS Maps.
|
||||
if ($config['activate_gis']) {
|
||||
|
@ -469,6 +470,7 @@ if (check_acl($config['id_user'], 0, 'ER')
|
|||
<?php
|
||||
$menu_operation['eventos']['sub'] = $sub;
|
||||
}
|
||||
}
|
||||
|
||||
// Workspace.
|
||||
$menu_operation['workspace']['text'] = __('Workspace');
|
||||
|
@ -487,7 +489,7 @@ $sub['operation/users/user_edit_notifications']['text'] = __('Configure user not
|
|||
$sub['operation/users/user_edit_notifications']['id'] = 'Configure user notifications';
|
||||
$sub['operation/users/user_edit_notifications']['refr'] = 0;
|
||||
|
||||
|
||||
if ($access_console_node === true) {
|
||||
// Incidents.
|
||||
$temp_sec2 = $sec2;
|
||||
$sec2 = 'incident';
|
||||
|
@ -521,10 +523,11 @@ $sub2['operation/messages/message_list']['text'] = __('Messages List');
|
|||
$sub2['operation/messages/message_edit&new_msg=1']['text'] = __('New message');
|
||||
|
||||
$sub['message_list']['sub2'] = $sub2;
|
||||
}
|
||||
|
||||
$menu_operation['workspace']['sub'] = $sub;
|
||||
|
||||
// End Workspace
|
||||
if ($access_console_node === true) {
|
||||
// Rest of options, all with AR privilege (or should events be with incidents?)
|
||||
// ~ if (check_acl ($config['id_user'], 0, "AR")) {
|
||||
// Extensions menu additions.
|
||||
|
@ -621,6 +624,8 @@ if (is_array($config['extensions'])) {
|
|||
}
|
||||
|
||||
// ~ }
|
||||
}
|
||||
|
||||
// Save operation menu array to use in operation/extensions.php view
|
||||
$operation_menu_array = $menu_operation;
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#
|
||||
%define name pandorafms_console
|
||||
%define version 7.0NG.763
|
||||
%define release 220808
|
||||
%define release 220810
|
||||
|
||||
# User and Group under which Apache is running
|
||||
%define httpd_name httpd
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#
|
||||
%define name pandorafms_console
|
||||
%define version 7.0NG.763
|
||||
%define release 220808
|
||||
%define release 220810
|
||||
|
||||
# User and Group under which Apache is running
|
||||
%define httpd_name httpd
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#
|
||||
%define name pandorafms_console
|
||||
%define version 7.0NG.763
|
||||
%define release 220808
|
||||
%define release 220810
|
||||
%define httpd_name httpd
|
||||
# User and Group under which Apache is running
|
||||
%define httpd_name apache2
|
||||
|
|
|
@ -3889,7 +3889,7 @@ CREATE TABLE IF NOT EXISTS `tipam_network` (
|
|||
`name_network` VARCHAR(255) DEFAULT '',
|
||||
`description` TEXT,
|
||||
`location` INT UNSIGNED NULL,
|
||||
`id_recon_task` INT UNSIGNED NOT NULL,
|
||||
`id_recon_task` INT UNSIGNED DEFAULT 0,
|
||||
`scan_interval` TINYINT DEFAULT 1,
|
||||
`monitoring` TINYINT DEFAULT 0,
|
||||
`id_group` MEDIUMINT UNSIGNED NULL DEFAULT 0,
|
||||
|
@ -3898,7 +3898,7 @@ CREATE TABLE IF NOT EXISTS `tipam_network` (
|
|||
`id_site` BIGINT UNSIGNED,
|
||||
`vrf` INT UNSIGNED,
|
||||
PRIMARY KEY (`id`),
|
||||
FOREIGN KEY (`id_recon_task`) REFERENCES trecon_task(`id_rt`) ON DELETE CASCADE,
|
||||
FOREIGN KEY (`id_recon_task`) REFERENCES trecon_task(`id_rt`) ON DELETE SET NULL ON UPDATE CASCADE,
|
||||
FOREIGN KEY (`location`) REFERENCES `tipam_network_location`(`id`) ON DELETE CASCADE,
|
||||
FOREIGN KEY (`id_site`) REFERENCES `tipam_sites`(`id`) ON DELETE SET NULL ON UPDATE CASCADE,
|
||||
FOREIGN KEY (`vrf`) REFERENCES `tagente`(`id_agente`) ON DELETE SET NULL ON UPDATE CASCADE
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
package: pandorafms-server
|
||||
Version: 7.0NG.763-220808
|
||||
Version: 7.0NG.763-220810
|
||||
Architecture: all
|
||||
Priority: optional
|
||||
Section: admin
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
pandora_version="7.0NG.763-220808"
|
||||
pandora_version="7.0NG.763-220810"
|
||||
|
||||
package_cpan=0
|
||||
package_pandora=1
|
||||
|
|
|
@ -46,7 +46,7 @@ our @EXPORT = qw(
|
|||
|
||||
# version: Defines actual version of Pandora Server for this module only
|
||||
my $pandora_version = "7.0NG.763";
|
||||
my $pandora_build = "220808";
|
||||
my $pandora_build = "220810";
|
||||
our $VERSION = $pandora_version." ".$pandora_build;
|
||||
|
||||
# Setup hash
|
||||
|
|
|
@ -34,7 +34,7 @@ our @ISA = qw(Exporter);
|
|||
|
||||
# version: Defines actual version of Pandora Server for this module only
|
||||
my $pandora_version = "7.0NG.763";
|
||||
my $pandora_build = "220808";
|
||||
my $pandora_build = "220810";
|
||||
our $VERSION = $pandora_version." ".$pandora_build;
|
||||
|
||||
our %EXPORT_TAGS = ( 'all' => [ qw() ] );
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#
|
||||
%define name pandorafms_server
|
||||
%define version 7.0NG.763
|
||||
%define release 220808
|
||||
%define release 220810
|
||||
|
||||
Summary: Pandora FMS Server
|
||||
Name: %{name}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#
|
||||
%define name pandorafms_server
|
||||
%define version 7.0NG.763
|
||||
%define release 220808
|
||||
%define release 220810
|
||||
|
||||
Summary: Pandora FMS Server
|
||||
Name: %{name}
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
# **********************************************************************
|
||||
|
||||
PI_VERSION="7.0NG.763"
|
||||
PI_BUILD="220808"
|
||||
PI_BUILD="220810"
|
||||
|
||||
MODE=$1
|
||||
if [ $# -gt 1 ]; then
|
||||
|
|
|
@ -35,7 +35,7 @@ use PandoraFMS::Config;
|
|||
use PandoraFMS::DB;
|
||||
|
||||
# version: define current version
|
||||
my $version = "7.0NG.763 Build 220808";
|
||||
my $version = "7.0NG.763 Build 220810";
|
||||
|
||||
# Pandora server configuration
|
||||
my %conf;
|
||||
|
|
|
@ -36,7 +36,7 @@ use Encode::Locale;
|
|||
Encode::Locale::decode_argv;
|
||||
|
||||
# version: define current version
|
||||
my $version = "7.0NG.763 Build 220808";
|
||||
my $version = "7.0NG.763 Build 220810";
|
||||
|
||||
# save program name for logging
|
||||
my $progname = basename($0);
|
||||
|
|
Loading…
Reference in New Issue