在389 DS中,如果LDAP管理员更改密码,则它会从历史记录中替换最后一个密码

时间:2017-09-07 04:56:55

标签: ldap password-policy

在389 DS下我们设置了密码策略以保存历史记录中的最后5个密码,因此无法使用这些密码。

我们有java应用程序,其密码更改为LDAP管理员。但是当更改密码而不是在密码历史记录中添加新密码时,它会用新密码替换旧密码。这使用户可以将密码更改为过去使用的密码。

EG。

  1. 用户将密码设置为abc,然后历史记录为{abc}。
  2. 用户将密码更改为efg,然后历史记录为{abc,efg}
  3. 管理员将密码更改为xyz,然后历史记录应为{xyz,abc,efg},但它是{xyz,efg}。
  4. 
    private static void changePasswordAsAdmin(String userDn, String sNewPassword) throws Exception {
          System.out.println("Setting Password:" + sNewPassword);
          LDAPConnection connection = new LDAPConnection(new MySSLSocketFactory(), "Ldap host", 636, "adminCN", "adminPwd" );
          final List mods = new ArrayList();
          final Modification item = new Modification(ModificationType.REPLACE, "userPassword", sNewPassword);
          mods.add(item);
          final ModifyRequest request = new ModifyRequest(userDn, mods);
          try {
                LDAPResult result = connection.modify(request);
                System.out.println(result.getResultString());
            }
            catch(Exception e) {
                System.out.println(e.getMessage());
                throw e;
            }
        }
    
    
    private static void changePasswordAsUser(String userDn, String oldPassword, String newPassword) throws Exception {
            System.out.println("Setting Password, old password: " + oldPassword + ", new password: " + newPassword); 
            LDAPConnection connection = new LDAPConnection(new MySSLSocketFactory(), "ldapHost", 636, "userDn", "oldPassword");
            final List mods = new ArrayList();
            final Modification item = new Modification(ModificationType.REPLACE, "userPassword", newPassword);
            mods.add(item);
            final ModifyRequest request = new ModifyRequest(userDn, mods);
            try {
                LDAPResult result = connection.modify(request);
                System.out.println(result.getResultString());
            }
            catch(Exception e) {
                System.out.println(e.getMessage());         
            }
        }
    

1 个答案:

答案 0 :(得分:0)

这是一个已知错误,应根据:https://pagure.io/389-ds-base/issue/48813

修复

尝试更新389DS的版本