From 6834710af68e8d0382ee9c6a796d480d1c7d8208 Mon Sep 17 00:00:00 2001 From: Khalid MOUTAOUAKIL Date: Mon, 6 Apr 2026 16:23:32 +0200 Subject: [PATCH] Fix CAST inet + IPv6 cleanup dans resolve_dest_server Co-Authored-By: Claude Opus 4.6 (1M context) --- app/services/server_audit_full_service.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/app/services/server_audit_full_service.py b/app/services/server_audit_full_service.py index 3d8b363..f0ba6fc 100644 --- a/app/services/server_audit_full_service.py +++ b/app/services/server_audit_full_service.py @@ -271,13 +271,20 @@ def _resolve_server_id(db, hostname): def _resolve_dest_server(db, dest_ip): - row = db.execute(text(""" - SELECT s.id, s.hostname FROM servers s - JOIN server_ips si ON s.id = si.server_id - WHERE si.ip_address = :ip::inet - LIMIT 1 - """), {"ip": dest_ip}).fetchone() - return (row.id, row.hostname) if row else (None, None) + # Nettoyer l'IP (retirer IPv6-mapped prefix, brackets) + clean_ip = dest_ip.replace("[::ffff:", "").replace("]", "").strip() + if not clean_ip or ":" in clean_ip: + return (None, None) # IPv6 pure, skip + try: + row = db.execute(text(""" + SELECT s.id, s.hostname FROM servers s + JOIN server_ips si ON s.id = si.server_id + WHERE si.ip_address = CAST(:ip AS inet) + LIMIT 1 + """), {"ip": clean_ip}).fetchone() + return (row.id, row.hostname) if row else (None, None) + except Exception: + return (None, None) def save_audit_to_db(db, parsed, raw_output="", status="ok", error_msg=None):