Skip to content

Commit 19da54a

Browse files
committed
Merge remote-tracking branch 'fixes/escape_ldap'
2 parents 9c87f0f + cde3888 commit 19da54a

1 file changed

Lines changed: 14 additions & 2 deletions

File tree

cps/services/simpleldap.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,16 @@
3131
log = logger.create()
3232

3333

34+
def _escape_ldap_filter(s):
35+
"""Escape special characters for safe use in LDAP filter strings (RFC 4515)."""
36+
s = s.replace('\\', '\\5c')
37+
s = s.replace('*', '\\2a')
38+
s = s.replace('(', '\\28')
39+
s = s.replace(')', '\\29')
40+
s = s.replace('\x00', '\\00')
41+
return s
42+
43+
3444
class LDAPLogger(object):
3545

3646
@staticmethod
@@ -148,9 +158,11 @@ def bind_user(username, password):
148158
149159
:returns: True if login succeeded, False if login failed, None if server unavailable.
150160
'''
161+
# Escape LDAP special characters to prevent LDAP injection in search filters
162+
safe_username = _escape_ldap_filter(username)
151163
try:
152-
if _ldap.get_object_details(username):
153-
result = _ldap.bind_user(username, password)
164+
if _ldap.get_object_details(safe_username):
165+
result = _ldap.bind_user(safe_username, password)
154166
log.debug("LDAP login '%s': %r", username, result)
155167
return result is not None, None
156168
return None, None # User not found

0 commit comments

Comments
 (0)