3

幸いなことに、このコードはテスト用であり、全体をここにコピーして貼り付けるだけで十分です。基本的に、検索の特定の詳細を取得するには、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
4

2 に答える 2

3

試行錯誤だけでこれを理解しました。まず、さらに検索した結果、bind、bind_s、simple_bind、および simple_bind_s の違いを明示しているサイトを見つけました: http://www.packtpub.com/article/installing-and-configuring-the-python-ldap -library-and-binding-to-an-ldap-directory

末尾に「s」が付いていないメソッドは非同期です。つまり、操作が完了したかどうかにかかわらず、コードは続行されます。末尾に「s」が付いているメソッドは同期的です。コードは停止し、操作が完了するのを待ちます。

ここで私が直面していたのは、ある種のレースコンディションでした。「whoami_s()」の代わりに「time.sleep(1)」を配置すると、問題が解決しました。これにより、「simple_bind」から「simple_bind_s」に変更する必要があることに気付きました。適切にバインドされる前に LDAP クエリ コードに到達するのが速すぎたため、匿名で実行されていました。

于 2013-11-14T14:36:44.843 に答える
0

これは奇妙です。最も単純なケースでは、クライアントは次のことを行う必要があります。

  • サーバーに接続します。
  • 接続に成功したら、必要に応じて BIND リクエスト (シンプルと SASL の 2 種類があります) で接続の認可状態を変更します。
  • searchBIND が成功した場合は、他compareのLDAP 要求modifyを送信します。たとえばmodify DN、、、、、などです。到着したサーバーの応答を解釈します。LDAPv3 クライアントは、再度 BIND することもできます。これにより、接続の承認状態が変更されます。

whoami_s が何をするのかはわかりませんが (ただし、WHO AM I という LDAP 拡張操作があります)、必要はありません。一見すると、最初のコード例が機能するはずです。接続が機能し、BIND が成功したと仮定すると、必要な作業はそれだけです。それ以上ある場合は、API が壊れています。

全然答えになってませんね、すみません。

こちらもご覧ください

于 2013-11-13T13:19:01.673 に答える