Neil Wilson - 2024-03-13

We have just released version 7.0.0 of the UnboundID LDAP SDK for Java. It is available for download from GitHub and SourceForge, and it is available in the Maven Central Repository. You can find the release notes for this release (and all previous versions) at https://docs.ldap.com/ldap-sdk/docs/release-notes.html, but here’s a summary of the changes:

  • The LDAP SDK now requires Java 8 or later. Java 7 is no longer supported.

  • We improved the behavior of LDAP connection pools when they are configured to invoke a health check when checking out a connection from the pool. Previously, if a connection was found to be invalid during checkout, the LDAP SDK would create a new connection to replace it, but would continue iterating through other connections in the pool trying to find an existing valid connection. It will now return the newly created connection immediately without checking other existing connections, which can substantially reduce the time to check out a connection in a scenario where many connections have been invalidated (e.g., by a server shutdown).

  • We added a new compare-ldap-schemas command-line tool that can be used to identify differences between the schemas of two LDAP servers.

  • We improved the behavior that the LDAP SDK uses when authenticating with the GSSAPI SASL mechanism. Previously, if you didn’t explicitly provide a JAAS configuration file to use for the attempt, the LDAP SDK would create a new one for each bind attempt. This would create a lot of temporary files that would need to be cleaned up when the JVM exited, and they might not get cleaned up properly if they JVM exits abnormally (e.g., it’s killed or if the JVM crashes). It would also require a small amount of additional memory for each bind attempt, since it has to remember another file to be deleted. Now, the LDAP SDK will be able to reuse the same generated configuration file for all GSSAPI bind requests that use the same JAAS settings, which will slightly improve performance, reduce memory usage, and reduce disk space consumption.

  • We added experimental client-side support for the relax rules support as defined in draft-zeilenga-ldap-relax-03. This draft doesn’t specify an OID for the control, but at least a couple of servers (OpenLDAP and ForgeRock OpenDJ) have implemented support for the control with an OID of 1.3.6.1.4.1.4203.666.5.12, so the LDAP SDK uses that OID for the control.

  • We added client-side support for a number of proprietary controls used by the ForgeRock OpenDJ directory server. These include:

  • A transaction ID request control, which can be included in an operation request to provide a transaction ID that will appear in the access log message for that operation.
  • A replication repair request control, which can be included in a write request to indicate that the associated change should not be replicated.
  • Change sequence number request and response controls, which can be used with a write operation to obtain the replication CSN that the server assigned to that operation.
  • Affinity request control, which can be included in related requests sent through an LDAP proxy server to consistently route them to the same LDAP server instance.

  • We added connection pool health checks for use in conjunction with the Ping Identity Directory Server, including:

  • One that will attempt to determine whether there are any active alerts in the server that cause it to consider itself to be either degraded or unavailable.
  • One that will assess the replication backlog and can consider a server unavailable if it has too many outstanding changes, or if the oldest outstanding change was originally processed too long ago.
  • One that will attempt to determine whether the server is in lockdown mode.

  • We updated the CryptoHelper class to add convenience methods for generating SHA-256, SHA-384, and SHA-512 digests from byte arrays, strings, and files. There are also generic versions of these methods that can be used with user-specified digest algorithms.

  • We added methods for normalizing JSON values and JSON object filters. This can help make it possible to compare two JSON object filters to determine whether two JSON object filters are equivalent.

  • We updated the BouncyCastleFIPSHelper class to add a constant with the name of a system property that can be used to enable support for the MD5 digest algorithm, which may be needed if you’re using the 1.0.2.4 or later version of the bc-fips jar file and need to use the MD5 message digest for some reason.

  • We updated the documentation to include new and updated versions of a number of LDAP-related Internet Drafts, including:

  • draft-ietf-kitten-scram-2fa-04
  • draft-melnikov-scram-bis-04
  • draft-melnikov-scram-sha-512-04
  • draft-melnikov-scram-sha3-512-04
  • draft-coretta-oiddir-radit-00
  • draft-coretta-oiddir-radsa-00
  • draft-coretta-oiddir-radua-00
  • draft-coretta-oiddir-roadmap-00
  • draft-coretta-oiddir-schema-01