Openldap

編輯 LDAP Syncprov 覆蓋時出現錯誤“無相等匹配規則”

  • September 26, 2018

我有一個 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 版本中修復。

引用自:https://serverfault.com/questions/627117