我试图使用ldaptor通过starttls连接到ldap服务器。在互联网上搜索并尝试自己,我得到了这段代码:

from ldaptor.protocols.ldap import ldapclient, ldapsyntax, ldapconnector, distinguishedname
[...]
def main(base, serviceLocationOverrides):
    c=ldapconnector.LDAPClientCreator(reactor, ldapclient.LDAPClient)
    d = c.connect(base, serviceLocationOverrides)
    d.addCallbacks(lambda proto: proto.startTLS(), error)
    [...]
    d.addErrback(error)
    d.addBoth(lambda dummy: reactor.stop())
    reactor.run()

但代码以断言错误的形式存在:
[Failure instance: Traceback: <type 'exceptions.AssertionError'>:
/usr/lib/python2.7/dist-packages/twisted/internet/base.py:1167:mainLoop
/usr/lib/python2.7/dist-packages/twisted/internet/base.py:789:runUntilCurrent
/usr/lib/python2.7/dist-packages/twisted/internet/defer.py:361:callback
/usr/lib/python2.7/dist-packages/twisted/internet/defer.py:455:_startRunCallbacks
--- <exception caught here> ---
/usr/lib/python2.7/dist-packages/twisted/internet/defer.py:542:_runCallbacks
/usr/lib/pymodules/python2.7/ldaptor/protocols/ldap/ldapclient.py:239:_startTLS
/usr/lib/pymodules/python2.7/ldaptor/protocols/pureldap.py:1278:__init__
/usr/lib/pymodules/python2.7/ldaptor/protocols/pureldap.py:1144:__init__
]

我试着在ldaptor代码中查找被指控的断言,但似乎一切正常。
是否有人成功使用了ldaptorclient starttls?
代码片段?
非常感谢你
拜伊

最佳答案

我很确定,你的问题是我偶尔遇到的问题。在LDAPTROR /协议/ PURADDAP.PY中,第1144行断言LDAPExpReDestQuestResturValk必须是一个字符串。但是根据rfc 2251,这个值是可选的,并且不应该出现在starttls请求中。
所以您的方法是正确的;这只是ldaptor中的一个主要错误。据我所知,作者只测试了使用简单绑定而没有tls。您需要在pureldap.py中注释掉这一行。如果您希望用户下载或轻松安装LDAPTor,那么您需要在自己的代码中创建一个LDAPExpReDestQuess类的固定副本,并在运行时将其导入。
我必须用LDAPTor来维护一个项目,几年后,我会强烈要求您切换到Python LDAP,如果可能的话。因为它包装了openldap libs,所以构建起来会困难得多,特别是在完全支持ssl/sasl的情况下。但这是非常值得的,因为LaPtor有很多问题,而不仅仅是你遇到的问题。

关于python - 如何在ldaptor中使用startTLS?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6634206/

10-09 03:03