LDIF 添加/替換語法?
(slapd 2.4.47+dfsg-3+deb10u3 - 來自 Debian 10)
我已經搜尋了有關此問題的先前答案,但是儘管遵循了建議(使用
changetype: modify
),但我仍然遇到問題。問題是需要能夠編寫一個混合了新元素和需要修改的現有元素的 LDIF 文件。
但是,以下兩種方法都不起作用。
dn: cn=config add: olcTLSCACertificateFile olcTLSCACertificateFile: foo - add: olcTLSCertificateFile olcTLSCertificateFile: foo - add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: foo - add: olcTLSCipherSuite olcTLSCipherSuite: foo - add: olcTLSVerifyClient olcTLSVerifyClient: foo
執行時
ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/myconfigs/ldifs/certs.ldif"
會出現以下錯誤:SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 ldap_modify: Inappropriate matching (18) additional info: modify/add: olcTLSCACertificateFile: no equality matching rule
如果我再適應一種
replace
風格:dn: cn=config changetype: modify replace: olcTLSCACertificateFile olcTLSCACertificateFile: foo - replace: olcTLSCertificateFile olcTLSCertificateFile: foo - replace: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: foo - replace: olcTLSCipherSuite olcTLSCipherSuite: foo - replace: olcTLSVerifyClient olcTLSVerifyClient: foo
錯誤變為:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 ldap_modify: Other (e.g., implementation specific) error (80)
*“如果不存在則添加,如果存在則替換”*的正確語法是什麼?
替換實際上是“如果不存在則添加,如果存在則替換”。
RFC2849狀態
“修改目錄的 LDAP 操作(添加、刪除、修改和 modrdn)與下面描述的更改記錄類型(“添加”、“刪除”、“修改”和“ modrdn”或“moddn”)。這種對應是有意的,並且允許從 LDIF 更改記錄直接轉換為協議操作。”
好的,讓我們看看這些協議操作應該如何在rfc4511,第 4.6 節中工作。
“替換:用列出的新值替換修改屬性的所有現有值,如果它不存在則創建該屬性。如果沒有值的替換將刪除整個屬性如果它存在,如果屬性不存在則忽略它存在。”
好吧,那就更好了,它是“如果不存在則添加”、“如果存在則替換”甚至是“刪除”。
讓我們試試看。
假設我的目錄中有這個實體。
dn: cn=timor,ou=people,dc=orga,dc=tld objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person objectClass: posixAccount objectClass: top cn: timor gidNumber: 10001 homeDirectory: /home/timor sn: None uid: timor uidNumber: 10001 displayName: Timor givenName: Timor userPassword:: <stripped>
我設置了這個 LDIF,它
dn: cn=timor,ou=people,dc=orga,dc=tld changetype: modify replace: mail mail: first mail: second mail: third
只需將其 ldapmodify 到目錄即可。
timor@somehost ~ $ ldapmodify -x -H ldaps://localhost -D "cn=Manager,dc=orga,dc=tld" -w "superSecret" -f /tmp/3mail.ldif modifying entry "cn=timor,ou=people,dc=orga,dc=tld"
工作正常。 (我不會粘貼更多的 LDIF,我相信你相信我的價值觀是存在的)
所以這實際上表明,還有一些其他問題。不幸的是,OpenLDAP 的錯誤消息*“ldap_modify: Other (eg, implementation specific) error (80)”*也不是很有幫助。我不止一次地看到它,而且經常出於完全不同的原因,例如模式違規、權限問題等等。
我的建議是堅持您的第二個 ( ) 片段並在發出命令時
changetype: modify
打開調試。如果這沒有幫助 - 我擔心它不會 - 您可以對自己執行相同的操作,相同的選項,並在發出命令時仔細查看日誌文件。-d -1``ldapmodify``slapd``-d -1``ldapmodify