Hi Michael,

Please share a working copy of the code to duplicate the failure scenario of NPE related to Connection.java. BTW, I checked the stack trace posted on April 28 it did not clearly show Connection::cleanup got called. Was there something missed?

Hi Weibing,

apologies, it took me some time to respond. Here is the Java code in question: https://gist.github.com/michael-o/8cff749d3ce5536bf70a16a64819cf10. Please also find here some screenshots (https://people.freebsd.org/~michaelo/ad-gssapi-tls-npe/) from my debugger showing the cause.

There is, indeed, something you missed: The Connection object is run asynchronously is a separate thread. ::run() invokes the SASL input stream which throws an IOE because the SASL receive buffer size is too large. The exception is caught and swallowed. finally{} is called, it calls ::cleanup(). Meanwhile the LDAP client receives the connection closure from the server, the client tries to abandon the request and invokes the SASL client which is already disposed by the connection. Therefore you don't see the Connection::cleanup() method in the stack trace. If you pay a close look at the output of ldapsearch(1) you will see that there are two errors: (1) the buffer size mismatch and (2) the connection closure from the server. The first issue causes the second to fail in JNDI/LDAP.

Michael

Reply via email to