diff options
| author | Robert Gemmell <robbie@apache.org> | 2010-08-27 20:25:11 +0000 |
|---|---|---|
| committer | Robert Gemmell <robbie@apache.org> | 2010-08-27 20:25:11 +0000 |
| commit | d89ed290d19f7515661ae1bd2dab6f1857e31182 (patch) | |
| tree | 7964e3fb67e7dcbf692862f48f3fc4f8e3c12261 /java/management/eclipse-plugin/src | |
| parent | 83e0c521d176bcb53d6bc62e8a225ef500dca39c (diff) | |
| download | qpid-python-d89ed290d19f7515661ae1bd2dab6f1857e31182.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/qpid@990252 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/management/eclipse-plugin/src')
| -rw-r--r-- | java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java | 58 |
1 files changed, 36 insertions, 22 deletions
diff --git a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java index 855b2e2a1e..7c34085e0e 100644 --- a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java +++ b/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) |
