如何在ldaptor中使用startTLS?

2024-09-30 08:19:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用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()

但代码退出时会出现一个AssertionError:

^{pr2}$

我曾试图在ldaptor代码中查找有牵连的断言,但似乎一切正常。 是否有人成功地使用了ldaptorClient startTLS? 代码片段?在

非常感谢

再见


Tags: lambda代码服务器baseservice互联网errorldap
2条回答

我很确定你的问题是我前段时间遇到的问题。在ldaptor/协议中/pureldap.py,第1144行断言LDAPExtendedRequest requestValue必须是字符串。但是根据rfc2251,这个值是可选的,特别不应该出现在startTLS请求中。在

所以您的方法是正确的;这只是ldaptor中的一个主要缺陷。据我所知,作者只使用没有TLS的简单绑定进行测试。你需要把那行注释掉pureldap.py. 如果您希望用户能够下载或轻松安装ldaptor,那么您需要在自己的代码中创建LDAPExtendedRequest类的固定副本,并在运行时将其作为子类。在

由于不得不使用ldaptor维护一个项目好几年了,我强烈建议您尽可能改用pytholdap。由于它包装了OpenLDAP库,因此构建起来可能要困难得多,尤其是在完全支持SSL/SASL的情况下。但这是值得的,因为ldaptor的问题比你遇到的问题多得多。在

使用来自https://github.com/twisted/ldaptor的ldaptor 0.0.54,我使用StartTLS没有问题。在

代码如下:

#! /usr/bin/env python


from twisted.internet import reactor, defer
from ldaptor.protocols.ldap import ldapclient, ldapsyntax, ldapconnector

@defer.inlineCallbacks
def example():
    serverip = 'your.server.name.or.ip'
    basedn = 'o=Organization'
    binddn = 'cn=admin,o=Organization'
    bindpw = 'Sekret'
    query = '(uid=jetsong)'
    c = ldapconnector.LDAPClientCreator(reactor, ldapclient.LDAPClient)
    overrides = {basedn: (serverip, 389)}
    client = yield c.connect(basedn, overrides=overrides)
    client = yield client.startTLS()
    yield client.bind(binddn, bindpw)
    o = ldapsyntax.LDAPEntry(client, basedn)
    results = yield o.search(filterText=query)
    for entry in results:
        print entry

if __name__ == '__main__':
    df = example()
    df.addErrback(lambda err: err.printTraceback())
    df.addCallback(lambda _: reactor.stop())
    reactor.run()

相关问题 更多 >

    热门问题