我正在尝试修改基于 python 的身份验证器以用于 murmur(voip 软件)以与我的 ldap 树一起使用。
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"
which 是一个属性,但与"charName"
.
我不知道绑定到属性的方法,所以这是我的想法:
- 我首先以 ldap admin 身份绑定,然后搜索所有条目
"logindatafromapp"
并将该值与"login"
. 如果找到匹配项,我会抓取匹配项并按照最初的预期"charName"
重新绑定。charName
我目前坚持查询该"charName"
值并将该值分配给一个变量,所以我可以在第二个 ldap 绑定中使用它(谷歌并没有真正帮助我)。
这是我的代码:
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']})]"
.
( "login=trony"
) 是一个临时过滤器,我必须用applogin
var 替换它。我现在的问题是如何将"Trony"
(在这种情况下)分配给变量?输出似乎是一个特殊的结构?