Skip to content

Commit caa12f9

Browse files
zubeydecivelekzzacharo
authored andcommitted
fix(ldap):add exact e-group mail match
1 parent 0cf2e57 commit caa12f9

1 file changed

Lines changed: 25 additions & 2 deletions

File tree

cds/modules/ldap/client.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,18 @@ def search_users_by_name(self, name):
121121
return [x[1] for x in res]
122122

123123
def search_egroup_by_email(self, email):
124+
# Return if exact full mail match
125+
exact_mail = f"{email}@cern.ch" if "@" not in email else email
126+
exact_filter = f"(mail={exact_mail})"
127+
msgid = self.ldap.search_ext(
128+
self.LDAP_EGROUP_BASE,
129+
ldap.SCOPE_ONELEVEL,
130+
exact_filter,
131+
self.LDAP_EGROUP_RESP_FIELDS,
132+
)
133+
exact_res = self.ldap.result(msgid=msgid)[1]
134+
exact_entries = [x[1] for x in exact_res]
135+
124136
name_filter = "(&(mail={email}*))"
125137
self.ldap.search_ext(
126138
self.LDAP_EGROUP_BASE,
@@ -129,11 +141,22 @@ def search_egroup_by_email(self, email):
129141
self.LDAP_EGROUP_RESP_FIELDS,
130142
serverctrls=[
131143
ldap.controls.SimplePagedResultsControl(
132-
True, size=7, cookie=""
144+
True, size=10, cookie=""
133145
)
134146
],
135147
)
136148

137149
res = self.ldap.result()[1]
150+
prefix_entries = [x[1] for x in res]
138151

139-
return [x[1] for x in res]
152+
# Remove duplicates
153+
seen = set()
154+
result = []
155+
156+
for entry in exact_entries + prefix_entries:
157+
mail = entry["mail"][0]
158+
if mail not in seen:
159+
seen.add(mail)
160+
result.append(entry)
161+
162+
return result

0 commit comments

Comments
 (0)