From 27019742917cc615ad32c97285873f36702eb53b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Su=C3=A1rez=20Hern=C3=A1ndez?= Date: Thu, 19 Oct 2023 16:28:00 +0100 Subject: [PATCH 1/3] Fix system.provisionSystem xmlrpc endpoint to calculate host properly (bsc#1215209) --- .../redhat/rhn/frontend/xmlrpc/RhnXmlRpcServer.java | 13 ++++++++++++- .../redhat/rhn/frontend/xmlrpc/XmlRpcServlet.java | 3 ++- .../rhn/frontend/xmlrpc/system/SystemHandler.java | 7 +++++-- ...Manager-4.3-fix-xmlrpc-provision-server-endpoint | 1 + 4 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 java/spacewalk-java.changes.meaksh.Manager-4.3-fix-xmlrpc-provision-server-endpoint diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/RhnXmlRpcServer.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/RhnXmlRpcServer.java index dd2a864edf23..59e38aeb6343 100644 --- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/RhnXmlRpcServer.java +++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/RhnXmlRpcServer.java @@ -16,6 +16,7 @@ import java.io.InputStream; import java.io.Writer; +import javax.servlet.http.HttpServletRequest; import redstone.xmlrpc.XmlRpcDispatcher; import redstone.xmlrpc.XmlRpcServer; @@ -28,6 +29,7 @@ public class RhnXmlRpcServer extends XmlRpcServer { private static ThreadLocal server = new ThreadLocal<>(); private static ThreadLocal proto = new ThreadLocal<>(); private static ThreadLocal caller = new ThreadLocal<>(); + private static ThreadLocal request = new ThreadLocal<>(); /** * Adding a method to get the callerIp into the XmlRpc for logging. @@ -42,10 +44,11 @@ public class RhnXmlRpcServer extends XmlRpcServer { * available to custom processors. */ public void execute(InputStream xmlInput, Writer output, String callerIp, - String serverHost, String protoc) { + String serverHost, String protoc, HttpServletRequest rawRequest) { server.set(serverHost); proto.set(protoc); caller.set(callerIp); + request.set(rawRequest); XmlRpcDispatcher dispatcher = new XmlRpcDispatcher(this, callerIp); dispatcher.dispatch(xmlInput, output); } @@ -73,4 +76,12 @@ public static String getProtocol() { public static String getCallerIp() { return caller.get(); } + + /** + * Retrieve the the raw request of the current xmlrpc call. + * @return HttpServletRequest object + */ + public static HttpServletRequest getRequest() { + return request.get(); + } } diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/XmlRpcServlet.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/XmlRpcServlet.java index 5e14b372dc73..d27d51237405 100644 --- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/XmlRpcServlet.java +++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/XmlRpcServlet.java @@ -149,7 +149,8 @@ public void doPost(HttpServletRequest request, HttpServletResponse response) { response.getWriter(), request.getRemoteAddr(), request.getLocalName(), - request.getProtocol()); + request.getProtocol(), + request); /* * jesusr - 2007.09.14 diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java index 126a62ed569a..ac4097f40605 100644 --- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java +++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java @@ -98,6 +98,7 @@ import com.redhat.rhn.domain.token.ActivationKey; import com.redhat.rhn.domain.token.ActivationKeyFactory; import com.redhat.rhn.domain.user.User; +import com.redhat.rhn.frontend.action.kickstart.KickstartHelper; import com.redhat.rhn.frontend.context.Context; import com.redhat.rhn.frontend.dto.ActivationKeyDto; import com.redhat.rhn.frontend.dto.ErrataOverview; @@ -2928,7 +2929,8 @@ public int provisionSystem(User loggedInUser, Integer sid, String profileName) "No Kickstart Profile found with label: " + profileName); } - String host = RhnXmlRpcServer.getServerName(); + KickstartHelper helper = new KickstartHelper(RhnXmlRpcServer.getRequest()); + String host = helper.getKickstartHost(); KickstartScheduleCommand cmd = new KickstartScheduleCommand( @@ -2981,7 +2983,8 @@ public int provisionSystem(User loggedInUser, Integer sid, "No Kickstart Profile found with label: " + profileName); } - String host = RhnXmlRpcServer.getServerName(); + KickstartHelper helper = new KickstartHelper(RhnXmlRpcServer.getRequest()); + String host = helper.getKickstartHost(); KickstartScheduleCommand cmd = new KickstartScheduleCommand( Long.valueOf(sid), diff --git a/java/spacewalk-java.changes.meaksh.Manager-4.3-fix-xmlrpc-provision-server-endpoint b/java/spacewalk-java.changes.meaksh.Manager-4.3-fix-xmlrpc-provision-server-endpoint new file mode 100644 index 000000000000..49aee323e7a2 --- /dev/null +++ b/java/spacewalk-java.changes.meaksh.Manager-4.3-fix-xmlrpc-provision-server-endpoint @@ -0,0 +1 @@ +Fix system.provisionSystem xmlrpc endpoint to calculate host properly (bsc#1215209) From fb8ab2e3a5d47e95f5b05e273cfd0c96718e1bad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Su=C3=A1rez=20Hern=C3=A1ndez?= Date: Thu, 19 Oct 2023 16:58:12 +0100 Subject: [PATCH 2/3] Make checkstyle happy --- .../src/com/redhat/rhn/frontend/xmlrpc/RhnXmlRpcServer.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/RhnXmlRpcServer.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/RhnXmlRpcServer.java index 59e38aeb6343..72b01e78e1d4 100644 --- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/RhnXmlRpcServer.java +++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/RhnXmlRpcServer.java @@ -16,6 +16,7 @@ import java.io.InputStream; import java.io.Writer; + import javax.servlet.http.HttpServletRequest; import redstone.xmlrpc.XmlRpcDispatcher; @@ -41,6 +42,7 @@ public class RhnXmlRpcServer extends XmlRpcServer { * @param serverHost the hostname/ipaddress that the client used in * reference to the server * @param protoc the protocol the client used in connection to the server + * @param rawRequest the raw request representing the client connection to the server * available to custom processors. */ public void execute(InputStream xmlInput, Writer output, String callerIp, From 455b21ce4e1b37d7074d38386cbad9d4003479d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Su=C3=A1rez=20Hern=C3=A1ndez?= Date: Fri, 20 Oct 2023 13:03:55 +0100 Subject: [PATCH 3/3] Make SonarCould happy --- .../src/com/redhat/rhn/frontend/xmlrpc/RhnXmlRpcServer.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/RhnXmlRpcServer.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/RhnXmlRpcServer.java index 72b01e78e1d4..41ac3f9f6003 100644 --- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/RhnXmlRpcServer.java +++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/RhnXmlRpcServer.java @@ -53,6 +53,10 @@ public void execute(InputStream xmlInput, Writer output, String callerIp, request.set(rawRequest); XmlRpcDispatcher dispatcher = new XmlRpcDispatcher(this, callerIp); dispatcher.dispatch(xmlInput, output); + server.remove(); + proto.remove(); + caller.remove(); + request.remove(); } /**