私のldapツリーで動作するように、つぶやき(voipソフトウェア)のpythonベースの認証器を変更しようとしています。
LDAP オーセンティケーターは、次の場所で入手できます。
http://www.winex.org/linux/zealot/src/mumble-scripts/Authenticators/LDAP/LDAPauth.py
それは機能しますが、私の LDAP レイアウトではうまくいかないため、少し変更する必要があります。私はうまくいく可能性のあるアプローチを知っていますが、残念ながら私はグーグルから学んだことよりもPythonについての知識がありません(私は他のプログラミングの専門知識を持っています)。
私の LDAP レイアウトは次のようになります。
charName=xxx, ou=people, dc=xxx, dc=com
userPassword
この下には、やなどの属性が格納されてlogin
います。
上記の Python スクリプトは、LDAP バインドを使用して認証するように調整されています。この場合、 としてバインドする必要があり"charName=logindatafromapp, ou=people, dc=xxx, dc=com"
ます。残念ながら、人々は でログインしません"charName"
が"login"
、 は属性ですが、 と同一ではありません"charName"
。
属性にバインドする方法がわからないので、ここに私の考えがあります:
- 最初に LDAP 管理者としてバインドし、すべてのエントリに対して検索を実行し、
"logindatafromapp"
その値を と照合します"login"
。一致が見つかった場合は、一致するものを取得し、当初の意図どおり"charName"
に再バインドします。charName
私は現在、値のクエリ"charName"
とその値を変数に割り当てることに固執しているため、2番目のldapバインドで使用できました(Googleは実際には役に立ちませんでした)。
これが私のコードです:
ldap_conn = ldap.initialize(ldap_uri, 0)
ldap_conn.bind_s("cn=admin,dc=xxxxxxxx,dc=com","pass")
res = ldap_conn.search_s('ou=people,dc=xxxxxx,dc=com', ldap.SCOPE_ONELEVEL,'login=trony',['charName'])
print(res)
次に、 を出力し"[('charName=Trony,ou=people,dc=xxxxxxx,dc=com', {'charName': ['Trony']})]"
ます。
(the ) は一時的なフィルターで、 var"login=trony"
に置き換える必要があります。私の問題は、変数に(この場合)applogin
どのように割り当てることができるかです。"Trony"
出力は特別な構造体のようですか?