0

在 389 DS 下,我们设置了密码策略,将最后 5 个密码保存在历史记录中,这样就不能使用了。

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

例如。

  1. 用户设置密码为 abc,则历史为 {abc}。
  2. 用户将密码更改为 efg,则历史记录为 { abc, efg }
  3. 管理员将密码更改为 xyz,则历史记录应为 {xyz, abc, efg} 但它是 {xyz, efg}。

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());         
        }
    }
4

1 回答 1

0

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

尝试更新您的 389DS 版本

于 2017-09-07T09:39:35.177 回答