2016-06-20 32 views
0

を作成し、私のプログラムの最初のステップは、私が会社のActive Directoryを検索し、部門によってユーザーのリストを見つけることが必要です。ここに私のコードは、これまでのところです:私のエントリがログに関係なく、私はconn.searchの検索フィルター部分に入れて何がPythonのLDAP3検索が空のエントリ

from ldap3 import Server, Connection, SUBTREE, ALL 
server = Server('my.company.local', get_info=ALL) 
conn = Connection(server, auto_bind=True) 
conn.search('dc=my, dc=company, dc=local', '(givenName=Charles)') 
print(conn.entries) 

、何もデータが見つかりませんでした。エントリログは空のリストです。私がActive Directoryユーザーとコンピュータをプルアップするとき、私は各部門を通り、名前を見つけて属性エディタを検索することができます(そしてそこにGivenName = Charlesがあります)。なぜ私はアイデアが不足しているため、データが返されないのか、私に正しい方向で指摘してください。ありがとう。

EDIT:それは、関連するなら、印刷(server.schema)はNoneを返します。また、print(conn)はinsert my.company.local here:389 - cleartext - user: None - not lazy - bound - open - <local: 10.5.112.213:63755 - remote: 10.5.107.41:389> - tls not started - listening - SyncStrategy - internal decoder という結果を返します。

+0

間違いではないですか?あなたは接続していますか? 'conn'にはあなたの接続を確認するのに役立つ他の面白い方法がありますか? 「議論だけでなく、答えることができる質問を好む。詳細を提供する。あなたの研究を共有する。」 – SunSparc

+0

ADに資格情報を提供していないようです。 'ldap3'はADUCコントロールと違って、あなたのユーザートークンを自動的に継承しないようです。したがって、あなたはADに匿名バインドを実行しましたが、成功しても検索などを実行できるコンテキストは提供されません。基本的に、検索できるようにするためには何らかの方法でクレデンシャルを提供する必要があります。 – ig0774

答えて

0

暗いところで撮影しますが、照会の前後にカッコを取り除くと、(givenName=Charles)givenName=Charlesになります。ドメインコンポーネントが正しいことは確かですか?

+0

かっこが必要です。私はちょうどチェックした。 Active Directoryユーザーとコンピュータが私のコードに入れたのと同じドメインを示しているので、私はドメインコンポーネントが正しいことを90%確信しています。 – Crazysexman

+0

@Crazysexman:私が言ったように、大丈夫、それはちょうど暗闇の中のショットだった。 '(cn = *)'のような結果を返すことを知っているものを試しましたか? –

+0

残念ながら、はい、私は持っています。私は間違ったドメインを何とか探しているかもしれないと思うが、何が間違っているのか正確にはわからない。 – Crazysexman

0

ユーザー名を提供していないので、あなたの接続が匿名です。接続オブジェクトのusername="myname", password="mypassword"でアクセスしてみてください。 authentication=NTLMでNTLM認証を試すこともできます。 (ldap3パッケージからNTLMをインポートする必要があります)。この場合、ユーザ名は"mydomain//myname"でなければなりません。

1

のでcannatagとig0774の両方が正しかったです。検索機能を使用するには、ユーザーの資格情報を提供する必要があります。それ以外の場合、検索関数は空のエントリリストを返します。ありがとうございました!

関連する問題