fix: lk_diagnostic.py - use universal LDAP filter with ANR
This commit is contained in:
@@ -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 "
|
||||||
|
|||||||
Reference in New Issue
Block a user