You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2017/07/19 07:39:42 UTC
[4/4] qpid-broker-j git commit: QPID-7787: [Java Broker] Allow the
use of AMQP 1.0 SaslOutcome to additional data to carry SASL final message
QPID-7787: [Java Broker] Allow the use of AMQP 1.0 SaslOutcome to additional data to carry SASL final message
The current default is to have the final message carried by a Challenge (i.e. unchanged). This will be flipped once ProtonJ/Qpid JMS Client are released.
Based on original work of rgodfrey <rg...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/83eb7add
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/83eb7add
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/83eb7add
Branch: refs/heads/master
Commit: 83eb7addddab25223bd19ed5c97cdad1a8ea178d
Parents: 8c18550
Author: Keith Wall <ke...@gmail.com>
Authored: Wed Jul 12 16:11:45 2017 +0100
Committer: Keith Wall <ke...@gmail.com>
Committed: Wed Jul 19 08:38:59 2017 +0100
----------------------------------------------------------------------
.../protocol/v1_0/AMQPConnection_1_0.java | 7 +++++
.../protocol/v1_0/AMQPConnection_1_0Impl.java | 32 +++++++++++++++-----
2 files changed, 32 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/83eb7add/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java
index 390b227..f80696e 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java
@@ -49,6 +49,10 @@ public interface AMQPConnection_1_0<C extends AMQPConnection_1_0<C>> extends AMQ
@ManagedContextDefault(name = CONNECTION_SESSION_CREDIT_WINDOW_SIZE)
int DEFAULT_CONNECTION_SESSION_CREDIT_WINDOW_SIZE = 8192;
+ String SEND_SASL_FINAL_CHALLENGE_AS_CHALLENGE = "connection.sendSaslFinalResponseAsChallenge";
+ @ManagedContextDefault(name = SEND_SASL_FINAL_CHALLENGE_AS_CHALLENGE)
+ boolean DEFAULT_SEND_SASL_FINAL_CHALLENGE_AS_CHALLENGE = true;
+
Symbol ANONYMOUS_RELAY = Symbol.valueOf("ANONYMOUS-RELAY");
Symbol SHARED_SUBSCRIPTIONS = Symbol.valueOf("SHARED-SUBS");
@@ -85,4 +89,7 @@ public interface AMQPConnection_1_0<C extends AMQPConnection_1_0<C>> extends AMQ
IdentifiedTransaction createIdentifiedTransaction();
ServerTransaction getTransaction(int txnId);
void removeTransaction(int txnId);
+
+ @DerivedAttribute(description = "If true send a final SASL challenge using a SaslChallenge performative, rather than SaslOutcome.")
+ boolean getSendSaslFinalChallengeAsChallenge();
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/83eb7add/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0Impl.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0Impl.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0Impl.java
index 1cbce38..32578a3 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0Impl.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0Impl.java
@@ -238,6 +238,7 @@ public class AMQPConnection_1_0Impl extends AbstractAMQPConnection<AMQPConnectio
// Multi session transactions
private volatile ServerTransaction[] _openTransactions = new ServerTransaction[16];
+ private volatile boolean _sendSaslFinalChallengeAsChallenge;
AMQPConnection_1_0Impl(final Broker<?> broker,
final ServerNetworkConnection network,
@@ -269,6 +270,13 @@ public class AMQPConnection_1_0Impl extends AbstractAMQPConnection<AMQPConnectio
}
@Override
+ protected void onOpen()
+ {
+ super.onOpen();
+ _sendSaslFinalChallengeAsChallenge = getContextValue(Boolean.class, AMQPConnection_1_0.SEND_SASL_FINAL_CHALLENGE_AS_CHALLENGE);
+ }
+
+ @Override
public void receiveSaslInit(final SaslInit saslInit)
{
assertState(ConnectionState.AWAIT_SASL_INIT);
@@ -340,21 +348,26 @@ public class AMQPConnection_1_0Impl extends AbstractAMQPConnection<AMQPConnectio
if (authenticationResult.getStatus() == AuthenticationResult.AuthenticationStatus.SUCCESS)
{
- _successfulAuthenticationResult = authenticationResult;
- if (challenge == null || challenge.length == 0)
+ final boolean finalChallenge = challenge != null && challenge.length != 0;
+ if (_sendSaslFinalChallengeAsChallenge && finalChallenge)
+ {
+ continueSaslNegotiation(challenge);
+ }
+ else
{
+ _successfulAuthenticationResult = authenticationResult;
setSubject(_successfulAuthenticationResult.getSubject());
SaslOutcome outcome = new SaslOutcome();
outcome.setCode(SaslCode.OK);
+ if (finalChallenge)
+ {
+ outcome.setAdditionalData(new Binary(challenge));
+ }
send(new SASLFrame(outcome), null);
_saslComplete = true;
_connectionState = ConnectionState.AWAIT_AMQP_HEADER;
disposeSaslNegotiator();
}
- else
- {
- continueSaslNegotiation(challenge);
- }
}
else if(authenticationResult.getStatus() == AuthenticationResult.AuthenticationStatus.CONTINUE)
{
@@ -1650,6 +1663,12 @@ public class AMQPConnection_1_0Impl extends AbstractAMQPConnection<AMQPConnectio
}
@Override
+ public boolean getSendSaslFinalChallengeAsChallenge()
+ {
+ return _sendSaslFinalChallengeAsChallenge;
+ }
+
+ @Override
protected void addAsyncTask(final Action<? super ConnectionHandler> action)
{
_asyncTaskList.add(action);
@@ -1727,7 +1746,6 @@ public class AMQPConnection_1_0Impl extends AbstractAMQPConnection<AMQPConnectio
}
}
-
private class ProcessPendingIterator implements Iterator<Runnable>
{
private Iterator<? extends AMQPSession<?,?>> _sessionIterator;
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org