| | |
| | | private final int bufferSize; |
| | | private final RedirectingByteChannel saslChannel; |
| | | private final RedirectingByteChannel tlsChannel; |
| | | private volatile ConnectionSecurityProvider activeProvider = null; |
| | | private volatile ConnectionSecurityProvider tlsPendingProvider = null; |
| | | private volatile ConnectionSecurityProvider saslActiveProvider = null; |
| | | private volatile ConnectionSecurityProvider tlsActiveProvider = null; |
| | | private volatile ConnectionSecurityProvider saslPendingProvider = null; |
| | | private volatile ConnectionSecurityProvider tlsPendingProvider = null; |
| | | |
| | | |
| | | /** |
| | |
| | | @Override |
| | | public boolean isSecure() |
| | | { |
| | | if (activeProvider != null) |
| | | return activeProvider.isSecure(); |
| | | else |
| | | return false; |
| | | boolean secure = false; |
| | | if (tlsActiveProvider != null) |
| | | { |
| | | secure = tlsActiveProvider.isSecure(); |
| | | } |
| | | if (!secure && saslActiveProvider != null) |
| | | { |
| | | secure = saslActiveProvider.isSecure(); |
| | | } |
| | | return secure; |
| | | } |
| | | |
| | | |
| | |
| | | buffer.append("\" security=\""); |
| | | if (isSecure()) |
| | | { |
| | | buffer.append(activeProvider.getName()); |
| | | if (tlsActiveProvider != null) |
| | | { |
| | | buffer.append(tlsActiveProvider.getName()); |
| | | } |
| | | if (saslActiveProvider != null) |
| | | { |
| | | if (tlsActiveProvider != null) |
| | | { |
| | | buffer.append(","); |
| | | } |
| | | buffer.append(saslActiveProvider.getName()); |
| | | } |
| | | } |
| | | else |
| | | { |
| | |
| | | @Override |
| | | public boolean prepareTLS(MessageBuilder unavailableReason) |
| | | { |
| | | if (isSecure() && "TLS".equals(activeProvider.getName())) |
| | | if (tlsActiveProvider != null) |
| | | { |
| | | unavailableReason.append(ERR_LDAP_TLS_EXISTING_SECURITY_PROVIDER |
| | | .get(activeProvider.getName())); |
| | | .get(tlsActiveProvider.getName())); |
| | | return false; |
| | | } |
| | | // Make sure that the connection handler allows the use of the |
| | |
| | | */ |
| | | private void enableTLS() |
| | | { |
| | | activeProvider = tlsPendingProvider; |
| | | tlsActiveProvider = tlsPendingProvider; |
| | | tlsChannel.redirect(tlsPendingProvider); |
| | | tlsPendingProvider = null; |
| | | } |
| | |
| | | */ |
| | | private void enableSSL(ConnectionSecurityProvider sslProvider) |
| | | { |
| | | activeProvider = sslProvider; |
| | | tlsActiveProvider = sslProvider; |
| | | tlsChannel.redirect(sslProvider); |
| | | } |
| | | |
| | |
| | | */ |
| | | private void enableSASL() |
| | | { |
| | | activeProvider = saslPendingProvider; |
| | | saslActiveProvider = saslPendingProvider; |
| | | saslChannel.redirect(saslPendingProvider); |
| | | saslPendingProvider = null; |
| | | } |
| | |
| | | */ |
| | | public Certificate[] getClientCertificateChain() |
| | | { |
| | | if (activeProvider != null) |
| | | if (tlsActiveProvider != null) |
| | | { |
| | | return activeProvider.getClientCertificateChain(); |
| | | return tlsActiveProvider.getClientCertificateChain(); |
| | | } |
| | | else |
| | | return new Certificate[0]; |
| | | if (saslActiveProvider != null) |
| | | { |
| | | return saslActiveProvider.getClientCertificateChain(); |
| | | } |
| | | return new Certificate[0]; |
| | | } |
| | | |
| | | |
| | |
| | | @Override |
| | | public int getSSF() |
| | | { |
| | | if (activeProvider != null) |
| | | return activeProvider.getSSF(); |
| | | else |
| | | return 0; |
| | | int tlsSSF = tlsActiveProvider != null ? tlsActiveProvider.getSSF() : 0; |
| | | int saslSSF = saslActiveProvider != null ? saslActiveProvider.getSSF() : 0; |
| | | return Math.max(tlsSSF, saslSSF); |
| | | } |
| | | |
| | | |