Skip to content

Commit 8d8c089

Browse files
Convert all LDAP e-mail addresses to lower case
Convert all e-mail addresses of LDAP imported objects to lower case to avoid inconsistent data. Fixes group members not showing in admin web due to case confusion.
1 parent 08bec4c commit 8d8c089

File tree

3 files changed

+12
-10
lines changed

3 files changed

+12
-10
lines changed

api/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
apiSpec = None # API specification
99
apiVersion = None # API specification version. Extracted from the OpenAPI document.
10-
backendVersion = "1.15.4" # Backend version number
10+
backendVersion = "1.15.5" # Backend version number
1111

1212

1313
def _loadOpenApiSpec():

services/ldap.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,22 +64,24 @@ def __init__(self, ldap, resultType, data):
6464
return
6565
if resultType == "user":
6666
if userconf["username"] in data["attributes"] and data["attributes"][userconf["username"]]:
67-
self.email = self.username = self._reduce(data["attributes"][userconf["username"]])
67+
self.email = self.username = self._reduce(data["attributes"][userconf["username"]]).lower()
6868
else:
6969
self.email = self.username = None
7070
self.error = "Missing username"
7171
elif resultType == "contact":
7272
self.username = None
7373
if userconf["contactname"] in data["attributes"] and data["attributes"][userconf["contactname"]]:
74-
self.email = self._reduce(data["attributes"][userconf["contactname"]])
74+
self.email = self._reduce(data["attributes"][userconf["contactname"]]).lower()
7575
else:
7676
self.email = None
7777
self.error = "Missing e-mail address"
7878
elif resultType == "group":
79-
self.email = self._reduce(data["attributes"].get(groupconf["groupaddr"], ""))
80-
self.name = self._reduce(data["attributes"].get(groupconf["groupname"], ""))
79+
self.email = self._reduce(data["attributes"].get(groupconf["groupaddr"]))
8180
if not self.email:
8281
self.error = "Missing e-mail address"
82+
else:
83+
self.email = self.email.lower()
84+
self.name = self._reduce(data["attributes"].get(groupconf["groupname"], ""))
8385
else:
8486
self.error = "Unknown type"
8587

tools/ldap.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -343,15 +343,15 @@ def syncGroupMembers(orgID, ldapgroup, ldap, users=None):
343343
from orm.users import Users
344344
users = {user.externID for user in Users.query.filter(Users.orgID == orgID, Users.externID != None)}
345345
assocs = {assoc.username: assoc for assoc in Associations.query.filter(Associations.listID == group.ID).all()}
346-
add = 0
346+
add = []
347347
for member in ldap.searchUsers(attributes="idonly", customFilter=ldap.groupMemberFilter(ldapgroup.DN)):
348348
assoc = assocs.pop(member.email, None)
349349
if assoc or member.ID not in users: # Do nothing if already associated or not known
350350
continue
351-
add += 1
352-
DB.session.add(Associations(member.email, group.ID))
353-
remove = len(assocs)
351+
add.append((member.email, group.ID))
354352
for assoc in assocs.values():
355353
DB.session.delete(assoc)
354+
DB.session.flush() # necessary to fix case-confusions (i.e. [email protected] -> [email protected])
355+
DB.session.add_all([Associations(memberEmail, groupID) for memberEmail, groupID in add])
356356
DB.session.commit()
357-
return add, remove
357+
return len(add), len(assocs)

0 commit comments

Comments
 (0)