devpi / devpi-ldap

Plugin for devpi-server which provides LDAP authentication.
36 stars 20 forks source link

Problem with scenario when conn.response contains attributes dict with {'dn':[]} inside #35

Open DamianSkrzypczak opened 7 years ago

DamianSkrzypczak commented 7 years ago

Hello,

in devpi_ldap/main.py/line 175 there is: if any(attribute_name in x.get('attributes', {}) for x in conn.response):

but I had scenario when conn.response returned dict {attributes:{'dn':[]}} and attribute_name was set to "dn" which, I guess, should result with transition to line 181 elif attribute_name in ('dn', 'distinguishedName'):

Maybe something like this should solve this problem but I don't think it's beautiful solution, rather hotfix suggestion (I'm sorry if this looks insolent, I'm always try to offer some solution when I found problem): if any(attribute_name in x.get('attributes', {}) and x.get('attributes', {})[attribute_name] for x in conn.response):

fschulze commented 7 years ago

Could you provide the raw data from conn.response? Then we can write a proper test for it and I can think about a fix. Just obfuscate any sensitive data.

DamianSkrzypczak commented 7 years ago

This is print of conn.response:

[{'dn': u'some_specific_attr=xxx1,ou=xxx2,ou=xxx,o=xxx3', 'attributes': {'dn': []},
    'raw_attributes': {'dn': []}, 'type': 'searchResEntry'}]

I hope this is enough, I had to obfuscate pretty much.