From 9cb2a0e1a19ba53abd103c36f6ba35ac30654861 Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Wed, 9 Oct 2019 19:13:11 +0200 Subject: [PATCH] NetworkServer enterprise improvement --- pandora_server/lib/PandoraFMS/Core.pm | 61 +++++++++++++++++++ .../lib/PandoraFMS/NetworkServer.pm | 29 +++++++-- 2 files changed, 86 insertions(+), 4 deletions(-) diff --git a/pandora_server/lib/PandoraFMS/Core.pm b/pandora_server/lib/PandoraFMS/Core.pm index ef8a9c18bf..a528cfa4d8 100644 --- a/pandora_server/lib/PandoraFMS/Core.pm +++ b/pandora_server/lib/PandoraFMS/Core.pm @@ -202,6 +202,7 @@ our @EXPORT = qw( pandora_get_module_phone_tags pandora_get_module_email_tags pandora_get_os + pandora_get_os_by_id pandora_input_password pandora_is_master pandora_mark_agent_for_alert_update @@ -5722,6 +5723,66 @@ sub pandora_get_os ($$) { return 10; } +######################################################################## +# SUB pandora_get_os_by_id (integer) +# Returns a chain with the name associated to target id_os. +######################################################################## +sub pandora_get_os_by_id ($$) { + my ($dbh, $os_id) = @_; + + if (! defined($os_id) || !is_numeric($os_id)) { + # Other OS + return 'Other'; + } + + if ($os_id eq 9) { + return 'Windows'; + } + if ($os_id eq 7 ) { + return 'Cisco'; + } + if ($os_id eq 2 ) { + return 'Solaris'; + } + if ($os_id eq 3 ) { + return 'AIX'; + } + if ($os_id eq 5) { + return 'HP-UX'; + } + if ($os_id eq 8 ) { + return 'Apple'; + } + if ($os_id eq 1 ) { + return 'Linux'; + } + if ($os_id eq 1) { + return 'Enterasys'; + } + if ($os_id eq 3) { + return 'Octopods'; + } + if ($os_id eq 4) { + return 'embedded'; + } + if ($os_id eq 5) { + return 'android'; + } + if ($os_id eq 4 ) { + return 'BSD'; + } + + # Search for a custom OS + my $os_name = get_db_value ($dbh, 'SELECT name FROM tconfig_os WHERE id_os = ?', $os_id); + if (defined ($os_name)) { + return $os_name; + } + + # Other OS + return 'Other'; +} + + ######################################################################## # Load module macros (a base 64 encoded JSON document) into the macro # hash. diff --git a/pandora_server/lib/PandoraFMS/NetworkServer.pm b/pandora_server/lib/PandoraFMS/NetworkServer.pm index 72ff78d975..a6944c2fa6 100644 --- a/pandora_server/lib/PandoraFMS/NetworkServer.pm +++ b/pandora_server/lib/PandoraFMS/NetworkServer.pm @@ -102,8 +102,8 @@ sub data_producer ($) { WHERE server_name = ? AND tagente_modulo.id_agente = tagente.id_agente AND tagente.disabled = 0 - AND tagente_modulo.id_tipo_modulo > 5 - AND tagente_modulo.id_tipo_modulo < 19 ' + AND ((tagente_modulo.id_tipo_modulo > 5 AND tagente_modulo.id_tipo_modulo < 19 ) + OR (tagente_modulo.id_tipo_modulo > 33 AND tagente_modulo.id_tipo_modulo < 38 )) ' . (defined ($network_filter) ? $network_filter : ' ') . 'AND tagente_modulo.disabled = 0 AND tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo @@ -116,8 +116,8 @@ sub data_producer ($) { AND tagente_modulo.id_agente = tagente.id_agente AND tagente.disabled = 0 AND tagente_modulo.disabled = 0 - AND tagente_modulo.id_tipo_modulo > 5 - AND tagente_modulo.id_tipo_modulo < 19 ' + AND ((tagente_modulo.id_tipo_modulo > 5 AND tagente_modulo.id_tipo_modulo < 19 ) + OR (tagente_modulo.id_tipo_modulo > 33 AND tagente_modulo.id_tipo_modulo < 38 )) ' . (defined ($network_filter) ? $network_filter : ' ') . 'AND tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo AND (tagente_modulo.flag = 1 OR ((tagente_estado.last_execution_try + tagente_estado.current_interval) < UNIX_TIMESTAMP())) @@ -468,6 +468,11 @@ sub exec_network_module ($$$$) { my $tcp_rcv = $module->{'tcp_rcv'}; my $timeout = $module->{'max_timeout'}; my $retries = $module->{'max_retries'}; + my $target_os = $module->{'custom_integer_1'}; + + if (!defined($target_os) || "$target_os" eq '0') { + $target_os = $agent_row->{'id_os'}; + } # Use the agent address by default if (! defined($ip_target) || $ip_target eq '' || $ip_target eq 'auto') { @@ -545,6 +550,22 @@ sub exec_network_module ($$$$) { $module_result = 1; } } + + # ------------------------------------------------------- + # CMD Module + # ------------------------------------------------------- + elsif (($id_tipo_modulo == 34) + || ($id_tipo_modulo == 35) + || ($id_tipo_modulo == 36) + || ($id_tipo_modulo == 37)) { # CMD Module + $module_data = enterprise_hook('remote_execution_module',[$pa_config, $dbh, $module, $target_os, $ip_target]); + if (!defined($module_data) || "$module_data" eq "") { + $module_result = 1; + } else { + # Success. + $module_result = 0; + } + } } # Write data section