summaryrefslogtreecommitdiff
path: root/qpid/java/broker-core/src
diff options
context:
space:
mode:
authorRobert Godfrey <rgodfrey@apache.org>2014-07-21 10:49:50 +0000
committerRobert Godfrey <rgodfrey@apache.org>2014-07-21 10:49:50 +0000
commit49d25b3a93209cd6a2cf9e4d2b5a32d994419a2e (patch)
treedaa7aca51ca070c03808e87d80dc99b4fff22c28 /qpid/java/broker-core/src
parentf02d9fa05619959e3d92686f7daf3a5eb997862f (diff)
downloadqpid-python-49d25b3a93209cd6a2cf9e4d2b5a32d994419a2e.tar.gz
QPID-4520 : The deletion of autodelete queue due to autodeletion should not require ACL rights for deleting the queue
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1612237 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/broker-core/src')
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java22
1 files changed, 20 insertions, 2 deletions
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
index cb3b5effd0..f2ac1a7cdc 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
@@ -430,7 +430,16 @@ public abstract class AbstractQueue<X extends AbstractQueue<X>>
@Override
public void performAction(final Deletable object)
{
- getVirtualHost().removeQueue(AbstractQueue.this);
+ Subject.doAs(SecurityManager.getSubjectWithAddedSystemRights(),
+ new PrivilegedAction<Void>()
+ {
+ @Override
+ public Void run()
+ {
+ getVirtualHost().removeQueue(AbstractQueue.this);
+ return null;
+ }
+ });
}
};
@@ -742,7 +751,16 @@ public abstract class AbstractQueue<X extends AbstractQueue<X>>
_logger.info("Auto-deleting queue:" + this);
}
- getVirtualHost().removeQueue(this);
+ Subject.doAs(SecurityManager.getSubjectWithAddedSystemRights(), new PrivilegedAction<Object>()
+ {
+ @Override
+ public Object run()
+ {
+ getVirtualHost().removeQueue(AbstractQueue.this);
+ return null;
+ }
+ });
+
// 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