Author: orudyy
Date: Fri Mar 22 13:13:16 2013
New Revision: 1459755
URL: http://svn.apache.org/r1459755
Log:
QPID-4596: Restrict the creation of
PasswordCredentialManagingAuthenticationProvider to one instance
Modified:
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java
Modified:
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java?rev=1459755&r1=1459754&r2=1459755&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java
(original)
+++
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java
Fri Mar 22 13:13:16 2013
@@ -27,8 +27,10 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
+import org.apache.qpid.server.configuration.IllegalConfigurationException;
import org.apache.qpid.server.model.AuthenticationProvider;
import org.apache.qpid.server.model.Broker;
+import
org.apache.qpid.server.model.PasswordCredentialManagingAuthenticationProvider;
import org.apache.qpid.server.plugin.AuthenticationManagerFactory;
import org.apache.qpid.server.plugin.QpidServiceLoader;
import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
@@ -68,6 +70,21 @@ public class AuthenticationProviderFacto
AuthenticationProviderAdapter<?> authenticationProvider;
if (manager instanceof PrincipalDatabaseAuthenticationManager)
{
+ // a temporary restriction to prevent creation of several
instances
+ // of
PlainPasswordFileAuthenticationProvider/Base64MD5PasswordFileAuthenticationProvider
+ // due to current limitation of JMX management which
cannot cope
+ // with several user management MBeans as MBean type is
used as a name.
+
+ // TODO: Remove this check after fixing of JMX management
+ for (AuthenticationProvider provider :
broker.getAuthenticationProviders())
+ {
+ if (provider instanceof
PasswordCredentialManagingAuthenticationProvider)
+ {
+ throw new IllegalConfigurationException("An
authentication provider which can manage users alredy exists ["
+ + provider.getName() + "]. Only one
instance is allowed.");
+ }
+ }
+
authenticationProvider = new
PrincipalDatabaseAuthenticationManagerAdapter(id, broker,
(PrincipalDatabaseAuthenticationManager) manager,
attributes, factory.getAttributeNames());
}
Modified:
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java?rev=1459755&r1=1459754&r2=1459755&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
(original)
+++
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
Fri Mar 22 13:13:16 2013
@@ -531,35 +531,6 @@ public class BrokerAdapter extends Abstr
AuthenticationProvider authenticationProvider = null;
synchronized (_authenticationProviders)
{
- String type = (String)attributes.get(AuthenticationProvider.TYPE);
- if (type == null)
- {
- throw new IllegalConfigurationException("Authentication
provider type is not specified");
- }
-
- // a temporary restriction to prevent creation of several instances
- // of
PlainPasswordFileAuthenticationProvider/Base64MD5PasswordFileAuthenticationProvider
- // due to current limitation of JMX management which cannot cope
- // with several user management MBeans as MBean type is used as a
name.
-
- // TODO: Remove this check after fixing of JMX management
- if
(type.equals(PlainPasswordFileAuthenticationManagerFactory.PROVIDER_TYPE)
- ||
type.equals(Base64MD5PasswordFileAuthenticationManagerFactory.PROVIDER_TYPE))
- {
-
- for (AuthenticationProvider provider :
_authenticationProviders.values())
- {
- String providerType = (String)
provider.getAttribute(AuthenticationProvider.TYPE);
- if
(providerType.equals(PlainPasswordFileAuthenticationManagerFactory.PROVIDER_TYPE)
- ||
providerType.equals(Base64MD5PasswordFileAuthenticationManagerFactory.PROVIDER_TYPE))
- {
- throw new IllegalConfigurationException("An
authentication provider which can manage users alredy exists ["
- + provider.getName() + "]. Only one instance
is allowed.");
- }
- }
-
- }
-
authenticationProvider =
_authenticationProviderFactory.create(UUID.randomUUID(), this, attributes);
addAuthenticationProvider(authenticationProvider);
}
Modified:
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java?rev=1459755&r1=1459754&r2=1459755&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java
(original)
+++
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java
Fri Mar 22 13:13:16 2013
@@ -22,6 +22,7 @@ package org.apache.qpid.server.model.ada
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.any;
import java.util.Collections;
import java.util.HashMap;
@@ -30,7 +31,7 @@ import java.util.UUID;
import junit.framework.TestCase;
-import org.apache.qpid.server.configuration.ConfigurationEntry;
+import org.apache.qpid.server.configuration.IllegalConfigurationException;
import org.apache.qpid.server.model.AuthenticationProvider;
import org.apache.qpid.server.model.Broker;
import
org.apache.qpid.server.model.PasswordCredentialManagingAuthenticationProvider;
@@ -64,9 +65,7 @@ public class AuthenticationProviderFacto
QpidServiceLoader<AuthenticationManagerFactory>
authManagerFactoryServiceLoader = mock(QpidServiceLoader.class);
AuthenticationManagerFactory authenticationManagerFactory =
mock(AuthenticationManagerFactory.class);
- ConfigurationEntry configurationEntry = mock(ConfigurationEntry.class);
- when(configurationEntry.getId()).thenReturn(id);
Broker broker = mock(Broker.class);
when(authManagerFactoryServiceLoader.atLeastOneInstanceOf(AuthenticationManagerFactory.class)).thenReturn(
@@ -82,4 +81,47 @@ public class AuthenticationProviderFacto
return provider;
}
+ @SuppressWarnings("unchecked")
+ public void
testCreatePasswordCredentialManagingAuthenticationProviderFailsWhenAnotherOneAlreadyExist()
+ {
+ Broker broker = mock(Broker.class);
+ PasswordCredentialManagingAuthenticationProvider anotherProvider =
mock(PasswordCredentialManagingAuthenticationProvider.class);
+
when(broker.getAuthenticationProviders()).thenReturn(Collections.<AuthenticationProvider>singleton(anotherProvider));
+
+ QpidServiceLoader<AuthenticationManagerFactory> loader =
mock(QpidServiceLoader.class);
+ AuthenticationManagerFactory managerFactory =
mock(AuthenticationManagerFactory.class);
+
when(managerFactory.createInstance(any(Map.class))).thenReturn(mock(PrincipalDatabaseAuthenticationManager.class));
+
when(loader.atLeastOneInstanceOf(AuthenticationManagerFactory.class)).thenReturn(Collections.singleton(managerFactory));
+
+ AuthenticationProviderFactory providerFactory = new
AuthenticationProviderFactory(loader);
+ try
+ {
+ providerFactory.create(UUID.randomUUID(), broker, new
HashMap<String, Object>());
+ fail("Creation of anaother
PasswordCredentialManagingAuthenticationProvider should fail");
+ }
+ catch (IllegalConfigurationException e)
+ {
+ // pass
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public void
testCreateNonPasswordCredentialManagingAuthenticationProviderWhenAnotherOneAlreadyExist()
+ {
+ Broker broker = mock(Broker.class);
+ AuthenticationProvider anotherProvider =
mock(AuthenticationProvider.class);
+
when(broker.getAuthenticationProviders()).thenReturn(Collections.singleton(anotherProvider));
+
+ QpidServiceLoader<AuthenticationManagerFactory> loader =
mock(QpidServiceLoader.class);
+ AuthenticationManagerFactory managerFactory =
mock(AuthenticationManagerFactory.class);
+
when(managerFactory.createInstance(any(Map.class))).thenReturn(mock(AuthenticationManager.class));
+
when(loader.atLeastOneInstanceOf(AuthenticationManagerFactory.class)).thenReturn(Collections.singleton(managerFactory));
+
+ AuthenticationProviderFactory providerFactory = new
AuthenticationProviderFactory(loader);
+ UUID id = UUID.randomUUID();
+ AuthenticationProvider provider = providerFactory.create(id, broker,
new HashMap<String, Object>());
+
+ assertNotNull("Provider is not created", provider);
+ assertEquals("Unexpected ID", id, provider.getId());
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]