python-ldap:如何修复 b'ldapadd:格式无效(第 1 行)条目:“”\n'

python-ldap: How to fix b'ldapadd: invalid format (line 1) entry: ""\n'

我想创建一个 ldap 测试服务器。所以我用 ldapsearch 转储了 ldap 数据并创建了一个 .ldif 文件现在我想用这个数据创建一个测试 ldap 服务器。我想使用 python-ldap 中的 slapdtest-module

import slapdtest

with slapdtest.SlapdObject() as server:

    server.ldapadd("ldap_dump.ldif")
    server.start()

但我收到错误消息:

RuntimeError: ['/usr/bin/ldapadd', '-H', 'ldapi://../python-ldap-test-53974/ldapi', '-Y', 'EXTERNAL', '-Q', '-n'] process failed:
b''
b'ldapadd: invalid format (line 1) entry: ""\n'

$file ldap_dump.ldifreturnsldap_dump.ldif: ASCII text。所以行尾实际上应该不是问题。

这是我缩小的 ldap_dump 文件:

dn: cn=User,dc=institute.edu
sn: User
objectClass: top
objectClass: user
cn: User

您的错误的直接原因是 ldapadd 方法期望接收 LDIF-format 内容,但您传递给它的是文件名。所以你想要更像的东西:

with slapdtest.SlapdObject() as server:
    with open('ldap_dump.ldif') as fd:
      server.ldapadd(fd.read())

您似乎在 server.start() ldapadd 之后调用,我认为您需要以相反的顺序调用这些行。

最后,您的示例文件可能无效,因为它没有定义 higher-level 容器(例如 dc=institute.edu)来包含示例中描述的对象。