RFR: 8325579: Inconsistent behavior in com.sun.jndi.ldap.Connection::createSocket [v7]

Aleksei Efimov aefimov at openjdk.org
Wed Mar 6 14:44:48 UTC 2024


On Fri, 1 Mar 2024 10:44:14 GMT, Christoph Langer <clanger at openjdk.org> wrote:

>> During analysing a customer case I figured out that we have an inconsistency between documentation and actual behavior in class com.sun.jndi.ldap.Connection. The [method documentation of com.sun.jndi.ldap.Connection::createSocket](https://github.com/openjdk/jdk/blob/3ebe6c192a5dd5cc46ae2d263713c9ff38cd46bb/src/java.naming/share/classes/com/sun/jndi/ldap/Connection.java#L281) states: "If a timeout is supplied but unconnected sockets are not supported then the timeout is ignored and a connected socket is created."
>> 
>> This, however does not happen. If a SocketFactory would not support unconnected sockets, it would likely throw a SocketException in [SocketFactory::createSocket()](https://github.com/openjdk/jdk/blob/6303c0e7136436a2d3cb6043b88edf788c0067cc/src/java.base/share/classes/javax/net/SocketFactory.java#L123). And since [the code](https://github.com/openjdk/jdk/blob/3ebe6c192a5dd5cc46ae2d263713c9ff38cd46bb/src/java.naming/share/classes/com/sun/jndi/ldap/Connection.java#L336) does not check for this behavior, a connection with timeout value through a SocketFactory that does not support unconnected sockets would simply fail with an IOException.
>> 
>> So we should either make the code adhere to what is documented or adapt the documentation to the actual behavior.
>> 
>> I hereby try to fix the connect coding. Alternatively, we could also adapt the description - I have no strong opinion. What do the experts suggest?
>
> Christoph Langer has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains 10 additional commits since the last revision:
> 
>  - Indentation
>  - Merge branch 'master' into JDK-8325579
>  - Review feedback
>  - Rename back to LdapSSLHandshakeFailureTest to ease reviewing
>  - Merge branch 'master' into JDK-8325579
>  - Typo
>  - Merge branch 'master' into JDK-8325579
>  - Rename test and refine comment
>  - Enhance test
>  - JDK-8325579

src/java.naming/share/classes/module-info.java line 42:

> 40:  *         <br>The value of this environment property specifies the fully
> 41:  *         qualified class name of the socket factory used by the LDAP provider.
> 42:  *         This class must implement the javax.net.SocketFactory abstract class.

We need to mention here that `getDefault` method needs to be implemented by the provided socket factory class.

 Something like: `and provide an implementation of the static "getDefault()" method that returns an instance of the socket factory.`
The CSR needs to be updated too.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/17797#discussion_r1514602203


More information about the core-libs-dev mailing list