You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ri...@apache.org on 2007/03/16 15:46:44 UTC

svn commit: r518988 [2/2] - in /incubator/qpid/trunk/qpid/java: broker/etc/ broker/src/main/java/org/apache/qpid/server/handler/ broker/src/main/java/org/apache/qpid/server/protocol/ broker/src/main/java/org/apache/qpid/server/registry/ broker/src/main...

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PlainPasswordVhostFilePrincipalDatabase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PlainPasswordVhostFilePrincipalDatabase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PrincipalDatabase.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PrincipalDatabase.java?view=auto&rev=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PrincipalDatabase.java (added)
+++ incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PrincipalDatabase.java Fri Mar 16 07:46:42 2007
@@ -0,0 +1,50 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * 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
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.security.auth.database;
+
+import org.apache.qpid.server.security.auth.sasl.AuthenticationProviderInitialiser;
+
+import java.io.IOException;
+import java.security.Principal;
+import java.util.Map;
+
+import javax.security.auth.callback.PasswordCallback;
+import javax.security.auth.login.AccountNotFoundException;
+
+/** Represents a "user database" which is really a way of storing principals (i.e. usernames) and passwords. */
+public interface PrincipalDatabase
+{
+    /**
+     * Set the password for a given principal in the specified callback. This is used for certain SASL providers. The
+     * user database implementation should look up the password in any way it chooses and set it in the callback by
+     * calling its setPassword method.
+     *
+     * @param principal the principal
+     * @param callback  the password callback that wants to receive the password
+     *
+     * @throws AccountNotFoundException if the account for specified principal could not be found
+     * @throws IOException              if there was an error looking up the principal
+     */
+    void setPassword(Principal principal, PasswordCallback callback)
+            throws IOException, AccountNotFoundException;
+
+    public Map<String, AuthenticationProviderInitialiser> getMechanisms();
+}

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PrincipalDatabase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PrincipalDatabase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PrincipalDatabaseManager.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PrincipalDatabaseManager.java?view=auto&rev=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PrincipalDatabaseManager.java (added)
+++ incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PrincipalDatabaseManager.java Fri Mar 16 07:46:42 2007
@@ -0,0 +1,30 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  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
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.    
+ *
+ * 
+ */
+package org.apache.qpid.server.security.auth.database;
+
+import org.apache.qpid.server.security.auth.database.PrincipalDatabase;
+
+import java.util.Map;
+
+public interface PrincipalDatabaseManager
+{
+    public Map<String, PrincipalDatabase> getDatabases();
+}

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PrincipalDatabaseManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PrincipalDatabaseManager.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PropertiesPrincipalDatabase.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PropertiesPrincipalDatabase.java?view=auto&rev=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PropertiesPrincipalDatabase.java (added)
+++ incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PropertiesPrincipalDatabase.java Fri Mar 16 07:46:42 2007
@@ -0,0 +1,83 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  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
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.    
+ *
+ * 
+ */
+package org.apache.qpid.server.security.auth.database;
+
+import org.apache.qpid.server.security.auth.sasl.AuthenticationProviderInitialiser;
+import org.apache.qpid.server.security.auth.sasl.crammd5.CRAMMD5Initialiser;
+import org.apache.qpid.server.security.auth.sasl.plain.PlainInitialiser;
+
+import javax.security.auth.callback.PasswordCallback;
+import javax.security.auth.login.AccountNotFoundException;
+import java.util.Properties;
+import java.util.Map;
+import java.util.HashMap;
+import java.security.Principal;
+import java.io.IOException;
+
+public class PropertiesPrincipalDatabase implements PrincipalDatabase
+{
+    private Properties _users;
+
+    private Map<String, AuthenticationProviderInitialiser> _saslServers;
+
+    public PropertiesPrincipalDatabase(Properties users)
+    {
+        _users = users;
+
+        _saslServers = new HashMap<String, AuthenticationProviderInitialiser>();
+
+        /**
+         *  Create Authenticators for Properties Principal Database.
+         */
+
+        //  Accept MD5 incomming and use plain comparison with the file
+        PlainInitialiser cram = new PlainInitialiser();
+        cram.initialise(this);
+        // Accept Plain incomming and hash it for comparison to the file.
+        CRAMMD5Initialiser plain = new CRAMMD5Initialiser();
+        plain.initialise(this, CRAMMD5Initialiser.HashDirection.INCOMMING);
+
+        _saslServers.put(plain.getMechanismName(), cram);
+        _saslServers.put(cram.getMechanismName(), plain);
+    }
+
+    public void setPassword(Principal principal, PasswordCallback callback) throws IOException, AccountNotFoundException
+    {
+        if (principal == null)
+        {
+            throw new IllegalArgumentException("principal must not be null");
+        }
+        char[] pwd = _users.getProperty(principal.getName()).toCharArray();
+        if (pwd != null)
+        {
+            callback.setPassword(pwd);
+        }
+        else
+        {
+            throw new AccountNotFoundException("No account found for principal " + principal);
+        }
+    }
+
+    public Map<String, AuthenticationProviderInitialiser> getMechanisms()
+    {
+        return _saslServers;
+    }
+}

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PropertiesPrincipalDatabase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PropertiesPrincipalDatabase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PropertiesPrincipalDatabaseManager.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PropertiesPrincipalDatabaseManager.java?view=auto&rev=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PropertiesPrincipalDatabaseManager.java (added)
+++ incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PropertiesPrincipalDatabaseManager.java Fri Mar 16 07:46:42 2007
@@ -0,0 +1,41 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  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
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.    
+ *
+ * 
+ */
+package org.apache.qpid.server.security.auth.database;
+
+import java.util.Map;
+import java.util.Properties;
+import java.util.HashMap;
+
+public class PropertiesPrincipalDatabaseManager implements PrincipalDatabaseManager
+{
+
+    Map<String, PrincipalDatabase> _databases = new HashMap<String, PrincipalDatabase>();
+
+    public PropertiesPrincipalDatabaseManager(String name, Properties users)
+    {
+        _databases.put(name, new PropertiesPrincipalDatabase(users));
+    }
+
+    public Map<String, PrincipalDatabase> getDatabases()
+    {
+        return _databases;
+    }
+}

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PropertiesPrincipalDatabaseManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PropertiesPrincipalDatabaseManager.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/AuthenticationManager.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/AuthenticationManager.java?view=auto&rev=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/AuthenticationManager.java (added)
+++ incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/AuthenticationManager.java Fri Mar 16 07:46:42 2007
@@ -0,0 +1,37 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * 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
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.security.auth.manager;
+
+import org.apache.qpid.server.virtualhost.VirtualHost;
+import org.apache.qpid.server.security.auth.AuthenticationResult;
+
+import javax.security.sasl.SaslException;
+import javax.security.sasl.SaslServer;
+
+public interface AuthenticationManager
+{
+    String getMechanisms();
+
+    SaslServer createSaslServer(String mechanism, String localFQDN) throws SaslException;
+
+    AuthenticationResult authenticate(SaslServer server, byte[] response);
+
+}

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/AuthenticationManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/AuthenticationManager.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 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?view=auto&rev=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java (added)
+++ incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java Fri Mar 16 07:46:42 2007
@@ -0,0 +1,246 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  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
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.    
+ *
+ * 
+ */
+package org.apache.qpid.server.security.auth.manager;
+
+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;
+import org.apache.qpid.server.security.auth.sasl.AuthenticationProviderInitialiser;
+import org.apache.qpid.server.security.auth.AuthenticationResult;
+
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.sasl.SaslServerFactory;
+import javax.security.sasl.SaslServer;
+import javax.security.sasl.SaslException;
+import javax.security.sasl.Sasl;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.TreeMap;
+import java.security.Security;
+
+public class PrincipalDatabaseAuthenticationManager implements AuthenticationManager
+{
+    private static final Logger _logger = Logger.getLogger(PrincipalDatabaseAuthenticationManager.class);
+
+    /** The list of mechanisms, in the order in which they are configured (i.e. preferred order) */
+    private String _mechanisms;
+
+    /** Maps from the mechanism to the callback handler to use for handling those requests */
+    private Map<String, CallbackHandler> _callbackHandlerMap = new HashMap<String, CallbackHandler>();
+
+    /**
+     * Maps from the mechanism to the properties used to initialise the server. See the method Sasl.createSaslServer for
+     * details of the use of these properties. This map is populated during initialisation of each provider.
+     */
+    private Map<String, Map<String, ?>> _serverCreationProperties = new HashMap<String, Map<String, ?>>();
+
+    private AuthenticationManager _default = null;
+
+    public PrincipalDatabaseAuthenticationManager(String name, Configuration hostConfig) throws Exception
+    {
+        _logger.info("Initialising " + (name == null ? " Default" : "'" + name + "'")
+                     + " PrincipleDatabase authentication manager.");
+
+        // Fixme This should be done per Vhost but allowing global hack isn't right but ...
+        // required as authentication is done before Vhost selection
+
+        Map<String, Class<? extends SaslServerFactory>> providerMap = new TreeMap<String, Class<? extends SaslServerFactory>>();
+
+
+        if (name == null)
+        {
+            initialiseAuthenticationMechanisms(providerMap, ApplicationRegistry.getInstance().getDatabaseManager().getDatabases());
+        }
+        else
+        {
+            String databaseName = hostConfig.getString("security.authentication.name");
+
+            if (databaseName == null)
+            {
+
+                if (hostConfig instanceof SubsetConfiguration)
+                {
+                    _logger.warn("No authentication specified for '" + ((SubsetConfiguration) hostConfig).getPrefix() + "'. Using Default authentication manager");
+                }
+                else
+                {
+                    _logger.warn("No authentication specified. Using Default authentication manager");
+                }
+                _default = ApplicationRegistry.getInstance().getAuthenticationManager();
+                return;
+            }
+            else
+            {
+                PrincipalDatabase database = ApplicationRegistry.getInstance().getDatabaseManager().getDatabases().get(databaseName);
+
+                if (database == null)
+                {
+                    throw new ConfigurationException("Requested database:" + databaseName + " was not found");
+                }
+
+                initialiseAuthenticationMechanisms(providerMap, database);
+            }
+        }
+
+        if (providerMap.size() > 0)
+        {
+            Security.addProvider(new JCAProvider(providerMap));
+        }
+        else
+        {
+            _logger.warn("No SASL providers availble.");
+        }
+
+    }
+
+
+    private void initialiseAuthenticationMechanisms(Map<String, Class<? extends SaslServerFactory>> providerMap, Map<String, PrincipalDatabase> databases) throws Exception
+    {
+//        Configuration config = ApplicationRegistry.getInstance().getConfiguration();
+//        List<String> mechanisms = config.getList("security.sasl.mechanisms.mechanism.initialiser.class");
+//
+//        // Maps from the mechanism to the properties used to initialise the server. See the method
+//        // Sasl.createSaslServer for details of the use of these properties. This map is populated during initialisation
+//        // of each provider.
+
+
+        if (databases.size() > 1)
+        {
+            _logger.warn("More than one principle database provided currently authentication mechanism will override each other.");
+        }
+
+        for (Map.Entry<String, PrincipalDatabase> entry : databases.entrySet())
+        {
+
+            // fixme As the database now provide the mechanisms they support, they will ...
+            // overwrite each other in the map. There should only be one database per vhost.
+            // But currently we must have authentication before vhost definition.
+            initialiseAuthenticationMechanisms(providerMap, entry.getValue());
+        }
+
+    }
+
+    private void initialiseAuthenticationMechanisms(Map<String, Class<? extends SaslServerFactory>> providerMap, PrincipalDatabase database) throws Exception
+    {
+        if (database == null || database.getMechanisms().size() == 0)
+        {
+            _logger.warn("");
+            return;
+        }
+
+        for (AuthenticationProviderInitialiser mechanism : database.getMechanisms().values())
+        {
+            initialiseAuthenticationMechanism(mechanism, providerMap);
+        }
+    }
+
+    private void initialiseAuthenticationMechanism(AuthenticationProviderInitialiser initialiser,
+                                                   Map<String, Class<? extends SaslServerFactory>> providerMap)
+            throws Exception
+    {
+        String mechanism = initialiser.getMechanismName();
+        if (_mechanisms == null)
+        {
+            _mechanisms = mechanism;
+        }
+        else
+        {
+            // simple append should be fine since the number of mechanisms is small and this is a one time initialisation
+            _mechanisms = _mechanisms + " " + mechanism;
+        }
+        _callbackHandlerMap.put(mechanism, initialiser.getCallbackHandler());
+        _serverCreationProperties.put(mechanism, initialiser.getProperties());
+        Class<? extends SaslServerFactory> factory = initialiser.getServerFactoryClassForJCARegistration();
+        if (factory != null)
+        {
+            providerMap.put(mechanism, factory);
+        }
+        _logger.info("Initialised " + mechanism + " SASL provider successfully");
+    }
+
+    public String getMechanisms()
+    {
+        if (_default != null)
+        {
+            // Use the default AuthenticationManager if present
+            return _default.getMechanisms();
+        }
+        else
+        {
+            return _mechanisms;
+        }
+    }
+
+    public SaslServer createSaslServer(String mechanism, String localFQDN) throws SaslException
+    {
+        if (_default != null)
+        {
+            // Use the default AuthenticationManager if present
+            return _default.createSaslServer(mechanism, localFQDN);
+        }
+        else
+        {
+            return Sasl.createSaslServer(mechanism, "AMQP", localFQDN, _serverCreationProperties.get(mechanism),
+                                         _callbackHandlerMap.get(mechanism));
+        }
+
+    }
+
+    public AuthenticationResult authenticate(SaslServer server, byte[] response)
+    {
+        // Use the default AuthenticationManager if present
+        if (_default != null)
+        {
+            return _default.authenticate(server, response);
+        }
+
+
+        try
+        {
+            // Process response from the client
+            byte[] challenge = server.evaluateResponse(response != null ? response : new byte[0]);
+
+            if (server.isComplete())
+            {
+                return new AuthenticationResult(challenge, AuthenticationResult.AuthenticationStatus.SUCCESS);
+            }
+            else
+            {
+                return new AuthenticationResult(challenge, AuthenticationResult.AuthenticationStatus.CONTINUE);
+            }
+        }
+        catch (SaslException e)
+        {
+            return new AuthenticationResult(AuthenticationResult.AuthenticationStatus.ERROR);
+        }
+    }
+
+    public AuthenticationResult isAuthorize(VirtualHost vhost, String username)
+    {
+        return new AuthenticationResult(AuthenticationResult.AuthenticationStatus.ERROR);
+    }
+}

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/AuthenticationProviderInitialiser.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/AuthenticationProviderInitialiser.java?view=auto&rev=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/AuthenticationProviderInitialiser.java (added)
+++ incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/AuthenticationProviderInitialiser.java Fri Mar 16 07:46:42 2007
@@ -0,0 +1,76 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * 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
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.security.auth.sasl;
+
+import java.util.Map;
+
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.sasl.SaslServerFactory;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.qpid.server.security.auth.database.PrincipalDatabase;
+
+public interface AuthenticationProviderInitialiser
+{
+    /**
+     * @return the mechanism's name. This will be used in the list of mechanism's advertised to the
+     * client.
+     */
+    String getMechanismName();
+
+    /**
+     * Initialise the authentication provider.
+     * @param baseConfigPath the path in the config file that points to any config options for this provider. Each
+     * provider can have its own set of configuration options
+     * @param configuration the Apache Commons Configuration instance used to configure this provider
+     * @param principalDatabases the set of principal databases that are available
+     * @throws Exception needs refined Exception is too broad.
+     */
+    void initialise(String baseConfigPath, Configuration configuration,
+                    Map<String, PrincipalDatabase> principalDatabases) throws Exception;
+
+    /**
+     * Initialise the authentication provider.     
+     * @param db The principal database to initialise with
+     */
+    void initialise(PrincipalDatabase db);
+
+
+    /**
+     * @return the callback handler that should be used to process authentication requests for this mechanism. This will
+     * be called after initialise and will be stored by the authentication manager. The callback handler <b>must</b> be
+     * fully threadsafe.
+     */
+    CallbackHandler getCallbackHandler();
+
+    /**
+     * Get the properties that must be passed in to the Sasl.createSaslServer method.
+     * @return the properties, which may be null
+     */
+    Map<String, ?> getProperties();
+
+    /**
+     * Get the class that is the server factory. This is used for the JCA registration.
+     * @return null if no JCA registration is required, otherwise return the class
+     * that will be used in JCA registration
+     */
+    Class<? extends SaslServerFactory> getServerFactoryClassForJCARegistration();
+}

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/AuthenticationProviderInitialiser.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/AuthenticationProviderInitialiser.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 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?view=auto&rev=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/JCAProvider.java (added)
+++ incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/JCAProvider.java Fri Mar 16 07:46:42 2007
@@ -0,0 +1,47 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * 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
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.security.auth.sasl;
+
+import java.security.Provider;
+import java.security.Security;
+import java.util.Map;
+
+import javax.security.sasl.SaslServerFactory;
+
+public final class JCAProvider extends Provider
+{
+    public JCAProvider(Map<String, Class<? extends SaslServerFactory>> providerMap)
+    {
+        super("AMQSASLProvider", 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)
+    {
+        for (Map.Entry<String, Class<? extends SaslServerFactory>> me :
+             providerMap.entrySet())
+        {
+            put("SaslServerFactory." + me.getKey(), me.getValue().getName());
+        }
+    }
+}

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/JCAProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/JCAProvider.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/UsernamePasswordInitialiser.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/UsernamePasswordInitialiser.java?view=auto&rev=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/UsernamePasswordInitialiser.java (added)
+++ incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/UsernamePasswordInitialiser.java Fri Mar 16 07:46:42 2007
@@ -0,0 +1,118 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * 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
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.security.auth.sasl;
+
+import java.io.IOException;
+import java.security.Principal;
+import java.util.Map;
+
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.NameCallback;
+import javax.security.auth.callback.PasswordCallback;
+import javax.security.auth.callback.UnsupportedCallbackException;
+import javax.security.auth.login.AccountNotFoundException;
+import javax.security.sasl.AuthorizeCallback;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.log4j.Logger;
+import org.apache.qpid.server.security.auth.database.PrincipalDatabase;
+import org.apache.qpid.server.security.auth.sasl.AuthenticationProviderInitialiser;
+import org.apache.qpid.server.security.auth.sasl.UsernamePrincipal;
+
+public abstract class UsernamePasswordInitialiser implements AuthenticationProviderInitialiser
+{
+    protected static final Logger _logger = Logger.getLogger(UsernamePasswordInitialiser.class);    
+
+    private ServerCallbackHandler _callbackHandler;
+
+    private class ServerCallbackHandler implements CallbackHandler
+    {
+        private final PrincipalDatabase _principalDatabase;
+
+        protected ServerCallbackHandler(PrincipalDatabase database)
+        {
+            _principalDatabase = database;
+        }
+
+        public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException
+        {
+            Principal username = null;
+            for (Callback callback : callbacks)
+            {
+                if (callback instanceof NameCallback)
+                {
+                    username = new UsernamePrincipal(((NameCallback) callback).getDefaultName());
+                }
+                else if (callback instanceof PasswordCallback)
+                {
+                    try
+                    {
+                        _principalDatabase.setPassword(username, (PasswordCallback) callback);
+                    }
+                    catch (AccountNotFoundException e)
+                    {
+                        // very annoyingly the callback handler does not throw anything more appropriate than
+                        // IOException
+                        throw new IOException("Error looking up user " + e);
+                    }
+                }
+                else if (callback instanceof AuthorizeCallback)
+                {
+                    ((AuthorizeCallback) callback).setAuthorized(true);
+                }
+                else
+                {
+                    throw new UnsupportedCallbackException(callback);
+                }
+            }
+        }
+    }
+
+    public void initialise(String baseConfigPath, Configuration configuration,
+                           Map<String, PrincipalDatabase> principalDatabases) throws Exception
+    {
+        String principalDatabaseName = configuration.getString(baseConfigPath + ".principal-database");
+        PrincipalDatabase db = principalDatabases.get(principalDatabaseName);
+
+        initialise(db);
+    }
+
+    public void initialise(PrincipalDatabase db)
+    {
+        if (db == null)
+        {
+            throw new NullPointerException("Cannot initialise with a null Principal database.");
+        }
+        _callbackHandler = new ServerCallbackHandler(db);
+    }
+
+    public CallbackHandler getCallbackHandler()
+    {
+        return _callbackHandler;
+    }
+
+    public Map<String, ?> getProperties()
+    {
+        // there are no properties required for the CRAM-MD5 implementation
+        return null;
+    }
+}

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/UsernamePasswordInitialiser.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/UsernamePasswordInitialiser.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/UsernamePrincipal.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/UsernamePrincipal.java?view=auto&rev=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/UsernamePrincipal.java (added)
+++ incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/UsernamePrincipal.java Fri Mar 16 07:46:42 2007
@@ -0,0 +1,42 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * 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
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.security.auth.sasl;
+
+import java.security.Principal;
+
+/**
+ * A principal that is just a wrapper for a simple username.
+ *
+ */
+public class UsernamePrincipal implements Principal
+{
+    private String _name;
+
+    public UsernamePrincipal(String name)
+    {
+        _name = name;
+    }
+
+    public String getName()
+    {
+        return _name;
+    }
+}

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/UsernamePrincipal.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/UsernamePrincipal.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/crammd5/CRAMMD5Initialiser.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/crammd5/CRAMMD5Initialiser.java?view=auto&rev=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/crammd5/CRAMMD5Initialiser.java (added)
+++ incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/crammd5/CRAMMD5Initialiser.java Fri Mar 16 07:46:42 2007
@@ -0,0 +1,71 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * 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
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.security.auth.sasl.crammd5;
+
+import org.apache.qpid.server.security.auth.sasl.UsernamePasswordInitialiser;
+import org.apache.qpid.server.security.auth.database.PrincipalDatabase;
+
+import javax.security.sasl.SaslServerFactory;
+
+public class CRAMMD5Initialiser extends UsernamePasswordInitialiser
+{
+    private HashDirection _hashDirection;
+
+    public enum HashDirection
+    {
+        INCOMMING, PASSWORD_FILE
+    }
+
+
+    public String getMechanismName()
+    {
+        return "CRAM-MD5";
+    }
+
+    public Class<? extends SaslServerFactory> getServerFactoryClassForJCARegistration()
+    {
+        // since the CRAM-MD5 provider is registered as part of the JDK, we do not
+        // return the factory class here since we do not need to register it ourselves.
+        if (_hashDirection == HashDirection.PASSWORD_FILE)
+        {
+            return null;
+        }
+        else
+        {
+            //fixme we need a server that will correctly has the incomming plain text for comparison to file.
+            _logger.warn("we need a server that will correctly convert the incomming plain text for comparison to file.");
+            return null;
+        }
+    }
+
+    public void initialise(PrincipalDatabase passwordFile)
+    {
+        initialise(passwordFile, HashDirection.PASSWORD_FILE);
+    }
+
+    public void initialise(PrincipalDatabase passwordFile, HashDirection direction)
+    {
+        super.initialise(passwordFile);
+
+        _hashDirection = direction;
+    }
+
+}

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/crammd5/CRAMMD5Initialiser.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/crammd5/CRAMMD5Initialiser.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/util/NullApplicationRegistry.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/util/NullApplicationRegistry.java?view=diff&rev=518988&r1=518987&r2=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/util/NullApplicationRegistry.java (original)
+++ incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/util/NullApplicationRegistry.java Fri Mar 16 07:46:42 2007
@@ -23,14 +23,19 @@
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.Properties;
 
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.MapConfiguration;
 import org.apache.qpid.server.management.ManagedObjectRegistry;
 import org.apache.qpid.server.management.NoopManagedObjectRegistry;
 import org.apache.qpid.server.registry.ApplicationRegistry;
-import org.apache.qpid.server.security.auth.AuthenticationManager;
-import org.apache.qpid.server.security.auth.NullAuthenticationManager;
+import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
+import org.apache.qpid.server.security.auth.manager.PrincipalDatabaseAuthenticationManager;
+import org.apache.qpid.server.security.auth.database.PrincipalDatabaseManager;
+import org.apache.qpid.server.security.auth.database.PropertiesPrincipalDatabaseManager;
+import org.apache.qpid.server.security.access.AccessManager;
+import org.apache.qpid.server.security.access.AllowAll;
 import org.apache.qpid.server.virtualhost.VirtualHost;
 import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
 
@@ -42,6 +47,10 @@
 
     private VirtualHostRegistry _virtualHostRegistry;
 
+    private AccessManager _accessManager;
+
+    private PrincipalDatabaseManager _databaseManager;
+
 
     public NullApplicationRegistry()
     {
@@ -50,14 +59,23 @@
 
     public void initialise() throws Exception
     {
-        _configuration.addProperty("store.class","org.apache.qpid.server.store.MemoryMessageStore");
+        _configuration.addProperty("store.class", "org.apache.qpid.server.store.MemoryMessageStore");
+
+        Properties users = new Properties();
+
+        users.put("guest", "guest");
+
+        _databaseManager = new PropertiesPrincipalDatabaseManager("default", users);
+
+        _accessManager = new AllowAll();
+
+        _authenticationManager = new PrincipalDatabaseAuthenticationManager(null, null);
 
         _managedObjectRegistry = new NoopManagedObjectRegistry();
         _virtualHostRegistry = new VirtualHostRegistry();
-        VirtualHost dummyHost = new VirtualHost("test",getConfiguration());
+        VirtualHost dummyHost = new VirtualHost("test", getConfiguration());
         _virtualHostRegistry.registerVirtualHost(dummyHost);
         _virtualHostRegistry.setDefaultVirtualHostName("test");
-        _authenticationManager = new NullAuthenticationManager();
 
         _configuration.addProperty("heartbeat.delay", 10 * 60); // 10 minutes
 
@@ -74,6 +92,11 @@
         return _managedObjectRegistry;
     }
 
+    public PrincipalDatabaseManager getDatabaseManager()
+    {
+        return _databaseManager;
+    }
+
     public AuthenticationManager getAuthenticationManager()
     {
         return _authenticationManager;
@@ -81,13 +104,18 @@
 
     public Collection<String> getVirtualHostNames()
     {
-        String[] hosts = {"test"}; 
-        return Arrays.asList( hosts );
+        String[] hosts = {"test"};
+        return Arrays.asList(hosts);
     }
 
     public VirtualHostRegistry getVirtualHostRegistry()
     {
         return _virtualHostRegistry;
+    }
+
+    public AccessManager getAccessManager()
+    {
+        return _accessManager;
     }
 }
 

Modified: incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java?view=diff&rev=518988&r1=518987&r2=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java (original)
+++ incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java Fri Mar 16 07:46:42 2007
@@ -25,6 +25,11 @@
 import org.apache.commons.configuration.Configuration;
 import org.apache.log4j.Logger;
 import org.apache.qpid.server.AMQBrokerManagerMBean;
+import org.apache.qpid.server.security.access.AccessManager;
+import org.apache.qpid.server.security.access.AccessManagerImpl;
+import org.apache.qpid.server.security.access.Accessable;
+import org.apache.qpid.server.security.auth.manager.PrincipalDatabaseAuthenticationManager;
+import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
 import org.apache.qpid.server.configuration.Configurator;
 import org.apache.qpid.server.exchange.DefaultExchangeFactory;
 import org.apache.qpid.server.exchange.DefaultExchangeRegistry;
@@ -37,7 +42,7 @@
 import org.apache.qpid.server.registry.ApplicationRegistry;
 import org.apache.qpid.server.store.MessageStore;
 
-public class VirtualHost
+public class VirtualHost implements Accessable
 {
     private static final Logger _logger = Logger.getLogger(VirtualHost.class);
 
@@ -50,84 +55,103 @@
 
     private ExchangeFactory _exchangeFactory;
 
-   private MessageStore _messageStore;
+    private MessageStore _messageStore;
 
     protected VirtualHostMBean _virtualHostMBean;
 
     private AMQBrokerManagerMBean _brokerMBean;
 
+    private AuthenticationManager _authenticationManager;
 
-    /**
-         * Abstract MBean class. This has some of the methods implemented from
-         * management intrerface for exchanges. Any implementaion of an
-         * Exchange MBean should extend this class.
-         */
-        public class VirtualHostMBean extends AMQManagedObject implements ManagedVirtualHost
-        {
-            public VirtualHostMBean() throws NotCompliantMBeanException
-            {
-                super(ManagedVirtualHost.class, "VirtualHost");
-            }
+    private AccessManager _accessManager;
 
 
-            public String getObjectInstanceName()
-            {
-                return _name.toString();
-            }
+    public void setAccessableName(String name)
+    {
+        _logger.warn("Setting Accessable Name for VirualHost is not allowed. ("
+                     + name + ") ignored remains :" + getAccessableName());
+    }
 
-            public String getName()
-            {
-                return _name.toString();
-            }
+    public String getAccessableName()
+    {
+        return _name;
+    }
 
-            public VirtualHost getVirtualHost()
-            {
-                return VirtualHost.this;
-            }
 
+    /**
+     * Abstract MBean class. This has some of the methods implemented from management intrerface for exchanges. Any
+     * implementaion of an Exchange MBean should extend this class.
+     */
+    public class VirtualHostMBean extends AMQManagedObject implements ManagedVirtualHost
+    {
+        public VirtualHostMBean() throws NotCompliantMBeanException
+        {
+            super(ManagedVirtualHost.class, "VirtualHost");
+        }
 
-        } // End of MBean class
+        public String getObjectInstanceName()
+        {
+            return _name.toString();
+        }
 
+        public String getName()
+        {
+            return _name.toString();
+        }
 
-    public VirtualHost(String name, MessageStore store) throws Exception
-    {
-        _name = name;
+        public VirtualHost getVirtualHost()
+        {
+            return VirtualHost.this;
+        }
 
-        _virtualHostMBean = new VirtualHostMBean();
-        // This isn't needed to be registered
-        //_virtualHostMBean.register();
 
-        _queueRegistry = new DefaultQueueRegistry(this);
-        _exchangeFactory = new DefaultExchangeFactory(this);
-        _exchangeRegistry = new DefaultExchangeRegistry(this);
-
-        _messageStore = store;
-        
-        _exchangeRegistry.initialise();
+    } // End of MBean class
 
-        _brokerMBean = new AMQBrokerManagerMBean(_virtualHostMBean);
-        _brokerMBean.register();
 
+    public VirtualHost(String name, MessageStore store) throws Exception
+    {
+        this(name, null, store);
     }
+
     public VirtualHost(String name, Configuration hostConfig) throws Exception
     {
+        this(name, hostConfig, null);
+    }
+
+    private VirtualHost(String name, Configuration hostConfig, MessageStore store) throws Exception
+    {
         _name = name;
 
         _virtualHostMBean = new VirtualHostMBean();
         // This isn't needed to be registered
         //_virtualHostMBean.register();
-        
+
         _queueRegistry = new DefaultQueueRegistry(this);
         _exchangeFactory = new DefaultExchangeFactory(this);
         _exchangeRegistry = new DefaultExchangeRegistry(this);
 
-        initialiseMessageStore(hostConfig);
+        if (store != null)
+        {
+            _messageStore = store;
+        }
+        else
+        {
+            if (hostConfig == null)
+            {
+                throw new IllegalAccessException("HostConfig and MessageStore cannot be null");
+            }
+            initialiseMessageStore(hostConfig);
+        }
 
         _exchangeRegistry.initialise();
 
+        _logger.warn("VirtualHost authentication Managers require spec change to be operational.");
+        _authenticationManager = new PrincipalDatabaseAuthenticationManager(name, hostConfig);
+
+        _accessManager = new AccessManagerImpl(name, hostConfig);
+
         _brokerMBean = new AMQBrokerManagerMBean(_virtualHostMBean);
         _brokerMBean.register();
-
     }
 
     private void initialiseMessageStore(Configuration config) throws Exception
@@ -140,15 +164,13 @@
         if (!(o instanceof MessageStore))
         {
             throw new ClassCastException("Message store class must implement " + MessageStore.class + ". Class " + clazz +
-                                " does not.");
+                                         " does not.");
         }
         _messageStore = (MessageStore) o;
         _messageStore.configure(this, "store", config);
     }
 
 
-
-
     public <T> T getConfiguredObject(Class<T> instanceType, Configuration config)
     {
         T instance;
@@ -171,7 +193,7 @@
     {
         return _name;
     }
-    
+
     public QueueRegistry getQueueRegistry()
     {
         return _queueRegistry;
@@ -189,7 +211,7 @@
 
     public ApplicationRegistry getApplicationRegistry()
     {
-        throw new UnsupportedOperationException();        
+        throw new UnsupportedOperationException();
     }
 
     public MessageStore getMessageStore()
@@ -197,9 +219,19 @@
         return _messageStore;
     }
 
+    public AuthenticationManager getAuthenticationManager()
+    {
+        return _authenticationManager;
+    }
+
+    public AccessManager getAccessManager()
+    {
+        return _accessManager;
+    }
+
     public void close() throws Exception
     {
-        if(_messageStore != null)
+        if (_messageStore != null)
         {
             _messageStore.close();
         }
@@ -209,8 +241,6 @@
     {
         return _brokerMBean;
     }
-
-
 
     public ManagedObject getManagedObject()
     {

Modified: incubator/qpid/trunk/qpid/java/client/src/old_test/java/org/apache/qpid/flow/ChannelFlowTest.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/old_test/java/org/apache/qpid/flow/ChannelFlowTest.java?view=diff&rev=518988&r1=518987&r2=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/old_test/java/org/apache/qpid/flow/ChannelFlowTest.java (original)
+++ incubator/qpid/trunk/qpid/java/client/src/old_test/java/org/apache/qpid/flow/ChannelFlowTest.java Fri Mar 16 07:46:42 2007
@@ -38,7 +38,7 @@
 
     ChannelFlowTest(String broker) throws Exception
     {
-        this(new AMQConnection(broker, "guest", "guest", randomize("Client"), "/test_path"));
+        this(new AMQConnection(broker, "guest", "guest", randomize("Client"), "/test"));
     }
 
     ChannelFlowTest(AMQConnection connection) throws Exception

Modified: incubator/qpid/trunk/qpid/java/client/src/old_test/java/org/apache/qpid/latency/LatencyTest.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/old_test/java/org/apache/qpid/latency/LatencyTest.java?view=diff&rev=518988&r1=518987&r2=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/old_test/java/org/apache/qpid/latency/LatencyTest.java (original)
+++ incubator/qpid/trunk/qpid/java/client/src/old_test/java/org/apache/qpid/latency/LatencyTest.java Fri Mar 16 07:46:42 2007
@@ -48,7 +48,7 @@
 
     LatencyTest(String broker, int count, int delay, int length) throws Exception
     {
-        this(new AMQConnection(broker, "guest", "guest", randomize("Client"), "/test_path"), count, delay, length);
+        this(new AMQConnection(broker, "guest", "guest", randomize("Client"), "/test"), count, delay, length);
     }
 
     LatencyTest(AMQConnection connection, int count, int delay, int length) throws Exception

Modified: incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/DispatcherTest.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/DispatcherTest.java?view=diff&rev=518988&r1=518987&r2=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/DispatcherTest.java (original)
+++ incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/DispatcherTest.java Fri Mar 16 07:46:42 2007
@@ -82,7 +82,7 @@
 
         Hashtable<String, String> env = new Hashtable<String, String>();
 
-        env.put("connectionfactory.connection", "amqp://client:client@MLT_ID/test?brokerlist='vm://:1'");
+        env.put("connectionfactory.connection", "amqp://guest:guest@MLT_ID/test?brokerlist='vm://:1'");
         env.put("queue.queue", "MessageListenerTest");
 
         _context = factory.getInitialContext(env);

Modified: incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/MessageListenerMultiConsumerTest.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/MessageListenerMultiConsumerTest.java?view=diff&rev=518988&r1=518987&r2=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/MessageListenerMultiConsumerTest.java (original)
+++ incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/MessageListenerMultiConsumerTest.java Fri Mar 16 07:46:42 2007
@@ -74,7 +74,7 @@
 
         Hashtable<String, String> env = new Hashtable<String, String>();
 
-        env.put("connectionfactory.connection", "amqp://client:client@MLT_ID/test?brokerlist='vm://:1'");
+        env.put("connectionfactory.connection", "amqp://guest:guest@MLT_ID/test?brokerlist='vm://:1'");
         env.put("queue.queue", "direct://amq.direct//MessageListenerTest");
 
         _context = factory.getInitialContext(env);

Modified: incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/MessageListenerTest.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/MessageListenerTest.java?view=diff&rev=518988&r1=518987&r2=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/MessageListenerTest.java (original)
+++ incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/MessageListenerTest.java Fri Mar 16 07:46:42 2007
@@ -73,7 +73,7 @@
 
         Hashtable<String, String> env = new Hashtable<String, String>();
 
-        env.put("connectionfactory.connection", "amqp://client:client@MLT_ID/test?brokerlist='vm://:1'");
+        env.put("connectionfactory.connection", "amqp://guest:guest@MLT_ID/test?brokerlist='vm://:1'");
         env.put("queue.queue", "MessageListenerTest");
 
         _context = factory.getInitialContext(env);

Modified: incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/ResetMessageListenerTest.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/ResetMessageListenerTest.java?view=diff&rev=518988&r1=518987&r2=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/ResetMessageListenerTest.java (original)
+++ incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/ResetMessageListenerTest.java Fri Mar 16 07:46:42 2007
@@ -82,7 +82,7 @@
 
         Hashtable<String, String> env = new Hashtable<String, String>();
 
-        env.put("connectionfactory.connection", "amqp://client:client@MLT_ID/test?brokerlist='vm://:1'");
+        env.put("connectionfactory.connection", "amqp://guest:guest@MLT_ID/test?brokerlist='vm://:1'");
         env.put("queue.queue", "direct://amq.direct//MessageListenerTest");
 
         _context = factory.getInitialContext(env);

Modified: incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionTest.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionTest.java?view=diff&rev=518988&r1=518987&r2=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionTest.java (original)
+++ incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionTest.java Fri Mar 16 07:46:42 2007
@@ -73,7 +73,7 @@
     {
         try
         {
-            AMQConnection conn = new AMQConnection("amqp://guest:guestd@clientid/test?brokerlist='"
+            AMQConnection conn = new AMQConnection("amqp://guest:guest@clientid/test?brokerlist='"
                                                    + _broker
                                                    + "?retries='1''&defaultQueueExchange='test.direct'"
                                                    + "&defaultTopicExchange='test.topic'"
@@ -115,13 +115,12 @@
         }
     }
 
-
-    // FIXME The inVM broker currently has no authentication .. Needs added QPID-70
-    public void passwordFailureConnection() throws Exception
+     //fixme AMQAuthenticationException is not propogaged
+    public void PasswordFailureConnection() throws Exception
     {
         try
         {
-            new AMQConnection("amqp://guest:rubbishpassword@clientid/testpath?brokerlist='" + _broker + "?retries='1''");
+            new AMQConnection("amqp://guest:rubbishpassword@clientid/test?brokerlist='" + _broker + "?retries='1''");
             fail("Connection should not be established password is wrong.");
         }
         catch (AMQException amqe)

Modified: incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/close/CloseBeforeAckTest.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/close/CloseBeforeAckTest.java?view=diff&rev=518988&r1=518987&r2=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/close/CloseBeforeAckTest.java (original)
+++ incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/close/CloseBeforeAckTest.java Fri Mar 16 07:46:42 2007
@@ -41,10 +41,8 @@
  * Running in AUTO_ACK mode, the close call ought to wait until the onMessage method completes, and the ack is sent
  * before closing the connection.
  *
- * <p><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Check that closing a connection whilst handling a message, blocks till completion of the handler.
- * </table>
+ * <p><table id="crc"><caption>CRC Card</caption> <tr><th> Responsibilities <th> Collaborations <tr><td> Check that
+ * closing a connection whilst handling a message, blocks till completion of the handler. </table>
  */
 public class CloseBeforeAckTest extends TestCase
 {
@@ -53,6 +51,7 @@
     Connection connection;
     Session session;
     public static final String TEST_QUEUE_NAME = "TestQueue";
+    private int TEST_COUNT = 25;
 
     class TestThread1 extends TestRunnable implements MessageListener
     {
@@ -65,34 +64,34 @@
         public void onMessage(Message message)
         {
             // Give thread 2 permission to close the session.
-            allow(new int[] { 1 });
+            allow(new int[]{1});
 
             // Wait until thread 2 has closed the connection, or is blocked waiting for this to complete.
-            waitFor(new int[] { 1 }, true);
+            waitFor(new int[]{1}, true);
         }
     }
 
     TestThread1 testThread1 = new TestThread1();
 
     TestRunnable testThread2 =
-        new TestRunnable()
-        {
-            public void runWithExceptions() throws Exception
+            new TestRunnable()
             {
-                // Send a message to be picked up by thread 1.
-                session.createProducer(null).send(session.createQueue(TEST_QUEUE_NAME),
-                                                  session.createTextMessage("Hi there thread 1!"));
-
-                // Wait for thread 1 to pick up the message and give permission to continue.
-                waitFor(new int[] { 0 }, false);
-
-                // Close the connection.
-                session.close();
-
-                // Allow thread 1 to continue to completion, if it is erronously still waiting.
-                allow(new int[] { 1 });
-            }
-        };
+                public void runWithExceptions() throws Exception
+                {
+                    // Send a message to be picked up by thread 1.
+                    session.createProducer(null).send(session.createQueue(TEST_QUEUE_NAME),
+                                                      session.createTextMessage("Hi there thread 1!"));
+
+                    // Wait for thread 1 to pick up the message and give permission to continue.
+                    waitFor(new int[]{0}, false);
+
+                    // Close the connection.
+                    session.close();
+
+                    // Allow thread 1 to continue to completion, if it is erronously still waiting.
+                    allow(new int[]{1});
+                }
+            };
 
     public void testCloseBeforeAutoAck_QPID_397() throws Exception
     {
@@ -123,9 +122,9 @@
         Assert.assertTrue(errorMessage, "".equals(errorMessage));
     }
 
-    public void testCloseBeforeAutoAckManyTimes() throws Exception
+    public void closeBeforeAutoAckManyTimes() throws Exception
     {
-        for (int i = 0; i < 500; i++)
+        for (int i = 0; i < TEST_COUNT; i++)
         {
             testCloseBeforeAutoAck_QPID_397();
         }

Modified: incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/testutil/Config.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/testutil/Config.java?view=diff&rev=518988&r1=518987&r2=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/testutil/Config.java (original)
+++ incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/testutil/Config.java Fri Mar 16 07:46:42 2007
@@ -136,7 +136,7 @@
     public Connection getConnection() throws Exception
     {
         System.out.println("Connecting to " + host + " on " + port + "...");
-        return new AMQConnection(host, port, "guest", "guest", "Client" + System.currentTimeMillis(), "/test_path");
+        return new AMQConnection(host, port, "guest", "guest", "Client" + System.currentTimeMillis(), "/test");
     }
 
     public boolean setOptions(String[] argv)

Modified: incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/MockProtocolSession.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/MockProtocolSession.java?view=diff&rev=518988&r1=518987&r2=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/MockProtocolSession.java (original)
+++ incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/MockProtocolSession.java Fri Mar 16 07:46:42 2007
@@ -177,6 +177,16 @@
         return ProtocolOutputConverterRegistry.getConverter(this);
     }
 
+    public void setAuthorizedID(String authorizedID)
+    {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public String getAuthorizedID()
+    {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
     public byte getProtocolMajorVersion()
     {
         return 8;  //To change body of implemented methods use File | Settings | File Templates.

Modified: incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/util/TestApplicationRegistry.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/util/TestApplicationRegistry.java?view=diff&rev=518988&r1=518987&r2=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/util/TestApplicationRegistry.java (original)
+++ incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/util/TestApplicationRegistry.java Fri Mar 16 07:46:42 2007
@@ -20,18 +20,18 @@
  */
 package org.apache.qpid.server.util;
 
-import org.apache.qpid.server.exchange.DefaultExchangeFactory;
-import org.apache.qpid.server.exchange.DefaultExchangeRegistry;
 import org.apache.qpid.server.exchange.ExchangeFactory;
 import org.apache.qpid.server.exchange.ExchangeRegistry;
 import org.apache.qpid.server.management.ManagedObjectRegistry;
-import org.apache.qpid.server.management.NoopManagedObjectRegistry;
-import org.apache.qpid.server.queue.DefaultQueueRegistry;
 import org.apache.qpid.server.queue.QueueRegistry;
 import org.apache.qpid.server.registry.ApplicationRegistry;
 import org.apache.qpid.server.registry.IApplicationRegistry;
-import org.apache.qpid.server.security.auth.AuthenticationManager;
-import org.apache.qpid.server.security.auth.NullAuthenticationManager;
+import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
+import org.apache.qpid.server.security.auth.manager.PrincipalDatabaseAuthenticationManager;
+import org.apache.qpid.server.security.auth.database.PrincipalDatabaseManager;
+import org.apache.qpid.server.security.auth.database.PropertiesPrincipalDatabaseManager;
+import org.apache.qpid.server.security.access.AccessManager;
+import org.apache.qpid.server.security.access.AllowAll;
 import org.apache.qpid.server.store.MessageStore;
 import org.apache.qpid.server.store.TestableMemoryMessageStore;
 import org.apache.qpid.server.virtualhost.VirtualHost;
@@ -41,6 +41,7 @@
 
 import java.util.HashMap;
 import java.util.Collection;
+import java.util.Properties;
 
 public class TestApplicationRegistry extends ApplicationRegistry
 {
@@ -52,6 +53,10 @@
 
     private ManagedObjectRegistry _managedObjectRegistry;
 
+    private AccessManager _accessManager;
+
+    private PrincipalDatabaseManager _databaseManager;
+
     private AuthenticationManager _authenticationManager;
 
     private MessageStore _messageStore;
@@ -64,13 +69,23 @@
 
     public void initialise() throws Exception
     {
+        Properties users = new Properties();
+
+        users.put("guest", "guest");
+
+        _databaseManager = new PropertiesPrincipalDatabaseManager("default", users);
+
+        _accessManager = new AllowAll();
+
+        _authenticationManager = new PrincipalDatabaseAuthenticationManager(null, null);
+
         IApplicationRegistry appRegistry = ApplicationRegistry.getInstance();
         _managedObjectRegistry = appRegistry.getManagedObjectRegistry();
         _vHost = appRegistry.getVirtualHostRegistry().getVirtualHost("test");
         _queueRegistry = _vHost.getQueueRegistry();
         _exchangeFactory = _vHost.getExchangeFactory();
         _exchangeRegistry = _vHost.getExchangeRegistry();
-        _authenticationManager = new NullAuthenticationManager();
+
         _messageStore = new TestableMemoryMessageStore();
 
         _configuration.addProperty("heartbeat.delay", 10 * 60); // 10 minutes
@@ -101,6 +116,11 @@
         return _managedObjectRegistry;
     }
 
+    public PrincipalDatabaseManager getDatabaseManager()
+    {
+        return _databaseManager;
+    }
+
     public AuthenticationManager getAuthenticationManager()
     {
         return _authenticationManager;
@@ -114,6 +134,11 @@
     public VirtualHostRegistry getVirtualHostRegistry()
     {
         return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public AccessManager getAccessManager()
+    {
+        return _accessManager;
     }
 
     public MessageStore getMessageStore()

Modified: incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/VMTestCase.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/VMTestCase.java?view=diff&rev=518988&r1=518987&r2=518988
==============================================================================
--- incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/VMTestCase.java (original)
+++ incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/VMTestCase.java Fri Mar 16 07:46:42 2007
@@ -84,7 +84,7 @@
             _brokerlist = "vm://:1";
         }
 
-        env.put("connectionfactory.connection", "amqp://client:client@" +
+        env.put("connectionfactory.connection", "amqp://guest:guest@" +
                                                 _clientID + _virtualhost + "?brokerlist='" + _brokerlist + "'");
 
         for (Map.Entry<String, String> c : _connections.entrySet())