这可能有点奇怪,因为到目前为止我还没有找到解决方案。
它安装在 CentOS 5.8 中,并使用 CentOS-Directory/8.2.8 B2012.041.1227。
简单来说,我正在使用一个应用程序,它会提示用户更改密码(开放增强现实)。这基本上没问题,但如果 DS 设置为存储密码历史记录,客户端应用程序将无法更改密码,并不断出现“密码已保存在历史记录中”。这不是很有用,尤其是因为我知道该密码此前未被使用过。
使用 Wireshark 后,我看到客户端应用程序正在发送以下请求:
dn: uid=AUser,ou=People,dc=testldap
changetype: modify
delete: userpassword
userpassword: location
-
add: userpassword
userpassword: american_psycho
这会因“历史记录中的密码”而失败。我在命令行上尝试了相同的请求:
$ ldapmodify -h host -p 389 -D "uid=AUser,ou=People,dc=testldap" -w location
dn: uid=AUser,ou=People,dc=testldap
changetype: modify
delete: userpassword
userpassword: location
-
add: userpassword
userpassword: american_psycho
^D
Processing MODIFY request for uid=AUser,ou=People,dc=testldap
MODIFY operation failed
Result Code: 19 (Constraint Violation)
Additional Information: password in history
但是,如果我尝试以下操作:
$ ldapmodify -h host -p 389 -D "uid=AUser,ou=People,dc=testldap" -w location
dn: uid=AUser,ou=People,dc=testldap
changetype: modify
delete: userpassword
-
add: userpassword
userpassword: american_psycho
^D
Processing MODIFY request for uid=AUser,ou=People,dc=testldap
MODIFY operation successful for uid=AUser,ou=People,dc=testldap
那么这显然是可行的,唯一的区别是这次我没有传递旧密码。我理解为什么你想要传递一个要删除的值(例如,如果它是一个多值属性),但我不明白为什么 DS 要根据密码历史记录检查它...
我检查了日志文件,即使打开了所有日志记录,我也没有看到任何有用的信息......
无法配置客户端应用程序不是发送旧密码而不自行分叉,所以我真的希望有某种方式可以配置 CentOS Directory Server 来处理这个问题。我知道 Active Directory 支持这一点(或者曾经支持过):http://msdn.microsoft.com/en-us/library/cc223249.aspx但我不知道如何在 CentOS DS 中支持此功能。
答案1
slapcat -H ldpap://host:389/uid=AUser,ou=People,dc=testldap -l export.ldif
此命令会将目录条目(或整个数据库)导出为 LDIF 格式。
如果数据库出现问题,您可以修复它并导入LDIF 文件。