Author: kwall
Date: Fri Apr 25 17:00:53 2014
New Revision: 1590082

URL: http://svn.apache.org/r1590082
Log:
QPID-5715: [Java Broker] Defect fix - when stop the VHN before deleting it

Modified:
    
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java

Modified: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java?rev=1590082&r1=1590081&r2=1590082&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractStandardVirtualHostNode.java
 Fri Apr 25 17:00:53 2014
@@ -21,11 +21,13 @@
 package org.apache.qpid.server.virtualhostnode;
 
 import java.io.File;
+import java.security.AccessControlException;
 import java.security.PrivilegedAction;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.atomic.AtomicReference;
 
 import javax.security.auth.Subject;
@@ -47,6 +49,7 @@ import org.apache.qpid.server.model.Virt
 import org.apache.qpid.server.model.VirtualHostNode;
 import org.apache.qpid.server.plugin.DurableConfigurationStoreFactory;
 import org.apache.qpid.server.security.SecurityManager;
+import org.apache.qpid.server.security.access.Operation;
 import org.apache.qpid.server.store.DurableConfigurationStore;
 import org.apache.qpid.server.store.MessageStore;
 import org.apache.qpid.server.store.VirtualHostStoreUpgraderAndRecoverer;
@@ -152,7 +155,12 @@ public abstract class AbstractStandardVi
         State state = _state.get();
         if (desiredState == State.DELETED)
         {
-            if (state == State.INITIALISING || state == State.ACTIVE || state 
== State.STOPPED || state == State.ERRORED)
+            if (state == State.ACTIVE || state == State.INITIALISING)
+            {
+                state = setDesiredState(currentState, State.STOPPED);
+            }
+
+            if (state == State.STOPPED || state == State.ERRORED)
             {
                 if( _state.compareAndSet(state, State.DELETED))
                 {
@@ -350,5 +358,25 @@ public abstract class AbstractStandardVi
         _eventLogger.message(_configurationStoreLogSubject, 
ConfigStoreMessages.CLOSE());
     }
 
+    @Override
+    protected void authoriseSetDesiredState(State currentState, State 
desiredState) throws AccessControlException
+    {
+        if(desiredState == State.DELETED)
+        {
+            if 
(!_broker.getSecurityManager().authoriseConfiguringBroker(getName(), 
VirtualHostNode.class, Operation.DELETE))
+            {
+                throw new AccessControlException("Deletion of virtual host 
node is denied");
+            }
+        }
+    }
+
+    @Override
+    protected void authoriseSetAttributes(ConfiguredObject<?> modified, 
Set<String> attributes) throws AccessControlException
+    {
+        if 
(!_broker.getSecurityManager().authoriseConfiguringBroker(getName(), 
VirtualHostNode.class, Operation.UPDATE))
+        {
+            throw new AccessControlException("Setting of virtual host node 
attributes is denied");
+        }
+    }
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to