LDAP の実装によって異なります。
たとえば、Active Directory は、認証されていない検索を許可しません。この場合、最初に認証済みユーザーとしてログインしてから、ツリーを検索する必要があります。
他の実装では、匿名バインドが許可される場合があります。
ツリーを検索できるようになったら、あとは正しいクエリを作成するだけです。Active Directory では、ログイン名は として保存されるsAMAccountName
ため、ユーザーをフェッチするには、ログインを取得して検索にバインドします。ただし、最初に認証する必要があります。これを行うコードを次に示します (エラー チェックは行いません)。
def get_user(user):
user_dn = "DC=DEPARTMENT,DC=FOO,DC=COM"
login_attr = '({}={})'.format('sAMAccountName', user)
conn = ldap.initialize(your_ldap_url)
# The next two lines are required for AD specific
# quirks, you may have to comment them for other LDAP servers
conn.set_option(ldap.OPT_REFERRALS, 0)
conn.set_option(ldap.OPT_PROTOCOL_VERSION, 3)
conn.bind("Foo User", "Sekret") # Authenticate first
# before searching
result = conn.search_s(user_dn,
ldap.SCOPE_SUBTREE,
login_attr)
return result[0][1]