diff --git a/pandora_server/lib/PandoraFMS/SNMPServer.pm b/pandora_server/lib/PandoraFMS/SNMPServer.pm index af15614465..bc7b3a708a 100644 --- a/pandora_server/lib/PandoraFMS/SNMPServer.pm +++ b/pandora_server/lib/PandoraFMS/SNMPServer.pm @@ -211,6 +211,11 @@ sub pandora_snmptrapd { # Try to save as much information as possible if the trap could not be parsed $oid = $type_desc if ($oid eq '' || $oid eq '.'); + if (!defined($oid)) { + logger($pa_config, "[W] snmpTrapOID not found (Illegal SNMPv1 trap?)", 5); + return; + } + } elsif ($trap_ver eq "SNMPv2") { ($date, $time, $source, $data) = split(/\[\*\*\]/, $line, 4); my @data = split(/\t/, $data); @@ -219,7 +224,7 @@ sub pandora_snmptrapd { $oid = shift @data; if (!defined($oid)) { - logger($pa_config, "[W] snmpTrapOID not found (Illegal SNMPv2 trap?)", 1); + logger($pa_config, "[W] snmpTrapOID not found (Illegal SNMPv2 trap?)", 5); return; } $oid =~ s/.* = OID: //; @@ -441,21 +446,32 @@ sub read_snmplogfile() return undef if (! defined($line)); + my $retry_count = 0; + # More lines ? - while($read_ahead_line = ) { + while(1) { + while($read_ahead_line = ) { - # Get current file position - $read_ahead_pos = tell(SNMPLOGFILE); + # Get current file position + $read_ahead_pos = tell(SNMPLOGFILE); - # Get out of the loop if you find another Trap - last if($read_ahead_line =~ /^SNMP/ ); + # Get out of the loop if you find another Trap + last if($read_ahead_line =~ /^SNMP/ ); - # $read_ahead_line looks continued line... + # $read_ahead_line looks continued line... - # Append to the line and correct the position - chomp($line); - $line .= "$read_ahead_line"; - $pos = $read_ahead_pos; + # Append to the line and correct the position + chomp($line); + $line .= "$read_ahead_line"; + $pos = $read_ahead_pos; + } + + # if $line looks incomplete, try to get continued line + # just within 10sec. After that, giving up to complete it + # and flush $line as it is. + last if(chomp($line) > 0 || $retry_count++ >= 10); + + sleep(1); } # return fetched line with file position to be saved.