fix: don't escape @ in email for LDAP filter

This commit is contained in:
Денис Кривоченко
2026-07-22 00:41:53 +07:00
parent 2c39e5b50b
commit 49a986fa65
+8 -6
View File
@@ -41,14 +41,16 @@ def _get_user_cn(user_id: str) -> str:
server = Server(AD_SERVER, get_info=ALL)
conn = Connection(server, user=AD_USER, password=AD_PASSWORD, auto_bind=True)
# Фильтр как в lk/handlers.py — работает
safe_user_id = escape_filter_chars(search_id)
# escape_filter_chars экранирует @ и . в email, что ломает фильтр.
# Для email и UPN передаём raw. Для sAMAccountName — экранируем.
safe_sam = escape_filter_chars(short_username)
search_filter = (
f"(&(objectClass=user)(|"
f"(mail={safe_user_id})"
f"(userPrincipalName={safe_user_id})"
f"(userPrincipalName={escape_filter_chars(f'{short_username}@sibcem.ru')}))"
f"(sAMAccountName={escape_filter_chars(short_username)})))"
f"(mail={search_id})"
f"(userPrincipalName={search_id})"
f"(userPrincipalName={short_username}@sibcem.ru))"
f"(sAMAccountName={safe_sam})))"
)
logger.info(f"AD filter: {search_filter}")