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) server = Server(AD_SERVER, get_info=ALL)
conn = Connection(server, user=AD_USER, password=AD_PASSWORD, auto_bind=True) conn = Connection(server, user=AD_USER, password=AD_PASSWORD, auto_bind=True)
# Фильтр как в lk/handlers.py — работает # escape_filter_chars экранирует @ и . в email, что ломает фильтр.
safe_user_id = escape_filter_chars(search_id) # Для email и UPN передаём raw. Для sAMAccountName — экранируем.
safe_sam = escape_filter_chars(short_username)
search_filter = ( search_filter = (
f"(&(objectClass=user)(|" f"(&(objectClass=user)(|"
f"(mail={safe_user_id})" f"(mail={search_id})"
f"(userPrincipalName={safe_user_id})" f"(userPrincipalName={search_id})"
f"(userPrincipalName={escape_filter_chars(f'{short_username}@sibcem.ru')}))" f"(userPrincipalName={short_username}@sibcem.ru))"
f"(sAMAccountName={escape_filter_chars(short_username)})))" f"(sAMAccountName={safe_sam})))"
) )
logger.info(f"AD filter: {search_filter}") logger.info(f"AD filter: {search_filter}")