summaryrefslogtreecommitdiff
path: root/qpid/java/broker-core
diff options
context:
space:
mode:
authorRobert Gemmell <robbie@apache.org>2014-01-11 21:22:51 +0000
committerRobert Gemmell <robbie@apache.org>2014-01-11 21:22:51 +0000
commit7e6c487fdfebe029b36dc7be0e3e06e99a1b7033 (patch)
tree8e629d8eadb6262520acaf50353ca331154c20b5 /qpid/java/broker-core
parent779f500156ed6ec8a3654bdf10e5e2f64d7e93ac (diff)
downloadqpid-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-xqpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngine.java40
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;
}
}