From 08b64b592cb844cbd746b33e5f17c94b2158a115 Mon Sep 17 00:00:00 2001 From: Robert Godfrey Date: Thu, 13 Feb 2014 19:41:22 +0000 Subject: QPID-5551 : replace AMQSecurityException with QpidSecurityException in the broker git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1568015 13f79535-47bb-0310-9956-ffa450edef68 --- .../qpid/server/exchange/AbstractExchange.java | 23 ++++----- .../qpid/server/exchange/DefaultExchange.java | 24 ++++----- .../server/exchange/DefaultExchangeFactory.java | 11 ++-- .../server/exchange/DefaultExchangeRegistry.java | 7 ++- .../org/apache/qpid/server/exchange/Exchange.java | 14 ++--- .../qpid/server/exchange/ExchangeFactory.java | 10 ++-- .../qpid/server/exchange/ExchangeInitialiser.java | 26 +++++++--- .../qpid/server/exchange/ExchangeRegistry.java | 3 +- .../apache/qpid/server/message/MessageSource.java | 4 +- .../qpid/server/model/adapter/BindingAdapter.java | 4 +- .../qpid/server/model/adapter/ExchangeAdapter.java | 8 ++- .../qpid/server/model/adapter/QueueAdapter.java | 5 ++ .../server/model/adapter/VirtualHostAdapter.java | 9 ++++ .../org/apache/qpid/server/queue/AMQQueue.java | 5 +- .../apache/qpid/server/queue/AMQQueueFactory.java | 10 ++-- .../org/apache/qpid/server/queue/QueueFactory.java | 6 +-- .../apache/qpid/server/queue/SimpleAMQQueue.java | 28 ++++++---- .../server/security/QpidSecurityException.java | 43 ++++++++++++++++ .../util/ConnectionScopedRuntimeException.java | 51 +++++++++++++++++++ .../server/util/ServerScopedRuntimeException.java | 51 +++++++++++++++++++ .../server/virtualhost/AbstractVirtualHost.java | 28 +++++----- .../qpid/server/virtualhost/BindingRecoverer.java | 8 +++ .../qpid/server/virtualhost/ExchangeRecoverer.java | 8 +++ .../qpid/server/virtualhost/QueueRecoverer.java | 8 +++ .../qpid/server/virtualhost/VirtualHost.java | 12 ++--- .../qpid/server/exchange/FanoutExchangeTest.java | 10 ++-- .../qpid/server/exchange/HeadersExchangeTest.java | 4 +- .../qpid/server/exchange/TopicExchangeTest.java | 22 ++++---- .../qpid/server/queue/AMQQueueFactoryTest.java | 14 ++--- .../qpid/server/queue/PriorityQueueTest.java | 2 +- .../qpid/server/queue/SimpleAMQQueueTestBase.java | 23 +++------ .../qpid/server/queue/StandardQueueTest.java | 59 +++++++++------------- .../apache/qpid/server/util/BrokerTestHelper.java | 4 +- .../protocol/v0_10/ServerSessionDelegate.java | 37 ++++++++++++++ .../qpid/server/protocol/v0_8/AMQChannel.java | 14 +++-- .../server/protocol/v0_8/AMQProtocolEngine.java | 8 +-- .../v0_8/handler/BasicConsumeMethodHandler.java | 8 +++ .../v0_8/handler/BasicGetMethodHandler.java | 21 +++++--- .../v0_8/handler/BasicPublishMethodHandler.java | 10 +++- .../v0_8/handler/ExchangeDeclareHandler.java | 5 ++ .../v0_8/handler/ExchangeDeleteHandler.java | 5 ++ .../protocol/v0_8/handler/QueueBindHandler.java | 5 ++ .../protocol/v0_8/handler/QueueDeclareHandler.java | 17 ++++++- .../protocol/v0_8/handler/QueueDeleteHandler.java | 11 +++- .../protocol/v0_8/handler/QueuePurgeHandler.java | 13 ++++- .../protocol/v0_8/handler/QueueUnbindHandler.java | 10 +++- .../apache/qpid/server/protocol/v0_8/AckTest.java | 12 ++--- .../qpid/server/protocol/v0_8/AcknowledgeTest.java | 14 ++--- .../server/protocol/v0_8/BrokerTestHelper_0_8.java | 4 +- .../protocol/v0_8/QueueBrowserUsesNoAckTest.java | 4 +- .../qpid/server/protocol/v1_0/SendingLink_1_0.java | 21 ++++++-- .../qpid/server/protocol/v1_0/Session_1_0.java | 9 +++- .../server/management/amqp/ManagementNode.java | 8 +-- .../plugin/servlet/rest/RestServlet.java | 4 +- .../apache/qpid/server/store/MessageStoreTest.java | 33 ++++-------- 55 files changed, 568 insertions(+), 249 deletions(-) create mode 100644 qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/QpidSecurityException.java create mode 100644 qpid/java/broker-core/src/main/java/org/apache/qpid/server/util/ConnectionScopedRuntimeException.java create mode 100644 qpid/java/broker-core/src/main/java/org/apache/qpid/server/util/ServerScopedRuntimeException.java diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java index 600c60bdb3..07fb554638 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java @@ -24,7 +24,7 @@ import java.util.ArrayList; import org.apache.log4j.Logger; import org.apache.qpid.AMQException; import org.apache.qpid.AMQInternalException; -import org.apache.qpid.AMQSecurityException; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.server.binding.Binding; import org.apache.qpid.server.consumer.Consumer; import org.apache.qpid.server.logging.LogSubject; @@ -41,7 +41,6 @@ import org.apache.qpid.server.model.UUIDGenerator; import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.queue.BaseQueue; -import org.apache.qpid.server.queue.QueueEntry; import org.apache.qpid.server.store.DurableConfigurationStoreHelper; import org.apache.qpid.server.store.StorableMessageMetaData; import org.apache.qpid.server.txn.ServerTransaction; @@ -138,7 +137,7 @@ public abstract class AbstractExchange implements Exchange return _autoDelete; } - public void close() throws AMQException + public void close() throws QpidSecurityException, AMQInternalException { if(_closed.compareAndSet(false,true)) @@ -532,7 +531,7 @@ public abstract class AbstractExchange implements Exchange @Override public boolean addBinding(String bindingKey, AMQQueue queue, Map arguments) - throws AMQSecurityException, AMQInternalException + throws QpidSecurityException, AMQInternalException { return makeBinding(null, bindingKey, queue, arguments, false, false); } @@ -541,7 +540,7 @@ public abstract class AbstractExchange implements Exchange public boolean replaceBinding(final UUID id, final String bindingKey, final AMQQueue queue, final Map arguments) - throws AMQSecurityException, AMQInternalException + throws QpidSecurityException, AMQInternalException { return makeBinding(id, bindingKey, queue, arguments, false, true); } @@ -549,20 +548,20 @@ public abstract class AbstractExchange implements Exchange @Override public void restoreBinding(final UUID id, final String bindingKey, final AMQQueue queue, final Map argumentMap) - throws AMQSecurityException, AMQInternalException + throws QpidSecurityException, AMQInternalException { makeBinding(id, bindingKey,queue, argumentMap,true, false); } @Override - public void removeBinding(final Binding b) throws AMQSecurityException, AMQInternalException + public void removeBinding(final Binding b) throws QpidSecurityException, AMQInternalException { removeBinding(b.getBindingKey(), b.getQueue(), b.getArguments()); } @Override public Binding removeBinding(String bindingKey, AMQQueue queue, Map arguments) - throws AMQSecurityException, AMQInternalException + throws QpidSecurityException, AMQInternalException { assert queue != null; @@ -581,7 +580,7 @@ public abstract class AbstractExchange implements Exchange // Check access if (!_virtualHost.getSecurityManager().authoriseUnbind(this, bindingKey, queue)) { - throw new AMQSecurityException("Permission denied: unbinding " + bindingKey); + throw new QpidSecurityException("Permission denied: unbinding " + bindingKey); } BindingImpl b = _bindingsMap.remove(new BindingImpl(null, bindingKey,queue,arguments)); @@ -628,7 +627,7 @@ public abstract class AbstractExchange implements Exchange AMQQueue queue, Map arguments, boolean restore, - boolean force) throws AMQSecurityException, AMQInternalException + boolean force) throws QpidSecurityException, AMQInternalException { assert queue != null; @@ -644,7 +643,7 @@ public abstract class AbstractExchange implements Exchange //Perform ACLs if (!_virtualHost.getSecurityManager().authoriseBind(AbstractExchange.this, queue, bindingKey)) { - throw new AMQSecurityException("Permission denied: binding " + bindingKey); + throw new QpidSecurityException("Permission denied: binding " + bindingKey); } if (id == null) @@ -696,7 +695,7 @@ public abstract class AbstractExchange implements Exchange } - public void onClose(final Exchange exchange) throws AMQSecurityException, AMQInternalException + public void onClose(final Exchange exchange) throws QpidSecurityException, AMQInternalException { removeBinding(this); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchange.java index 78b9664cd3..acb9a47096 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchange.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchange.java @@ -29,7 +29,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import org.apache.log4j.Logger; import org.apache.qpid.AMQException; import org.apache.qpid.AMQInternalException; -import org.apache.qpid.AMQSecurityException; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.exchange.ExchangeDefaults; import org.apache.qpid.server.binding.Binding; import org.apache.qpid.server.consumer.Consumer; @@ -43,8 +43,6 @@ import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.model.UUIDGenerator; import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.queue.AMQQueue; -import org.apache.qpid.server.queue.BaseQueue; -import org.apache.qpid.server.queue.QueueEntry; import org.apache.qpid.server.queue.QueueRegistry; import org.apache.qpid.server.store.StorableMessageMetaData; import org.apache.qpid.server.txn.ServerTransaction; @@ -124,36 +122,36 @@ public class DefaultExchange implements Exchange @Override public boolean addBinding(String bindingKey, AMQQueue queue, Map arguments) - throws AMQSecurityException, AMQInternalException + throws QpidSecurityException, AMQInternalException { - throw new AMQSecurityException("Cannot add bindings to the default exchange"); + throw new QpidSecurityException("Cannot add bindings to the default exchange"); } @Override public boolean replaceBinding(UUID id, String bindingKey, AMQQueue queue, Map arguments) - throws AMQSecurityException, AMQInternalException + throws QpidSecurityException, AMQInternalException { - throw new AMQSecurityException("Cannot replace bindings on the default exchange"); + throw new QpidSecurityException("Cannot replace bindings on the default exchange"); } @Override public void restoreBinding(UUID id, String bindingKey, AMQQueue queue, Map argumentMap) - throws AMQSecurityException, AMQInternalException + throws QpidSecurityException, AMQInternalException { _logger.warn("Bindings to the default exchange should not be stored in the configuration store"); } @Override - public void removeBinding(Binding b) throws AMQSecurityException, AMQInternalException + public void removeBinding(Binding b) throws QpidSecurityException, AMQInternalException { - throw new AMQSecurityException("Cannot remove bindings to the default exchange"); + throw new QpidSecurityException("Cannot remove bindings to the default exchange"); } @Override public Binding removeBinding(String bindingKey, AMQQueue queue, Map arguments) - throws AMQSecurityException, AMQInternalException + throws QpidSecurityException, AMQInternalException { - throw new AMQSecurityException("Cannot remove bindings to the default exchange"); + throw new QpidSecurityException("Cannot remove bindings to the default exchange"); } @Override @@ -201,7 +199,7 @@ public class DefaultExchange implements Exchange } @Override - public void close() throws AMQException + public void close() { if(_closed.compareAndSet(false,true)) { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeFactory.java index 994f6730e0..7229f008d6 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeFactory.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeFactory.java @@ -23,7 +23,7 @@ package org.apache.qpid.server.exchange; import org.apache.log4j.Logger; import org.apache.qpid.AMQException; -import org.apache.qpid.AMQSecurityException; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.AMQUnknownExchangeType; import org.apache.qpid.exchange.ExchangeDefaults; import org.apache.qpid.server.model.UUIDGenerator; @@ -109,7 +109,7 @@ public class DefaultExchangeFactory implements ExchangeFactory } public Exchange createExchange(String exchange, String type, boolean durable, boolean autoDelete) - throws AMQException + throws AMQException, QpidSecurityException { UUID id = UUIDGenerator.generateExchangeUUID(exchange, _host.getName()); @@ -117,13 +117,13 @@ public class DefaultExchangeFactory implements ExchangeFactory } public Exchange createExchange(UUID id, String exchange, String type, boolean durable, boolean autoDelete) - throws AMQException + throws QpidSecurityException, AMQException { // Check access if (!_host.getSecurityManager().authoriseCreateExchange(autoDelete, durable, exchange, null, null, null, type)) { String description = "Permission denied: exchange-name '" + exchange + "'"; - throw new AMQSecurityException(description); + throw new QpidSecurityException(description); } ExchangeType exchType = _exchangeClassMap.get(type); @@ -137,7 +137,8 @@ public class DefaultExchangeFactory implements ExchangeFactory } @Override - public Exchange restoreExchange(UUID id, String exchange, String type, boolean autoDelete) throws AMQException + public Exchange restoreExchange(UUID id, String exchange, String type, boolean autoDelete) + throws AMQException, QpidSecurityException { return createExchange(id, exchange, type, true, autoDelete); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeRegistry.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeRegistry.java index 858aa224de..7f1c29f9e5 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeRegistry.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeRegistry.java @@ -22,9 +22,8 @@ package org.apache.qpid.server.exchange; import org.apache.log4j.Logger; import org.apache.qpid.AMQException; -import org.apache.qpid.AMQSecurityException; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.exchange.ExchangeDefaults; -import org.apache.qpid.protocol.AMQConstant; import org.apache.qpid.server.model.UUIDGenerator; import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.queue.QueueRegistry; @@ -102,7 +101,7 @@ public class DefaultExchangeRegistry implements ExchangeRegistry return _defaultExchange; } - public boolean unregisterExchange(String name, boolean inUse) throws AMQException + public boolean unregisterExchange(String name, boolean inUse) throws AMQException, QpidSecurityException { final Exchange exchange = _exchangeMap.get(name); if (exchange != null) @@ -110,7 +109,7 @@ public class DefaultExchangeRegistry implements ExchangeRegistry if (!_host.getSecurityManager().authoriseDelete(exchange)) { - throw new AMQSecurityException(); + throw new QpidSecurityException(); } // TODO: check inUse argument diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/Exchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/Exchange.java index 6d83fdb2a1..d20bf788c7 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/Exchange.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/Exchange.java @@ -22,7 +22,7 @@ package org.apache.qpid.server.exchange; import org.apache.qpid.AMQException; import org.apache.qpid.AMQInternalException; -import org.apache.qpid.AMQSecurityException; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.server.binding.Binding; import org.apache.qpid.server.message.MessageDestination; import org.apache.qpid.server.plugin.ExchangeType; @@ -70,25 +70,25 @@ public interface Exchange extends ExchangeReferrer, MessageDestination boolean addBinding(String bindingKey, AMQQueue queue, Map arguments) - throws AMQSecurityException, AMQInternalException; + throws QpidSecurityException, AMQInternalException; boolean replaceBinding(UUID id, String bindingKey, AMQQueue queue, Map arguments) - throws AMQSecurityException, AMQInternalException; + throws QpidSecurityException, AMQInternalException; void restoreBinding(UUID id, String bindingKey, AMQQueue queue, Map argumentMap) - throws AMQSecurityException, AMQInternalException; + throws QpidSecurityException, AMQInternalException; - void removeBinding(Binding b) throws AMQSecurityException, AMQInternalException; + void removeBinding(Binding b) throws QpidSecurityException, AMQInternalException; Binding removeBinding(String bindingKey, AMQQueue queue, Map arguments) - throws AMQSecurityException, AMQInternalException; + throws QpidSecurityException, AMQInternalException; Binding getBinding(String bindingKey, AMQQueue queue, Map arguments); - void close() throws AMQException; + void close() throws QpidSecurityException, AMQInternalException; /** * Determines whether a message would be isBound to a particular queue using a specific routing key and arguments diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/ExchangeFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/ExchangeFactory.java index f4a3fd940d..ef2a3358dd 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/ExchangeFactory.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/ExchangeFactory.java @@ -22,6 +22,7 @@ package org.apache.qpid.server.exchange; import org.apache.qpid.AMQException; import org.apache.qpid.server.plugin.ExchangeType; +import org.apache.qpid.server.security.QpidSecurityException; import java.util.Collection; import java.util.UUID; @@ -34,9 +35,12 @@ public interface ExchangeFactory Collection> getPublicCreatableTypes(); - Exchange createExchange(String exchange, String type, boolean durable, boolean autoDelete) throws AMQException; + Exchange createExchange(String exchange, String type, boolean durable, boolean autoDelete) + throws AMQException, QpidSecurityException; - Exchange createExchange(UUID id, String exchange, String type, boolean durable, boolean autoDelete) throws AMQException; - Exchange restoreExchange(UUID id, String exchange, String type, boolean autoDelete) throws AMQException; + Exchange createExchange(UUID id, String exchange, String type, boolean durable, boolean autoDelete) throws AMQException, + QpidSecurityException; + Exchange restoreExchange(UUID id, String exchange, String type, boolean autoDelete) + throws AMQException, QpidSecurityException; } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/ExchangeInitialiser.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/ExchangeInitialiser.java index 6dbc1d54d1..334c1f5411 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/ExchangeInitialiser.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/ExchangeInitialiser.java @@ -23,12 +23,15 @@ package org.apache.qpid.server.exchange; import org.apache.qpid.AMQException; import org.apache.qpid.server.plugin.ExchangeType; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.server.store.DurableConfigurationStoreHelper; import org.apache.qpid.server.store.DurableConfigurationStore; +import org.apache.qpid.server.util.ServerScopedRuntimeException; public class ExchangeInitialiser { - public void initialise(ExchangeFactory factory, ExchangeRegistry registry, DurableConfigurationStore store) throws AMQException + public void initialise(ExchangeFactory factory, ExchangeRegistry registry, DurableConfigurationStore store) + throws AMQException { for (ExchangeType type : factory.getRegisteredTypes()) { @@ -38,16 +41,25 @@ public class ExchangeInitialiser } private void define(ExchangeRegistry r, ExchangeFactory f, - String name, String type, DurableConfigurationStore store) throws AMQException + String name, String type, DurableConfigurationStore store) + throws AMQException { - if(r.getExchange(name)== null) + try { - Exchange exchange = f.createExchange(name, type, true, false); - r.registerExchange(exchange); - if(exchange.isDurable()) + if(r.getExchange(name)== null) { - DurableConfigurationStoreHelper.createExchange(store, exchange); + Exchange exchange = f.createExchange(name, type, true, false); + r.registerExchange(exchange); + if(exchange.isDurable()) + { + DurableConfigurationStoreHelper.createExchange(store, exchange); + } } } + catch (QpidSecurityException e) + { + throw new ServerScopedRuntimeException("Security Exception when attempting to initialise exchanges - " + + "this is likely a programming error", e); + } } } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/ExchangeRegistry.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/ExchangeRegistry.java index 743c8eea3f..6ecbb94235 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/ExchangeRegistry.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/ExchangeRegistry.java @@ -21,6 +21,7 @@ package org.apache.qpid.server.exchange; import org.apache.qpid.AMQException; +import org.apache.qpid.server.security.QpidSecurityException; import java.util.Collection; import java.util.UUID; @@ -42,7 +43,7 @@ public interface ExchangeRegistry * @param ifUnused if true, do NOT delete the exchange if it is in use (has queues bound to it) * @throws AMQException */ - boolean unregisterExchange(String exchange, boolean ifUnused) throws AMQException; + boolean unregisterExchange(String exchange, boolean ifUnused) throws AMQException, QpidSecurityException; void clearAndUnregisterMbeans(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/MessageSource.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/MessageSource.java index 1996c73222..86179f9b00 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/MessageSource.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/MessageSource.java @@ -27,6 +27,7 @@ import org.apache.qpid.server.filter.FilterManager; import org.apache.qpid.server.protocol.AMQSessionModel; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.security.AuthorizationHolder; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.server.store.TransactionLogResource; import java.util.Collection; @@ -36,7 +37,8 @@ public interface MessageSource> { C addConsumer(T target, FilterManager filters, Class messageClass, - String consumerName, EnumSet options) throws AMQException; + String consumerName, EnumSet options) + throws AMQException, QpidSecurityException; Collection getConsumers(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BindingAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BindingAdapter.java index 92b8f55f23..79ba45a2f0 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BindingAdapter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BindingAdapter.java @@ -27,7 +27,7 @@ import java.util.HashMap; import java.util.Map; import org.apache.qpid.AMQInternalException; -import org.apache.qpid.AMQSecurityException; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.server.model.Binding; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.Exchange; @@ -144,7 +144,7 @@ final class BindingAdapter extends AbstractAdapter implements Binding { _exchange.getExchange().removeBinding(_binding); } - catch(AMQSecurityException e) + catch(QpidSecurityException e) { throw new AccessControlException(e.getMessage()); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/ExchangeAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/ExchangeAdapter.java index 0963f01522..7958dfab23 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/ExchangeAdapter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/ExchangeAdapter.java @@ -29,7 +29,7 @@ import java.util.Map; import org.apache.qpid.AMQException; import org.apache.qpid.AMQInternalException; -import org.apache.qpid.AMQSecurityException; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.server.binding.Binding; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.ConfiguredObjectFinder; @@ -147,7 +147,7 @@ final class ExchangeAdapter extends AbstractAdapter implements Exchange, org.apa return binding == null ? null : _bindingAdapters.get(binding); } } - catch(AMQSecurityException e) + catch(QpidSecurityException e) { throw new AccessControlException(e.toString()); } @@ -171,6 +171,10 @@ final class ExchangeAdapter extends AbstractAdapter implements Exchange, org.apa { throw new IllegalStateException(e); } + catch (QpidSecurityException e) + { + throw new AccessControlException(e.toString()); + } } public String getName() diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java index e2c29ede51..19a44fc4c3 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java @@ -45,6 +45,7 @@ import org.apache.qpid.server.model.Statistics; import org.apache.qpid.server.protocol.AMQConnectionModel; import org.apache.qpid.server.protocol.AMQSessionModel; import org.apache.qpid.server.queue.*; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.server.store.DurableConfigurationStoreHelper; import org.apache.qpid.server.consumer.Consumer; import org.apache.qpid.server.util.MapValueConverter; @@ -178,6 +179,10 @@ final class QueueAdapter> extends AbstractAdapter impl { throw new IllegalStateException(e); } + catch (QpidSecurityException e) + { + throw new AccessControlException(e.toString()); + } } public String getName() diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java index c43dc34d2f..bd265fe938 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java @@ -66,6 +66,7 @@ import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.protocol.AMQConnectionModel; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.queue.AMQQueueFactory; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.server.security.SecurityManager; import org.apache.qpid.server.security.access.Operation; import org.apache.qpid.server.security.auth.AuthenticatedPrincipal; @@ -378,6 +379,10 @@ public final class VirtualHostAdapter extends AbstractAdapter implements Virtual { throw new IllegalArgumentException(e); } + catch (QpidSecurityException e) + { + throw new AccessControlException(e.toString()); + } } public Queue createQueue(Map attributes) @@ -471,6 +476,10 @@ public final class VirtualHostAdapter extends AbstractAdapter implements Virtual { throw new IllegalArgumentException(e); } + catch (QpidSecurityException e) + { + throw new AccessControlException(e.toString()); + } } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueue.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueue.java index 76477a0a9b..49c8a8f2a1 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueue.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueue.java @@ -30,6 +30,7 @@ import org.apache.qpid.server.message.MessageDestination; import org.apache.qpid.server.message.MessageSource; import org.apache.qpid.server.protocol.CapacityChecker; import org.apache.qpid.server.consumer.Consumer; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.server.util.Action; import org.apache.qpid.server.virtualhost.VirtualHost; @@ -94,7 +95,7 @@ public interface AMQQueue, Q extends AMQQueue boolean isDeleted(); - int delete() throws AMQException; + int delete() throws AMQException, QpidSecurityException; void requeue(E entry); @@ -169,7 +170,7 @@ public interface AMQQueue, Q extends AMQQueue void deleteMessageFromTop(); - long clearQueue() throws AMQException; + long clearQueue() throws AMQException, QpidSecurityException; /** * Checks the status of messages on the queue, purging expired ones, firing age related alerts etc. diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java index 4e0a9048e1..1f281b16e9 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java @@ -26,7 +26,7 @@ import java.util.Map; import java.util.UUID; import org.apache.qpid.AMQException; -import org.apache.qpid.AMQSecurityException; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.exchange.ExchangeDefaults; import org.apache.qpid.server.configuration.BrokerProperties; import org.apache.qpid.server.configuration.QueueConfiguration; @@ -183,7 +183,7 @@ public class AMQQueueFactory implements QueueFactory boolean autoDelete, boolean exclusive, boolean deleteOnNoConsumer, - Map arguments) throws AMQSecurityException, AMQException + Map arguments) throws QpidSecurityException, AMQException { return createOrRestoreQueue(id, queueName, true, owner, autoDelete, exclusive, deleteOnNoConsumer, arguments, false); @@ -201,7 +201,7 @@ public class AMQQueueFactory implements QueueFactory boolean autoDelete, boolean exclusive, boolean deleteOnNoConsumer, - Map arguments) throws AMQSecurityException, AMQException + Map arguments) throws QpidSecurityException, AMQException { return createOrRestoreQueue(id, queueName, durable, owner, autoDelete, exclusive, deleteOnNoConsumer, arguments, true); } @@ -214,7 +214,7 @@ public class AMQQueueFactory implements QueueFactory boolean exclusive, boolean deleteOnNoConsumer, Map arguments, - boolean createInStore) throws AMQSecurityException, AMQException + boolean createInStore) throws QpidSecurityException, AMQException { if (id == null) { @@ -391,7 +391,7 @@ public class AMQQueueFactory implements QueueFactory return q; } - public AMQQueue createAMQQueueImpl(QueueConfiguration config) throws AMQException + public AMQQueue createAMQQueueImpl(QueueConfiguration config) throws AMQException, QpidSecurityException { String queueName = config.getName(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueFactory.java index 3e4e1df5a2..d58de14000 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueFactory.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueFactory.java @@ -23,7 +23,7 @@ package org.apache.qpid.server.queue; import java.util.Map; import java.util.UUID; import org.apache.qpid.AMQException; -import org.apache.qpid.AMQSecurityException; +import org.apache.qpid.server.security.QpidSecurityException; public interface QueueFactory { @@ -34,7 +34,7 @@ public interface QueueFactory boolean autoDelete, boolean exclusive, boolean deleteOnNoConsumer, - Map arguments) throws AMQSecurityException, AMQException; + Map arguments) throws QpidSecurityException, AMQException; AMQQueue restoreQueue(UUID id, String queueName, @@ -42,6 +42,6 @@ public interface QueueFactory boolean autoDelete, boolean exclusive, boolean deleteOnNoConsumer, - Map arguments) throws AMQSecurityException, AMQException; + Map arguments) throws QpidSecurityException, AMQException; } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java index 25b6cac712..c07264b628 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java @@ -29,7 +29,7 @@ import java.util.concurrent.atomic.AtomicLong; import org.apache.log4j.Logger; import org.apache.qpid.AMQException; -import org.apache.qpid.AMQSecurityException; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.pool.ReferenceCountingExecutorService; import org.apache.qpid.server.binding.Binding; import org.apache.qpid.server.configuration.BrokerProperties; @@ -56,6 +56,7 @@ import org.apache.qpid.server.txn.AutoCommitTransaction; import org.apache.qpid.server.txn.LocalTransaction; import org.apache.qpid.server.txn.ServerTransaction; import org.apache.qpid.server.util.Action; +import org.apache.qpid.server.util.ConnectionScopedRuntimeException; import org.apache.qpid.server.util.StateChangeListener; import org.apache.qpid.server.virtualhost.VirtualHost; @@ -381,13 +382,13 @@ abstract class SimpleAMQQueue, Q extends SimpleA final FilterManager filters, final Class messageClass, final String consumerName, - EnumSet optionSet) throws AMQException + EnumSet optionSet) throws AMQException, QpidSecurityException { // Access control if (!getVirtualHost().getSecurityManager().authoriseConsume(this)) { - throw new AMQSecurityException("Permission denied"); + throw new QpidSecurityException("Permission denied"); } @@ -502,7 +503,14 @@ abstract class SimpleAMQQueue, Q extends SimpleA _logger.info("Auto-deleting queue:" + this); } - getVirtualHost().removeQueue(this); + try + { + getVirtualHost().removeQueue(this); + } + catch (QpidSecurityException e) + { + throw new ConnectionScopedRuntimeException("Auto delete queue unable to delete itself", e); + } // we need to manually fire the event to the removed consumer (which was the last one left for this // queue. This is because the delete method uses the consumer set which has just been cleared @@ -1169,7 +1177,7 @@ abstract class SimpleAMQQueue, Q extends SimpleA } - public void purge(final long request) throws AMQException + public void purge(final long request) throws AMQException, QpidSecurityException { clear(request); } @@ -1199,17 +1207,17 @@ abstract class SimpleAMQQueue, Q extends SimpleA } } - public long clearQueue() throws AMQException + public long clearQueue() throws AMQException, QpidSecurityException { return clear(0l); } - private long clear(final long request) throws AMQSecurityException + private long clear(final long request) throws QpidSecurityException { //Perform ACLs if (!getVirtualHost().getSecurityManager().authorisePurge(this)) { - throw new AMQSecurityException("Permission denied: queue " + getName()); + throw new QpidSecurityException("Permission denied: queue " + getName()); } QueueEntryIterator> queueListIterator = _entries.iterator(); @@ -1271,12 +1279,12 @@ abstract class SimpleAMQQueue, Q extends SimpleA } // TODO list all thrown exceptions - public int delete() throws AMQException + public int delete() throws AMQException, QpidSecurityException { // Check access if (!_virtualHost.getSecurityManager().authoriseDelete(this)) { - throw new AMQSecurityException("Permission denied: " + getName()); + throw new QpidSecurityException("Permission denied: " + getName()); } if (!_deleted.getAndSet(true)) diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/QpidSecurityException.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/QpidSecurityException.java new file mode 100644 index 0000000000..b9d9513f9f --- /dev/null +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/QpidSecurityException.java @@ -0,0 +1,43 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.apache.qpid.server.security; + +public class QpidSecurityException extends Exception +{ + public QpidSecurityException() + { + } + + public QpidSecurityException(final String message) + { + super(message); + } + + public QpidSecurityException(final String message, final Throwable cause) + { + super(message, cause); + } + + public QpidSecurityException(final Throwable cause) + { + super(cause); + } +} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/util/ConnectionScopedRuntimeException.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/util/ConnectionScopedRuntimeException.java new file mode 100644 index 0000000000..7161846ef5 --- /dev/null +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/util/ConnectionScopedRuntimeException.java @@ -0,0 +1,51 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.apache.qpid.server.util; + +public class ConnectionScopedRuntimeException extends RuntimeException +{ + public ConnectionScopedRuntimeException() + { + } + + public ConnectionScopedRuntimeException(final String message) + { + super(message); + } + + public ConnectionScopedRuntimeException(final String message, final Throwable cause) + { + super(message, cause); + } + + public ConnectionScopedRuntimeException(final Throwable cause) + { + super(cause); + } + + public ConnectionScopedRuntimeException(final String message, + final Throwable cause, + final boolean enableSuppression, + final boolean writableStackTrace) + { + super(message, cause, enableSuppression, writableStackTrace); + } +} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/util/ServerScopedRuntimeException.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/util/ServerScopedRuntimeException.java new file mode 100644 index 0000000000..8df7b0489c --- /dev/null +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/util/ServerScopedRuntimeException.java @@ -0,0 +1,51 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.apache.qpid.server.util; + +public class ServerScopedRuntimeException extends RuntimeException +{ + public ServerScopedRuntimeException() + { + } + + public ServerScopedRuntimeException(final String message) + { + super(message); + } + + public ServerScopedRuntimeException(final String message, final Throwable cause) + { + super(message, cause); + } + + public ServerScopedRuntimeException(final Throwable cause) + { + super(cause); + } + + public ServerScopedRuntimeException(final String message, + final Throwable cause, + final boolean enableSuppression, + final boolean writableStackTrace) + { + super(message, cause, enableSuppression, writableStackTrace); + } +} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java index 3d42b07117..88cd025728 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java @@ -34,7 +34,7 @@ import java.util.concurrent.TimeUnit; import org.apache.commons.configuration.ConfigurationException; import org.apache.log4j.Logger; import org.apache.qpid.AMQException; -import org.apache.qpid.AMQSecurityException; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.server.configuration.ExchangeConfiguration; import org.apache.qpid.server.configuration.QueueConfiguration; import org.apache.qpid.server.configuration.VirtualHostConfiguration; @@ -292,7 +292,8 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg } - protected void initialiseModel(VirtualHostConfiguration config) throws ConfigurationException, AMQException + protected void initialiseModel(VirtualHostConfiguration config) + throws ConfigurationException, AMQException, QpidSecurityException { _logger.debug("Loading configuration for virtualhost: " + config.getName()); @@ -314,14 +315,15 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg } } - private void configureExchange(ExchangeConfiguration exchangeConfiguration) throws AMQException + private void configureExchange(ExchangeConfiguration exchangeConfiguration) + throws AMQException, QpidSecurityException { boolean durable = exchangeConfiguration.getDurable(); boolean autodelete = exchangeConfiguration.getAutoDelete(); try { - Exchange newExchange = createExchange(null, exchangeConfiguration.getName(), exchangeConfiguration.getType(), durable, autodelete, - null); + Exchange newExchange = createExchange(null, exchangeConfiguration.getName(), + exchangeConfiguration.getType(), durable, autodelete, null); } catch(ExchangeExistsException e) { @@ -330,7 +332,8 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg } - private void configureQueue(QueueConfiguration queueConfiguration) throws AMQException, ConfigurationException + private void configureQueue(QueueConfiguration queueConfiguration) + throws AMQException, ConfigurationException, QpidSecurityException { AMQQueue queue = _queueFactory.createAMQQueueImpl(queueConfiguration); String queueName = queue.getName(); @@ -380,7 +383,8 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg } - private void configureBinding(AMQQueue queue, Exchange exchange, String routingKey, Map arguments) throws AMQException + private void configureBinding(AMQQueue queue, Exchange exchange, String routingKey, Map arguments) + throws AMQException, QpidSecurityException { if (_logger.isInfoEnabled()) { @@ -487,7 +491,7 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg } @Override - public int removeQueue(AMQQueue queue) throws AMQException + public int removeQueue(AMQQueue queue) throws AMQException, QpidSecurityException { synchronized (getQueueRegistry()) { @@ -511,7 +515,7 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg boolean autoDelete, boolean exclusive, boolean deleteOnNoConsumer, - Map arguments) throws AMQException + Map arguments) throws AMQException, QpidSecurityException { if (queueName == null) @@ -529,7 +533,7 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg owner)) { String description = "Permission denied: queue-name '" + queueName + "'"; - throw new AMQSecurityException(description); + throw new QpidSecurityException(description); } synchronized (_queueRegistry) @@ -603,7 +607,7 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg boolean durable, boolean autoDelete, String alternateExchangeName) - throws AMQException + throws AMQException, QpidSecurityException { synchronized (_exchangeRegistry) { @@ -649,7 +653,7 @@ public abstract class AbstractVirtualHost implements VirtualHost, IConnectionReg } @Override - public void removeExchange(Exchange exchange, boolean force) throws AMQException + public void removeExchange(Exchange exchange, boolean force) throws AMQException, QpidSecurityException { if(exchange.hasReferrers()) { diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/BindingRecoverer.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/BindingRecoverer.java index de6d3d9e75..7a034647b0 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/BindingRecoverer.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/BindingRecoverer.java @@ -31,9 +31,11 @@ import org.apache.qpid.server.exchange.Exchange; import org.apache.qpid.server.exchange.ExchangeRegistry; import org.apache.qpid.server.model.Queue; import org.apache.qpid.server.queue.AMQQueue; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.server.store.AbstractDurableConfiguredObjectRecoverer; import org.apache.qpid.server.store.UnresolvedDependency; import org.apache.qpid.server.store.UnresolvedObject; +import org.apache.qpid.server.util.ServerScopedRuntimeException; public class BindingRecoverer extends AbstractDurableConfiguredObjectRecoverer { @@ -122,6 +124,12 @@ public class BindingRecoverer extends AbstractDurableConfiguredObjectRecoverer diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeRecoverer.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeRecoverer.java index 6ad7014c47..6375af9933 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeRecoverer.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeRecoverer.java @@ -27,9 +27,11 @@ import org.apache.qpid.server.exchange.Exchange; import org.apache.qpid.server.exchange.ExchangeFactory; import org.apache.qpid.server.exchange.ExchangeRegistry; import org.apache.qpid.server.model.LifetimePolicy; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.server.store.AbstractDurableConfiguredObjectRecoverer; import org.apache.qpid.server.store.UnresolvedDependency; import org.apache.qpid.server.store.UnresolvedObject; +import org.apache.qpid.server.util.ServerScopedRuntimeException; public class ExchangeRecoverer extends AbstractDurableConfiguredObjectRecoverer { @@ -85,6 +87,12 @@ public class ExchangeRecoverer extends AbstractDurableConfiguredObjectRecoverer< { throw new RuntimeException("Error recovering exchange uuid " + id + " name " + exchangeName, e); } + catch (QpidSecurityException e) + { + throw new ServerScopedRuntimeException("Security Exception thrown when recovering. The recovery " + + "thread should not be bound by permissions, this is likely " + + "a programming error.",e); + } } @Override diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/QueueRecoverer.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/QueueRecoverer.java index 02d628da68..f6dd510894 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/QueueRecoverer.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/QueueRecoverer.java @@ -32,9 +32,11 @@ import org.apache.qpid.server.exchange.ExchangeRegistry; import org.apache.qpid.server.model.Queue; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.queue.QueueFactory; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.server.store.AbstractDurableConfiguredObjectRecoverer; import org.apache.qpid.server.store.UnresolvedDependency; import org.apache.qpid.server.store.UnresolvedObject; +import org.apache.qpid.server.util.ServerScopedRuntimeException; public class QueueRecoverer extends AbstractDurableConfiguredObjectRecoverer { @@ -129,6 +131,12 @@ public class QueueRecoverer extends AbstractDurableConfiguredObjectRecoverer getQueues(); - int removeQueue(AMQQueue queue) throws AMQException; + int removeQueue(AMQQueue queue) throws AMQException, QpidSecurityException; AMQQueue createQueue(UUID id, String queueName, @@ -67,7 +65,7 @@ public interface VirtualHost extends DurableConfigurationStore.Source, Closeable boolean autoDelete, boolean exclusive, boolean deleteOnNoConsumer, - Map arguments) throws AMQException; + Map arguments) throws AMQException, QpidSecurityException; Exchange createExchange(UUID id, @@ -76,9 +74,9 @@ public interface VirtualHost extends DurableConfigurationStore.Source, Closeable boolean durable, boolean autoDelete, String alternateExchange) - throws AMQException; + throws AMQException, QpidSecurityException; - void removeExchange(Exchange exchange, boolean force) throws AMQException; + void removeExchange(Exchange exchange, boolean force) throws AMQException, QpidSecurityException; MessageDestination getMessageDestination(String name); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/FanoutExchangeTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/FanoutExchangeTest.java index 4449cf7645..70ac5128c1 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/FanoutExchangeTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/FanoutExchangeTest.java @@ -35,7 +35,7 @@ import junit.framework.TestCase; import org.apache.qpid.AMQException; import org.apache.qpid.AMQInternalException; -import org.apache.qpid.AMQSecurityException; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.common.AMQPFilterTypes; import org.apache.qpid.server.logging.LogActor; import org.apache.qpid.server.logging.actors.CurrentActor; @@ -85,28 +85,28 @@ public class FanoutExchangeTest extends TestCase assertFalse("calling isBound(AMQQueue) with null queue should return false", _exchange.isBound((AMQQueue) null)); } - public void testIsBoundStringMapAMQQueue() throws AMQSecurityException, AMQInternalException + public void testIsBoundStringMapAMQQueue() throws QpidSecurityException, AMQInternalException { AMQQueue queue = bindQueue(); assertTrue("Should return true for a bound queue", _exchange.isBound("matters", null, queue)); } - public void testIsBoundStringAMQQueue() throws AMQSecurityException, AMQInternalException + public void testIsBoundStringAMQQueue() throws QpidSecurityException, AMQInternalException { AMQQueue queue = bindQueue(); assertTrue("Should return true for a bound queue", _exchange.isBound("matters", queue)); } - public void testIsBoundAMQQueue() throws AMQSecurityException, AMQInternalException + public void testIsBoundAMQQueue() throws QpidSecurityException, AMQInternalException { AMQQueue queue = bindQueue(); assertTrue("Should return true for a bound queue", _exchange.isBound(queue)); } - private AMQQueue bindQueue() throws AMQSecurityException, AMQInternalException + private AMQQueue bindQueue() throws QpidSecurityException, AMQInternalException { AMQQueue queue = mockQueue(); _exchange.addBinding("matters", queue, null); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/HeadersExchangeTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/HeadersExchangeTest.java index 7c62530301..54b0c3c529 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/HeadersExchangeTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/HeadersExchangeTest.java @@ -30,7 +30,7 @@ import java.util.Set; import java.util.UUID; import junit.framework.TestCase; import org.apache.qpid.AMQInternalException; -import org.apache.qpid.AMQSecurityException; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.common.AMQPFilterTypes; import org.apache.qpid.server.logging.LogActor; import org.apache.qpid.server.logging.actors.CurrentActor; @@ -119,7 +119,7 @@ public class HeadersExchangeTest extends TestCase } private void bind(String bindingKey, Map arguments, AMQQueue q) - throws AMQSecurityException, AMQInternalException + throws QpidSecurityException, AMQInternalException { _exchange.addBinding(bindingKey,q,arguments); } diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/TopicExchangeTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/TopicExchangeTest.java index 8cab2e9058..4a7bc33365 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/TopicExchangeTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/TopicExchangeTest.java @@ -72,7 +72,7 @@ public class TopicExchangeTest extends QpidTestCase } } - public void testNoRoute() throws AMQException + public void testNoRoute() throws Exception { AMQQueue queue = _vhost.createQueue(UUIDGenerator.generateRandomUUID(), "a*#b", false, null, false, false, false, null); @@ -84,7 +84,7 @@ public class TopicExchangeTest extends QpidTestCase Assert.assertEquals(0, queue.getMessageCount()); } - public void testDirectMatch() throws AMQException + public void testDirectMatch() throws Exception { AMQQueue queue = _vhost.createQueue(UUIDGenerator.generateRandomUUID(), "ab", false, null, false, false, false, null); @@ -107,7 +107,7 @@ public class TopicExchangeTest extends QpidTestCase } - public void testStarMatch() throws AMQException + public void testStarMatch() throws Exception { AMQQueue queue = _vhost.createQueue(UUIDGenerator.generateRandomUUID(), "a*", false, null, false, false, false, null); _exchange.registerQueue(new Binding(null, "a.*",queue, _exchange, null)); @@ -138,7 +138,7 @@ public class TopicExchangeTest extends QpidTestCase Assert.assertEquals(0, queue.getMessageCount()); } - public void testHashMatch() throws AMQException + public void testHashMatch() throws Exception { AMQQueue queue = _vhost.createQueue(UUIDGenerator.generateRandomUUID(), "a#", false, null, false, false, false, null); _exchange.registerQueue(new Binding(null, "a.#",queue, _exchange, null)); @@ -189,7 +189,7 @@ public class TopicExchangeTest extends QpidTestCase } - public void testMidHash() throws AMQException + public void testMidHash() throws Exception { AMQQueue queue = _vhost.createQueue(UUIDGenerator.generateRandomUUID(), "a", false, null, false, false, false, null); @@ -215,7 +215,7 @@ public class TopicExchangeTest extends QpidTestCase } - public void testMatchAfterHash() throws AMQException + public void testMatchAfterHash() throws Exception { AMQQueue queue = _vhost.createQueue(UUIDGenerator.generateRandomUUID(), "a#", false, null, false, false, false, null); @@ -254,7 +254,7 @@ public class TopicExchangeTest extends QpidTestCase } - public void testHashAfterHash() throws AMQException + public void testHashAfterHash() throws Exception { AMQQueue queue = _vhost.createQueue(UUIDGenerator.generateRandomUUID(), "a#", false, null, false, false, false, null); @@ -276,7 +276,7 @@ public class TopicExchangeTest extends QpidTestCase } - public void testHashHash() throws AMQException + public void testHashHash() throws Exception { AMQQueue queue = _vhost.createQueue(UUIDGenerator.generateRandomUUID(), "a#", false, null, false, false, false, null); @@ -298,7 +298,7 @@ public class TopicExchangeTest extends QpidTestCase } - public void testSubMatchFails() throws AMQException + public void testSubMatchFails() throws Exception { AMQQueue queue = _vhost.createQueue(UUIDGenerator.generateRandomUUID(), "a", false, null, false, false, false, null); @@ -328,7 +328,7 @@ public class TopicExchangeTest extends QpidTestCase return queues.size(); } - public void testMoreRouting() throws AMQException + public void testMoreRouting() throws Exception { AMQQueue queue = _vhost.createQueue(UUIDGenerator.generateRandomUUID(), "a", false, null, false, false, false, null); @@ -342,7 +342,7 @@ public class TopicExchangeTest extends QpidTestCase } - public void testMoreQueue() throws AMQException + public void testMoreQueue() throws Exception { AMQQueue queue = _vhost.createQueue(UUIDGenerator.generateRandomUUID(), "a", false, null, false, false, false, null); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/AMQQueueFactoryTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/AMQQueueFactoryTest.java index febce9ea2e..e59b9f614e 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/AMQQueueFactoryTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/AMQQueueFactoryTest.java @@ -98,7 +98,7 @@ public class AMQQueueFactoryTest extends QpidTestCase } - private void delegateVhostQueueCreation() throws AMQException + private void delegateVhostQueueCreation() throws Exception { final ArgumentCaptor id = ArgumentCaptor.forClass(UUID.class); final ArgumentCaptor queueName = ArgumentCaptor.forClass(String.class); @@ -152,7 +152,7 @@ public class AMQQueueFactoryTest extends QpidTestCase }).when(_queueRegistry).registerQueue(capturedQueue.capture()); } - private void mockExchangeCreation() throws AMQException + private void mockExchangeCreation() throws Exception { final ArgumentCaptor idCapture = ArgumentCaptor.forClass(UUID.class); final ArgumentCaptor exchangeNameCapture = ArgumentCaptor.forClass(String.class); @@ -260,9 +260,8 @@ public class AMQQueueFactoryTest extends QpidTestCase /** * Tests that setting the {@link QueueArgumentsConverter#X_QPID_DLQ_ENABLED} argument true does * cause the alternate exchange to be set and DLQ to be produced. - * @throws AMQException */ - public void testDeadLetterQueueEnabled() throws AMQException + public void testDeadLetterQueueEnabled() throws Exception { Map attributes = Collections.singletonMap(Queue.CREATE_DLQ_ON_CREATION, (Object) true); @@ -303,7 +302,6 @@ public class AMQQueueFactoryTest extends QpidTestCase /** * Tests that the deadLetterQueues/maximumDeliveryCount settings from the configuration * are not applied to the DLQ itself. - * @throws AMQException */ public void testDeadLetterQueueDoesNotInheritDLQorMDCSettings() throws Exception { @@ -349,9 +347,8 @@ public class AMQQueueFactoryTest extends QpidTestCase /** * Tests that setting the {@link QueueArgumentsConverter#X_QPID_DLQ_ENABLED} argument false does not * result in the alternate exchange being set and DLQ being created. - * @throws AMQException */ - public void testDeadLetterQueueDisabled() throws AMQException + public void testDeadLetterQueueDisabled() throws Exception { Map attributes = Collections.singletonMap(Queue.CREATE_DLQ_ON_CREATION, (Object) false); @@ -384,9 +381,8 @@ public class AMQQueueFactoryTest extends QpidTestCase * Tests that setting the {@link QueueArgumentsConverter#X_QPID_DLQ_ENABLED} argument true but * creating an auto-delete queue, does not result in the alternate exchange * being set and DLQ being created. - * @throws AMQException */ - public void testDeadLetterQueueNotCreatedForAutodeleteQueues() throws AMQException + public void testDeadLetterQueueNotCreatedForAutodeleteQueues() throws Exception { Map attributes = Collections.singletonMap(Queue.CREATE_DLQ_ON_CREATION, (Object) true); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/PriorityQueueTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/PriorityQueueTest.java index 56cd29b0bd..b71e4cd6d3 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/PriorityQueueTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/PriorityQueueTest.java @@ -49,7 +49,7 @@ public class PriorityQueueTest extends SimpleAMQQueueTestBase super.setUp(); } - public void testPriorityOrdering() throws AMQException, InterruptedException + public void testPriorityOrdering() throws Exception, InterruptedException { // Enqueue messages in order diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SimpleAMQQueueTestBase.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SimpleAMQQueueTestBase.java index 7f3c16e8f1..9330df5bea 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SimpleAMQQueueTestBase.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/SimpleAMQQueueTestBase.java @@ -36,7 +36,7 @@ import java.util.Map; import org.apache.log4j.Logger; import org.apache.qpid.AMQException; import org.apache.qpid.AMQInternalException; -import org.apache.qpid.AMQSecurityException; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.exchange.ExchangeDefaults; import org.apache.qpid.server.exchange.DirectExchange; import org.apache.qpid.server.message.AMQMessageHeader; @@ -100,7 +100,7 @@ abstract class SimpleAMQQueueTestBase, Q extends } } - public void testCreateQueue() throws AMQException + public void testCreateQueue() throws Exception { _queue.stop(); try @@ -129,7 +129,7 @@ abstract class SimpleAMQQueueTestBase, Q extends assertEquals("Virtual host was wrong", _virtualHost, _queue.getVirtualHost()); } - public void testBinding() throws AMQSecurityException, AMQInternalException + public void testBinding() throws QpidSecurityException, AMQInternalException { _exchange.addBinding(_routingKey, _queue, Collections.EMPTY_MAP); @@ -150,7 +150,7 @@ abstract class SimpleAMQQueueTestBase, Q extends } - public void testRegisterConsumerThenEnqueueMessage() throws AMQException + public void testRegisterConsumerThenEnqueueMessage() throws Exception { ServerMessage messageA = createMessage(new Long(24)); @@ -188,7 +188,7 @@ abstract class SimpleAMQQueueTestBase, Q extends } - public void testEnqueueMessageThenRegisterConsumer() throws AMQException, InterruptedException + public void testEnqueueMessageThenRegisterConsumer() throws Exception, InterruptedException { ServerMessage messageA = createMessage(new Long(24)); _queue.enqueue(messageA, null); @@ -420,7 +420,7 @@ abstract class SimpleAMQQueueTestBase, Q extends consumer2.getQueueContext().getReleasedEntry()); } - public void testExclusiveConsumer() throws AMQException + public void testExclusiveConsumer() throws Exception { ServerMessage messageA = createMessage(new Long(24)); // Check adding an exclusive consumer adds it to the queue @@ -831,7 +831,7 @@ abstract class SimpleAMQQueueTestBase, Q extends * Tests that all messages including dequeued one are deleted from the queue * on invocation of {@link SimpleAMQQueue#clearQueue()} */ - public void testClearQueueWithDequeuedEntry() + public void testClearQueueWithDequeuedEntry() throws Exception { int messageNumber = 4; int dequeueMessageIndex = 1; @@ -843,14 +843,7 @@ abstract class SimpleAMQQueueTestBase, Q extends dequeueMessage(_queue, dequeueMessageIndex); // clean queue - try - { - _queue.clearQueue(); - } - catch (AMQException e) - { - fail("Failure to clear queue:" + e.getMessage()); - } + _queue.clearQueue(); // get queue entries List entries = _queue.getMessagesOnTheQueue(); diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/StandardQueueTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/StandardQueueTest.java index 58b3531897..6a32eff9ed 100644 --- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/StandardQueueTest.java +++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/StandardQueueTest.java @@ -144,7 +144,7 @@ public class StandardQueueTest extends SimpleAMQQueueTestBaseemptyMap()); diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java index d3d53504be..3d50da6ed5 100644 --- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java +++ b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java @@ -42,6 +42,7 @@ import org.apache.qpid.server.model.UUIDGenerator; import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.queue.QueueArgumentsConverter; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.server.security.SecurityManager; import org.apache.qpid.server.store.DurableConfigurationStore; import org.apache.qpid.server.store.MessageStore; @@ -301,6 +302,10 @@ public class ServerSessionDelegate extends SessionDelegate { exception(session, method, e, "Cannot subscribe to queue '" + queueName + "' with destination '" + destination); } + catch (QpidSecurityException e) + { + exception(session, method, ExecutionErrorCode.UNAUTHORIZED_ACCESS, e.getMessage()); + } } } } @@ -786,6 +791,10 @@ public class ServerSessionDelegate extends SessionDelegate { exception(session, method, e, "Cannot declare exchange '" + exchangeName); } + catch (QpidSecurityException e) + { + exception(session, method, ExecutionErrorCode.UNAUTHORIZED_ACCESS, e.getMessage()); + } } @@ -898,6 +907,10 @@ public class ServerSessionDelegate extends SessionDelegate { exception(session, method, e, "Cannot delete exchange '" + method.getExchange() ); } + catch (QpidSecurityException e) + { + exception(session, method, ExecutionErrorCode.UNAUTHORIZED_ACCESS, e.getMessage()); + } } private boolean nameNullOrEmpty(String name) @@ -992,6 +1005,10 @@ public class ServerSessionDelegate extends SessionDelegate { exception(session, method, e, "Cannot add binding '" + method.getBindingKey()); } + catch (QpidSecurityException e) + { + exception(session, method, ExecutionErrorCode.UNAUTHORIZED_ACCESS, e.getMessage()); + } } else { @@ -1045,6 +1062,10 @@ public class ServerSessionDelegate extends SessionDelegate { exception(session, method, e, "Cannot remove binding '" + method.getBindingKey()); } + catch (QpidSecurityException e) + { + exception(session, method, ExecutionErrorCode.UNAUTHORIZED_ACCESS, e.getMessage()); + } } } } @@ -1272,6 +1293,10 @@ public class ServerSessionDelegate extends SessionDelegate { exception(session, method, e, "Cannot delete '" + method.getQueue()); } + catch (QpidSecurityException e) + { + exception(session, method, ExecutionErrorCode.UNAUTHORIZED_ACCESS, e.getMessage()); + } } }; final ServerSession s = (ServerSession) session; @@ -1324,6 +1349,10 @@ public class ServerSessionDelegate extends SessionDelegate { exception(session, method, e, "Cannot declare queue '" + queueName); } + catch (QpidSecurityException e) + { + exception(session, method, ExecutionErrorCode.UNAUTHORIZED_ACCESS, e.getMessage()); + } } } @@ -1401,6 +1430,10 @@ public class ServerSessionDelegate extends SessionDelegate { exception(session, method, e, "Cannot delete queue '" + queueName); } + catch (QpidSecurityException e) + { + exception(session, method, ExecutionErrorCode.UNAUTHORIZED_ACCESS, e.getMessage()); + } } } } @@ -1432,6 +1465,10 @@ public class ServerSessionDelegate extends SessionDelegate { exception(session, method, e, "Cannot purge queue '" + queueName); } + catch (QpidSecurityException e) + { + exception(session, method, ExecutionErrorCode.UNAUTHORIZED_ACCESS, e.getMessage()); + } } } } diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java index 5afb2069c1..4eeb9d8fb2 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java @@ -29,7 +29,7 @@ import java.util.concurrent.locks.Lock; import org.apache.log4j.Logger; import org.apache.qpid.AMQConnectionException; import org.apache.qpid.AMQException; -import org.apache.qpid.AMQSecurityException; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.common.AMQPFilterTypes; import org.apache.qpid.framing.AMQMethodBody; import org.apache.qpid.framing.AMQShortString; @@ -262,13 +262,13 @@ public class AMQChannel implements AMQSessionModel, AsyncAutoCommitTransaction.F return _channelId; } - public void setPublishFrame(MessagePublishInfo info, final MessageDestination e) throws AMQSecurityException + public void setPublishFrame(MessagePublishInfo info, final MessageDestination e) throws QpidSecurityException { String routingKey = info.getRoutingKey() == null ? null : info.getRoutingKey().asString(); SecurityManager securityManager = getVirtualHost().getSecurityManager(); if (!securityManager.authorisePublish(info.isImmediate(), routingKey, e.getName())) { - throw new AMQSecurityException("Permission denied: " + e.getName()); + throw new QpidSecurityException("Permission denied: " + e.getName()); } _currentMessage = new IncomingMessage(info); _currentMessage.setMessageDestination(e); @@ -515,7 +515,8 @@ public class AMQChannel implements AMQSessionModel, AsyncAutoCommitTransaction.F * @throws AMQException if something goes wrong */ public AMQShortString consumeFromSource(AMQShortString tag, MessageSource source, boolean acks, - FieldTable filters, boolean exclusive, boolean noLocal) throws AMQException + FieldTable filters, boolean exclusive, boolean noLocal) + throws AMQException, QpidSecurityException { if (tag == null) { @@ -588,6 +589,11 @@ public class AMQChannel implements AMQSessionModel, AsyncAutoCommitTransaction.F _tag2SubscriptionTargetMap.remove(tag); throw e; } + catch (QpidSecurityException e) + { + _tag2SubscriptionTargetMap.remove(tag); + throw e; + } return tag; } diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java index ba61afc376..329aa396b0 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java @@ -46,7 +46,7 @@ import org.apache.log4j.Logger; import org.apache.qpid.AMQChannelException; import org.apache.qpid.AMQConnectionException; import org.apache.qpid.AMQException; -import org.apache.qpid.AMQSecurityException; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.codec.AMQCodecFactory; import org.apache.qpid.common.QpidProperties; import org.apache.qpid.common.ServerPropertyNames; @@ -628,12 +628,6 @@ public class AMQProtocolEngine implements ServerProtocolEngine, AMQProtocolSessi _logger.info(e.getMessage() + " whilst processing:" + methodBody); closeConnection(channelId, e); } - catch (AMQSecurityException e) - { - AMQConnectionException ce = evt.getMethod().getConnectionException(AMQConstant.ACCESS_REFUSED, e.getMessage()); - _logger.info(e.getMessage() + " whilst processing:" + methodBody); - closeConnection(channelId, ce); - } } catch (Exception e) { diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/BasicConsumeMethodHandler.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/BasicConsumeMethodHandler.java index b28bb5a0ad..ad4235b786 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/BasicConsumeMethodHandler.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/BasicConsumeMethodHandler.java @@ -35,6 +35,7 @@ import org.apache.qpid.server.protocol.AMQSessionModel; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.protocol.v0_8.state.AMQStateManager; import org.apache.qpid.server.protocol.v0_8.state.StateAwareMethodListener; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.server.virtualhost.VirtualHost; public class BasicConsumeMethodHandler implements StateAwareMethodListener @@ -175,6 +176,13 @@ public class BasicConsumeMethodHandler implements StateAwareMethodListener @@ -88,7 +89,14 @@ public class BasicPublishMethodHandler implements StateAwareMethodListener { throw body.getChannelException(AMQConstant.CHANNEL_ERROR, e.toString()); } + catch (QpidSecurityException e) + { + throw body.getConnectionException(AMQConstant.ACCESS_REFUSED, e.getMessage()); + } if (_log.isInfoEnabled()) { diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/QueueDeclareHandler.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/QueueDeclareHandler.java index 263175d590..1286a20970 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/QueueDeclareHandler.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/QueueDeclareHandler.java @@ -39,9 +39,11 @@ import org.apache.qpid.server.queue.QueueArgumentsConverter; import org.apache.qpid.server.queue.QueueRegistry; import org.apache.qpid.server.protocol.v0_8.state.AMQStateManager; import org.apache.qpid.server.protocol.v0_8.state.StateAwareMethodListener; +import org.apache.qpid.server.security.QpidSecurityException; import org.apache.qpid.server.store.DurableConfigurationStoreHelper; import org.apache.qpid.server.store.DurableConfigurationStore; import org.apache.qpid.server.util.Action; +import org.apache.qpid.server.util.ConnectionScopedRuntimeException; import org.apache.qpid.server.virtualhost.VirtualHost; import java.util.Map; @@ -185,6 +187,10 @@ public class QueueDeclareHandler implements StateAwareMethodListener @@ -103,10 +104,18 @@ public class QueuePurgeHandler implements StateAwareMethodListener @@ -105,7 +106,14 @@ public class QueueUnbindHandler implements StateAwareMethodListener queueArguments = null; @@ -689,22 +691,16 @@ public class MessageStoreTest extends QpidTestCase AMQQueue queue = null; //Ideally we would be able to use the QueueDeclareHandler here. - try - { - queue = getVirtualHost().createQueue(UUIDGenerator.generateRandomUUID(), queueName, durable, queueOwner, false, exclusive, - false, queueArguments); + queue = getVirtualHost().createQueue(UUIDGenerator.generateRandomUUID(), queueName, durable, queueOwner, false, exclusive, + false, queueArguments); + + validateQueueProperties(queue, usePriority, durable, exclusive, lastValueQueue); - validateQueueProperties(queue, usePriority, durable, exclusive, lastValueQueue); - } - catch (AMQException e) - { - fail(e.getMessage()); - } } - private Map createExchanges() + private Map createExchanges() throws Exception { Map exchanges = new HashMap(); @@ -718,18 +714,11 @@ public class MessageStoreTest extends QpidTestCase return exchanges; } - private Exchange createExchange(ExchangeType type, String name, boolean durable) + private Exchange createExchange(ExchangeType type, String name, boolean durable) throws Exception { Exchange exchange = null; - try - { - exchange = getVirtualHost().createExchange(null, name, type.getType(), durable, false, null); - } - catch (AMQException e) - { - fail(e.getMessage()); - } + exchange = getVirtualHost().createExchange(null, name, type.getType(), durable, false, null); return exchange; } -- cgit v1.2.1