Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemConfig.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemConfig.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemConfig.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemConfig.java Tue Jan 27 15:00:13 2015 @@ -20,7 +20,6 @@ */ package org.apache.qpid.server.model; -import org.apache.qpid.server.BrokerOptions; import org.apache.qpid.server.logging.EventLogger; import org.apache.qpid.server.logging.LogRecorder; import org.apache.qpid.server.store.DurableConfigurationStore; @@ -28,9 +27,41 @@ import org.apache.qpid.server.store.Dura @ManagedObject (creatable = false) public interface SystemConfig<X extends SystemConfig<X>> extends ConfiguredObject<X> { - EventLogger getEventLogger(); + String MANAGEMENT_MODE = "managementMode"; + + String MANAGEMENT_MODE_QUIESCE_VIRTUAL_HOSTS = "managementModeQuiesceVirtualHosts"; + String MANAGEMENT_MODE_RMI_PORT_OVERRIDE = "managementModeRmiPortOverride"; + String MANAGEMENT_MODE_JMX_PORT_OVERRIDE = "managementModeJmxPortOverride"; + String MANAGEMENT_MODE_HTTP_PORT_OVERRIDE = "managementModeHttpPortOverride"; + String MANAGEMENT_MODE_PASSWORD = "managementModePassword"; + String INITIAL_CONFIGURATION_LOCATION = "initialConfigurationLocation"; + String STARTUP_LOGGED_TO_SYSTEM_OUT = "startupLoggedToSystemOut"; + + @ManagedAttribute(defaultValue = "false") + boolean isManagementMode(); + + @ManagedAttribute(defaultValue = "0") + int getManagementModeRmiPortOverride(); + + @ManagedAttribute(defaultValue = "0") + int getManagementModeJmxPortOverride(); + + @ManagedAttribute(defaultValue = "0") + int getManagementModeHttpPortOverride(); + + @ManagedAttribute(defaultValue = "false") + boolean isManagementModeQuiesceVirtualHosts(); + + @ManagedAttribute(secure = true) + String getManagementModePassword(); + + @ManagedAttribute + String getInitialConfigurationLocation(); - BrokerOptions getBrokerOptions(); + @ManagedAttribute(defaultValue = "true") + boolean isStartupLoggedToSystemOut(); + + EventLogger getEventLogger(); Broker getBroker(); @@ -39,4 +70,5 @@ public interface SystemConfig<X extends DurableConfigurationStore getConfigurationStore(); BrokerShutdownProvider getBrokerShutdownProvider(); + }
Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java Tue Jan 27 15:00:13 2015 @@ -40,19 +40,9 @@ public interface VirtualHost<X extends V String STORE_TRANSACTION_IDLE_TIMEOUT_WARN = "storeTransactionIdleTimeoutWarn"; String STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE = "storeTransactionOpenTimeoutClose"; String STORE_TRANSACTION_OPEN_TIMEOUT_WARN = "storeTransactionOpenTimeoutWarn"; - String SUPPORTED_EXCHANGE_TYPES = "supportedExchangeTypes"; - String SUPPORTED_QUEUE_TYPES = "supportedQueueTypes"; String HOUSE_KEEPING_THREAD_COUNT = "houseKeepingThreadCount"; String MODEL_VERSION = "modelVersion"; - // TODO - this isn't really an attribute - @DerivedAttribute - Collection<String> getSupportedExchangeTypes(); - - // TODO - this isn't really an attribute - @DerivedAttribute - Collection<String> getSupportedQueueTypes(); - @ManagedContextDefault( name = "queue.deadLetterQueueEnabled") public static final boolean DEFAULT_DEAD_LETTER_QUEUE_ENABLED = false; Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java Tue Jan 27 15:00:13 2015 @@ -71,13 +71,13 @@ public class BrokerAdapter extends Abstr CONNECTION_HEART_BEAT_DELAY, STATISTICS_REPORTING_PERIOD }; + private SystemConfig<?> _parent; private EventLogger _eventLogger; private final LogRecorder _logRecorder; private final SecurityManager _securityManager; private AuthenticationProvider<?> _managementModeAuthenticationProvider; - private BrokerOptions _brokerOptions; private Timer _reportingTimer; private final StatisticsCounter _messagesDelivered, _dataDelivered, _messagesReceived, _dataReceived; @@ -108,18 +108,17 @@ public class BrokerAdapter extends Abstr SystemConfig parent) { super(parentsMap(parent), attributes); - + _parent = parent; _logRecorder = parent.getLogRecorder(); _eventLogger = parent.getEventLogger(); - _brokerOptions = parent.getBrokerOptions(); - _securityManager = new SecurityManager(this, _brokerOptions.isManagementMode()); - if (_brokerOptions.isManagementMode()) + _securityManager = new SecurityManager(this, parent.isManagementMode()); + if (parent.isManagementMode()) { Map<String,Object> authManagerAttrs = new HashMap<String, Object>(); authManagerAttrs.put(NAME,"MANAGEMENT_MODE_AUTHENTICATION"); authManagerAttrs.put(ID, UUID.randomUUID()); SimpleAuthenticationManager authManager = new SimpleAuthenticationManager(authManagerAttrs, this); - authManager.addUser(BrokerOptions.MANAGEMENT_MODE_USER_NAME, _brokerOptions.getManagementModePassword()); + authManager.addUser(BrokerOptions.MANAGEMENT_MODE_USER_NAME, _parent.getManagementModePassword()); _managementModeAuthenticationProvider = authManager; } _messagesDelivered = new StatisticsCounter("messages-delivered"); @@ -181,6 +180,14 @@ public class BrokerAdapter extends Abstr deleted(); throw new IllegalArgumentException(getClass().getSimpleName() + " must be durable"); } + + Collection<AccessControlProvider<?>> accessControlProviders = getAccessControlProviders(); + + if(accessControlProviders != null && accessControlProviders.size() > 1) + { + deleted(); + throw new IllegalArgumentException("At most one AccessControlProvider can be defined"); + } } @Override @@ -230,7 +237,7 @@ public class BrokerAdapter extends Abstr @StateTransition( currentState = State.UNINITIALIZED, desiredState = State.ACTIVE ) private void activate() { - if(_brokerOptions.isManagementMode()) + if(_parent.isManagementMode()) { _managementModeAuthenticationProvider.open(); } @@ -243,14 +250,7 @@ public class BrokerAdapter extends Abstr if (children != null) { for (final ConfiguredObject<?> child : children) { - if (child instanceof AccessControlProvider) - { - addAccessControlProvider((AccessControlProvider)child); - } - else - { - child.addChangeListener(this); - } + child.addChangeListener(this); if (child.getState() == State.ERRORED ) { @@ -263,7 +263,7 @@ public class BrokerAdapter extends Abstr } final boolean brokerShutdownOnErroredChild = getContextValue(Boolean.class, BROKER_FAIL_STARTUP_WITH_ERRORED_CHILD); - if (!_brokerOptions.isManagementMode() && brokerShutdownOnErroredChild && hasBrokerAnyErroredChildren) + if (!_parent.isManagementMode() && brokerShutdownOnErroredChild && hasBrokerAnyErroredChildren) { throw new IllegalStateException(String.format("Broker context variable %s is set and the broker has %s children", BROKER_FAIL_STARTUP_WITH_ERRORED_CHILD, State.ERRORED)); @@ -274,7 +274,7 @@ public class BrokerAdapter extends Abstr if (isManagementMode()) { _eventLogger.message(BrokerMessages.MANAGEMENT_MODE(BrokerOptions.MANAGEMENT_MODE_USER_NAME, - _brokerOptions.getManagementModePassword())); + _parent.getManagementModePassword())); } setState(State.ACTIVE); } @@ -317,8 +317,7 @@ public class BrokerAdapter extends Abstr @Override public String getProcessPid() { - // TODO - return null; + return SystemUtils.getProcessPid(); } @Override @@ -328,30 +327,6 @@ public class BrokerAdapter extends Abstr } @Override - public Collection<String> getSupportedVirtualHostNodeTypes() - { - return getObjectFactory().getSupportedTypes(VirtualHostNode.class); - } - - @Override - public Collection<String> getSupportedVirtualHostTypes() - { - return getObjectFactory().getSupportedTypes(VirtualHost.class); - } - - @Override - public Collection<String> getSupportedAuthenticationProviders() - { - return getObjectFactory().getSupportedTypes(AuthenticationProvider.class); - } - - @Override - public Collection<String> getSupportedPreferencesProviderTypes() - { - return getObjectFactory().getSupportedTypes(PreferencesProvider.class); - } - - @Override public String getDefaultVirtualHost() { return _defaultVirtualHost; @@ -604,23 +579,18 @@ public class BrokerAdapter extends Abstr private AccessControlProvider<?> createAccessControlProvider(final Map<String, Object> attributes) { + final Collection<AccessControlProvider<?>> currentProviders = getAccessControlProviders(); + if(currentProviders != null && !currentProviders.isEmpty()) + { + throw new IllegalConfigurationException("Cannot add a second AccessControlProvider"); + } AccessControlProvider<?> accessControlProvider = (AccessControlProvider<?>) createChild(AccessControlProvider.class, attributes); - addAccessControlProvider(accessControlProvider); + accessControlProvider.addChangeListener(this); return accessControlProvider; } - private void addAccessControlProvider(final AccessControlProvider<?> accessControlProvider) - { - accessControlProvider.addChangeListener(this); - accessControlProvider.addChangeListener(_securityManager); - if(accessControlProvider.getState() == State.ACTIVE) - { - _securityManager.addPlugin(accessControlProvider.getAccessControl()); - } - } - private boolean deleteAccessControlProvider(AccessControlProvider<?> accessControlProvider) { accessControlProvider.removeChangeListener(this); @@ -939,7 +909,7 @@ public class BrokerAdapter extends Abstr @Override public boolean isManagementMode() { - return _brokerOptions.isManagementMode(); + return _parent.isManagementMode(); } @Override Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImpl.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImpl.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImpl.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImpl.java Tue Jan 27 15:00:13 2015 @@ -54,7 +54,6 @@ import org.apache.qpid.server.security.g public class FileBasedGroupProviderImpl extends AbstractConfiguredObject<FileBasedGroupProviderImpl> implements FileBasedGroupProvider<FileBasedGroupProviderImpl> { - public static final String RESOURCE_BUNDLE = "org.apache.qpid.server.security.group.FileGroupProviderAttributeDescriptions"; public static final String GROUP_FILE_PROVIDER_TYPE = "GroupFile"; private static Logger LOGGER = Logger.getLogger(FileBasedGroupProviderImpl.class); @@ -357,7 +356,7 @@ public class FileBasedGroupProviderImpl private class GroupAdapter extends AbstractConfiguredObject<GroupAdapter> implements Group<GroupAdapter> { - + private GroupPrincipal _groupPrincipal; public GroupAdapter(Map<String, Object> attributes) { super(parentsMap(FileBasedGroupProviderImpl.this), attributes); @@ -396,6 +395,7 @@ public class FileBasedGroupProviderImpl groupMemberAdapter.open(); members.add(groupMemberAdapter); } + _groupPrincipal = new GroupPrincipal(getName()); } @Override @@ -463,16 +463,30 @@ public class FileBasedGroupProviderImpl setState(State.DELETED); } + @Override + public GroupPrincipal getGroupPrincipal() + { + return _groupPrincipal; + } + private class GroupMemberAdapter extends AbstractConfiguredObject<GroupMemberAdapter> implements GroupMember<GroupMemberAdapter> { + private Principal _principal; + public GroupMemberAdapter(Map<String, Object> attrMap) { // TODO - need to relate to the User object super(parentsMap(GroupAdapter.this),attrMap); } + @Override + protected void onOpen() + { + super.onOpen(); + _principal = new UsernamePrincipal(getName()); + } @Override public void onValidate() @@ -484,6 +498,8 @@ public class FileBasedGroupProviderImpl } } + + @Override protected void validateChange(final ConfiguredObject<?> proxyForValidation, final Set<String> changedAttributes) { @@ -517,6 +533,11 @@ public class FileBasedGroupProviderImpl setState(State.DELETED); } + @Override + public Principal getPrincipal() + { + return _principal; + } } } Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/Pluggable.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/Pluggable.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/Pluggable.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/Pluggable.java Tue Jan 27 15:00:13 2015 @@ -1,4 +1,4 @@ -package org.apache.qpid.server.plugin;/* +/* * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file @@ -19,6 +19,8 @@ package org.apache.qpid.server.plugin;/* * */ +package org.apache.qpid.server.plugin; + public interface Pluggable { String getType(); Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/QpidServiceLoader.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/QpidServiceLoader.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/QpidServiceLoader.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/QpidServiceLoader.java Tue Jan 27 15:00:13 2015 @@ -84,7 +84,8 @@ public class QpidServiceLoader private boolean isDisabledConfiguredType(final ConfiguredObjectTypeFactory<?> typeFactory) { - return Boolean.getBoolean("qpid.type.disabled:" + typeFactory.getCategoryClass().getSimpleName().toLowerCase() + String simpleName = typeFactory.getCategoryClass().getSimpleName().toLowerCase(); + return Boolean.getBoolean("qpid.type.disabled:" + simpleName + "." + typeFactory.getType()); } } Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/SystemConfigFactory.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/SystemConfigFactory.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/SystemConfigFactory.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/SystemConfigFactory.java Tue Jan 27 15:00:13 2015 @@ -20,7 +20,8 @@ */ package org.apache.qpid.server.plugin; -import org.apache.qpid.server.BrokerOptions; +import java.util.Map; + import org.apache.qpid.server.configuration.updater.TaskExecutor; import org.apache.qpid.server.logging.EventLogger; import org.apache.qpid.server.logging.LogRecorder; @@ -32,6 +33,6 @@ public interface SystemConfigFactory<X e public X newInstance(final TaskExecutor taskExecutor, final EventLogger eventLogger, final LogRecorder logRecorder, - final BrokerOptions brokerOptions, + final Map<String,Object> options, final BrokerShutdownProvider brokerShutdownProvider); } Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueue.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueue.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueue.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueue.java Tue Jan 27 15:00:13 2015 @@ -71,6 +71,8 @@ public interface AMQQueue<X extends AMQQ void decrementUnackedMsgCount(QueueEntry queueEntry); + void incrementUnackedMsgCount(QueueEntry entry); + boolean resend(final QueueEntry entry, final QueueConsumer<?> consumer); List<? extends QueueEntry> getMessagesOnTheQueue(); Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java Tue Jan 27 15:00:13 2015 @@ -1231,7 +1231,6 @@ public abstract class AbstractQueue<X ex setLastSeenEntry(sub, entry); _deliveredMessages.incrementAndGet(); - incrementUnackedMsgCount(entry); sub.send(entry, batch); } @@ -2462,13 +2461,15 @@ public abstract class AbstractQueue<X ex return _unackedMsgBytes.get(); } + @Override public void decrementUnackedMsgCount(QueueEntry queueEntry) { _unackedMsgCount.decrementAndGet(); _unackedMsgBytes.addAndGet(-queueEntry.getSize()); } - private void incrementUnackedMsgCount(QueueEntry entry) + @Override + public void incrementUnackedMsgCount(QueueEntry entry) { _unackedMsgCount.incrementAndGet(); _unackedMsgBytes.addAndGet(entry.getSize()); Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java Tue Jan 27 15:00:13 2015 @@ -214,6 +214,7 @@ public abstract class QueueEntryImpl imp if(acquired) { _deliveryCountUpdater.compareAndSet(this,-1,0); + getQueue().incrementUnackedMsgCount(this); } return acquired; } Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileKeyStoreImpl.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileKeyStoreImpl.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileKeyStoreImpl.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileKeyStoreImpl.java Tue Jan 27 15:00:13 2015 @@ -20,11 +20,15 @@ */ package org.apache.qpid.server.security; +import java.io.File; import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; import java.security.AccessControlException; import java.security.GeneralSecurityException; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; +import java.security.UnrecoverableKeyException; import java.security.cert.Certificate; import java.util.ArrayList; import java.util.Collection; @@ -48,6 +52,7 @@ import org.apache.qpid.server.model.Stat import org.apache.qpid.server.model.StateTransition; import org.apache.qpid.server.security.access.Operation; import org.apache.qpid.server.util.ServerScopedRuntimeException; +import org.apache.qpid.server.util.urlstreamhandler.data.Handler; import org.apache.qpid.transport.network.security.ssl.QpidClientX509KeyManager; import org.apache.qpid.transport.network.security.ssl.SSLUtil; @@ -69,7 +74,12 @@ public class FileKeyStoreImpl extends Ab private String _password; - private Broker<?> _broker; + private final Broker<?> _broker; + + static + { + Handler.register(); + } @ManagedObjectFactoryConstructor public FileKeyStoreImpl(Map<String, Object> attributes, Broker<?> broker) @@ -152,14 +162,25 @@ public class FileKeyStoreImpl extends Ab java.security.KeyStore keyStore; try { - String path = fileKeyStore.getPath(); + URL url = getUrlFromString(fileKeyStore.getPath()); String password = fileKeyStore.getPassword(); String keyStoreType = fileKeyStore.getKeyStoreType(); - keyStore = SSLUtil.getInitializedKeyStore(path, password, keyStoreType); + keyStore = SSLUtil.getInitializedKeyStore(url, password, keyStoreType); } + catch (Exception e) { - throw new IllegalConfigurationException("Cannot instantiate key store at " + fileKeyStore.getPath(), e); + final String message; + if (e instanceof IOException && e.getCause() != null && e.getCause() instanceof UnrecoverableKeyException) + { + message = "Check key store password. Cannot instantiate key store from '" + fileKeyStore.getPath() + "'."; + } + else + { + message = "Cannot instantiate key store from '" + fileKeyStore.getPath() + "'."; + } + + throw new IllegalConfigurationException(message, e); } if (fileKeyStore.getCertificateAlias() != null) @@ -176,8 +197,8 @@ public class FileKeyStoreImpl extends Ab } if (cert == null) { - throw new IllegalConfigurationException("Cannot find a certificate with alias " + fileKeyStore.getCertificateAlias() - + "in key store : " + fileKeyStore.getPath()); + throw new IllegalConfigurationException("Cannot find a certificate with alias '" + fileKeyStore.getCertificateAlias() + + "' in key store : " + fileKeyStore.getPath()); } } @@ -237,17 +258,18 @@ public class FileKeyStoreImpl extends Ab try { + URL url = getUrlFromString(_path); if (_certificateAlias != null) { return new KeyManager[] { - new QpidClientX509KeyManager( _certificateAlias, _path, _keyStoreType, getPassword(), + new QpidClientX509KeyManager( _certificateAlias, url, _keyStoreType, getPassword(), _keyManagerFactoryAlgorithm) }; } else { - final java.security.KeyStore ks = SSLUtil.getInitializedKeyStore(_path, getPassword(), _keyStoreType); + final java.security.KeyStore ks = SSLUtil.getInitializedKeyStore(url, getPassword(), _keyStoreType); char[] keyStoreCharPassword = getPassword() == null ? null : getPassword().toCharArray(); @@ -263,4 +285,20 @@ public class FileKeyStoreImpl extends Ab throw new GeneralSecurityException(e); } } + + private static URL getUrlFromString(String urlString) throws MalformedURLException + { + URL url; + try + { + url = new URL(urlString); + } + catch (MalformedURLException e) + { + File file = new File(urlString); + url = file.toURI().toURL(); + + } + return url; + } } Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileTrustStoreImpl.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileTrustStoreImpl.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileTrustStoreImpl.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileTrustStoreImpl.java Tue Jan 27 15:00:13 2015 @@ -20,11 +20,15 @@ */ package org.apache.qpid.server.security; +import java.io.File; import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; import java.security.AccessControlException; import java.security.GeneralSecurityException; import java.security.KeyStore; import java.security.NoSuchAlgorithmException; +import java.security.UnrecoverableKeyException; import java.util.ArrayList; import java.util.Collection; import java.util.Map; @@ -48,6 +52,7 @@ import org.apache.qpid.server.model.Stat import org.apache.qpid.server.model.TrustStore; import org.apache.qpid.server.security.access.Operation; import org.apache.qpid.server.security.auth.manager.SimpleLDAPAuthenticationManager; +import org.apache.qpid.server.util.urlstreamhandler.data.Handler; import org.apache.qpid.transport.network.security.ssl.QpidMultipleTrustManager; import org.apache.qpid.transport.network.security.ssl.QpidPeersOnlyTrustManager; import org.apache.qpid.transport.network.security.ssl.SSLUtil; @@ -66,7 +71,12 @@ public class FileTrustStoreImpl extends @ManagedAttributeField private String _password; - private Broker<?> _broker; + private final Broker<?> _broker; + + static + { + Handler.register(); + } @ManagedObjectFactoryConstructor public FileTrustStoreImpl(Map<String, Object> attributes, Broker<?> broker) @@ -114,12 +124,10 @@ public class FileTrustStoreImpl extends Collection<AuthenticationProvider> authenticationProviders = new ArrayList<AuthenticationProvider>(_broker.getAuthenticationProviders()); for (AuthenticationProvider authProvider : authenticationProviders) { - if(authProvider.getAttributeNames().contains(SimpleLDAPAuthenticationManager.TRUST_STORE)) + if (authProvider instanceof SimpleLDAPAuthenticationManager) { - Object attributeType = authProvider.getAttribute(AuthenticationProvider.TYPE); - Object attributeValue = authProvider.getAttribute(SimpleLDAPAuthenticationManager.TRUST_STORE); - if (SimpleLDAPAuthenticationManager.PROVIDER_TYPE.equals(attributeType) - && storeName.equals(attributeValue)) + SimpleLDAPAuthenticationManager simpleLdap = (SimpleLDAPAuthenticationManager) authProvider; + if (simpleLdap.getTrustStore() == this) { throw new IntegrityViolationException("Trust store '" + storeName @@ -185,11 +193,22 @@ public class FileTrustStoreImpl extends { try { - SSLUtil.getInitializedKeyStore(trustStore.getPath(), trustStore.getPassword(), trustStore.getTrustStoreType()); + URL trustStoreUrl = getUrlFromString(trustStore.getPath()); + SSLUtil.getInitializedKeyStore(trustStoreUrl, trustStore.getPassword(), trustStore.getTrustStoreType()); } catch (Exception e) { - throw new IllegalConfigurationException("Cannot instantiate trust store at " + trustStore.getPath(), e); + final String message; + if (e instanceof IOException && e.getCause() != null && e.getCause() instanceof UnrecoverableKeyException) + { + message = "Check trust store password. Cannot instantiate trust store from '" + trustStore.getPath() + "'."; + } + else + { + message = "Cannot instantiate trust store from '" + trustStore.getPath() + "'."; + } + + throw new IllegalConfigurationException(message, e); } try @@ -238,14 +257,15 @@ public class FileTrustStoreImpl extends } public TrustManager[] getTrustManagers() throws GeneralSecurityException { - String trustStorePath = _path; String trustStorePassword = getPassword(); String trustStoreType = _trustStoreType; String trustManagerFactoryAlgorithm = _trustManagerFactoryAlgorithm; try { - KeyStore ts = SSLUtil.getInitializedKeyStore(trustStorePath, trustStorePassword, trustStoreType); + URL trustStoreUrl = getUrlFromString(_path); + + KeyStore ts = SSLUtil.getInitializedKeyStore(trustStoreUrl, trustStorePassword, trustStoreType); final TrustManagerFactory tmf = TrustManagerFactory .getInstance(trustManagerFactoryAlgorithm); tmf.init(ts); @@ -291,4 +311,21 @@ public class FileTrustStoreImpl extends throw new GeneralSecurityException(e); } } + + private static URL getUrlFromString(String urlString) throws MalformedURLException + { + URL url; + try + { + url = new URL(urlString); + } + catch (MalformedURLException e) + { + File file = new File(urlString); + url = file.toURI().toURL(); + + } + return url; + } + } Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java Tue Jan 27 15:00:13 2015 @@ -44,7 +44,6 @@ import org.apache.qpid.server.consumer.C import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.model.AccessControlProvider; import org.apache.qpid.server.model.Broker; -import org.apache.qpid.server.model.ConfigurationChangeListener; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.State; import org.apache.qpid.server.protocol.AMQConnectionModel; @@ -57,18 +56,17 @@ import org.apache.qpid.server.security.a import org.apache.qpid.server.security.auth.AuthenticatedPrincipal; import org.apache.qpid.server.security.auth.TaskPrincipal; -public class SecurityManager implements ConfigurationChangeListener +public class SecurityManager { private static final Subject SYSTEM = new Subject(true, Collections.singleton(new SystemPrincipal()), Collections.emptySet(), Collections.emptySet()); - private final ConcurrentMap<String, AccessControl> _plugins = new ConcurrentHashMap<String, AccessControl>(); private final boolean _managementMode; private final Broker<?> _broker; - private final ConcurrentMap<PublishAccessCheckCacheEntry, PublishAccessCheck> _publishAccessCheckCache = new ConcurrentHashMap<SecurityManager.PublishAccessCheckCacheEntry, SecurityManager.PublishAccessCheck>(); + private final ConcurrentMap<PublishAccessCheckCacheEntry, PublishAccessCheck> _publishAccessCheckCache = new ConcurrentHashMap<PublishAccessCheckCacheEntry, SecurityManager.PublishAccessCheck>(); public SecurityManager(Broker<?> broker, boolean managementMode) { @@ -135,16 +133,6 @@ public class SecurityManager implements return user; } - public void addPlugin(final AccessControl accessControl) - { - - synchronized (_plugins) - { - String pluginTypeName = getPluginTypeName(accessControl); - - _plugins.put(pluginTypeName, accessControl); - } - } private static final class SystemPrincipal implements Principal { @@ -167,24 +155,31 @@ public class SecurityManager implements private boolean checkAllPlugins(AccessCheck checker) { // If we are running as SYSTEM then no ACL checking - if(isSystemProcess()) + if(isSystemProcess() || _managementMode) { return true; } - for (AccessControl plugin : _plugins.values()) + + Collection<AccessControlProvider<?>> accessControlProviders = _broker.getAccessControlProviders(); + if(accessControlProviders != null && !accessControlProviders.isEmpty()) { - Result remaining = checker.allowed(plugin); - if (remaining == Result.DEFER) - { - remaining = plugin.getDefault(); - } - if (remaining == Result.DENIED) + AccessControlProvider<?> accessControlProvider = accessControlProviders.iterator().next(); + if (accessControlProvider != null + && accessControlProvider.getState() == State.ACTIVE + && accessControlProvider.getAccessControl() != null) { - return false; + Result remaining = checker.allowed(accessControlProvider.getAccessControl()); + if (remaining == Result.DEFER) + { + remaining = accessControlProvider.getAccessControl().getDefault(); + } + if (remaining == Result.DENIED) + { + return false; + } } } - // getting here means either allowed or abstained from all plugins return true; } @@ -486,92 +481,6 @@ public class SecurityManager implements } } - @Override - public void stateChanged(ConfiguredObject object, State oldState, State newState) - { - if(_managementMode) - { - //AccessControl is disabled in ManagementMode - return; - } - - if(object instanceof AccessControlProvider) - { - if(newState == State.ACTIVE) - { - synchronized (_plugins) - { - AccessControl accessControl = ((AccessControlProvider)object).getAccessControl(); - String pluginTypeName = getPluginTypeName(accessControl); - - _plugins.put(pluginTypeName, accessControl); - } - } - else if(newState == State.DELETED) - { - synchronized (_plugins) - { - AccessControl control = ((AccessControlProvider)object).getAccessControl(); - String pluginTypeName = getPluginTypeName(control); - - // Remove the type->control mapping for this type key only if the - // given control is actually referred to. - if(_plugins.containsValue(control)) - { - // If we are removing this control, check if another of the same - // type already exists on the broker and use it in instead. - AccessControl other = null; - Collection<AccessControlProvider<?>> providers = _broker.getAccessControlProviders(); - for(AccessControlProvider p : providers) - { - if(p == object || p.getState() != State.ACTIVE) - { - //we don't count ourself as another - continue; - } - - AccessControl ac = p.getAccessControl(); - if(pluginTypeName.equals(getPluginTypeName(ac))) - { - other = ac; - break; - } - } - - if(other != null) - { - //Another control of this type was found, use it instead - _plugins.replace(pluginTypeName, control, other); - } - else - { - //No other was found, remove the type entirely - _plugins.remove(pluginTypeName); - } - } - } - } - } - } - - @Override - public void childAdded(ConfiguredObject object, ConfiguredObject child) - { - // no op - } - - @Override - public void childRemoved(ConfiguredObject object, ConfiguredObject child) - { - // no op - } - - @Override - public void attributeSet(ConfiguredObject object, String attributeName, Object oldAttributeValue, Object newAttributeValue) - { - // no op - } - public boolean authoriseConfiguringBroker(String configuredObjectName, Class<? extends ConfiguredObject> configuredObjectType, Operation configuredObjectOperation) { String description = String.format("%s %s '%s'", Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java Tue Jan 27 15:00:13 2015 @@ -604,8 +604,9 @@ public class BrokerStoreUpgraderAndRecov return brokerRecord; } - public Broker<?> perform(final DurableConfigurationStore store) + public Broker<?> perform() { + final DurableConfigurationStore store = _systemConfig.getConfigurationStore(); List<ConfiguredObjectRecord> upgradedRecords = upgrade(store); new GenericRecoverer(_systemConfig).recover(upgradedRecords); Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java Tue Jan 27 15:00:13 2015 @@ -1087,18 +1087,6 @@ public abstract class AbstractVirtualHos } @Override - public Collection<String> getSupportedExchangeTypes() - { - return getObjectFactory().getSupportedTypes(Exchange.class); - } - - @Override - public Collection<String> getSupportedQueueTypes() - { - return getObjectFactory().getSupportedTypes(Queue.class); - } - - @Override public boolean isQueue_deadLetterQueueEnabled() { return _queue_deadLetterQueueEnabled; Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ProvidedStoreVirtualHost.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ProvidedStoreVirtualHost.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ProvidedStoreVirtualHost.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ProvidedStoreVirtualHost.java Tue Jan 27 15:00:13 2015 @@ -24,7 +24,10 @@ import org.apache.qpid.server.model.Mana import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.store.SizeMonitoringSettings; -public interface ProvidedStoreVirtualHost<X extends ProvidedStoreVirtualHost<X>> extends VirtualHostImpl<X,AMQQueue<?>,ExchangeImpl<?>>, SizeMonitoringSettings +public interface ProvidedStoreVirtualHost<X extends ProvidedStoreVirtualHost<X>> + extends VirtualHostImpl<X,AMQQueue<?>,ExchangeImpl<?>>, + SizeMonitoringSettings, + NonStandardVirtualHost<X,AMQQueue<?>,ExchangeImpl<?>> { @ManagedAttribute(mandatory = true, defaultValue = "0") Long getStoreUnderfullSize(); Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java Tue Jan 27 15:00:13 2015 @@ -31,6 +31,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -47,14 +48,18 @@ import org.apache.qpid.server.logging.su import org.apache.qpid.server.model.AbstractConfiguredObject; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.ConfiguredObject; +import org.apache.qpid.server.model.ConfiguredObjectTypeRegistry; import org.apache.qpid.server.model.Exchange; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.model.ManagedAttributeField; +import org.apache.qpid.server.model.ManagedObject; import org.apache.qpid.server.model.State; import org.apache.qpid.server.model.StateTransition; import org.apache.qpid.server.model.SystemConfig; import org.apache.qpid.server.model.VirtualHost; import org.apache.qpid.server.model.VirtualHostNode; +import org.apache.qpid.server.plugin.ConfiguredObjectRegistration; +import org.apache.qpid.server.plugin.QpidServiceLoader; import org.apache.qpid.server.security.access.Operation; import org.apache.qpid.server.security.auth.AuthenticatedPrincipal; import org.apache.qpid.server.store.ConfiguredObjectRecord; @@ -62,6 +67,8 @@ import org.apache.qpid.server.store.Conf import org.apache.qpid.server.store.ConfiguredObjectRecordImpl; import org.apache.qpid.server.store.DurableConfigurationStore; import org.apache.qpid.server.util.urlstreamhandler.data.Handler; +import org.apache.qpid.server.virtualhost.NonStandardVirtualHost; +import org.apache.qpid.server.virtualhost.ProvidedStoreVirtualHostImpl; public abstract class AbstractVirtualHostNode<X extends AbstractVirtualHostNode<X>> extends AbstractConfiguredObject<X> implements VirtualHostNode<X> { @@ -442,4 +449,34 @@ public abstract class AbstractVirtualHos return initialConfigReader; } + protected static Collection<String> getSupportedVirtualHostTypes(boolean includeProvided) + { + + final Iterable<ConfiguredObjectRegistration> registrations = + (new QpidServiceLoader()).instancesOf(ConfiguredObjectRegistration.class); + + Set<String> supportedTypes = new HashSet<>(); + + for(ConfiguredObjectRegistration registration : registrations) + { + for(Class<? extends ConfiguredObject> typeClass : registration.getConfiguredObjectClasses()) + { + if(VirtualHost.class.isAssignableFrom(typeClass)) + { + ManagedObject annotation = typeClass.getAnnotation(ManagedObject.class); + + if (annotation.creatable() && annotation.defaultType().equals("") && !NonStandardVirtualHost.class.isAssignableFrom(typeClass)) + { + supportedTypes.add(ConfiguredObjectTypeRegistry.getType(typeClass)); + } + } + } + } + if(includeProvided) + { + supportedTypes.add(ProvidedStoreVirtualHostImpl.VIRTUAL_HOST_TYPE); + } + return Collections.unmodifiableCollection(supportedTypes); + } + } Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/JsonVirtualHostNodeImpl.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/JsonVirtualHostNodeImpl.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/JsonVirtualHostNodeImpl.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/JsonVirtualHostNodeImpl.java Tue Jan 27 15:00:13 2015 @@ -20,6 +20,8 @@ */ package org.apache.qpid.server.virtualhostnode; +import java.util.Collection; +import java.util.Collections; import java.util.Map; import org.apache.qpid.server.logging.messages.ConfigStoreMessages; @@ -31,7 +33,7 @@ import org.apache.qpid.server.model.Virt import org.apache.qpid.server.store.DurableConfigurationStore; import org.apache.qpid.server.store.JsonFileConfigStore; -@ManagedObject(type=JsonVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE, category=false) +@ManagedObject(type=JsonVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE, category=false, validChildTypes = "org.apache.qpid.server.virtualhostnode.JsonVirtualHostNodeImpl#getSupportedChildTypes()") public class JsonVirtualHostNodeImpl extends AbstractStandardVirtualHostNode<JsonVirtualHostNodeImpl> implements JsonVirtualHostNode<JsonVirtualHostNodeImpl> { public static final String VIRTUAL_HOST_NODE_TYPE = "JSON"; @@ -68,4 +70,9 @@ public class JsonVirtualHostNodeImpl ext { return getClass().getSimpleName() + " [id=" + getId() + ", name=" + getName() + ", storePath=" + getStorePath() + "]"; } + + public static Map<String, Collection<String>> getSupportedChildTypes() + { + return Collections.singletonMap(VirtualHost.class.getSimpleName(), getSupportedVirtualHostTypes(false)); + } } Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandlerTest.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandlerTest.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandlerTest.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandlerTest.java Tue Jan 27 15:00:13 2015 @@ -34,7 +34,6 @@ import java.util.HashSet; import java.util.Map; import java.util.UUID; -import org.apache.qpid.server.model.BrokerShutdownProvider; import org.mockito.ArgumentCaptor; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; @@ -45,7 +44,10 @@ import org.apache.qpid.server.configurat import org.apache.qpid.server.configuration.updater.TaskExecutor; import org.apache.qpid.server.logging.EventLogger; import org.apache.qpid.server.logging.LogRecorder; +import org.apache.qpid.server.model.AbstractSystemConfig; import org.apache.qpid.server.model.Broker; +import org.apache.qpid.server.model.BrokerShutdownProvider; +import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.JsonSystemConfigImpl; import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.Protocol; @@ -79,7 +81,7 @@ public class ManagementModeStoreHandlerT _taskExecutor.start(); _systemConfig = new JsonSystemConfigImpl(_taskExecutor, mock(EventLogger.class), - mock(LogRecorder.class), new BrokerOptions(), + mock(LogRecorder.class), new BrokerOptions().convertToSystemConfigAttributes(), mock(BrokerShutdownProvider.class)); @@ -87,7 +89,8 @@ public class ManagementModeStoreHandlerT - _root = new ConfiguredObjectRecordImpl(_rootId, Broker.class.getSimpleName(), Collections.<String,Object>emptyMap(), Collections.singletonMap(SystemConfig.class.getSimpleName(), systemContextRecord.getId())); + _root = new ConfiguredObjectRecordImpl(_rootId, Broker.class.getSimpleName(), Collections.singletonMap(Broker.NAME, + (Object) "broker"), Collections.singletonMap(SystemConfig.class.getSimpleName(), systemContextRecord.getId())); _portEntry = mock(ConfiguredObjectRecord.class); when(_portEntry.getId()).thenReturn(_portEntryId); @@ -111,15 +114,48 @@ public class ManagementModeStoreHandlerT } ).when(_store).visitConfiguredObjectRecords(recovererArgumentCaptor.capture()); _options = new BrokerOptions(); - _handler = new ManagementModeStoreHandler(_store, _options); + + _handler = new ManagementModeStoreHandler(_store, _systemConfig);; _handler.openConfigurationStore(_systemConfig, false); } + private ManagementModeStoreHandler createManagementModeStoreHandler() + { + _systemConfig.close(); + Map<String, Object> attributes = new HashMap<>(_options.convertToSystemConfigAttributes()); + attributes.put(ConfiguredObject.DESIRED_STATE, State.QUIESCED); + _systemConfig = new AbstractSystemConfig(_taskExecutor, + mock(EventLogger.class), + mock(LogRecorder.class), + attributes, + mock(BrokerShutdownProvider.class)) + { + @Override + protected void onOpen() + { + } + + @Override + protected DurableConfigurationStore createStoreObject() + { + return _store; + } + + @Override + protected void onClose() + { + } + }; + _systemConfig.open(); + return new ManagementModeStoreHandler(_store, _systemConfig); + } + @Override public void tearDown() throws Exception { _taskExecutor.stop(); + _systemConfig.close(); super.tearDown(); } @@ -154,7 +190,7 @@ public class ManagementModeStoreHandlerT public void testGetRootEntryWithHttpPortOverriden() { _options.setManagementModeHttpPortOverride(9090); - _handler = new ManagementModeStoreHandler(_store, _options); + _handler = createManagementModeStoreHandler(); _handler.openConfigurationStore(_systemConfig, false); ConfiguredObjectRecord root = getRootEntry(); assertEquals("Unexpected root id", _rootId, root.getId()); @@ -166,7 +202,7 @@ public class ManagementModeStoreHandlerT public void testGetRootEntryWithRmiPortOverriden() { _options.setManagementModeRmiPortOverride(9090); - _handler = new ManagementModeStoreHandler(_store, _options); + _handler = createManagementModeStoreHandler(); _handler.openConfigurationStore(_systemConfig, false); ConfiguredObjectRecord root = getRootEntry(); @@ -179,7 +215,7 @@ public class ManagementModeStoreHandlerT public void testGetRootEntryWithConnectorPortOverriden() { _options.setManagementModeJmxPortOverride(9090); - _handler = new ManagementModeStoreHandler(_store, _options); + _handler = createManagementModeStoreHandler(); _handler.openConfigurationStore(_systemConfig, false); ConfiguredObjectRecord root = getRootEntry(); @@ -194,7 +230,7 @@ public class ManagementModeStoreHandlerT _options.setManagementModeHttpPortOverride(1000); _options.setManagementModeRmiPortOverride(2000); _options.setManagementModeJmxPortOverride(3000); - _handler = new ManagementModeStoreHandler(_store, _options); + _handler = createManagementModeStoreHandler(); _handler.openConfigurationStore(_systemConfig, false); ConfiguredObjectRecord root = getRootEntry(); @@ -222,7 +258,7 @@ public class ManagementModeStoreHandlerT public void testGetEntryByCLIConnectorPortId() { _options.setManagementModeJmxPortOverride(9090); - _handler = new ManagementModeStoreHandler(_store, _options); + _handler = createManagementModeStoreHandler(); _handler.openConfigurationStore(_systemConfig, false); @@ -234,7 +270,7 @@ public class ManagementModeStoreHandlerT public void testGetEntryByCLIHttpPortId() { _options.setManagementModeHttpPortOverride(9090); - _handler = new ManagementModeStoreHandler(_store, _options); + _handler = createManagementModeStoreHandler(); _handler.openConfigurationStore(_systemConfig, false); @@ -249,7 +285,7 @@ public class ManagementModeStoreHandlerT attributes.put(Port.PROTOCOLS, Collections.singleton(Protocol.HTTP)); when(_portEntry.getAttributes()).thenReturn(attributes); _options.setManagementModeHttpPortOverride(9090); - _handler = new ManagementModeStoreHandler(_store, _options); + _handler = createManagementModeStoreHandler(); _handler.openConfigurationStore(_systemConfig, false); @@ -263,7 +299,7 @@ public class ManagementModeStoreHandlerT attributes.put(Port.PROTOCOLS, Collections.singleton(Protocol.RMI)); when(_portEntry.getAttributes()).thenReturn(attributes); _options.setManagementModeRmiPortOverride(9090); - _handler = new ManagementModeStoreHandler(_store, _options); + _handler = createManagementModeStoreHandler(); _handler.openConfigurationStore(_systemConfig, false); @@ -277,7 +313,7 @@ public class ManagementModeStoreHandlerT attributes.put(Port.PROTOCOLS, Collections.singleton(Protocol.JMX_RMI)); when(_portEntry.getAttributes()).thenReturn(attributes); _options.setManagementModeRmiPortOverride(9090); - _handler = new ManagementModeStoreHandler(_store, _options); + _handler = createManagementModeStoreHandler(); _handler.openConfigurationStore(_systemConfig, false); @@ -328,7 +364,7 @@ public class ManagementModeStoreHandlerT _options.setManagementModeQuiesceVirtualHosts(mmQuiesceVhosts); } - _handler = new ManagementModeStoreHandler(_store, _options); + _handler = createManagementModeStoreHandler(); _handler.openConfigurationStore(_systemConfig, false); ConfiguredObjectRecord hostEntry = getEntry(virtualHostId); @@ -354,7 +390,7 @@ public class ManagementModeStoreHandlerT _options.setManagementModeHttpPortOverride(1000); _options.setManagementModeRmiPortOverride(2000); _options.setManagementModeJmxPortOverride(3000); - _handler = new ManagementModeStoreHandler(_store, _options); + _handler = createManagementModeStoreHandler(); _handler.openConfigurationStore(_systemConfig, false); Map<String, Object> attributes = new HashMap<String, Object>(); @@ -371,7 +407,7 @@ public class ManagementModeStoreHandlerT _options.setManagementModeHttpPortOverride(1000); _options.setManagementModeRmiPortOverride(2000); _options.setManagementModeJmxPortOverride(3000); - _handler = new ManagementModeStoreHandler(_store, _options); + _handler = createManagementModeStoreHandler(); _handler.openConfigurationStore(_systemConfig, false); ConfiguredObjectRecord root = getRootEntry(); @@ -386,7 +422,7 @@ public class ManagementModeStoreHandlerT public void testSaveCLIHttpPort() { _options.setManagementModeHttpPortOverride(1000); - _handler = new ManagementModeStoreHandler(_store, _options); + _handler = createManagementModeStoreHandler(); _handler.openConfigurationStore(_systemConfig, false); UUID portId = getOptionsPortId(); @@ -410,7 +446,7 @@ public class ManagementModeStoreHandlerT public void testRemove() { _options.setManagementModeHttpPortOverride(1000); - _handler = new ManagementModeStoreHandler(_store, _options); + _handler = createManagementModeStoreHandler(); _handler.openConfigurationStore(_systemConfig, false); ConfiguredObjectRecord record = new ConfiguredObjectRecord() @@ -446,7 +482,7 @@ public class ManagementModeStoreHandlerT public void testRemoveCLIPort() { _options.setManagementModeHttpPortOverride(1000); - _handler = new ManagementModeStoreHandler(_store, _options); + _handler = createManagementModeStoreHandler(); _handler.openConfigurationStore(_systemConfig, false); UUID portId = getOptionsPortId(); Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/AttributeValueConverterTest.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/AttributeValueConverterTest.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/AttributeValueConverterTest.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/AttributeValueConverterTest.java Tue Jan 27 15:00:13 2015 @@ -37,8 +37,8 @@ import java.util.Set; import junit.framework.TestCase; -import org.apache.qpid.server.model.testmodel.TestModel; -import org.apache.qpid.server.model.testmodel.TestRootCategory; +import org.apache.qpid.server.model.testmodels.hierarchy.TestModel; +import org.apache.qpid.server.model.testmodels.hierarchy.TestCar; public class AttributeValueConverterTest extends TestCase { @@ -61,7 +61,7 @@ public class AttributeValueConverterTest _context.put("mapWithInterpolatedContents", "{\"${mykey}\" : \"b\"}"); _context.put("mykey", "mykey1"); - ConfiguredObject object = _objectFactory.create(TestRootCategory.class, _attributes); + ConfiguredObject object = _objectFactory.create(TestCar.class, _attributes); AttributeValueConverter<Map> mapConverter = getConverter(Map.class, Map.class); @@ -96,7 +96,7 @@ public class AttributeValueConverterTest { _context.put("simpleCollection", "[\"a\", \"b\"]"); - ConfiguredObject object = _objectFactory.create(TestRootCategory.class, _attributes); + ConfiguredObject object = _objectFactory.create(TestCar.class, _attributes); AttributeValueConverter<Collection> collectionConverter = getConverter(Collection.class, Collection.class); @@ -131,7 +131,7 @@ public class AttributeValueConverterTest { _context.put("simpleList", "[\"a\", \"b\"]"); - ConfiguredObject object = _objectFactory.create(TestRootCategory.class, _attributes); + ConfiguredObject object = _objectFactory.create(TestCar.class, _attributes); AttributeValueConverter<List> listConverter = getConverter(List.class, List.class); @@ -164,7 +164,7 @@ public class AttributeValueConverterTest { _context.put("simpleSet", "[\"a\", \"b\"]"); - ConfiguredObject object = _objectFactory.create(TestRootCategory.class, _attributes); + ConfiguredObject object = _objectFactory.create(TestCar.class, _attributes); AttributeValueConverter<Set> setConverter = getConverter(Set.class, Set.class);; Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/SecurityManagerTest.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/SecurityManagerTest.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/SecurityManagerTest.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/SecurityManagerTest.java Tue Jan 27 15:00:13 2015 @@ -30,6 +30,7 @@ import static org.mockito.Mockito.verify import static org.mockito.Mockito.when; import java.security.AccessControlException; +import java.util.Collections; import org.apache.qpid.server.binding.BindingImpl; import org.apache.qpid.server.consumer.ConsumerImpl; @@ -68,11 +69,13 @@ public class SecurityManagerTest extends AccessControlProvider<?> aclProvider = mock(AccessControlProvider.class); when(aclProvider.getAccessControl()).thenReturn(_accessControl); + when(aclProvider.getState()).thenReturn(State.ACTIVE); when(_virtualHost.getName()).thenReturn(TEST_VIRTUAL_HOST); - _securityManager = new SecurityManager(mock(Broker.class), false); - _securityManager.stateChanged(aclProvider, State.UNINITIALIZED, State.ACTIVE); + Broker broker = mock(Broker.class); + when(broker.getAccessControlProviders()).thenReturn(Collections.singleton(aclProvider)); + _securityManager = new SecurityManager(broker, false); } public void testAuthoriseCreateBinding() Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/BrokerRecovererTest.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/BrokerRecovererTest.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/BrokerRecovererTest.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/BrokerRecovererTest.java Tue Jan 27 15:00:13 2015 @@ -69,7 +69,7 @@ public class BrokerRecovererTest extends _brokerShutdownProvider = mock(BrokerShutdownProvider.class); _systemConfig = new JsonSystemConfigImpl(_taskExecutor, mock(EventLogger.class), mock(LogRecorder.class), - new BrokerOptions(), + new BrokerOptions().convertToSystemConfigAttributes(), _brokerShutdownProvider); when(_brokerEntry.getId()).thenReturn(_brokerId); Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecovererTest.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecovererTest.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecovererTest.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-core/src/test/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecovererTest.java Tue Jan 27 15:00:13 2015 @@ -81,7 +81,7 @@ public class BrokerStoreUpgraderAndRecov _systemConfig = new JsonSystemConfigImpl(_taskExecutor, mock(EventLogger.class), mock(LogRecorder.class), - new BrokerOptions(), + new BrokerOptions().convertToSystemConfigAttributes(), mock(BrokerShutdownProvider.class)); } Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/config/ConfigurationFile.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/config/ConfigurationFile.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/config/ConfigurationFile.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/config/ConfigurationFile.java Tue Jan 27 15:00:13 2015 @@ -20,35 +20,20 @@ */ package org.apache.qpid.server.security.access.config; -import java.io.File; +import java.io.Reader; import org.apache.qpid.server.configuration.IllegalConfigurationException; public interface ConfigurationFile { /** - * Return the actual {@link File} object containing the configuration. - */ - File getFile(); - - /** * Load this configuration file's contents into a {@link RuleSet}. * @throws IllegalConfigurationException if the configuration file has errors. * @throws IllegalArgumentException if individual tokens cannot be parsed. + * @param configReader */ - RuleSet load() throws IllegalConfigurationException; - - /** - * Reload this configuration file's contents. - * @throws IllegalConfigurationException if the configuration file has errors. - * @throws IllegalArgumentException if individual tokens cannot be parsed. - */ - RuleSet reload() throws IllegalConfigurationException; - + RuleSet load(final Reader configReader) throws IllegalConfigurationException; + RuleSet getConfiguration(); - - /** - * TODO document me. - */ - boolean save(RuleSet configuration); + } Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/config/PlainConfiguration.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/config/PlainConfiguration.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/config/PlainConfiguration.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/config/PlainConfiguration.java Tue Jan 27 15:00:13 2015 @@ -21,10 +21,9 @@ package org.apache.qpid.server.security.access.config; import java.io.BufferedReader; -import java.io.File; import java.io.FileNotFoundException; -import java.io.FileReader; import java.io.IOException; +import java.io.Reader; import java.io.StreamTokenizer; import java.util.HashMap; import java.util.Iterator; @@ -34,14 +33,14 @@ import java.util.Stack; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; + import org.apache.qpid.server.configuration.IllegalConfigurationException; -import org.apache.qpid.server.logging.EventLogger; import org.apache.qpid.server.logging.EventLoggerProvider; import org.apache.qpid.server.security.access.ObjectType; import org.apache.qpid.server.security.access.Operation; import org.apache.qpid.server.security.access.Permission; -public class PlainConfiguration extends AbstractConfiguration +public class PlainConfiguration implements ConfigurationFile { private static final Logger _logger = Logger.getLogger(PlainConfiguration.class); @@ -66,30 +65,30 @@ public class PlainConfiguration extends static final String PROPERTY_KEY_ONLY_MSG = "Incomplete property (key only) at line %d"; static final String PROPERTY_NO_EQUALS_MSG = "Incomplete property (no equals) at line %d"; static final String PROPERTY_NO_VALUE_MSG = "Incomplete property (no value) at line %d"; + private final EventLoggerProvider _eventLogger; + private final String _name; private StreamTokenizer _st; + private RuleSet _config; - public PlainConfiguration(File file, final EventLoggerProvider eventLogger) + public PlainConfiguration(String name, final EventLoggerProvider eventLogger) { - super(file, eventLogger); + _eventLogger = eventLogger; + _name = name; } @Override - public RuleSet load() + public RuleSet load(final Reader configReader) { - RuleSet ruleSet = super.load(); - - File file = getFile(); - FileReader fileReader = null; + _config = new RuleSet(_eventLogger); - try + try(Reader fileReader = configReader) { if(_logger.isDebugEnabled()) { - _logger.debug("About to load ACL file " + file); + _logger.debug("About to load ACL file"); } - fileReader = new FileReader(file); _st = new StreamTokenizer(new BufferedReader(fileReader)); _st.resetSyntax(); // setup the tokenizer @@ -209,29 +208,14 @@ public class PlainConfiguration extends } catch (FileNotFoundException fnfe) { - throw new IllegalConfigurationException(String.format(CONFIG_NOT_FOUND_MSG, file.getName()), fnfe); + throw new IllegalConfigurationException(String.format(CONFIG_NOT_FOUND_MSG, _name), fnfe); } catch (IOException ioe) { - throw new IllegalConfigurationException(String.format(CANNOT_LOAD_MSG, file.getName()), ioe); - } - finally - { - if(fileReader != null) - { - try - { - fileReader.close(); - } - catch (IOException e) - { - throw new IllegalConfigurationException(String.format(CANNOT_CLOSE_MSG, file.getName()), e); - } - } + throw new IllegalConfigurationException(String.format(CANNOT_LOAD_MSG, _name), ioe); } - - return ruleSet; + return _config; } private void parseAcl(Integer number, List<String> args) @@ -333,4 +317,10 @@ public class PlainConfiguration extends { return _st.lineno() - 1; } + + public RuleSet getConfiguration() + { + return _config; + } + } Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImpl.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImpl.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImpl.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImpl.java Tue Jan 27 15:00:13 2015 @@ -39,6 +39,7 @@ import org.apache.qpid.server.model.Stat import org.apache.qpid.server.model.StateTransition; import org.apache.qpid.server.security.AccessControl; import org.apache.qpid.server.security.access.Operation; +import org.apache.qpid.server.util.urlstreamhandler.data.Handler; public class ACLFileAccessControlProviderImpl extends AbstractConfiguredObject<ACLFileAccessControlProviderImpl> @@ -46,10 +47,15 @@ public class ACLFileAccessControlProvide { private static final Logger LOGGER = Logger.getLogger(ACLFileAccessControlProviderImpl.class); + static + { + Handler.register(); + } + protected DefaultAccessControl _accessControl; protected final Broker _broker; - @ManagedAttributeField + @ManagedAttributeField( afterSet = "reloadAclFile") private String _path; @ManagedObjectFactoryConstructor @@ -112,6 +118,26 @@ public class ACLFileAccessControlProvide _accessControl = new DefaultAccessControl(getPath(), _broker); } + @SuppressWarnings("unused") + private void reloadAclFile() + { + try + { + DefaultAccessControl accessControl = new DefaultAccessControl(getPath(), _broker); + accessControl.open(); + DefaultAccessControl oldAccessControl = _accessControl; + _accessControl = accessControl; + if(oldAccessControl != null) + { + oldAccessControl.close(); + } + } + catch(RuntimeException e) + { + throw new IllegalConfigurationException(e.getMessage(), e); + } + } + @Override public String getPath() { Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/DefaultAccessControl.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/DefaultAccessControl.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/DefaultAccessControl.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/DefaultAccessControl.java Tue Jan 27 15:00:13 2015 @@ -21,9 +21,14 @@ package org.apache.qpid.server.security.access.plugins; import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.Reader; import java.net.InetAddress; import java.net.InetSocketAddress; +import java.net.MalformedURLException; import java.net.SocketAddress; +import java.net.URL; import java.security.AccessController; import java.util.Set; @@ -47,46 +52,81 @@ import org.apache.qpid.server.security.a public class DefaultAccessControl implements AccessControl { private static final Logger _logger = Logger.getLogger(DefaultAccessControl.class); + private final String _fileName; private RuleSet _ruleSet; - private File _aclFile; private final EventLoggerProvider _eventLogger; - public DefaultAccessControl(String fileName, final EventLoggerProvider eventLogger) + public DefaultAccessControl(String name, final EventLoggerProvider eventLogger) { + _fileName = name; _eventLogger = eventLogger; if (_logger.isDebugEnabled()) { - _logger.debug("Creating AccessControl instance using file: " + fileName); + _logger.debug("Creating AccessControl instance"); } - - _aclFile = new File(fileName); } DefaultAccessControl(RuleSet rs) { + _fileName = null; _ruleSet = rs; _eventLogger = rs; } public void open() { - if(_aclFile != null) + if(_fileName != null) { - if (!validate()) - { - throw new IllegalConfigurationException("ACL file '" + _aclFile + "' is not found"); - } - - ConfigurationFile configFile = new PlainConfiguration(_aclFile, _eventLogger); - _ruleSet = configFile.load(); + ConfigurationFile configFile = new PlainConfiguration(_fileName, _eventLogger); + _ruleSet = configFile.load(getReaderFromURLString(_fileName)); } } @Override public boolean validate() { - return _aclFile.exists(); + try + { + getReaderFromURLString(_fileName); + return true; + } + catch(IllegalConfigurationException e) + { + return false; + } + } + + + private static Reader getReaderFromURLString(String urlString) + { + try + { + URL url; + + try + { + url = new URL(urlString); + } + catch (MalformedURLException e) + { + File file = new File(urlString); + try + { + url = file.toURI().toURL(); + } + catch (MalformedURLException notAFile) + { + throw new IllegalConfigurationException("Cannot convert " + urlString + " to a readable resource"); + } + + } + return new InputStreamReader(url.openStream()); + } + catch (IOException e) + { + throw new IllegalConfigurationException("Cannot convert " + urlString + " to a readable resource"); + } } @Override @@ -104,16 +144,10 @@ public class DefaultAccessControl implem @Override public void onCreate() { - if(_aclFile != null) + if(_fileName != null) { - //verify it exists - if (!validate()) - { - throw new IllegalConfigurationException("ACL file '" + _aclFile + "' is not found"); - } - //verify it is parsable - new PlainConfiguration(_aclFile, _eventLogger).load(); + new PlainConfiguration(_fileName, _eventLogger).load(getReaderFromURLString(_fileName)); } } Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/PlainConfigurationTest.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/PlainConfigurationTest.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/PlainConfigurationTest.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/PlainConfigurationTest.java Tue Jan 27 15:00:13 2015 @@ -18,8 +18,10 @@ */ package org.apache.qpid.server.security.access.config; +import static org.mockito.Mockito.mock; + import java.io.File; -import java.io.FileNotFoundException; +import java.io.FileReader; import java.io.FileWriter; import java.io.PrintWriter; import java.util.Map; @@ -27,15 +29,12 @@ import java.util.Map; import junit.framework.TestCase; import org.apache.qpid.server.configuration.IllegalConfigurationException; -import org.apache.qpid.server.logging.EventLogger; import org.apache.qpid.server.logging.EventLoggerProvider; import org.apache.qpid.server.security.access.ObjectProperties; import org.apache.qpid.server.security.access.ObjectProperties.Property; import org.apache.qpid.server.security.access.ObjectType; import org.apache.qpid.server.security.access.Operation; -import static org.mockito.Mockito.mock; - public class PlainConfigurationTest extends TestCase { private PlainConfiguration writeACLConfig(String...aclData) throws Exception @@ -52,28 +51,11 @@ public class PlainConfigurationTest exte aclWriter.close(); // Load ruleset - PlainConfiguration configFile = new PlainConfiguration(acl, mock(EventLoggerProvider.class)); - configFile.load(); + PlainConfiguration configFile = new PlainConfiguration(acl.getName(), mock(EventLoggerProvider.class)); + configFile.load(new FileReader(acl)); return configFile; } - public void testMissingACLConfig() throws Exception - { - try - { - // Load ruleset - ConfigurationFile configFile = new PlainConfiguration(new File("doesnotexist"), mock(EventLoggerProvider.class)); - configFile.load(); - - fail("fail"); - } - catch (IllegalConfigurationException ce) - { - assertEquals(String.format(PlainConfiguration.CONFIG_NOT_FOUND_MSG, "doesnotexist"), ce.getMessage()); - assertTrue(ce.getCause() instanceof FileNotFoundException); - } - } - public void testACLFileSyntaxContinuation() throws Exception { try Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderFactoryTest.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderFactoryTest.java?rev=1655057&r1=1655056&r2=1655057&view=diff ============================================================================== --- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderFactoryTest.java (original) +++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderFactoryTest.java Tue Jan 27 15:00:13 2015 @@ -107,7 +107,7 @@ public class ACLFileAccessControlProvide } catch (IllegalConfigurationException e) { - assertTrue("Unexpected exception message: " + e.getMessage(), Pattern.matches("ACL file '.*' is not found", e.getMessage())); + assertTrue("Unexpected exception message: " + e.getMessage(), Pattern.matches("Cannot convert .* to a readable resource", e.getMessage())); } } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
