fix: lk_diagnostic.py - use universal LDAP filter with ANR

This commit is contained in:
Денис Кривоченко
2026-08-11 11:49:06 +07:00
parent f0d927bcb6
commit cc9d3ca78a
+9 -8
View File
@@ -44,7 +44,6 @@ print("=" * 60)
print("Диагностика сотрудника: la.guseynova@sibcem.ru") print("Диагностика сотрудника: la.guseynova@sibcem.ru")
print("=" * 60) print("=" * 60)
# Ищем в AD
email = "la.guseynova@sibcem.ru" email = "la.guseynova@sibcem.ru"
search_id = email.replace("@tcs.sibcem.ru", "@sibcem.ru") search_id = email.replace("@tcs.sibcem.ru", "@sibcem.ru")
short_name = search_id.split("@")[0] short_name = search_id.split("@")[0]
@@ -64,10 +63,14 @@ try:
read_only=True 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( conn.search(
search_base=AD_BASE, search_base=AD_BASE,
search_filter=f"(mail={search_id})", search_filter=search_filter,
attributes=["cn", "sAMAccountName", "mail", "userPrincipalName", "extensionAttribute2", "mobile", "personalPager"] attributes=["cn", "sAMAccountName", "mail", "userPrincipalName", "extensionAttribute2", "mobile", "personalPager"]
) )
if conn.entries: if conn.entries:
@@ -88,10 +91,10 @@ try:
print(f" mobile: {mobile}") print(f" mobile: {mobile}")
print(f" pager: {pager}") print(f" pager: {pager}")
else: else:
print(" Не найден по mail. Пробую по sAMAccountName...") print(" Не найден по расширенному фильтру. Пробую ANR отдельно...")
conn.search( conn.search(
search_base=AD_BASE, search_base=AD_BASE,
search_filter=f"(sAMAccountName={short_name})", search_filter=f"(anr={search_id})",
attributes=["cn", "sAMAccountName", "mail", "userPrincipalName", "extensionAttribute2", "mobile", "personalPager"] attributes=["cn", "sAMAccountName", "mail", "userPrincipalName", "extensionAttribute2", "mobile", "personalPager"]
) )
if conn.entries: if conn.entries:
@@ -138,12 +141,11 @@ except Exception as e:
print(f" Ошибка подключения к SQL: {e}") print(f" Ошибка подключения к SQL: {e}")
sys.exit(0) sys.exit(0)
# Определяем card_id: из AD (extensionAttribute2) или через поиск в БД # Определяем card_id: через поиск в БД
card_id = None card_id = None
# Пробуем найти CARD_ID через PR_CARD + PR_EMP # Пробуем найти CARD_ID через PR_CARD + PR_EMP
print(f"\n--- 2. Поиск CARD_ID в PR_CARD ---") print(f"\n--- 2. Поиск CARD_ID в PR_CARD ---")
# Сначала ищем по short_name в PR_EMP
cursor.execute( cursor.execute(
"SELECT c.ID FROM UOV_SELFSERVICE_PR_CARD c " "SELECT c.ID FROM UOV_SELFSERVICE_PR_CARD c "
"JOIN UOV_SELFSERVICE_PR_EMP e ON e.CARD_ID = c.ID " "JOIN UOV_SELFSERVICE_PR_EMP e ON e.CARD_ID = c.ID "
@@ -158,7 +160,6 @@ if rows:
else: else:
print(f" Не найден по username в PR_CARD/PR_EMP") print(f" Не найден по username в PR_CARD/PR_EMP")
# Если не нашли, пробуем по email
if not card_id: if not card_id:
cursor.execute( cursor.execute(
"SELECT c.ID FROM UOV_SELFSERVICE_PR_CARD c " "SELECT c.ID FROM UOV_SELFSERVICE_PR_CARD c "