Author: rgodfrey
Date: Thu Jul 24 11:27:03 2014
New Revision: 1613068
URL: http://svn.apache.org/r1613068
Log:
QPID-5922 : [Java Broker] restrict the use of PLAIN authentication to secure
channels
Added:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/sasl/plain/PlainAdapterSaslServer.java
- copied, changed from r1612109,
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/sasl/plain/PlainSaslServer.java
Removed:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AuthenticationManager.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/sasl/amqplain/AmqPlainInitialiser.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/sasl/amqplain/AmqPlainSaslServer.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/sasl/amqplain/AmqPlainSaslServerFactory.java
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/sasl/amqplain/AMQPlainSaslServerTest.java
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ExternalFileBasedAuthenticationManager.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Transport.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/SubjectCreator.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/AuthenticationResult.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/database/Base64MD5PasswordFilePrincipalDatabase.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/database/PlainPasswordFilePrincipalDatabase.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/database/PrincipalDatabase.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/jmx/JMXPasswordAuthenticator.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractAuthenticationManager.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractScramAuthenticationManager.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManager.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerImpl.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/KerberosAuthenticationManager.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/SimpleAuthenticationManager.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/SimpleLDAPAuthenticationManagerImpl.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/sasl/crammd5/CRAMMD5HexInitialiser.java
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/SubjectCreatorTest.java
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/jmx/JMXPasswordAuthenticatorTest.java
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManagerTest.java
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerTest.java
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManagerTest.java
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/ScramSHA1AuthenticationManagerTest.java
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/SimpleAuthenticationManagerTest.java
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/sasl/TestPrincipalDatabase.java
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java
qpid/trunk/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ProtocolEngineCreator_0_10.java
qpid/trunk/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java
qpid/trunk/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java
qpid/trunk/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/state/AMQStateManager.java
qpid/trunk/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0_SASL.java
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementUtil.java
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/SaslServlet.java
qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagedObjectRegistry.java
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/ra/QpidRAConnectionTest.java
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/ra/QpidRAXAResourceTest.java
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/ra/admin/QpidConnectionFactoryProxyTest.java
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/QpidRestTestCase.java
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/SaslRestTest.java
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/connection/ConnectionTest.java
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java
Thu Jul 24 11:27:03 2014
@@ -22,6 +22,7 @@ package org.apache.qpid.server.model;
import java.security.Principal;
import java.util.Collection;
+import java.util.List;
import javax.security.sasl.SaslException;
import javax.security.sasl.SaslServer;
@@ -39,8 +40,9 @@ public interface AuthenticationProvider<
* A temporary method to create SubjectCreator.
*
* TODO: move all the functionality from SubjectCreator into
AuthenticationProvider
+ * @param secure
*/
- SubjectCreator getSubjectCreator();
+ SubjectCreator getSubjectCreator(final boolean secure);
/**
* Returns the preferences provider associated with this authentication
provider
@@ -61,8 +63,12 @@ public interface AuthenticationProvider<
*
* @return SASL mechanism names, space separated.
*/
- String getMechanisms();
+ @DerivedAttribute
+ List<String> getMechanisms();
+
+ @ManagedAttribute( defaultValue = "[ \"PLAIN\" ]")
+ List<String> getSecureOnlyMechanisms();
/**
* Creates a SASL server for the specified mechanism name for the given
* fully qualified domain name.
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
Thu Jul 24 11:27:03 2014
@@ -170,8 +170,9 @@ public interface Broker<X extends Broker
* TODO: move the authentication related functionality into host aliases
and AuthenticationProviders
*
* @param localAddress The (listening) socket address for which the
AuthenticationManager is required
+ * @param secure
*/
- SubjectCreator getSubjectCreator(SocketAddress localAddress);
+ SubjectCreator getSubjectCreator(SocketAddress localAddress, final boolean
secure);
Collection<KeyStore<?>> getKeyStores();
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ExternalFileBasedAuthenticationManager.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ExternalFileBasedAuthenticationManager.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ExternalFileBasedAuthenticationManager.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ExternalFileBasedAuthenticationManager.java
Thu Jul 24 11:27:03 2014
@@ -26,4 +26,6 @@ public interface ExternalFileBasedAuthen
@ManagedAttribute( mandatory = true, description = "File location")
public String getPath();
+
+
}
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Transport.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Transport.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Transport.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Transport.java
Thu Jul 24 11:27:03 2014
@@ -24,12 +24,30 @@ import java.util.EnumSet;
public enum Transport
{
+
TCP,
- SSL,
+ SSL(true),
WS,
- WSS,
+ WSS(true),
SCTP;
+ Transport()
+ {
+ this(false);
+ }
+
+ Transport(boolean secure)
+ {
+ _secure = secure;
+ }
+
+ private boolean _secure;
+
+ public final boolean isSecure()
+ {
+ return _secure;
+ }
+
public static Transport valueOfObject(Object transportObject)
{
Transport transport;
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
Thu Jul 24 11:27:03 2014
@@ -848,7 +848,7 @@ public class BrokerAdapter extends Abstr
}
@Override
- public SubjectCreator getSubjectCreator(SocketAddress localAddress)
+ public SubjectCreator getSubjectCreator(SocketAddress localAddress, final
boolean secure)
{
AuthenticationProvider provider =
getAuthenticationProvider(localAddress);
@@ -857,7 +857,7 @@ public class BrokerAdapter extends Abstr
throw new IllegalConfigurationException("Unable to determine
authentication provider for address: " + localAddress);
}
- return provider.getSubjectCreator();
+ return provider.getSubjectCreator(secure);
}
@Override
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/SubjectCreator.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/SubjectCreator.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/SubjectCreator.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/SubjectCreator.java
Thu Jul 24 11:27:03 2014
@@ -21,45 +21,47 @@
package org.apache.qpid.server.security;
import java.security.Principal;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import javax.security.auth.Subject;
import javax.security.sasl.SaslException;
import javax.security.sasl.SaslServer;
+import org.apache.qpid.server.model.AuthenticationProvider;
import org.apache.qpid.server.model.GroupProvider;
-import org.apache.qpid.server.security.auth.AuthenticatedPrincipal;
import org.apache.qpid.server.security.auth.AuthenticationResult;
import
org.apache.qpid.server.security.auth.AuthenticationResult.AuthenticationStatus;
import org.apache.qpid.server.security.auth.SubjectAuthenticationResult;
-import
org.apache.qpid.server.security.auth.manager.AnonymousAuthenticationManager;
-import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
-import
org.apache.qpid.server.security.auth.manager.ExternalAuthenticationManager;
/**
* Creates a {@link Subject} formed by the {@link Principal}'s returned from:
* <ol>
- * <li>Authenticating using an {@link AuthenticationManager}</li>
- * <li>A {@link GroupPrincipalAccessor}</li>
+ * <li>Authenticating using an {@link AuthenticationProvider}</li>
* </ol>
*
* <p>
- * SubjectCreator is a facade to the {@link AuthenticationManager}, and is
intended to be
+ * SubjectCreator is a facade to the {@link AuthenticationProvider}, and is
intended to be
* the single place that {@link Subject}'s are created in the broker.
* </p>
*/
public class SubjectCreator
{
- private AuthenticationManager _authenticationManager;
+ private final boolean _secure;
+ private AuthenticationProvider<?> _authenticationProvider;
private Collection<GroupProvider> _groupProviders;
- public SubjectCreator(AuthenticationManager authenticationManager,
Collection<GroupProvider> groupProviders)
+ public SubjectCreator(AuthenticationProvider<?> authenticationProvider,
+ Collection<GroupProvider> groupProviders,
+ final boolean secure)
{
- _authenticationManager = authenticationManager;
+ _authenticationProvider = authenticationProvider;
_groupProviders = groupProviders;
+ _secure = secure;
}
/**
@@ -67,17 +69,27 @@ public class SubjectCreator
*
* @return SASL mechanism names, space separated.
*/
- public String getMechanisms()
+ public List<String> getMechanisms()
{
- return _authenticationManager.getMechanisms();
+ List<String> mechanisms = _authenticationProvider.getMechanisms();
+ if(!_secure)
+ {
+ mechanisms = new ArrayList<>(mechanisms);
+
mechanisms.removeAll(_authenticationProvider.getSecureOnlyMechanisms());
+ }
+ return mechanisms;
}
/**
- * @see AuthenticationManager#createSaslServer(String, String, Principal)
+ * @see AuthenticationProvider#createSaslServer(String, String, Principal)
*/
public SaslServer createSaslServer(String mechanism, String localFQDN,
Principal externalPrincipal) throws SaslException
{
- return _authenticationManager.createSaslServer(mechanism, localFQDN,
externalPrincipal);
+ if(!getMechanisms().contains(mechanism))
+ {
+ throw new SaslException("Unsupported mechanism: " + mechanism +
".\nSupported mechanisms: " + getMechanisms());
+ }
+ return _authenticationProvider.createSaslServer(mechanism, localFQDN,
externalPrincipal);
}
/**
@@ -88,7 +100,7 @@ public class SubjectCreator
*/
public SubjectAuthenticationResult authenticate(SaslServer server, byte[]
response)
{
- AuthenticationResult authenticationResult =
_authenticationManager.authenticate(server, response);
+ AuthenticationResult authenticationResult =
_authenticationProvider.authenticate(server, response);
if(server.isComplete())
{
String username = server.getAuthorizationID();
@@ -106,7 +118,7 @@ public class SubjectCreator
*/
public SubjectAuthenticationResult authenticate(String username, String
password)
{
- final AuthenticationResult authenticationResult =
_authenticationManager.authenticate(username, password);
+ final AuthenticationResult authenticationResult =
_authenticationProvider.authenticate(username, password);
return createResultWithGroups(username, authenticationResult);
}
@@ -141,18 +153,7 @@ public class SubjectCreator
return authenticationSubject;
}
- public Subject createSubjectWithGroups(String username)
- {
- Subject authenticationSubject = new Subject();
-
- authenticationSubject.getPrincipals().add(new
AuthenticatedPrincipal(username));
-
authenticationSubject.getPrincipals().addAll(getGroupPrincipals(username));
- authenticationSubject.setReadOnly();
-
- return authenticationSubject;
- }
-
- public Set<Principal> getGroupPrincipals(String username)
+ Set<Principal> getGroupPrincipals(String username)
{
Set<Principal> principals = new HashSet<Principal>();
for (GroupProvider groupProvider : _groupProviders)
@@ -167,13 +168,4 @@ public class SubjectCreator
return Collections.unmodifiableSet(principals);
}
- public boolean isAnonymousAuthenticationAllowed()
- {
- return _authenticationManager instanceof
AnonymousAuthenticationManager;
- }
-
- public boolean isExternalAuthenticationAllowed()
- {
- return _authenticationManager instanceof ExternalAuthenticationManager;
- }
}
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/AuthenticationResult.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/AuthenticationResult.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/AuthenticationResult.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/AuthenticationResult.java
Thu Jul 24 11:27:03 2014
@@ -25,10 +25,9 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
-import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
/**
- * Encapsulates the result of an attempt to authenticate using an {@link
AuthenticationManager}.
+ * Encapsulates the result of an attempt to authenticate using an {@link
org.apache.qpid.server.model.AuthenticationProvider}.
* <p>
* The authentication status describes the overall outcome.
* <p>
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/database/Base64MD5PasswordFilePrincipalDatabase.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/database/Base64MD5PasswordFilePrincipalDatabase.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/database/Base64MD5PasswordFilePrincipalDatabase.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/database/Base64MD5PasswordFilePrincipalDatabase.java
Thu Jul 24 11:27:03 2014
@@ -21,7 +21,10 @@
package org.apache.qpid.server.security.auth.database;
import java.security.Principal;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import javax.security.auth.callback.CallbackHandler;
@@ -30,10 +33,13 @@ import javax.security.sasl.SaslException
import javax.security.sasl.SaslServer;
import org.apache.log4j.Logger;
+
import
org.apache.qpid.server.security.auth.sasl.crammd5.CRAMMD5HashedInitialiser;
import
org.apache.qpid.server.security.auth.sasl.crammd5.CRAMMD5HashedSaslServer;
import org.apache.qpid.server.security.auth.sasl.crammd5.CRAMMD5HexInitialiser;
import org.apache.qpid.server.security.auth.sasl.crammd5.CRAMMD5HexSaslServer;
+import org.apache.qpid.server.security.auth.sasl.plain.PlainAdapterSaslServer;
+import org.apache.qpid.server.security.auth.sasl.plain.PlainSaslServer;
/**
* Represents a user database where the account information is stored in a
simple flat file.
@@ -45,7 +51,9 @@ import org.apache.qpid.server.security.a
public class Base64MD5PasswordFilePrincipalDatabase extends
AbstractPasswordFilePrincipalDatabase<HashedUser>
{
private final Logger _logger =
Logger.getLogger(Base64MD5PasswordFilePrincipalDatabase.class);
- private String _mechanismsString;
+ private List<String> _mechanisms =
Collections.unmodifiableList(Arrays.asList(CRAMMD5HashedSaslServer.MECHANISM,
+
CRAMMD5HexSaslServer.MECHANISM,
+
PlainSaslServer.MECHANISM));
private final Map<String, CallbackHandler> _callbackHandlerMap = new
HashMap<String, CallbackHandler>();
public Base64MD5PasswordFilePrincipalDatabase()
@@ -58,7 +66,6 @@ public class Base64MD5PasswordFilePrinci
crammd5HexInitialiser.initialise(this);
_callbackHandlerMap.put(CRAMMD5HexSaslServer.MECHANISM,
crammd5HexInitialiser.getCallbackHandler());
- _mechanismsString = CRAMMD5HashedSaslServer.MECHANISM + " " +
CRAMMD5HexSaslServer.MECHANISM;
}
@@ -127,9 +134,9 @@ public class Base64MD5PasswordFilePrinci
}
@Override
- public String getMechanisms()
+ public List<String> getMechanisms()
{
- return _mechanismsString;
+ return _mechanisms;
}
@Override
@@ -150,6 +157,24 @@ public class Base64MD5PasswordFilePrinci
{
return new CRAMMD5HexSaslServer(mechanism, "AMQP", localFQDN,
null, callbackHandler);
}
+ else if(PlainSaslServer.MECHANISM.equals(mechanism))
+ {
+ return new PlainAdapterSaslServer(new
PlainAdapterSaslServer.PasswordValidator()
+ {
+ @Override
+ public boolean validatePassword(final String user, final
String password)
+ {
+ try
+ {
+ return verifyPassword(user, password.toCharArray());
+ }
+ catch (AccountNotFoundException e)
+ {
+ return false;
+ }
+ }
+ });
+ }
throw new SaslException("Unsupported mechanism: " + mechanism);
}
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/database/PlainPasswordFilePrincipalDatabase.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/database/PlainPasswordFilePrincipalDatabase.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/database/PlainPasswordFilePrincipalDatabase.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/database/PlainPasswordFilePrincipalDatabase.java
Thu Jul 24 11:27:03 2014
@@ -21,7 +21,10 @@
package org.apache.qpid.server.security.auth.database;
import java.security.Principal;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import javax.security.auth.callback.CallbackHandler;
@@ -31,8 +34,7 @@ import javax.security.sasl.SaslException
import javax.security.sasl.SaslServer;
import org.apache.log4j.Logger;
-import org.apache.qpid.server.security.auth.sasl.amqplain.AmqPlainInitialiser;
-import org.apache.qpid.server.security.auth.sasl.amqplain.AmqPlainSaslServer;
+
import org.apache.qpid.server.security.auth.sasl.crammd5.CRAMMD5Initialiser;
import org.apache.qpid.server.security.auth.sasl.plain.PlainInitialiser;
import org.apache.qpid.server.security.auth.sasl.plain.PlainSaslServer;
@@ -49,14 +51,11 @@ public class PlainPasswordFilePrincipalD
private final Logger _logger =
Logger.getLogger(PlainPasswordFilePrincipalDatabase.class);
private final Map<String, CallbackHandler> _callbackHandlerMap = new
HashMap<String, CallbackHandler>();
- private String _mechanismsString;
+ private final List<String> _mechanisms =
Collections.unmodifiableList(Arrays.asList(PlainSaslServer.MECHANISM,
+
CRAMMD5Initialiser.MECHANISM));
public PlainPasswordFilePrincipalDatabase()
{
- AmqPlainInitialiser amqPlainInitialiser = new AmqPlainInitialiser();
- amqPlainInitialiser.initialise(this);
- _callbackHandlerMap.put(AmqPlainSaslServer.MECHANISM,
amqPlainInitialiser.getCallbackHandler());
-
PlainInitialiser plainInitialiser = new PlainInitialiser();
plainInitialiser.initialise(this);
_callbackHandlerMap.put(PlainSaslServer.MECHANISM,
plainInitialiser.getCallbackHandler());
@@ -65,7 +64,6 @@ public class PlainPasswordFilePrincipalD
crammd5Initialiser.initialise(this);
_callbackHandlerMap.put(CRAMMD5Initialiser.MECHANISM,
crammd5Initialiser.getCallbackHandler());
- _mechanismsString = AmqPlainSaslServer.MECHANISM + " " +
PlainSaslServer.MECHANISM + " " + CRAMMD5Initialiser.MECHANISM;
}
@@ -113,9 +111,9 @@ public class PlainPasswordFilePrincipalD
@Override
- public String getMechanisms()
+ public List<String> getMechanisms()
{
- return _mechanismsString;
+ return _mechanisms;
}
@Override
@@ -136,10 +134,6 @@ public class PlainPasswordFilePrincipalD
{
return new PlainSaslServer(callbackHandler);
}
- else if(AmqPlainSaslServer.MECHANISM.equals(mechanism))
- {
- return new AmqPlainSaslServer(callbackHandler);
- }
throw new SaslException("Unsupported mechanism: " + mechanism);
}
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/database/PrincipalDatabase.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/database/PrincipalDatabase.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/database/PrincipalDatabase.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/database/PrincipalDatabase.java
Thu Jul 24 11:27:03 2014
@@ -20,19 +20,16 @@
*/
package org.apache.qpid.server.security.auth.database;
-import
org.apache.qpid.server.security.auth.sasl.AuthenticationProviderInitialiser;
+import java.io.File;
+import java.io.IOException;
+import java.security.Principal;
+import java.util.List;
import javax.security.auth.callback.PasswordCallback;
import javax.security.auth.login.AccountNotFoundException;
import javax.security.sasl.SaslException;
import javax.security.sasl.SaslServer;
-import java.io.File;
-import java.io.IOException;
-import java.security.Principal;
-import java.util.List;
-import java.util.Map;
-
/** Represents a "user database" which is really a way of storing principals
(i.e. usernames) and passwords. */
public interface PrincipalDatabase
{
@@ -108,7 +105,7 @@ public interface PrincipalDatabase
* Get the list of mechanisms supported for use with the PrincipalDatabase
* @return space separated list of supported Sasl mechanisms
*/
- public String getMechanisms();
+ public List<String> getMechanisms();
public SaslServer createSaslServer(String mechanism, String localFQDN,
Principal externalPrincipal) throws SaslException;
}
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/jmx/JMXPasswordAuthenticator.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/jmx/JMXPasswordAuthenticator.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/jmx/JMXPasswordAuthenticator.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/jmx/JMXPasswordAuthenticator.java
Thu Jul 24 11:27:03 2014
@@ -25,14 +25,14 @@ import java.rmi.server.RemoteServer;
import java.rmi.server.ServerNotActiveException;
import java.security.PrivilegedAction;
+import javax.management.remote.JMXAuthenticator;
+import javax.security.auth.Subject;
+
import org.apache.qpid.server.model.Broker;
import org.apache.qpid.server.security.SubjectCreator;
import
org.apache.qpid.server.security.auth.AuthenticationResult.AuthenticationStatus;
import org.apache.qpid.server.security.auth.SubjectAuthenticationResult;
-import javax.management.remote.JMXAuthenticator;
-import javax.security.auth.Subject;
-
public class JMXPasswordAuthenticator implements JMXAuthenticator
{
static final String UNABLE_TO_LOOKUP = "The broker was unable to lookup
the user details";
@@ -45,11 +45,13 @@ public class JMXPasswordAuthenticator im
private final Broker _broker;
private final SocketAddress _address;
+ private final boolean _secure;
- public JMXPasswordAuthenticator(Broker broker, SocketAddress address)
+ public JMXPasswordAuthenticator(Broker broker, SocketAddress address,
final boolean secure)
{
_broker = broker;
_address = address;
+ _secure = secure;
}
public Subject authenticate(Object credentials) throws SecurityException
@@ -95,7 +97,7 @@ public class JMXPasswordAuthenticator im
throw new SecurityException(SHOULD_BE_NON_NULL);
}
- SubjectCreator subjectCreator = _broker.getSubjectCreator(_address);
+ SubjectCreator subjectCreator = _broker.getSubjectCreator(_address,
_secure);
if (subjectCreator == null)
{
throw new SecurityException("Can't get subject creator for " +
_address);
@@ -149,4 +151,4 @@ public class JMXPasswordAuthenticator im
}
-}
\ No newline at end of file
+}
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractAuthenticationManager.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractAuthenticationManager.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractAuthenticationManager.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractAuthenticationManager.java
Thu Jul 24 11:27:03 2014
@@ -24,6 +24,7 @@ import java.security.AccessControlExcept
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
@@ -36,6 +37,7 @@ import org.apache.qpid.server.model.Auth
import org.apache.qpid.server.model.Broker;
import org.apache.qpid.server.model.ConfiguredObject;
import org.apache.qpid.server.model.IntegrityViolationException;
+import org.apache.qpid.server.model.ManagedAttributeField;
import org.apache.qpid.server.model.Port;
import org.apache.qpid.server.model.PreferencesProvider;
import org.apache.qpid.server.model.State;
@@ -48,7 +50,7 @@ import org.apache.qpid.server.security.a
public abstract class AbstractAuthenticationManager<T extends
AbstractAuthenticationManager<T>>
extends AbstractConfiguredObject<T>
- implements AuthenticationProvider<T>, AuthenticationManager
+ implements AuthenticationProvider<T>
{
private static final Logger LOGGER =
Logger.getLogger(AbstractAuthenticationManager.class);
@@ -56,6 +58,9 @@ public abstract class AbstractAuthentica
private PreferencesProvider _preferencesProvider;
private AtomicReference<State> _state = new
AtomicReference<State>(State.UNINITIALIZED);
+ @ManagedAttributeField
+ private List<String> _secureOnlyMechanisms;
+
protected AbstractAuthenticationManager(final Map<String, Object>
attributes, final Broker broker)
{
super(parentsMap(broker), attributes);
@@ -111,9 +116,9 @@ public abstract class AbstractAuthentica
}
@Override
- public SubjectCreator getSubjectCreator()
+ public SubjectCreator getSubjectCreator(final boolean secure)
{
- return new SubjectCreator(this, _broker.getGroupProviders());
+ return new SubjectCreator(this, _broker.getGroupProviders(), secure);
}
@Override
@@ -248,4 +253,10 @@ public abstract class AbstractAuthentica
}
return super.getAttribute(name);
}
+
+ @Override
+ public final List<String> getSecureOnlyMechanisms()
+ {
+ return _secureOnlyMechanisms;
+ }
}
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractScramAuthenticationManager.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractScramAuthenticationManager.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractScramAuthenticationManager.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractScramAuthenticationManager.java
Thu Jul 24 11:27:03 2014
@@ -29,6 +29,7 @@ import java.security.SecureRandom;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
@@ -49,6 +50,7 @@ import org.apache.qpid.server.model.User
import org.apache.qpid.server.security.access.Operation;
import org.apache.qpid.server.security.auth.AuthenticationResult;
import org.apache.qpid.server.security.auth.UsernamePrincipal;
+import org.apache.qpid.server.security.auth.sasl.plain.PlainAdapterSaslServer;
import org.apache.qpid.server.security.auth.sasl.scram.ScramSaslServer;
public abstract class AbstractScramAuthenticationManager<X extends
AbstractScramAuthenticationManager<X>>
@@ -57,6 +59,7 @@ public abstract class AbstractScramAuthe
{
static final Charset ASCII = Charset.forName("ASCII");
+ public static final String PLAIN = "PLAIN";
private final SecureRandom _random = new SecureRandom();
private int _iterationCount = 4096;
@@ -70,15 +73,9 @@ public abstract class AbstractScramAuthe
}
@Override
- public void initialise()
+ public List<String> getMechanisms()
{
-
- }
-
- @Override
- public String getMechanisms()
- {
- return getMechanismName();
+ return Collections.unmodifiableList(Arrays.asList(getMechanismName(),
PLAIN));
}
protected abstract String getMechanismName();
@@ -89,7 +86,18 @@ public abstract class AbstractScramAuthe
final Principal externalPrincipal)
throws SaslException
{
- return new ScramSaslServer(this, getMechanismName(), getHmacName(),
getDigestName());
+ if(getMechanismName().equals(mechanism))
+ {
+ return new ScramSaslServer(this, getMechanismName(),
getHmacName(), getDigestName());
+ }
+ else if(PLAIN.equals(mechanism))
+ {
+ return new PlainAdapterSaslServer(this);
+ }
+ else
+ {
+ throw new SaslException("Unknown mechanism: " + mechanism);
+ }
}
protected abstract String getDigestName();
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManager.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManager.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManager.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManager.java
Thu Jul 24 11:27:03 2014
@@ -21,6 +21,8 @@
package org.apache.qpid.server.security.auth.manager;
import java.security.Principal;
+import java.util.Collections;
+import java.util.List;
import java.util.Map;
import javax.security.auth.Subject;
@@ -59,15 +61,9 @@ public class AnonymousAuthenticationMana
}
@Override
- public void initialise()
+ public List<String> getMechanisms()
{
-
- }
-
- @Override
- public String getMechanisms()
- {
- return ANONYMOUS;
+ return Collections.singletonList(ANONYMOUS);
}
@Override
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerImpl.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerImpl.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerImpl.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerImpl.java
Thu Jul 24 11:27:03 2014
@@ -19,6 +19,8 @@
package org.apache.qpid.server.security.auth.manager;
import java.security.Principal;
+import java.util.Collections;
+import java.util.List;
import java.util.Map;
import javax.security.sasl.SaslException;
@@ -45,13 +47,6 @@ public class ExternalAuthenticationManag
super(attributes, broker);
}
-
- @Override
- public void initialise()
- {
-
- }
-
@Override
public boolean getUseFullDN()
{
@@ -59,9 +54,9 @@ public class ExternalAuthenticationManag
}
@Override
- public String getMechanisms()
+ public List<String> getMechanisms()
{
- return EXTERNAL;
+ return Collections.singletonList(EXTERNAL);
}
@Override
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/KerberosAuthenticationManager.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/KerberosAuthenticationManager.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/KerberosAuthenticationManager.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/KerberosAuthenticationManager.java
Thu Jul 24 11:27:03 2014
@@ -20,7 +20,9 @@ package org.apache.qpid.server.security.
import java.io.IOException;
import java.security.Principal;
+import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import javax.security.auth.callback.Callback;
@@ -50,17 +52,10 @@ public class KerberosAuthenticationManag
super(attributes, broker);
}
-
- @Override
- public void initialise()
- {
-
- }
-
@Override
- public String getMechanisms()
+ public List<String> getMechanisms()
{
- return GSSAPI_MECHANISM;
+ return Collections.singletonList(GSSAPI_MECHANISM);
}
@Override
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java
Thu Jul 24 11:27:03 2014
@@ -147,7 +147,7 @@ public abstract class PrincipalDatabaseA
}
}
- public String getMechanisms()
+ public List<String> getMechanisms()
{
return _principalDatabase.getMechanisms();
}
@@ -158,7 +158,7 @@ public abstract class PrincipalDatabaseA
}
/**
- * @see
org.apache.qpid.server.security.auth.manager.AuthenticationManager#authenticate(SaslServer,
byte[])
+ * @see
org.apache.qpid.server.model.AuthenticationProvider#authenticate(SaslServer,
byte[])
*/
public AuthenticationResult authenticate(SaslServer server, byte[]
response)
{
@@ -184,7 +184,7 @@ public abstract class PrincipalDatabaseA
}
/**
- * @see
org.apache.qpid.server.security.auth.manager.AuthenticationManager#authenticate(String,
String)
+ * @see
org.apache.qpid.server.model.AuthenticationProvider#authenticate(String, String)
*/
public AuthenticationResult authenticate(final String username, final
String password)
{
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/SimpleAuthenticationManager.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/SimpleAuthenticationManager.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/SimpleAuthenticationManager.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/SimpleAuthenticationManager.java
Thu Jul 24 11:27:03 2014
@@ -21,8 +21,10 @@ package org.apache.qpid.server.security.
import java.io.IOException;
import java.security.Principal;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import javax.security.auth.callback.Callback;
@@ -66,14 +68,9 @@ public class SimpleAuthenticationManager
}
@Override
- public void initialise()
+ public List<String> getMechanisms()
{
- }
-
- @Override
- public String getMechanisms()
- {
- return PLAIN_MECHANISM + " " + CRAM_MD5_MECHANISM;
+ return Collections.unmodifiableList(Arrays.asList(PLAIN_MECHANISM,
CRAM_MD5_MECHANISM));
}
@Override
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/SimpleLDAPAuthenticationManagerImpl.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/SimpleLDAPAuthenticationManagerImpl.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/SimpleLDAPAuthenticationManagerImpl.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/SimpleLDAPAuthenticationManagerImpl.java
Thu Jul 24 11:27:03 2014
@@ -24,7 +24,9 @@ import java.security.GeneralSecurityExce
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.Principal;
+import java.util.Collections;
import java.util.Hashtable;
+import java.util.List;
import java.util.Map;
import javax.naming.AuthenticationException;
@@ -111,11 +113,13 @@ public class SimpleLDAPAuthenticationMan
@Override
- public void initialise()
+ protected void onOpen()
{
+ super.onOpen();
+
_sslSocketFactoryOverrideClass = createSslSocketFactoryOverrideClass();
- validateInitialDirContext();
+ // validateInitialDirContext();
}
@Override
@@ -168,9 +172,9 @@ public class SimpleLDAPAuthenticationMan
@Override
- public String getMechanisms()
+ public List<String> getMechanisms()
{
- return PlainSaslServer.MECHANISM;
+ return Collections.singletonList(PlainSaslServer.MECHANISM);
}
@Override
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/sasl/crammd5/CRAMMD5HexInitialiser.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/sasl/crammd5/CRAMMD5HexInitialiser.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/sasl/crammd5/CRAMMD5HexInitialiser.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/sasl/crammd5/CRAMMD5HexInitialiser.java
Thu Jul 24 11:27:03 2014
@@ -133,7 +133,7 @@ public class CRAMMD5HexInitialiser exten
}
@Override
- public String getMechanisms()
+ public List<String> getMechanisms()
{
return _realPrincipalDatabase.getMechanisms();
}
Copied:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/sasl/plain/PlainAdapterSaslServer.java
(from r1612109,
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/sasl/plain/PlainSaslServer.java)
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/sasl/plain/PlainAdapterSaslServer.java?p2=qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/sasl/plain/PlainAdapterSaslServer.java&p1=qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/sasl/plain/PlainSaslServer.java&r1=1612109&r2=1613068&rev=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/sasl/plain/PlainSaslServer.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/sasl/plain/PlainAdapterSaslServer.java
Thu Jul 24 11:27:03 2014
@@ -20,28 +20,47 @@
*/
package org.apache.qpid.server.security.auth.sasl.plain;
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.NameCallback;
-import javax.security.auth.callback.UnsupportedCallbackException;
+import java.io.IOException;
+
import javax.security.sasl.AuthorizeCallback;
import javax.security.sasl.SaslException;
import javax.security.sasl.SaslServer;
-import java.io.IOException;
-public class PlainSaslServer implements SaslServer
+import org.apache.qpid.server.model.AuthenticationProvider;
+import org.apache.qpid.server.security.auth.AuthenticationResult;
+
+public class PlainAdapterSaslServer implements SaslServer
{
- public static final String MECHANISM = "PLAIN";
+ public static interface PasswordValidator
+ {
+ boolean validatePassword(String user, String password);
+ }
+
- private CallbackHandler _cbh;
+
+ public static final String MECHANISM = "PLAIN";
+ private final PasswordValidator _passwordValidator;
private String _authorizationId;
private boolean _complete = false;
- public PlainSaslServer(CallbackHandler cbh)
+ public PlainAdapterSaslServer(final PasswordValidator passwordValidator)
{
- _cbh = cbh;
+ _passwordValidator = passwordValidator;
+ }
+
+ public PlainAdapterSaslServer(final AuthenticationProvider authProvider)
+ {
+ this(new PasswordValidator()
+ {
+ @Override
+ public boolean validatePassword(final String user, final
String password)
+ {
+ AuthenticationResult authenticationResult =
authProvider.authenticate(user, password);
+ return authenticationResult != null &&
authenticationResult.getStatus() ==
AuthenticationResult.AuthenticationStatus.SUCCESS;
+ }
+ });
}
public String getMechanismName()
@@ -74,13 +93,18 @@ public class PlainSaslServer implements
int passwordLen = response.length - authcidNullPosition - 1;
String pwd = new String(response, authcidNullPosition + 1,
passwordLen, "utf8");
- // we do not care about the prompt but it throws if null
- NameCallback nameCb = new NameCallback("prompt", authzid);
- passwordCb = new PlainPasswordCallback("prompt", false, pwd);
- authzCb = new AuthorizeCallback(authzid, authzid);
- Callback[] callbacks = new Callback[]{nameCb, passwordCb, authzCb};
- _cbh.handle(callbacks);
+ if(_passwordValidator.validatePassword(authzid, pwd))
+ {
+ _authorizationId = authzid;
+ _complete = true;
+ }
+ else
+ {
+ throw new SaslException("Authentication failed");
+ }
+
+ return null;
}
catch (IOException e)
@@ -91,25 +115,8 @@ public class PlainSaslServer implements
}
throw new SaslException("Error processing data: " + e, e);
}
- catch (UnsupportedCallbackException e)
- {
- throw new SaslException("Unable to obtain data from callback
handler: " + e, e);
- }
- if (passwordCb.isAuthenticated())
- {
- _complete = true;
- }
- if (authzCb.isAuthorized() && _complete)
- {
- _authorizationId = authzCb.getAuthenticationID();
- return null;
- }
- else
- {
- throw new SaslException("Authentication failed");
- }
}
@@ -155,7 +162,6 @@ public class PlainSaslServer implements
public void dispose() throws SaslException
{
- _cbh = null;
}
}
Modified:
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/SubjectCreatorTest.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/SubjectCreatorTest.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/SubjectCreatorTest.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/SubjectCreatorTest.java
Thu Jul 24 11:27:03 2014
@@ -32,19 +32,19 @@ import javax.security.sasl.SaslServer;
import junit.framework.TestCase;
+import org.apache.qpid.server.model.AuthenticationProvider;
import org.apache.qpid.server.model.GroupProvider;
import org.apache.qpid.server.security.auth.AuthenticatedPrincipal;
import org.apache.qpid.server.security.auth.AuthenticationResult;
import
org.apache.qpid.server.security.auth.AuthenticationResult.AuthenticationStatus;
import org.apache.qpid.server.security.auth.SubjectAuthenticationResult;
-import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
public class SubjectCreatorTest extends TestCase
{
private static final String USERNAME = "username";
private static final String PASSWORD = "password";
- private AuthenticationManager _authenticationManager =
mock(AuthenticationManager.class);
+ private AuthenticationProvider _authenticationProvider =
mock(AuthenticationProvider.class);
private GroupProvider _groupManager1 = mock(GroupProvider.class);
private GroupProvider _groupManager2 = mock(GroupProvider.class);
@@ -64,9 +64,10 @@ public class SubjectCreatorTest extends
when(_groupManager1.getGroupPrincipalsForUser(USERNAME)).thenReturn(Collections.singleton(_group1));
when(_groupManager2.getGroupPrincipalsForUser(USERNAME)).thenReturn(Collections.singleton(_group2));
- _subjectCreator = new SubjectCreator(_authenticationManager, new
HashSet<GroupProvider>(Arrays.asList(_groupManager1, _groupManager2)));
+ _subjectCreator = new SubjectCreator(_authenticationProvider, new
HashSet<GroupProvider>(Arrays.asList(_groupManager1, _groupManager2)),
+ false);
_authenticationResult = new AuthenticationResult(_userPrincipal);
- when(_authenticationManager.authenticate(USERNAME,
PASSWORD)).thenReturn(_authenticationResult);
+ when(_authenticationProvider.authenticate(USERNAME,
PASSWORD)).thenReturn(_authenticationResult);
}
public void
testAuthenticateUsernameAndPasswordReturnsSubjectWithUserAndGroupPrincipals()
@@ -88,7 +89,7 @@ public class SubjectCreatorTest extends
public void
testSaslAuthenticationSuccessReturnsSubjectWithUserAndGroupPrincipals() throws
Exception
{
- when(_authenticationManager.authenticate(_testSaslServer,
_saslResponseBytes)).thenReturn(_authenticationResult);
+ when(_authenticationProvider.authenticate(_testSaslServer,
_saslResponseBytes)).thenReturn(_authenticationResult);
when(_testSaslServer.isComplete()).thenReturn(true);
when(_testSaslServer.getAuthorizationID()).thenReturn(USERNAME);
@@ -114,7 +115,7 @@ public class SubjectCreatorTest extends
{
AuthenticationResult failedAuthenticationResult = new
AuthenticationResult(expectedStatus);
- when(_authenticationManager.authenticate(USERNAME,
PASSWORD)).thenReturn(failedAuthenticationResult);
+ when(_authenticationProvider.authenticate(USERNAME,
PASSWORD)).thenReturn(failedAuthenticationResult);
SubjectAuthenticationResult subjectAuthenticationResult =
_subjectCreator.authenticate(USERNAME, PASSWORD);
@@ -132,7 +133,8 @@ public class SubjectCreatorTest extends
{
AuthenticationResult failedAuthenticationResult = new
AuthenticationResult(expectedStatus);
- when(_authenticationManager.authenticate(_testSaslServer,
_saslResponseBytes)).thenReturn(failedAuthenticationResult);
+ when(_authenticationProvider.authenticate(_testSaslServer,
_saslResponseBytes)).thenReturn(
+ failedAuthenticationResult);
when(_testSaslServer.isComplete()).thenReturn(false);
SubjectAuthenticationResult subjectAuthenticationResult =
_subjectCreator.authenticate(_testSaslServer, _saslResponseBytes);
Modified:
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/jmx/JMXPasswordAuthenticatorTest.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/jmx/JMXPasswordAuthenticatorTest.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/jmx/JMXPasswordAuthenticatorTest.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/jmx/JMXPasswordAuthenticatorTest.java
Thu Jul 24 11:27:03 2014
@@ -20,6 +20,7 @@
*/
package org.apache.qpid.server.security.auth.jmx;
+import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.doThrow;
@@ -66,7 +67,7 @@ public class JMXPasswordAuthenticatorTes
protected void setUp() throws Exception
{
when(_broker.getSecurityManager()).thenReturn(_securityManager);
- _rmipa = new JMXPasswordAuthenticator(_broker, new
InetSocketAddress(8999));
+ _rmipa = new JMXPasswordAuthenticator(_broker, new
InetSocketAddress(8999), false);
}
/**
@@ -74,7 +75,7 @@ public class JMXPasswordAuthenticatorTes
*/
public void testAuthenticationSuccess()
{
-
when(_broker.getSubjectCreator(any(SocketAddress.class))).thenReturn(_usernamePasswordOkaySubjectCreator);
+ when(_broker.getSubjectCreator(any(SocketAddress.class),
anyBoolean())).thenReturn(_usernamePasswordOkaySubjectCreator);
Subject newSubject = _rmipa.authenticate(_credentials);
assertSame("Subject must be unchanged", _loginSubject, newSubject);
@@ -85,7 +86,7 @@ public class JMXPasswordAuthenticatorTes
*/
public void testUsernameOrPasswordInvalid()
{
-
when(_broker.getSubjectCreator(any(SocketAddress.class))).thenReturn(_badPasswordSubjectCreator);
+ when(_broker.getSubjectCreator(any(SocketAddress.class),
anyBoolean())).thenReturn(_badPasswordSubjectCreator);
try
{
@@ -101,7 +102,7 @@ public class JMXPasswordAuthenticatorTes
public void testAuthorisationFailure()
{
-
when(_broker.getSubjectCreator(any(SocketAddress.class))).thenReturn(_usernamePasswordOkaySubjectCreator);
+ when(_broker.getSubjectCreator(any(SocketAddress.class),
anyBoolean())).thenReturn(_usernamePasswordOkaySubjectCreator);
doThrow(new
AccessControlException(USER_NOT_AUTHORISED_FOR_MANAGEMENT)).when(_securityManager).accessManagement();
try
@@ -120,7 +121,7 @@ public class JMXPasswordAuthenticatorTes
{
final Exception mockAuthException = new Exception("Mock Auth system
failure");
SubjectCreator subjectCreator = createMockSubjectCreator(false,
mockAuthException);
-
when(_broker.getSubjectCreator(any(SocketAddress.class))).thenReturn(subjectCreator);
+ when(_broker.getSubjectCreator(any(SocketAddress.class),
anyBoolean())).thenReturn(subjectCreator);
try
{
@@ -138,7 +139,7 @@ public class JMXPasswordAuthenticatorTes
*/
public void testNullSubjectCreator() throws Exception
{
-
when(_broker.getSubjectCreator(any(SocketAddress.class))).thenReturn(null);
+ when(_broker.getSubjectCreator(any(SocketAddress.class),
anyBoolean())).thenReturn(null);
try
{
Modified:
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManagerTest.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManagerTest.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManagerTest.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManagerTest.java
Thu Jul 24 11:27:03 2014
@@ -22,6 +22,7 @@ package org.apache.qpid.server.security.
import static
org.apache.qpid.server.security.auth.AuthenticatedPrincipalTestHelper.assertOnlyContainsWrapped;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@@ -36,7 +37,7 @@ import org.apache.qpid.test.utils.QpidTe
public class AnonymousAuthenticationManagerTest extends QpidTestCase
{
- private AuthenticationManager _manager;
+ private AuthenticationProvider _manager;
@Override
public void setUp() throws Exception
@@ -59,7 +60,7 @@ public class AnonymousAuthenticationMana
public void testGetMechanisms() throws Exception
{
- assertEquals("ANONYMOUS", _manager.getMechanisms());
+ assertEquals(Collections.singletonList("ANONYMOUS"),
_manager.getMechanisms());
}
public void testCreateSaslServer() throws Exception
Modified:
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerTest.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerTest.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerTest.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerTest.java
Thu Jul 24 11:27:03 2014
@@ -20,6 +20,7 @@ package org.apache.qpid.server.security.
import static
org.apache.qpid.server.security.auth.AuthenticatedPrincipalTestHelper.assertOnlyContainsWrapped;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@@ -60,7 +61,7 @@ public class ExternalAuthenticationManag
public void testGetMechanisms() throws Exception
{
- assertEquals("EXTERNAL", _manager.getMechanisms());
+ assertEquals(Collections.singletonList("EXTERNAL"),
_manager.getMechanisms());
}
public void testCreateSaslServer() throws Exception
Modified:
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManagerTest.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManagerTest.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManagerTest.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManagerTest.java
Thu Jul 24 11:27:03 2014
@@ -28,6 +28,7 @@ import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.security.Principal;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -91,7 +92,7 @@ public class PrincipalDatabaseAuthentica
{
_principalDatabase = mock(PrincipalDatabase.class);
- when(_principalDatabase.getMechanisms()).thenReturn(MOCK_MECH_NAME);
+
when(_principalDatabase.getMechanisms()).thenReturn(Collections.singletonList(MOCK_MECH_NAME));
when(_principalDatabase.createSaslServer(MOCK_MECH_NAME, LOCALHOST,
null)).thenReturn(new MySaslServer(false, true));
setupManager(false);
Modified:
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/ScramSHA1AuthenticationManagerTest.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/ScramSHA1AuthenticationManagerTest.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/ScramSHA1AuthenticationManagerTest.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/ScramSHA1AuthenticationManagerTest.java
Thu Jul 24 11:27:03 2014
@@ -29,6 +29,8 @@ import java.util.Map;
import java.util.UUID;
import javax.security.auth.login.AccountNotFoundException;
+import javax.security.sasl.SaslException;
+import javax.security.sasl.SaslServer;
import org.apache.qpid.server.configuration.updater.CurrentThreadTaskExecutor;
import org.apache.qpid.server.configuration.updater.TaskExecutor;
@@ -36,6 +38,7 @@ import org.apache.qpid.server.model.Auth
import org.apache.qpid.server.model.Broker;
import org.apache.qpid.server.model.User;
import org.apache.qpid.server.security.SecurityManager;
+import org.apache.qpid.server.security.SubjectCreator;
import org.apache.qpid.server.security.auth.AuthenticationResult;
import org.apache.qpid.server.util.BrokerTestHelper;
import org.apache.qpid.test.utils.QpidTestCase;
@@ -61,6 +64,7 @@ public class ScramSHA1AuthenticationMana
attributesMap.put(AuthenticationProvider.NAME, getTestName());
attributesMap.put(AuthenticationProvider.ID, UUID.randomUUID());
_authManager = new ScramSHA1AuthenticationManager(attributesMap,
_broker);
+ _authManager.open();
}
@Override
@@ -70,6 +74,35 @@ public class ScramSHA1AuthenticationMana
super.tearDown();
}
+ public void testMechanisms()
+ {
+ SubjectCreator insecureCreator = _authManager.getSubjectCreator(false);
+ assertFalse("PLAIN authentication should not be available on an
insecure connection", insecureCreator.getMechanisms().contains("PLAIN"));
+ SubjectCreator secureCreator = _authManager.getSubjectCreator(true);
+ assertTrue("PLAIN authentication should be available on a secure
connection", secureCreator.getMechanisms().contains("PLAIN"));
+
+ try
+ {
+ SaslServer saslServer = secureCreator.createSaslServer("PLAIN",
"127.0.0.1", null);
+ assertNotNull(saslServer);
+ }
+ catch (SaslException e)
+ {
+ fail("Unable to create a SaslServer for PLAIN authentication on a
secure connection" + e.getMessage());
+ }
+
+ try
+ {
+ SaslServer saslServer = insecureCreator.createSaslServer("PLAIN",
"127.0.0.1", null);
+ fail("Erroneously created a SaslServer for PLAIN authentication on
an insecure connection");
+ }
+ catch (SaslException e)
+ {
+ // Pass
+ }
+
+ }
+
public void testAddChildAndThenDelete()
{
// No children should be present before the test starts
Modified:
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/SimpleAuthenticationManagerTest.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/SimpleAuthenticationManagerTest.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/SimpleAuthenticationManagerTest.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/SimpleAuthenticationManagerTest.java
Thu Jul 24 11:27:03 2014
@@ -22,6 +22,7 @@ package org.apache.qpid.server.security.
import java.security.Principal;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
@@ -41,7 +42,7 @@ public class SimpleAuthenticationManager
{
private static final String TEST_USER = "testUser";
private static final String TEST_PASSWORD = "testPassword";
- private AuthenticationManager _authenticationManager;
+ private AuthenticationProvider _authenticationManager;
public void setUp() throws Exception
{
@@ -58,7 +59,10 @@ public class SimpleAuthenticationManager
public void testGetMechanisms()
{
- assertEquals("Unexpected mechanisms", "PLAIN CRAM-MD5",
_authenticationManager.getMechanisms());
+ List<String> mechanisms = _authenticationManager.getMechanisms();
+ assertEquals("Unexpected number of mechanisms", 2, mechanisms.size());
+ assertTrue("PLAIN was not present", mechanisms.contains("PLAIN"));
+ assertTrue("CRAM-MD5 was not present",
mechanisms.contains("CRAM-MD5"));
}
public void testCreateSaslServerForUnsupportedMechanisms() throws Exception
Modified:
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/sasl/TestPrincipalDatabase.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/sasl/TestPrincipalDatabase.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/sasl/TestPrincipalDatabase.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/sasl/TestPrincipalDatabase.java
Thu Jul 24 11:27:03 2014
@@ -90,7 +90,7 @@ public class TestPrincipalDatabase imple
}
@Override
- public String getMechanisms()
+ public List<String> getMechanisms()
{
// TODO Auto-generated method stub
return null;
Modified:
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/util/BrokerTestHelper.java
Thu Jul 24 11:27:03 2014
@@ -21,11 +21,13 @@
package org.apache.qpid.server.util;
import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.net.SocketAddress;
import java.security.PrivilegedAction;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@@ -78,13 +80,13 @@ public class BrokerTestHelper
when(systemContext.getCategoryClass()).thenReturn(SystemContext.class);
SubjectCreator subjectCreator = mock(SubjectCreator.class);
- when(subjectCreator.getMechanisms()).thenReturn("");
+
when(subjectCreator.getMechanisms()).thenReturn(Collections.<String>emptyList());
Broker broker = mock(Broker.class);
when(broker.getConnection_sessionCountLimit()).thenReturn(1);
when(broker.getConnection_closeWhenNoRoute()).thenReturn(false);
when(broker.getId()).thenReturn(UUID.randomUUID());
-
when(broker.getSubjectCreator(any(SocketAddress.class))).thenReturn(subjectCreator);
+ when(broker.getSubjectCreator(any(SocketAddress.class),
anyBoolean())).thenReturn(subjectCreator);
when(broker.getSecurityManager()).thenReturn(new
SecurityManager(broker, false));
when(broker.getObjectFactory()).thenReturn(objectFactory);
when(broker.getModel()).thenReturn(objectFactory.getModel());
Modified:
qpid/trunk/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ProtocolEngineCreator_0_10.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ProtocolEngineCreator_0_10.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ProtocolEngineCreator_0_10.java
(original)
+++
qpid/trunk/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ProtocolEngineCreator_0_10.java
Thu Jul 24 11:27:03 2014
@@ -77,7 +77,8 @@ public class ProtocolEngineCreator_0_10
fqdn = ((InetSocketAddress) address).getHostName();
}
final ConnectionDelegate connDelegate = new
ServerConnectionDelegate(broker,
- fqdn, broker.getSubjectCreator(address));
+ fqdn, broker.getSubjectCreator(address, transport.isSecure())
+ );
ServerConnection conn = new ServerConnection(id,broker);
Modified:
qpid/trunk/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java
(original)
+++
qpid/trunk/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java
Thu Jul 24 11:27:03 2014
@@ -31,7 +31,6 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.StringTokenizer;
import javax.security.sasl.SaslException;
import javax.security.sasl.SaslServer;
@@ -84,12 +83,12 @@ public class ServerConnectionDelegate ex
}
private ServerConnectionDelegate(Map<String, Object> properties,
- List<Object> locales,
- Broker broker,
- String localFQDN,
- SubjectCreator subjectCreator)
+ List<Object> locales,
+ Broker broker,
+ String localFQDN,
+ SubjectCreator subjectCreator)
{
- super(properties, parseToList(subjectCreator.getMechanisms()),
locales);
+ super(properties, (List) subjectCreator.getMechanisms(), locales);
_broker = broker;
_localFQDN = localFQDN;
@@ -128,17 +127,6 @@ public class ServerConnectionDelegate ex
return map;
}
- private static List<Object> parseToList(String mechanisms)
- {
- List<Object> list = new ArrayList<Object>();
- StringTokenizer tokenizer = new StringTokenizer(mechanisms, " ");
- while(tokenizer.hasMoreTokens())
- {
- list.add(tokenizer.nextToken());
- }
- return list;
- }
-
public ServerSession getSession(Connection conn, SessionAttach atc)
{
SessionDelegate serverSessionDelegate = new ServerSessionDelegate();
Modified:
qpid/trunk/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java
(original)
+++
qpid/trunk/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java
Thu Jul 24 11:27:03 2014
@@ -496,7 +496,16 @@ public class AMQProtocolEngine implement
// This sets the protocol version (and hence framing classes) for
this session.
setProtocolVersion(pv);
- String mechanisms =
_broker.getSubjectCreator(getLocalAddress()).getMechanisms();
+ StringBuilder mechanismBuilder = new StringBuilder();
+ for(String mechanismName :
_broker.getSubjectCreator(getLocalAddress(),
_transport.isSecure()).getMechanisms())
+ {
+ if(mechanismBuilder.length() != 0)
+ {
+ mechanismBuilder.append(' ');
+ }
+ mechanismBuilder.append(mechanismName);
+ }
+ String mechanisms = mechanismBuilder.toString();
String locales = "en_US";
Modified:
qpid/trunk/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/state/AMQStateManager.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/state/AMQStateManager.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/state/AMQStateManager.java
(original)
+++
qpid/trunk/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/state/AMQStateManager.java
Thu Jul 24 11:27:03 2014
@@ -20,6 +20,11 @@
*/
package org.apache.qpid.server.protocol.v0_8.state;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+
+import javax.security.auth.Subject;
+
import org.apache.log4j.Logger;
import org.apache.qpid.AMQException;
@@ -37,11 +42,6 @@ import org.apache.qpid.server.protocol.v
import org.apache.qpid.server.security.SubjectCreator;
import org.apache.qpid.server.util.ServerScopedRuntimeException;
-import javax.security.auth.Subject;
-
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
/**
* The state manager is responsible for managing the state of the protocol
session. <p/> For each AMQProtocolHandler
* there is a separate state manager.
@@ -147,6 +147,6 @@ public class AMQStateManager implements
public SubjectCreator getSubjectCreator()
{
- return
_broker.getSubjectCreator(getProtocolSession().getLocalAddress());
+ return
_broker.getSubjectCreator(getProtocolSession().getLocalAddress(),
getProtocolSession().getTransport().isSecure());
}
}
Modified:
qpid/trunk/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0_SASL.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0_SASL.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0_SASL.java
(original)
+++
qpid/trunk/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0_SASL.java
Thu Jul 24 11:27:03 2014
@@ -27,6 +27,7 @@ import java.nio.ByteBuffer;
import java.security.Principal;
import java.security.PrivilegedAction;
import java.util.LinkedHashMap;
+import java.util.List;
import java.util.Map;
import javax.security.auth.Subject;
@@ -184,7 +185,7 @@ public class ProtocolEngine_1_0_0_SASL i
Container container = new Container(_broker.getId().toString());
- SubjectCreator subjectCreator =
_broker.getSubjectCreator(getLocalAddress());
+ SubjectCreator subjectCreator =
_broker.getSubjectCreator(getLocalAddress(), _transport.isSecure());
_endpoint = new ConnectionEndpoint(container,
asSaslServerProvider(subjectCreator));
_endpoint.setLogger(new ConnectionEndpoint.FrameReceiptLogger()
{
@@ -236,7 +237,8 @@ public class ProtocolEngine_1_0_0_SASL i
_sender.send(HEADER.duplicate());
_sender.flush();
- _endpoint.initiateSASL(subjectCreator.getMechanisms().split(" "));
+ List<String> mechanisms = subjectCreator.getMechanisms();
+ _endpoint.initiateSASL(mechanisms.toArray(new
String[mechanisms.size()]));
}
Modified:
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementUtil.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementUtil.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementUtil.java
(original)
+++
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementUtil.java
Thu Jul 24 11:27:03 2014
@@ -45,6 +45,7 @@ import org.apache.qpid.server.security.a
import
org.apache.qpid.server.security.auth.AuthenticationResult.AuthenticationStatus;
import org.apache.qpid.server.security.auth.SubjectAuthenticationResult;
import org.apache.qpid.server.security.auth.UsernamePrincipal;
+import
org.apache.qpid.server.security.auth.manager.AnonymousAuthenticationManager;
import
org.apache.qpid.server.security.auth.manager.ExternalAuthenticationManager;
import org.apache.qpid.transport.network.security.ssl.SSLUtil;
@@ -146,14 +147,14 @@ public class HttpManagementUtil
Subject subject = null;
SocketAddress localAddress = getSocketAddress(request);
final AuthenticationProvider authenticationProvider =
managementConfig.getAuthenticationProvider(localAddress);
- SubjectCreator subjectCreator =
authenticationProvider.getSubjectCreator();
+ SubjectCreator subjectCreator =
authenticationProvider.getSubjectCreator(request.isSecure());
String remoteUser = request.getRemoteUser();
- if (remoteUser != null ||
subjectCreator.isAnonymousAuthenticationAllowed())
+ if (remoteUser != null || authenticationProvider instanceof
AnonymousAuthenticationManager)
{
subject = authenticateUser(subjectCreator, remoteUser, null);
}
- else if(subjectCreator.isExternalAuthenticationAllowed()
+ else if(authenticationProvider instanceof ExternalAuthenticationManager
&&
Collections.list(request.getAttributeNames()).contains("javax.servlet.request.X509Certificate"))
{
Principal principal = null;
Modified:
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/SaslServlet.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/SaslServlet.java?rev=1613068&r1=1613067&r2=1613068&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/SaslServlet.java
(original)
+++
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/SaslServlet.java
Thu Jul 24 11:27:03 2014
@@ -20,34 +20,36 @@
*/
package org.apache.qpid.server.management.plugin.servlet.rest;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.net.SocketAddress;
+import java.security.Principal;
+import java.security.SecureRandom;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
+import javax.security.auth.Subject;
+import javax.security.sasl.SaslException;
+import javax.security.sasl.SaslServer;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
import org.apache.commons.codec.binary.Base64;
-import
org.apache.qpid.server.management.plugin.servlet.ServletConnectionPrincipal;
-import org.apache.qpid.server.util.ConnectionScopedRuntimeException;
+import org.apache.log4j.Logger;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;
-import org.apache.log4j.Logger;
import org.apache.qpid.server.management.plugin.HttpManagementConfiguration;
import org.apache.qpid.server.management.plugin.HttpManagementUtil;
+import
org.apache.qpid.server.management.plugin.servlet.ServletConnectionPrincipal;
import org.apache.qpid.server.model.Broker;
import org.apache.qpid.server.security.SubjectCreator;
import org.apache.qpid.server.security.auth.AuthenticatedPrincipal;
-
-import javax.security.auth.Subject;
-import javax.security.sasl.SaslException;
-import javax.security.sasl.SaslServer;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.net.SocketAddress;
-import java.security.Principal;
-import java.security.SecureRandom;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Random;
+import org.apache.qpid.server.util.ConnectionScopedRuntimeException;
public class SaslServlet extends AbstractServlet
{
@@ -81,7 +83,8 @@ public class SaslServlet extends Abstrac
getRandom(session);
SubjectCreator subjectCreator = getSubjectCreator(request);
- String[] mechanisms = subjectCreator.getMechanisms().split(" ");
+ List<String> mechanismsList = subjectCreator.getMechanisms();
+ String[] mechanisms = mechanismsList.toArray(new
String[mechanismsList.size()]);
Map<String, Object> outputObject = new LinkedHashMap<String, Object>();
final Subject subject = getAuthorisedSubject(request);
@@ -237,7 +240,7 @@ public class SaslServlet extends Abstrac
if(saslServer.isComplete())
{
- Subject originalSubject =
subjectCreator.createSubjectWithGroups(saslServer.getAuthorizationID());
+ Subject originalSubject =
subjectCreator.createSubjectWithGroups(new
AuthenticatedPrincipal(saslServer.getAuthorizationID()));
Subject subject = new Subject(false,
originalSubject.getPrincipals(),
originalSubject.getPublicCredentials(),
@@ -298,7 +301,8 @@ public class SaslServlet extends Abstrac
private SubjectCreator getSubjectCreator(HttpServletRequest request)
{
SocketAddress localAddress =
HttpManagementUtil.getSocketAddress(request);
- return
HttpManagementUtil.getManagementConfiguration(getServletContext()).getAuthenticationProvider(localAddress).getSubjectCreator();
+ return
HttpManagementUtil.getManagementConfiguration(getServletContext()).getAuthenticationProvider(localAddress).getSubjectCreator(
+ request.isSecure());
}
@Override
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]