diff options
| author | Robert Gemmell <robbie@apache.org> | 2014-01-11 21:22:51 +0000 |
|---|---|---|
| committer | Robert Gemmell <robbie@apache.org> | 2014-01-11 21:22:51 +0000 |
| commit | 7e6c487fdfebe029b36dc7be0e3e06e99a1b7033 (patch) | |
| tree | 8e629d8eadb6262520acaf50353ca331154c20b5 /qpid/java/broker-core | |
| parent | 779f500156ed6ec8a3654bdf10e5e2f64d7e93ac (diff) | |
| download | qpid-python-7e6c487fdfebe029b36dc7be0e3e06e99a1b7033.tar.gz | |
QPID-5373: move retrieval of the peer Principal into the connection IO thread, retrieving from the NetworkConnection during the AMQP handshak after the SSL handshake must have already been completed.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1557467 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/broker-core')
| -rwxr-xr-x | qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngine.java | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngine.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngine.java index b2b585f692..01b220fd79 100755 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngine.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngine.java @@ -30,6 +30,8 @@ import java.util.Set; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLEngine; import javax.net.ssl.SSLPeerUnverifiedException; +import javax.net.ssl.SSLSocket; + import org.apache.log4j.Logger; import org.apache.qpid.protocol.ServerProtocolEngine; import org.apache.qpid.server.logging.actors.CurrentActor; @@ -144,11 +146,6 @@ public class MultiVersionProtocolEngine implements ServerProtocolEngine private static final int MINIMUM_REQUIRED_HEADER_BYTES = 8; - public void setNetworkConnection(NetworkConnection networkConnection) - { - setNetworkConnection(networkConnection, networkConnection.getSender()); - } - public void setNetworkConnection(NetworkConnection network, Sender<ByteBuffer> sender) { _network = network; @@ -477,7 +474,7 @@ public class MultiVersionProtocolEngine implements ServerProtocolEngine SSLStatus sslStatus = new SSLStatus(); _sslReceiver = new SSLReceiver(_engine,_decryptEngine,sslStatus); _sslSender = new SSLBufferingSender(_engine,_sender,sslStatus); - _decryptEngine.setNetworkConnection(new SSLNetworkConnection(_engine,_network, _sslSender)); + _decryptEngine.setNetworkConnection(new SSLNetworkConnection(_engine,_network, _sslSender), _sslSender); } @Override @@ -594,6 +591,9 @@ public class MultiVersionProtocolEngine implements ServerProtocolEngine private final NetworkConnection _network; private final SSLBufferingSender _sslSender; private final SSLEngine _engine; + private Principal _principal; + private boolean _principalChecked; + private final Object _lock = new Object(); public SSLNetworkConnection(SSLEngine engine, NetworkConnection network, SSLBufferingSender sslSender) @@ -649,21 +649,25 @@ public class MultiVersionProtocolEngine implements ServerProtocolEngine } @Override - public void setPeerPrincipal(Principal principal) - { - _network.setPeerPrincipal(principal); - } - - @Override public Principal getPeerPrincipal() { - try + synchronized (_lock) { - return _engine.getSession().getPeerPrincipal(); - } - catch (SSLPeerUnverifiedException e) - { - return null; + if(!_principalChecked) + { + try + { + _principal = _engine.getSession().getPeerPrincipal(); + } + catch (SSLPeerUnverifiedException e) + { + _principal = null; + } + + _principalChecked = true; + } + + return _principal; } } |
