Skip to content Skip to sidebar Skip to footer

Ldap Search With Username As Variable

I am using the Python-LDAP module and trying to make a query on the logged in user. The username will be passed into the query. When I simply type the username in as a string my

Solution 1:

Did you try to encode your string ?

criteria = ('(&(objectClass=user)(sAMAccountName=%s))' % username).encode('utf8')

Solution 2:

In the "WORKS" case, your filter string contains a simple name with no domain:

    (&(objectClass=user)(sAMAccountName=bobsmith))

In the "DOESN'T WORK" case, you use a name with a domain:

    (&(objectClass=user)(sAMAccountName=domain\serviceAccount)

The character \ is not allowed in a filter string unless it is escaped.

How to fix this depends upon the data present in your ldap server. Perhaps this:

criteria = '(&(objectClass=user)(sAMAccountName=%s))' % (
    username if'\\'not in username else username.split('\\')[1])

Or perhaps this:

criteria = '(&(objectClass=user)(sAMAccountName=%s))' % (
    ldap.filter.escape_filter_chars(username))

Solution 3:

I needed to use ldap.filter.filter_format for proper character escaping.

import ldap.filter

criteria= ldap.filter.filter_format('(&(objectClass=user)(sAMAccountName=%s))', [username])

Post a Comment for "Ldap Search With Username As Variable"