cambio de fuentes cssç

This commit is contained in:
marcos 2021-05-18 13:07:08 +02:00
commit 1650da0f75
106 changed files with 4494 additions and 688 deletions

View File

@ -254,6 +254,8 @@ server_dependencies=" \
perl(Geo::IP) \
perl(IO::Socket::INET6) \
perl(XML::Twig) \
expect \
openssh-clients \
http://firefly.artica.es/centos7/xprobe2-0.3-12.2.x86_64.rpm \
http://firefly.artica.es/centos7/wmic-1.4-1.el7.x86_64.rpm"
execute_cmd "yum install -y $server_dependencies" "Installing Pandora FMS Server dependencies"

View File

@ -11,7 +11,7 @@ RUN dnf install -y --setopt=tsflags=nodocs \
RUN dnf module reset -y php && dnf module install -y php:remi-7.3
RUN dnf config-manager --set-enabled powertools
# Install console
# Install console dependencies
RUN dnf install -y --setopt=tsflags=nodocs \
php \
php-mcrypt \php-cli \
@ -91,9 +91,9 @@ RUN dnf install -y --setopt=tsflags=nodocs \
php-yaml
RUN mkdir -p /run/php-fpm/ ; chown -R root:apache /run/php-fpm/
# not installed perl-Net-Telnet gtk-update-icon-cach ghostscript-fonts
# Not installed perl-Net-Telnet gtk-update-icon-cach ghostscript-fonts
# Install server
# Install server dependencies
RUN dnf install -y --setopt=tsflags=nodocs \
GeoIP \
@ -256,16 +256,18 @@ RUN dnf install -y --setopt=tsflags=nodocs \
nmap \
net-snmp-utils \
sudo \
expect \
openssh-clients \
http://firefly.artica.es/centos8/perl-Net-Telnet-3.04-1.el8.noarch.rpm \
http://firefly.artica.es/centos8/wmi-1.3.14-4.el7.art.x86_64.rpm
http://firefly.artica.es/centos7/wmic-1.4-1.el7.x86_64.rpm
# install utils
# Install utils
RUN dnf install -y supervisor crontabs http://firefly.artica.es/centos8/phantomjs-2.1.1-1.el7.x86_64.rpm --setopt=tsflags=nodocs
# SDK VMware perl dependencies
RUN dnf install -y http://firefly.artica.es/centos8/perl-Crypt-OpenSSL-AES-0.02-1.el8.x86_64.rpm http://firefly.artica.es/centos8/perl-Crypt-SSLeay-0.73_07-1.gf.el8.x86_64.rpm perl-Net-HTTP perl-libwww-perl openssl-devel perl-Crypt-CBC perl-Bytes-Random-Secure perl-Crypt-Random-Seed perl-Math-Random-ISAAC perl-JSON http://firefly.artica.es/centos8/VMware-vSphere-Perl-SDK-6.5.0-4566394.x86_64.rpm
# Instant client Oracle
RUN dnf install -y https://download.oracle.com/otn_software/linux/instantclient/19800/oracle-instantclient19.8-basic-19.8.0.0.0-1.x86_64.rpm https://download.oracle.com/otn_software/linux/instantclient/19800/oracle-instantclient19.8-sqlplus-19.8.0.0.0-1.x86_64.rpm
# Install Phantom
RUN dnf install -y supervisor crontabs http://firefly.artica.es/centos8/phantomjs-2.1.1-1.el7.x86_64.rpm --setopt=tsflags=nodocs

View File

@ -160,9 +160,9 @@ echo "Updating Pandora Server version..."
sed -i -e "s/my\s\s*\$pandora_version\s*=.*/my \$pandora_version = \"$VERSION\";/" "$SERVER_FILE"
sed -i -e "s/my\s\s*\$pandora_build\s*=.*/my \$pandora_build = \"$BUILD\";/" "$SERVER_FILE"
echo "Updating DB maintenance script version..."
sed -i -e "s/my\s\s*\$version\s*=.*/my \$version = \"$VERSION PS$BUILD\";/" "$SERVER_DB_FILE"
sed -i -e "s/my\s\s*\$version\s*=.*/my \$version = \"$VERSION Build $BUILD\";/" "$SERVER_DB_FILE"
echo "Updating CLI script version..."
sed -i -e "s/my\s\s*\$version\s*=.*/my \$version = \"$VERSION PS$BUILD\";/" "$SERVER_CLI_FILE"
sed -i -e "s/my\s\s*\$version\s*=.*/my \$version = \"$VERSION Build $BUILD\";/" "$SERVER_CLI_FILE"
sed -i -e "s/\s*\#\s*\Version.*/\# Version $VERSION/" "$SERVER_CONF_FILE"
sed -i -e "s/\s*\!define PRODUCT_VERSION.*/\!define PRODUCT_VERSION \"$VERSION\"/" "$SERVER_WIN_MPI_OPEN_FILE"
sed -i -e "s/\s*\!define PRODUCT_VERSION.*/\!define PRODUCT_VERSION \"$VERSION\"/" "$SERVER_WIN_MPI_ENT_FILE"
@ -197,7 +197,7 @@ echo "Updating Pandora Unix Agent version..."
sed -i -e "s/\s*use\s*constant\s*AGENT_VERSION =>.*/use constant AGENT_VERSION => '$VERSION';/" "$AGENT_UNIX_FILE"
sed -i -e "s/\s*use\s*constant\s*AGENT_BUILD =>.*/use constant AGENT_BUILD => '$BUILD';/" "$AGENT_UNIX_FILE"
echo "Updating Pandora Windows Agent version..."
sed -i -e "s/\s*#define\s*PANDORA_VERSION\s*.*/#define PANDORA_VERSION (\"$VERSION(Build $BUILD)\")/" "$AGENT_WIN_FILE"
sed -i -e "s/\s*#define\s*PANDORA_VERSION\s*.*/#define PANDORA_VERSION (\"$VERSION Build $BUILD\")/" "$AGENT_WIN_FILE"
sed -i -e "s/{Pandora FMS Windows Agent v.*}/{Pandora FMS Windows Agent v$VERSION}/" "$AGENT_WIN_MPI_FILE"
NUMERIC_VERSION=$(echo $VERSION | sed -e "s/\([0-9]*\.[0-9]*\).*/\1/")
sed -i -n "1h;1!H;\${;g;s/[\r\n]InstallVersion[\r\n]{\S*}/\nInstallVersion\n{$NUMERIC_VERSION.0.0}/g;p;}" "$AGENT_WIN_MPI_FILE"

View File

@ -1,5 +1,5 @@
package: pandorafms-agent-unix
Version: 7.0NG.754-210511
Version: 7.0NG.754-210518
Architecture: all
Priority: optional
Section: admin

View File

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

View File

@ -1015,7 +1015,7 @@ my $Sem = undef;
my $ThreadSem = undef;
use constant AGENT_VERSION => '7.0NG.754';
use constant AGENT_BUILD => '210511';
use constant AGENT_BUILD => '210518';
# Agent log default file size maximum and instances
use constant DEFAULT_MAX_LOG_SIZE => 600000;
@ -1229,7 +1229,8 @@ use constant MAX_LOOP_COUNTER => 1000000000;
# Print usage information and exit.
################################################################################
sub print_usage () {
print "\nUsage: $0 <Pandora home>\n\n";
print "Pandora FMS Agent for Linux v" . AGENT_VERSION . " Build " . AGENT_BUILD . "\n\n";
print "Usage: $0 <Pandora home>\n\n";
print "\tPandora home is the directory where pandora_agent.conf is located,\n";
print "\tby default /etc/pandora.\n\n";
exit 1;
@ -2330,9 +2331,6 @@ sub launch_tentacle_proxy () {
#Execute tentacle server as a daemon
my $new_process = "tentacle_server -a ".$Conf{'proxy_address'}." -p ".$Conf{'proxy_port'}." -b ".$Conf{'server_ip'}." -g ".$Conf{'server_port'}." -c ".$Conf{'proxy_max_connection'}." -t ".$Conf{'proxy_timeout'};
$new_process .= ' -C' if ($Conf{'server_ssl'} eq '1');
log_message ('setup', 'Proxy mode enabled');
exec ($new_process);
}

View File

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

View File

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

View File

@ -10,7 +10,7 @@
# **********************************************************************
PI_VERSION="7.0NG.754"
PI_BUILD="210511"
PI_BUILD="210518"
OS_NAME=`uname -s`
FORCE=0
@ -152,8 +152,8 @@ uninstall () {
fi
# Stops the agent on uninstall
if [ -f $PANDORA_BASE/etc/init.d/pandora_agent_daemon ]; then
$PANDORA_BASE/etc/init.d/pandora_agent_daemon stop 12> /dev/null
if [ -f /etc/init.d/pandora_agent_daemon ]; then
/etc/init.d/pandora_agent_daemon stop 12> /dev/null
else
echo "$PANDORA_BASE/etc/init.d/pandora_agent_daemon not found to stop agent"
fi

View File

@ -186,7 +186,7 @@ UpgradeApplicationID
{}
Version
{210511}
{210518}
ViewReadme
{Yes}

View File

@ -115,8 +115,8 @@ main (int argc, char *argv[]) {
return 0;
} else if (_stricmp(argv[i], HELP_CMDLINE_PARAM) == 0) {
/* Help parameter */
cout << "Pandora agent for Windows. ";
cout << "Version " << getPandoraAgentVersion () << endl;
cout << "Pandora agent for Windows ";
cout << "v" << getPandoraAgentVersion () << endl << endl;
cout << "Usage: " << argv[0] << " [OPTION]" << endl << endl;
cout << "Available options are:" << endl;
cout << "\t" << SERVICE_INSTALL_CMDLINE_PARAM;

View File

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

View File

@ -423,7 +423,7 @@ Pandora_Windows_Service::killTentacleProxy() {
int
Pandora_Windows_Service::launchTentacleProxy() {
string server_ip, server_port, proxy_max_connections, proxy_timeout, server_ssl;
string server_ip, server_port, proxy_max_connections, proxy_timeout;
string proxy_cmd, proxy_address, proxy_port;
PROCESS_INFORMATION pi;
STARTUPINFO si;
@ -451,15 +451,6 @@ Pandora_Windows_Service::launchTentacleProxy() {
server_port = "41121";
}
server_ssl = conf->getValue("server_ssl");
if (server_ssl == "1") {
proxy_cmd = "tentacle_server.exe -C";
}
else {
proxy_cmd = "tentacle_server.exe";
}
// Proxy address.
proxy_address = conf->getValue("proxy_address");
if (proxy_address == "") {
@ -472,7 +463,7 @@ Pandora_Windows_Service::launchTentacleProxy() {
proxy_port = "41121";
}
proxy_cmd += " -b " + server_ip + " -g " + server_port + " -c " + proxy_max_connections + " -t " + proxy_timeout + " -a " + proxy_address + " -p " + proxy_port;
proxy_cmd = "tentacle_server.exe -b " + server_ip + " -g " + server_port + " -c " + proxy_max_connections + " -t " + proxy_timeout + " -a " + proxy_address + " -p " + proxy_port;
ZeroMemory (&si, sizeof (si));
ZeroMemory (&pi, sizeof (pi));

View File

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

View File

@ -1,5 +1,5 @@
package: pandorafms-console
Version: 7.0NG.754-210511
Version: 7.0NG.754-210518
Architecture: all
Priority: optional
Section: admin

View File

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

View File

@ -42,6 +42,10 @@ function pandora_realtime_graphs()
global $config;
check_login();
if ($config['style'] === 'pandora_black') {
ui_require_css_file('pandora_black', 'include/styles/', true);
}
$id_network = get_parameter('id_network', 0);
$action = get_parameter('action', 'list');
@ -66,8 +70,8 @@ function pandora_realtime_graphs()
$long_index = [];
$no_data_image = '';
$canvas = '<div id="graph_container">';
$canvas .= '<div id="chartLegend"></div>';
$canvas = '<div id="graph_container" class="graph_container">';
$canvas .= '<div id="chartLegend" class="chartLegend"></div>';
$width = 800;
$height = 300;
@ -239,7 +243,9 @@ function pandora_realtime_graphs()
echo '<script type="text/javascript" src="'.ui_get_full_url('include/javascript/pandora_snmp_browser.js').'"></script>';
echo '<script type="text/javascript" src="'.ui_get_full_url('extensions/realtime_graphs/realtime_graphs.js').'"></script>';
echo '<link rel="stylesheet" type="text/css" href="'.ui_get_full_url('extensions/realtime_graphs/realtime_graphs.css').'"></style>';
if ($config['style'] !== 'pandora_black') {
echo '<link rel="stylesheet" type="text/css" href="'.ui_get_full_url('extensions/realtime_graphs/realtime_graphs.css').'"></style>';
}
// Store servers timezone offset to be retrieved from js.
set_js_value('timezone_offset', date('Z', time()));

View File

@ -74,6 +74,10 @@ enterprise/extensions/ipam
enterprise/extensions/disabled/visual_console_manager.php
enterprise/extensions/visual_console_manager.php
pandora_console/extensions/net_tools.php
enterprise/godmode/agentes/module_manager_editor_web.php
enterprise/include/ajax/web_server_module_debug.php
enterprise/include/class/WebServerModuleDebug.class.php
enterprise/include/styles/WebServerModuleDebug.css
include/lib/WSManager.php
include/lib/WebSocketServer.php
include/lib/WebSocketUser.php

View File

@ -0,0 +1,14 @@
START TRANSACTION;
ALTER TABLE `tusuario` ADD COLUMN `integria_user_level_user` VARCHAR(60);
ALTER TABLE `tusuario` ADD COLUMN `integria_user_level_pass` VARCHAR(45);
ALTER TABLE `tperfil` DROP COLUMN `incident_view`;
ALTER TABLE `tperfil` DROP COLUMN `incident_edit`;
ALTER TABLE `tperfil` DROP COLUMN `incident_management`;
ALTER TABLE `talert_snmp_action` ADD COLUMN `al_field16` TEXT NOT NULL AFTER `al_field15`;
ALTER TABLE `talert_snmp_action` ADD COLUMN `al_field17` TEXT NOT NULL AFTER `al_field16`;
ALTER TABLE `talert_snmp_action` ADD COLUMN `al_field18` TEXT NOT NULL AFTER `al_field17`;
ALTER TABLE `talert_snmp_action` ADD COLUMN `al_field19` TEXT NOT NULL AFTER `al_field18`;
ALTER TABLE `talert_snmp_action` ADD COLUMN `al_field20` TEXT NOT NULL AFTER `al_field19`;
COMMIT;

View File

@ -1334,6 +1334,11 @@ ALTER TABLE talert_snmp_action ADD COLUMN `al_field12` TEXT NOT NULL DEFAULT "";
ALTER TABLE talert_snmp_action ADD COLUMN `al_field13` TEXT NOT NULL DEFAULT "";
ALTER TABLE talert_snmp_action ADD COLUMN `al_field14` TEXT NOT NULL DEFAULT "";
ALTER TABLE talert_snmp_action ADD COLUMN `al_field15` TEXT NOT NULL DEFAULT "";
ALTER TABLE `talert_snmp_action` ADD COLUMN `al_field16` TEXT NOT NULL AFTER `al_field15`;
ALTER TABLE `talert_snmp_action` ADD COLUMN `al_field17` TEXT NOT NULL AFTER `al_field16`;
ALTER TABLE `talert_snmp_action` ADD COLUMN `al_field18` TEXT NOT NULL AFTER `al_field17`;
ALTER TABLE `talert_snmp_action` ADD COLUMN `al_field19` TEXT NOT NULL AFTER `al_field18`;
ALTER TABLE `talert_snmp_action` ADD COLUMN `al_field20` TEXT NOT NULL AFTER `al_field19`;
-- ----------------------------------------------------------------------
-- Table `tserver`
@ -1527,6 +1532,8 @@ ALTER TABLE `tusuario` MODIFY COLUMN `default_event_filter` int(10) unsigned NOT
ADD CONSTRAINT `fk_filter_id` FOREIGN KEY `fk_filter_id` (`id_filter`) REFERENCES `tevent_filter` (`id_filter`) ON DELETE SET NULL ON UPDATE RESTRICT,
DROP FOREIGN KEY `fk_id_filter`,
DROP INDEX `fk_id_filter`;
ALTER TABLE `tusuario` ADD COLUMN `integria_user_level_user` VARCHAR(60);
ALTER TABLE `tusuario` ADD COLUMN `integria_user_level_pass` VARCHAR(45);
-- ---------------------------------------------------------------------
@ -4025,3 +4032,6 @@ DELETE FROM `tconfig` WHERE `token` = 'ipam_installed';
DELETE FROM `tconfig` WHERE `token` = 'ipam_recon_script_id';
ALTER TABLE `tperfil` DROP COLUMN `incident_view`;
ALTER TABLE `tperfil` DROP COLUMN `incident_edit`;
ALTER TABLE `tperfil` DROP COLUMN `incident_management`;

View File

@ -88,7 +88,6 @@ if (check_acl($config['id_user'], 0, 'AW')
|| check_acl($config['id_user'], 0, 'LM')
|| check_acl($config['id_user'], 0, 'UM')
|| check_acl($config['id_user'], 0, 'LW')
|| check_acl($config['id_user'], 0, 'IW')
|| check_acl($config['id_user'], 0, 'EW')
|| check_acl($config['id_user'], 0, 'DW')
) {

View File

@ -39,7 +39,7 @@ $offset = (int) get_parameter('offset', 0);
// See if id_agente is set (either POST or GET, otherwise -1
$id_agent = (int) get_parameter('id_agente');
$groups = users_get_groups($config['id_user'], 'IR');
$groups = users_get_groups($config['id_user'], 'AR');
$filter = ' AND id_agent = '.$id_agent;
$url = 'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=incident&id_agente='.$id_agent;
@ -55,7 +55,7 @@ $params = [
agents_get_name($id_agent),
];
$result = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_incidents', $params, false, 'json', ',');
$result = integria_api_call(null, null, null, null, 'get_incidents', $params, false, 'json', ',');
$result = json_decode($result, true);

View File

@ -1,22 +1,38 @@
<?php
/**
* Module Manager main script.
*
* @category Module
* @package Pandora FMS
* @subpackage Agent Configuration
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation for version 2.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* ============================================================================
*/
// Pandora FMS - http://pandorafms.com
// ==================================================
// Copyright (c) 2005-2021 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.
// You can redefine $url and unset $id_agente to reuse the form. Dirty (hope temporal) hack
if (isset($id_agente)) {
$url = 'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=module&id_agente='.$id_agente;
} else {
$url = 'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=module';
}
// You can redefine $url and unset $id_agente to reuse the form. Dirty (hope temporal) hack.
$url_id_agente = (isset($id_agente) === true) ? '&id_agente='.$id_agente : '';
$url = sprintf(
'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=module%s',
$url_id_agente
);
enterprise_include('godmode/agentes/module_manager.php');
$isFunctionPolicies = enterprise_include_once('include/functions_policies.php');
@ -56,7 +72,7 @@ echo __('Search').' '.html_print_input_text(
);
html_print_input_hidden('search', 1);
// Search string filter form.
if (($policy_page) || (isset($agent))) {
if (($policy_page !== false) || (isset($agent) === true)) {
echo '<form id="" method="post" action="">';
} else {
echo '<form id="create_module_type" method="post" action="'.$url.'">';
@ -73,25 +89,31 @@ echo '</form>';
$network_available = db_get_sql(
'SELECT count(*)
FROM tserver
WHERE server_type = 1'
WHERE server_type = '.SERVER_TYPE_NETWORK
);
// POSTGRESQL AND ORACLE COMPATIBLE.
$wmi_available = db_get_sql(
'SELECT count(*)
FROM tserver
WHERE server_type = 6'
WHERE server_type = '.SERVER_TYPE_WMI
);
// POSTGRESQL AND ORACLE COMPATIBLE.
$plugin_available = db_get_sql(
'SELECT count(*)
FROM tserver
WHERE server_type = 4'
WHERE server_type = '.SERVER_TYPE_PLUGIN
);
// POSTGRESQL AND ORACLE COMPATIBLE.
$prediction_available = db_get_sql(
'SELECT count(*)
FROM tserver
WHERE server_type = 5'
WHERE server_type = '.SERVER_TYPE_PREDICTION
);
// POSTGRESQL AND ORACLE COMPATIBLE.
$web_available = db_get_sql(
'SELECT count(*)
FROM tserver
WHERE server_type = '.SERVER_TYPE_WEB
);
// POSTGRESQL AND ORACLE COMPATIBLE.
// Development mode to use all servers.
@ -122,6 +144,10 @@ if ($prediction_available) {
$modules['predictionserver'] = __('Create a new prediction server module');
}
if ($web_available) {
$modules['webserver'] = __('Create a new web Server module');
}
if (enterprise_installed()) {
set_enterprise_module_types($modules);
}
@ -298,6 +324,7 @@ if ($module_action === 'delete') {
switch ($config['dbtype']) {
case 'mysql':
case 'postgresql':
default:
$result = db_process_sql_delete(
'tagente_estado',
['id_agente_modulo' => $id_agent_module_del]
@ -388,10 +415,8 @@ if ($module_action === 'delete') {
}
}
// Check for errors.
if ($error != 0) {
} else {
if ((int) $error == 0) {
$count_correct_delete_modules++;
}
}
@ -489,6 +514,7 @@ switch ($sortField) {
switch ($config['dbtype']) {
case 'mysql':
case 'postgresql':
default:
$order[] = [
'field' => 'tagente_modulo.nombre',
'order' => 'ASC',
@ -509,6 +535,7 @@ switch ($sortField) {
switch ($config['dbtype']) {
case 'mysql':
case 'postgresql':
default:
$order[] = [
'field' => 'tagente_modulo.nombre',
'order' => 'DESC',
@ -523,6 +550,10 @@ switch ($sortField) {
break;
}
break;
default:
// Do none.
break;
}
break;
@ -543,6 +574,10 @@ switch ($sortField) {
'order' => 'DESC',
];
break;
default:
// Do none.
break;
}
break;
@ -563,6 +598,10 @@ switch ($sortField) {
'order' => 'DESC',
];
break;
default:
// Do none.
break;
}
break;
@ -583,6 +622,10 @@ switch ($sortField) {
'order' => 'DESC',
];
break;
default:
// Do none.
break;
}
break;
@ -598,6 +641,7 @@ switch ($sortField) {
switch ($config['dbtype']) {
case 'mysql':
case 'postgresql':
default:
$order[] = [
'field' => 'nombre',
'order' => 'ASC',
@ -622,7 +666,7 @@ if (!empty($order)) {
$first = true;
foreach ($order as $ord) {
if ($first) {
if ($first === true) {
$first = false;
} else {
$order_sql .= ',';
@ -635,31 +679,35 @@ foreach ($order as $ord) {
$limit = (int) $config['block_size'];
$offset = (int) get_parameter('offset');
$params = ($checked) ? 'tagente_modulo.*, tmodule_group.*' : implode(
',',
[
'tagente_modulo.id_agente_modulo',
'id_tipo_modulo',
'descripcion',
'nombre',
'max',
'min',
'module_interval',
'id_modulo',
'id_module_group',
'disabled',
'max_warning',
'min_warning',
'str_warning',
'max_critical',
'min_critical',
'str_critical',
'quiet',
'critical_inverse',
'warning_inverse',
'id_policy_module',
]
);
if ((bool) $checked === true) {
$params = 'tagente_modulo.*, tmodule_group.*';
} else {
$params = implode(
',',
[
'tagente_modulo.id_agente_modulo',
'id_tipo_modulo',
'descripcion',
'nombre',
'max',
'min',
'module_interval',
'id_modulo',
'id_module_group',
'disabled',
'max_warning',
'min_warning',
'str_warning',
'max_critical',
'min_critical',
'str_critical',
'quiet',
'critical_inverse',
'warning_inverse',
'id_policy_module',
]
);
}
$where = sprintf('delete_pending = 0 AND id_agente = %s', $id_agente);
@ -686,7 +734,11 @@ if (isset($config['paginate_module'])) {
if ($paginate_module) {
if (!isset($limit_sql)) {
$limit_sql = " LIMIT $offset, $limit ";
$limit_sql = sprintf(
'LIMIT %s, %s',
$offset,
$limit
);
}
} else {
$limit_sql = '';
@ -732,7 +784,13 @@ if ($modules === false) {
}
// Prepare pagination.
$url = '?'.'sec=gagente&'.'tab=module&'.'sec2=godmode/agentes/configurar_agente&'.'id_agente='.$id_agente.'&'.'sort_field='.$sortField.'&'.'&sort='.$sort.'&'.'search_string='.urlencode($search_string);
$url = sprintf(
'?sec=gagente&tab=module&sec2=godmode/agentes/configurar_agente&id_agente=%s&sort_field=%s&sort=%s&search_string=%s',
$id_agente,
$sortField,
$sort,
urlencode($search_string)
);
if ($paginate_module) {
ui_pagination($total_modules, $url);

View File

@ -682,6 +682,22 @@ switch ($moduletype) {
include 'module_manager_editor_wmi.php';
break;
case 'webserver':
case MODULE_WEB:
$moduletype = MODULE_WEB;
// Remove content of $ip_target when it is ip_agent because
// it is used as HTTP auth (server) ....ONLY IN NEW MODULE!!!
if (empty($id_agent_module)
&& ($ip_target === agents_get_address($id_agente))
) {
$ip_target = '';
}
$categories = [9];
include 'module_manager_editor_common.php';
include 'module_manager_editor_web.php';
break;
// WARNING: type 7 is reserved on enterprise.
default:
if (enterprise_include(

View File

@ -1574,10 +1574,6 @@ $(document).ready (function () {
});
disabled_two_tailed(disabledBecauseInPolicy);
$('#checkbox-dynamic_two_tailed').change (function() {
disabled_two_tailed(disabledBecauseInPolicy);
});
//Dynamic_options_advance;
$('.hide_dinamic').hide();
@ -1646,15 +1642,10 @@ function disabled_status (disabledBecauseInPolicy) {
}
function disabled_two_tailed (disabledBecauseInPolicy) {
if($('#checkbox-dynamic_two_tailed').prop('checked')){
$('#text-dynamic_max').prop('readonly', false);
$('#text-dynamic_max').removeClass('readonly');
}
else{
if (disabledBecauseInPolicy == 0){
$('#text-dynamic_max').prop('readonly', true);
$('#text-dynamic_max').addClass('readonly');
}
if (disabledBecauseInPolicy == 1){
$('#text-dynamic_max')
.prop('readonly', true)
.addClass('readonly');
}
}

View File

@ -0,0 +1,468 @@
<?php
/**
* Web Module Editor for Module Manager.
*
* @category Module manager
* @package Pandora FMS
* @subpackage Module manager
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2021 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.
* ============================================================================
*/
// Begin.
enterprise_include_once('include/functions_policies.php');
$disabledBecauseInPolicy = false;
$disabledTextBecauseInPolicy = '';
$classdisabledBecauseInPolicy = '';
$page = get_parameter('page', '');
if (strstr($page, 'policy_modules') === false) {
if ($config['enterprise_installed']) {
if (policies_is_module_linked($id_agent_module) == 1) {
$disabledBecauseInPolicy = 1;
} else {
$disabledBecauseInPolicy = 0;
}
} else {
$disabledBecauseInPolicy = false;
}
if ($disabledBecauseInPolicy) {
$disabledTextBecauseInPolicy = 'disabled = "disabled"';
$classdisabledBecauseInPolicy = 'readonly';
}
}
global $id_agente;
$extra_title = __('Web server module');
// Div for modal.
html_print_div(
[
'id' => 'modal',
'style' => 'display: none;',
]
);
require_once $config['homedir'].'/include/ajax/web_server_module_debug.php';
define('ID_NETWORK_COMPONENT_TYPE', 7);
if (!$tcp_port && !$id_agent_module) {
$tcp_port = 80;
}
// plugin_server is the browser id
if ($plugin_user == '' && !$id_agent_module) {
$plugin_user = get_product_name().' / Webcheck';
}
// plugin_server is the referer
if ($plugin_pass == '' && !$id_agent_module) {
$plugin_pass = 1;
}
if (empty($update_module_id)) {
// Function in module_manager_editor_common.php
add_component_selection(ID_NETWORK_COMPONENT_TYPE);
} else {
// TODO: Print network component if available
}
$data = [];
$data[0] = __('Web checks');
$adopt = false;
if (isset($id_agent_module)) {
$adopt = enterprise_hook('policies_is_module_adopt', [$id_agent_module]);
}
$id_policy_module = (int) get_parameter('id_policy_module', '');
if ($id_policy_module) {
$module = enterprise_hook('policies_get_module', [$id_policy_module]);
$plugin_parameter = $module['plugin_parameter'];
}
if ((bool) $adopt === false) {
$data[1] = html_print_textarea(
'plugin_parameter',
15,
65,
$plugin_parameter,
$disabledTextBecauseInPolicy,
true
);
} else {
$data[1] = html_print_textarea(
'plugin_parameter',
15,
65,
$plugin_parameter,
false,
true
);
}
$table_simple->colspan['web_checks'][1] = 2;
// Disable debug button if module has not started.
if ($id_agent_module > 0
&& db_get_value_filter(
'debug_content',
'tagente_modulo',
['id_agente_modulo' => $id_agent_module]
) !== null
) {
$disableDebug = false;
$hintDebug = __('Debug remotely this module');
} else {
$disableDebug = true;
$hintDebug = __('Debug this module once it has been initialized');
}
$suc_err_check = ' <span id="check_conf_suc" class="checks invisible">'.html_print_image('/images/ok.png', true).'</span>';
$suc_err_check .= ' <span id="check_conf_err" class="checks invisible">'.html_print_image('/images/error_red.png', true).'</span>';
$data[2] = html_print_button(
__('Load basic'),
'btn_loadbasic',
false,
'',
'class="sub config"',
true
).ui_print_help_tip(__('Load a basic structure on Web Checks'), true);
$data[2] .= '<br><br>'.html_print_button(
__('Check'),
'btn_checkconf',
false,
'',
'class="sub upd"',
true
).ui_print_help_tip(__('Check the correct structure of the WebCheck'), true).$suc_err_check;
$data[2] .= '<br><br>'.html_print_button(
__('Debug'),
'btn_debugModule',
$disableDebug,
'',
'class="sub config" onClick="loadDebugWindow()"',
true
).ui_print_help_tip($hintDebug, true);
push_table_simple($data, 'web_checks');
$http_checks_type = [
0 => 'Anyauth',
1 => 'NTLM',
2 => 'DIGEST',
3 => 'BASIC',
];
$data = [];
$data[0] = __('Check type');
$data[1] = html_print_select($http_checks_type, 'tcp_port', $tcp_port, false, '', '', true, false, false);
push_table_advanced($data, 'web_0');
$data = [];
$data[0] = __('Requests');
$data[1] = html_print_input_text('plugin_pass', $plugin_pass, '', 10, 0, true, $disabledBecauseInPolicy, false, '', $classdisabledBecauseInPolicy);
$data[2] = '';
$data[3] = __('Agent browser id');
$data[4] = html_print_input_text('plugin_user', $plugin_user, '', 30, 0, true, $disabledBecauseInPolicy, false, '', $classdisabledBecauseInPolicy);
push_table_advanced($data, 'web_1');
$data = [];
$data[0] = __('HTTP auth (login)');
$data[1] = html_print_input_text('http_user', $plugin_parameter_http_user, '', 10, 0, true, $disabledBecauseInPolicy, false, '', $classdisabledBecauseInPolicy);
$data[2] = '';
$data[3] = __('HTTP auth (password)');
$data[4] = html_print_input_password('http_pass', $plugin_parameter_http_pass, '', 30, 0, true, $disabledBecauseInPolicy, false, '', $classdisabledBecauseInPolicy);
push_table_advanced($data, 'web_2');
$data = [];
$data[0] = __('Proxy URL');
$data[1] = html_print_input_text('snmp_oid', $snmp_oid, '', 30, 0, true, $disabledBecauseInPolicy, false, '', $classdisabledBecauseInPolicy);
$data[2] = $data[3] = $data[4] = '';
push_table_advanced($data, 'web_3');
$data = [];
$data[0] = __('Proxy auth (login)');
$data[1] = html_print_input_text('tcp_send', $tcp_send, '', 30, 0, true, $disabledBecauseInPolicy, false, '', $classdisabledBecauseInPolicy);
$data[2] = '';
$data[3] = __('Proxy auth (pass)');
$data[4] = html_print_input_password('tcp_rcv', $tcp_rcv, '', 30, 0, true, $disabledBecauseInPolicy, false, '', $classdisabledBecauseInPolicy);
push_table_advanced($data, 'web_4');
$data = [];
$data[0] = __('Proxy auth (server)');
$data[1] = html_print_input_text('ip_target', $ip_target, '', 30, 100, true, $disabledBecauseInPolicy, false, '', $classdisabledBecauseInPolicy);
$data[2] = '';
$data[3] = __('Proxy auth (realm)');
$data[4] = html_print_input_text('snmp_community', $snmp_community, '', 30, 100, true, $disabledBecauseInPolicy, false, '', $classdisabledBecauseInPolicy);
push_table_advanced($data, 'web_5');
// Add some strings to be used from javascript
$texts = [
'lines_before_begin' => __('First line must be "task_begin"'),
'missed_begin' => __('Webchecks configuration is empty'),
'missed_end' => __('Last line must be "task_end"'),
'lines_after_end' => __('Last line must be "task_end"'),
'unknown_token' => __("There is a line with a unknown token 'token_fail'."),
'missed_get_post' => __("There isn't get or post"),
'correct' => __('Web checks are built correctly'),
];
foreach ($texts as $code => $text) {
echo '<span class="invisible" id="'.$code.'">'.$text.'</span>';
}
?>
<script type="text/javascript">
var supported_tokens = [
"task_begin",
"post",
"variable_name",
"variable_value",
"cookie",
"resource",
"get",
"check_string",
"check_not_string",
"get_content_advanced",
"get_content",
"debug",
"task_end",
"head",
"http_auth_user",
"http_auth_pass"
];
$(document).ready(function() {
var plugin_parameter = $("#textarea_plugin_parameter");
var http_auth_user = $('#text-http_user');
var http_auth_pass = $('#password-http_pass');
$(plugin_parameter).keyup(function() {
// Check and fill textbox.
if ($(plugin_parameter).val() == '') {
$('#button-btn_loadbasic').removeAttr('disabled');
} else {
$('#button-btn_loadbasic').attr('disabled', 'disabled');
}
// Update http_auth_user from conf data
var http_auth_user_value = get_module_token_from_config('http_auth_user', plugin_parameter, "\n");
if (http_auth_user_value != "") {
http_auth_user.val(http_auth_user_value);
}
// Update http_auth_pass from conf data
var http_auth_pass_value = get_module_token_from_config('http_auth_pass', plugin_parameter, "\n");
if (http_auth_pass_value != "") {
http_auth_pass.val(http_auth_pass_value);
}
});
$('#button-btn_loadbasic').click(function() {
if ($(plugin_parameter).val() != '') {
return;
}
$(plugin_parameter).val(
'task_begin\ncookie 0\nresource 0\ntask_end');
$('#button-btn_loadbasic').attr('disabled', 'disabled');
// Hide success and error indicators
$('.checks').hide();
});
$('#button-btn_checkconf').click(function() {
var msg_error = '';
if (plugin_parameter.val() == '') {
msg_error = 'missed_begin';
} else {
var lines = plugin_parameter.val().split("\n");
var started = false;
var ended = false;
var lines_after_end = false;
var lines_before_begin = false;
var token_fail = false;
var token_get_post = false;
var token_check = true;
var str_token_fail = '';
for (i = 0; i < lines.length; i++) {
if (lines[i].match(/^\s*$/)) {
// Empty line
continue;
} else if (!started) {
if (lines[i].match(/^task_begin\s*$/)) {
started = true;
} else {
// Found a not empty line before task_begin
lines_before_begin = true;
break;
}
}
if (lines[i].match(/^task_end\s*$/)) {
ended = true;
continue;
}
//Check token is correct
if (!lines[i].match(/^([\s])*[#]/)) {
var token = lines[i].match(/^([^\s]+)\s*/);
if (typeof(token) == 'object') {
token = token[1];
if ((!token_get_post) && (token == 'get' || token == 'post' || token == 'header')) {
token_get_post = true;
continue;
}
if (token == 'check_string') {
if (token_get_post) {
token_check = true;
continue;
} else {
token_check = false;
continue;
}
}
if ($.inArray(token, supported_tokens) == -1) {
token_fail = true;
str_token_fail = token;
break;
}
}
}
}
}
var msg_error = '';
if (token_fail) {
var temp_msg = $("#unknown_token").html();
temp_msg = temp_msg.replace(/['](.*)[']/, "'" + str_token_fail + "'");
$("#unknown_token").html(temp_msg);
msg_error = 'unknown_token';
} else if (lines_before_begin) {
msg_error = 'lines_before_begin';
} else if (!started) {
msg_error = 'missed_begin';
} else if (!ended) {
msg_error = 'missed_end';
} else if (lines_after_end) {
msg_error = 'lines_after_end';
} else if (!token_check) {
msg_error = 'missed_get_post';
} else {
msg_error = 'correct';
}
if (msg_error == 'correct') {
$('#check_conf_suc').find('img').eq(0)
.attr('title', $('#' + msg_error).html());
$('#check_conf_err').hide();
$('#check_conf_suc').show();
} else {
$('#check_conf_err').find('img').eq(0)
.attr('title', $('#' + msg_error).html());
$('#check_conf_suc').hide();
$('#check_conf_err').show();
}
});
$(plugin_parameter).trigger('keyup');
http_auth_user.keyup(function() {
config = plugin_parameter.val();
if (config.search("http_auth_user") == -1) {
var http_auth_user_end =
"http_auth_user " + this.value + "\n" + "task_end" + "\n";
plugin_parameter.val(config.replace(/^task_end.*$/m, http_auth_user_end));
} else {
plugin_parameter.val(
config.replace(/^http_auth_user.*$/m, "http_auth_user " + this.value)
);
// Hide success and error indicators
$(".checks").hide();
}
});
http_auth_pass.keyup(function() {
config = plugin_parameter.val();
if (config.search("http_auth_pass") == -1) {
var http_auth_pass_end =
"http_auth_pass " + this.value + "\n" + "task_end" + "\n";
plugin_parameter.val(config.replace(/^task_end.*$/m, http_auth_pass_end));
} else {
plugin_parameter.val(
config.replace(/^http_auth_pass.*$/m, "http_auth_pass " + this.value)
);
// Hide success and error indicators
$(".checks").hide();
}
});
});
function get_module_token_from_config(token_name, plugin_parameter, separator) {
var return_var = "";
if(token_name == null || token_name == '') {
return '';
}
data = plugin_parameter.val().split(separator);
len = data.length;
for (i = 0; i < len; i++) {
if (data[i][0] == "#") continue;
tokens = data[i].split(" ");
if (tokens.length == 0) continue;
token = tokens.shift();
if (token == token_name ) return_var = tokens.join(" ");
}
return_var = $.trim(return_var);
return return_var;
}
</script>

View File

@ -43,7 +43,7 @@ if (is_ajax()) {
if ($get_integria_ticket_custom_types) {
$ticket_type_id = get_parameter('ticket_type_id');
$api_call = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_incident_fields', $ticket_type_id, false, 'json');
$api_call = integria_api_call(null, null, null, null, 'get_incident_fields', $ticket_type_id, false, 'json');
echo $api_call;
return;

View File

@ -15,7 +15,7 @@ global $config;
check_login();
$gis_w = check_acl($config['id_user'], 0, 'MW');
$gis_w = check_acl($config['id_user'], 0, 'MW', false, true, true);
$gis_m = check_acl($config['id_user'], 0, 'MM');
$access = ($gis_w == true) ? 'MW' : (($gis_m == true) ? 'MM' : 'MW');
@ -490,7 +490,7 @@ if (users_can_manage_group_all('MM') === true) {
$table->data[2][0] = __('Group');
$table->data[2][1] = html_print_select_groups(
false,
'IW',
'AR',
$return_all_group,
'map_group_id',
$map_group_id,

View File

@ -20,15 +20,6 @@ require_once $config['homedir'].'/include/functions_html.php';
check_login();
if (! check_acl($config['id_user'], 0, 'IW')) {
db_pandora_audit(
'ACL Violation',
'Trying to access event viewer'
);
include 'general/noaccess.php';
return;
}
// id report
$id = (int) get_parameter('id');

View File

@ -641,8 +641,8 @@ echo '<legend>'.__('Mail configuration').'</legend>';
$table_mail_test->width = '100%';
$table_mail_test->class = 'databox filters';
$table_mail_test->data = [];
$table_mail_test->style[0] = 'font-weight: bold';
$table_mail_test->colspan[1][0] = 2;
$table_mail_test->style[0] = 'font-weight: bold;';
$table_mail_test->style[1] = 'font-weight: bold;display: flex;height: 54px;align-items: center;';
$table_mail_test->data[0][0] = __('Address');
$table_mail_test->data[0][1] = html_print_input_text(
@ -661,7 +661,9 @@ echo '<legend>'.__('Mail configuration').'</legend>';
'',
'class="sub next"',
true
).'&nbsp&nbsp<span id="email_test_sent_message" class="invisible">Email sent</span><span id="email_test_failure_message" class=invisible">Email could not be sent</span>';
);
$table_mail_test->data[1][1] = '&nbsp&nbsp<span id="email_test_sent_message" class="invisible"><b>Email sent</b></span><span id="email_test_failure_message" class=invisible"><b>Email could not be sent</b></span>';
echo '<div id="email_test_'.$id.'" title="'.__('Check mail configuration').'" class="invisible">'.html_print_table($table_mail_test, true).'</div>';
}
@ -703,6 +705,9 @@ function show_email_test(id) {
}
function perform_email_test () {
$('#email_test_sent_message').hide();
$('#email_test_failure_message').hide();
var test_address = $('#text-email_test_address').val();
$.ajax({
@ -713,12 +718,15 @@ function perform_email_test () {
success: function(data) {
if (parseInt(data) === 1) {
$('#email_test_sent_message').show();
$('#email_test_failure_message').hide();
} else {
$('#email_test_failure_message').show();
$('#email_test_sent_message').hide();
}
},
error: function() {
$('#email_test_failure_message').show();
$('#email_test_sent_message').hide();
},
});
}

View File

@ -41,8 +41,10 @@ if (is_ajax()) {
$integria_pass = get_parameter('integria_pass', '');
$integria_api_hostname = get_parameter('api_hostname', '');
$integria_api_pass = get_parameter('api_pass', '');
$user_level_conf = get_parameter('user_level_conf', 0);
$user_level_conf_bool = $user_level_conf === 'true' ? true : false;
$login_result = integria_api_call($integria_api_hostname, $integria_user, $integria_pass, $integria_api_pass, 'get_login', []);
$login_result = integria_api_call($integria_api_hostname, $integria_user, $integria_pass, $integria_api_pass, 'get_login', [], false, '', '', $user_level_conf_bool);
if ($login_result != false) {
echo json_encode(['login' => 1]);
@ -53,7 +55,7 @@ if (is_ajax()) {
return;
}
$has_connection = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_login', []);
$has_connection = integria_api_call(null, null, null, null, 'get_login', []);
if ($has_connection === false && $config['integria_enabled']) {
ui_print_error_message(__('Integria IMS API is not reachable'));
@ -86,7 +88,7 @@ if (get_parameter('update_config', 0) == 1) {
);
}
$ticket_types = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_types', '', false, 'json');
$ticket_types = integria_api_call(null, null, null, null, 'get_types', '', false, 'json');
$types_string = '';
@ -216,19 +218,19 @@ $integria_users_values = [];
$integria_types_values = [];
$integria_status_values = [];
$integria_groups_csv = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_groups', []);
$integria_groups_csv = integria_api_call(null, null, null, null, 'get_groups', []);
get_array_from_csv_data_pair($integria_groups_csv, $integria_group_values);
$integria_status_csv = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_incidents_status', []);
$integria_status_csv = integria_api_call(null, null, null, null, 'get_incidents_status', []);
get_array_from_csv_data_pair($integria_status_csv, $integria_status_values);
$integria_criticity_levels_csv = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_incident_priorities', []);
$integria_criticity_levels_csv = integria_api_call(null, null, null, null, 'get_incident_priorities', []);
get_array_from_csv_data_pair($integria_criticity_levels_csv, $integria_criticity_values);
$integria_users_csv = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_users', []);
$integria_users_csv = integria_api_call(null, null, null, null, 'get_users', []);
$csv_array = explode("\n", $integria_users_csv);
@ -238,7 +240,7 @@ foreach ($csv_array as $csv_line) {
}
}
$integria_types_csv = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_types', []);
$integria_types_csv = integria_api_call(null, null, null, null, 'get_types', []);
get_array_from_csv_data_pair($integria_types_csv, $integria_types_values);
@ -267,6 +269,12 @@ $table_remote->class = 'databox filters';
$table_remote->size['name'] = '30%';
$table_remote->style['name'] = 'font-weight: bold';
// Enable eHorus user configuration.
$row = [];
$row['name'] = ('Integria configuration at user level');
$row['control'] = html_print_checkbox_switch('integria_user_level_conf', 1, $config['integria_user_level_conf'], true);
$table_remote->data['integria_user_level_conf'] = $row;
// Integria user.
$row = [];
$row['name'] = __('User');
@ -282,7 +290,7 @@ $table_remote->data['integria_pass'] = $row;
// Integria hostname.
$row = [];
$row['name'] = __('API Hostname');
$row['name'] = __('URL to Integria IMS setup').ui_print_help_tip(__('Full URL to your Integria IMS setup (e.g., http://192.168.1.20/integria, https://support.mycompany.com).'), true);
$row['control'] = html_print_input_text('integria_hostname', $config['integria_hostname'], '', 30, 100, true);
$table_remote->data['integria_hostname'] = $row;
@ -329,22 +337,20 @@ $row['control'] = html_print_input_text(
true,
false,
false
).ui_print_help_icon('alert_macros', true);
);
$table_alert_settings->data['custom_response_incident_title'] = $row;
// Alert incident description.
$row = [];
$row['name'] = __('Description');
$row['control'] = html_print_input_text(
$row['name'] = __('Ticket body');
$row['control'] = html_print_textarea(
'incident_content',
7,
25,
$config['incident_content'],
'',
50,
100,
true,
false,
false
).ui_print_help_icon('alert_macros', true);
true
);
$table_alert_settings->data['custom_response_incident_content'] = $row;
// Alert default group.
@ -452,22 +458,21 @@ $row['control'] = html_print_input_text(
true,
false,
false
).ui_print_help_icon('response_macros', true);
);
$table_cr_settings->data['custom_response_incident_title'] = $row;
// Custom response incident description.
$row = [];
$row['name'] = __('Description');
$row['control'] = html_print_input_text(
$row['name'] = __('Ticket body');
$row['control'] = html_print_textarea(
'cr_incident_content',
7,
25,
$config['cr_incident_content'],
'',
50,
100,
true,
false,
false
).ui_print_help_icon('response_macros', true);
true
);
$table_cr_settings->data['custom_response_incident_content'] = $row;
// Custom response default group.
@ -599,7 +604,7 @@ if ($has_connection != false) {
// Form alert default settings.
echo '<div id="form_alert_settings">';
echo '<fieldset>';
echo '<legend>'.__('Alert default values').'</legend>';
echo '<legend>'.__('Alert default values').'&nbsp'.ui_print_help_icon('alert_macros', true).'</legend>';
html_print_table($table_alert_settings);
@ -609,7 +614,7 @@ if ($has_connection != false) {
// Form custom response default settings.
echo '<div id="form_custom_response_settings">';
echo '<fieldset>';
echo '<legend>'.__('Event custom response default values').'</legend>';
echo '<legend>'.__('Event custom response default values').'&nbsp'.ui_print_help_icon('alert_macros', true).'</legend>';
html_print_table($table_cr_settings);
@ -632,6 +637,29 @@ echo '</form>';
<script type="text/javascript">
if($('input:checkbox[name="integria_user_level_conf"]').is(':checked'))
{
$('#integria-remote-setup-integria_user').hide();
$('#integria-remote-setup-integria_pass').hide()
}
var handleUserLevel = function(event) {
var is_checked = $('input:checkbox[name="integria_enabled"]').is(':checked');
var is_checked_userlevel = $('input:checkbox[name="integria_user_level_conf"]').is(':checked');
if (event.target.value == '1' && is_checked && !is_checked_userlevel) {
showUserPass();
$('input:checkbox[name="integria_user_level_conf"]').attr('checked', true);
}
else {
hideUserPass();
$('input:checkbox[name="integria_user_level_conf"]').attr('checked', false);
};
}
$('input:checkbox[name="integria_enabled"]').change(handleEnable);
$('input:checkbox[name="integria_user_level_conf"]').change(handleUserLevel);
if(!$('input:checkbox[name="integria_enabled"]').is(':checked')) {
$('#form_remote').hide();
$('#form_custom_response_settings').hide();
@ -723,6 +751,7 @@ echo '</form>';
var integria_pass = $('input[name=integria_pass]').val();
var api_hostname = $('input[name=integria_hostname]').val();
var api_pass = $('input[name=integria_api_pass]').val();
var user_level_conf = $('input:checkbox[name="integria_user_level_conf"]').is(':checked');
var data = {
page: 'godmode/setup/setup_integria',
@ -731,6 +760,7 @@ echo '</form>';
integria_pass: integria_pass,
api_hostname: api_hostname,
api_pass: api_pass,
user_level_conf: user_level_conf,
}
// AJAX call to check API connection.

View File

@ -24,15 +24,6 @@ require_once 'include/functions_ui.php';
check_login();
if (! check_acl($config['id_user'], 0, 'IR')) {
db_pandora_audit(
'ACL Violation',
'Trying to access netflow setup'
);
include 'general/noaccess.php';
return;
}
$update = (bool) get_parameter('update');
$table->width = '100%';

View File

@ -85,11 +85,6 @@ if ($id_profile || $new_profile) {
// Name
$name = '';
// Incidents
$incident_view = 0;
$incident_edit = 0;
$incident_management = 0;
// Agents
$agent_view = 0;
$agent_edit = 0;
@ -148,11 +143,6 @@ if ($id_profile || $new_profile) {
// Name
$name = $profile['name'];
// Incidents
$incident_view = (bool) $profile['incident_view'];
$incident_edit = (bool) $profile['incident_edit'];
$incident_management = (bool) $profile['incident_management'];
// Agents
$agent_view = (bool) $profile['agent_view'];
$agent_edit = (bool) $profile['agent_edit'];
@ -197,7 +187,7 @@ if ($id_profile || $new_profile) {
);
enterprise_include_once('include/functions_audit.php');
$info = 'Name: '.$name.' Incident view: '.$incident_view.' Incident edit: '.$incident_edit.' Incident management: '.$incident_management.' Agent view: '.$agent_view.' Agent edit: '.$agent_edit.' Agent disable: '.$agent_disable.' Alert edit: '.$alert_edit.' Alert management: '.$alert_management.' User management: '.$user_management.' DB management: '.$db_management.' Event view: '.$event_view.' Event edit: '.$event_edit.' Event management: '.$event_management.' Report view: '.$report_view.' Report edit: '.$report_edit.' Report management: '.$report_management.' Network map view: '.$map_view.' Network map edit: '.$map_edit.' Network map management: '.$map_management.' Visual console view: '.$vconsole_view.' Visual console edit: '.$vconsole_edit.' Visual console management: '.$vconsole_management.' '.get_product_name().' Management: '.$pandora_management;
$info = 'Name: '.$name.' Agent view: '.$agent_view.' Agent edit: '.$agent_edit.' Agent disable: '.$agent_disable.' Alert edit: '.$alert_edit.' Alert management: '.$alert_management.' User management: '.$user_management.' DB management: '.$db_management.' Event view: '.$event_view.' Event edit: '.$event_edit.' Event management: '.$event_management.' Report view: '.$report_view.' Report edit: '.$report_edit.' Report management: '.$report_management.' Network map view: '.$map_view.' Network map edit: '.$map_edit.' Network map management: '.$map_management.' Visual console view: '.$vconsole_view.' Visual console edit: '.$vconsole_edit.' Visual console management: '.$vconsole_management.' '.get_product_name().' Management: '.$pandora_management;
enterprise_hook('audit_pandora_enterprise', [$id_audit, $info]);
@ -319,21 +309,6 @@ if ($id_profile || $new_profile) {
$table->data['VM'] = $row;
$table->data[] = '<hr>';
// Incidents
$row = [];
$row['name'] = __('View incidents');
$row['input'] = html_print_checkbox('incident_view', 1, $incident_view, true);
$table->data['IR'] = $row;
$row = [];
$row['name'] = __('Edit incidents');
$row['input'] = html_print_checkbox('incident_edit', 1, $incident_edit, true, false, 'autoclick_profile_users(\'incident_edit\', \'incident_view\', \'false\')');
$table->data['IW'] = $row;
$row = [];
$row['name'] = __('Manage incidents');
$row['input'] = html_print_checkbox('incident_management', 1, $incident_management, true, false, 'autoclick_profile_users(\'incident_management\', \'incident_view\', \'incident_edit\');');
$table->data['IM'] = $row;
$table->data[] = '<hr>';
$disable_option = 'javascript: return false;';
if (check_acl($config['id_user'], 0, 'PM') || users_is_admin()) {
$disable_option = '';

View File

@ -107,11 +107,6 @@ if ($delete_profile) {
if ($create_profile || $update_profile) {
$name = get_parameter('name');
// Incidents
$incident_view = (bool) get_parameter('incident_view');
$incident_edit = (bool) get_parameter('incident_edit');
$incident_management = (bool) get_parameter('incident_management');
// Agents
$agent_view = (bool) get_parameter('agent_view');
$agent_edit = (bool) get_parameter('agent_edit');
@ -152,9 +147,6 @@ if ($create_profile || $update_profile) {
$values = [
'name' => $name,
'incident_view' => $incident_view,
'incident_edit' => $incident_edit,
'incident_management' => $incident_management,
'agent_view' => $agent_view,
'agent_edit' => $agent_edit,
'agent_disable' => $agent_disable,
@ -183,10 +175,7 @@ if ($update_profile) {
if ($name) {
$ret = db_process_sql_update('tperfil', $values, ['id_perfil' => $id_profile]);
if ($ret !== false) {
$info = '{"Name":"'.$incident_view.'",
"Incident view":"'.$incident_view.'",
"Incident edit":"'.$incident_edit.'",
"Incident management":"'.$incident_management.'",
$info = '{"Name":"'.$name.'",
"Agent view":"'.$agent_view.'",
"Agent edit":"'.$agent_edit.'",
"Agent disable":"'.$agent_disable.'",
@ -234,10 +223,7 @@ if ($create_profile) {
if ($ret !== false) {
ui_print_success_message(__('Successfully created'));
$info = '{"Name":"'.$incident_view.'",
"Incident view":"'.$incident_view.'",
"Incident edit":"'.$incident_edit.'",
"Incident management":"'.$incident_management.'",
$info = '{"Name":"'.$name.'",
"Agent view":"'.$agent_view.'",
"Agent edit":"'.$agent_edit.'",
"Agent disable":"'.$agent_disable.'",
@ -289,9 +275,6 @@ $table->align = [];
$table->head['profiles'] = __('Profiles');
$table->head['IR'] = 'IR';
$table->head['IW'] = 'IW';
$table->head['IM'] = 'IM';
$table->head['AR'] = 'AR';
$table->head['AW'] = 'AW';
$table->head['AD'] = 'AD';
@ -317,9 +300,6 @@ $table->head['operations'] = '<span title="Operations">'.__('Op.').'</span>';
$table->align = array_fill(1, 11, 'center');
$table->size['profiles'] = '200px';
$table->size['IR'] = '10px';
$table->size['IW'] = '10px';
$table->size['IM'] = '10px';
$table->size['AR'] = '10px';
$table->size['AW'] = '10px';
$table->size['AD'] = '10px';
@ -358,9 +338,6 @@ $img = html_print_image(
foreach ($profiles as $profile) {
$data['profiles'] = '<a href="index.php?sec='.$sec.'&amp;sec2=godmode/users/configure_profile&id='.$profile['id_perfil'].'&pure='.$pure.'">'.$profile['name'].'</a>';
$data['IR'] = ($profile['incident_view'] ? $img : '');
$data['IW'] = ($profile['incident_edit'] ? $img : '');
$data['IM'] = ($profile['incident_management'] ? $img : '');
$data['AR'] = ($profile['agent_view'] ? $img : '');
$data['AW'] = ($profile['agent_edit'] ? $img : '');
$data['AD'] = ($profile['agent_disable'] ? $img : '');

Binary file not shown.

Before

Width:  |  Height:  |  Size: 392 B

After

Width:  |  Height:  |  Size: 548 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 898 B

After

Width:  |  Height:  |  Size: 566 B

View File

@ -27,12 +27,28 @@ ob_clean();
// * q
// * id_group
$search_agents = (bool) get_parameter('search_agents');
$get_agents_interfaces = (bool) get_parameter('get_agents_interfaces');
$id_agents = get_parameter('id_agents', []);
$get_agents_group = (bool) get_parameter('get_agents_group', false);
$force_local = (bool) get_parameter('force_local', false);
if (https_is_running()) {
header('Content-type: application/json');
}
if ($get_agents_interfaces) {
$agents_interfaces = agents_get_network_interfaces($id_agents);
// Include alias per agent.
foreach ($agents_interfaces as $key => $value) {
$agent_alias = agents_get_alias($key);
$agents_interfaces[$key]['agent_alias'] = $agent_alias;
}
echo json_encode($agents_interfaces);
return;
}
if ($get_agents_group) {
$id_group = (int) get_parameter('id_group', -1);
$mode = (string) get_parameter('mode', 'json');

View File

@ -35,7 +35,7 @@ if (check_login()) {
$search_term = get_parameter('search_term', '');
if ($get_users) {
$integria_users_csv = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_users', []);
$integria_users_csv = integria_api_call(null, null, null, null, 'get_users', []);
$csv_array = explode("\n", $integria_users_csv);

View File

@ -0,0 +1,74 @@
<?php
/**
* Web Server Module Debug ajax controller.
*
* @category Web Server Module Debug
* @package Pandora FMS
* @subpackage Module Debug
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2021 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.
* ============================================================================
*/
// Begin.
global $config;
global $id_agent_module;
// Module Debug Class.
require_once $config['homedir'].'/include/class/WebServerModuleDebug.class.php';
// This page.
$ajaxPage = $config['homedir'].'/include/ajax/web_server_module_debug';
// Control call flow for debug window.
try {
// Return of id of the agent module in AJAX.
if (is_ajax()) {
$id_agent_module = get_parameter('idAgentModule');
}
// User access and validation is being processed on class constructor.
$obj = new WebServerModuleDebug($ajaxPage, $id_agent_module);
} catch (Exception $e) {
if (is_ajax()) {
echo json_encode(['error' => '[WebServerModuleDebug]'.$e->getMessage() ]);
exit;
} else {
echo '[WebServerModuleDebug]'.$e->getMessage();
}
// Stop this execution, but continue 'globally'.
return;
}
// AJAX controller.
if (is_ajax()) {
$method = get_parameter('method');
if (method_exists($obj, $method) === true) {
$obj->{$method}();
} else {
$obj->error('Method not found. ['.$method.']');
}
// Stop any execution.
exit;
} else {
// Run.
$obj->run();
}

View File

@ -286,7 +286,11 @@ class Diagnostics extends Wizard
$return .= '</div>';
}
return false;
if ($this->pdf === true) {
return $return;
} else {
return false;
}
}
@ -1599,7 +1603,7 @@ class Diagnostics extends Wizard
}
}
return true;
return $result;
}

View File

@ -3207,7 +3207,7 @@ class NetworkMap
$table->data[0][0] = __('Group');
$table->data[0][1] = html_print_select_groups(
false,
'IW',
'AR',
false,
'group_for_show_agents',
-1,

View File

@ -0,0 +1,407 @@
<?php
/**
* WebServer Module debug feature.
*
* @category Class
* @package Pandora FMS
* @subpackage Web Server Module
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2020 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.
* ============================================================================
*/
// Begin.
global $config;
require_once $config['homedir'].'/godmode/wizards/Wizard.main.php';
/**
* Class WebServerModuleDebug.
*/
class WebServerModuleDebug extends Wizard
{
/**
* Controller Url.
*
* @var string
*/
private $ajaxController;
/**
* Timeout for HTTP requests.
*
* @var integer
*/
private $requestTimeout;
/**
* CURL Query.
*
* @var string
*/
private $query;
/**
* Id of the current module.
*
* @var integer
*/
private $idAgentModule;
/**
* Class constructor.
*
* @param string $ajaxController Ajax Page Controller.
* @param integer $idAgentModule Id of the module.
*/
public function __construct(string $ajaxController, int $idAgentModule)
{
global $config;
// Check access.
check_login();
if (! check_acl($config['id_user'], 0, 'AR')) {
db_pandora_audit(
'ACL Violation',
'Trying to access event viewer'
);
if (is_ajax()) {
echo json_encode(['error' => 'noaccess']);
}
include 'general/noaccess.php';
exit;
}
// Parameter assigments.
$this->ajaxController = $ajaxController;
$this->query = '';
$this->idAgentModule = $idAgentModule;
// Hardcoded request timeout.
$this->requestTimeout = 15;
return $this;
}
/**
* Run Module Debug window.
*
* @return void
*/
public function run()
{
// Added all necessary basic files for QueryResult.
ui_require_css_file('ace');
ui_require_javascript_file('ace', 'include/javascript/ace/');
// Load Javascript.
$this->loadJS();
// CSS.
ui_require_css_file('wizard');
ui_require_css_file('discovery');
// Specific CSS for this feature.
ui_require_css_file('WebServerModuleDebug', '/include/styles/', true);
}
/**
* Show the modal with the QueryResult.
*
* @return void
*/
public function showWebServerDebug()
{
// Show QueryResult editor.
ui_query_result_editor('webserverdebug');
// Spinner for wait loads.
html_print_div(
[
'id' => 'WebServerDebugSpinner',
'style' => 'visibility: hidden;',
'content' => __('Performing query. Please wait.').'&nbsp;'.html_print_image('images/spinner.gif', true),
]
);
?>
<script type="text/javascript">
$(document).ready(function(){
// Query section
var query = ace.edit("webserverdebug_editor");
let queryDefined = "<?php echo $this->defineQuery(); ?>";
let queryRegex = /([-]+[a-zA-Z]\s)|(([-]{2})+[a-z]+[-]*[a-z]*)/g;
query.setValue(queryDefined.replace(queryRegex, "\n$&"));
query.clearSelection();
// Result section
var results = ace.edit("webserverdebug_view");
var text = '';
results.setTheme("ace/theme/textmate");
results.session.setMode("ace/mode/json");
results.renderer.setShowGutter(false);
results.setReadOnly(true);
results.setShowPrintMargin(false);
$("#submit-execute_query").click(function() {
// Show the spinner.
showSpinner(true);
// Empty the results container.
results.setValue("");
// Get the entire text.
text = query.getValue();
// There are not values in the query section.
if (text === null || text === undefined) {
results.setValue('<?php echo __('No results'); ?>');
results.clearSelection();
// Hide spinner.
showSpinner(false);
return;
}
// Clean the carriage jumps.
text = text.split("\n").join("");
// Call to the method for execute the command.
$.ajax({
method: "post",
url: "<?php echo ui_get_full_url('ajax.php', false, false, false); ?>",
data: {
page: "<?php echo $this->ajaxController; ?>",
method: "executeCommand",
text: text,
idAgentModule: "<?php echo $this->idAgentModule; ?>",
},
datatype: "json",
success: function(result) {
results.setValue(result);
},
error: function(e) {
results.setValue('<?php echo __('Error performing execution'); ?>');
},
complete: function() {
results.clearSelection();
showSpinner(false);
}
});
});
});
</script>
<?php
}
/**
* Definition of the query
*
* @return string
*/
private function defineQuery()
{
// Get the value of the debug_content.
$outputDebugQuery = db_get_value_filter(
'debug_content',
'tagente_modulo',
[
'id_agente_modulo' => $this->idAgentModule,
]
);
$this->query = ($outputDebugQuery !== false) ? $outputDebugQuery : __('Please, wait for a first execution of module');
return $this->query;
}
/**
* Perform the cURL execution.
*
* @return void
* @throws Exception $e Error message.
*/
public function executeCommand()
{
try {
$executionForPerform = io_safe_output(get_parameter('text'));
// If the execution comes empty.
if (empty($executionForPerform) === true) {
throw new Exception('Execution failed');
}
// For security reasons, only allow the 'curl' command.
$executionForPerform = strstr($executionForPerform, 'curl');
// Avoid pipes or concatenation of commands.
$unallowedChars = [
'|',
'&',
'||',
'&&',
';',
'\n',
];
$executionForPerform = str_replace(
$unallowedChars,
' ',
$executionForPerform
);
// Set execution timeout.
$executionForPerform .= sprintf(
$executionForPerform.' -m %d',
$this->requestTimeout
);
// Perform the execution.
system($executionForPerform, $returnCode);
// If execution does not got well.
if ($returnCode != 0) {
switch ($returnCode) {
case '2':
throw new Exception('Failed to initialize. Review the syntax.');
case '3':
throw new Exception('URL malformed. The syntax was not correct.');
case '5':
throw new Exception('Couldn\'t resolve proxy. The given proxy host could not be resolved.');
case '6':
throw new Exception('Couldn\'t resolve host. The given remote host could not be resolved.');
case '7':
throw new Exception('Failed to connect to host.');
default:
throw new Exception('Failed getting data.');
}
}
} catch (Exception $e) {
// Show execution error message.
echo __($e->getMessage());
}
exit;
}
/**
* Loads JS and return code.
*
* @return string
*/
public function loadJS()
{
$str = '';
ob_start();
?>
<script type="text/javascript">
$(document).ready(function(){
$('#button-btn_debugModule').click(function() {
load_modal({
target: $("#modal"),
form: "add_module_form",
url: "<?php echo ui_get_full_url('ajax.php', false, false, false); ?>",
ajax_callback: showMsg,
modal: {
title: "<?php echo __('Debug'); ?>",
},
extradata: [
{
name: "idAgentModule",
value: "<?php echo $this->idAgentModule; ?>"
}],
onshow: {
page: "<?php echo $this->ajaxController; ?>",
width: 800,
method: "showWebServerDebug"
}
});
});
});
/**
* Toggle the visibility of spinner.
*/
function showSpinner(setVisibility) {
var spinner = $('#WebServerDebugSpinner');
if (setVisibility) {
spinner.css('visibility', 'visible');
} else {
spinner.css('visibility', 'hidden');
}
}
/**
* Process ajax responses and shows a dialog with results.
*/
function showMsg(data) {
var title = "<?php echo __('Success'); ?>";
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
});
}
</script>
<?php
// Get the JS script.
$str = ob_get_clean();
// Return the loaded JS.
echo $str;
return $str;
}
}

View File

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

View File

@ -2281,9 +2281,6 @@ function check_login($output=true)
* Check access privileges to resources
*
* Access can be:
* IR - Incident/report Read
* IW - Incident/report Write
* IM - Incident/report Management
* AR - Agent Read
* AW - Agent Write
* LW - Alert Write
@ -2374,9 +2371,6 @@ function check_acl_one_of_groups($id_user, $groups, $access, $cache=true)
* Check access privileges to resources (write or management is not allowed for 'all' group )
*
* Access can be:
* IR - Incident/report Read
* IW - Incident/report Write
* IM - Incident/report Management
* AR - Agent Read
* AW - Agent Write
* LW - Alert Write
@ -2445,18 +2439,6 @@ function check_acl_restricted_all($id_user, $id_group, $access, $onlyOneGroup=fa
function get_acl_column($access)
{
switch ($access) {
case 'IR':
return 'incident_view';
break;
case 'IW':
return 'incident_edit';
break;
case 'IM':
return 'incident_management';
break;
case 'AR':
return 'agent_view';
@ -2552,10 +2534,7 @@ function get_users_acl($id_user)
$rowdup = $users_acl_cache[$id_user];
} else {
$query = sprintf(
"SELECT sum(tperfil.incident_view) as incident_view,
sum(tperfil.incident_edit) as incident_edit,
sum(tperfil.incident_management) as incident_management,
sum(tperfil.agent_view) as agent_view,
"SELECT sum(tperfil.agent_view) as agent_view,
sum(tperfil.agent_edit) as agent_edit,
sum(tperfil.alert_edit) as alert_edit,
sum(tperfil.alert_management) as alert_management,

View File

@ -1,16 +1,33 @@
<?php
// Pandora FMS- http://pandorafms.com
// ==================================================
// Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
// Please see http://pandorafms.org for full contribution list
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation; version 2
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
/**
* Functions for API.
*
* @category Functions.
* @package Pandora FMS
* @subpackage API.
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2021 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.
* ============================================================================
*/
// Begin.
global $config;
// Set character encoding to UTF-8 - fixes a lot of multibyte character headaches
@ -486,7 +503,7 @@ function api_get_groups($thrash1, $thrash2, $other, $returnType, $user_in_db)
$returnAllColumns = ( $other['data'][2] == '1' ? true : false);
}
$groups = users_get_groups($user_in_db, 'IR', $returnAllGroup, $returnAllColumns);
$groups = users_get_groups($user_in_db, 'AR', $returnAllGroup, $returnAllColumns);
$data_groups = [];
foreach ($groups as $id => $group) {
@ -2300,13 +2317,13 @@ function api_set_delete_agent($id, $thrash1, $other, $returnType)
foreach ($servers as $server) {
if (metaconsole_connect($server) == NOERR) {
if ($other['data'][0] === '1') {
if ($agent_by_alias) {
$idAgent = agents_get_agent_id_by_alias($id);
} else {
$idAgent[0] = agents_get_agent_id($id, true);
}
if (!empty($idAgent)) {
if (empty($idAgent) === false) {
$result = agents_delete_agent($idAgent[0], true);
}
@ -11655,9 +11672,6 @@ function api_get_user_profiles_info($thrash1, $thrash2, $thrash3, $returnType)
[
'id_perfil',
'name',
'incident_view as IR',
'incident_edit as IW',
'incident_management as IM',
'agent_view as AR',
'agent_edit as AW',
'agent_disable as AD',
@ -11710,29 +11724,26 @@ function api_set_create_user_profile_info($thrash1, $thrash2, $other, $returnTyp
$values = [
'name' => (string) $other['data'][0],
'incident_view' => (bool) $other['data'][1] ? 1 : 0,
'incident_edit' => (bool) $other['data'][2] ? 1 : 0,
'incident_management' => (bool) $other['data'][3] ? 1 : 0,
'agent_view' => (bool) $other['data'][4] ? 1 : 0,
'agent_edit' => (bool) $other['data'][5] ? 1 : 0,
'agent_disable' => (bool) $other['data'][6] ? 1 : 0,
'alert_edit' => (bool) $other['data'][7] ? 1 : 0,
'alert_management' => (bool) $other['data'][8] ? 1 : 0,
'user_management' => (bool) $other['data'][9] ? 1 : 0,
'db_management' => (bool) $other['data'][10] ? 1 : 0,
'event_view' => (bool) $other['data'][11] ? 1 : 0,
'event_edit' => (bool) $other['data'][12] ? 1 : 0,
'event_management' => (bool) $other['data'][13] ? 1 : 0,
'report_view' => (bool) $other['data'][14] ? 1 : 0,
'report_edit' => (bool) $other['data'][15] ? 1 : 0,
'report_management' => (bool) $other['data'][16] ? 1 : 0,
'map_view' => (bool) $other['data'][17] ? 1 : 0,
'map_edit' => (bool) $other['data'][18] ? 1 : 0,
'map_management' => (bool) $other['data'][19] ? 1 : 0,
'vconsole_view' => (bool) $other['data'][20] ? 1 : 0,
'vconsole_edit' => (bool) $other['data'][21] ? 1 : 0,
'vconsole_management' => (bool) $other['data'][22] ? 1 : 0,
'pandora_management' => (bool) $other['data'][23] ? 1 : 0,
'agent_view' => (bool) $other['data'][1] ? 1 : 0,
'agent_edit' => (bool) $other['data'][2] ? 1 : 0,
'agent_disable' => (bool) $other['data'][3] ? 1 : 0,
'alert_edit' => (bool) $other['data'][4] ? 1 : 0,
'alert_management' => (bool) $other['data'][5] ? 1 : 0,
'user_management' => (bool) $other['data'][6] ? 1 : 0,
'db_management' => (bool) $other['data'][7] ? 1 : 0,
'event_view' => (bool) $other['data'][8] ? 1 : 0,
'event_edit' => (bool) $other['data'][9] ? 1 : 0,
'event_management' => (bool) $other['data'][10] ? 1 : 0,
'report_view' => (bool) $other['data'][11] ? 1 : 0,
'report_edit' => (bool) $other['data'][12] ? 1 : 0,
'report_management' => (bool) $other['data'][13] ? 1 : 0,
'map_view' => (bool) $other['data'][14] ? 1 : 0,
'map_edit' => (bool) $other['data'][15] ? 1 : 0,
'map_management' => (bool) $other['data'][16] ? 1 : 0,
'vconsole_view' => (bool) $other['data'][17] ? 1 : 0,
'vconsole_edit' => (bool) $other['data'][18] ? 1 : 0,
'vconsole_management' => (bool) $other['data'][19] ? 1 : 0,
'pandora_management' => (bool) $other['data'][20] ? 1 : 0,
];
$return = db_process_sql_insert('tperfil', $values);
@ -11772,29 +11783,26 @@ function api_set_update_user_profile_info($id_profile, $thrash1, $other, $return
$values = [
'name' => $other['data'][0] == '' ? $profile['name'] : (string) $other['data'][0],
'incident_view' => $other['data'][1] == '' ? $profile['incident_view'] : (bool) $other['data'][1] ? 1 : 0,
'incident_edit' => $other['data'][2] == '' ? $profile['incident_edit'] : (bool) $other['data'][2] ? 1 : 0,
'incident_management' => $other['data'][3] == '' ? $profile['incident_management'] : (bool) $other['data'][3] ? 1 : 0,
'agent_view' => $other['data'][4] == '' ? $profile['agent_view'] : (bool) $other['data'][4] ? 1 : 0,
'agent_edit' => $other['data'][5] == '' ? $profile['agent_edit'] : (bool) $other['data'][5] ? 1 : 0,
'agent_disable' => $other['data'][6] == '' ? $profile['agent_disable'] : (bool) $other['data'][6] ? 1 : 0,
'alert_edit' => $other['data'][7] == '' ? $profile['alert_edit'] : (bool) $other['data'][7] ? 1 : 0,
'alert_management' => $other['data'][8] == '' ? $profile['alert_management'] : (bool) $other['data'][8] ? 1 : 0,
'user_management' => $other['data'][9] == '' ? $profile['user_management'] : (bool) $other['data'][9] ? 1 : 0,
'db_management' => $other['data'][10] == '' ? $profile['db_management'] : (bool) $other['data'][10] ? 1 : 0,
'event_view' => $other['data'][11] == '' ? $profile['event_view'] : (bool) $other['data'][11] ? 1 : 0,
'event_edit' => $other['data'][12] == '' ? $profile['event_edit'] : (bool) $other['data'][12] ? 1 : 0,
'event_management' => $other['data'][13] == '' ? $profile['event_management'] : (bool) $other['data'][13] ? 1 : 0,
'report_view' => $other['data'][14] == '' ? $profile['report_view'] : (bool) $other['data'][14] ? 1 : 0,
'report_edit' => $other['data'][15] == '' ? $profile['report_edit'] : (bool) $other['data'][15] ? 1 : 0,
'report_management' => $other['data'][16] == '' ? $profile['report_management'] : (bool) $other['data'][16] ? 1 : 0,
'map_view' => $other['data'][17] == '' ? $profile['map_view'] : (bool) $other['data'][17] ? 1 : 0,
'map_edit' => $other['data'][18] == '' ? $profile['map_edit'] : (bool) $other['data'][18] ? 1 : 0,
'map_management' => $other['data'][19] == '' ? $profile['map_management'] : (bool) $other['data'][19] ? 1 : 0,
'vconsole_view' => $other['data'][20] == '' ? $profile['vconsole_view'] : (bool) $other['data'][20] ? 1 : 0,
'vconsole_edit' => $other['data'][21] == '' ? $profile['vconsole_edit'] : (bool) $other['data'][21] ? 1 : 0,
'vconsole_management' => $other['data'][22] == '' ? $profile['vconsole_management'] : (bool) $other['data'][22] ? 1 : 0,
'pandora_management' => $other['data'][23] == '' ? $profile['pandora_management'] : (bool) $other['data'][23] ? 1 : 0,
'agent_view' => $other['data'][1] == '' ? $profile['agent_view'] : (bool) $other['data'][1] ? 1 : 0,
'agent_edit' => $other['data'][2] == '' ? $profile['agent_edit'] : (bool) $other['data'][2] ? 1 : 0,
'agent_disable' => $other['data'][3] == '' ? $profile['agent_disable'] : (bool) $other['data'][3] ? 1 : 0,
'alert_edit' => $other['data'][4] == '' ? $profile['alert_edit'] : (bool) $other['data'][4] ? 1 : 0,
'alert_management' => $other['data'][5] == '' ? $profile['alert_management'] : (bool) $other['data'][5] ? 1 : 0,
'user_management' => $other['data'][6] == '' ? $profile['user_management'] : (bool) $other['data'][6] ? 1 : 0,
'db_management' => $other['data'][7] == '' ? $profile['db_management'] : (bool) $other['data'][7] ? 1 : 0,
'event_view' => $other['data'][8] == '' ? $profile['event_view'] : (bool) $other['data'][8] ? 1 : 0,
'event_edit' => $other['data'][9] == '' ? $profile['event_edit'] : (bool) $other['data'][9] ? 1 : 0,
'event_management' => $other['data'][10] == '' ? $profile['event_management'] : (bool) $other['data'][10] ? 1 : 0,
'report_view' => $other['data'][11] == '' ? $profile['report_view'] : (bool) $other['data'][11] ? 1 : 0,
'report_edit' => $other['data'][12] == '' ? $profile['report_edit'] : (bool) $other['data'][12] ? 1 : 0,
'report_management' => $other['data'][13] == '' ? $profile['report_management'] : (bool) $other['data'][13] ? 1 : 0,
'map_view' => $other['data'][14] == '' ? $profile['map_view'] : (bool) $other['data'][14] ? 1 : 0,
'map_edit' => $other['data'][15] == '' ? $profile['map_edit'] : (bool) $other['data'][15] ? 1 : 0,
'map_management' => $other['data'][16] == '' ? $profile['map_management'] : (bool) $other['data'][16] ? 1 : 0,
'vconsole_view' => $other['data'][17] == '' ? $profile['vconsole_view'] : (bool) $other['data'][17] ? 1 : 0,
'vconsole_edit' => $other['data'][18] == '' ? $profile['vconsole_edit'] : (bool) $other['data'][18] ? 1 : 0,
'vconsole_management' => $other['data'][19] == '' ? $profile['vconsole_management'] : (bool) $other['data'][19] ? 1 : 0,
'pandora_management' => $other['data'][20] == '' ? $profile['pandora_management'] : (bool) $other['data'][20] ? 1 : 0,
];
$return = db_process_sql_update('tperfil', $values, ['id_perfil' => $id_profile]);
@ -11842,101 +11850,6 @@ function api_set_delete_user_profile_info($id_profile, $thrash1, $thrash2, $retu
}
/**
* Create new incident in Pandora.
*
* @param $thrash1 Don't use.
* @param $thrash2 Don't use.
* @param array $other it's array, $other as param is <title>;<description>;
* <origin>;<priority>;<state>;<group> in this order and separator char
* (after text ; ) and separator (pass in param othermode as
* othermode=url_encode_separator_<separator>)
* example:
*
* api.php?op=set&op2=new_incident&other=titulo|descripcion%20texto|Logfiles|2|10|12&other_mode=url_encode_separator_|
*
* @param $thrash3 Don't use.
*/
function api_set_new_incident($thrash1, $thrash2, $other, $thrash3)
{
global $config;
if (defined('METACONSOLE')) {
return;
}
if (!check_acl($config['id_user'], 0, 'IW')) {
returnError('forbidden', 'string');
return;
}
$title = $other['data'][0];
$description = $other['data'][1];
$origin = $other['data'][2];
$priority = $other['data'][3];
$id_creator = 'API';
$state = $other['data'][4];
$group = $other['data'][5];
$values = [
'inicio' => 'NOW()',
'actualizacion' => 'NOW()',
'titulo' => $title,
'descripcion' => $description,
'id_usuario' => 'API',
'origen' => $origin,
'estado' => $state,
'prioridad' => $priority,
'id_grupo' => $group,
'id_creator' => $id_creator,
];
$idIncident = db_process_sql_insert('tincidencia', $values);
if ($idIncident === false) {
returnError('A new incident could not be created.');
} else {
returnData('string', ['type' => 'string', 'data' => $idIncident]);
}
}
/**
* Add note into a incident.
*
* @param $id string Username author of note.
* @param $id2 integer ID of incident.
* @param $other string Note.
* @param $thrash2 Don't use.
*/
function api_set_new_note_incident($id, $id2, $other, $thrash2)
{
global $config;
if (defined('METACONSOLE')) {
return;
}
if (!check_acl($config['id_user'], 0, 'IW')) {
returnError('forbidden', 'string');
return;
}
$values = [
'id_usuario' => $id,
'id_incident' => $id2,
'nota' => $other['data'],
];
$idNote = db_process_sql_insert('tnota', $values);
if ($idNote === false) {
returnError('A new incident could not be created+.');
} else {
returnData('string', ['type' => 'string', 'data' => $idNote]);
}
}
/**
* Disable a module, given agent and module name.
*

View File

@ -1642,6 +1642,10 @@ function config_update_config()
break;
case 'integria':
if (!config_update_value('integria_user_level_conf', (int) get_parameter('integria_user_level_conf', 0))) {
$error_update[] = __('Integria user login');
}
if (!config_update_value('integria_enabled', (int) get_parameter('integria_enabled', 0))) {
$error_update[] = __('Enable Integria IMS');
}
@ -3244,6 +3248,10 @@ function config_process_config()
}
// Integria.
if (!isset($config['integria_user_level_conf'])) {
config_update_value('integria_user_level_conf', 0);
}
if (!isset($config['integria_enabled'])) {
config_update_value('integria_enabled', 0);
}

View File

@ -3792,7 +3792,7 @@ function events_page_responses($event, $childrens_ids=[])
$('.params_rows').remove();
$('#responses_table')
.append('<tr class=\"params_rows\"><td>".__('Description')."</td><td class=\"left height_30px\" colspan=\"2\">'+description+'</td></tr>');
.append('<tr class=\"params_rows\"><td>".__('Description')."</td><td class=\"height_30px\" colspan=\"2\">'+description+'</td></tr>');
if (params.length == 1 && params[0] == '') {
return;

View File

@ -2978,9 +2978,9 @@ function grafico_incidente_prioridad()
{
global $config;
$integria_ticket_count_by_priority_json = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_tickets_count', ['prioridad', 30], false, '', '|;|');
$integria_ticket_count_by_priority_json = integria_api_call(null, null, null, null, 'get_tickets_count', ['prioridad', 30], false, '', '|;|');
$integria_priorities_map_json = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_incident_priorities', '', false, 'json');
$integria_priorities_map_json = integria_api_call(null, null, null, null, 'get_incident_priorities', '', false, 'json');
$integria_ticket_count_by_priority = json_decode($integria_ticket_count_by_priority_json, true);
$integria_priorities_map = json_decode($integria_priorities_map_json, true);
@ -3023,9 +3023,9 @@ function graph_incidents_status()
{
global $config;
$integria_ticket_count_by_status_json = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_tickets_count', ['estado', 30], false, '', '|;|');
$integria_ticket_count_by_status_json = integria_api_call(null, null, null, null, 'get_tickets_count', ['estado', 30], false, '', '|;|');
$integria_status_map_json = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_incidents_status', '', false, 'json');
$integria_status_map_json = integria_api_call(null, null, null, null, 'get_incidents_status', '', false, 'json');
$integria_ticket_count_by_status = json_decode($integria_ticket_count_by_status_json, true);
$integria_status_map = json_decode($integria_status_map_json, true);
@ -3068,9 +3068,9 @@ function graphic_incident_group()
{
global $config;
$integria_ticket_count_by_group_json = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_tickets_count', ['id_grupo', 30], false, '', '|;|');
$integria_ticket_count_by_group_json = integria_api_call(null, null, null, null, 'get_tickets_count', ['id_grupo', 30], false, '', '|;|');
$integria_group_map_json = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_groups', '', false, 'json');
$integria_group_map_json = integria_api_call(null, null, null, null, 'get_groups', '', false, 'json');
$integria_ticket_count_by_group = json_decode($integria_ticket_count_by_group_json, true);
$integria_group_map = json_decode($integria_group_map_json, true);
@ -3114,7 +3114,7 @@ function graphic_incident_user()
{
global $config;
$integria_ticket_count_by_user_json = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_tickets_count', ['id_usuario', 30], false, '', '|;|');
$integria_ticket_count_by_user_json = integria_api_call(null, null, null, null, 'get_tickets_count', ['id_usuario', 30], false, '', '|;|');
$integria_ticket_count_by_user = json_decode($integria_ticket_count_by_user_json, true);

View File

@ -21,6 +21,7 @@ global $config;
require_once $config['homedir'].'/include/functions_ui.php';
require_once $config['homedir'].'/include/functions_html.php';
require_once $config['homedir'].'/include/functions_users.php';
require_once $config['homedir'].'/include/functions.php';
@ -78,22 +79,10 @@ function integriaims_tabs($active_tab, $view=false)
}
$onheader = [];
if (check_acl($config['id_user'], 0, 'IR') && $view) {
$onheader['view'] = $view_tab;
}
if (check_acl($config['id_user'], 0, 'PM')) {
$onheader['configure'] = $setup_tab;
}
if (check_acl($config['id_user'], 0, 'IR')) {
$onheader['list'] = $list_tab;
}
if (check_acl($config['id_user'], 0, 'IW')) {
$onheader['create'] = $create_tab;
}
$onheader['view'] = $view_tab;
$onheader['configure'] = $setup_tab;
$onheader['list'] = $list_tab;
$onheader['create'] = $create_tab;
return $onheader;
}
@ -137,7 +126,7 @@ function integriaims_get_details($details, $detail_index=false)
break;
}
$api_call = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], $operation);
$api_call = integria_api_call(null, null, null, null, $operation);
$result = [];
get_array_from_csv_data_pair($api_call, $result);
@ -165,8 +154,42 @@ function integriaims_get_details($details, $detail_index=false)
*
* @return boolean True if API request succeeded, false if API request failed.
*/
function integria_api_call($api_hostname, $user, $user_pass, $api_pass, $operation, $params='', $show_credentials_error_msg=false, $return_type='', $token='')
function integria_api_call($api_hostname=null, $user=null, $user_pass=null, $api_pass=null, $operation, $params='', $show_credentials_error_msg=false, $return_type='', $token='', $user_level_conf=null)
{
global $config;
if ($user_level_conf === null) {
$user_level_conf = (bool) $config['integria_user_level_conf'];
}
$user_info = users_get_user_by_id($config['id_user']);
// API access data.
if ($api_hostname === null) {
$api_hostname = $config['integria_hostname'];
}
if ($api_pass === null) {
$api_pass = $config['integria_api_pass'];
}
// Integria user and password.
if ($user === null || $user_level_conf === true) {
$user = $config['integria_user'];
if ($user_level_conf === true) {
$user = $user_info['integria_user_level_user'];
}
}
if ($user_pass === null || $user_level_conf === true) {
$user_pass = $config['integria_pass'];
if ($user_level_conf === true) {
$user_pass = $user_info['integria_user_level_pass'];
}
}
if (is_array($params)) {
$params = implode($token, $params);
}
@ -188,7 +211,7 @@ function integria_api_call($api_hostname, $user, $user_pass, $api_pass, $operati
}
// Build URL for API request.
$url = $api_hostname.'/integria/include/api.php';
$url = $api_hostname.'/include/api.php';
// ob_start();
// $out = fopen('php://output', 'w');
@ -352,10 +375,10 @@ function get_tickets_integriaims($tickets_filters)
// API call.
$result_api_call_list = integria_api_call(
$config['integria_hostname'],
$config['integria_user'],
$config['integria_pass'],
$config['integria_api_pass'],
null,
null,
null,
null,
'get_incidents',
[
$incident_text,

View File

@ -120,7 +120,7 @@ function netflow_check_filter_group($id_sg)
$id_group = db_get_value('id_group', 'tnetflow_filter', 'id_sg', $id_sg);
$own_info = get_user_info($config['id_user']);
// Get group list that user has access.
$groups_user = users_get_groups($config['id_user'], 'IW', $own_info['is_admin'], true);
$groups_user = users_get_groups($config['id_user'], 'AR', $own_info['is_admin'], true);
$groups_id = [];
$has_permission = false;

View File

@ -1500,7 +1500,7 @@ function networkmap_delete_relations($id_map)
function get_networkmaps($id)
{
$groups = array_keys(users_get_groups(null, 'IW'));
$groups = array_keys(users_get_groups(null, 'MW'));
$filter = [];
$filter['id_group'] = $groups;

View File

@ -42,6 +42,7 @@ require_once $config['homedir'].'/include/functions_users.php';
enterprise_include_once('include/functions_reporting.php');
enterprise_include_once('include/functions_metaconsole.php');
enterprise_include_once('include/functions_inventory.php');
enterprise_include_once('include/functions_cron.php');
require_once $config['homedir'].'/include/functions_forecast.php';
require_once $config['homedir'].'/include/functions_ui.php';
require_once $config['homedir'].'/include/functions_netflow.php';
@ -13948,3 +13949,69 @@ function reporting_module_histogram_graph($report, $content, $pdf=0)
return reporting_check_structure_content($return);
}
/**
* Email template for sending reports.
*
* @param string $subjectEmail Subject of email.
* @param string $bodyEmail Body of email.
* @param string $scheduled Id of schedule report.
* @param string $reportName Report name.
* @param string $email Serialized list of destination emails.
* @param array $attachments Attachments.
*
* @return void
*/
function reporting_email_template(
string $subjectEmail='',
string $bodyEmail='',
string $scheduled='',
string $reportName='',
string $email='',
array $attachments=null
) {
// Subject.
$subject = (empty($subjectEmail) === true) ? '[Pandora] '.__('Reports') : $subjectEmail;
// Body.
if (empty($bodyEmail) === true) {
$body = __('Greetings').',';
$body .= '<p />';
$body .= __('Attached to this email there\'s a PDF file of the').' ';
$body .= $scheduled.' '.__('report');
$body .= ' <strong>"'.$reportName.'"</strong>';
$body .= '<p />';
$body .= __('Generated at').' '.date('Y/m/d H:i:s');
$body .= '<p />';
$body .= __('Thanks for your time.');
$body .= '<p />';
$body .= __('Best regards, Pandora FMS');
$body .= '<p />';
$body .= '<em>'.__('This is an automatically generated email from Pandora FMS, please do not reply.').'</em>';
} else {
$bodyEmail = str_replace(
[
"\r\n",
"\r",
'&#x0d;&#x0a;',
],
"\n",
$bodyEmail
);
$body = '<p>'.implode("</p>\n<p>", explode("\n", $bodyEmail)).'</p>';
}
// Extract list of emails.
$destinationEmails = explode(',', io_safe_output($email));
foreach ($destinationEmails as $destination) {
$destination = trim($destination);
// Skip the empty 'to'.
if (empty($destination) === false) {
send_email_attachment($destination, $body, $subject, $attachments);
} else {
db_pandora_audit('ERROR:', 'Cron jobs mail, empty destination email.');
}
}
}

View File

@ -235,9 +235,6 @@ function groups_combine_acl($acl_group_a, $acl_group_b)
}
$acl_list = [
'incident_view' => 1,
'incident_edit' => 1,
'incident_management' => 1,
'agent_view' => 1,
'agent_edit' => 1,
'agent_disable' => 1,

View File

@ -48,6 +48,8 @@ function show_event_dialog(event, dialog_page, result) {
resizable: true,
draggable: true,
modal: true,
minWidth: 710,
minHeight: 600,
close: function() {
$("#refrcounter").countdown("resume");
$("div.vc-countdown").countdown("resume");

View File

@ -0,0 +1,10 @@
/* Web Server Module Debug Specific CSS file */
.query_result_editor,
.query_result_view {
min-height: 45em;
height: 45em;
}
#query_result_container {
margin-top: 30px;
}

View File

@ -19,6 +19,7 @@
.dataTables_wrapper {
min-height: 150px;
margin-bottom: 20px;
}
.datatables-td-title {

View File

@ -4682,7 +4682,8 @@ input:checked + .p-slider:before {
.user_edit_first_row,
.user_edit_second_row,
.user_edit_third_row {
.user_edit_third_row,
.user_edit_fourth_row {
margin-bottom: 20px;
}
@ -8279,3 +8280,8 @@ div.stat-win-spinner img {
.font_11pt {
font-size: 11pt;
}
.checkbox-random-name {
width: 100px !important;
margin-left: 20px;
}

View File

@ -387,7 +387,6 @@ table#diagnostic_info tbody td div {
color: #fff;
}
.ui-widget-content.ui-autocomplete,
.ui-widget-content.ui-autocomplete a {
color: #333;
}
@ -996,6 +995,26 @@ table.databox {
border-color: #707070;
}
li.ui-tabs-tab.ui-corner-top.ui-state-default.ui-tab {
border: 1px solid #707070;
}
.chartLegend {
width: 100%;
position: relative;
height: 30px;
}
.chartLegend table {
position: absolute;
right: 0px;
}
.graph_container {
width: 800px;
margin: 20px auto;
border-radius: 3px;
}
.header_title {
font-weight: 600;
font-size: 10.5pt;

View File

@ -220,7 +220,8 @@ echo '<head>'."\n";
// This starts the page head. In the callback function,
// $page['head'] array content will be processed into the head.
ob_start('ui_process_page_head');
// Avoid clickjacking.
header('X-Frame-Options: SAMEORIGIN');
// Enterprise main.
enterprise_include_once('index.php');

View File

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

View File

@ -68,6 +68,9 @@ if (file_exists('../../include/languages/'.$user_language.'.mo')) {
}
echo '<link rel="stylesheet" href="../../include/styles/pandora.css" type="text/css"/>';
if ($config['style'] === 'pandora_black') {
ui_require_css_file('pandora_black', 'include/styles/', true);
}
$interface_name = (string) $params['interface_name'];
$agent_id = (int) $params['agent_id'];
@ -190,6 +193,7 @@ $data[1] .= html_print_image(
[
'onclick' => "scwShow(scwID('text-start_date'),this);",
'style' => 'vertical-align: bottom;',
'class' => 'invert_filter',
],
false,
false,
@ -251,7 +255,8 @@ $options[2] = 'x2';
$options[3] = 'x3';
$options[4] = 'x4';
$options[5] = __('Full');
$data[1] = html_print_select(
/*
$data[1] = html_print_select(
$options,
'zoom',
$zoom,
@ -261,9 +266,9 @@ $data[1] = html_print_select(
true,
false,
false
);
$table->data[] = $data;
$table->rowclass[] = '';
);
$table->data[] = $data;
$table->rowclass[] = '';*/
$form_table = html_print_table($table, true);
$form_table .= '<div class="w100p right right_align">';
@ -284,7 +289,7 @@ if (empty($server_id) === false) {
$menu_form .= html_print_input_hidden('server', $server_id, true);
}
$menu_form .= '<div class="module_graph_menu_dropdown">';
$menu_form .= '<div class="module_graph_menu_dropdown mrgn_top_20px">';
$menu_form .= '<div id="module_graph_menu_header" class="module_graph_menu_header">';
$menu_form .= html_print_image(
'images/arrow_down_green.png',
@ -312,13 +317,6 @@ $menu_form .= '</div>';
$menu_form .= '</form>';
echo $menu_form;
echo '<div class="module_graph_menu_dropdown">
<div id="module_graph_menu_header" class="module_graph_menu_header">
'.html_print_image('images/arrow_down_green.png', true, ['class' => 'module_graph_menu_arrow', 'float' => 'left'], false, false, true).'
<span class="flex_2">'.__('Graph configuration menu').'</span></div>
<div class="module_graph_menu_content module_graph_menu_content_closed invisible" >'.$form_table.'</div>
</div>';
echo '</form>';
// Hidden div to forced title.
html_print_div(

View File

@ -0,0 +1,741 @@
<?php
/**
* Pandora FMS - http://pandorafms.com
* ==================================================
* Copyright (c) 2005-2021 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; 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.
*/
/**
* Print filters for interface view.
*
* @param string sec Section (type of filter will vary across sections).
*/
function print_filters($sec)
{
$table = new StdClass();
$table->width = '100%';
$table->cellspacing = 0;
$table->cellpadding = 0;
$table->class = 'databox filters';
if ($sec === 'view') {
$table->style[0] = 'font-weight: bold;';
$table->style[1] = 'font-weight: bold;';
$table->style[2] = 'font-weight: bold;';
$table->style[3] = 'font-weight: bold;';
$table->style[4] = 'font-weight: bold;';
$table->data[0][0] = __('Group');
$table->data[0][1] .= html_print_select_groups(
$config['id_user'],
'AR',
true,
'group_id',
$ag_group,
'',
'',
'0',
true,
false,
false,
'',
false,
'',
false,
false,
'id_grupo',
false
);
$table->data[0][2] = __('Recursion');
$table->data[0][2] .= html_print_input(
[
'type' => 'checkbox',
'name' => 'recursion',
'return' => true,
'checked' => $recursion,
'value' => 1,
]
);
$table->data[1][0] = __('Agents');
if (empty($agents) === true || $agents == -1) {
$agents = [];
}
$table->data[1][1] = html_print_select(
[],
'selected_agents[]',
'',
'',
'',
0,
true,
true,
true,
'',
false,
'min-width: 180px; max-width: 200px;'
);
// Interfaces.
$table->data[1][3] = '<b>'.__('Interfaces').'</b>';
$table->data[1][4] = html_print_select(
[],
'selected_interfaces[]',
$selected_interfaces,
'',
'',
0,
true,
true,
true,
'',
false,
'min-width: 180px; max-width: 200px;'
);
$filters = '<form method="post" action="'.ui_get_url_refresh(
[
'selected_agents' => $selected_agents,
'selected_interfaces' => $selected_interfaces,
'selected_group_id' => $selected_group_id,
]
).'">';
$filters .= html_print_table($table, true);
$filters .= "<div class='height_100p right'>".html_print_submit_button(
__('Show'),
'uptbutton',
false,
'class="sub search mgn_tp_0"',
true
).'</div>';
$filters .= '</form>';
} else {
$table->style[0] = 'font-weight: bold;';
$table->data[0][0] = '<b>'.__('Interfaces').'</b>';
$table->data[0][1] = html_print_select(
[],
'selected_interfaces[]',
$selected_interfaces,
'',
'',
0,
true,
true,
true,
'',
false,
'min-width: 180px; max-width: 200px;'
);
$filters = '<form method="post" action="'.ui_get_url_refresh(
[
'selected_agents' => $selected_agents,
'selected_interfaces' => $selected_interfaces,
'selected_group_id' => $selected_group_id,
]
).'">';
$filters .= html_print_table($table, true);
$filters .= "<div class='height_100p right'>".html_print_submit_button(
__('Show'),
'uptbutton',
false,
'class="sub search mgn_tp_0"',
true
).'</div>';
$filters .= '</form>';
}
ui_toggle(
$filters,
__('Interface filter'),
__('Interface filter'),
'ui_toggle_if_filter'
);
unset($table);
}
/**
* Print interfaces table.
*
* @param array data Array containing data of interfaces.
* @param array selected_agents Selected agents.
* @param array selected_interfaces Selected interfaces.
* @param string sort_field Field used to sort table.
* @param string sort Direction used to sort by field.
* @param int pagination_index Active page (used for pagination).
* @param string sec Active section of page.
*/
function print_table(
$data,
$selected_agents,
$selected_interfaces,
$sort_field,
$sort,
$pagination_index,
$sec
) {
global $config;
$selected = true;
$select_if_name_up = false;
$select_if_name_down = false;
$select_if_speed_data_up = false;
$select_if_speed_data_down = false;
$select_if_in_octets_up = false;
$select_if_in_octets_down = false;
$select_if_out_octets_up = false;
$select_if_out_octets_down = false;
$select_if_usage_module_data_in_up = false;
$select_if_usage_module_data_in_down = false;
$select_if_usage_module_data_out_up = false;
$select_if_usage_module_data_out_down = false;
$select_if_last_data_up = false;
$select_if_last_data_down = false;
$order = null;
switch ($sort_field) {
case 'if_agent_name':
switch ($sort) {
case 'up':
$select_if_agent_name_up = $selected;
$order = [
'field' => 'if_agent_name',
'order' => 'ASC',
];
break;
case 'down':
default:
$select_if_agent_name_down = $selected;
$order = [
'field' => 'if_agent_name',
'order' => 'DESC',
];
break;
}
break;
case 'if_name':
switch ($sort) {
case 'up':
$select_if_name_up = $selected;
$order = [
'field' => 'if_name',
'order' => 'ASC',
];
break;
case 'down':
default:
$select_if_name_down = $selected;
$order = [
'field' => 'if_name',
'order' => 'DESC',
];
break;
}
break;
case 'if_speed_data':
switch ($sort) {
case 'up':
$select_if_speed_data_up = $selected;
$order = [
'field' => 'if_speed_data',
'order' => 'ASC',
];
break;
case 'down':
default:
$select_if_speed_data_down = $selected;
$order = [
'field' => 'if_speed_data',
'order' => 'DESC',
];
break;
}
break;
case 'if_in_octets':
switch ($sort) {
case 'up':
$select_if_in_octets_up = $selected;
$order = [
'field' => 'if_in_octets',
'order' => 'ASC',
];
break;
case 'down':
default:
$select_if_in_octets_down = $selected;
$order = [
'field' => 'if_in_octets',
'order' => 'DESC',
];
break;
}
break;
case 'if_out_octets':
switch ($sort) {
case 'up':
$select_if_out_octets_up = $selected;
$order = [
'field' => 'if_out_octets',
'order' => 'ASC',
];
break;
case 'down':
default:
$select_if_out_octets_down = $selected;
$order = [
'field' => 'if_out_octets',
'order' => 'DESC',
];
break;
}
break;
case 'if_usage_module_data_in':
switch ($sort) {
case 'up':
$select_if_usage_module_data_in_up = $selected;
$order = [
'field' => 'if_usage_module_data_in',
'order' => 'ASC',
];
break;
case 'down':
default:
$select_if_usage_module_data_in_down = $selected;
$order = [
'field' => 'if_usage_module_data_in',
'order' => 'DESC',
];
break;
}
break;
case 'if_usage_module_data_out':
switch ($sort) {
case 'up':
$select_if_usage_module_data_out_up = $selected;
$order = [
'field' => 'if_usage_module_data_out',
'order' => 'ASC',
];
break;
case 'down':
default:
$select_if_usage_module_data_out_down = $selected;
$order = [
'field' => 'if_usage_module_data_out',
'order' => 'DESC',
];
break;
}
break;
case 'if_last_data':
switch ($sort) {
case 'up':
$select_if_last_data_up = $selected;
$order = [
'field' => 'if_last_data',
'order' => 'ASC',
];
break;
case 'down':
default:
$select_if_last_data_down = $selected;
$order = [
'field' => 'if_last_data',
'order' => 'DESC',
];
break;
}
break;
default:
$select_if_agent_name = ($sec === 'view') ? true : false;
$select_if_name_up = ($sec === 'estado') ? true : false;
$select_if_name_down = false;
$select_if_speed_data_up = false;
$select_if_speed_data_down = false;
$select_if_in_octets_up = false;
$select_if_in_octets_down = false;
$select_if_out_octets_up = false;
$select_if_out_octets_down = false;
$select_if_usage_module_data_in_up = false;
$select_if_usage_module_data_in_down = false;
$select_if_usage_module_data_out_up = false;
$select_if_usage_module_data_out_down = false;
$select_if_last_data_up = false;
$select_if_last_data_down = false;
break;
}
if ($sec === 'estado') {
$agent_id = (int) get_parameter('id_agente', 0);
$sort_url_page = 'ver_agente';
$sec = 'estado';
$query_params = '&id_agente='.$agent_id.'&tab=interface';
} else {
$sort_url_page = 'interface_view';
$sec = 'view';
$query_params = '';
}
// Build URLs to sort the table.
$url_if_agent_name = 'index.php?sec='.$sec.'&sec2=operation/agentes/'.$sort_url_page.$query_params;
$url_if_name = 'index.php?sec='.$sec.'&sec2=operation/agentes/'.$sort_url_page.$query_params;
$url_if_speed = 'index.php?sec='.$sec.'&sec2=operation/agentes/'.$sort_url_page.$query_params;
$url_if_in_octets = 'index.php?sec='.$sec.'&sec2=operation/agentes/'.$sort_url_page.$query_params;
$url_if_out_octets = 'index.php?sec='.$sec.'&sec2=operation/agentes/'.$sort_url_page.$query_params;
$url_if_bandwidth_usage_in = 'index.php?sec='.$sec.'&sec2=operation/agentes/'.$sort_url_page.$query_params;
$url_if_bandwidth_usage_out = 'index.php?sec='.$sec.'&sec2=operation/agentes/'.$sort_url_page.$query_params;
$last_data = 'index.php?sec='.$sec.'&sec2=operation/agentes/'.$sort_url_page.$query_params;
$selected_agents_query_str = '';
$selected_interfaces_query_str = '';
foreach ($selected_agents as $key => $agent) {
$selected_agents_query_str .= '&selected_agents['.$key.']='.$agent;
}
foreach ($selected_interfaces as $key => $interface) {
$selected_interfaces_query_str .= '&selected_interfaces['.$key.']='.$interface;
}
$url_if_agent_name .= $selected_agents_query_str.'&'.$selected_interfaces_query_str;
$url_if_name .= $selected_agents_query_str.'&'.$selected_interfaces_query_str;
$url_if_speed .= $selected_agents_query_str.'&'.$selected_interfaces_query_str;
$url_if_in_octets .= $selected_agents_query_str.'&'.$selected_interfaces_query_str;
$url_if_out_octets .= $selected_agents_query_str.'&'.$selected_interfaces_query_str;
$url_if_bandwidth_usage_in .= $selected_agents_query_str.'&'.$selected_interfaces_query_str;
$url_if_bandwidth_usage_out .= $selected_agents_query_str.'&'.$selected_interfaces_query_str;
$last_data .= $selected_agents_query_str.'&'.$selected_interfaces_query_str;
$url_if_agent_name .= '&recursion='.$recursion;
$url_if_name .= '&recursion='.$recursion;
$url_if_speed .= '&recursion='.$recursion;
$url_if_in_octets .= '&recursion='.$recursion;
$url_if_out_octets .= '&recursion='.$recursion;
$url_if_bandwidth_usage_in .= '&recursion='.$recursion;
$url_if_bandwidth_usage_out .= '&recursion='.$recursion;
$last_data .= '&recursion='.$recursion;
$url_if_agent_name .= '&sort_field=if_agent_name&sort=';
$url_if_name .= '&sort_field=if_name&sort=';
$url_if_speed .= '&sort_field=if_speed_data&sort=';
$url_if_in_octets .= '&sort_field=if_in_octets&sort=';
$url_if_out_octets .= '&sort_field=if_out_octets&sort=';
$url_if_bandwidth_usage_in .= '&sort_field=if_usage_module_data_in&sort=';
$url_if_bandwidth_usage_out .= '&sort_field=if_usage_module_data_out&sort=';
$last_data .= '&sort_field=if_last_data&sort=';
if (empty($data) === false) {
$table = new StdClass();
$table->cellpadding = 0;
$table->cellspacing = 0;
$table->width = '100%';
$table->class = 'info_table';
$table->head = [];
$table->data = [];
$table->size = [];
$table->align = [];
$show_fields = explode(',', $config['status_monitor_fields']);
if ($sec === 'view') {
$table->head[0] = __('Agent');
$table->head[0] .= ui_get_sorting_arrows(
$url_if_agent_name.'up',
$url_if_agent_name.'down',
$select_if_agent_name_up,
$select_if_agent_name_down
);
}
$table->head[1] = __('IfName');
$table->head[1] .= ui_get_sorting_arrows(
$url_if_name.'up',
$url_if_name.'down',
$select_if_name_up,
$select_if_name_down
);
$table->head[2] = __('Status');
$table->head[3] = __('IfSpeed');
$table->head[3] .= ui_get_sorting_arrows(
$url_if_speed.'up',
$url_if_speed.'down',
$select_if_speed_data_up,
$select_if_speed_data_down
);
$table->head[4] = __('IfInOctets');
$table->head[4] .= ui_get_sorting_arrows(
$url_if_in_octets.'up',
$url_if_in_octets.'down',
$select_if_in_octets_up,
$select_if_in_octets_down
);
$table->head[5] = __('IfOutOctets');
$table->head[5] .= ui_get_sorting_arrows(
$url_if_out_octets.'up',
$url_if_out_octets.'down',
$select_if_out_octets_up,
$select_if_out_octets_down
);
$table->head[6] = __('% Bandwidth usage (in)');
$table->head[6] .= ui_get_sorting_arrows(
$url_if_bandwidth_usage_in.'up',
$url_if_bandwidth_usage_in.'down',
$select_if_usage_module_data_in_up,
$select_if_usage_module_data_in_down
);
$table->head[7] = __('% Bandwidth usage (out)');
$table->head[7] .= ui_get_sorting_arrows(
$url_if_bandwidth_usage_out.'up',
$url_if_bandwidth_usage_out.'down',
$select_if_usage_module_data_out_up,
$select_if_usage_module_data_out_down
);
$table->head[8] = __('Last data');
$table->head[8] .= ui_get_sorting_arrows(
$last_data.'up',
$last_data.'down',
$select_if_last_data_up,
$select_if_last_data_down
);
$loop_index = 0;
$table_data = [];
$interfaces_array = array_column($data, 'interfaces');
$agents = array_column($data, 'name');
$all_interfaces = [];
foreach ($data as $value) {
$agent_alias = agents_get_alias($value['name']);
foreach ($value['interfaces'] as $if_name => $interface) {
$interface['agent_id'] = $value['name'];
$interface['agent_alias'] = $agent_alias;
$interface['if_name'] = $if_name;
$all_interfaces[$if_name] = $interface;
}
}
if ($sec === 'estado'
&& is_array($selected_interfaces) === true
&& empty($selected_interfaces) === true
) {
$filtered_interfaces = $all_interfaces;
} else {
// Filter interfaces array.
$filtered_interfaces = array_filter(
$all_interfaces,
function ($interface) use ($selected_interfaces) {
return in_array(
$interface['status_module_id'],
$selected_interfaces
) === true;
}
);
}
$data = [];
foreach ($filtered_interfaces as $if_name => $agent_interfaces) {
// Get usage modules.
$usage_module_in = db_get_row(
'tagente_modulo',
'nombre',
$if_name.'_inUsage'
);
$usage_module_out = db_get_row(
'tagente_modulo',
'nombre',
$if_name.'_outUsage'
);
$usage_module_id_in = $usage_module_in['id_agente_modulo'];
$usage_module_id_out = $usage_module_out['id_agente_modulo'];
$usage_module_description = $usage_module_in['descripcion'];
// Get usage modules data.
$usage_module_data_in = modules_get_previous_data(
$usage_module_id_in,
time()
);
$usage_module_data_out = modules_get_previous_data(
$usage_module_id_out,
time()
);
// Extract ifSpeed from description of usage module.
$if_speed_str = strstr($usage_module_description, 'Speed:');
$if_speed_str = substr($if_speed_str, 0, -1);
$if_speed_str = explode(':', $if_speed_str)[1];
$matches = [];
preg_match_all('/\d+/', $if_speed_str, $matches);
$if_speed_value = $matches[0][0];
// Transform ifSpeed unit.
$divisor = 1000;
$counter = 0;
while ($if_speed_value >= $divisor) {
if ($if_speed_value >= $divisor) {
$if_speed_value = ($if_speed_value / $divisor);
}
$counter++;
}
$if_speed_unit = 'bps';
switch ($counter) {
case 1:
$if_speed_unit = 'Kbps';
break;
case 2:
$if_speed_unit = 'Mbps';
break;
case 3:
$if_speed_unit = 'Gbps';
break;
case 4:
$if_speed_unit = 'Tbps';
break;
default:
$if_speed_unit = 'bps';
break;
}
// Get in and out traffic.
$ifInOctets = modules_get_previous_data(
$agent_interfaces['traffic']['in'],
time()
);
$ifOutOctets = modules_get_previous_data(
$agent_interfaces['traffic']['out'],
time()
);
// Get last data timestamp.
$timestamps_array = array_merge(
array_column(ifInOctets, 'utimestamp'),
array_column(ifOutOctets, 'utimestamp')
);
if ($sec === 'view') {
$table_data[$loop_index]['if_agent_name'] = '<a href="index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=main&id_agente='.$agent_interfaces['agent_id'].'">'.$agent_interfaces['agent_alias'].'</a>';
}
$table_data[$loop_index]['if_name'] = $agent_interfaces['if_name'];
$table_data[$loop_index]['if_status_image'] = $agent_interfaces['status_image'];
$table_data[$loop_index]['if_speed_data'] = ($if_speed_value === null) ? __('N/A') : $if_speed_value.' '.$if_speed_unit;
$table_data[$loop_index]['if_in_octets'] = ($ifInOctets['datos'] === null) ? __('N/A') : $ifInOctets['datos'];
$table_data[$loop_index]['if_out_octets'] = ($ifOutOctets['datos'] === null) ? __('N/A') : $ifOutOctets['datos'];
$table_data[$loop_index]['if_usage_module_data_in'] = ($usage_module_data_in['datos'] === null) ? __('N/A') : $usage_module_data_in['datos'];
$table_data[$loop_index]['if_usage_module_data_out'] = ($usage_module_data_out['datos'] === null) ? __('N/A') : $usage_module_data_out['datos'];
$table_data[$loop_index]['if_last_data'] = human_time_comparation(
max(
$ifInOctets['utimestamp'],
$ifOutOctets['utimestamp']
)
);
$loop_index++;
}
// Sort array of previously processed table values.
if ($sort === 'up') {
$res = usort(
$table_data,
function ($a, $b) use ($sort_field) {
if ($a[$sort_field] > $b[$sort_field]) {
return 1;
} else {
return -1;
}
}
);
}
if ($sort === 'down') {
$res = usort(
$table_data,
function ($a, $b) use ($sort_field) {
if ($b[$sort_field] > $a[$sort_field]) {
return 1;
} else {
return -1;
}
}
);
}
$sliced_table_data = array_slice(
$table_data,
$pagination_index,
$config['block_size']
);
foreach ($sliced_table_data as $value) {
array_push($table->data, array_values($value));
}
html_print_table($table);
if (count($selected_interfaces) > $config['block_size']) {
ui_pagination(count($selected_interfaces), false, $pagination_index, 0, false, 'offset', true, 'pagination-bottom');
}
} else {
ui_print_info_message(['no_close' => true, 'message' => __('No search parameters')]);
}
}

View File

@ -0,0 +1,259 @@
<?php
/**
* Pandora FMS - http://pandorafms.com
* ==================================================
* Copyright (c) 2005-2021 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; 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;
check_login();
if (check_acl($config['id_user'], 0, 'AR') === false) {
db_pandora_audit(
'ACL Violation',
'Trying to access Agent Management'
);
include 'general/noaccess.php';
return;
}
require_once 'interface_view.functions.php';
require_once $config['homedir'].'/include/functions_agents.php';
$recursion = get_parameter_switch('recursion', false);
if ($recursion === false) {
$recursion = get_parameter('recursion', false);
}
$selected_agents = get_parameter('selected_agents', []);
$selected_interfaces = get_parameter('selected_interfaces', []);
$refr = (int) get_parameter('refr', 0);
$offset = (int) get_parameter('offset', 0);
$sort_field = get_parameter('sort_field');
$sort = get_parameter('sort', 'none');
$autosearch = false;
$sec = (string) get_parameter('sec', 'view');
$agent_id = (int) get_parameter('id_agente', 0);
if ($sec === 'view') {
ui_print_page_header(
__('Interface view').$subpage,
'',
false,
'',
true
);
}
$agent_filter = ['id_agente' => $agent_id];
// Autosearch if search parameters are different from those by default.
if (empty($selected_agents) === false || empty($selected_interfaces) === false
|| $sort_field !== '' || $sort !== 'none' || $sec === 'estado'
) {
$autosearch = true;
}
print_filters($sec);
$result = false;
if ($autosearch === true) {
if ($sec === 'estado') {
$result = agents_get_network_interfaces(false, $agent_filter);
} else {
$result = agents_get_network_interfaces($selected_agents);
}
if ($result === false) {
$result = [];
} else {
ui_pagination(
count($selected_interfaces),
false,
$offset,
0,
false,
'offset',
true
);
}
}
print_table(
$result,
$selected_agents,
$selected_interfaces,
$sort_field,
$sort,
$offset,
$sec
);
?>
<script type="text/javascript">
$(document).ready(function() {
var group_id = $("#group_id").val();
load_agents_selector(group_id);
var sec = "<?php echo $sec; ?>";
var agent_id = "<?php echo $agent_id; ?>";
if (sec === 'estado' && agent_id > 0) {
load_agent_interfaces_selector([agent_id]);
}
});
$('#moduletype').click(function() {
jQuery.get (
"ajax.php",
{
"page": "general/subselect_data_module",
"module":$('#moduletype').val()
},
function (data, status) {
$("#datatypetittle").show ();
$("#datatypebox").hide ()
.empty ()
.append (data)
.show ();
},
"html"
);
return false;
});
function toggle_full_value(id) {
text = $('#hidden_value_module_' + id).html();
old_text = $("#value_module_text_" + id).html();
$("#hidden_value_module_" + id).html(old_text);
$("#value_module_text_" + id).html(text);
}
function load_agents_selector(group) {
jQuery.post ("ajax.php",
{
"page" : "operation/agentes/ver_agente",
"get_agents_group_json" : 1,
"id_group" : group,
"privilege" : "AW",
"keys_prefix" : "_",
"recursion" : $('#checkbox-recursion').is(':checked')
},
function (data, status) {
$("#selected_agents").html('');
jQuery.each (data, function (id, value) {
id = id.substring(1);
option = $("<option></option>")
.attr ("value", value["id_agente"])
.html (value["alias"]);
$("#id_agents").append (option);
$("#selected_agents").append (option);
});
var selected_agents = "<?php echo implode(',', $selected_agents); ?>";
$.each(selected_agents.split(","), function(i,e) {
$("#selected_agents option[value='" + e + "']").prop(
"selected",
true
);
});
load_agent_interfaces_selector($("#selected_agents").val());
},
"json"
);
}
$("#group_id").change(function() {
load_agents_selector(this.value);
});
$("#checkbox-recursion").change (function () {
jQuery.post ("ajax.php",
{"page" : "operation/agentes/ver_agente",
"get_agents_group_json" : 1,
"id_group" : $("#group_id").val(),
"privilege" : "AW",
"keys_prefix" : "_",
"recursion" : $('#checkbox-recursion').is(':checked')
},
function (data, status) {
$("#selected_agents").html('');
$("#module").html('');
jQuery.each (data, function (id, value) {
id = id.substring(1);
option = $("<option></option>")
.attr ("value", value["id_agente"])
.html (value["alias"]);
$("#id_agents").append (option);
$("#selected_agents").append (option);
});
},
"json"
);
});
$("#selected_agents").click (function() {
var selected_agents = $(this).val();
load_agent_interfaces_selector(selected_agents);
});
function load_agent_interfaces_selector(selected_agents) {
$("#selected_interfaces").empty();
jQuery.post ("ajax.php",
{
"page" : "include/ajax/agent",
"get_agents_interfaces" : 1,
"id_agents" : selected_agents
},
function (data, status) {
$("#module").html('');
if (data) {
Object.values(data).forEach(function(obj) {
for (const [key, value] of Object.entries(obj.interfaces)) {
option = $("<option></option>")
.attr ("value", value.status_module_id)
.html (key + ' (' + obj.agent_alias + ')');
$("#selected_interfaces").append(option);
}
});
}
var selected_interfaces =
"<?php echo implode(',', $selected_interfaces); ?>";
$.each(selected_interfaces.split(","), function(i,e) {
$("#selected_interfaces option[value='" + e + "']").prop(
"selected",
true
);
});
},
"json"
);
}
</script>

View File

@ -390,7 +390,7 @@ if ($not_found) {
'circo' => 'circular',
'neato' => 'spring1',
'fdp' => 'spring2',
'radial_dinamic' => 'radial dinamic',
'radial_dinamic' => 'radial dynamic',
];
$table->data[7][0] = __('Method generation networkmap');

View File

@ -64,6 +64,10 @@ if (file_exists('../../include/languages/'.$user_language.'.mo')) {
$l10n->load_tables();
}
if ($config['style'] === 'pandora_black') {
ui_require_css_file('pandora_black', 'include/styles/', true);
}
echo '<link rel="stylesheet" href="../../include/styles/pandora.css" type="text/css"/>';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
@ -92,6 +96,10 @@ echo '<link rel="stylesheet" href="../../include/styles/pandora.css" type="text/
include_javascript_dependencies_flot_graph();
?>
</head>
<?php
if ($config['style'] === 'pandora_black') {
}
?>
<body bgcolor="#ffffff" class='bg_white'>
<?php
if (!check_acl($config['id_user'], 0, 'AR')) {

View File

@ -244,6 +244,10 @@ if ($ag_modulename != '') {
$sql_conditions .= " AND tagente_modulo.nombre LIKE '%".$ag_modulename."%'";
}
if ($id_module) {
$sql_conditions .= sprintf(' AND tagente_modulo.id_agente_modulo = \'%d\'', $id_module);
}
if ($module_option !== 0) {
if ($module_option == 1) {
// Only enabled

View File

@ -1319,7 +1319,30 @@ if ($tab == 'main') {
$maintab['active'] = false;
}
// Interfaces tab.
$agent_interfaces = agents_get_network_interfaces(
false,
['id_agente' => $id_agente]
);
$agent_interfaces_count = count($agent_interfaces[$id_agente]['interfaces']);
if ($agent_interfaces_count > 0) {
$interfacetab['text'] = '<a href="index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$id_agente.'&tab=interface">'.html_print_image(
'images/link.png',
true,
[
'title' => __('Interfaces'),
'class' => 'invert_filter',
]
).'</a>';
if ($tab == 'interface') {
$interfacetab['active'] = true;
} else {
$interfacetab['active'] = false;
}
}
// Alert tab.
$alerttab['text'] = '<a href="index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$id_agente.'&tab=alert">'.html_print_image(
@ -1600,6 +1623,7 @@ $onheader = [
'manage' => $managetab,
'main' => $maintab,
'alert' => $alerttab,
'interface' => $interfacetab,
'inventory' => $inventorytab,
'collection' => $collectiontab,
'gis' => $gistab,
@ -1718,6 +1742,10 @@ switch ($tab) {
$tab_name = '';
break;
case 'interface':
$tab_name = 'Interfaces';
break;
case 'alert':
$tab_name = 'Alerts';
break;
@ -1848,6 +1876,10 @@ switch ($tab) {
include 'datos_agente.php';
break;
case 'interface':
include 'interface_view.php';
break;
case 'alert':
include 'alerts_status.php';
break;

View File

@ -16,13 +16,6 @@ global $config;
check_login();
if (!(check_acl($config['id_user'], 0, 'IW') && check_acl($config['id_user'], 0, 'IR'))) {
// Doesn't have access to this page.
db_pandora_audit('ACL Violation', 'Trying to access IntegriaIMS ticket creation');
include 'general/noaccess.php';
exit;
}
require_once $config['homedir'].'/include/functions_integriaims.php';
$update = (isset($_GET['incident_id']) === true);
@ -42,7 +35,7 @@ if ($config['integria_enabled'] == 0) {
}
// Check connection to Integria IMS API.
$has_connection = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_login');
$has_connection = integria_api_call(null, null, null, null, 'get_login');
if ($has_connection === false) {
ui_print_error_message(__('Integria IMS API is not reachable'));
@ -59,19 +52,19 @@ $integria_users_values = [];
$integria_types_values = [];
$integria_status_values = [];
$integria_groups_csv = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_groups');
$integria_groups_csv = integria_api_call(null, null, null, null, 'get_groups');
get_array_from_csv_data_pair($integria_groups_csv, $integria_group_values);
$integria_status_csv = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_incidents_status');
$integria_status_csv = integria_api_call(null, null, null, null, 'get_incidents_status');
get_array_from_csv_data_pair($integria_status_csv, $integria_status_values);
$integria_criticity_levels_csv = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_incident_priorities');
$integria_criticity_levels_csv = integria_api_call(null, null, null, null, 'get_incident_priorities');
get_array_from_csv_data_pair($integria_criticity_levels_csv, $integria_criticity_values);
$integria_users_csv = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_users');
$integria_users_csv = integria_api_call(null, null, null, null, 'get_users');
$csv_array = explode("\n", $integria_users_csv);
@ -81,7 +74,7 @@ foreach ($csv_array as $csv_line) {
}
}
$integria_types_csv = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_types');
$integria_types_csv = integria_api_call(null, null, null, null, 'get_types');
get_array_from_csv_data_pair($integria_types_csv, $integria_types_values);
@ -105,7 +98,7 @@ $incident_content = str_replace(',', ':::', $incident_content);
// Perform action.
if ($create_incident === true) {
// Call Integria IMS API method to create an incident.
$result_api_call = integria_api_call($config['integria_hostname'], $incident_creator, $config['integria_pass'], $config['integria_api_pass'], 'create_incident', [$incident_title, $incident_group_id, $incident_criticity_id, $incident_content, '', $incident_type, '', $incident_owner, '0', $incident_status], false, '', ',');
$result_api_call = integria_api_call(null, null, null, null, 'create_incident', [$incident_title, $incident_group_id, $incident_criticity_id, $incident_content, '', $incident_type, '', $incident_owner, '0', $incident_status], false, '', ',');
// Necessary to explicitly set true if not false because function returns api call result in case of success instead of true value.
$incident_created_ok = ($result_api_call != false) ? true : false;
@ -117,7 +110,7 @@ if ($create_incident === true) {
);
} else if ($update_incident === true) {
// Call Integria IMS API method to update an incident.
$result_api_call = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'update_incident', [$incident_id_edit, $incident_title, $incident_content, '', $incident_group_id, $incident_criticity_id, 0, $incident_status, $incident_owner, 0, $incident_type], false, '', ',');
$result_api_call = integria_api_call(null, null, null, null, 'update_incident', [$incident_id_edit, $incident_title, $incident_content, '', $incident_group_id, $incident_criticity_id, 0, $incident_status, $incident_owner, 0, $incident_type], false, '', ',');
// Necessary to explicitly set true if not false because function returns api call result in case of success instead of true value.
$incident_updated_ok = ($result_api_call != false) ? true : false;
@ -132,7 +125,7 @@ if ($create_incident === true) {
// If incident id is specified, retrieve incident values from api to populate combos with such values.
if ($update) {
// Call Integria IMS API method to get details of an incident given its id.
$result_api_call = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_incident_details', [$incident_id_edit], false, '', ',');
$result_api_call = integria_api_call(null, null, null, null, 'get_incident_details', [$incident_id_edit], false, '', ',');
// API call does not return indexes, therefore future modifications of API function in Integria IMS may lead to inconsistencies when accessing resulting array in this file.
$incident_details_separator = explode(',', $result_api_call);

View File

@ -18,13 +18,6 @@ require_once 'include/functions_integriaims.php';
check_login();
if (!check_acl($config['id_user'], 0, 'IR')) {
// Doesn't have access to this page.
db_pandora_audit('ACL Violation', 'Trying to access IntegriaIMS ticket creation');
include 'general/noaccess.php';
exit;
}
// Check if Integria integration enabled.
if ($config['integria_enabled'] == 0) {
ui_print_error_message(__('In order to access ticket management system, integration with Integria IMS must be enabled and properly configured'));
@ -32,7 +25,7 @@ if ($config['integria_enabled'] == 0) {
}
// Check connection to Integria IMS API.
$has_connection = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_login', []);
$has_connection = integria_api_call(null, null, null, null, 'get_login', []);
if ($has_connection === false) {
ui_print_error_message(__('Integria IMS API is not reachable'));
@ -46,10 +39,10 @@ ui_require_css_file('integriaims');
$incident_id = (int) get_parameter('incident_id');
// API call.
$result_api_call_list = integria_api_call(
$config['integria_hostname'],
$config['integria_user'],
$config['integria_pass'],
$config['integria_api_pass'],
null,
null,
null,
null,
'get_incident_details',
[$incident_id]
);
@ -124,10 +117,7 @@ $table_files->head[1] = __('Timestamp');
$table_files->head[2] = __('Description');
$table_files->head[3] = __('User');
$table_files->head[4] = __('Size');
if (check_acl($config['id_user'], 0, 'IW')) {
$table_files->head[5] = __('Delete');
}
$table_files->head[5] = __('Delete');
$table_files->data = [];
@ -159,7 +149,7 @@ if ($upload_file && ($_FILES['userfile']['name'] != '')) {
$filecontent = base64_encode(file_get_contents($_FILES['userfile']['tmp_name']));
$result_api_call = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'attach_file', [$incident_id, $filename, $filesize, $filedescription, $filecontent], false, '', ';');
$result_api_call = integria_api_call(null, null, null, null, 'attach_file', [$incident_id, $filename, $filesize, $filedescription, $filecontent], false, '', '|;|');
// API method returns '0' string if success.
$file_added = ($result_api_call === '0') ? true : false;
@ -176,7 +166,7 @@ if ($upload_file && ($_FILES['userfile']['name'] != '')) {
// Delete file.
if (isset($_GET['delete_file'])) {
$result_api_call = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'delete_file', [$delete_file_id]);
$result_api_call = integria_api_call(null, null, null, null, 'delete_file', [$delete_file_id]);
$file_deleted = false;
@ -193,7 +183,7 @@ if (isset($_GET['delete_file'])) {
// Download file.
if (isset($_GET['download_file'])) {
$file_base64 = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'download_file', [$download_file_id]);
$file_base64 = integria_api_call(null, null, null, null, 'download_file', [$download_file_id]);
ob_end_clean();
$decoded = base64_decode($file_base64);
@ -219,7 +209,7 @@ if (isset($_GET['download_file'])) {
}
// Retrieve files belonging to incident and create list table.
$result_api_call = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_incident_files', [$incident_id]);
$result_api_call = integria_api_call(null, null, null, null, 'get_incident_files', [$incident_id]);
if ($result_api_call != false && strlen($result_api_call) > 0) {
$files = [];
@ -240,11 +230,10 @@ foreach ($files as $key => $value) {
$table_files->data[$i][2] = $value[12];
$table_files->data[$i][3] = $value[8];
$table_files->data[$i][4] = $value[13];
if (check_acl($config['id_user'], 0, 'IW')) {
$table_files->data[$i][5] .= '<a id="link_delete_file" href="'.ui_get_full_url('index.php?sec=incident&sec2=operation/incidents/dashboard_detail_integriaims_incident&incident_id='.$incident_id.'&delete_file='.$value[0]).'"
onClick="javascript:if (!confirm(\''.__('Are you sure?').'\')) return false;">';
$table_files->data[$i][5] .= html_print_image('images/cross.png', true, ['title' => __('Delete'), 'class' => 'invert_filter']);
}
$table_files->data[$i][5] .= '<a id="link_delete_file" href="'.ui_get_full_url('index.php?sec=incident&sec2=operation/incidents/dashboard_detail_integriaims_incident&incident_id='.$incident_id.'&delete_file='.$value[0]).'"
onClick="javascript:if (!confirm(\''.__('Are you sure?').'\')) return false;">';
$table_files->data[$i][5] .= html_print_image('images/cross.png', true, ['title' => __('Delete'), 'class' => 'invert_filter']);
$table_files->data[$i][5] .= '</a>';
@ -267,9 +256,7 @@ $table_files_section->data[2][0] .= '<div class="w100p right">'.html_print_submi
$upload_file_form = '<div class="w100p">';
if (check_acl($config['id_user'], 0, 'IW')) {
$upload_file_form .= '<form method="post" id="file_control" enctype="multipart/form-data">'.'<h4>'.__('Add attachment').'</h4>'.html_print_table($table_files_section, true).html_print_input_hidden('upload_file', 1, true);
}
$upload_file_form .= '<form method="post" id="file_control" enctype="multipart/form-data">'.'<h4>'.__('Add attachment').'</h4>'.html_print_table($table_files_section, true).html_print_input_hidden('upload_file', 1, true);
$upload_file_form .= '<h4>'.__('Attached files').'</h4>'.html_print_table($table_files, true).'</form></div>';
@ -322,7 +309,7 @@ $table_comments_section->data[1][1] .= '<div class="w100p right">'.html_print_su
// Upload comment. If ticket is closed, this action cannot be performed.
if ($upload_comment && $array_get_incidents[6] != 7) {
$result_api_call = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'create_workunit', [$incident_id, $comment_description, '0.00', 0, 1, '0'], false, '', '|;|');
$result_api_call = integria_api_call(null, null, null, null, 'create_workunit', [$incident_id, $comment_description, '0.00', 0, 1, '0'], false, '', '|;|');
// API method returns id of new comment if success.
$comment_added = ($result_api_call >= '0') ? true : false;
@ -335,7 +322,7 @@ if ($upload_comment && $array_get_incidents[6] != 7) {
}
// Retrieve comments belonging to incident and create comments table.
$result_api_call = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_incident_workunits', [$incident_id]);
$result_api_call = integria_api_call(null, null, null, null, 'get_incident_workunits', [$incident_id]);
if ($result_api_call != false && strlen($result_api_call) > 0) {
$comments = [];
@ -361,9 +348,8 @@ if (!empty($comments)) {
$upload_comment_form = '<div class="w100p">';
if (check_acl($config['id_user'], 0, 'IW')) {
$upload_comment_form .= '<form method="post" id="comment_form" enctype="multipart/form-data"><h4>'.__('Add comment').'</h4>'.html_print_table($table_comments_section, true).html_print_input_hidden('upload_comment', 1, true).'</form>';
}
$upload_comment_form .= '<form method="post" id="comment_form" enctype="multipart/form-data"><h4>'.__('Add comment').'</h4>'.html_print_table($table_comments_section, true).html_print_input_hidden('upload_comment', 1, true).'</form>';
$upload_comment_form .= '<h4>'.__('Comments').'</h4>'.$comment_table.'</div>';

View File

@ -18,12 +18,6 @@ require_once $config['homedir'].'/include/functions_graph.php';
check_login();
if (! check_acl($config['id_user'], 0, 'IR') && ! check_acl($config['id_user'], 0, 'IW') && ! check_acl($config['id_user'], 0, 'IM')) {
db_pandora_audit('ACL Violation', 'Trying to access Incident section');
include 'general/noaccess.php';
exit;
}
ui_print_page_header(__('Incidents').' &raquo; '.__('Statistics'), 'images/book_edit.png', false, '', false, '');
if (!$config['integria_enabled']) {

View File

@ -20,14 +20,6 @@ require_once '../../include/functions_integriaims.php';
check_login();
if (! check_acl($config['id_user'], 0, 'IR') && ! check_acl($config['id_user'], 0, 'IW') && ! check_acl($config['id_user'], 0, 'IM')) {
// Doesn't have access to this page.
db_pandora_audit('ACL Violation', 'Trying to access IntegriaIMS ticket creation');
include 'general/noaccess.php';
exit;
}
// API calls.
$status_incident = integriaims_get_details('status');
$group_incident = integriaims_get_details('group');

View File

@ -18,13 +18,6 @@ require_once 'include/functions_integriaims.php';
check_login();
if (! check_acl($config['id_user'], 0, 'IR')) {
// Doesn't have access to this page.
db_pandora_audit('ACL Violation', 'Trying to access IntegriaIMS ticket creation');
include 'general/noaccess.php';
exit;
}
// Header tabs.
$onheader = integriaims_tabs('list_tab');
ui_print_page_header(
@ -43,7 +36,7 @@ if ($config['integria_enabled'] == 0) {
}
// Check connection to Integria IMS API.
$has_connection = integria_api_call($config['integria_hostname'], $config['integria_user'], $config['integria_pass'], $config['integria_api_pass'], 'get_login', []);
$has_connection = integria_api_call(null, null, null, null, 'get_login', []);
if ($has_connection === false) {
ui_print_error_message(__('Integria IMS API is not reachable'));
@ -70,10 +63,10 @@ $delete_incident = get_parameter('delete_incident');
if ($delete_incident) {
// Call Integria IMS API method to delete an incident.
$result_api_call_delete = integria_api_call(
$config['integria_hostname'],
$config['integria_user'],
$config['integria_pass'],
$config['integria_api_pass'],
null,
null,
null,
null,
'delete_incident',
[$delete_incident]
);
@ -266,9 +259,7 @@ $table->head[4] = __('Prior');
$table->head[5] = __('Updated/Started');
$table->head[6] = __('Creator');
$table->head[7] = __('Owner');
if (check_acl($config['id_user'], 0, 'IW') || check_acl($config['id_user'], 0, 'IM')) {
$table->head[8] = '';
}
$table->head[8] = '';
$table->data = [];
$i = 0;
@ -294,18 +285,14 @@ foreach ($incidents_paginated as $key => $value) {
$table->data[$i][7] = $array_get_incidents[$key][5];
$table->data[$i][8] = '';
$table->cellclass[$i][8] = 'action_buttons';
if (check_acl($config['id_user'], 0, 'IW')) {
$table->data[$i][8] .= '<a href="'.ui_get_full_url('index.php?sec=incident&sec2=operation/incidents/configure_integriaims_incident&incident_id='.$array_get_incidents[$key][0]).'">';
$table->data[$i][8] .= html_print_image('images/config.png', true, ['title' => __('Edit')]);
$table->data[$i][8] .= '</a>';
}
$table->data[$i][8] .= '<a href="'.ui_get_full_url('index.php?sec=incident&sec2=operation/incidents/configure_integriaims_incident&incident_id='.$array_get_incidents[$key][0]).'">';
$table->data[$i][8] .= html_print_image('images/config.png', true, ['title' => __('Edit')]);
$table->data[$i][8] .= '</a>';
if (check_acl($config['id_user'], 0, 'IM')) {
$table->data[$i][8] .= '<a id="link_delete_incident" href="'.ui_get_full_url('index.php?sec=incident&sec2=operation/incidents/list_integriaims_incidents&delete_incident='.$array_get_incidents[$key][0]).'"
onClick="javascript:if (!confirm(\''.__('Are you sure?').'\')) return false;">';
$table->data[$i][8] .= html_print_image('images/cross.png', true, ['title' => __('Delete'), 'class' => 'invert_filter']);
$table->data[$i][8] .= '</a>';
}
$table->data[$i][8] .= '<a id="link_delete_incident" href="'.ui_get_full_url('index.php?sec=incident&sec2=operation/incidents/list_integriaims_incidents&delete_incident='.$array_get_incidents[$key][0]).'"
onClick="javascript:if (!confirm(\''.__('Are you sure?').'\')) return false;">';
$table->data[$i][8] .= html_print_image('images/cross.png', true, ['title' => __('Delete'), 'class' => 'invert_filter']);
$table->data[$i][8] .= '</a>';
$i++;
}
@ -320,13 +307,11 @@ if (empty($table->data) === true) {
}
// Show button to create incident.
if (check_acl($config['id_user'], 0, 'IR')) {
echo '<form method="POST" action="'.ui_get_full_url('index.php?sec=incident&sec2=operation/incidents/configure_integriaims_incident').'">';
echo '<div class="wi100p right">';
html_print_submit_button(__('Create'), 'create_new_incident', false, 'class="sub next"');
echo '</div>';
echo '</form>';
}
echo '<form method="POST" action="'.ui_get_full_url('index.php?sec=incident&sec2=operation/incidents/configure_integriaims_incident').'">';
echo '<div class="wi100p right">';
html_print_submit_button(__('Create'), 'create_new_incident', false, 'class="sub next"');
echo '</div>';
echo '</form>';
// Datapicker library for show calendar.
ui_require_jquery_file('ui.datepicker-'.get_user_language(), 'include/javascript/i18n/');

View File

@ -58,6 +58,9 @@ if (check_acl($config['id_user'], 0, 'AR')) {
$sub2['operation/agentes/status_monitor']['text'] = __('Monitor detail');
$sub2['operation/agentes/status_monitor']['refr'] = 0;
$sub2['operation/agentes/interface_view']['text'] = __('Interface view');
$sub2['operation/agentes/interface_view']['refr'] = 0;
enterprise_hook('tag_view_submenu');
$sub2['operation/agentes/alerts_status']['text'] = __('Alert detail');
@ -267,9 +270,9 @@ if (check_acl($config['id_user'], 0, 'MR') || check_acl($config['id_user'], 0, '
$own_info = get_user_info($config['id_user']);
if ($own_info['is_admin'] || check_acl($config['id_user'], 0, 'PM')) {
$own_groups = array_keys(users_get_groups($config['id_user'], 'IR'));
$own_groups = array_keys(users_get_groups($config['id_user'], 'MR'));
} else {
$own_groups = array_keys(users_get_groups($config['id_user'], 'IR', false));
$own_groups = array_keys(users_get_groups($config['id_user'], 'MR', false));
}
foreach ($gisMaps as $gisMap) {
@ -278,10 +281,6 @@ if (check_acl($config['id_user'], 0, 'MR') || check_acl($config['id_user'], 0, '
continue;
}
if (! check_acl($config['id_user'], $gisMap['group_id'], 'IR')) {
continue;
}
$sub2['operation/gis_maps/render_view&amp;map_id='.$gisMap['id_tgis_map']]['text'] = mb_substr(io_safe_output($gisMap['map_name']), 0, 15);
$sub2['operation/gis_maps/render_view&amp;map_id='.$gisMap['id_tgis_map']]['id'] = mb_substr(io_safe_output($gisMap['map_name']), 0, 15);
$sub2['operation/gis_maps/render_view&amp;map_id='.$gisMap['id_tgis_map']]['title'] = io_safe_output($gisMap['map_name']);
@ -459,30 +458,25 @@ $sub['operation/users/user_edit_notifications']['refr'] = 0;
// Incidents.
if (check_acl($config['id_user'], 0, 'IR')
|| check_acl($config['id_user'], 0, 'IW')
|| check_acl($config['id_user'], 0, 'IM')
) {
$temp_sec2 = $sec2;
$sec2 = 'incident';
$sec2sub = 'operation/incidents/incident_statistics';
$sub[$sec2]['text'] = __('Incidents');
$sub[$sec2]['id'] = 'Incidents';
$sub[$sec2]['type'] = 'direct';
$sub[$sec2]['subtype'] = 'nolink';
$sub[$sec2]['refr'] = 0;
$sub[$sec2]['subsecs'] = [
'operation/incidents/incident_detail',
'operation/integria_incidents',
];
$temp_sec2 = $sec2;
$sec2 = 'incident';
$sec2sub = 'operation/incidents/incident_statistics';
$sub[$sec2]['text'] = __('Incidents');
$sub[$sec2]['id'] = 'Incidents';
$sub[$sec2]['type'] = 'direct';
$sub[$sec2]['subtype'] = 'nolink';
$sub[$sec2]['refr'] = 0;
$sub[$sec2]['subsecs'] = [
'operation/incidents/incident_detail',
'operation/integria_incidents',
];
$sub2 = [];
$sub2[$sec2sub]['text'] = __('Integria IMS statistics');
$sub2['operation/incidents/list_integriaims_incidents']['text'] = __('Integria IMS ticket list');
$sub2 = [];
$sub2[$sec2sub]['text'] = __('Integria IMS statistics');
$sub2['operation/incidents/list_integriaims_incidents']['text'] = __('Integria IMS ticket list');
$sub[$sec2]['sub2'] = $sub2;
$sec2 = $temp_sec2;
}
$sub[$sec2]['sub2'] = $sub2;
$sec2 = $temp_sec2;
// Messages.

View File

@ -370,7 +370,7 @@ if (is_metaconsole()) {
).'</td>';
$own_info = get_user_info($config['id_user']);
echo '<td><span id="filter_group_color"><b>'.__('Group').'</b></span></td>';
echo "<td colspan='2'>".html_print_select_groups($config['id_user'], 'IW', $own_info['is_admin'], 'assign_group', $filter['id_group'], '', '', -1, true, false, false).'</td>';
echo "<td colspan='2'>".html_print_select_groups($config['id_user'], 'AR', $own_info['is_admin'], 'assign_group', $filter['id_group'], '', '', -1, true, false, false).'</td>';
echo '</tr>';
$advanced_toggle = '<table class="w100p">';

View File

@ -16,7 +16,7 @@ global $config;
require_once 'include/functions_custom_graphs.php';
// Check ACL
$searchGraphs = check_acl($config['id_user'], 0, 'IR');
$searchGraphs = check_acl($config['id_user'], 0, 'RR');
$graphs = false;

View File

@ -15,7 +15,7 @@ global $config;
require_once 'include/functions_custom_graphs.php';
$searchGraphs = check_acl($config['id_user'], 0, 'IR');
$searchGraphs = check_acl($config['id_user'], 0, 'RR');
if ($graphs === false || !$searchGraphs) {
echo "<br><div class='nf'>".__('Zero results found')."</div>\n";

View File

@ -13,8 +13,6 @@
// GNU General Public License for more details.
global $config;
$totalHelps = check_acl($config['id_user'], 0, 'IR');
if ($helps === false || !$searchHelps) {
echo "<br><div class='nf'>".__('Zero results found.').sprintf(
__('You can find more help in the <a class="underline" href="%s">wiki</a>'),

View File

@ -13,7 +13,7 @@
// GNU General Public License for more details.
global $config;
$searchMaps = check_acl($config['id_user'], 0, 'IR');
$searchMaps = check_acl($config['id_user'], 0, 'VR');
$maps = false;
$totalMaps = 0;

View File

@ -13,7 +13,7 @@
// GNU General Public License for more details.
global $config;
$searchMaps = check_acl($config['id_user'], 0, 'IR');
$searchMaps = check_acl($config['id_user'], 0, 'VR');
if ($maps === false || !$searchMaps) {
echo "<br><div class='nf'>".__('Zero results found')."</div>\n";

View File

@ -19,9 +19,7 @@ require_once 'include/functions_reports.php';
$linkReport = false;
$searchReports = check_acl($config['id_user'], 0, 'RR');
if (check_acl($config['id_user'], 0, 'IW')) {
$linkReport = true;
}
$linkReport = true;
if ($reports === false || !$searchReports) {
echo "<br><div class='nf'>".__('Zero results found')."</div>\n";

View File

@ -19,7 +19,8 @@ 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, 'AR');
$searchMaps = $searchReports = $searchGraphs = check_acl($config['id_user'], 0, 'IR');
$searchReports = $searchGraphs = check_acl($config['id_user'], 0, 'RR');
$searchMaps = check_acl($config['id_user'], 0, 'VR');
$searchMain = true;
$searchHelps = true;

View File

@ -133,10 +133,10 @@ if ($config['pure']) {
// OPERATIONS
// Delete SNMP Trap entry Event (only incident management access).
// Delete SNMP Trap entry Event.
if (isset($_GET['delete'])) {
$id_trap = (int) get_parameter_get('delete', 0);
if ($id_trap > 0 && check_acl($config['id_user'], 0, 'IM')) {
if ($id_trap > 0) {
if ($group_by) {
$sql_ids_traps = 'SELECT id_trap, source FROM ttrap WHERE oid IN (SELECT oid FROM ttrap WHERE id_trap = '.$id_trap.')
AND source IN (SELECT source FROM ttrap WHERE id_trap = '.$id_trap.')';
@ -156,42 +156,30 @@ if (isset($_GET['delete'])) {
__('Could not be deleted')
);
}
} else {
db_pandora_audit(
'ACL Violation',
'Trying to delete SNMP event ID #'.$id_trap
);
}
}
// Check Event (only incident write access).
// Check Event.
if (isset($_GET['check'])) {
$id_trap = (int) get_parameter_get('check', 0);
if (check_acl($config['id_user'], 0, 'IW')) {
$values = [
'status' => 1,
'id_usuario' => $config['id_user'],
];
$result = db_process_sql_update('ttrap', $values, ['id_trap' => $id_trap]);
enterprise_hook('snmp_update_forwarded_modules', [$id_trap]);
$values = [
'status' => 1,
'id_usuario' => $config['id_user'],
];
$result = db_process_sql_update('ttrap', $values, ['id_trap' => $id_trap]);
enterprise_hook('snmp_update_forwarded_modules', [$id_trap]);
ui_print_result_message(
$result,
__('Successfully updated'),
__('Could not be updated')
);
} else {
db_pandora_audit(
'ACL Violation',
'Trying to checkout SNMP Trap ID'.$id_trap
);
}
ui_print_result_message(
$result,
__('Successfully updated'),
__('Could not be updated')
);
}
// Mass-process DELETE.
if (isset($_POST['deletebt'])) {
$trap_ids = get_parameter_post('snmptrapid', []);
if (is_array($trap_ids) && check_acl($config['id_user'], 0, 'IW')) {
if (is_array($trap_ids)) {
if ($group_by) {
foreach ($trap_ids as $key => $value) {
$sql_ids_traps = 'SELECT id_trap, source FROM ttrap WHERE oid IN (SELECT oid FROM ttrap WHERE id_trap = '.$value.')
@ -210,28 +198,18 @@ if (isset($_POST['deletebt'])) {
enterprise_hook('snmp_update_forwarded_modules', [$forward_info]);
}
}
} else {
db_pandora_audit(
'ACL Violation',
'Trying to mass-delete SNMP Trap ID'
);
}
}
// Mass-process UPDATE.
if (isset($_POST['updatebt'])) {
$trap_ids = get_parameter_post('snmptrapid', []);
if (is_array($trap_ids) && check_acl($config['id_user'], 0, 'IW')) {
if (is_array($trap_ids)) {
foreach ($trap_ids as $id_trap) {
$sql = sprintf("UPDATE ttrap SET status = 1, id_usuario = '%s' WHERE id_trap = %d", $config['id_user'], $id_trap);
db_process_sql($sql);
enterprise_hook('snmp_update_forwarded_modules', [$id_trap]);
}
} else {
db_pandora_audit(
'ACL Violation',
'Trying to mass-delete SNMP Trap ID'
);
}
}
@ -1025,7 +1003,7 @@ if ($traps !== false) {
// Actions.
$data[8] = '';
if (empty($trap['status']) && check_acl($config['id_user'], 0, 'IW')) {
if (empty($trap['status'])) {
$data[8] .= '<a href="'.$urlPagination.'&check='.$trap['id_trap'].'">'.html_print_image('images/ok.png', true, ['border' => '0', 'title' => __('Validate')]).'</a> ';
}
@ -1045,17 +1023,15 @@ if ($traps !== false) {
} else {
$agent_trap_group = db_get_value('id_grupo', 'tagente', 'nombre', $trap['source']);
if ((check_acl($config['id_user'], $agent_trap_group, 'IM'))) {
$data[8] .= '<a href="'.$urlPagination.'&delete='.$trap['id_trap'].'&offset='.$offset.'" onClick="javascript:return confirm(\''.__('Are you sure?').'\')">'.html_print_image(
'images/cross.png',
true,
[
'border' => '0',
'title' => __('Delete'),
'class' => 'invert_filter',
]
).'</a> ';
}
$data[8] .= '<a href="'.$urlPagination.'&delete='.$trap['id_trap'].'&offset='.$offset.'" onClick="javascript:return confirm(\''.__('Are you sure?').'\')">'.html_print_image(
'images/cross.png',
true,
[
'border' => '0',
'title' => __('Delete'),
'class' => 'invert_filter',
]
).'</a> ';
}
$data[8] .= '<a href="javascript: toggleVisibleExtendedInfo('.$trap['id_trap'].');">'.html_print_image(
@ -1217,14 +1193,11 @@ if ($idx == 0) {
unset($table);
echo '<div class="w98p right">';
if (check_acl($config['id_user'], 0, 'IW')) {
html_print_submit_button(__('Validate'), 'updatebt', false, 'class="sub ok"');
}
if (check_acl($config['id_user'], 0, 'IM')) {
echo '&nbsp;';
html_print_submit_button(__('Delete'), 'deletebt', false, 'class="sub delete" onClick="javascript:return confirm(\''.__('Are you sure?').'\')"');
}
html_print_submit_button(__('Validate'), 'updatebt', false, 'class="sub ok"');
echo '&nbsp;';
html_print_submit_button(__('Delete'), 'deletebt', false, 'class="sub delete" onClick="javascript:return confirm(\''.__('Are you sure?').'\')"');
echo '</div></form>';

View File

@ -444,7 +444,6 @@ enterprise_hook('close_meta_frame');
.hide()
.prop("id", "module_details_window")
.appendTo('body');
console.log("vamos a ver");
function show_module_detail_dialog(module_id, id_agent, server_name, offset, period, module_name) {
var params = {};
var f = new Date();

View File

@ -127,7 +127,8 @@ if (isset($_GET['modified']) && !$view_mode) {
$upd_info['ehorus_user_level_pass'] = get_parameter('ehorus_user_level_pass');
$upd_info['ehorus_user_level_enabled'] = get_parameter('ehorus_user_level_enabled', 0);
$upd_info['integria_user_level_user'] = get_parameter('integria_user_level_user');
$upd_info['integria_user_level_pass'] = get_parameter('integria_user_level_pass');
$is_admin = db_get_value('is_admin', 'tusuario', 'id_user', $id);
@ -731,12 +732,57 @@ if ($config['ehorus_enabled'] && $config['ehorus_user_level_conf']) {
$row['control'] .= '<span id="test-ehorus-message" class="invisible"></span>';
$table_remote->data['ehorus_test'] = $row;
echo '<div class="ehorus_user_conf">';
echo '<div class="ehorus_user_conf user_edit_fourth_row">';
html_print_table($table_remote);
echo '</div>';
}
if ($config['integria_enabled'] && $config['integria_user_level_conf']) {
// Integria IMS user remote login.
$table_remote = new StdClass();
$table_remote->data = [];
$table_remote->width = '100%';
$table_remote->id = 'integria-remote-setup';
$table_remote->class = 'white_box';
$table_remote->size['name'] = '30%';
$table_remote->style['name'] = 'font-weight: bold';
// Integria IMS user level authentication.
// Title
$row = [];
$row['control'] = '<p class="edit_user_labels">'.__('Integria user configuration').': </p>';
$table_remote->data['integria_user_level_conf'] = $row;
// Integria IMS user.
$row = [];
$row['name'] = __('User');
$row['control'] = html_print_input_text('integria_user_level_user', $user_info['integria_user_level_user'], '', 30, 100, true);
$table_remote->data['integria_user_level_user'] = $row;
// Integria IMS pass.
$row = [];
$row['name'] = __('Password');
$row['control'] = html_print_input_password('integria_user_level_pass', io_output_password($user_info['integria_user_level_pass']), '', 30, 100, true);
$table_remote->data['integria_user_level_pass'] = $row;
// Test.
$integria_host = db_get_value('value', 'tconfig', 'token', 'integria_hostname');
$integria_api_pass = db_get_value('value', 'tconfig', 'token', 'integria_api_pass');
$row = [];
$row['name'] = __('Test');
$row['control'] = html_print_button(__('Start'), 'test-integria', false, 'integria_connection_test(&quot;'.$integria_host.'&quot;,'.$integria_api_pass.')', 'class="sub next"', true);
$row['control'] .= '&nbsp;<span id="test-integria-spinner" class="invisible">&nbsp;'.html_print_image('images/spinner.gif', true).'</span>';
$row['control'] .= '&nbsp;<span id="test-integria-success" class="invisible">&nbsp;'.html_print_image('images/status_sets/default/severity_normal.png', true).'</span>';
$row['control'] .= '&nbsp;<span id="test-integria-failure" class="invisible">&nbsp;'.html_print_image('images/status_sets/default/severity_critical.png', true).'</span>';
$row['control'] .= '<span id="test-integria-message" class="invisible"></span>';
$table_remote->data['integria_test'] = $row;
echo '<div class="integria_user_conf">';
html_print_table($table_remote);
echo '</div>';
}
echo '<div class="edit_user_button">';
if (!$config['user_can_update_info']) {
@ -1280,4 +1326,75 @@ function ehorus_connection_test(host, port) {
hideLoadingImage();
});
}
function integria_connection_test(api_hostname, api_pass) {
var user = $('input#text-integria_user_level_user').val();
var pass = $('input#password-integria_user_level_pass').val();
var badRequestMessage = '<?php echo __('Empty user or password'); ?>';
var notFoundMessage = '<?php echo __('User not found'); ?>';
var invalidPassMessage = '<?php echo __('Invalid password'); ?>';
var hideLoadingImage = function () {
$('#test-integria-spinner').hide();
}
var showLoadingImage = function () {
$('#test-integria-spinner').show();
}
var hideSuccessImage = function () {
$('#test-integria-success').hide();
}
var showSuccessImage = function () {
$('#test-integria-success').show();
}
var hideFailureImage = function () {
$('#test-integria-failure').hide();
}
var showFailureImage = function () {
$('#test-integria-failure').show();
}
var hideMessage = function () {
$('#test-integria-message').hide();
}
var showMessage = function () {
$('#test-integria-message').show();
}
var changeTestMessage = function (message) {
$('#test-integria-message').text(message);
}
hideSuccessImage();
hideFailureImage();
hideMessage();
showLoadingImage();
$.ajax({
url: "ajax.php",
type: 'POST',
dataType: 'json',
data: {
page: 'godmode/setup/setup_integria',
operation: 'check_api_access',
integria_user: user,
integria_pass: pass,
api_hostname: api_hostname,
api_pass: api_pass,
}
})
.done(function(data, textStatus, xhr) {
if (data.login == '1') {
showSuccessImage();
} else {
showFailureImage();
showMessage();
}
})
.fail(function(xhr, textStatus, errorThrown) {
showFailureImage();
showMessage();
})
.always(function(xhr, textStatus) {
hideLoadingImage();
});
}
</script>

View File

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

View File

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

View File

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

View File

@ -1049,9 +1049,6 @@ CREATE TABLE IF NOT EXISTS `torigen` (
CREATE TABLE IF NOT EXISTS `tperfil` (
`id_perfil` int(10) unsigned NOT NULL auto_increment,
`name` TEXT NOT NULL,
`incident_edit` tinyint(1) NOT NULL DEFAULT 0,
`incident_view` tinyint(1) NOT NULL DEFAULT 0,
`incident_management` tinyint(1) NOT NULL DEFAULT 0,
`agent_view` tinyint(1) NOT NULL DEFAULT 0,
`agent_edit` tinyint(1) NOT NULL DEFAULT 0,
`alert_edit` tinyint(1) NOT NULL DEFAULT 0,
@ -1267,6 +1264,8 @@ CREATE TABLE IF NOT EXISTS `tusuario` (
`ehorus_user_level_user` VARCHAR(60),
`ehorus_user_level_pass` VARCHAR(45),
`ehorus_user_level_enabled` TINYINT(1),
`integria_user_level_user` VARCHAR(60),
`integria_user_level_pass` VARCHAR(45),
CONSTRAINT `fk_filter_id` FOREIGN KEY (`id_filter`) REFERENCES tevent_filter (`id_filter`) ON DELETE SET NULL,
UNIQUE KEY `id_user` (`id_user`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
@ -2263,6 +2262,11 @@ CREATE TABLE IF NOT EXISTS `talert_snmp_action` (
`al_field13` text NOT NULL,
`al_field14` text NOT NULL,
`al_field15` text NOT NULL,
`al_field16` text NOT NULL,
`al_field17` text NOT NULL,
`al_field18` text NOT NULL,
`al_field19` text NOT NULL,
`al_field20` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

View File

@ -364,7 +364,7 @@ INSERT INTO `tusuario_perfil` (`id_up`, `id_usuario`, `id_perfil`, `id_grupo`, `
-- Dumping data for table `tperfil`
--
INSERT INTO `tperfil` VALUES (1,'Operator&#x20;&#40;Read&#41;',0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0),(2,'Operator&#x20;&#40;Write&#41;',1,1,0,1,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,1,1,0),(3,'Chief&#x20;Operator',1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1),(4,'Group&#x20;coordinator',1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1),(5,'Pandora&#x20;Administrator',1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
INSERT INTO `tperfil` VALUES (1,'Operator&#x20;&#40;Read&#41;',1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0),(2,'Operator&#x20;&#40;Write&#41;',1,0,0,0,0,0,0,1,1,0,1,1,0,0,1,1,0,1,1,0),(3,'Chief&#x20;Operator',1,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1),(4,'Group&#x20;coordinator',1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1),(5,'Pandora&#x20;Administrator',1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
--
-- Dumping data for table `tnews`

View File

@ -1,5 +1,5 @@
package: pandorafms-server
Version: 7.0NG.754-210511
Version: 7.0NG.754-210518
Architecture: all
Priority: optional
Section: admin

View File

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

View File

@ -38,6 +38,7 @@ use PandoraFMS::DiscoveryServer;
use PandoraFMS::WMIServer;
use PandoraFMS::PluginServer;
use PandoraFMS::PredictionServer;
use PandoraFMS::WebServer;
# Constants for Win32 services.
use constant WIN32_SERVICE_STOPPED => 0x01;
@ -123,6 +124,7 @@ sub pandora_startup () {
push (@Servers, new PandoraFMS::WMIServer (\%Config, $DBH));
push (@Servers, new PandoraFMS::PluginServer (\%Config, $DBH));
push (@Servers, new PandoraFMS::PredictionServer (\%Config, $DBH));
push (@Servers, new PandoraFMS::WebServer (\%Config, $DBH));
} else {
# Metaconsole service modules are run by the prediction server
push (@Servers, new PandoraFMS::PredictionServer (\%Config, $DBH));

View File

@ -25,6 +25,7 @@ incomingdir /var/spool/pandora/data_in
log_file /var/log/pandora/pandora_server.log
# Log file for Pandora FMS SNMP console. Its generated by NetSNMP Trap daemon
# If you change it, please update the file /etc/logrotate.d/pandora_server accordingly.
snmp_logfile /var/log/pandora/pandora_snmptrap.log
@ -424,11 +425,11 @@ update_parent 1
# openstreetmaps_description 1
# Enable (1) or disable (0) Pandora FMS Web Server/Goliat (PANDORA FMS ENTERPRISE ONLY).
# Enable (1) or disable (0) Pandora FMS Web Server/Goliat.
webserver 1
# Number of threads for the Web Server/Goliat (PANDORA FMS ENTERPRISE ONLY).
# Number of threads for the Web Server/Goliat.
web_threads 1

View File

@ -45,7 +45,7 @@ our @EXPORT = qw(
# version: Defines actual version of Pandora Server for this module only
my $pandora_version = "7.0NG.754";
my $pandora_build = "210511";
my $pandora_build = "210518";
our $VERSION = $pandora_version." ".$pandora_build;
# Setup hash
@ -77,7 +77,7 @@ sub help_screen {
sub pandora_init {
my $pa_config = $_[0];
my $init_string = $_[1];
print "\n$init_string $pandora_version Build $pandora_build Copyright (c) 2004-20".substr($pandora_build,0,2)." " . pandora_get_initial_copyright_notice() . "\n";
print "$init_string v$pandora_version Build $pandora_build\n\n";
print "This program is OpenSource, licensed under the terms of GPL License version 2.\n";
print "You can download latest versions and documentation at official web page.\n\n";

View File

@ -1339,6 +1339,9 @@ sub pandora_execute_action ($$$$$$$$$;$) {
my $cid_data = "CID_IMAGE";
my $dataname = "CID_IMAGE.png";
# Decode ampersand. Used for macros with encoded names.
$field3 =~ s/&amp;/&/g;
if (defined($data) && $data =~ /^data:image\/png;base64, /) {
# macro _data_ substitution in case is image.
$attach_data_as_image = 1;
@ -4028,6 +4031,12 @@ sub pandora_evaluate_snmp_alerts ($$$$$$$$$) {
$alert->{'al_field13'} = subst_alert_macros ($alert->{'al_field13'}, \%macros);
$alert->{'al_field14'} = subst_alert_macros ($alert->{'al_field14'}, \%macros);
$alert->{'al_field15'} = subst_alert_macros ($alert->{'al_field15'}, \%macros);
$alert->{'al_field16'} = subst_alert_macros ($alert->{'al_field16'}, \%macros);
$alert->{'al_field17'} = subst_alert_macros ($alert->{'al_field17'}, \%macros);
$alert->{'al_field18'} = subst_alert_macros ($alert->{'al_field18'}, \%macros);
$alert->{'al_field19'} = subst_alert_macros ($alert->{'al_field19'}, \%macros);
$alert->{'al_field20'} = subst_alert_macros ($alert->{'al_field20'}, \%macros);
# Check time threshold
$alert->{'last_fired'} = '1970-01-01 00:00:00' unless defined ($alert->{'last_fired'});
@ -4067,6 +4076,14 @@ sub pandora_evaluate_snmp_alerts ($$$$$$$$$) {
'field13' => $alert->{'al_field13'},
'field14' => $alert->{'al_field14'},
'field15' => $alert->{'al_field15'},
'field16' => $alert->{'al_field16'},
'field17' => $alert->{'al_field17'},
'field18' => $alert->{'al_field18'},
'field19' => $alert->{'al_field19'},
'field20' => $alert->{'al_field20'},
'description' => $alert->{'description'},
'times_fired' => $times_fired,
'time_threshold' => 0,
@ -4152,6 +4169,12 @@ sub pandora_evaluate_snmp_alerts ($$$$$$$$$) {
'field13' => $other_alert->{'al_field13'},
'field14' => $other_alert->{'al_field14'},
'field15' => $other_alert->{'al_field15'},
'field16' => $other_alert->{'al_field16'},
'field17' => $other_alert->{'al_field17'},
'field18' => $other_alert->{'al_field18'},
'field19' => $other_alert->{'al_field19'},
'field20' => $other_alert->{'al_field20'},
'description' => '',
'times_fired' => $times_fired,
'time_threshold' => 0,
@ -4629,11 +4652,17 @@ sub get_module_status ($$$) {
}
# (-inf, critical_min), [critical_max, +inf)
else {
return 1 if ($data < $critical_min || $data >= $critical_max);
return 1 if ($data <= $critical_max && $critical_max < $critical_min);
if ($critical_min == 0) {
return 1 if ($data > $critical_max);
}elsif ($critical_max == 0) {
return 1 if ($data <= $critical_min);
} else {
return 1 if ($data < $critical_min || $data >= $critical_max);
return 1 if ($data <= $critical_max && $critical_max < $critical_min);
}
}
}
# Warning
if ($warning_min ne $warning_max) {
# [warning_min, warning_max)
@ -4643,8 +4672,14 @@ sub get_module_status ($$$) {
}
# (-inf, warning_min), [warning_max, +inf)
else {
return 2 if ($data < $warning_min || $data >= $warning_max);
return 2 if ($data <= $warning_max && $warning_max < $warning_min);
if ($warning_min == 0) {
return 1 if ($data > $warning_max);
}elsif ($warning_max == 0) {
return 1 if ($data <= $warning_min);
} else {
return 2 if ($data < $warning_min || $data >= $warning_max);
return 2 if ($data <= $warning_max && $warning_max < $warning_min);
}
}
}
}

View File

@ -0,0 +1,365 @@
##################################################################################
# Goliath Tools CURL Module
##################################################################################
# Copyright (c) 2013-2021 Artica Soluciones Tecnologicas S.L
# This code is not free or OpenSource. Please don't redistribute.
##################################################################################
package PandoraFMS::Goliat::GoliatCURL;
use PandoraFMS::Goliat::GoliatTools;
use strict;
use warnings;
use Data::Dumper;
use PandoraFMS::DB;
use IO::Socket::INET6;
use URI::Escape;
use Time::Local;
use Time::HiRes qw ( gettimeofday );
# Japanese encoding support
use Encode::Guess qw/euc-jp shiftjis iso-2022-jp/;
require Exporter;
our @ISA = ("Exporter");
our %EXPORT_TAGS = ( 'all' => [ qw() ] );
our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
our @EXPORT = qw(
g_http_task
@task_requests
@task_reqsec
@task_fails
@task_time
@task_end
@task_sessions
@task_ssec
@task_get_string
@task_get_content
@task_session_fails
);
our @task_requests;
our @task_reqsec;
our @task_fails ;
our @task_time;
our @task_end;
our @task_sessions;
our @task_ssec;
our @task_get_string;
our @task_get_content;
our @task_session_fails;
our $goliat_abort;
# Returns a string than can be safely used as a command line parameter for CURL
sub safe_param ($) {
my $string = shift;
$string =~ s/'/"/g;
return "'" . $string . "'";
}
sub g_http_task {
my ( $config, $thread_id, @work_list ) = @_;
my ( $ax, $bx, $cx ); # used in FOR loop
my ( $ttime1, $ttime2, $ttime_tot );
my $resp; # HTTP Response
my $total_requests = 0;
my $total_valid_requests = 0;
my $total_invalid_request = 0;
my $cookie_file = "/tmp/gtc_".$thread_id."_".g_trash_ascii (3);
my $check_string = 1;
my $get_string = "";
my $get_content = "";
my $get_content_advanced = "";
my $timeout = 10;
#my $ua = new LWP::UserAgent;
$task_requests [$thread_id] = 0 ;
$task_sessions [$thread_id] = 0 ;
$task_reqsec[$thread_id] = 0;
$task_fails[$thread_id] = 0;
$task_session_fails[$thread_id] = 0;
$task_ssec[$thread_id] = 0;
$task_end[$thread_id] = 0;
$task_time[$thread_id] = 0;
$task_get_string[$thread_id] = "";
$task_get_content[$thread_id] = "";
# Set command line options for CURL
my $curl_opts;
# Follow redirects
$curl_opts .= " --location-trusted";
# User agent
if ($config->{"agent"} ne '') {
$curl_opts .= " -A " . safe_param($config->{"agent"})
}
# Prevent pages from being cached
$curl_opts .= " -H 'Pragma: no-cache'";
# Timeout
if (defined ($config->{"timeout"}) && $config->{"timeout"} > 0) {
$timeout = $config->{"timeout"};
}
# Maximum file size
if (defined($config->{"maxsize"}) && $config->{"maxsize"} > 0) {
$curl_opts .= " --max-filesize " . $config->{"maxsize"};
}
# Disable SSL certificate host verification
$curl_opts .= " -k";
# Proxy
if ($config->{'proxy'} ne ""){
$curl_opts .= " -x " . safe_param($config->{'proxy'});
}
# Proxy HTTP authentication
if ($config->{'auth_user'} ne "") {
$curl_opts .= " --proxy-anyauth -U " . safe_param($config->{'auth_user'} . ':' . $config->{'auth_pass'});
}
# Delete existing cookies
my $cookie_carry_on = 0;
if ( -e $cookie_file){
unlink ($cookie_file);
}
$ttime1 = Time::HiRes::gettimeofday();
for ($ax = 0; $ax != $config->{'retries'}; $ax++){
for ($bx = 0; $bx < $config->{"work_items"}; $bx++){
if ($config->{'con_delay'} > 0){
sleep ($config->{'con_delay'});
}
$total_requests++;
# Start to count!
$check_string = 1;
# Prepare parameters
my $task_curl_opts = $curl_opts;
my $params = "";
$cx = 0;
while (defined($work_list[$bx]->{'variable_name'}[$cx])){
if ($cx > 0){
$params = $params."&";
}
$params = $params . $work_list[$bx]->{'variable_name'}[$cx] . "=" . uri_escape($work_list[$bx]->{'variable_value'}[$cx]);
$cx++;
}
# Cookie carry on
if (defined ($work_list[$bx]->{'cookie'}) && $work_list[$bx]->{'cookie'} == 1){
$cookie_carry_on = 1;
}
if ($cookie_carry_on == 1) {
$task_curl_opts .= " -c " . safe_param ($cookie_file);
$task_curl_opts .= " -b " . safe_param ($cookie_file);
}
# HTTP authentication
if ($work_list[$bx]->{'http_auth_user'} ne "" && $work_list[$bx]->{'http_auth_pass'} ne "") {
if($config->{'http_check_type'} == 0){
$task_curl_opts .= " --anyauth -u " . safe_param($work_list[$bx]->{'http_auth_user'} . ':' . $work_list[$bx]->{'http_auth_pass'});
}
if ($config->{'http_check_type'} == 1) {
$task_curl_opts .= " --ntlm -u " . safe_param($work_list[$bx]->{'http_auth_user'} . ':' . $work_list[$bx]->{'http_auth_pass'});
}
if ($config->{'http_check_type'} == 2) {
$task_curl_opts .= " --digest -u " . safe_param($work_list[$bx]->{'http_auth_user'} . ':' . $work_list[$bx]->{'http_auth_pass'});
}
if ($config->{'http_check_type'} == 3) {
$task_curl_opts .= " --basic -u " . safe_param($work_list[$bx]->{'http_auth_user'} . ':' . $work_list[$bx]->{'http_auth_pass'});
}
}
# GET
if ($work_list[$bx]->{'type'} eq "GET"){
$task_curl_opts .= " -H 'Accept: text/html'";
if ($cx > 0){
$params = $work_list[$bx]->{'url'} . "?" . $params;
} else {
$params = $work_list[$bx]->{'url'};
}
$resp = curl ($config->{"plugin_exec"}, $timeout, $task_curl_opts, $params, $work_list[$bx]->{'headers'}, $work_list[$bx]->{'debug'}, $config->{"moduleId"}, $config->{"dbh"});
# POST
} elsif ($work_list[$bx]->{'type'} eq "POST") {
$task_curl_opts .= " -d " . safe_param($params);
$task_curl_opts .= " -H 'Content-type: application/x-www-form-urlencoded'";
$resp = curl ($config->{"plugin_exec"}, $timeout, $task_curl_opts, $work_list[$bx]->{'url'}, $work_list[$bx]->{'headers'}, $work_list[$bx]->{'debug'}, $config->{"moduleId"}, $config->{"dbh"});
# HEAD
} else {
$task_curl_opts .= " -I";
if ($cx > 0){
$params = $work_list[$bx]->{'url'} . "?" . uri_escape($params);
} else {
$params = $work_list[$bx]->{'url'};
}
$resp = curl ($config->{"plugin_exec"}, $timeout, $task_curl_opts, $params, $work_list[$bx]->{'headers'}, $work_list[$bx]->{'debug'}, $config->{"moduleId"}, $config->{"dbh"});
}
# Get string ?
if (defined($work_list[$bx]->{'get_string'})) {
my $temp = $work_list[$bx]->{'get_string'};
if ($resp =~ m/($temp)/) {
$task_get_string[$thread_id] = $1;
}
}
# Get response ?
if ($work_list[$bx]->{'get_content_advanced'} ne "") {
my $temp = $work_list[$bx]->{'get_content_advanced'};
if ($resp =~ m/$temp/) {
$task_get_content[$thread_id] = $1 if defined ($1);
}
} elsif ($work_list[$bx]->{'get_content'} ne "") {
my $temp = $work_list[$bx]->{'get_content'};
if ($resp =~ m/($temp)/) {
$task_get_content[$thread_id] = $1;
}
} else {
$task_get_content[$thread_id] = $resp;
}
# Resource bashing
#if ((defined($work_list[$bx]->{'get_resources'})) && ($work_list[$bx]->{'get_resources'} == 1)){
# $total_requests = g_get_all_links ($config, $ua, $resp, $total_requests, $work_list[$bx]->{'url'}, $work_list[$bx]->{'headers'}, $work_list[$bx]->{'debug'});
#}
# CHECKSTRING check
$cx = 0;
while (defined($work_list[$bx]->{'checkstring'}[$cx])) {
my $match_string = $work_list[$bx]->{'checkstring'}[$cx];
my $as_string = $resp;
my $guess = Encode::Guess::guess_encoding($as_string);
if (ref $guess) {
$as_string = $guess->decode($as_string);
}
unless (utf8::is_utf8($match_string)) {
utf8::decode($match_string);
}
if ( $as_string =~ m/$match_string/i ){
$total_valid_requests++;
} else {
$total_invalid_request++;
$bx = $config->{"work_items"}; # Abort session remaining request
$check_string=0;
}
$cx++;
}
# CHECKNOTSTRING check
$cx = 0;
while (defined($work_list[$bx]->{'checknotstring'}[$cx])) {
my $match_string = $work_list[$bx]->{'checknotstring'}[$cx];
my $as_string = $resp;
my $guess = Encode::Guess::guess_encoding($as_string);
if (ref $guess) {
$as_string = $guess->decode($as_string);
}
unless (utf8::is_utf8($match_string)) {
utf8::decode($match_string);
}
if ( $as_string !~ m/$match_string/i ){
$total_valid_requests++;
} else {
$total_invalid_request++;
$bx = $config->{"work_items"}; # Abort session remaining request
$check_string=0;
}
$cx++;
}
# End just now by pressing CTRL-C or Kill Signal !
#if ($goliat_abort == 1){
#$ax = $config->{'retries'};
#$bx = $config->{'items'};
#goto END_LOOP;
#}
} #main work_detail loop
$ttime2 = Time::HiRes::gettimeofday();
$ttime_tot = $ttime2 - $ttime1; # Total time for this task
$task_time[$thread_id] = $ttime_tot;
$task_requests [$thread_id] = $total_requests;
if ($ttime_tot > 0 ){
$task_reqsec[$thread_id] = $total_requests / $ttime_tot;
} else {
$task_reqsec[$thread_id] = $total_requests;
}
$task_fails[$thread_id] = $total_invalid_request;
if ($check_string == 0){
$task_session_fails[$thread_id]++
}
$task_sessions [$thread_id]++;
if ($task_sessions [$thread_id] > 0 ){
$task_ssec[$thread_id] = $ttime_tot / $task_sessions [$thread_id];
} else {
$task_ssec[$thread_id] = $task_sessions[$thread_id];
}
sleep $config->{'ses_delay'};
}
END_LOOP:
if ( -f $cookie_file){
unlink ($cookie_file);
}
$task_end[$thread_id] = 1;
}
# Call CURL and return its output.
sub curl {
my ($exec, $timeout, $curl_opts, $url, $headers, $debug, $moduleId, $dbh) = @_;
while (my ($header, $value) = each %{$headers}) {
$curl_opts .= " -H " . safe_param($header . ':' . $value);
}
my $cmd = "curl $curl_opts " . safe_param($url);
my $response = `"$exec" $timeout $cmd 2>/dev/null`;
# Curl command stored for live debugging feature.
set_update_agentmodule ($dbh, $moduleId, { 'debug_content' => $cmd }) if defined($dbh);
return $response if ($debug eq '');
# Debug
if (open (DEBUG, '>>', $debug . '.req')) {
print DEBUG "[Goliat debug " . time () . "]\n";
print DEBUG $cmd;
print "\n";
close (DEBUG);
}
if (open (DEBUG, '>>', $debug . '.res')) {
print DEBUG "[Goliat debug " . time () . "]\n";
print DEBUG $response;
print "\n";
close (DEBUG);
}
return $response;
}
# End of function declaration
# End of defined Code
1;
__END__

View File

@ -0,0 +1,265 @@
##########################################################################
# Goliat Config package
##########################################################################
# Copyright (c) 2007-2021 Artica Soluciones Tecnologicas S.L
# This code is not free or OpenSource. Please don't redistribute.
##########################################################################
package PandoraFMS::Goliat::GoliatConfig;
use strict;
use warnings;
use PandoraFMS::Tools;
use PandoraFMS::Goliat::GoliatTools;
require Exporter;
our @ISA = ("Exporter");
our %EXPORT_TAGS = ( 'all' => [ qw( ) ] );
our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
our @EXPORT = qw( g_help_screen
g_init
g_load_config );
my $g_version = "1.0";
my $g_build = "110929";
our $VERSION = $g_version." ".$g_build;
sub g_load_config {
my ( $config , $work_list )= @_ ;
my $archivo_cfg = $config->{'config_file'};
my $buffer_line;
my $task_block = 0;
my $commit_block = 0;
my $task_url = "";
my $task_cookie = 0;
my $task_resources = 1;
my $task_type = "";
my $task_headers = {};
my $task_debug = "";
my $http_auth_user = "";
my $http_auth_pass = "";
my $http_auth_realm = "";
my $http_auth_serverport = "";
my $get_string = "";
my $get_content = "";
my $get_content_advanced = "";
my @task_variable_name;
my @task_variable_value;
my @task_check_string;
my @task_check_not_string;
my $parametro;
my $temp1;
# Default options
$config->{'con_delay'} =0;
$config->{'ses_delay'} =0;
if (!defined($config->{'agent'})){
$config->{'agent'}="PandoraFMS/Goliat 4.0; Linux)";
}
if (!defined($config->{'proxy'})){
$config->{'proxy'}="";
}
if (!defined($config->{'retries'})){
$config->{'retries'} = 1;
}
if ((!is_numeric($config->{'retries'})) || ($config->{'retries'} == 0)){
$config->{'retries'} = 1;
}
$config->{'refresh'} = "5";
$config->{"max_depth"} = 25;
$config->{'log_file'}="/var/log/pandora/pandora_goliat.log";
$config->{'log_output'} = 0;
# Collect items from config file and put in an array
open (CFG, "< $archivo_cfg");
while (<CFG>){
$buffer_line = $_;
if ($buffer_line =~ /^[a-zA-Z]/){ # begins with letters
$parametro = $buffer_line;
} else {
$parametro = "";
}
# Need to commit block ??
if (($commit_block == 1) && ($task_block == 1)) {
my %work_item;
$work_item{'url'} = $task_url;
$work_item{'cookie'} = $task_cookie;
$work_item{'type'} = $task_type;
$work_item{'get_resources'} = $task_resources;
$work_item{'get_string'} = $get_string;
$work_item{'get_content'} = $get_content;
$work_item{'get_content_advanced'} = $get_content_advanced;
$work_item{'http_auth_user'} = $http_auth_user;
$work_item{'http_auth_pass'} = $http_auth_pass;
$work_item{'http_auth_realm'} = $http_auth_realm;
$work_item{'http_auth_serverport'} = $http_auth_serverport;
$work_item{'headers'} = $task_headers;
$work_item{'debug'} = $task_debug;
my $ax=0;
while ($#task_check_string >= 0){
$temp1 = pop (@task_check_string);
$work_item{'checkstring'}[$ax] = $temp1;
$ax++;
}
$ax=0;
while ($#task_check_not_string >= 0){
$temp1 = pop (@task_check_not_string);
$work_item{'checknotstring'}[$ax] = $temp1;
$ax++;
}
$ax=0;
while ($#task_variable_name >= 0){
$temp1 = pop (@task_variable_name);
$work_item{'variable_name'}[$ax] = $temp1;
$ax++;
}
$ax=0;
while ($#task_variable_value >= 0){
$temp1 = pop (@task_variable_value);
$work_item{'variable_value'}[$ax] = $temp1;
$ax++;
}
push @{$work_list}, \%work_item;
$commit_block = 0;
$task_block = 0;
$task_url = "";
$task_cookie = 0;
$task_resources = 0;
$task_type = "";
$task_headers = {};
$task_debug = "";
$config->{"work_items"}++;
$commit_block = 0;
$task_block = 0;
$http_auth_user = "";
$http_auth_pass = "";
$http_auth_realm = "";
$get_string = "";
$get_content = "";
$get_content_advanced = "";
}
# ~~~~~~~~~~~~~~
# Main setup items
# ~~~~~~~~~~~~~~
if ($parametro =~ m/^task_begin/i) {
$task_block = 1;
}
elsif ($parametro =~ m/^task_end/i) {
$commit_block = 1;
}
elsif ($parametro =~ m/^ses_delay\s(.*)/i) {
$config->{'ses_delay'} = $1;
}
elsif ($parametro =~ m/^con_delay\s(.*)/i) {
$config->{'con_delay'} = $1;
}
elsif ($parametro =~ m/^agent\s(.*)/i) {
$config->{'agent'} = $1;
}
elsif ($parametro =~ m/^proxy\s(.*)/i) {
$config->{'proxy'} = $1;
}
elsif ($parametro =~ m/^max_depth\s(.*)/i) {
$config->{'max_depth'} = $1;
}
elsif ($parametro =~ m/^log_file\s(.*)/i) {
$config->{"log_file"} = $1;
}
elsif ($parametro =~ m/^log_output\s(.*)/i) {
$config->{"log_output"} = $1;
}
elsif ($parametro =~ m/^log_http\s(.*)/i) {
$config->{"log_http"} = $1;
}
elsif ($parametro =~ m/^retries\s(.*)/i) {
$config->{"retries"} = $1;
}
# ~~~~~~~~~~~~~~
# Task items
# ~~~~~~~~~~~~~~
elsif ($parametro =~ m/^variable_name\s(.*)/i) {
push (@task_variable_name, $1);
}
elsif ($parametro =~ m/^variable_value\s(.*)/i) {
push (@task_variable_value, $1);
}
elsif ($parametro =~ m/^check_string\s(.*)/i) {
push (@task_check_string, $1);
}
elsif ($parametro =~ m/^check_not_string\s(.*)/i) {
push (@task_check_not_string, $1);
}
elsif ($parametro =~ m/^get\s(.*)/i) {
$task_type = "GET";
$task_url = $1;
}
elsif ($parametro =~ m/^post\s(.*)/i) {
$task_type = "POST";
$task_url = $1;
}
elsif ($parametro =~ m/^head\s(.*)/i) {
$task_type = "HEAD";
$task_url = $1;
}
# New in 4.0 version
elsif ($parametro =~ m/^get_string\s(.*)/i) {
$get_string = $1;
}
elsif ($parametro =~ m/^get_content\s(.*)/i) {
$get_content = $1;
}
elsif ($parametro =~ m/^get_content_advanced\s(.*)/i) {
$get_content_advanced = $1;
}
elsif ($parametro =~ m/^http_auth_user\s(.*)/i) {
$http_auth_user = $1;
}
elsif ($parametro =~ m/^http_auth_pass\s(.*)/i) {
$http_auth_pass = $1;
}
elsif ($parametro =~ m/^http_auth_realm\s(.*)/i) {
$http_auth_realm = $1;
}
elsif ($parametro =~ m/^http_auth_serverport\s(.*)/i) {
$http_auth_serverport = $1;
}
elsif ($parametro =~ m/^cookie\s(.*)/i) {
if ($1 =~ m/1/i){
$task_cookie = 1;
} else {
$task_cookie = 0;
}
}
elsif ($parametro =~ m/^resource\s(.*)/i) {
if ($1 =~ m/1/i){
$task_resources = 1;
} else {
$task_resources = 0;
}
}
# New in 5.0 version
elsif ($parametro =~ m/^header\s+(\S+)\s(.*)/i) {
$task_headers->{$1} = $2;
}
elsif ($parametro =~ m/^debug\s+(.*)/i) {
$task_debug = $1;
}
}
close (CFG);
}
# End of function declaration
# End of defined Code
1;
__END__

View File

@ -0,0 +1,478 @@
##################################################################################
# Goliath Tools LWP Module
##################################################################################
# Copyright (c) 2007-2021 Artica Soluciones Tecnologicas S.L
# This code is not free or OpenSource. Please don't redistribute.
##################################################################################
package PandoraFMS::Goliat::GoliatLWP;
use PandoraFMS::Goliat::GoliatTools;
use strict;
use warnings;
use Data::Dumper;
use IO::Socket::INET6;
use LWP::UserAgent;
use LWP::ConnCache;
use HTTP::Request::Common;
use HTTP::Response;
use HTML::TreeBuilder;
use HTML::Element;
use HTTP::Cookies;
use URI::URL;
use Time::Local;
use Time::HiRes qw ( gettimeofday );
# For IPv6 support in Net::HTTP.
BEGIN {
$Net::HTTP::SOCKET_CLASS = 'IO::Socket::INET6';
require Net::HTTP;
}
# Japanese encoding support
use Encode::Guess qw/euc-jp shiftjis iso-2022-jp/;
require Exporter;
our @ISA = ("Exporter");
our %EXPORT_TAGS = ( 'all' => [ qw() ] );
our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
our @EXPORT = qw(
g_http_task
@task_requests
@task_reqsec
@task_fails
@task_time
@task_end
@task_sessions
@task_ssec
@task_get_string
@task_get_content
@task_session_fails
);
our @task_requests;
our @task_reqsec;
our @task_fails;
our @task_time;
our @task_end;
our @task_sessions;
our @task_ssec;
our @task_get_string;
our @task_get_content;
our @task_session_fails;
our $goliat_abort;
sub parse_html ($;$)
{
my $p = $_[1];
$p = _new_tree_maker() unless $p;
$p->parse($_[0]);
}
sub parse_htmlfile ($;$)
{
my($file, $p) = @_;
local(*HTML);
open(HTML, $file) or return undef;
$p = _new_tree_maker() unless $p;
$p->parse_file(\*HTML);
}
sub _new_tree_maker
{
my $p = HTML::TreeBuilder->new(implicit_tags => 1,
ignore_unknown => 1,
ignore_text => 0,
'warn' => 0,
);
$p->strict_comment(1);
$p;
}
sub g_http_task {
my ( $config, $thread_id, @work_list ) = @_;
my ( $ax, $bx, $cx ); # used in FOR loop
my ( $ttime1, $ttime2, $ttime_tot );
my $resp; # HTTP Response
my $total_requests = 0;
my $total_valid_requests = 0;
my $total_invalid_request = 0;
my $cookie_file = "/tmp/gtc_".$thread_id."_".g_trash_ascii (3);
my $check_string = 1;
my $get_string = "";
my $get_content = "";
my $get_content_advanced = "";
my $ua = new LWP::UserAgent;
$task_requests [$thread_id] = 0 ;
$task_sessions [$thread_id] = 0 ;
$task_reqsec[$thread_id] = 0;
$task_fails[$thread_id] = 0;
$task_session_fails[$thread_id] = 0;
$task_ssec[$thread_id] = 0;
$task_end[$thread_id] = 0;
$task_time[$thread_id] = 0;
$task_get_string[$thread_id] = "";
$task_get_content[$thread_id] = "";
$ua->agent($config->{"agent"});
$ua->protocols_allowed( ['http', 'https'] );
$ua->default_headers->push_header('pragma' => "no-cache");
$ua->timeout ($config->{"timeout"});
$ua->max_size($config->{"maxsize"});
$ua->use_alarm($config->{"alarm"});
# Disable SSL certificate host verification
if ($ua->can ('ssl_opts')) {
$ua->ssl_opts("verify_hostname" => 0);
}
# Set proxy
if ($config->{'proxy'} ne ""){
$ua->proxy(['http','https'], $config->{'proxy'});
}
# Set HTTP Proxy auth
if ($config->{'auth_user'} ne "") {
$ua->credentials(
$config->{'auth_server'},
$config->{'auth_realm'},
$config->{'auth_user'} => $config->{'auth_pass'} );
}
if ( -e $cookie_file){
unlink ($cookie_file);
}
my $cookies = HTTP::Cookies->new ('file' => $cookie_file, 'autosave' => '0');
$ttime1 = Time::HiRes::gettimeofday();
for ($ax = 0; $ax != $config->{'retries'}; $ax++){
for ($bx = 0; $bx < $config->{"work_items"}; $bx++){
if ($config->{'con_delay'} > 0){
sleep ($config->{'con_delay'});
}
$total_requests++;
# Start to count!
$check_string = 1;
# Prepare parameters
my $params = "";
$cx = 0;
while (defined($work_list[$bx]->{'variable_name'}[$cx])){
if ($cx > 0){
$params = $params."&";
}
$params = $params . $work_list[$bx]->{'variable_name'}[$cx] . "=" . $work_list[$bx]->{'variable_value'}[$cx];
$cx++;
}
if ( (defined($work_list[$bx]->{'http_auth_realm'})) && (defined($work_list[$bx]->{'http_auth_serverport'}))&& (defined($work_list[$bx]->{'http_auth_user'})) && (defined($work_list[$bx]->{'http_auth_pass'}))) {
if ($work_list[$bx]->{'http_auth_realm'} ne "") {
$ua->credentials(
$work_list[$bx]->{'http_auth_serverport'},
$work_list[$bx]->{'http_auth_realm'},
$work_list[$bx]->{'http_auth_user'} => $work_list[$bx]->{'http_auth_pass'}
);
}
}
# GET
if ($work_list[$bx]->{'type'} eq "GET"){
if ($cx > 0){
$params = $work_list[$bx]->{'url'} . "?" . $params;
} else {
$params = $work_list[$bx]->{'url'};
}
$resp = g_get_page ( $ua, $params, $work_list[$bx]->{'headers'}, $work_list[$bx]->{'debug'});
# POST
} elsif ($work_list[$bx]->{'type'} eq "POST") {
$resp = g_post_page ( $ua, $work_list[$bx]->{'url'}, $params, $work_list[$bx]->{'headers'}, $work_list[$bx]->{'debug'});
# HEAD
} else {
if ($cx > 0){
$params = $work_list[$bx]->{'url'} . "?" . $params;
} else {
$params = $work_list[$bx]->{'url'};
}
$resp = g_head_page ( $ua, $params, $work_list[$bx]->{'headers'}, $work_list[$bx]->{'debug'});
}
# Check for errors.
if ($resp->code() == 500) {
$total_invalid_request++;
$bx = $config->{"work_items"};
$check_string=0;
last;
}
# Get string ?
if (defined($work_list[$bx]->{'get_string'})) {
my $as_string = $resp->as_string;
my $temp = $work_list[$bx]->{'get_string'};
if ($as_string =~ m/($temp)/) {
$task_get_string[$thread_id] = $1;
}
}
# Get response ?
if ($work_list[$bx]->{'get_content_advanced'} ne "") {
my $content = $resp->decoded_content;
my $temp = $work_list[$bx]->{'get_content_advanced'};
if ($content =~ m/$temp/) {
$task_get_content[$thread_id] = $1 if defined ($1);
}
} elsif ($work_list[$bx]->{'get_content'} ne "") {
my $content = $resp->decoded_content;
my $temp = $work_list[$bx]->{'get_content'};
if ($content =~ m/($temp)/) {
$task_get_content[$thread_id] = $1;
}
}
# Resource bashing
if ((defined($work_list[$bx]->{'get_resources'})) && ($work_list[$bx]->{'get_resources'} == 1)){
$total_requests = g_get_all_links ($config, $ua, $resp, $total_requests, $work_list[$bx]->{'url'}, $work_list[$bx]->{'headers'}, $work_list[$bx]->{'debug'});
}
# CHECKSTRING check
$cx = 0;
while (defined($work_list[$bx]->{'checkstring'}[$cx])) {
my $match_string = $work_list[$bx]->{'checkstring'}[$cx];
my $as_string = $resp->as_string;
my $guess = Encode::Guess::guess_encoding($as_string);
if (ref $guess) {
$as_string = $guess->decode($as_string);
}
unless (utf8::is_utf8($match_string)) {
utf8::decode($match_string);
}
if ( $as_string =~ m/$match_string/i ){
$total_valid_requests++;
} else {
$total_invalid_request++;
$bx = $config->{"work_items"}; # Abort session remaining request
$check_string=0;
}
$cx++;
}
# CHECKNOTSTRING check
$cx = 0;
while (defined($work_list[$bx]->{'checknotstring'}[$cx])) {
my $match_string = $work_list[$bx]->{'checknotstring'}[$cx];
my $as_string = $resp->as_string;
my $guess = Encode::Guess::guess_encoding($as_string);
if (ref $guess) {
$as_string = $guess->decode($as_string);
}
unless (utf8::is_utf8($match_string)) {
utf8::decode($match_string);
}
if ( $as_string !~ m/$match_string/i ){
$total_valid_requests++;
} else {
$total_invalid_request++;
$bx = $config->{"work_items"}; # Abort session remaining request
$check_string=0;
}
$cx++;
}
# Cookie carry on
if (defined ($work_list[$bx]->{'cookie'}) && $work_list[$bx]->{'cookie'} == 1){
$cookies->extract_cookies($resp);
$ua->cookie_jar($cookies);
}
# End just now by pressing CTRL-C or Kill Signal !
#if ($goliat_abort == 1){
#$ax = $config->{'retries'};
#$bx = $config->{'items'};
#goto END_LOOP;
#}
} #main work_detail loop
$ttime2 = Time::HiRes::gettimeofday();
$ttime_tot = $ttime2 - $ttime1; # Total time for this task
$task_time[$thread_id] = $ttime_tot;
$task_requests [$thread_id] = $total_requests;
if ($ttime_tot > 0 ){
$task_reqsec[$thread_id] = $total_requests / $ttime_tot;
} else {
$task_reqsec[$thread_id] = $total_requests;
}
$task_fails[$thread_id] = $total_invalid_request;
if ($check_string == 0){
$task_session_fails[$thread_id]++
}
$task_sessions [$thread_id]++;
if ($task_sessions [$thread_id] > 0 ){
$task_ssec[$thread_id] = $ttime_tot / $task_sessions [$thread_id];
} else {
$task_ssec[$thread_id] = $task_sessions[$thread_id];
}
sleep $config->{'ses_delay'};
}
END_LOOP:
$cookies->clear;
if ( -f $cookie_file){
unlink ($cookie_file);
}
$task_end[$thread_id] = 1;
}
sub g_get_all_links {
my ($config, $ua, $response, $counter, $myurl, $headers, $debug) = @_;
my $html;
if ($response->is_success) {
$html = $response->content;
} else {
return $counter;
}
# Beware this funcion, needs to be destroyed after use it !!!
my $parsed_html = parse_html($html);
#$ua->conn_cache(LWP::ConnCache->new());
my @url_list;
my $url = "";
my $link;
my $full_url;
for (@{ $parsed_html->extract_links( ) }) {
$link=$_->[0];
if (($link =~ m/.png/i) || ($link =~ m/.gif/i) || ($link =~ m/.htm/i) ||
($link =~ m/.html/i) || ($link =~ m/.pdf/i) || ($link =~ m/.jpg/i)
|| ($link =~ m/.ico/i)){
$url = new URI::URL $link;
$full_url = $url->abs($myurl);
@url_list = $full_url;
}
}
$parsed_html->delete;
my $ax = 0;
while ($full_url = pop(@url_list)) {
g_get_page ($ua, $full_url, $headers, $debug);
$counter++;
$ax++;
if ($ax > $config->{"max_depth"}){
return $counter;
}
}
return $counter;
}
sub g_get_page {
my $ua = $_[0];
my $url = $_[1];
my $headers = $_[2];
my $debug = $_[3];
my $req = HTTP::Request->new(GET => $url);
$req->header('Accept' => 'text/html');
while (my ($header, $value) = each %{$headers}) {
$req->header($header => $value);
}
my $response = $ua->request($req);
return $response if ($debug eq '');
# Debug
if (open (DEBUG, '>>', $debug . '.req')) {
print DEBUG "[Goliat debug " . time () . "]\n";
print DEBUG $req->as_string ();
print "\n";
close (DEBUG);
}
if (open (DEBUG, '>>', $debug . '.res')) {
print DEBUG "[Goliat debug " . time () . "]\n";
print DEBUG $response->as_string ();
print "\n";
close (DEBUG);
}
return $response;
}
sub g_head_page {
my $ua = $_[0];
my $url = $_[1];
my $headers = $_[2];
my $debug = $_[3];
my $req = HTTP::Request->new(HEAD => $url);
$req->header('Accept' => 'text/html');
while (my ($header, $value) = each %{$headers}) {
$req->header($header => $value);
}
my $response = $ua->request($req);
return $response if ($debug eq '');
# Debug
if (open (DEBUG, '>>', $debug . '.req')) {
print DEBUG "[Goliat debug " . time () . "]\n";
print DEBUG $req->as_string ();
print "\n";
close (DEBUG);
}
if (open (DEBUG, '>>', $debug . '.res')) {
print DEBUG "[Goliat debug " . time () . "]\n";
print DEBUG $response->as_string ();
print "\n";
close (DEBUG);
}
return $response;
}
sub g_post_page {
my $ua = $_[0];
my $url = $_[1];
my $content = $_[2];
my $headers = $_[3];
my $debug = $_[4];
my $req = HTTP::Request->new(POST => $url);
$req->content_type('application/x-www-form-urlencoded');
$req->content ($content);
while (my ($header, $value) = each %{$headers}) {
$req->header($header => $value);
}
my $response = $ua->request($req);
return $response if ($debug eq '');
# Debug
if (open (DEBUG, '>>', $debug . '.req')) {
print DEBUG "[Goliat debug " . time () . "]\n";
print DEBUG $req->as_string ();
print "\n";
close (DEBUG);
}
if (open (DEBUG, '>>', $debug . '.res')) {
print DEBUG "[Goliat debug " . time () . "]\n";
print DEBUG $response->as_string ();
print "\n";
close (DEBUG);
}
return $response;
}
# End of function declaration
# End of defined Code
1;
__END__

View File

@ -0,0 +1,222 @@
###############################################################################
# Goliath Tools Module
###############################################################################
# Copyright (c) 2007-2021 Artica Soluciones Tecnologicas S.L
# This code is not free or OpenSource. Please don't redistribute.
###############################################################################
package PandoraFMS::Goliat::GoliatTools;
use 5.008004;
use strict;
use warnings;
use integer;
require Exporter;
our @ISA = ("Exporter");
our %EXPORT_TAGS = ( 'all' => [ qw() ] );
our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
our @EXPORT = qw(
g_clean_string
g_clean_string_unicode
g_random_string
g_trash_ascii
g_trash_unicode
g_unicode );
# Delaracion de funciones publicas
##############################################################################
# clean_string (string) - Purge a string for any forbidden characters (esc, etc)
##############################################################################
sub g_clean_string {
my $micadena;
$micadena = $_[0];
$micadena =~ s/[^\-\:\;\.\,\_\s\a\*\=\(\)a-zA-Z0-9]/ /g;
$micadena =~ s/[\n\l\f]/ /g;
return $micadena;
}
##############################################################################
# limpia_cadena_unicode (string) - Purge a string for any unicode character
##############################################################################
sub g_clean_string_unicode {
my $micadena;
$micadena = $_[0];
$micadena =~ s/[%]/%%/g;
return $micadena;
}
#############################################################################
# Hex converter - Convert dec value in hex representation (00 - FF)
#############################################################################
sub g_decToHex { #return a 16bit (o uno de 8bit) hex value
my @hex = (0,1,2,3,4,5,6,7,8,9,"A","B","C","D","E","F");
my @dec = @_;
my $s3 = $hex[($dec[0]/4096)%16];
my $s2 = $hex[($dec[0]/256)%16];
my $s1 = $hex[($dec[0]/16)%16];
my $s0 = $hex[$dec[0]%16];
return "$s1$s0";
}
#############################################################################
# unicode - Generate unicode string (recursive)
#############################################################################
sub g_unicode {
my $config_word = $_[0];
my $config_depth = $_[1];
my $config_char="%";
if ($config_depth == 0) {
return $config_word;
}
my $a;
my $pos=0;
my $output="";
my $len;
for ($a=0;$a<$config_depth;$a++){
$len = length($config_word);
while ($pos < $len ) {
my $item;
$item = substr($config_word,$pos,1);
$output = $output.$config_char.decToHex(ord($item));
$pos++;
}
$config_word = $output;
}
return $output
}
#############################################################################
# trash - Generate "unicode" style trash string
#############################################################################
sub g_trash_unicode {
my $config_depth = $_[0];
my $config_char="%";
my $a;
my $output;
for ($a=0;$a<$config_depth;$a++){
$output = $output.$config_char.decToHex(int(rand(25)+97));
}
return $output
}
#############################################################################
# trash_ascii - Generate ASCII random strings
#############################################################################
sub g_trash_ascii {
my $config_depth = $_[0];
my $config_char="%";
my $a;
my $output;
for ($a=0;$a<$config_depth;$a++){
$output = $output.chr(int(rand(25)+97));
}
return $output
}
#############################################################################
# random_string (min, max, type) - Generate ASCII alphanumeric string,
# from min and max
#############################################################################
sub g_random_string {
my $config_min = $_[0];
my $config_max = $_[1];
my $config_type = $_[2]; # alphanumeric, alpha, numeric, lowalpha, highalpha
my $a;
my $output = "";
my @valid_chars;
my $rango;
# First fill list of valid chars (A-Z, a-z, 0-9)
if (($config_type eq "alphanumeric") || ($config_type eq "numeric")){
for ($a=48;$a<58;$a++){ # numeric
push @valid_chars, chr($a);
}
}
if (($config_type eq "alphanumeric") || ($config_type eq "alpha") ||
($config_type eq "highalpha") || ($config_type eq "lowalpha") ){
if (($config_type eq "alphanumeric") || ($config_type eq "highalpha") || ($config_type eq "alpha")){
for ($a=65;$a<91;$a++){ # alpha (CAPS)
push @valid_chars, chr($a);
}
}
if (($config_type eq "alphanumeric") || ($config_type eq "lowalpha") || ($config_type eq "alpha")){
for ($a=97;$a<123;$a++){ # alpha (low)
push @valid_chars, chr($a);
}
}
}
$rango = @valid_chars;
# Fill min. value
for ($a=0;$a<$config_min;$a++){
$output = $output.$valid_chars[(int(rand($rango)))];
}
# Fill to max;
if (($config_max - $config_min) != 0){
for ($a=0;$a<rand($config_max - $config_min +1)-1;$a++){
$output = $output.$valid_chars[(int(rand($rango)))];
}
}
return $output
}
1;
__END__
=head1 NAME
Goliath-Tools Library tools for Goliath application.
This is an internal module, does not use for independent apps.
=head1 SYNOPSIS
use GoliatTools;
=head1 DESCRIPTION
=head2 EXPORT
Pues no se que poner aqui :)
=head1 SEE ALSO
Mention other useful documentation such as the documentation of
related modules or operating system documentation (such as man pages
in UNIX), or any relevant external documentation such as RFCs or
standards.
If you have a mailing list set up for your module, mention it here.
If you have a web site set up for your module, mention it here.
=head1 AUTHOR
slerena, E<lt>slerena@Egmail.com<gt>
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2005 by Sancho Lerena
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.8.4 or,
at your option, any later version of Perl 5 you may have available.
Licenced under GPL
=cut

View File

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

Some files were not shown because too many files have changed in this diff Show More