@@ -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