我想使用运行时给出的 ldap url 打开到 ldap 目录的连接。例如 :
ldap://192.168.2.151/dc=directory,dc=example,dc=com
据我所知,它是有效的。Python-ldap url 解析器ldapurl.LDAPUrl
接受它。
url = 'ldap://192.168.2.151/dc=directory,dc=example,dc=com'
parsed_url = ldapurl.LDAPUrl(url)
parsed_url.dn
'dc=directory,dc=example,dc=com'
但是如果我用它来初始化一个 LDAPObject,我会得到一个ldap.LDAPError
异常
ldap.initialize(url)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/ldap/functions.py", line 91, in initialize
return LDAPObject(uri,trace_level,trace_file,trace_stack_limit)
File "/usr/lib/python2.7/dist-packages/ldap/ldapobject.py", line 70, in __init__
self._l = ldap.functions._ldap_function_call(ldap._ldap_module_lock,_ldap.initialize,uri)
File "/usr/lib/python2.7/dist-packages/ldap/functions.py", line 63, in _ldap_function_call
result = func(*args,**kwargs)
ldap.LDAPError: (0, 'Error')
我发现如果我手动编码dn
url 的一部分,它可以工作:
url = 'ldap://192.168.2.151/dc=directory%2cdc=example%2cdc=com'
#url still valid
parsed_url = ldapurl.LDAPUrl(url)
parsed_url.dn
'dc=directory,dc=example,dc=com'
#and will return a valid connection
ldap.initialize(url)
<ldap.ldapobject.SimpleLDAPObject instance at 0x1400098>
如何在ldap.initialize
不自己编码部分 url 的情况下确保健壮的 url 处理?(恐怕无论如何都不会那么健壮)。