You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by jb...@apache.org on 2017/12/15 01:45:21 UTC

[1/2] activemq-artemis git commit: [ARTEMIS-1552] ensure gssapi sasl mech can deal with empty receive buffer

Repository: activemq-artemis
Updated Branches:
  refs/heads/master dec4a1b4d -> a3e3adf89


[ARTEMIS-1552] ensure gssapi sasl mech can deal with empty receive buffer


Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/b62e9875
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/b62e9875
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/b62e9875

Branch: refs/heads/master
Commit: b62e9875fed987f341b946082f4e28866e54b979
Parents: dec4a1b
Author: gtully <ga...@gmail.com>
Authored: Tue Dec 12 14:04:06 2017 +0000
Committer: Justin Bertram <jb...@apache.org>
Committed: Thu Dec 14 19:45:04 2017 -0600

----------------------------------------------------------------------
 .../protocol/amqp/sasl/GSSAPIServerSASL.java    |  5 +-
 .../integration/amqp/JMSSaslGssapiTest.java     | 97 ++++++++++++++++++++
 2 files changed, 101 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b62e9875/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/sasl/GSSAPIServerSASL.java
----------------------------------------------------------------------
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/sasl/GSSAPIServerSASL.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/sasl/GSSAPIServerSASL.java
index e89d548..c9b43fe 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/sasl/GSSAPIServerSASL.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/sasl/GSSAPIServerSASL.java
@@ -74,7 +74,10 @@ public class GSSAPIServerSASL implements ServerSASL {
             }));
          }
 
-         byte[] challenge = Subject.doAs(jaasId, (PrivilegedExceptionAction<byte[]>) () -> saslServer.evaluateResponse(bytes));
+         byte[] challenge = null;
+         if (bytes.length > 0) {
+            challenge = Subject.doAs(jaasId, (PrivilegedExceptionAction<byte[]>) () -> saslServer.evaluateResponse(bytes));
+         }
          if (saslServer.isComplete()) {
             result = new GSSAPISASLResult(true, new KerberosPrincipal(saslServer.getAuthorizationID()));
          }

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b62e9875/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/JMSSaslGssapiTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/JMSSaslGssapiTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/JMSSaslGssapiTest.java
index d66c83d..5a93154 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/JMSSaslGssapiTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/JMSSaslGssapiTest.java
@@ -25,16 +25,34 @@ import javax.jms.TextMessage;
 import java.io.File;
 import java.net.URI;
 import java.net.URL;
+import java.util.Collections;
 import java.util.HashSet;
+import java.util.LinkedHashMap;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
 
+import org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnector;
+import org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants;
 import org.apache.activemq.artemis.core.security.Role;
 import org.apache.activemq.artemis.core.server.ActiveMQServer;
+import org.apache.activemq.artemis.protocol.amqp.broker.ProtonProtocolManagerFactory;
+import org.apache.activemq.artemis.protocol.amqp.client.AMQPClientConnectionFactory;
+import org.apache.activemq.artemis.protocol.amqp.client.ProtonClientConnectionManager;
+import org.apache.activemq.artemis.protocol.amqp.client.ProtonClientProtocolManager;
+import org.apache.activemq.artemis.protocol.amqp.proton.handler.EventHandler;
+import org.apache.activemq.artemis.protocol.amqp.proton.handler.ProtonHandler;
+import org.apache.activemq.artemis.protocol.amqp.sasl.ClientSASL;
+import org.apache.activemq.artemis.protocol.amqp.sasl.ClientSASLFactory;
 import org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager;
+import org.apache.activemq.artemis.tests.util.Wait;
 import org.apache.activemq.artemis.utils.RandomUtil;
 import org.apache.hadoop.minikdc.MiniKdc;
 import org.apache.qpid.jms.JmsConnectionFactory;
+import org.apache.qpid.jms.sasl.GssapiMechanism;
+import org.apache.qpid.proton.amqp.Symbol;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -164,4 +182,83 @@ public class JMSSaslGssapiTest extends JMSClientTestSupport {
          assertTrue(expected.getMessage().contains("SASL"));
       }
    }
+
+   @Test
+   public void testOutboundWithSlowMech() throws Exception {
+      final Map<String, Object> config = new LinkedHashMap<>(); config.put(TransportConstants.HOST_PROP_NAME, "localhost");
+      config.put(TransportConstants.PORT_PROP_NAME, String.valueOf(AMQP_PORT));
+      final ClientSASLFactory clientSASLFactory = new ClientSASLFactory() {
+         @Override
+         public ClientSASL chooseMechanism(String[] availableMechanims) {
+            GssapiMechanism gssapiMechanism = new GssapiMechanism();
+            return new ClientSASL() {
+               @Override
+               public String getName() {
+                  return gssapiMechanism.getName();
+               }
+
+               @Override
+               public byte[] getInitialResponse() {
+                  gssapiMechanism.setUsername("client");
+                  gssapiMechanism.setServerName("localhost");
+                  try {
+                     return gssapiMechanism.getInitialResponse();
+                  } catch (Exception e) {
+                     e.printStackTrace();
+                  }
+                  return new byte[0];
+               }
+
+               @Override
+               public byte[] getResponse(byte[] challenge) {
+                  try {
+                     // simulate a slow client
+                     TimeUnit.SECONDS.sleep(4);
+                  } catch (InterruptedException e) {
+                     e.printStackTrace();
+                  }
+                  try {
+                     return gssapiMechanism.getChallengeResponse(challenge);
+                  } catch (Exception e) {
+                     e.printStackTrace();
+                  }
+                  return new byte[0];
+               }
+            };
+         }
+      };
+
+      final AtomicBoolean connectionOpened = new AtomicBoolean();
+      final AtomicBoolean authFailed = new AtomicBoolean();
+
+      EventHandler eventHandler = new EventHandler() {
+         @Override
+         public void onRemoteOpen(org.apache.qpid.proton.engine.Connection connection) throws Exception {
+            connectionOpened.set(true);
+         }
+
+         @Override
+         public void onAuthFailed(ProtonHandler protonHandler, org.apache.qpid.proton.engine.Connection connection) {
+            authFailed.set(true);
+         }
+      };
+
+      ProtonClientConnectionManager lifeCycleListener = new ProtonClientConnectionManager(new AMQPClientConnectionFactory(server, "myid", Collections.singletonMap(Symbol.getSymbol("myprop"), "propvalue"), 5000), Optional.of(eventHandler), clientSASLFactory);
+      ProtonClientProtocolManager protocolManager = new ProtonClientProtocolManager(new ProtonProtocolManagerFactory(), server);
+      NettyConnector connector = new NettyConnector(config, lifeCycleListener, lifeCycleListener, server.getExecutorFactory().getExecutor(), server.getExecutorFactory().getExecutor(), server.getScheduledPool(), protocolManager);
+      connector.start();
+      connector.createConnection();
+
+      try {
+         Wait.assertEquals(1, server::getConnectionCount);
+         Wait.assertTrue(connectionOpened::get);
+         Wait.assertFalse(authFailed::get);
+
+         lifeCycleListener.stop();
+
+         Wait.assertEquals(0, server::getConnectionCount);
+      } finally {
+         lifeCycleListener.stop();
+      }
+   }
 }


[2/2] activemq-artemis git commit: This closes #1703

Posted by jb...@apache.org.
This closes #1703


Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/a3e3adf8
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/a3e3adf8
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/a3e3adf8

Branch: refs/heads/master
Commit: a3e3adf894985e793b753877b01151aee5d653c7
Parents: dec4a1b b62e987
Author: Justin Bertram <jb...@apache.org>
Authored: Thu Dec 14 19:45:05 2017 -0600
Committer: Justin Bertram <jb...@apache.org>
Committed: Thu Dec 14 19:45:05 2017 -0600

----------------------------------------------------------------------
 .../protocol/amqp/sasl/GSSAPIServerSASL.java    |  5 +-
 .../integration/amqp/JMSSaslGssapiTest.java     | 97 ++++++++++++++++++++
 2 files changed, 101 insertions(+), 1 deletion(-)
----------------------------------------------------------------------