You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2015/06/17 18:41:58 UTC
svn commit: r1686072 - in /qpid/java/trunk:
broker-core/src/main/java/org/apache/qpid/server/configuration/updater/
broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/
broker-core/src/test/java/org/apache/qpid/server/configuration/updater...
Author: orudyy
Date: Wed Jun 17 16:41:58 2015
New Revision: 1686072
URL: http://svn.apache.org/r1686072
Log:
QPID-6591: Add virtual host principal to the subject in management operations for the virtualhost and its children
Modified:
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/updater/TaskExecutor.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/updater/TaskExecutorImpl.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/configuration/updater/CurrentThreadTaskExecutor.java
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostLoggerRestTest.java
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/updater/TaskExecutor.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/updater/TaskExecutor.java?rev=1686072&r1=1686071&r2=1686072&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/updater/TaskExecutor.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/updater/TaskExecutor.java Wed Jun 17 16:41:58 2015
@@ -20,6 +20,7 @@
*/
package org.apache.qpid.server.configuration.updater;
+import java.security.Principal;
import java.util.concurrent.CancellationException;
import java.util.concurrent.Executor;
import java.util.concurrent.Future;
@@ -29,7 +30,12 @@ public interface TaskExecutor
interface Factory
{
TaskExecutor newInstance();
- TaskExecutor newInstance(String name);
+ TaskExecutor newInstance(String name, PrincipalAccessor principalAccessor);
+ }
+
+ interface PrincipalAccessor
+ {
+ Principal getPrincipal();
}
boolean isRunning();
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/updater/TaskExecutorImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/updater/TaskExecutorImpl.java?rev=1686072&r1=1686071&r2=1686072&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/updater/TaskExecutorImpl.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/updater/TaskExecutorImpl.java Wed Jun 17 16:41:58 2015
@@ -21,8 +21,11 @@
package org.apache.qpid.server.configuration.updater;
import java.security.AccessController;
+import java.security.Principal;
import java.security.PrivilegedAction;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.CancellationException;
import java.util.concurrent.ExecutionException;
@@ -46,6 +49,7 @@ public class TaskExecutorImpl implements
{
private static final String TASK_EXECUTION_THREAD_NAME = "Broker-Configuration-Thread";
private static final Logger LOGGER = LoggerFactory.getLogger(TaskExecutorImpl.class);
+ private final PrincipalAccessor _principalAccessor;
private volatile Thread _taskThread;
private final AtomicBoolean _running = new AtomicBoolean();
@@ -55,12 +59,13 @@ public class TaskExecutorImpl implements
public TaskExecutorImpl()
{
- this(TASK_EXECUTION_THREAD_NAME);
+ this(TASK_EXECUTION_THREAD_NAME, null);
}
- public TaskExecutorImpl(final String name)
+ public TaskExecutorImpl(final String name, PrincipalAccessor principalAccessor)
{
_name = name;
+ _principalAccessor = principalAccessor;
}
@Override
@@ -323,22 +328,41 @@ public class TaskExecutorImpl implements
return result;
}
+ private Subject getContextSubject()
+ {
+ Subject contextSubject = Subject.getSubject(AccessController.getContext());
+ if (contextSubject != null && _principalAccessor != null)
+ {
+ Principal additionalPrincipal = _principalAccessor.getPrincipal();
+ Set<Principal> principals = contextSubject.getPrincipals();
+ if (additionalPrincipal != null && !principals.contains(additionalPrincipal))
+ {
+ Set<Principal> extendedPrincipals = new HashSet<>(principals);
+ extendedPrincipals.add(_principalAccessor.getPrincipal());
+ contextSubject = new Subject(contextSubject.isReadOnly(),
+ extendedPrincipals,
+ contextSubject.getPublicCredentials(),
+ contextSubject.getPrivateCredentials());
+ }
+ }
+ return contextSubject;
+ }
+
private class CallableWrapper<T> implements Callable<T>
{
- private Task<T> _userTask;
- private Subject _contextSubject;
+ private final Task<T> _userTask;
+ private final Subject _contextSubject;
public CallableWrapper(Task<T> userWork)
{
_userTask = userWork;
- _contextSubject = Subject.getSubject(AccessController.getContext());
+ _contextSubject = getContextSubject();
}
@Override
public T call()
{
- T result = null;
- result = Subject.doAs(_contextSubject, new PrivilegedAction<T>()
+ T result = Subject.doAs(_contextSubject, new PrivilegedAction<T>()
{
@Override
public T run()
@@ -347,7 +371,6 @@ public class TaskExecutorImpl implements
}
});
-
return result;
}
}
@@ -407,7 +430,23 @@ public class TaskExecutorImpl implements
}
else
{
- _executor.execute(command);
+ final Subject subject = getContextSubject();
+ _executor.execute(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ Subject.doAs(subject, new PrivilegedAction<Void>()
+ {
+ @Override
+ public Void run()
+ {
+ command.run();
+ return null;
+ }
+ });
+ }
+ });
}
}
@@ -442,9 +481,9 @@ public class TaskExecutorImpl implements
}
@Override
- public TaskExecutor newInstance(final String name)
+ public TaskExecutor newInstance(final String name, PrincipalAccessor principalAccessor)
{
- return new TaskExecutorImpl(name);
+ return new TaskExecutorImpl(name, principalAccessor);
}
};
}
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java?rev=1686072&r1=1686071&r2=1686072&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/AbstractVirtualHostNode.java Wed Jun 17 16:41:58 2015
@@ -26,6 +26,7 @@ import java.io.Reader;
import java.io.StringReader;
import java.net.MalformedURLException;
import java.net.URL;
+import java.security.Principal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -105,7 +106,19 @@ public abstract class AbstractVirtualHos
{
super(Collections.<Class<? extends ConfiguredObject>,ConfiguredObject<?>>singletonMap(Broker.class, parent),
attributes);
- _virtualHostExecutor = getTaskExecutor().getFactory().newInstance("VirtualHostNode-"+getName()+"-Configuration-Thread");
+ _virtualHostExecutor = getTaskExecutor().getFactory().newInstance("VirtualHostNode-" + getName() + "-Configuration-Thread", new TaskExecutor.PrincipalAccessor()
+ {
+ @Override
+ public Principal getPrincipal()
+ {
+ VirtualHost<?,?,?> virtualHost = getVirtualHost();
+ if (virtualHost != null)
+ {
+ return virtualHost.getPrincipal();
+ }
+ return null;
+ }
+ });
_virtualHostExecutor.start();
_broker = parent;
SystemConfig<?> systemConfig = _broker.getParent(SystemConfig.class);
Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/configuration/updater/CurrentThreadTaskExecutor.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/configuration/updater/CurrentThreadTaskExecutor.java?rev=1686072&r1=1686071&r2=1686072&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/configuration/updater/CurrentThreadTaskExecutor.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/configuration/updater/CurrentThreadTaskExecutor.java Wed Jun 17 16:41:58 2015
@@ -171,7 +171,7 @@ public class CurrentThreadTaskExecutor i
}
@Override
- public TaskExecutor newInstance(final String name)
+ public TaskExecutor newInstance(final String name, PrincipalAccessor principalAccessor)
{
return CurrentThreadTaskExecutor.this;
}
Modified: qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostLoggerRestTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostLoggerRestTest.java?rev=1686072&r1=1686071&r2=1686072&view=diff
==============================================================================
--- qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostLoggerRestTest.java (original)
+++ qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostLoggerRestTest.java Wed Jun 17 16:41:58 2015
@@ -21,14 +21,19 @@
package org.apache.qpid.systest.rest;
import java.io.File;
+import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.apache.qpid.server.logging.VirtualHostFileLogger;
+import org.apache.qpid.server.logging.messages.QueueMessages;
import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.Queue;
import org.apache.qpid.server.model.VirtualHostLogger;
+import org.apache.qpid.util.LogMonitor;
public class VirtualHostLoggerRestTest extends QpidRestTestCase
{
@@ -39,7 +44,6 @@ public class VirtualHostLoggerRestTest e
String loggerRestUrlBase = "virtualhostlogger/" + TEST1_VIRTUALHOST + "/" + TEST1_VIRTUALHOST;
String loggerRestUrl = loggerRestUrlBase + "/" + loggerName;
-
Map<String, Object> virtualHostLoggerAttributes = new HashMap<>();
virtualHostLoggerAttributes.put(VirtualHostLogger.NAME, loggerName);
virtualHostLoggerAttributes.put(ConfiguredObject.TYPE, VirtualHostFileLogger.TYPE);
@@ -61,6 +65,22 @@ public class VirtualHostLoggerRestTest e
String logFileLocation = String.valueOf(loggerData.get(VirtualHostFileLogger.FILE_NAME));
assertNotNull("Log file attribute is not set ", logFileLocation);
assertTrue(String.format("Log file '%s' does not exists", logFileLocation), new File(logFileLocation).exists());
+
+
+ LogMonitor logMonitor = new LogMonitor(new File(logFileLocation));
+ try
+ {
+ List<String> logs = logMonitor.findMatches("QUE-1001");
+ assertEquals("Unexpected number of Queue creation operational logs before Queue creation", 0, logs.size());
+ Map<String, Object> queueAttributes = Collections.<String, Object>singletonMap(Queue.NAME, getTestQueueName());
+ getRestTestHelper().submitRequest("queue/" + TEST1_VIRTUALHOST + "/" + TEST1_VIRTUALHOST, "PUT", queueAttributes, HttpServletResponse.SC_CREATED);
+ logs = logMonitor.waitAndFindMatches("QUE-1001", 1000);
+ assertEquals("Unexpected number of Queue creation operational logs after Queue creation", 1, logs.size());
+ }
+ finally
+ {
+ logMonitor.close();
+ }
}
public void testDeleteVirtualHostLoggerAndFilter() throws Exception
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org