| | |
| | | import javax.security.sasl.Sasl; |
| | | import javax.security.sasl.SaslClient; |
| | | |
| | | import org.opends.server.protocols.asn1.ASN1Element; |
| | | import org.opends.server.protocols.asn1.ASN1Exception; |
| | | import org.opends.server.protocols.asn1.ASN1OctetString; |
| | | import org.opends.server.protocols.asn1.ASN1Reader; |
| | | import org.opends.server.protocols.asn1.ASN1Writer; |
| | | import org.opends.server.protocols.ldap.BindRequestProtocolOp; |
| | | import org.opends.server.protocols.ldap.BindResponseProtocolOp; |
| | | import org.opends.server.protocols.ldap.ExtendedRequestProtocolOp; |
| | |
| | | // The bind DN for GSSAPI authentication. |
| | | private ASN1OctetString gssapiBindDN; |
| | | |
| | | // The ASN.1 reader that will be used to read data from the server. |
| | | private ASN1Reader reader; |
| | | // The LDAP reader that will be used to read data from the server. |
| | | private LDAPReader reader; |
| | | |
| | | // The ASN.1 writer that will be used to send data to the server. |
| | | private ASN1Writer writer; |
| | | // The LDAP writer that will be used to send data to the server. |
| | | private LDAPWriter writer; |
| | | |
| | | // The atomic integer that will be used to obtain message IDs for request |
| | | // messages. |
| | |
| | | * for cases in which simple authentication will be used as it does not |
| | | * require any particularly expensive processing. |
| | | * |
| | | * @param reader The ASN.1 reader that will be used to read data from |
| | | * @param reader The LDAP reader that will be used to read data from |
| | | * the server. |
| | | * @param writer The ASN.1 writer that will be used to send data to |
| | | * @param writer The LDAP writer that will be used to send data to |
| | | * the server. |
| | | * @param hostName The host name used to connect to the remote system |
| | | * (fully-qualified if possible). |
| | | * @param nextMessageID The atomic integer that will be used to obtain |
| | | * message IDs for request messages. |
| | | */ |
| | | public LDAPAuthenticationHandler(ASN1Reader reader, ASN1Writer writer, |
| | | public LDAPAuthenticationHandler(LDAPReader reader, LDAPWriter writer, |
| | | String hostName, AtomicInteger nextMessageID) |
| | | { |
| | | this.reader = reader; |
| | | this.writer = writer; |
| | | this.reader = reader; |
| | | this.writer = writer; |
| | | this.hostName = hostName; |
| | | this.nextMessageID = nextMessageID; |
| | | |
| | |
| | | |
| | | try |
| | | { |
| | | writer.writeElement(bindRequestMessage.encode()); |
| | | writer.writeMessage(bindRequestMessage); |
| | | } |
| | | catch (IOException ioe) |
| | | { |
| | |
| | | LDAPMessage responseMessage; |
| | | try |
| | | { |
| | | ASN1Element responseElement = reader.readElement(); |
| | | if (responseElement == null) |
| | | responseMessage = reader.readMessage(); |
| | | if (responseMessage == null) |
| | | { |
| | | int msgID = MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE; |
| | | String message = getMessage(msgID); |
| | | throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, |
| | | msgID, message); |
| | | } |
| | | |
| | | responseMessage = LDAPMessage.decode(responseElement.decodeAsSequence()); |
| | | } |
| | | catch (IOException ioe) |
| | | { |
| | |
| | | |
| | | try |
| | | { |
| | | writer.writeElement(requestMessage.encode()); |
| | | writer.writeMessage(requestMessage); |
| | | } |
| | | catch (IOException ioe) |
| | | { |
| | |
| | | LDAPMessage responseMessage; |
| | | try |
| | | { |
| | | ASN1Element responseElement = reader.readElement(); |
| | | if (responseElement == null) |
| | | responseMessage = reader.readMessage(); |
| | | if (responseMessage == null) |
| | | { |
| | | int msgID = MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE; |
| | | String message = getMessage(msgID); |
| | | throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, |
| | | msgID, message); |
| | | } |
| | | |
| | | responseMessage = LDAPMessage.decode(responseElement.decodeAsSequence()); |
| | | } |
| | | catch (IOException ioe) |
| | | { |
| | |
| | | |
| | | try |
| | | { |
| | | writer.writeElement(requestMessage1.encode()); |
| | | writer.writeMessage(requestMessage1); |
| | | } |
| | | catch (IOException ioe) |
| | | { |
| | |
| | | LDAPMessage responseMessage1; |
| | | try |
| | | { |
| | | ASN1Element responseElement1 = reader.readElement(); |
| | | if (responseElement1 == null) |
| | | responseMessage1 = reader.readMessage(); |
| | | if (responseMessage1 == null) |
| | | { |
| | | int msgID = MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE; |
| | | String message = getMessage(msgID); |
| | | throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, |
| | | msgID, message); |
| | | } |
| | | |
| | | responseMessage1 = |
| | | LDAPMessage.decode(responseElement1.decodeAsSequence()); |
| | | } |
| | | catch (IOException ioe) |
| | | { |
| | |
| | | |
| | | try |
| | | { |
| | | writer.writeElement(requestMessage2.encode()); |
| | | writer.writeMessage(requestMessage2); |
| | | } |
| | | catch (IOException ioe) |
| | | { |
| | |
| | | LDAPMessage responseMessage2; |
| | | try |
| | | { |
| | | ASN1Element responseElement = reader.readElement(); |
| | | if (responseElement == null) |
| | | responseMessage2 = reader.readMessage(); |
| | | if (responseMessage2 == null) |
| | | { |
| | | int msgID = MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE; |
| | | String message = getMessage(msgID); |
| | | throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, |
| | | msgID, message); |
| | | } |
| | | |
| | | responseMessage2 = LDAPMessage.decode(responseElement.decodeAsSequence()); |
| | | } |
| | | catch (IOException ioe) |
| | | { |
| | |
| | | |
| | | try |
| | | { |
| | | writer.writeElement(requestMessage1.encode()); |
| | | writer.writeMessage(requestMessage1); |
| | | } |
| | | catch (IOException ioe) |
| | | { |
| | |
| | | LDAPMessage responseMessage1; |
| | | try |
| | | { |
| | | ASN1Element responseElement1 = reader.readElement(); |
| | | if (responseElement1 == null) |
| | | responseMessage1 = reader.readMessage(); |
| | | if (responseMessage1 == null) |
| | | { |
| | | int msgID = MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE; |
| | | String message = getMessage(msgID); |
| | | throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, |
| | | msgID, message); |
| | | } |
| | | |
| | | responseMessage1 = |
| | | LDAPMessage.decode(responseElement1.decodeAsSequence()); |
| | | } |
| | | catch (IOException ioe) |
| | | { |
| | |
| | | |
| | | try |
| | | { |
| | | writer.writeElement(requestMessage2.encode()); |
| | | writer.writeMessage(requestMessage2); |
| | | } |
| | | catch (IOException ioe) |
| | | { |
| | |
| | | LDAPMessage responseMessage2; |
| | | try |
| | | { |
| | | ASN1Element responseElement = reader.readElement(); |
| | | if (responseElement == null) |
| | | responseMessage2 = reader.readMessage(); |
| | | if (responseMessage2 == null) |
| | | { |
| | | int msgID = MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE; |
| | | String message = getMessage(msgID); |
| | | throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, |
| | | msgID, message); |
| | | } |
| | | |
| | | responseMessage2 = LDAPMessage.decode(responseElement.decodeAsSequence()); |
| | | } |
| | | catch (IOException ioe) |
| | | { |
| | |
| | | |
| | | try |
| | | { |
| | | writer.writeElement(requestMessage.encode()); |
| | | writer.writeMessage(requestMessage); |
| | | } |
| | | catch (IOException ioe) |
| | | { |
| | |
| | | LDAPMessage responseMessage; |
| | | try |
| | | { |
| | | ASN1Element responseElement = reader.readElement(); |
| | | if (responseElement == null) |
| | | responseMessage = reader.readMessage(); |
| | | if (responseMessage == null) |
| | | { |
| | | int msgID = MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE; |
| | | String message = getMessage(msgID); |
| | | throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, |
| | | msgID, message); |
| | | } |
| | | |
| | | responseMessage = LDAPMessage.decode(responseElement.decodeAsSequence()); |
| | | } |
| | | catch (IOException ioe) |
| | | { |
| | |
| | | |
| | | try |
| | | { |
| | | writer.writeElement(requestMessage.encode()); |
| | | writer.writeMessage(requestMessage); |
| | | } |
| | | catch (IOException ioe) |
| | | { |
| | |
| | | LDAPMessage responseMessage; |
| | | try |
| | | { |
| | | ASN1Element responseElement = reader.readElement(); |
| | | if (responseElement == null) |
| | | responseMessage = reader.readMessage(); |
| | | if (responseMessage == null) |
| | | { |
| | | int msgID = MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE; |
| | | String message = getMessage(msgID); |
| | | throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, |
| | | msgID, message); |
| | | } |
| | | |
| | | responseMessage = LDAPMessage.decode(responseElement.decodeAsSequence()); |
| | | } |
| | | catch (IOException ioe) |
| | | { |
| | |
| | | |
| | | try |
| | | { |
| | | writer.writeElement(requestMessage.encode()); |
| | | writer.writeMessage(requestMessage); |
| | | } |
| | | catch (IOException ioe) |
| | | { |
| | |
| | | LDAPMessage responseMessage; |
| | | try |
| | | { |
| | | ASN1Element responseElement = reader.readElement(); |
| | | if (responseElement == null) |
| | | responseMessage = reader.readMessage(); |
| | | if (responseMessage == null) |
| | | { |
| | | int msgID = MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE; |
| | | String message = getMessage(msgID); |
| | | throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, |
| | | msgID, message); |
| | | } |
| | | |
| | | responseMessage = |
| | | LDAPMessage.decode(responseElement.decodeAsSequence()); |
| | | } |
| | | catch (IOException ioe) |
| | | { |
| | |
| | | |
| | | try |
| | | { |
| | | writer.writeElement(requestMessage.encode()); |
| | | writer.writeMessage(requestMessage); |
| | | } |
| | | catch (IOException ioe) |
| | | { |
| | |
| | | // Read the response from the server. |
| | | try |
| | | { |
| | | ASN1Element responseElement = reader.readElement(); |
| | | if (responseElement == null) |
| | | responseMessage = reader.readMessage(); |
| | | if (responseMessage == null) |
| | | { |
| | | int msgID = |
| | | MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE; |
| | |
| | | throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, |
| | | msgID, message); |
| | | } |
| | | |
| | | responseMessage = |
| | | LDAPMessage.decode(responseElement.decodeAsSequence()); |
| | | } |
| | | catch (IOException ioe) |
| | | { |
| | |
| | | |
| | | try |
| | | { |
| | | writer.writeElement(requestMessage.encode()); |
| | | writer.writeMessage(requestMessage); |
| | | } |
| | | catch (IOException ioe) |
| | | { |
| | |
| | | LDAPMessage responseMessage; |
| | | try |
| | | { |
| | | ASN1Element responseElement = reader.readElement(); |
| | | if (responseElement == null) |
| | | responseMessage = reader.readMessage(); |
| | | if (responseMessage == null) |
| | | { |
| | | int msgID = MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE; |
| | | String message = getMessage(msgID); |
| | | throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, |
| | | msgID, message); |
| | | } |
| | | |
| | | responseMessage = LDAPMessage.decode(responseElement.decodeAsSequence()); |
| | | } |
| | | catch (IOException ioe) |
| | | { |