ldap_add:约束违反(19)

ldap_add:约束违反(19)

ldapadd我在导入用户和文件时遇到问题ldif。我收到的错误是:

ldap_add: Constraint violation (19)
additional info: structuralObjectClass: no user modification allowed

导入的用户均属于ou=People,dc=example,dc=org。LDAP 服务器已包含此基本 DN。

/etc/ldap/slapd.d/cn=config/olcDatabase={1}hdb.ldif文件包含以下 ACL 条目:

olcAccess: {2}to dn.base="ou=People,dc=example,dc=org" attrs=children by gr
 oup.exact="cn=Manager,ou=Roles,dc=example,dc=org" manage

文件ldif导入如下:

ldapadd -f import.ldif -xv -D "cn=drupal,ou=Apps,dc=example,dc=org" -h localhost -W

cn=drupal,ou=Apps[...]条目是的成员,cn=Manager,ou=Roles,dc=example,dc=org因此它应该具有足够的权限进行写入(因为管理是可用的最高级别权限)。

当我发出命令时,ldapadd导入在第一次ldif输入时失败。完整的命令输出如下:

add objectClass:
    top
    person
    inetOrgPerson
add uid:
    John.Merrell
add mail:
    [email protected]
add cn:
    John D Merrell
add structuralObjectClass:
    inetOrgPerson
add entryUUID:
    65236c42-09b7-1020-9318-9fca7c043dfc
add creatorsName:
    cn=drupal,ou=Apps,dc=bidnetwork,dc=org
add createTimestamp:
    20110503095643Z
add userPassword:
    2678u8yyy
add givenName:
    John D
add sn:
    Merrell
add entryCSN:
    20110629121956.880164Z#000000#000#000000
add modifiersName:
    cn=drupal,ou=Apps,dc=bidnetwork,dc=org
add modifyTimestamp:
    20110629121956Z
adding new entry "[email protected],ou=People,dc=example,dc=org"
ldap_add: Constraint violation (19)
    additional info: structuralObjectClass: no user modification allowed

我已经测试过导入 LDAP 中存在或不存在的用户,无论哪种情况都会出现上述错误。

有人可以解释一下问题的根源以及如何解决它吗?

答案1

您是如何生成这些 LDIF 文件的?structuralObjectClass是 OpenLDAP 中的内部值之一,用户(甚至管理员)通常无法修改这些值。

从您的 LDIF 中删除这些structuralObjectClass行或使用 导入条目slapadd(我敢打赌您是使用 生成 LDIF 文件slapcat)。

答案2

如果你使用类似这样的工具http://phpldapadmin.sourceforge.net/wiki/index.php/Main_Page要导出数据,请不要Include system attributes在 Web UI 中选择:

在此处输入图片描述

答案3

您需要删除文件中的以下几行ldif

structuralObjectClass: 
entryUUID: 
creatorsName: 
createTimestamp: 
entryCSN: 
modifiersName: 
modifyTimestamp: 

答案4

以下不是问题的解决方案,而是用于删除结构元素的实用代码. 示例 Python 代码删除结构元素。使用 out.ldif

structural_elements = ["structuralObjectClass","entryUUID", "creatorsName","createTimestamp","entryCSN", "modifiersName","modifyTimestamp"]
    with open("ldap_data_out.ldif","w+") as outfile:
        with open("ldap_data_in.ldif", "r") as infile:
            lines = infile.readlines()
            for line in lines:
                print line.split(":")[0]
                if line.split(":")[0] in structural_elements:
                    print "ignoring ,", line
                else:
                    outfile.write(line)

相关内容