summaryrefslogtreecommitdiff
path: root/qpid/java/management
diff options
context:
space:
mode:
authorRobert Gemmell <robbie@apache.org>2010-08-27 20:25:11 +0000
committerRobert Gemmell <robbie@apache.org>2010-08-27 20:25:11 +0000
commit48173e146aff0437d6b818ef6fd7da6e9f1e2503 (patch)
treec64473a45011b0d708d301fcc9c5763c1d8bf819 /qpid/java/management
parent0164c68decc5e81d9784b9eea096b83e9a610545 (diff)
downloadqpid-python-48173e146aff0437d6b818ef6fd7da6e9f1e2503.tar.gz
QPID-2615: Remove use of the Java6 ObjectName '?' wildcard used to avoid security restrictions on the UserManagement MBean when identifying the management api version of older brokers
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@990252 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/management')
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java58
1 files changed, 36 insertions, 22 deletions
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java
index 855b2e2a1e..7c34085e0e 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java
@@ -47,6 +47,7 @@ import javax.management.ReflectionException;
import org.apache.qpid.management.common.mbeans.ServerInformation;
import org.apache.qpid.management.ui.ApiVersion;
import org.apache.qpid.management.ui.ApplicationRegistry;
+import org.apache.qpid.management.ui.Constants;
import org.apache.qpid.management.ui.ManagedBean;
import org.apache.qpid.management.ui.ManagedServer;
import org.apache.qpid.management.ui.exceptions.ManagementConsoleException;
@@ -502,10 +503,20 @@ public class MBeanUtility
* Retrieves all the MBeans from mbean server for a given domain
* @return list of ManagedBeans
*/
- public static List<ManagedBean> getManagedObjectsForDomain(ManagedServer server, String domain) throws Exception
+ public static List<ManagedBean> getManagedObjectsForDomain(ManagedServer server, String domain) throws MalformedObjectNameException, NullPointerException, IOException
{
- List<ManagedBean> mbeans = new ArrayList<ManagedBean>();
JMXServerRegistry serverRegistry = (JMXServerRegistry)ApplicationRegistry.getServerRegistry(server);
+ return getManagedObjectsForDomain(server,serverRegistry, domain);
+ }
+
+ /**
+ * Retrieves all the MBeans from mbean server for a given domain
+ * @return list of ManagedBeans
+ */
+ public static List<ManagedBean> getManagedObjectsForDomain(ManagedServer server, JMXServerRegistry serverRegistry, String domain) throws MalformedObjectNameException, NullPointerException, IOException
+ {
+ List<ManagedBean> mbeans = new ArrayList<ManagedBean>();
+
MBeanServerConnection mbsc = serverRegistry.getServerConnection();
ObjectName objName = new ObjectName(domain + ":*");
Set objectInstances = mbsc.queryMBeans(objName, null);
@@ -559,32 +570,35 @@ public class MBeanUtility
//Detect the value of the 'version' key property on the UserManagement MBean ObjectName.
//If present, we have a v1.2 API server. If null, we have a v1.1 API server.
- //Use an ObjectName pattern (the ?) to match the 'type' and allow this to work for non-admin users
- objName = new ObjectName(server.getDomain() + ":type="+ "UserManagemen?" + ",*");
- objectInstances = mbsc.queryNames(objName, null);
-
- if(objectInstances.size() != 0)
+ ObjectName umMBeanObjectName = null;
+ List<ManagedBean> mbeans = getManagedObjectsForDomain(server, serverRegistry, Constants.DEFAULT_DOMAIN);
+ for(ManagedBean mbean: mbeans)
{
- for (Iterator<ObjectName> itr = objectInstances.iterator(); itr.hasNext();)
+ if("UserManagement".equalsIgnoreCase(mbean.getType()))
{
- ObjectName instance = (ObjectName)itr.next();
- String version = instance.getKeyProperty("version");
-
- if(version != null)
- {
- serverRegistry.setManagementApiVersion(new ApiVersion(1, 2));
- }
- else
- {
- serverRegistry.setManagementApiVersion(new ApiVersion(1, 1));
- }
+ umMBeanObjectName = ((JMXManagedObject) mbean).getObjectName();
+ break;
}
}
- else
+
+ if(umMBeanObjectName != null)
{
- //UserManagement MBean wasnt present, connected to an old server: classify as v1.0 API
- serverRegistry.setManagementApiVersion(new ApiVersion(1, 0));
+ //UserManagement MBean was present, determine if it has a version key
+ if(umMBeanObjectName.getKeyProperty("version") != null)
+ {
+ serverRegistry.setManagementApiVersion(new ApiVersion(1, 2));
+ }
+ else
+ {
+ //no version key,
+ serverRegistry.setManagementApiVersion(new ApiVersion(1, 1));
+ }
+
+ return;
}
+
+ //UserManagement MBean was not present, connected to an old server: classify as v1.0 API
+ serverRegistry.setManagementApiVersion(new ApiVersion(1, 0));
}
public static void printOutput(String statement)