diff --git a/lib/towerops/device_profiles.ex b/lib/towerops/device_profiles.ex index ebce23a6..fbb8a847 100644 --- a/lib/towerops/device_profiles.ex +++ b/lib/towerops/device_profiles.ex @@ -170,12 +170,17 @@ defmodule Towerops.DeviceProfiles do defp match_rule?(%DetectionRule{rule_type: "sysObjectID"} = rule, system_info) do sys_object_id = Map.get(system_info, :sys_object_id, "") + # Normalize OID - prepend dot if not present for pattern matching + # LibreNMS uses ".1.3.6.1..." format, SNMP returns "1.3.6.1..." format + normalized_oid = if String.starts_with?(sys_object_id, "."), do: sys_object_id, else: "." <> sys_object_id + cond do rule.pattern && rule.pattern != "" -> - String.contains?(sys_object_id, rule.pattern) + String.starts_with?(normalized_oid, rule.pattern) rule.value && rule.value != "" -> - sys_object_id == rule.value + normalized_value = if String.starts_with?(rule.value, "."), do: rule.value, else: "." <> rule.value + normalized_oid == normalized_value true -> false