You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2016/08/05 10:45:13 UTC

svn commit: r1755283 - in /qpid/java/trunk: broker-core/src/main/java/org/apache/qpid/server/model/ broker-core/src/main/java/org/apache/qpid/server/model/port/ broker-core/src/main/java/org/apache/qpid/server/virtualhost/ broker-core/src/test/java/org...

Author: rgodfrey
Date: Fri Aug  5 10:45:12 2016
New Revision: 1755283

URL: http://svn.apache.org/viewvc?rev=1755283&view=rev
Log:
QPID-7380 : Managed Operations returning potentially confidential information should not be permitted by default on insecure connections

Modified:
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerAttributeInjector.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectInjectedOperation.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodOperation.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectOperation.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedOperation.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPort.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPortImpl.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
    qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/InjectedAttributeTest.java
    qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerAttributeInjector.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerAttributeInjector.java?rev=1755283&r1=1755282&r2=1755283&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerAttributeInjector.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerAttributeInjector.java Fri Aug  5 10:45:12 2016
@@ -259,7 +259,7 @@ public class BrokerAttributeInjector imp
                     "dumpHeap",
                     "Dumps the heap to the outputFile file in the same format as the hprof heap dump.",
                     true,
-                    params,
+                    false, params,
                     method,
                     new Object[]{_hotSpotDiagnosticMXBean, heapDumpMethod},
                     _typeValidator);
@@ -289,7 +289,7 @@ public class BrokerAttributeInjector imp
                     "setJVMOptions",
                     "Sets given JVM options",
                     true,
-                    params,
+                    false, params,
                     method,
                     new Object[]{_hotSpotDiagnosticMXBean, setVMOptionMethod},
                     _typeValidator);

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectInjectedOperation.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectInjectedOperation.java?rev=1755283&r1=1755282&r2=1755283&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectInjectedOperation.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectInjectedOperation.java Fri Aug  5 10:45:12 2016
@@ -43,11 +43,13 @@ public class ConfiguredObjectInjectedOpe
     private final String _name;
     private final String _description;
     private final boolean _nonModifying;
+    private final boolean _secure;
     private final Object[] _staticParams;
 
     public ConfiguredObjectInjectedOperation(final String name,
                                              final String description,
                                              final boolean nonModifying,
+                                             final boolean secure,
                                              final OperationParameter[] parameters,
                                              final Method operation,
                                              final Object[] staticParams,
@@ -57,6 +59,7 @@ public class ConfiguredObjectInjectedOpe
         _name = name;
         _description = description;
         _nonModifying = nonModifying;
+        _secure = secure;
         _validator = validator;
         _staticParams = staticParams == null ? new Object[0] : staticParams;
 
@@ -246,6 +249,13 @@ public class ConfiguredObjectInjectedOpe
     }
 
     @Override
+    public boolean isSecure()
+    {
+        return _secure;
+    }
+
+
+    @Override
     public Type getGenericReturnType()
     {
         return _operation.getGenericReturnType();

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodOperation.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodOperation.java?rev=1755283&r1=1755282&r2=1755283&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodOperation.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodOperation.java Fri Aug  5 10:45:12 2016
@@ -221,6 +221,13 @@ public class ConfiguredObjectMethodOpera
     }
 
     @Override
+    public boolean isSecure()
+    {
+        return _operation.getAnnotation(ManagedOperation.class).secure();
+    }
+
+
+    @Override
     public Type getGenericReturnType()
     {
         return _operation.getGenericReturnType();

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectOperation.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectOperation.java?rev=1755283&r1=1755282&r2=1755283&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectOperation.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectOperation.java Fri Aug  5 10:45:12 2016
@@ -41,4 +41,6 @@ public interface ConfiguredObjectOperati
     boolean isNonModifying();
 
     Type getGenericReturnType();
+
+    boolean isSecure();
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedOperation.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedOperation.java?rev=1755283&r1=1755282&r2=1755283&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedOperation.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedOperation.java Fri Aug  5 10:45:12 2016
@@ -31,4 +31,6 @@ public @interface ManagedOperation
 {
     String description() default "";
     boolean nonModifying() default false;
+    boolean secure() default false;
+
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java?rev=1755283&r1=1755282&r2=1755283&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java Fri Aug  5 10:45:12 2016
@@ -294,13 +294,13 @@ public interface Queue<X extends Queue<X
     @ManagedOperation
     long clearQueue();
 
-    @ManagedOperation(nonModifying = true)
+    @ManagedOperation(nonModifying = true, secure = true)
     Content getMessageContent(@Param(name = "messageId") long messageId);
 
-    @ManagedOperation(nonModifying = true)
+    @ManagedOperation(nonModifying = true, secure = true)
     List<MessageInfo> getMessageInfo(@Param(name = "first", defaultValue = "-1") int first, @Param(name = "last", defaultValue = "-1") int last);
 
-    @ManagedOperation(nonModifying = true)
+    @ManagedOperation(nonModifying = true, secure = true)
     MessageInfo getMessageInfoById(@Param(name = "messageId") long messageId);
 
     boolean isExclusive();

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java?rev=1755283&r1=1755282&r2=1755283&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java Fri Aug  5 10:45:12 2016
@@ -195,18 +195,18 @@ public interface VirtualHost<X extends V
     @ManagedOperation(nonModifying = true)
     Connection<?> getConnection(@Param(name="name") String name);
 
-    @ManagedOperation
+    @ManagedOperation(secure = true)
     int publishMessage(@Param(name = "message")ManageableMessage message);
 
-    @ManagedOperation(nonModifying = true, description = "Extract configuration")
+    @ManagedOperation(nonModifying = true, description = "Extract configuration", secure = true)
     Map<String,Object> extractConfig(@Param(name="includeSecureAttributes",
                                             description = "include attributes that may contain passwords or other "
                                                           + "confidential information",
                                             defaultValue = "false") boolean includeSecureAttributes);
-    @ManagedOperation(nonModifying = true, description = "Extract message store content")
+    @ManagedOperation(nonModifying = true, description = "Extract message store content", secure = true)
     Content extractMessageStore();
 
-    @ManagedOperation(description = "Import message store content")
+    @ManagedOperation(description = "Import message store content", secure = true)
     void importMessageStore(@Param(name="source", description = "Extract file")String source);
 
 

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPort.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPort.java?rev=1755283&r1=1755282&r2=1755283&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPort.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPort.java Fri Aug  5 10:45:12 2016
@@ -89,4 +89,7 @@ public interface HttpPort<X extends Http
     @ManagedContextDefault( name = PORT_HTTP_MAXIMUM_QUEUED_REQUESTS )
     long DEFAULT_PORT_HTTP_MAXIMUM_QUEUED_REQUESTS = 1000;
 
+    @ManagedAttribute( defaultValue = "false", description = "If true allow operations which may return confidential "
+                                                             + "information to be executed on insecure connections")
+    boolean isAllowConfidentialOperationsOnInsecureChannels();
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPortImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPortImpl.java?rev=1755283&r1=1755282&r2=1755283&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPortImpl.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPortImpl.java Fri Aug  5 10:45:12 2016
@@ -47,6 +47,9 @@ public class HttpPortImpl extends Abstra
     @ManagedAttributeField
     private int _threadPoolMinimum;
 
+    @ManagedAttributeField
+    private boolean _allowConfidentialOperationsOnInsecureChannels;
+
     @ManagedObjectFactoryConstructor
     public HttpPortImpl(final Map<String, Object> attributes,
                         final Container<?> container)
@@ -79,6 +82,12 @@ public class HttpPortImpl extends Abstra
     }
 
     @Override
+    public boolean isAllowConfidentialOperationsOnInsecureChannels()
+    {
+        return _allowConfidentialOperationsOnInsecureChannels;
+    }
+
+    @Override
     protected State onActivate()
     {
         if(_portManager != null && _portManager.isActivationAllowed(this))

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java?rev=1755283&r1=1755282&r2=1755283&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java Fri Aug  5 10:45:12 2016
@@ -844,7 +844,7 @@ public abstract class AbstractVirtualHos
         }
         else
         {
-            throw new IllegalStateException("The extractMessageStore operation can only be called when the virtual host is stopped");
+            throw new IllegalArgumentException("The extractMessageStore operation can only be called when the virtual host is stopped");
         }
 
     }

Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/InjectedAttributeTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/InjectedAttributeTest.java?rev=1755283&r1=1755282&r2=1755283&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/InjectedAttributeTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/InjectedAttributeTest.java Fri Aug  5 10:45:12 2016
@@ -370,7 +370,9 @@ public class InjectedAttributeTest exten
         final OperationParameter[] params = new OperationParameter[1];
         params[0] = new OperationParameterFromInjection("height", Integer.TYPE, Integer.TYPE, "", "", new String[0]);
         final ConfiguredObjectInjectedOperation<?> operationInjector =
-                new ConfiguredObjectInjectedOperation<TestCar<?>>("fly", "", true, params, method, null, validator);
+                new ConfiguredObjectInjectedOperation<TestCar<?>>("fly", "", true,
+                                                                  false,
+                                                                  params, method, null, validator);
 
         TestModel model = new TestModel(null, new TestInjector(operationInjector));
 
@@ -410,9 +412,13 @@ public class InjectedAttributeTest exten
         params[0] = new OperationParameterFromInjection("count", Integer.TYPE, Integer.TYPE, "", "", new String[0]);
 
         final ConfiguredObjectInjectedOperation<?> hello =
-                new ConfiguredObjectInjectedOperation<TestCar<?>>("sayHello", "", true, params, method, new String[] { "Hello"}, validator);
+                new ConfiguredObjectInjectedOperation<TestCar<?>>("sayHello", "", true,
+                                                                  false,
+                                                                  params, method, new String[] { "Hello"}, validator);
         final ConfiguredObjectInjectedOperation<?> goodbye =
-                new ConfiguredObjectInjectedOperation<TestCar<?>>("sayGoodbye", "", true, params, method, new String[] { "Goodbye"}, validator);
+                new ConfiguredObjectInjectedOperation<TestCar<?>>("sayGoodbye", "", true,
+                                                                  false,
+                                                                  params, method, new String[] { "Goodbye"}, validator);
 
         TestModel model = new TestModel(null, new TestInjector(hello, goodbye));
 

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java?rev=1755283&r1=1755282&r2=1755283&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java Fri Aug  5 10:45:12 2016
@@ -51,6 +51,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.qpid.server.configuration.IllegalConfigurationException;
+import org.apache.qpid.server.management.plugin.HttpManagement;
 import org.apache.qpid.server.model.AbstractConfiguredObject;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.ConfiguredObject;
@@ -732,6 +733,14 @@ public class RestServlet extends Abstrac
                                   "No such operation: " + operationName);
             return;
         }
+        else if(operation.isSecure() && !(request.isSecure() || HttpManagement.getPort(request).isAllowConfidentialOperationsOnInsecureChannels()))
+        {
+            sendJsonErrorResponse(request,
+                                  response,
+                                  HttpServletResponse.SC_FORBIDDEN,
+                                  "Operation '" + operationName + "' can only be performed over a secure (HTTPS) connection");
+            return;
+        }
         else
         {
             switch (requestMethod)



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org