forked from Github-Mirrors/canaille
ldap backend: make sure to escape special chars in object identifiers
This commit is contained in:
parent
3ecb8b4722
commit
7bce9b9a74
2 changed files with 17 additions and 8 deletions
|
@ -303,6 +303,7 @@ class LDAPObject(metaclass=LDAPObjectMetaclass):
|
|||
if base is None:
|
||||
base = f"{cls.base},{cls.root_dn}"
|
||||
elif "=" not in base:
|
||||
base = ldap.dn.escape_dn_chars(base)
|
||||
base = f"{cls.rdn_attribute}={base},{cls.base},{cls.root_dn}"
|
||||
|
||||
class_filter = (
|
||||
|
|
|
@ -36,11 +36,11 @@ def test_repr(backend, foo_group, user):
|
|||
assert repr(user) == "<User user_name=user>"
|
||||
|
||||
|
||||
def test_dn_when_leading_space_in_id_attribute(backend):
|
||||
def test_dn_when_leading_space_in_id_attribute(testclient, backend):
|
||||
user = models.User(
|
||||
formatted_name=" Doe", # leading space
|
||||
family_name="Doe",
|
||||
user_name="user",
|
||||
family_name=" Doe",
|
||||
user_name=" user",
|
||||
emails="john@doe.com",
|
||||
)
|
||||
user.save()
|
||||
|
@ -49,15 +49,19 @@ def test_dn_when_leading_space_in_id_attribute(backend):
|
|||
assert ldap.dn.dn2str(ldap.dn.str2dn(user.dn)) == user.dn
|
||||
assert user.dn == "uid=user,ou=users,dc=mydomain,dc=tld"
|
||||
|
||||
assert user == models.User.get(user.identifier)
|
||||
assert user == models.User.get(user_name=user.identifier)
|
||||
assert user == models.User.get(id=user.dn)
|
||||
|
||||
user.delete()
|
||||
|
||||
|
||||
def test_dn_when_ldap_special_char_in_id_attribute(backend):
|
||||
def test_special_chars_in_rdn(testclient, backend):
|
||||
user = models.User(
|
||||
formatted_name="#Doe", # special char
|
||||
family_name="Doe",
|
||||
user_name="#user",
|
||||
emails="john@doe.com",
|
||||
formatted_name="#Doe",
|
||||
family_name="#Doe",
|
||||
user_name="#user", # special char
|
||||
emails=["john@doe.com"],
|
||||
)
|
||||
user.save()
|
||||
|
||||
|
@ -65,6 +69,10 @@ def test_dn_when_ldap_special_char_in_id_attribute(backend):
|
|||
assert ldap.dn.dn2str(ldap.dn.str2dn(user.dn)) == user.dn
|
||||
assert user.dn == "uid=\\#user,ou=users,dc=mydomain,dc=tld"
|
||||
|
||||
assert user == models.User.get(user.identifier)
|
||||
assert user == models.User.get(user_name=user.identifier)
|
||||
assert user == models.User.get(id=user.dn)
|
||||
|
||||
user.delete()
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue