编辑 LDAP Syncprov Overlay 时出现“无相等匹配规则”错误

编辑 LDAP Syncprov Overlay 时出现“无相等匹配规则”错误

我有一台 OpenLDAP OLC 服务器(2.4.23),我正尝试向 Syncprov 覆盖文件添加两个属性,但遇到了一些困难。

以下是 olcOverlay={0}syncprov.ldif 文件的内容:

# cat /etc/openldap/slapd.d/cn\=config/olcDatabase\={1}bdb/olcOverlay\={0}syncprov.ldif

dn: olcOverlay={0}syncprov
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: {0}syncprov
olcSpCheckpoint: 100 60
olcSpNoPresent: TRUE
olcSpReloadHint: TRUE
structuralObjectClass: olcSyncProvConfig
entryUUID: 727d29d6-cc5c-1032-89d0-2fc7acd5ca31
creatorsName: cn=config
createTimestamp: 20131018161654Z
entryCSN: 20131018161654.036436Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20131018161654Z

我正在尝试应用这个 LDIF:

# 猫SyncprovOverlayAdd2.ldif

dn: olcOverlay={0}syncprov,olcDatabase={1}bdb,cn=config
changetype: modify
add: olcSpCheckpoint
olcSpCheckpoint: 100 30
-
add: olcSpSessionlog
olcSpSessionlog: 1000

错误:

# ldapadd-v-f SyncprovOverlayAdd2.ldif-D“cn=config”-H“ldap://ldap01.lab.com”-W-x

ldap_initialize( ldap://ldap01.lab.com:389/??base )
Enter LDAP Password: 
add olcSpCheckpoint:
    100 30
add olcSpSessionlog:
    1000
modifying entry "olcOverlay={0}syncprov,olcDatabase={1}bdb,cn=config"
ldap_modify: Inappropriate matching (18)
    additional info: modify/add: olcSpCheckpoint: no equality matching rule

如果我使用 ldapmodify 调用它,我会得到同样的错误。我是否使用了错误的添加/修改指令或属性?

进一步的故障排除尝试:

我尝试修改没有“add:”指令的 LDIF,使其看起来像:

dn: olcOverlay={0}syncprov,olcDatabase={1}bdb,cn=config
changetype: add
olcSpCheckpoint: 100 30
olcSpSessionlog: 1000

但是当我这样做时我得到了一个不同的错误:

add olcSpCheckpoint:
    100 30
add olcSpSessionlog:
    1000
adding new entry "olcOverlay={0}syncprov,olcDatabase={1}bdb,cn=config"
ldap_add: Object class violation (65)
    additional info: no objectClass attribute

我不太了解这些 OLC 实时变化,以及何时需要添加/修改/替换,何时需要明确设置“changetype”,何时需要在使用 ldapadd/ldapmodify 对现有条目指定 objectClass 等。

参考: 这个 ServerFault 问题有一个答案建议用“replace”替换“add”来解决这个问题,但这对我来说不起作用。

答案1

这是http://www.openldap.org/its/index.cgi/?findid=8616该问题将在 OpenLDAP 2.4.47 版本中修复。

答案2

要解决这个问题,需要做两件事。在覆盖配置文件 (olcOverlay={0}syncprov.ldif) 中,我已经有一个 olcSpCheckpoint 条目(但没有 olcSpSessionLog 条目),因此我需要将 olcSpCheckpoint 的“add:”更改为“replace:”,如下所示:

# 猫SyncprovOverlayAdd2.ldif

dn: olcOverlay={0}syncprov,olcDatabase={1}bdb,cn=config
changetype: modify
replace: olcSpCheckpoint
olcSpCheckpoint: 100 30
-
add: olcSpSessionlog
olcSpSessionlog: 1000

因此,我在 OP 底部用“参考:”注释指向的 ServerFault 链接实际上是正确的,但由于存在第二个问题,我最初无法验证它(并且在修复 LDIF 后我仍然收到错误消息)。

其次,即使在我修复了 LDIF 之后,当我尝试使用 ldapmodify 应用 LDIF 时,我仍然收到无法更改条目的错误消息(不幸的是,我丢失了终端中出现的确切消息),但我可以克隆 LDAP 服务器所在的 VM,这样我就可以在生产之外使用它的副本。当我在 VM 克隆中运行相同的 ldapmodify 命令时,它成功应用了 LDIF。所以我唯一的结论是,由于某种奇怪的原因,生产服务器上的 slapd 搞砸了,需要重新启动。我曾试图在我的单点故障生产 LDAP 服务器上避免这种情况(此外,它应该完全是 OLC,以防止必须重新启动 slapd 之类的事情),但我硬着头皮在 LDAP 服务器上重新启动了 slapd,之后我的更改顺利通过了。

相关内容