Propósito
VendorRegistry (en network/services/vendor_registry.py) carga y cachea el catálogo de VendorProfile en memoria, compila las regexes editables, y proporciona funciones de detección rápida de vendor:
- Por
sysDescrSNMP - Por HTTP headers/body
- Extracción de modelo y versión
Estructura de cachés
L1 in-process
_l1_cache: list[dict] | None = None # VendorProfiles parseados
_l1_compiled: list[dict] | None = None # Con regexes compiladas (pre-compiled)
Cachés en memoria Python.
L2 Valkey (Redis)
Clave: vendor_profiles_registry con TTL 3600s (1 hora).
Si la L1 expira o se invalida, se recarga desde Valkey; si Valkey falla, se recarga desde BD.
Funciones principales
detect_vendor_from_sys_descr(sys_descr) → dict | None
Detecta vendor y retorna su dict (con regexes compiladas).
Entrada: sys_descr (string de hasta ~256 caracteres típicamente).
s114 change: El input se cappa a 2048 caracteres antes de matching:
sys_descr = (sys_descr or "")[:_MAX_SYS_DESCR]
Motivo: Las regexes editables del VendorProfile pueden tener backtracking catastrófico. Un sysDescr muy largo (posible en algunos equipos) + regex maliciosa/compleja = ReDoS (Regular Expression Denial of Service = cuelga el worker).
Capar a 2048 chars acota el coste del matching (paridad con cap HTTP body[:2048]).
detect_vendor_from_http(server_header, body) → dict | None
Detecta vendor por HTTP (headers + body).
s114 change: El body se cappa a 2048 caracteres (ya existía), aplicable a las regexes de patterns.
get_model_from_sys_descr(slug, sys_descr) → str
Extrae modelo de sysDescr usando regex del VendorProfile.
s114 change: Cap a 2048 chars:
sys_descr = (sys_descr or "")[:_MAX_SYS_DESCR]
get_version_from_sys_descr(slug, sys_descr) → str
Extrae versión de sysDescr.
s114 change: Cap a 2048 chars.
Regexes editables
Los campos sys_descr_patterns, sys_descr_model_regex, sys_descr_version_regex del VendorProfile son editables por admin. Por lo tanto, un admin malicioso o un vendor comprometido podrían inyectar regexes con backtracking catastrófico.
El cap a 2048 chars reduce el impacto potencial.
Véase también
- [[entity—network—model—vendor-profile]]
- [[entity—network—model—device-profile]]
- [[feature—network—sa3-auditoria-vendor-mib]]