Author: ritchiem
Date: Fri Oct 24 08:43:03 2008
New Revision: 707658

URL: http://svn.apache.org/viewvc?rev=707658&view=rev
Log:
QPID-1393 : Registration of JCAProvider is incorrect in client and broker SASL 
configurations

Modified:
    incubator/qpid/trunk/qpid/java/08ExcludeList-nonvm
    
incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java
    
incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/JCAProvider.java
    
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/security/CallbackHandlerRegistry.properties
    
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/security/DynamicSaslRegistrar.java
    
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/security/JCAProvider.java
    
incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/security/acl/SimpleACLTest.java

Modified: incubator/qpid/trunk/qpid/java/08ExcludeList-nonvm
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/08ExcludeList-nonvm?rev=707658&r1=707657&r2=707658&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/08ExcludeList-nonvm (original)
+++ incubator/qpid/trunk/qpid/java/08ExcludeList-nonvm Fri Oct 24 08:43:03 2008
@@ -26,7 +26,7 @@
 // InVM Broker tests awaiting resolution of QPID-1103
 org.apache.qpid.test.client.timeouts.SyncWaitDelayTest#*
 org.apache.qpid.test.client.timeouts.SyncWaitTimeoutDelayTest#*
-org.apache.qpid.server.security.acl.SimpleACLTest#
+org.apache.qpid.server.security.acl.SimpleACLTest#*
 
 // Those tests are written against the 0.10 path
 org.apache.qpid.test.unit.message.UTF8Test#*

Modified: 
incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java?rev=707658&r1=707657&r2=707658&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java
 Fri Oct 24 08:43:03 2008
@@ -23,9 +23,7 @@
 import org.apache.log4j.Logger;
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.SubsetConfiguration;
 import org.apache.qpid.server.registry.ApplicationRegistry;
-import org.apache.qpid.server.virtualhost.VirtualHost;
 import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
 import org.apache.qpid.server.security.auth.database.PrincipalDatabase;
 import org.apache.qpid.server.security.auth.sasl.JCAProvider;
@@ -59,6 +57,8 @@
     private Map<String, Map<String, ?>> _serverCreationProperties = new 
HashMap<String, Map<String, ?>>();
 
     private AuthenticationManager _default = null;
+    /** The name for the required SASL Server mechanisms */
+    public static final String PROVIDER_NAME= "AMQSASLProvider-Server";
 
     public PrincipalDatabaseAuthenticationManager(String name, Configuration 
hostConfig) throws Exception
     {
@@ -101,10 +101,15 @@
         if (providerMap.size() > 0)
         {
             // Ensure we are used before the defaults
-            if (Security.insertProviderAt(new JCAProvider(providerMap), 1) == 
-1)
+            if (Security.insertProviderAt(new JCAProvider(PROVIDER_NAME, 
providerMap), 1) == -1)
             {
-                _logger.warn("Unable to set order of providers.");
+                _logger.error("Unable to load custom SASL providers. Qpid 
custom SASL authenticators unavailable.");
             }
+            else
+            {
+                _logger.info("Additional SASL providers successfully 
registered.");
+            }
+
         }
         else
         {

Modified: 
incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/JCAProvider.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/JCAProvider.java?rev=707658&r1=707657&r2=707658&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/JCAProvider.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/JCAProvider.java
 Fri Oct 24 08:43:03 2008
@@ -28,12 +28,11 @@
 
 public final class JCAProvider extends Provider
 {
-    public JCAProvider(Map<String, Class<? extends SaslServerFactory>> 
providerMap)
+    public JCAProvider(String name, Map<String, Class<? extends 
SaslServerFactory>> providerMap)
     {
-        super("AMQSASLProvider", 1.0, "A JCA provider that registers all " +
+        super(name, 1.0, "A JCA provider that registers all " +
               "AMQ SASL providers that want to be registered");
         register(providerMap);
-        //Security.addProvider(this);
     }
 
     private void register(Map<String, Class<? extends SaslServerFactory>> 
providerMap)

Modified: 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/security/CallbackHandlerRegistry.properties
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/security/CallbackHandlerRegistry.properties?rev=707658&r1=707657&r2=707658&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/security/CallbackHandlerRegistry.properties
 (original)
+++ 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/security/CallbackHandlerRegistry.properties
 Fri Oct 24 08:43:03 2008
@@ -18,4 +18,5 @@
 #
 
CallbackHandler.CRAM-MD5-HASHED=org.apache.qpid.client.security.UsernameHashedPasswordCallbackHandler
 
CallbackHandler.CRAM-MD5=org.apache.qpid.client.security.UsernamePasswordCallbackHandler
+CallbackHandler.AMQPLAIN=org.apache.qpid.client.security.UsernamePasswordCallbackHandler
 
CallbackHandler.PLAIN=org.apache.qpid.client.security.UsernamePasswordCallbackHandler

Modified: 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/security/DynamicSaslRegistrar.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/security/DynamicSaslRegistrar.java?rev=707658&r1=707657&r2=707658&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/security/DynamicSaslRegistrar.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/security/DynamicSaslRegistrar.java
 Fri Oct 24 08:43:03 2008
@@ -85,8 +85,19 @@
 
             if (factories.size() > 0)
             {
-                Security.insertProviderAt(new JCAProvider(factories), 0);
-                _logger.debug("Dynamic SASL provider added as a security 
provider");
+                // Ensure we are used before the defaults
+                if (Security.insertProviderAt(new JCAProvider(factories), 1) 
== -1)
+                {
+                    _logger.error("Unable to load custom SASL providers.");
+                }
+                else
+                {
+                    _logger.info("Additional SASL providers successfully 
registered.");
+                }
+            }
+            else
+            {
+                _logger.warn("No additional SASL providers registered.");
             }
         }
         catch (IOException e)
@@ -185,6 +196,7 @@
                     continue;
                 }
 
+                _logger.debug("Registering class "+ clazz.getName() +" for 
mechanism "+mechanism);
                 factoriesToRegister.put(mechanism, (Class<? extends 
SaslClientFactory>) clazz);
             }
             catch (Exception ex)

Modified: 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/security/JCAProvider.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/security/JCAProvider.java?rev=707658&r1=707657&r2=707658&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/security/JCAProvider.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/security/JCAProvider.java
 Fri Oct 24 08:43:03 2008
@@ -26,6 +26,7 @@
 import javax.security.sasl.SaslClientFactory;
 
 import java.security.Provider;
+import java.security.Security;
 import java.util.Map;
 
 /**
@@ -49,10 +50,10 @@
      */
     public JCAProvider(Map<String, Class<? extends SaslClientFactory>> 
providerMap)
     {
-        super("AMQSASLProvider", 1.0, "A JCA provider that registers all "
+        super("AMQSASLProvider-Client", 1.0, "A JCA provider that registers 
all "
             + "AMQ SASL providers that want to be registered");
         register(providerMap);
-        // Security.addProvider(this);
+//        Security.addProvider(this);
     }
 
     /**
@@ -64,7 +65,7 @@
     {
         for (Map.Entry<String, Class<? extends SaslClientFactory>> me : 
providerMap.entrySet())
         {
-            put("SaslClientFactory." + me.getKey(), me.getValue().getName());
+            put( "SaslClientFactory."+me.getKey(), me.getValue().getName());
             log.debug("Registered SASL Client factory for " + me.getKey() + " 
as " + me.getValue().getName());
         }
     }

Modified: 
incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/security/acl/SimpleACLTest.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/security/acl/SimpleACLTest.java?rev=707658&r1=707657&r2=707658&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/security/acl/SimpleACLTest.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/security/acl/SimpleACLTest.java
 Fri Oct 24 08:43:03 2008
@@ -4,7 +4,7 @@
  *  distributed with this work for additional information
  *  regarding copyright ownership.  The ASF licenses this file
  *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
+*  "License"); you may not use this file except in compliance
  *  with the License.  You may obtain a copy of the License at
  *
  *    http://www.apache.org/licenses/LICENSE-2.0
@@ -62,6 +62,9 @@
 
         ConfigurationFileApplicationRegistry config = new 
ConfigurationFileApplicationRegistry(defaultaclConfigFile);
 
+        // This is a bit evil it should be updated with QPID-1103
+        config.getConfiguration().setProperty("management.enabled", "false");
+
         ApplicationRegistry.initialise(config, 1);
 
         TransportConnection.createVMBroker(1);
@@ -69,8 +72,8 @@
 
     public void tearDown()
     {
-        ApplicationRegistry.remove(1);
         TransportConnection.killAllVMBrokers();
+        ApplicationRegistry.remove(1);
     }
 
     public String createConnectionString(String username, String password, 
String broker)
@@ -83,7 +86,7 @@
     {
         try
         {
-            Connection conn = new 
AMQConnection(createConnectionString("client", "guest", BROKER));
+            Connection conn = createConnection("client", "guest");
 
             Session sesh = conn.createSession(true, 
Session.SESSION_TRANSACTED);
 
@@ -104,7 +107,7 @@
     {
         try
         {
-            Connection conn = new 
AMQConnection(createConnectionString("guest", "guest", BROKER));
+            Connection conn = createConnection("guest", "guest");
 
             //Attempt to do do things to test connection.
             Session sesh = conn.createSession(true, 
Session.SESSION_TRANSACTED);
@@ -126,7 +129,7 @@
     {
         try
         {
-            Connection conn = new 
AMQConnection(createConnectionString("client", "guest", BROKER));
+            Connection conn = createConnection("client", "guest");
 
             Session sesh = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
 
@@ -146,7 +149,7 @@
     {
         try
         {
-            Connection conn = new 
AMQConnection(createConnectionString("client", "guest", BROKER));
+            Connection conn = createConnection("client", "guest");
 
             //Prevent Failover
             ((AMQConnection) conn).setConnectionListener(this);
@@ -173,7 +176,7 @@
     {
         try
         {
-            Connection conn = new 
AMQConnection(createConnectionString("client", "guest", BROKER));
+            Connection conn = createConnection("client", "guest");
 
             Session sesh = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
 
@@ -195,7 +198,7 @@
     {
         try
         {
-            Connection conn = new 
AMQConnection(createConnectionString("client", "guest", BROKER));
+            Connection conn = createConnection("client", "guest");
 
             Session sesh = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
 
@@ -217,7 +220,7 @@
     {
         try
         {
-            Connection conn = new 
AMQConnection(createConnectionString("client", "guest", BROKER));
+            Connection conn = createConnection("client", "guest");
 
             ((AMQConnection) conn).setConnectionListener(this);
 
@@ -244,7 +247,7 @@
     {
         try
         {
-            Connection conn = new 
AMQConnection(createConnectionString("client", "guest", BROKER));
+            Connection conn = createConnection("client", "guest");
 
             ((AMQConnection) conn).setConnectionListener(this);
 
@@ -274,7 +277,7 @@
     {
         try
         {
-            Connection conn = new 
AMQConnection(createConnectionString("client", "guest", BROKER));
+            Connection conn = createConnection("client", "guest");
 
             ((AMQConnection) conn).setConnectionListener(this);
 
@@ -319,7 +322,7 @@
     {
         try
         {
-            Connection conn = new 
AMQConnection(createConnectionString("server", "guest", BROKER));
+            Connection conn = createConnection("server", "guest");
 
             Session sesh = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
 
@@ -338,8 +341,8 @@
     public void testServerConsumeFromNamedQueueInvalid() throws AMQException, 
URLSyntaxException
     {
         try
-        {
-            Connection conn = new 
AMQConnection(createConnectionString("client", "guest", BROKER));
+        {                                                      
+            Connection conn = createConnection("client", "guest");
 
             Session sesh = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
 
@@ -364,10 +367,7 @@
     {
         try
         {
-            Connection conn = new 
AMQConnection(createConnectionString("server", "guest", BROKER));
-
-            //Prevent Failover
-            ((AMQConnection) conn).setConnectionListener(this);
+            Connection conn = createConnection("server","guest");
 
             Session sesh = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
 
@@ -387,11 +387,30 @@
         }
     }
 
+    private Connection createConnection(String username, String password) 
throws AMQException
+    {
+        AMQConnection connection = null;
+        try
+        {
+            connection = new AMQConnection(createConnectionString(username, 
password, BROKER));
+        }
+        catch (URLSyntaxException e)
+        {
+            // This should never happen as we generate the URLs.
+            fail(e.getMessage());
+        }
+
+        //Prevent Failover
+        connection.setConnectionListener(this);
+
+        return (Connection)connection;
+    }
+
     public void testServerCreateNamedQueueValid() throws JMSException, 
URLSyntaxException
     {
         try
         {
-            Connection conn = new 
AMQConnection(createConnectionString("server", "guest", BROKER));
+            Connection conn = createConnection("server", "guest");
 
             Session sesh = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
 
@@ -412,7 +431,7 @@
     {
         try
         {
-            Connection conn = new 
AMQConnection(createConnectionString("server", "guest", BROKER));
+            Connection conn = createConnection("server", "guest");
 
             Session sesh = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
 
@@ -434,7 +453,7 @@
     {
         try
         {
-            Connection conn = new 
AMQConnection(createConnectionString("server", "guest", BROKER));
+            Connection conn = createConnection("server", "guest");
 
             Session session = conn.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
 
@@ -457,24 +476,25 @@
 
     public void testServerCreateAutoDeleteQueueInvalid() throws JMSException, 
URLSyntaxException, AMQException
     {
+        Connection connection = null;
         try
         {
-            Connection conn = new 
AMQConnection(createConnectionString("server", "guest", BROKER));
+            connection = createConnection("server", "guest");
 
-            Session sesh = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+            Session session = connection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
 
-            conn.start();
+            connection.start();
 
-            ((AMQSession) sesh).createQueue(new 
AMQShortString("again_ensure_auto_delete_queue_for_temporary"),
+            ((AMQSession) session).createQueue(new 
AMQShortString("again_ensure_auto_delete_queue_for_temporary"),
                                             true, false, false);
 
             fail("Test failed as creation succeded.");
-            //conn will be automatically closed
+            //connection will be automatically closed
         }
         catch (AMQAuthenticationException amqe)
         {
             assertEquals("Incorrect error code thrown", 403, 
amqe.getErrorCode().getCode());
-        }
+        }       
     }
 
     /**
@@ -488,7 +508,7 @@
     public void testServerPublishUsingTransactionSuccess() throws 
AMQException, URLSyntaxException, JMSException
     {
         //Set up the Server
-        Connection serverConnection = new 
AMQConnection(createConnectionString("server", "guest", BROKER));
+        Connection serverConnection = createConnection("server", "guest");
 
         ((AMQConnection) serverConnection).setConnectionListener(this);
 
@@ -501,7 +521,7 @@
         serverConnection.start();
 
         //Set up the consumer
-        Connection clientConnection = new 
AMQConnection(createConnectionString("client", "guest", BROKER));
+        Connection clientConnection = createConnection("client", "guest");
 
         //Send a test mesage
         Session clientSession = clientConnection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
@@ -542,26 +562,36 @@
             //Send the message using a transaction as this will allow us to 
retrieve any errors that occur on the broker.
             serverSession.commit();
 
-            serverConnection.close();
+
 
             //Ensure Response is received.
             Message clientResponseMsg = clientResponse.receive(2000);
             assertNotNull("Client did not receive response message,", 
clientResponseMsg);
             assertEquals("Incorrect message received", "Response", 
((TextMessage) clientResponseMsg).getText());
 
-            clientConnection.close();
         }
         catch (Exception e)
         {
             fail("Test publish failed:" + e);
         }
+        finally
+        {
+            try
+            {
+                serverConnection.close();
+            }
+            finally
+            {
+                clientConnection.close();
+            }
+        }
     }
 
     public void testServerPublishInvalidQueueSuccess() throws AMQException, 
URLSyntaxException, JMSException
     {
         try
         {
-            Connection conn = new 
AMQConnection(createConnectionString("server", "guest", BROKER));
+            Connection conn = createConnection("server", "guest");
 
             ((AMQConnection) conn).setConnectionListener(this);
 


Reply via email to