Author: rgodfrey
Date: Sat Mar  8 10:28:33 2014
New Revision: 1575506

URL: http://svn.apache.org/r1575506
Log:
QPID-5611 : Ensure the appropriate principals are available at the time of all 
event logging

Modified:
    
qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAMessageStore.java
    
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/Broker.java
    
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/messages/VirtualHostMessages.java
    
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/messages/VirtualHost_logmessages.properties
    
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
    
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
    
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java
    
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueRunner.java
    
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SubFlushRunner.java
    
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java
    
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java
    
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
    
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/HouseKeepingTask.java
    
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/KeyStoreRecovererTest.java
    
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/TrustStoreRecovererTest.java
    
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/messages/VirtualHostMessagesTest.java
    
qpid/trunk/qpid/java/broker-core/src/velocity/templates/org/apache/qpid/server/logging/messages/LogMessages.vm
    
qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java
    
qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/ManagementLogonLogoffReporter.java
    
qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/UsernameAccessor.java
    
qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/UsernameCachingRMIJRMPServer.java
    
qpid/trunk/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/ManagementLogonLogoffReporterTest.java
    
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/InternalBrokerHolder.java

Modified: 
qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAMessageStore.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAMessageStore.java?rev=1575506&r1=1575505&r2=1575506&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAMessageStore.java
 (original)
+++ 
qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBHAMessageStore.java
 Sat Mar  8 10:28:33 2014
@@ -619,12 +619,10 @@ public class BDBHAMessageStore extends A
                 {
                     final String originalThreadName = 
Thread.currentThread().getName();
                     Thread.currentThread().setName(threadName);
-                    Subject subject = new Subject(false, 
SecurityManager.SYSTEM.getPrincipals(),
-                                                  Collections.emptySet(), 
Collections.emptySet());
-                    subject.getPrincipals().add(new TaskPrincipal("BDB HA 
State Change"));
+
                     try
                     {
-                        Subject.doAs(subject, new PrivilegedAction<Object>()
+                        Subject.doAs(SecurityManager.getSystemTaskSubject("BDB 
HA State Change"), new PrivilegedAction<Object>()
                         {
                             @Override
                             public Object run()

Modified: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/Broker.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/Broker.java?rev=1575506&r1=1575505&r2=1575506&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/Broker.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/Broker.java
 Sat Mar  8 10:28:33 2014
@@ -86,12 +86,9 @@ public class Broker
 
     public void startup(final BrokerOptions options) throws Exception
     {
-        Subject subject = SecurityManager.SYSTEM;
-        subject = new Subject(false, subject.getPrincipals(), 
subject.getPublicCredentials(), subject.getPrivateCredentials());
-        subject.getPrincipals().add(new TaskPrincipal("Broker"));
         _eventLogger = new EventLogger(new SystemOutMessageLogger());
 
-        Subject.doAs(subject, new PrivilegedExceptionAction<Object>()
+        Subject.doAs(SecurityManager.getSystemTaskSubject("Broker"), new 
PrivilegedExceptionAction<Object>()
         {
             @Override
             public Object run() throws Exception
@@ -282,11 +279,7 @@ public class Broker
     {
         public void run()
         {
-
-            Subject subject = SecurityManager.SYSTEM;
-            subject = new Subject(false, subject.getPrincipals(), 
subject.getPublicCredentials(), subject.getPrivateCredentials());
-            subject.getPrincipals().add(new TaskPrincipal("Shutdown"));
-            Subject.doAs(subject, new PrivilegedAction<Object>()
+            Subject.doAs(SecurityManager.getSystemTaskSubject("Shutdown"), new 
PrivilegedAction<Object>()
             {
                 @Override
                 public Object run()

Modified: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/messages/VirtualHostMessages.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/messages/VirtualHostMessages.java?rev=1575506&r1=1575505&r2=1575506&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/messages/VirtualHostMessages.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/messages/VirtualHostMessages.java
 Sat Mar  8 10:28:33 2014
@@ -64,16 +64,21 @@ public class VirtualHostMessages
 
     /**
      * Log a VirtualHost message of the Format:
-     * <pre>VHT-1002 : Closed</pre>
+     * <pre>VHT-1002 : Closed : {0}</pre>
      * Optional values are contained in [square brackets] and are numbered
      * sequentially in the method call.
      *
      */
-    public static LogMessage CLOSED()
+    public static LogMessage CLOSED(String param1)
     {
         String rawMessage = _messages.getString("CLOSED");
 
-        final String message = rawMessage;
+        final Object[] messageArguments = {param1};
+        // Create a new MessageFormat to ensure thread safety.
+        // Sharing a MessageFormat and using applyPattern is not thread safe
+        MessageFormat formatter = new MessageFormat(rawMessage, 
_currentLocale);
+
+        final String message = formatter.format(messageArguments);
 
         return new LogMessage()
         {
@@ -187,16 +192,21 @@ public class VirtualHostMessages
 
     /**
      * Log a VirtualHost message of the Format:
-     * <pre>VHT-1005 : Unexpected fatal error</pre>
+     * <pre>VHT-1005 : {0} Unexpected fatal error</pre>
      * Optional values are contained in [square brackets] and are numbered
      * sequentially in the method call.
      *
      */
-    public static LogMessage ERRORED()
+    public static LogMessage ERRORED(String param1)
     {
         String rawMessage = _messages.getString("ERRORED");
 
-        final String message = rawMessage;
+        final Object[] messageArguments = {param1};
+        // Create a new MessageFormat to ensure thread safety.
+        // Sharing a MessageFormat and using applyPattern is not thread safe
+        MessageFormat formatter = new MessageFormat(rawMessage, 
_currentLocale);
+
+        final String message = formatter.format(messageArguments);
 
         return new LogMessage()
         {

Modified: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/messages/VirtualHost_logmessages.properties
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/messages/VirtualHost_logmessages.properties?rev=1575506&r1=1575505&r2=1575506&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/messages/VirtualHost_logmessages.properties
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/logging/messages/VirtualHost_logmessages.properties
 Sat Mar  8 10:28:33 2014
@@ -20,9 +20,9 @@
 #
 # 0 - name
 CREATED = VHT-1001 : Created : {0}
-CLOSED = VHT-1002 : Closed
+CLOSED = VHT-1002 : Closed : {0}
 
 STATS_DATA = VHT-1003 : {0} : {1,choice,0#delivered|1#received} : 
{2,number,#.###} kB/s peak : {3,number,#} bytes total
 STATS_MSGS = VHT-1004 : {0} : {1,choice,0#delivered|1#received} : 
{2,number,#.###} msg/s peak : {3,number,#} msgs total
 
-ERRORED = VHT-1005 : Unexpected fatal error
\ No newline at end of file
+ERRORED = VHT-1005 : {0} Unexpected fatal error
\ No newline at end of file

Modified: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java?rev=1575506&r1=1575505&r2=1575506&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
 Sat Mar  8 10:28:33 2014
@@ -41,7 +41,6 @@ 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.logging.MessageLogger;
 import org.apache.qpid.server.logging.messages.BrokerMessages;
 import org.apache.qpid.server.model.*;
 import org.apache.qpid.server.plugin.PreferencesProviderFactory;
@@ -477,7 +476,7 @@ public class BrokerAdapter<X extends Bro
 
         // permission has already been granted to create the virtual host
         // disable further access check on other operations, e.g. create 
exchange
-        Subject.doAs(SecurityManager.SYSTEM, new PrivilegedAction<Object>()
+        Subject.doAs(SecurityManager.getSubjectWithAddedSystemRights(), new 
PrivilegedAction<Object>()
                             {
                                 @Override
                                 public Object run()

Modified: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java?rev=1575506&r1=1575505&r2=1575506&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
 Sat Mar  8 10:28:33 2014
@@ -22,6 +22,7 @@ import java.lang.reflect.Type;
 import java.security.AccessControlException;
 import java.security.AccessController;
 import java.security.Principal;
+import java.security.PrivilegedAction;
 import java.util.*;
 import java.util.concurrent.ConcurrentSkipListSet;
 import java.util.concurrent.CopyOnWriteArrayList;
@@ -55,6 +56,8 @@ import org.apache.qpid.server.message.Se
 import org.apache.qpid.server.protocol.AMQSessionModel;
 import org.apache.qpid.server.consumer.Consumer;
 import org.apache.qpid.server.consumer.ConsumerTarget;
+import org.apache.qpid.server.security.*;
+import org.apache.qpid.server.security.SecurityManager;
 import org.apache.qpid.server.security.auth.AuthenticatedPrincipal;
 import org.apache.qpid.server.store.DurableConfigurationStoreHelper;
 import org.apache.qpid.server.store.StorableMessageMetaData;
@@ -985,60 +988,72 @@ public abstract class AbstractQueue
         _totalMessagesReceived.incrementAndGet();
 
 
-        QueueEntry entry;
+
         final QueueConsumer<?> exclusiveSub = _exclusiveSubscriber;
-        entry = _entries.add(message);
+        final QueueEntry entry = _entries.add(message);
 
         if(action != null || (exclusiveSub == null  && _queueRunner.isIdle()))
         {
             /*
-
-            iterate over consumers and if any is at the end of the queue and 
can deliver this message, then deliver the message
-
+             * iterate over consumers and if any is at the end of the queue 
and can deliver this message,
+             * then deliver the message
              */
-            QueueConsumerList.ConsumerNode node = 
_consumerList.getMarkedNode();
-            QueueConsumerList.ConsumerNode nextNode = node.findNext();
-            if (nextNode == null)
-            {
-                nextNode = _consumerList.getHead().findNext();
-            }
-            while (nextNode != null)
-            {
-                if (_consumerList.updateMarkedNode(node, nextNode))
-                {
-                    break;
-                }
-                else
-                {
-                    node = _consumerList.getMarkedNode();
-                    nextNode = node.findNext();
-                    if (nextNode == null)
-                    {
-                        nextNode = _consumerList.getHead().findNext();
-                    }
-                }
-            }
-
-            // always do one extra loop after we believe we've finished
-            // this catches the case where we *just* miss an update
-            int loops = 2;
-
-            while (entry.isAvailable() && loops != 0)
-            {
-                if (nextNode == null)
-                {
-                    loops--;
-                    nextNode = _consumerList.getHead();
-                }
-                else
-                {
-                    // if consumer at end, and active, offer
-                    QueueConsumer<?> sub = nextNode.getConsumer();
-                    deliverToConsumer(sub, entry);
-                }
-                nextNode = nextNode.findNext();
 
-            }
+            Subject.doAs(SecurityManager.getSystemTaskSubject("Immediate 
Delivery"),
+                         new PrivilegedAction<Object>()
+                         {
+                             @Override
+                             public Object run()
+                             {
+
+                                 QueueConsumerList.ConsumerNode node = 
_consumerList.getMarkedNode();
+                                 QueueConsumerList.ConsumerNode nextNode = 
node.findNext();
+                                 if (nextNode == null)
+                                 {
+                                     nextNode = 
_consumerList.getHead().findNext();
+                                 }
+                                 while (nextNode != null)
+                                 {
+                                     if (_consumerList.updateMarkedNode(node, 
nextNode))
+                                     {
+                                         break;
+                                     }
+                                     else
+                                     {
+                                         node = _consumerList.getMarkedNode();
+                                         nextNode = node.findNext();
+                                         if (nextNode == null)
+                                         {
+                                             nextNode = 
_consumerList.getHead().findNext();
+                                         }
+                                     }
+                                 }
+                                 // always do one extra loop after we believe 
we've finished
+                                 // this catches the case where we *just* miss 
an update
+                                 int loops = 2;
+
+                                 while (entry.isAvailable() && loops != 0)
+                                 {
+                                     if (nextNode == null)
+                                     {
+                                         loops--;
+                                         nextNode = _consumerList.getHead();
+                                     }
+                                     else
+                                     {
+                                         // if consumer at end, and active, 
offer
+                                         final QueueConsumer<?> sub = 
nextNode.getConsumer();
+                                         deliverToConsumer(sub, entry);
+
+
+                                     }
+                                     nextNode = nextNode.findNext();
+
+                                 }
+
+                                 return null;
+                             }
+                         });
         }
 
 

Modified: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java?rev=1575506&r1=1575505&r2=1575506&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerImpl.java
 Sat Mar  8 10:28:33 2014
@@ -92,7 +92,7 @@ class QueueConsumerImpl
     {
         public void stateChanged(QueueConsumerImpl sub, State oldState, State 
newState)
         {
-            
_eventLogger.message(SubscriptionMessages.STATE(newState.toString()));
+            _eventLogger.message(QueueConsumerImpl.this, 
SubscriptionMessages.STATE(newState.toString()));
         }
     };
     @ManagedAttributeField

Modified: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueRunner.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueRunner.java?rev=1575506&r1=1575505&r2=1575506&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueRunner.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueRunner.java
 Sat Mar  8 10:28:33 2014
@@ -28,6 +28,8 @@ import java.util.concurrent.atomic.Atomi
 import java.util.concurrent.atomic.AtomicLong;
 
 import org.apache.log4j.Logger;
+import org.apache.qpid.server.security.*;
+import org.apache.qpid.server.security.SecurityManager;
 import org.apache.qpid.server.security.auth.TaskPrincipal;
 import org.apache.qpid.server.util.ConnectionScopedRuntimeException;
 import org.apache.qpid.transport.TransportException;
@@ -66,10 +68,7 @@ public class QueueRunner implements Runn
     {
         if(_scheduled.compareAndSet(SCHEDULED,RUNNING))
         {
-            Subject subject = new Subject(false, 
org.apache.qpid.server.security.SecurityManager.SYSTEM.getPrincipals(), 
Collections
-                    .emptySet(), Collections.emptySet());
-            subject.getPrincipals().add(new TaskPrincipal("Queue Delivery"));
-            Subject.doAs(subject, new PrivilegedAction<Object>()
+            Subject.doAs(SecurityManager.getSystemTaskSubject("Queue 
Delivery"), new PrivilegedAction<Object>()
             {
                 @Override
                 public Object run()

Modified: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SubFlushRunner.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SubFlushRunner.java?rev=1575506&r1=1575505&r2=1575506&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SubFlushRunner.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SubFlushRunner.java
 Sat Mar  8 10:28:33 2014
@@ -62,9 +62,7 @@ class SubFlushRunner implements Runnable
     {
         if(_scheduled.compareAndSet(SCHEDULED, RUNNING))
         {
-            Subject subject = new Subject(false, 
SecurityManager.SYSTEM.getPrincipals(), Collections.emptySet(), 
Collections.emptySet());
-            subject.getPrincipals().add(new TaskPrincipal("Sub. Delivery"));
-            Subject.doAs(subject, new PrivilegedAction<Object>()
+            Subject.doAs(SecurityManager.getSystemTaskSubject("Sub. 
Delivery"), new PrivilegedAction<Object>()
             {
                 @Override
                 public Object run()

Modified: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java?rev=1575506&r1=1575505&r2=1575506&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java
 Sat Mar  8 10:28:33 2014
@@ -151,10 +151,7 @@ public class ApplicationRegistry impleme
         {
             _reset = reset;
             _logger = logger;
-            _subject = new Subject(false, 
SecurityManager.SYSTEM.getPrincipals(), Collections.emptySet(), 
Collections.emptySet());
-            _subject.getPrincipals().add(new TaskPrincipal("Statistics"));
-            _subject.setReadOnly();
-
+            _subject = SecurityManager.getSystemTaskSubject("Statistics");
         }
 
         public void run()

Modified: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java?rev=1575506&r1=1575505&r2=1575506&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java
 Sat Mar  8 10:28:33 2014
@@ -34,6 +34,7 @@ import org.apache.qpid.server.security.a
 import org.apache.qpid.server.security.access.ObjectType;
 import org.apache.qpid.server.security.access.Operation;
 import org.apache.qpid.server.security.access.OperationLoggingDetails;
+import org.apache.qpid.server.security.auth.TaskPrincipal;
 
 import javax.security.auth.Subject;
 
@@ -69,7 +70,7 @@ public class SecurityManager implements 
 {
     private static final Logger _logger = 
Logger.getLogger(SecurityManager.class);
 
-    public static final Subject SYSTEM = new Subject(true,
+    private static final Subject SYSTEM = new Subject(true,
                                                      Collections.singleton(new 
SystemPrincipal()),
                                                      Collections.emptySet(),
                                                      Collections.emptySet());
@@ -107,6 +108,31 @@ public class SecurityManager implements 
         }
     }
 
+    public static Subject getSubjectWithAddedSystemRights()
+    {
+        Subject subject = Subject.getSubject(AccessController.getContext());
+        if(subject == null)
+        {
+            subject = new Subject();
+        }
+        else
+        {
+            subject = new Subject(false, subject.getPrincipals(), 
subject.getPublicCredentials(), subject.getPrivateCredentials());
+        }
+        subject.getPrincipals().addAll(SYSTEM.getPrincipals());
+        subject.setReadOnly();
+        return subject;
+    }
+
+
+    public static Subject getSystemTaskSubject(String taskName)
+    {
+        Subject subject = new Subject(false, SYSTEM.getPrincipals(), 
SYSTEM.getPublicCredentials(), SYSTEM.getPrivateCredentials());
+        subject.getPrincipals().add(new TaskPrincipal(taskName));
+        subject.setReadOnly();
+        return subject;
+    }
+
     private void configureVirtualHostAclPlugin(String aclFile, String 
vhostName)
     {
         if(aclFile != null)

Modified: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java?rev=1575506&r1=1575505&r2=1575506&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
 Sat Mar  8 10:28:33 2014
@@ -714,7 +714,7 @@ public abstract class AbstractVirtualHos
 
         _state = State.STOPPED;
 
-        _eventLogger.message(VirtualHostMessages.CLOSED());
+        _eventLogger.message(VirtualHostMessages.CLOSED(getName()));
     }
 
     protected void closeStorage()
@@ -921,7 +921,7 @@ public abstract class AbstractVirtualHos
     {
         if (state == State.ERRORED)
         {
-            _eventLogger.message(VirtualHostMessages.ERRORED());
+            _eventLogger.message(VirtualHostMessages.ERRORED(getName()));
         }
     }
 

Modified: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/HouseKeepingTask.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/HouseKeepingTask.java?rev=1575506&r1=1575505&r2=1575506&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/HouseKeepingTask.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/HouseKeepingTask.java
 Sat Mar  8 10:28:33 2014
@@ -22,6 +22,8 @@ package org.apache.qpid.server.virtualho
 
 import org.apache.log4j.Logger;
 
+import org.apache.qpid.server.security.*;
+import org.apache.qpid.server.security.SecurityManager;
 import org.apache.qpid.server.security.auth.TaskPrincipal;
 
 import javax.security.auth.Subject;
@@ -42,11 +44,7 @@ public abstract class HouseKeepingTask i
     {
         _virtualHost = vhost;
         _name = _virtualHost.getName() + ":" + this.getClass().getSimpleName();
-        _subject = new Subject(false, 
org.apache.qpid.server.security.SecurityManager.SYSTEM.getPrincipals(), 
Collections
-                .emptySet(), Collections.emptySet());
-        _subject.getPrincipals().add(new TaskPrincipal(_name));
-        _subject.setReadOnly();
-
+        _subject = SecurityManager.getSystemTaskSubject(_name);
     }
 
     final public void run()

Modified: 
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/KeyStoreRecovererTest.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/KeyStoreRecovererTest.java?rev=1575506&r1=1575505&r2=1575506&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/KeyStoreRecovererTest.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/KeyStoreRecovererTest.java
 Sat Mar  8 10:28:33 2014
@@ -63,7 +63,7 @@ public class KeyStoreRecovererTest exten
         assertEquals(id, keyStore.getId());
 
         //verify we can retrieve the actual password using the method
-        Subject.doAs(SecurityManager.SYSTEM, new PrivilegedAction<Object>()
+        Subject.doAs(SecurityManager.getSubjectWithAddedSystemRights(), new 
PrivilegedAction<Object>()
         {
             @Override
             public Object run()

Modified: 
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/TrustStoreRecovererTest.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/TrustStoreRecovererTest.java?rev=1575506&r1=1575505&r2=1575506&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/TrustStoreRecovererTest.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/TrustStoreRecovererTest.java
 Sat Mar  8 10:28:33 2014
@@ -59,7 +59,7 @@ public class TrustStoreRecovererTest ext
         assertNotNull("Trust store configured object is not created", 
trustStore);
         assertEquals(id, trustStore.getId());
 
-        Subject.doAs(SecurityManager.SYSTEM, new PrivilegedAction<Object>()
+        Subject.doAs(SecurityManager.getSubjectWithAddedSystemRights(), new 
PrivilegedAction<Object>()
         {
             @Override
             public Object run()

Modified: 
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/messages/VirtualHostMessagesTest.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/messages/VirtualHostMessagesTest.java?rev=1575506&r1=1575505&r2=1575506&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/messages/VirtualHostMessagesTest.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/logging/messages/VirtualHostMessagesTest.java
 Sat Mar  8 10:28:33 2014
@@ -40,10 +40,11 @@ public class VirtualHostMessagesTest ext
 
     public void testVirtualhostClosed()
     {
-        _logMessage = VirtualHostMessages.CLOSED();
+        String name = "test";
+        _logMessage = VirtualHostMessages.CLOSED(name);
         List<Object> log = performLog();
 
-        String[] expected = {"Closed"};
+        String[] expected = {"Closed :", name};
 
         validateLogMessage(log, "VHT-1002", expected);
     }

Modified: 
qpid/trunk/qpid/java/broker-core/src/velocity/templates/org/apache/qpid/server/logging/messages/LogMessages.vm
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/velocity/templates/org/apache/qpid/server/logging/messages/LogMessages.vm?rev=1575506&r1=1575505&r2=1575506&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/velocity/templates/org/apache/qpid/server/logging/messages/LogMessages.vm
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/velocity/templates/org/apache/qpid/server/logging/messages/LogMessages.vm
 Sat Mar  8 10:28:33 2014
@@ -20,7 +20,7 @@
  */
 package ${package};
 
-import static 
org.apache.qpid.server.logging.AbstractRootMessageLogger.DEFAULT_LOG_HIERARCHY_PREFIX;
+import static 
org.apache.qpid.server.logging.AbstractMessageLogger.DEFAULT_LOG_HIERARCHY_PREFIX;
 
 import org.apache.log4j.Logger;
 import org.apache.qpid.server.configuration.BrokerProperties;

Modified: 
qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java?rev=1575506&r1=1575505&r2=1575506&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java
 Sat Mar  8 10:28:33 2014
@@ -222,11 +222,7 @@ public class MBeanInvocationHandlerImpl 
         {
             try
             {
-                Subject subject = 
Subject.getSubject(AccessController.getContext());
-                subject = new Subject(false, subject.getPrincipals(), 
subject.getPublicCredentials(), subject.getPrivateCredentials());
-                
subject.getPrincipals().addAll(SecurityManager.SYSTEM.getPrincipals());
-
-                return Subject.doAs(subject, new 
PrivilegedExceptionAction<Object>()
+                return 
Subject.doAs(SecurityManager.getSubjectWithAddedSystemRights(), new 
PrivilegedExceptionAction<Object>()
                 {
                     @Override
                     public Object run() throws IllegalAccessException, 
InvocationTargetException

Modified: 
qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/ManagementLogonLogoffReporter.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/ManagementLogonLogoffReporter.java?rev=1575506&r1=1575505&r2=1575506&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/ManagementLogonLogoffReporter.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/ManagementLogonLogoffReporter.java
 Sat Mar  8 10:28:33 2014
@@ -38,7 +38,6 @@ import org.apache.qpid.server.security.a
 import java.rmi.server.RemoteServer;
 import java.rmi.server.ServerNotActiveException;
 import java.security.PrivilegedAction;
-import java.util.Collections;
 
 public class ManagementLogonLogoffReporter implements  NotificationListener, 
NotificationFilter
 {
@@ -63,31 +62,45 @@ public class ManagementLogonLogoffReport
             LOGGER.debug("Notification connectionId : " + connectionId + " 
type : " + type);
         }
 
-        String user = 
_usernameAccessor.getUsernameForConnectionId(connectionId);
+        Subject subject = 
_usernameAccessor.getSubjectConnectionId(connectionId);
+        if(subject == null)
+        {
+            subject = new Subject();
+        }
+        AuthenticatedPrincipal authenticatedPrincipal =
+                
AuthenticatedPrincipal.getOptionalAuthenticatedPrincipalFromSubject(subject);
 
-        // If user is still null, fallback to an unordered list of Principals 
from the connection id.
-        if (user == null)
+        String user;
+
+        if(authenticatedPrincipal != null)
         {
+            user = authenticatedPrincipal.getName();
+        }
+        else
+        {
+            // If user is still null, fallback to an unordered list of 
Principals from the connection id.
             final String[] splitConnectionId = connectionId.split(" ");
             user = splitConnectionId[1];
         }
-        Subject originalSubject = new Subject(false, Collections.singleton(new 
AuthenticatedPrincipal(user)), Collections.emptySet(), Collections.emptySet());
-        Subject subject;
 
-        try
-        {
-            String clientHost = RemoteServer.getClientHost();
-            subject = new Subject(false,
-                                  originalSubject.getPrincipals(),
-                                  originalSubject.getPublicCredentials(),
-                                  originalSubject.getPrivateCredentials());
-            subject.getPrincipals().add(new 
JMXConnectionPrincipal(clientHost));
-            subject.setReadOnly();
-        }
-        catch(ServerNotActiveException e)
+
+        if(subject.getPrincipals(JMXConnectionPrincipal.class).isEmpty())
         {
-            subject = originalSubject;
+            try
+            {
+                String clientHost = RemoteServer.getClientHost();
+                subject = new Subject(false,
+                                      subject.getPrincipals(),
+                                      subject.getPublicCredentials(),
+                                      subject.getPrivateCredentials());
+                subject.getPrincipals().add(new 
JMXConnectionPrincipal(clientHost));
+                subject.setReadOnly();
+            }
+            catch(ServerNotActiveException e)
+            {
+            }
         }
+
         final String username = user;
         Subject.doAs(subject, new PrivilegedAction<Object>()
         {

Modified: 
qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/UsernameAccessor.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/UsernameAccessor.java?rev=1575506&r1=1575505&r2=1575506&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/UsernameAccessor.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/UsernameAccessor.java
 Sat Mar  8 10:28:33 2014
@@ -19,8 +19,10 @@
  */
 package org.apache.qpid.server.jmx;
 
+import javax.security.auth.Subject;
+
 public interface UsernameAccessor
 {
-    public String getUsernameForConnectionId(String connectionId);
+    public Subject getSubjectConnectionId(String connectionId);
 
 }

Modified: 
qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/UsernameCachingRMIJRMPServer.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/UsernameCachingRMIJRMPServer.java?rev=1575506&r1=1575505&r2=1575506&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/UsernameCachingRMIJRMPServer.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/UsernameCachingRMIJRMPServer.java
 Sat Mar  8 10:28:33 2014
@@ -37,11 +37,9 @@ import javax.management.remote.rmi.RMICo
 import javax.management.remote.rmi.RMIJRMPServerImpl;
 import javax.security.auth.Subject;
 
-import org.apache.qpid.server.security.auth.AuthenticatedPrincipal;
-
 /**
  * An implementation of RMIJRMPServerImpl that caches the usernames of users 
as they log-on
- * and makes the same available via {@link 
UsernameAccessor#getUsernameForConnectionId(String)}.
+ * and makes the same available via {@link 
UsernameAccessor#getSubjectConnectionId(String)}.
  *
  * Caller is responsible for installing this object as a {@link 
NotificationListener} of the
  * {@link JMXConnectorServer} so the cache entries are removed as the clients 
disconnect.
@@ -50,7 +48,7 @@ import org.apache.qpid.server.security.a
 public class UsernameCachingRMIJRMPServer extends RMIJRMPServerImpl implements 
NotificationListener, NotificationFilter, UsernameAccessor
 {
     // ConnectionId is guaranteed to be unique per client connection, 
according to the JMX spec.
-    private final Map<String, String> _connectionIdUsernameMap = new 
ConcurrentHashMap<String, String>();
+    private final Map<String, Subject> _connectionIdUsernameMap = new 
ConcurrentHashMap<String, Subject>();
 
     UsernameCachingRMIJRMPServer(int port, RMIClientSocketFactory csf, 
RMIServerSocketFactory ssf,
             Map<String, ?> env) throws IOException
@@ -62,13 +60,12 @@ public class UsernameCachingRMIJRMPServe
     protected RMIConnection makeClient(String connectionId, Subject subject) 
throws IOException
     {
         final RMIConnection makeClient = super.makeClient(connectionId, 
subject);
-        final AuthenticatedPrincipal authenticatedPrincipalFromSubject = 
AuthenticatedPrincipal.getAuthenticatedPrincipalFromSubject(subject);
-        _connectionIdUsernameMap.put(connectionId, 
authenticatedPrincipalFromSubject.getName());
+        _connectionIdUsernameMap.put(connectionId, subject);
         return makeClient;
     }
 
     @Override
-    public String getUsernameForConnectionId(String connectionId)
+    public Subject getSubjectConnectionId(String connectionId)
     {
         return _connectionIdUsernameMap.get(connectionId);
     }

Modified: 
qpid/trunk/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/ManagementLogonLogoffReporterTest.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/ManagementLogonLogoffReporterTest.java?rev=1575506&r1=1575505&r2=1575506&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/ManagementLogonLogoffReporterTest.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/ManagementLogonLogoffReporterTest.java
 Sat Mar  8 10:28:33 2014
@@ -31,18 +31,22 @@ import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyString;
 
 import javax.management.remote.JMXConnectionNotification;
+import javax.security.auth.Subject;
 
 import org.apache.qpid.server.logging.EventLogger;
 import org.apache.qpid.server.logging.LogMessage;
 import org.apache.qpid.server.logging.MessageLogger;
 
 import junit.framework.TestCase;
+import org.apache.qpid.server.security.auth.AuthenticatedPrincipal;
 import org.mockito.ArgumentMatcher;
 
+import java.util.Collections;
+
 public class ManagementLogonLogoffReporterTest extends TestCase
 {
     private static final String TEST_JMX_UNIQUE_CONNECTION_ID = 
"jmxconnectionid1 jmxuser,group";
-    private static final String TEST_USER = "jmxuser";
+    private static final Subject TEST_USER = new Subject(false, 
Collections.singleton(new AuthenticatedPrincipal("jmxuser")), 
Collections.emptySet(), Collections.emptySet());
 
     private ManagementLogonLogoffReporter _reporter;
     private UsernameAccessor _usernameAccessor;
@@ -62,7 +66,7 @@ public class ManagementLogonLogoffReport
 
     public void testOpenedNotification()
     {
-        
when(_usernameAccessor.getUsernameForConnectionId(TEST_JMX_UNIQUE_CONNECTION_ID)).thenReturn(TEST_USER);
+        
when(_usernameAccessor.getSubjectConnectionId(TEST_JMX_UNIQUE_CONNECTION_ID)).thenReturn(TEST_USER);
         JMXConnectionNotification openNotification = 
createMockNotification(TEST_JMX_UNIQUE_CONNECTION_ID, OPENED);
 
         _reporter.handleNotification(openNotification, null);
@@ -86,7 +90,7 @@ public class ManagementLogonLogoffReport
 
     public void testClosedNotification()
     {
-        
when(_usernameAccessor.getUsernameForConnectionId(TEST_JMX_UNIQUE_CONNECTION_ID)).thenReturn(TEST_USER);
+        
when(_usernameAccessor.getSubjectConnectionId(TEST_JMX_UNIQUE_CONNECTION_ID)).thenReturn(TEST_USER);
         JMXConnectionNotification closeNotification = 
createMockNotification(TEST_JMX_UNIQUE_CONNECTION_ID, CLOSED);
 
         _reporter.handleNotification(closeNotification, null);

Modified: 
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/InternalBrokerHolder.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/InternalBrokerHolder.java?rev=1575506&r1=1575505&r2=1575506&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/InternalBrokerHolder.java
 (original)
+++ 
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/InternalBrokerHolder.java
 Sat Mar  8 10:28:33 2014
@@ -27,6 +27,7 @@ import org.apache.log4j.Logger;
 
 import org.apache.qpid.server.Broker;
 import org.apache.qpid.server.security.auth.TaskPrincipal;
+import org.apache.qpid.server.security.SecurityManager;
 
 import javax.security.auth.Subject;
 
@@ -61,11 +62,7 @@ public class InternalBrokerHolder implem
     {
         LOGGER.info("Shutting down Broker instance");
 
-        Subject subject = 
org.apache.qpid.server.security.SecurityManager.SYSTEM;
-        subject = new Subject(false, subject.getPrincipals(), 
subject.getPublicCredentials(), subject.getPrivateCredentials());
-        subject.getPrincipals().add(new TaskPrincipal("Shutdown"));
-
-        Subject.doAs(subject, new PrivilegedAction<Object>()
+        Subject.doAs(SecurityManager.getSystemTaskSubject("Shutdown"), new 
PrivilegedAction<Object>()
         {
             @Override
             public Object run()



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

Reply via email to