Projects
openEuler:Mainline
tomcat
_service:tar_scm:CVE-2019-12418.patch
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:CVE-2019-12418.patch of Package tomcat
From 1fc9f589dbdd8295cf313b2667ab041c425f99c3 Mon Sep 17 00:00:00 2001 From: remm <remm@apache.org> Date: Thu, 14 Nov 2019 13:39:31 +0100 Subject: [PATCH] Refactor JMX remote RMI registry creation --- .../mbeans/JmxRemoteLifecycleListener.java | 65 ++++++++++++++----- 1 file changed, 49 insertions(+), 16 deletions(-) diff --git a/java/org/apache/catalina/mbeans/JmxRemoteLifecycleListener.java b/java/org/apache/catalina/mbeans/JmxRemoteLifecycleListener.java index ae04294..e832935 100644 --- a/java/org/apache/catalina/mbeans/JmxRemoteLifecycleListener.java +++ b/java/org/apache/catalina/mbeans/JmxRemoteLifecycleListener.java @@ -25,10 +25,11 @@ import java.net.MalformedURLException; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; +import java.rmi.AccessException; import java.rmi.AlreadyBoundException; +import java.rmi.NotBoundException; +import java.rmi.Remote; import java.rmi.RemoteException; -import java.rmi.registry.LocateRegistry; -import java.rmi.registry.Registry; import java.rmi.server.RMIClientSocketFactory; import java.rmi.server.RMIServerSocketFactory; import java.security.NoSuchAlgorithmException; @@ -301,18 +302,6 @@ public class JmxRemoteLifecycleListener implements LifecycleListener { RMIClientSocketFactory registryCsf, RMIServerSocketFactory registrySsf, RMIClientSocketFactory serverCsf, RMIServerSocketFactory serverSsf) { - // Create the RMI registry - Registry registry; - try { - registry = LocateRegistry.createRegistry( - theRmiRegistryPort, registryCsf, registrySsf); - } catch (RemoteException e) { - log.error(sm.getString( - "jmxRemoteLifecycleListener.createRegistryFailed", - serverName, Integer.toString(theRmiRegistryPort)), e); - return null; - } - if (bindAddress == null) { bindAddress = "localhost"; } @@ -333,11 +322,20 @@ public class JmxRemoteLifecycleListener implements LifecycleListener { cs = new RMIConnectorServer(serviceUrl, theEnv, server, ManagementFactory.getPlatformMBeanServer()); cs.start(); - registry.bind("jmxrmi", server.toStub()); + Remote jmxServer = server.toStub(); + // Create the RMI registry + try { + new JmxRegistry(theRmiRegistryPort, registryCsf, registrySsf, "jmxrmi", jmxServer); + } catch (RemoteException e) { + log.error(sm.getString( + "jmxRemoteLifecycleListener.createRegistryFailed", + serverName, Integer.toString(theRmiRegistryPort)), e); + return null; + } log.info(sm.getString("jmxRemoteLifecycleListener.start", Integer.toString(theRmiRegistryPort), Integer.toString(theRmiServerPort), serverName)); - } catch (IOException | AlreadyBoundException e) { + } catch (IOException e) { log.error(sm.getString( "jmxRemoteLifecycleListener.createServerFailed", serverName), e); @@ -493,4 +491,39 @@ public class JmxRemoteLifecycleListener implements LifecycleListener { return true; } } + + + private static class JmxRegistry extends sun.rmi.registry.RegistryImpl { + private static final long serialVersionUID = -3772054804656428217L; + private final String jmxName; + private final Remote jmxServer; + public JmxRegistry(int port, RMIClientSocketFactory csf, + RMIServerSocketFactory ssf, String jmxName, Remote jmxServer) throws RemoteException { + super(port, csf, ssf); + this.jmxName = jmxName; + this.jmxServer = jmxServer; + } + @Override + public Remote lookup(String name) + throws RemoteException, NotBoundException { + return (jmxName.equals(name)) ? jmxServer : null; + } + @Override + public void bind(String name, Remote obj) + throws RemoteException, AlreadyBoundException, AccessException { + } + @Override + public void unbind(String name) + throws RemoteException, NotBoundException, AccessException { + } + @Override + public void rebind(String name, Remote obj) + throws RemoteException, AccessException { + } + @Override + public String[] list() throws RemoteException { + return new String[] { jmxName }; + } + } + } -- 2.23.0
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2