From cc9d3ca78a0b41a5ad293920a75d521f39bec6e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B5=D0=BD=D0=B8=D1=81=20=D0=9A=D1=80=D0=B8=D0=B2?= =?UTF-8?q?=D0=BE=D1=87=D0=B5=D0=BD=D0=BA=D0=BE?= Date: Tue, 11 Aug 2026 11:49:06 +0700 Subject: [PATCH] fix: lk_diagnostic.py - use universal LDAP filter with ANR --- lk/test/lk_diagnostic.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/lk/test/lk_diagnostic.py b/lk/test/lk_diagnostic.py index 0414969..cbd4f4b 100644 --- a/lk/test/lk_diagnostic.py +++ b/lk/test/lk_diagnostic.py @@ -44,7 +44,6 @@ print("=" * 60) print("Диагностика сотрудника: la.guseynova@sibcem.ru") print("=" * 60) -# Ищем в AD email = "la.guseynova@sibcem.ru" search_id = email.replace("@tcs.sibcem.ru", "@sibcem.ru") short_name = search_id.split("@")[0] @@ -64,10 +63,14 @@ try: read_only=True ) - # Ищем по mail + # Универсальный фильтр: mail, sAMAccountName, userPrincipalName, ANR + # ANR — Approximate Name Resolution, ищет по любому атрибуту + search_filter = f"(|(mail={search_id}*)(sAMAccountName={search_id})(userPrincipalName={search_id}*)(anr={search_id}))" + print(f" LDAP-фильтр: {search_filter}") + conn.search( search_base=AD_BASE, - search_filter=f"(mail={search_id})", + search_filter=search_filter, attributes=["cn", "sAMAccountName", "mail", "userPrincipalName", "extensionAttribute2", "mobile", "personalPager"] ) if conn.entries: @@ -88,10 +91,10 @@ try: print(f" mobile: {mobile}") print(f" pager: {pager}") else: - print(" Не найден по mail. Пробую по sAMAccountName...") + print(" Не найден по расширенному фильтру. Пробую ANR отдельно...") conn.search( search_base=AD_BASE, - search_filter=f"(sAMAccountName={short_name})", + search_filter=f"(anr={search_id})", attributes=["cn", "sAMAccountName", "mail", "userPrincipalName", "extensionAttribute2", "mobile", "personalPager"] ) if conn.entries: @@ -138,12 +141,11 @@ except Exception as e: print(f" Ошибка подключения к SQL: {e}") sys.exit(0) -# Определяем card_id: из AD (extensionAttribute2) или через поиск в БД +# Определяем card_id: через поиск в БД card_id = None # Пробуем найти CARD_ID через PR_CARD + PR_EMP print(f"\n--- 2. Поиск CARD_ID в PR_CARD ---") -# Сначала ищем по short_name в PR_EMP cursor.execute( "SELECT c.ID FROM UOV_SELFSERVICE_PR_CARD c " "JOIN UOV_SELFSERVICE_PR_EMP e ON e.CARD_ID = c.ID " @@ -158,7 +160,6 @@ if rows: else: print(f" Не найден по username в PR_CARD/PR_EMP") -# Если не нашли, пробуем по email if not card_id: cursor.execute( "SELECT c.ID FROM UOV_SELFSERVICE_PR_CARD c "