LDAP(带ppolicy)更改其他用户的密码时出错

我已经build立了一个LDAP服务器与ppolicy覆盖,但现在有麻烦重置用户的密码在某些情况下:如果用户login失败,则pwdFailureTime属性存在和ldapmodify失败,抱怨它没有。

如果我最近的login尝试成功,那么我可以绑定为cn = admin并运行ldif文件:

dn: uid=anton,ou=accounts,dc=[redacted],dc=ca changetype: modify replace: userPassword userPassword: foobar - replace: pwdReset pwdReset: TRUE 

哪个成功 但是,如果最后一次login尝试的密码错误,ppolicy会为该帐户添加一个pwdFailureTime属性,然后尝试运行上面的ldif文件,结果如下:

 $ ldapmodify -x -D "cn=admin,dc=[redacted],dc=ca" -W -H ldap:// -f pwreset.ldif Enter LDAP Password: modifying entry "uid=anton,ou=accounts,dc=[redacted],dc=ca" ldap_modify: No such attribute (16) additional info: modify/delete: pwdFailureTime: no such attribute 

如果我在重置密码之前尝试删除pwdFailureTime属性,那么我得到:

 ldap_modify: Constraint violation (19) additional info: pwdFailureTime: no user modification allowed 

在现实生活中,如果用户忘记了自己的密码并且需要重置密码,他们一般都会尝试多次重新调用密码,因此会设置pwdFailureTime属性。 有什么build议么?

至于IETF的草案 :

8.2.7。 策略状态更新

如果这些步骤已经完成而没有导致错误情况,则服务器将执行以下步骤以更新必要的密码策略状态属性:

如果pwdMaxAge或pwdMinAge的值不为零,则服务器将条目上的pwdChangedTime属性更新为当前时间。

如果pwdInHistory的值不为零,则服务器将先前的密码(如果存在)添加到pwdHistory属性。 如果pwdHistory属性中保存的属性数量超过pwdInHistory的值,则服务器将删除最旧的超额密码。

如果pwdMustChange的值为TRUE且修改由密码pipe理员执行,则pwdReset属性设置为TRUE。 否则,pwdReset将从用户条目中删除(如果存在)。

如果pwdFailureTime和pwdGraceUseTime属性存在,则将其从用户条目中删除。

如果我没有弄错,LDIF是primefaces操作,所以当userPassword被修改时,它链接到删除pwdFailureTime属性,因此当pwdReset的修改似乎也触发了pwdFailureTime的删除失败。

为什么你需要将pwdReset设置为TRUE ? 你已经重置了它。 如果要确保用户在第一次连接时必须“重设”自己的密码:

可能会尝试改为将pwsMustChange属性修改为TRUE ,这应该将pwdReset属性设置为TRUE (根据基于OpenLDAP ppolicy的IETF)

或者可能只是切换在LDIF上的两个修改可以做的伎俩。