2012-07-27 KIKUCHI Koichiro <koichiro@rworks.jp>

* lib/PandoraFMS/Core.pm: fixed bug: added missing decode_entities for
	 SNMP alert evaluation. Also cleaned source code style.



git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@6818 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
This commit is contained in:
koichirok 2012-07-27 03:10:13 +00:00
parent ade4a8d9c4
commit 45e4e10193
2 changed files with 49 additions and 44 deletions

View File

@ -1,3 +1,8 @@
2012-07-27 KIKUCHI Koichiro <koichiro@rworks.jp>
* lib/PandoraFMS/Core.pm: fixed bug: added missing decode_entities for
SNMP alert evaluation. Also cleaned source code style.
2012-07-25 Miguel de Dios <miguel.dedios@artica.es>
* lib/PandoraFMS/DB.pm: cleaned source code style.

View File

@ -450,7 +450,7 @@ sub pandora_process_alert ($$$$$$$$;$) {
$alert->{'name'} . ")", $agent->{'id_grupo'},
$agent->{'id_agente'}, $alert->{'priority'}, $id,
(defined ($alert->{'id_agent_module'}) ? $alert->{'id_agent_module'} : 0),
"alert_ceased", 0, $dbh);
"alert_ceased", 0, $dbh);
}
return;
}
@ -636,7 +636,7 @@ sub pandora_execute_alert ($$$$$$$$;$) {
# Simple alert
if (defined ($alert->{'id_template_module'})) {
@actions = get_db_rows ($dbh, 'SELECT *, talert_template_module_actions.id AS id_alert_template_module_actions
FROM talert_template_module_actions, talert_actions, talert_commands
FROM talert_template_module_actions, talert_actions, talert_commands
WHERE talert_template_module_actions.id_alert_action = talert_actions.id
AND talert_actions.id_alert_command = talert_commands.id
AND talert_template_module_actions.id_alert_template_module = ?
@ -815,13 +815,13 @@ sub pandora_execute_action ($$$$$$$$$;$) {
# Internal event
} elsif ($action->{'name'} eq "Pandora FMS Event") {
$field1 = subst_alert_macros ($field1, \%macros);
pandora_event ($pa_config, $field1, (defined ($agent) ? $agent->{'id_grupo'} : 0), (defined ($agent) ? $agent->{'id_agente'} : 0), $alert->{'priority'}, 0, 0, "alert_fired", 0, $dbh);
$field1 = subst_alert_macros ($field1, \%macros);
pandora_event ($pa_config, $field1, (defined ($agent) ? $agent->{'id_grupo'} : 0), (defined ($agent) ? $agent->{'id_agente'} : 0), $alert->{'priority'}, 0, 0, "alert_fired", 0, $dbh);
# Validate event (field1: agent name; field2: module name)
} elsif ($action->{'name'} eq "Validate Event") {
my $agent_id = -1;
my $module_id = -1;
if($field1 ne '') {
my $agent_id = -1;
my $module_id = -1;
if($field1 ne '') {
$agent_id = get_agent_id ($dbh, $field1);
if($field2 ne '' && $agent_id != -1) {
$module_id = get_agent_module_id ($dbh, $field2, $agent_id);
@ -1267,9 +1267,9 @@ Delete all actions of policy template module.
=cut
##########################################################################
sub pandora_delete_all_template_module_actions ($$) {
my ($dbh, $template_module_id) = @_;
my ($dbh, $template_module_id) = @_;
return db_do ($dbh, 'DELETE FROM talert_template_module_actions WHERE id_alert_template_module = ?', $template_module_id);
return db_do ($dbh, 'DELETE FROM talert_template_module_actions WHERE id_alert_template_module = ?', $template_module_id);
}
##########################################################################
@ -1715,8 +1715,8 @@ sub pandora_evaluate_snmp_alerts ($$$$$$$$$) {
($alert->{'times_fired'}, $alert->{'internal_counter'}, $alert->{'alert_type'});
# OID
# Decode first, could be a complex regexp !
$alert->{'oid'} = decode_entities($alert->{'oid'});
# Decode first, could be a complex regexp !
$alert->{'oid'} = decode_entities($alert->{'oid'});
my $oid = $alert->{'oid'};
if ($oid ne '') {
next if ($trap_oid !~ m/^$oid$/i && $trap_oid_text !~ m/^$oid$/i);
@ -1736,31 +1736,31 @@ sub pandora_evaluate_snmp_alerts ($$$$$$$$$) {
}
# Trap value
my $single_value = $alert->{'single_value'};
my $single_value = decode_entities($alert->{'single_value'});
if ($single_value ne '') {
next if ($trap_value !~ m/^$single_value$/i);
$alert_data .= "Value: $trap_value ";
}
# Agent IP
my $agent = $alert->{'agent'};
my $agent = decode_entities($alert->{'agent'});
if ($agent ne '') {
next if ($trap_agent !~ m/^$agent$/i );
$alert_data .= "Agent: $agent";
}
# Specific SNMP Trap alert macros for regexp selectors in trap info
# Specific SNMP Trap alert macros for regexp selectors in trap info
my %macros;
# Custom OID/value
# Decode first, this could be a complex regexp !
# Decode first, this could be a complex regexp !
my $custom_oid = decode_entities($alert->{'custom_oid'});
if ($custom_oid ne '') {
# No match
next if ($trap_custom_oid !~ m/^$custom_oid$/i);
next if ($trap_custom_oid !~ m/^$custom_oid$/i);
# Match!
# Match!
$macros{'_snmp_f1_'} = $1 if (defined($1));
$macros{'_snmp_f2_'} = $2 if (defined($2));
$macros{'_snmp_f3_'} = $3 if (defined($3));
@ -1788,9 +1788,9 @@ sub pandora_evaluate_snmp_alerts ($$$$$$$$$) {
}
# Replace macros
$alert->{'al_field1'} = subst_alert_macros ($alert->{'al_field1'}, \%macros);
$alert->{'al_field2'} = subst_alert_macros ($alert->{'al_field2'}, \%macros);
$alert->{'al_field3'} = subst_alert_macros ($alert->{'al_field3'}, \%macros);
$alert->{'al_field1'} = subst_alert_macros ($alert->{'al_field1'}, \%macros);
$alert->{'al_field2'} = subst_alert_macros ($alert->{'al_field2'}, \%macros);
$alert->{'al_field3'} = subst_alert_macros ($alert->{'al_field3'}, \%macros);
# Check time threshold
$alert->{'last_fired'} = '1970-01-01 00:00:00' unless defined ($alert->{'last_fired'});
@ -1824,27 +1824,27 @@ sub pandora_evaluate_snmp_alerts ($$$$$$$$$) {
'priority' => $alert->{'priority'},
);
my %agent;
my %agent;
my $this_agent = get_agent_from_addr ($dbh, $trap_agent);
if (defined($this_agent)){
%agent = (
'nombre' => $this_agent->{'nombre'},
'id_agente' => $this_agent->{'id_agente'},
'direccion' => $trap_agent,
'id_grupo' => $this_agent->{'id_grupo'},
'comentarios' => ''
);
} else {
%agent = (
'nombre' => $trap_agent,
'direccion' => $trap_agent,
'comentarios' => '',
'id_agente' => 0,
'id_grupo' => 0
);
}
my $this_agent = get_agent_from_addr ($dbh, $trap_agent);
if (defined($this_agent)){
%agent = (
'nombre' => $this_agent->{'nombre'},
'id_agente' => $this_agent->{'id_agente'},
'direccion' => $trap_agent,
'id_grupo' => $this_agent->{'id_grupo'},
'comentarios' => ''
);
} else {
%agent = (
'nombre' => $trap_agent,
'direccion' => $trap_agent,
'comentarios' => '',
'id_agente' => 0,
'id_grupo' => 0
);
}
# Execute alert
my $action = get_db_single_row ($dbh, 'SELECT *
@ -1857,10 +1857,10 @@ sub pandora_evaluate_snmp_alerts ($$$$$$$$$) {
pandora_execute_action ($pa_config, $trap_rcv_full, \%agent, \%alert, 1, $action, undef, $dbh, $timestamp, \%macros) if (defined ($action));
# Generate an event, ONLY if our alert action is different from generate an event.
if ($action->{'id_alert_command'} != 3){
pandora_event ($pa_config, "SNMP alert fired (" . $alert->{'description'} . ")",
if ($action->{'id_alert_command'} != 3){
pandora_event ($pa_config, "SNMP alert fired (" . $alert->{'description'} . ")",
0, 0, $alert->{'priority'}, 0, 0, 'alert_fired', 0, $dbh);
}
}
# Update alert status
db_do ($dbh, 'UPDATE talert_snmp SET times_fired = ?, last_fired = ?, internal_counter = ? WHERE id_as = ?',
@ -2599,7 +2599,7 @@ sub pandora_group_statistics ($$) {
$non_init = get_db_value ($dbh, "SELECT COUNT(tagente_estado.id_agente_estado)
FROM tagente_estado, tagente, tagente_modulo
WHERE tagente.id_grupo = $group AND tagente.disabled = 0
AND tagente.id_agente = tagente_estado.id_agente
AND tagente.id_agente = tagente_estado.id_agente
AND tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo
AND tagente_modulo.disabled = 0
AND tagente_modulo.id_tipo_modulo NOT IN (21,22,23,24) AND utimestamp = 0");