diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 1a8ca659a0..dd952b86e5 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -349,6 +349,12 @@ sub pandora_load_config { $pa_config->{"fping"} = "/usr/sbin/fping"; # > 5.1SP2 + # Discovery SAP + $pa_config->{"java"} = "/usr/bin/java"; + + # Discovery SAP utils + $pa_config->{"sap_utils"} = "/usr/share/pandora_server/util/recon_scripts/SAP"; + # braa for enterprise snmp server $pa_config->{"braa"} = "/usr/bin/braa"; @@ -835,6 +841,12 @@ sub pandora_load_config { elsif ($parametro =~ m/^fping\s(.*)/i) { $pa_config->{'fping'}= clean_blank($1); } + elsif ($parametro =~ m/^java\s(.*)/i) { + $pa_config->{'java'}= clean_blank($1); + } + elsif ($parametro =~ m/^sap_utils\s(.*)/i) { + $pa_config->{'sap_utils'}= clean_blank($1); + } elsif ($parametro =~ m/^nmap_timing_template\s+([0-9]*)/i) { $pa_config->{'nmap_timing_template'}= clean_blank($1); } diff --git a/pandora_server/lib/PandoraFMS/Recon/Base.pm b/pandora_server/lib/PandoraFMS/Recon/Base.pm index f143d10515..b444e92672 100644 --- a/pandora_server/lib/PandoraFMS/Recon/Base.pm +++ b/pandora_server/lib/PandoraFMS/Recon/Base.pm @@ -1441,10 +1441,11 @@ sub cloud_scan($) { my $type = ''; - if ($self->{'task_data'}->{'type'} == DISCOVERY_CLOUD_AWS_EC2 - || $self->{'task_data'}->{'type'} == DISCOVERY_CLOUD_AWS_RDS) { + if ( $self->{'task_data'}->{'type'} == DISCOVERY_CLOUD_AWS_EC2 + || $self->{'task_data'}->{'type'} == DISCOVERY_CLOUD_AWS_RDS) { $type = 'Aws'; } else { + # Unrecognized task type. call('message', 'Unrecognized task type', 1); $self->call('update_progress', -1); @@ -1466,9 +1467,11 @@ sub cloud_scan($) { ); if (!$cloudObj) { + # Failed to initialize, check Cloud credentials or anything. call('message', 'Unable to initialize PandoraFMS::Recon::Cloud::'.$type, 3); } else { + # Let Cloud object manage scan. $cloudObj->scan(); } @@ -1535,10 +1538,12 @@ sub database_scan($$$) { if (ref($__data) eq "ARRAY") { if (defined($dbObjCfg->{'agent_per_database'}) && $dbObjCfg->{'agent_per_database'} == 1) { + # Agent per database detected. push @data, @{$__data}; } else { + # Merge modules into engine agent. my @_modules = map { map { $_ } @@ -1587,6 +1592,13 @@ sub app_scan($) { my $global_percent = 0; my $i = 0; foreach my $target (@targets) { + if ( !defined($target) + || $target eq '' + || $target =~ /^#/) { + # Ignore empty target or commented one. + next; + } + my @data; my @modules; @@ -1617,12 +1629,14 @@ sub app_scan($) { ); if (defined($obj)) { + # Verify if object is connected. If cannot connect to current target # return with module. if (!$obj->is_connected()) { call('message', 'Cannot connect to target ' . $target, 3); $global_percent += $global_step; $self->{'c_network_percent'} = 90; + # Update progress $self->call('update_progress', $global_percent + (90 / (scalar @targets))); $self->{'summary'}->{'not_alive'} += 1; @@ -1639,30 +1653,39 @@ sub app_scan($) { # @modules => 'global' modules. # @data => { # 'agent_data' => {} - # 'module_data' => [] + # 'module_data' => [] # } my $results; # Scan connected obj. - if ($self->{'task_data'}->{'type'} == DISCOVERY_APP_MYSQL - || $self->{'task_data'}->{'type'} == DISCOVERY_APP_ORACLE - ) { + if ( $self->{'task_data'}->{'type'} == DISCOVERY_APP_MYSQL + || $self->{'task_data'}->{'type'} == DISCOVERY_APP_ORACLE) { + # Database. $results = $self->database_scan($type, $obj, $global_percent, \@targets); } elsif ($self->{'task_data'}->{'type'} == DISCOVERY_APP_SAP) { + # SAP scan $results = $obj->scan(); } - push @modules, $results->{'modules'}; - push @data, $results->{'data'}; + # Add results. + if (ref($results) eq 'HASH') { + if (defined($results->{'modules'})) { + push @modules, $results->{'modules'}; + } + + if (defined($results->{'data'})) { + push @data, $results->{'data'}; + } + } } # Put engine agent at the beginning of the list. my $version = $obj->get_version(); - unshift @data,{ + unshift @data, { 'agent_data' => { 'agent_name' => $obj->get_agent_name(), 'os' => $type, @@ -1714,9 +1737,11 @@ sub deploy_scan($) { ); if (!$deployer) { + # Failed to initialize, check Cloud credentials or anything. call('message', 'Unable to initialize PandoraFMS::Recon::Deployer', 3); } else { + # Let deployer object manage scan. $deployer->scan(); } @@ -1739,14 +1764,16 @@ sub scan($) { $self->call('update_progress', 1); if (defined($self->{'task_data'})) { - if ($self->{'task_data'}->{'type'} == DISCOVERY_APP_MYSQL - || $self->{'task_data'}->{'type'} == DISCOVERY_APP_ORACLE - || $self->{'task_data'}->{'type'} == DISCOVERY_APP_SAP) { + if ( $self->{'task_data'}->{'type'} == DISCOVERY_APP_MYSQL + || $self->{'task_data'}->{'type'} == DISCOVERY_APP_ORACLE + || $self->{'task_data'}->{'type'} == DISCOVERY_APP_SAP) { + # Application scan. return $self->app_scan(); } if ($self->{'task_data'}->{'type'} == DISCOVERY_CLOUD_AWS_RDS) { + # Cloud scan. return $self->cloud_scan(); }