1
0
Fork 0
mirror of https://github.com/Kozea/Radicale.git synced 2025-08-04 18:22:26 +00:00

LDAP auth: harmonize _login2() and _login3() methods

This commit is contained in:
Peter Marschall 2024-12-29 17:18:00 +01:00
parent b22038c746
commit 6f82333ff7

View file

@ -112,12 +112,18 @@ class Auth(auth.BaseAuth):
conn.set_option(self.ldap.OPT_REFERRALS, 0) conn.set_option(self.ldap.OPT_REFERRALS, 0)
conn.simple_bind_s(self._ldap_reader_dn, self._ldap_secret) conn.simple_bind_s(self._ldap_reader_dn, self._ldap_secret)
"""Search for the dn of user to authenticate""" """Search for the dn of user to authenticate"""
res = conn.search_s(self._ldap_base, self.ldap.SCOPE_SUBTREE, filterstr=self._ldap_filter.format(login), attrlist=['memberOf']) res = conn.search_s(
self._ldap_base,
self.ldap.SCOPE_SUBTREE,
filterstr=self._ldap_filter.format(login),
attrlist=['memberOf']
)
if len(res) == 0: if len(res) == 0:
"""User could not be found""" """User could not be found"""
return "" return ""
user_dn = res[0][0] user_entry = res[0]
logger.debug("LDAP Auth user: %s", user_dn) user_dn = user_entry[0]
logger.debug(f"_login2 found LDAP user DN {user_dn}")
"""Close LDAP connection""" """Close LDAP connection"""
conn.unbind() conn.unbind()
except Exception as e: except Exception as e:
@ -132,11 +138,12 @@ class Auth(auth.BaseAuth):
tmp: list[str] = [] tmp: list[str] = []
if self._ldap_load_groups: if self._ldap_load_groups:
tmp = [] tmp = []
for t in res[0][1]['memberOf']: for g in user_entry[1]['memberOf']:
tmp.append(t.decode('utf-8').split(',')[0][3:]) tmp.append(g.decode('utf-8').split(',')[0][3:])
self._ldap_groups = set(tmp) self._ldap_groups = set(tmp)
logger.debug("LDAP Auth groups of user: %s", ",".join(self._ldap_groups)) logger.debug("_login2 LDAP groups of user: %s", ",".join(self._ldap_groups))
conn.unbind() conn.unbind()
logger.debug(f"_login2 {login} successfully authenticated")
return login return login
except self.ldap.INVALID_CREDENTIALS: except self.ldap.INVALID_CREDENTIALS:
return "" return ""
@ -182,18 +189,20 @@ class Auth(auth.BaseAuth):
user_entry = conn.response[0] user_entry = conn.response[0]
conn.unbind() conn.unbind()
user_dn = user_entry['dn'] user_dn = user_entry['dn']
logger.debug(f"_login3 found user_dn {user_dn}") logger.debug(f"_login3 found LDAP user DN {user_dn}")
try: try:
"""Try to bind as the user itself""" """Try to bind as the user itself"""
conn = self.ldap3.Connection(server, user_dn, password=password) conn = self.ldap3.Connection(server, user_dn, password=password)
if not conn.bind(): if not conn.bind():
logger.debug(f"_login3 user '{login}' cannot be found") logger.debug(f"_login3 user '{login}' cannot be found")
return "" return ""
tmp: list[str] = []
if self._ldap_load_groups: if self._ldap_load_groups:
tmp = [] tmp = []
for g in user_entry['attributes']['memberOf']: for g in user_entry['attributes']['memberOf']:
tmp.append(g.split(',')[0][3:]) tmp.append(g.split(',')[0][3:])
self._ldap_groups = set(tmp) self._ldap_groups = set(tmp)
logger.debug("_login3 LDAP groups of user: %s", ",".join(self._ldap_groups))
conn.unbind() conn.unbind()
logger.debug(f"_login3 {login} successfully authenticated") logger.debug(f"_login3 {login} successfully authenticated")
return login return login