(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状态
好的,让我们看看这些协议操作应该如何在rfc4511,第 4.6 节中工作。
好吧,那就更好了,它是“如果不存在则添加”、“如果存在则替换”甚至是“删除”。
让我们试试看。
假设我的目录中有这个实体。
我设置了这个 LDIF,它
mail
向实体添加了三个值,不是使用“添加”而是“替换”。只需将其 ldapmodify 到目录即可。
工作正常。 (我不会粘贴更多的 LDIF,我相信你相信我的价值观是存在的)
所以这实际上表明,还有一些其他问题。不幸的是,OpenLDAP 的错误消息“ldap_modify: Other (eg, implementation specific) error (80)”也不是很有帮助。我不止一次地看到它,而且经常出于完全不同的原因,例如模式违规、权限问题等等。
我的建议是坚持您的第二个 ( ) 片段并在发出命令时
changetype: modify
打开调试。如果这没有帮助 - 我担心它不会 - 您可以对自己执行相同的操作,相同的选项,并在发出命令时仔细查看日志文件。-d -1
ldapmodify
slapd
-d -1
ldapmodify