幸いなことに、このコードはテスト用であり、全体をここにコピーして貼り付けるだけで十分です。基本的に、検索の特定の詳細を取得するには、dn にバインドする必要があります。それ以外の場合は、バインドされていない場合は匿名でバインドされ、ベアボーン情報しか取得できません。バインド後に whoami_s() を明示的に実行しない限り、正常にバインドできないようです。
動作しないコード (匿名でバインド):
l = ldap.initialize("ldap://myldapserver")
l.simple_bind("cn=test,ou=profile,dc=site,dc=com", "abc123")
basedn = "ou=people,dc=site,dc=com"
filter = "uid=bob"
results = l.search_st(basedn, ldap.SCOPE_SUBTREE, filter)
for entry in results:
print entry
動作するコード (正常にバインドし、可能なすべての詳細を提供します):
l = ldap.initialize("ldap://myldapserver")
l.simple_bind("cn=test,ou=profile,dc=site,dc=com", "abc123")
l.whoami_s() ### <---- This is the only difference ###
basedn = "ou=people,dc=site,dc=com"
filter = "uid=bob"
results = l.search_st(basedn, ldap.SCOPE_SUBTREE, filter)
for entry in results:
print entry
LDAP モジュールに関するドキュメントがかなり不足していることに気づきました (たとえば、bind、bind_s、simple_bind、および simple_bind_s の正確な違いを詳しく説明しているものは見つかりませんが、それはまた別の機会にします)。whoami_s() などでバインドを終了する必要があることを明示的に示しているものは見つかりません。受け入れるべきか、心配すべきか。
Python: 2.6.9
LDAP module: 2.4.13