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