Index: lib/jdmkrt-1.0-b02.jar =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: lib/jdmkrt-1.0-b02.jar ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: lib/jmxremote_optional-1.0.1_04.jar =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: lib/jmxremote_optional-1.0.1_04.jar ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: src/com/zabbix/gateway/SocketProcessor.java =================================================================== --- src/com/zabbix/gateway/SocketProcessor.java (revision 29190) +++ src/com/zabbix/gateway/SocketProcessor.java (working copy) @@ -55,7 +55,8 @@ if (request.getString(ItemChecker.JSON_TAG_REQUEST).equals(ItemChecker.JSON_REQUEST_INTERNAL)) checker = new InternalItemChecker(request); else if (request.getString(ItemChecker.JSON_TAG_REQUEST).equals(ItemChecker.JSON_REQUEST_JMX)) - checker = new JMXItemChecker(request); + //checker = new JMXItemChecker(request); + checker = new JMXMPItemChecker(request); else throw new ZabbixException("bad request tag value: '%s'", request.getString(ItemChecker.JSON_TAG_REQUEST)); Index: src/com/zabbix/gateway/JMXMPItemChecker.java =================================================================== --- src/com/zabbix/gateway/JMXMPItemChecker.java (revision 0) +++ src/com/zabbix/gateway/JMXMPItemChecker.java (revision 0) @@ -0,0 +1,60 @@ +package com.zabbix.gateway; + +import java.io.FileInputStream; +import java.io.IOException; +import java.net.MalformedURLException; +import java.security.GeneralSecurityException; +import java.security.KeyStore; +import java.security.Provider; +import java.security.Security; +import java.util.HashMap; +import java.util.Map; + +import javax.management.remote.JMXServiceURL; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSocketFactory; +import javax.net.ssl.TrustManagerFactory; +import javax.security.auth.callback.Callback; +import javax.security.auth.callback.CallbackHandler; +import javax.security.auth.callback.NameCallback; +import javax.security.auth.callback.PasswordCallback; +import javax.security.auth.callback.UnsupportedCallbackException; + +import org.json.JSONObject; + +class JMXMPItemChecker extends JMXItemChecker { + + public JMXMPItemChecker(JSONObject request) throws ZabbixException { + super(request); + } + + protected JMXServiceURL getServiceURL() throws MalformedURLException { + return new JMXServiceURL("jmxmp", conn, port); + } + + protected Map getEnvironment() throws ZabbixException { + Map env = new HashMap(); + env.put("jmx.remote.profiles", "TLS SASL/PLAIN"); + Security.addProvider(new com.sun.security.sasl.Provider()); + env.put("jmx.remote.sasl.callback.handler", + new CallbackHandler() { + public void handle(Callback[] callbacks) + throws IOException, UnsupportedCallbackException + { + for (Callback callback : callbacks) { + if (callback instanceof NameCallback) { + ((NameCallback) callback).setName(username); + } else if (callback instanceof PasswordCallback) { + if (password != null) { + ((PasswordCallback) callback).setPassword(password.toCharArray()); + } + } else { + throw new UnsupportedCallbackException(callback); + } + } + } + }); + return env; + } + +} Property changes on: src/com/zabbix/gateway/JMXMPItemChecker.java ___________________________________________________________________ Added: svn:eol-style + native Index: src/com/zabbix/gateway/JMXItemChecker.java =================================================================== --- src/com/zabbix/gateway/JMXItemChecker.java (revision 29190) +++ src/com/zabbix/gateway/JMXItemChecker.java (working copy) @@ -19,7 +19,9 @@ package com.zabbix.gateway; +import java.net.MalformedURLException; import java.util.HashMap; +import java.util.Map; import java.util.Vector; import javax.management.MBeanAttributeInfo; @@ -41,12 +43,13 @@ { private static final Logger logger = LoggerFactory.getLogger(JMXItemChecker.class); - private JMXServiceURL url; private JMXConnector jmxc; private MBeanServerConnection mbsc; - private String username; - private String password; + protected String conn; + protected int port; + protected String username; + protected String password; public JMXItemChecker(JSONObject request) throws ZabbixException { @@ -54,13 +57,9 @@ try { - String conn = request.getString(JSON_TAG_CONN); - int port = request.getInt(JSON_TAG_PORT); + conn = request.getString(JSON_TAG_CONN); + port = request.getInt(JSON_TAG_PORT); - url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + conn + ":" + port + "/jmxrmi"); - jmxc = null; - mbsc = null; - username = request.optString(JSON_TAG_USERNAME, null); password = request.optString(JSON_TAG_PASSWORD, null); @@ -73,6 +72,19 @@ } } + protected JMXServiceURL getServiceURL() throws MalformedURLException { + return new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + conn + ":" + port + "/jmxrmi"); + } + + protected Map getEnvironment() throws ZabbixException { + if (username == null || password == null) { + return null; + } + Map env = new HashMap(); + env.put(JMXConnector.CREDENTIALS, new String[] {username, password}); + return env; + } + @Override public JSONArray getValues() throws ZabbixException { @@ -80,16 +92,9 @@ try { - HashMap env = null; - - if (null != username && null != password) - { - env = new HashMap(); - env.put(JMXConnector.CREDENTIALS, new String[] {username, password}); - } - + JMXServiceURL url = getServiceURL(); logger.debug("connecting to JMX agent at {}", url); - jmxc = JMXConnectorFactory.connect(url, env); + jmxc = JMXConnectorFactory.connect(url, getEnvironment()); mbsc = jmxc.getMBeanServerConnection(); for (String key : keys)