編輯 LDAP Syncprov 覆蓋時出現錯誤“無相等匹配規則”
我有一個 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:
# cat 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 呼叫它,我會得到同樣的錯誤。我是否使用了錯誤的添加/修改指令或屬性?
進一步的故障排除嘗試:
我嘗試在沒有“添加:”指令的情況下修改 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 , ETC。
參考: 這個ServerFault問題有一個答案,建議用“替換”替換“添加”來解決這個錯誤,但這對我不起作用。
解決這個問題需要做兩件事。我已經在覆蓋配置文件 (olcOverlay={0}syncprov.ldif) 中有一個 olcSpCheckpoint 條目(但不是 olcSpSessionLog 條目),因此我需要將 olcSpCheckpoint 的“添加:”更改為“替換:”,如下所示:
# cat 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 複製中執行相同的 ldapmodify 命令時,它成功應用了 LDIF。所以我唯一的結論是 slapd 出於某種奇怪的原因在生產伺服器上搞砸了,需要重新啟動。我曾試圖在我的單點故障生產 LDAP 伺服器上避免這種情況(而且應該完全是 OLC 以防止必須重新啟動 slapd 之類的事情),
這是http://www.openldap.org/its/index.cgi/?findid=8616,它將在 OpenLDAP 2.4.47 版本中修復。