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



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

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

尝试更新389ds的版本

相关内容

  • 没有找到相关文章

最新更新