From 5782bce170bbee10ce46edf85f5bff8a6a8551f7 Mon Sep 17 00:00:00 2001 From: ramonn Date: Tue, 26 Mar 2013 16:13:15 +0000 Subject: [PATCH] 2013-03-26 Ramon Novoa * lib/PandoraFMS/Core.pm, lib/PandoraFMS/Tools.pm, lib/PandoraFMS/DataServer.pm, lib/PandoraFMS/ReconServer.pm, bin/pandora_server: Improved pandora_get_os to support custom operating systems and moved it from Tools.pm to Core.pm. git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@7889 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f --- pandora_server/ChangeLog | 9 +++ pandora_server/bin/pandora_server | 2 +- pandora_server/lib/PandoraFMS/Core.pm | 64 +++++++++++++++++++- pandora_server/lib/PandoraFMS/DataServer.pm | 3 +- pandora_server/lib/PandoraFMS/ReconServer.pm | 10 +-- pandora_server/lib/PandoraFMS/Tools.pm | 64 -------------------- 6 files changed, 78 insertions(+), 74 deletions(-) diff --git a/pandora_server/ChangeLog b/pandora_server/ChangeLog index 80832c14cb..2a63589fb8 100644 --- a/pandora_server/ChangeLog +++ b/pandora_server/ChangeLog @@ -1,3 +1,12 @@ +2013-03-26 Ramon Novoa + + * lib/PandoraFMS/Core.pm, + lib/PandoraFMS/Tools.pm, + lib/PandoraFMS/DataServer.pm, + lib/PandoraFMS/ReconServer.pm, + bin/pandora_server: Improved pandora_get_os to support custom operating + systems and moved it from Tools.pm to Core.pm. + 2013-03-25 Hirofumi Kosaka * pandora_server_installer: Fixed false recognition of RHEL6.4. diff --git a/pandora_server/bin/pandora_server b/pandora_server/bin/pandora_server index 39cad31a44..cdf596b194 100755 --- a/pandora_server/bin/pandora_server +++ b/pandora_server/bin/pandora_server @@ -313,7 +313,7 @@ while (1) { # Update module status and fired alert counts my @agents = get_db_rows ($DBH, 'SELECT id_agente, nombre, update_module_count, update_alert_count FROM tagente WHERE disabled = 0 AND (update_module_count=1 OR update_alert_count=1)'); foreach my $agent (@agents) { - logger (\%Config, " [*] Updating module status and alert fired counts for agent " . $agent->{'nombre'}, 10); + logger (\%Config, "Updating module status and alert fired counts for agent " . $agent->{'nombre'}, 10); if ($agent->{'update_module_count'} == 1) { pandora_update_agent_module_count ($DBH, $agent->{'id_agente'}); diff --git a/pandora_server/lib/PandoraFMS/Core.pm b/pandora_server/lib/PandoraFMS/Core.pm index d56f34f28f..1459892c0b 100644 --- a/pandora_server/lib/PandoraFMS/Core.pm +++ b/pandora_server/lib/PandoraFMS/Core.pm @@ -155,6 +155,7 @@ our @EXPORT = qw( pandora_get_config_value pandora_get_module_tags pandora_get_module_url_tags + pandora_get_os pandora_module_keep_alive pandora_module_keep_alive_nd pandora_module_unknown @@ -1925,8 +1926,6 @@ Update agent GIS information. sub pandora_update_gis_data ($$$$$$$$$) { my ($pa_config, $dbh, $agent_id, $agent_name, $longitude, $latitude, $altitude, $position_description, $timestamp) = @_; - logger($pa_config, "Updating GIS data for agent $agent_name (long: $longitude lat: $latitude alt: $altitude)", 10); - # Check for valid longitude and latitude if (!defined($longitude) || $longitude !~ /[-+]?[0-9,11,12]/ || !defined($latitude) || $latitude !~ /[-+]?[0-9,11,12]/) { @@ -1937,6 +1936,8 @@ sub pandora_update_gis_data ($$$$$$$$$) { if (!defined($altitude) || $altitude !~ /[-+]?[0-9,11,12]/) { $altitude = ''; } + + logger($pa_config, "Updating GIS data for agent $agent_name (long: $longitude lat: $latitude alt: $altitude)", 10); # Get position description if ((!defined($position_description))) { @@ -3955,6 +3956,65 @@ sub pandora_update_agent_alert_count ($$) { ') WHERE id_agente = ' . $agent_id); } +######################################################################## +# SUB pandora_get_os (string) +# Detect OS using a string, and return id_os +######################################################################## +sub pandora_get_os ($$) { + my ($dbh, $os) = @_; + + if (! defined($os) || $os eq "") { + # Other OS + return 10; + } + + if ($os =~ m/Windows/i) { + return 9; + } + if ($os =~ m/Cisco/i) { + return 7; + } + if ($os =~ m/SunOS/i || $os =~ m/Solaris/i) { + return 2; + } + if ($os =~ m/AIX/i) { + return 3; + } + if ($os =~ m/HP\-UX/i) { + return 5; + } + if ($os =~ m/Apple/i || $os =~ m/Darwin/i) { + return 8; + } + if ($os =~ m/Linux/i) { + return 1; + } + if ($os =~ m/Enterasys/i || $os =~ m/3com/i) { + return 11; + } + if ($os =~ m/Octopods/i) { + return 13; + } + if ($os =~ m/embedded/i) { + return 14; + } + if ($os =~ m/android/i) { + return 15; + } + if ($os =~ m/BSD/i) { + return 4; + } + + # Search for a custom OS + my $os_id = get_db_value ($dbh, 'SELECT id_os FROM tconfig_os WHERE name LIKE ?', '%' . $os . '%'); + if (defined ($os_id)) { + return $os_id; + } + + # Other OS + return 10; +} + # End of function declaration # End of defined Code diff --git a/pandora_server/lib/PandoraFMS/DataServer.pm b/pandora_server/lib/PandoraFMS/DataServer.pm index de7126805c..fccbcd5562 100644 --- a/pandora_server/lib/PandoraFMS/DataServer.pm +++ b/pandora_server/lib/PandoraFMS/DataServer.pm @@ -224,7 +224,6 @@ sub process_xml_data ($$$$$) { if ($parent_id < 1) { # Unknown parent $parent_id = 0; } - logger($pa_config,"Parent_agent_name: $parent_agent_name parent_id: $parent_id",10); } # Unknown agent! @@ -274,7 +273,7 @@ sub process_xml_data ($$$$$) { } # Get OS, group and description - my $os = pandora_get_os ($data->{'os_name'}); + my $os = pandora_get_os ($dbh, $data->{'os_name'}); my $group_id = -1; $group_id = get_group_id ($dbh, $data->{'group'}) if (defined ($data->{'group'})); if ($group_id == -1) { diff --git a/pandora_server/lib/PandoraFMS/ReconServer.pm b/pandora_server/lib/PandoraFMS/ReconServer.pm index ac1c1674bf..f3d0812e57 100644 --- a/pandora_server/lib/PandoraFMS/ReconServer.pm +++ b/pandora_server/lib/PandoraFMS/ReconServer.pm @@ -184,7 +184,7 @@ sub data_consumer ($$) { # Filter by OS my $id_os = 11; # Network by default if ($task->{'os_detect'} == 1){ - $id_os = guess_os ($pa_config, $addr); + $id_os = guess_os ($pa_config, $dbh, $addr); next if ($task->{'id_os'} > 0 && $task->{'id_os'} != $id_os); } @@ -374,7 +374,7 @@ sub get_host_parent { # Detect host's OS my $id_os = 11; if ($os_detect == 1) { - $id_os = guess_os ($pa_config, $host_addr); + $id_os = guess_os ($pa_config, $dbh, $host_addr); } # Create the host @@ -405,21 +405,21 @@ sub tcp_scan ($$$) { # Guess OS using xprobe2. ########################################################################## sub guess_os { - my ($pa_config, $host) = @_; + my ($pa_config, $dbh, $host) = @_; # Use xprobe2 if available my $xprobe = $pa_config->{'xprobe2'}; if (-e $xprobe){ my $output = `$xprobe $host 2> /dev/null | grep 'Running OS' | head -1`; return 10 if ($? != 0); - return pandora_get_os ($output); + return pandora_get_os ($dbh, $output); } # Use nmap by default my $nmap = $pa_config->{'nmap'}; my $output = `$nmap -F -O $host 2> /dev/null | grep 'Aggressive OS guesses'`; return 10 if ($? != 0); - return pandora_get_os ($output); + return pandora_get_os ($dbh, $output); } ########################################################################## diff --git a/pandora_server/lib/PandoraFMS/Tools.pm b/pandora_server/lib/PandoraFMS/Tools.pm index 5d8bfaa415..c709fcb761 100644 --- a/pandora_server/lib/PandoraFMS/Tools.pm +++ b/pandora_server/lib/PandoraFMS/Tools.pm @@ -53,7 +53,6 @@ our @EXPORT = qw( is_numeric clean_blank pandora_sendmail - pandora_get_os pandora_trash_ascii enterprise_hook enterprise_load @@ -229,69 +228,6 @@ sub ascii_to_html($) { return "&#x".substr(unpack("H*", pack("N", $ascii)),6,3).";"; } - -######################################################################## -# SUB pandora_get_os (string) -# Detect OS using a string, and return id_os -######################################################################## - -sub pandora_get_os ($) { - my $command = $_[0]; - if (defined($command) && $command ne "") { - if ($command =~ m/Windows/i) { - return 9; - } - elsif ($command =~ m/Cisco/i) { - return 7; - } - elsif ($command =~ m/SunOS/i) { - return 2; - } - elsif ($command =~ m/Solaris/i) { - return 2; - } - elsif ($command =~ m/AIX/i) { - return 3; - } - elsif ($command =~ m/HP\-UX/i) { - return 5; - } - elsif ($command =~ m/Apple/i) { - return 8; - } - elsif ($command =~ m/Darwin/i){ - return 8; - } - elsif ($command =~ m/Linux/i) { - return 1; - } - elsif ($command =~ m/Enterasys/i) { - return 11; - } - elsif ($command =~ m/3com/i) { - return 11; - } - elsif ($command =~ m/Octopods/i) { - return 13; - } - elsif ($command =~ m/embedded/i) { - return 14; - } - elsif ($command =~ m/android/i) { - return 15; - } - elsif ($command =~ m/BSD/i) { - return 4; - } - else { - return 10; # Unknown / Other - } - } - else { - return 10; - } -} - ######################################################################## # Sub daemonize () # Put program in background (for daemon mode)