无法使用运行时配置 cn=config 在 OpenLDAP 中修改架构

the*_*Joe 5 openldap ldap schema

我在使用运行时配置 (cn=config) 修改 OpenLDAP 安装的架构时遇到问题。我想要做的是修改现有属性并将新属性添加到自定义架构中。当我尝试应用更改时遇到的错误是“没有这样的对象”或“没有这样的值”。使用JXplorer浏览器时,报错为:

javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object]; remaining name 'cn={15}mySchema,cn=schema,cn=config'
Run Code Online (Sandbox Code Playgroud)

从命令行对 ldif 文件使用 ldapmodify 会引发相同的错误:

ldapmodify -h ldap://localhost/cn=config -x -p 389 -D cn=admin,cn=config -W -f modify.ldif
modifying entry "cn={15}mySchema,cn=schema,cn=config"
ldap_modify: No such object (32)
Run Code Online (Sandbox Code Playgroud)

然而,奇怪的是,即使发生此错误,也会为 slapd 服务的当前实例提交更改。例如,如果我添加了新属性并修改了一个对象以包含这些属性,那么这些属性在使用该对象的条目中是可用的。我可以继续进行,就好像更改有效一样。但是,如果 slapd 服务重新启动,则更改将恢复。

如果我删除 ldif 文件中 DN 的前导 {15},或属性值上的类似前缀,我会收到相同的错误(尽管可能出于不同的原因):

modifying entry "cn=mySchema,cn=schema,cn=config"
ldap_modify: No such object (32)
        matched DN: cn=schema,cn=config
Run Code Online (Sandbox Code Playgroud)

更重要的是,我可以毫无问题地修改 cn=config 的其他条目(例如,olcDatabase={-1}frontend,cn=config),并且更改在服务重启后仍然存在。只有当我尝试修改 cn=schema,cn=config 下的条目时才会发生错误。

该服务器运行 CentOS 6.2,64 位,使用通过 yum 安装的 OpenLDAP 2.4.23。我尝试了多种浏览器(JXplorer、Softerra LDAP Administrator)以及命令行,结果都一样。slapd.d 目录的所有者/组是 ldap/ldap,即使将 schema 文件的权限修改为 777 也没有变化。 使用 636 端口(浏览器或命令行)上的 TLS 也没有任何影响。

任何人都可以对此有所了解并解释可能阻止我通过 cn=config 修改架构的原因吗?

编辑:这是 modify.ldif 的内容:

dn: cn={15}mySchema,cn=schema,cn=config
changetype: modify
add: olcAttributeTypes
olcAttributeTypes: ( 1.3.6.1.4.00000.2.3.14 NAME 'myTest' DESC 'This is only a test' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} )
Run Code Online (Sandbox Code Playgroud)

我们使用我们公司的 PEN 代替 00000,并且没有其他属性使用该 OID。我发现在属性值中添加数字前缀并没有什么区别,但是前缀对于 DN 是必需的;没有它,错误意味着它所说的并且目录没有被修改。

Hub*_*rio 1

olcAttributeTypes如果条目中有其他属性,则您必须执行replace“否”add并列出 LDAP 中已有的所有其他属性。

尝试使用ldapvi编辑,它会自动完成。

编辑:如果这不起作用,那么您需要停止slapd并手动编辑文件/etc/ldap/slap.d/。当变化相对频繁时,这当然不是一个解决方案......

编辑架构cn=config是一项新功能,您可能发现了一个错误(可能已在最新版本中修复)。检查 OpenLDAP ChangeLog 并尝试使用最新版本。