This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch 4.19
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.19 by this push:
     new f702f7f57c6 Remove sensitive params (VmPassword, etc) from VMWork log 
(#8553)
f702f7f57c6 is described below

commit f702f7f57c66f1ba1db2e20f5e072b5637e60d84
Author: Suresh Kumar Anaparti <[email protected]>
AuthorDate: Mon Feb 5 13:26:18 2024 +0530

    Remove sensitive params (VmPassword, etc) from VMWork log (#8553)
---
 .../src/main/java/com/cloud/vm/VmWork.java         | 39 +++++++++++++++
 .../java/com/cloud/vm/VmWorkJobHandlerProxy.java   | 10 ++--
 .../src/main/java/com/cloud/vm/VmWorkReboot.java   |  9 ++++
 .../src/main/java/com/cloud/vm/VmWorkStart.java    |  9 ++++
 .../test/java/com/cloud/vm/VmWorkRebootTest.java   | 42 ++++++++++++++++
 .../test/java/com/cloud/vm/VmWorkStartTest.java    | 57 ++++++++++++++++++++++
 6 files changed, 160 insertions(+), 6 deletions(-)

diff --git a/engine/components-api/src/main/java/com/cloud/vm/VmWork.java 
b/engine/components-api/src/main/java/com/cloud/vm/VmWork.java
index a0b5e979524..33338297e26 100644
--- a/engine/components-api/src/main/java/com/cloud/vm/VmWork.java
+++ b/engine/components-api/src/main/java/com/cloud/vm/VmWork.java
@@ -17,9 +17,21 @@
 package com.cloud.vm;
 
 import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import com.cloud.serializer.GsonHelper;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.gson.Gson;
 
 public class VmWork implements Serializable {
     private static final long serialVersionUID = -6946320465729853589L;
+    private static final Gson gsonLogger = GsonHelper.getGsonLogger();
 
     long userId;
     long accountId;
@@ -56,4 +68,31 @@ public class VmWork implements Serializable {
     public String getHandlerName() {
         return handlerName;
     }
+
+    @Override
+    public String toString() {
+        return gsonLogger.toJson(this);
+    }
+
+    protected String toStringAfterRemoveParams(String paramsObjName, 
List<String> params) {
+        String ObjJsonStr = gsonLogger.toJson(this);
+        if (StringUtils.isBlank(ObjJsonStr) || 
StringUtils.isBlank(paramsObjName) || CollectionUtils.isEmpty(params)) {
+            return ObjJsonStr;
+        }
+
+        try {
+            Map<String, Object> ObjMap = new 
ObjectMapper().readValue(ObjJsonStr, HashMap.class);
+            if (ObjMap != null && ObjMap.containsKey(paramsObjName)) {
+                for (String param : params) {
+                    ((Map<String, 
String>)ObjMap.get(paramsObjName)).remove(param);
+                }
+                String resultJson = new 
ObjectMapper().writeValueAsString(ObjMap);
+                return resultJson;
+            }
+        } catch (final JsonProcessingException e) {
+            // Ignore json exception
+        }
+
+        return ObjJsonStr;
+    }
 }
diff --git 
a/engine/components-api/src/main/java/com/cloud/vm/VmWorkJobHandlerProxy.java 
b/engine/components-api/src/main/java/com/cloud/vm/VmWorkJobHandlerProxy.java
index ce10a83c7cd..a542da6cf8e 100644
--- 
a/engine/components-api/src/main/java/com/cloud/vm/VmWorkJobHandlerProxy.java
+++ 
b/engine/components-api/src/main/java/com/cloud/vm/VmWorkJobHandlerProxy.java
@@ -21,15 +21,13 @@ import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.log4j.Logger;
-
-import com.google.gson.Gson;
-
 import org.apache.cloudstack.framework.jobs.impl.JobSerializerHelper;
 import org.apache.cloudstack.jobs.JobInfo;
+import org.apache.log4j.Logger;
 
 import com.cloud.serializer.GsonHelper;
 import com.cloud.utils.Pair;
+import com.google.gson.Gson;
 
 /**
  * VmWorkJobHandlerProxy can not be used as standalone due to run-time
@@ -102,12 +100,12 @@ public class VmWorkJobHandlerProxy implements 
VmWorkJobHandler {
 
             try {
                 if (s_logger.isDebugEnabled())
-                    s_logger.debug("Execute VM work job: " + 
work.getClass().getName() + _gsonLogger.toJson(work));
+                    s_logger.debug("Execute VM work job: " + 
work.getClass().getName() + work);
 
                 Object obj = method.invoke(_target, work);
 
                 if (s_logger.isDebugEnabled())
-                    s_logger.debug("Done executing VM work job: " + 
work.getClass().getName() + _gsonLogger.toJson(work));
+                    s_logger.debug("Done executing VM work job: " + 
work.getClass().getName() + work);
 
                 assert (obj instanceof Pair);
                 return (Pair<JobInfo.Status, String>)obj;
diff --git a/engine/orchestration/src/main/java/com/cloud/vm/VmWorkReboot.java 
b/engine/orchestration/src/main/java/com/cloud/vm/VmWorkReboot.java
index 6a903b3d781..3813a8dc207 100644
--- a/engine/orchestration/src/main/java/com/cloud/vm/VmWorkReboot.java
+++ b/engine/orchestration/src/main/java/com/cloud/vm/VmWorkReboot.java
@@ -17,7 +17,9 @@
 package com.cloud.vm;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.cloudstack.framework.jobs.impl.JobSerializerHelper;
@@ -62,4 +64,11 @@ public class VmWorkReboot extends VmWork {
             }
         }
     }
+
+    @Override
+    public String toString() {
+        List<String> params = new ArrayList<>();
+        params.add(VirtualMachineProfile.Param.VmPassword.getName());
+        return super.toStringAfterRemoveParams("rawParams", params);
+    }
 }
diff --git a/engine/orchestration/src/main/java/com/cloud/vm/VmWorkStart.java 
b/engine/orchestration/src/main/java/com/cloud/vm/VmWorkStart.java
index 1b2a7194d17..5a7acdd9edb 100644
--- a/engine/orchestration/src/main/java/com/cloud/vm/VmWorkStart.java
+++ b/engine/orchestration/src/main/java/com/cloud/vm/VmWorkStart.java
@@ -18,7 +18,9 @@
 package com.cloud.vm;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.cloudstack.context.CallContext;
@@ -135,4 +137,11 @@ public class VmWorkStart extends VmWork {
             }
         }
     }
+
+    @Override
+    public String toString() {
+        List<String> params = new ArrayList<>();
+        params.add(VirtualMachineProfile.Param.VmPassword.getName());
+        return super.toStringAfterRemoveParams("rawParams", params);
+    }
 }
diff --git 
a/engine/orchestration/src/test/java/com/cloud/vm/VmWorkRebootTest.java 
b/engine/orchestration/src/test/java/com/cloud/vm/VmWorkRebootTest.java
new file mode 100644
index 00000000000..75ffd94600a
--- /dev/null
+++ b/engine/orchestration/src/test/java/com/cloud/vm/VmWorkRebootTest.java
@@ -0,0 +1,42 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.vm;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.cloudstack.framework.jobs.impl.JobSerializerHelper;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class VmWorkRebootTest {
+
+    @Test
+    public void testToString() {
+        VmWork vmWork = new VmWork(1l, 1l, 1l, "testhandler");
+        Map<VirtualMachineProfile.Param, Object> params = new HashMap<>();
+        String lastHost = "rO0ABXQABHRydWU";
+        String lastHostSerialized = 
JobSerializerHelper.toObjectSerializedString(lastHost);
+        params.put(VirtualMachineProfile.Param.ConsiderLastHost, lastHost);
+        params.put(VirtualMachineProfile.Param.VmPassword, 
"rO0ABXQADnNhdmVkX3Bhc3N3b3Jk");
+        VmWorkReboot workInfo = new VmWorkReboot(vmWork, params);
+        String expectedVmWorkRebootStr = 
"{\"accountId\":1,\"vmId\":1,\"handlerName\":\"testhandler\",\"userId\":1,\"rawParams\":{\"ConsiderLastHost\":\""
 + lastHostSerialized + "\"}}";
+
+        String vmWorkRebootStr = workInfo.toString();
+        Assert.assertEquals(expectedVmWorkRebootStr, vmWorkRebootStr);
+    }
+}
diff --git 
a/engine/orchestration/src/test/java/com/cloud/vm/VmWorkStartTest.java 
b/engine/orchestration/src/test/java/com/cloud/vm/VmWorkStartTest.java
new file mode 100644
index 00000000000..a0644b1976f
--- /dev/null
+++ b/engine/orchestration/src/test/java/com/cloud/vm/VmWorkStartTest.java
@@ -0,0 +1,57 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.vm;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.cloudstack.framework.jobs.impl.JobSerializerHelper;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class VmWorkStartTest {
+
+    @Test
+    public void testToStringWithParams() {
+        VmWork vmWork = new VmWork(1l,  1l, 1l, "testhandler");
+        VmWorkStart workInfo = new VmWorkStart(vmWork);
+        Map<VirtualMachineProfile.Param, Object> params = new HashMap<>();
+        String lastHost = "rO0ABXQABHRydWU";
+        String lastHostSerialized = 
JobSerializerHelper.toObjectSerializedString(lastHost);
+        params.put(VirtualMachineProfile.Param.ConsiderLastHost, lastHost);
+        params.put(VirtualMachineProfile.Param.VmPassword, 
"rO0ABXQADnNhdmVkX3Bhc3N3b3Jk");
+        workInfo.setParams(params);
+        String expectedVmWorkStartStr = 
"{\"accountId\":1,\"dcId\":0,\"vmId\":1,\"handlerName\":\"testhandler\",\"userId\":1,\"rawParams\":{\"ConsiderLastHost\":\""
 + lastHostSerialized + "\"}}";
+
+        String vmWorkStartStr = workInfo.toString();
+        Assert.assertEquals(expectedVmWorkStartStr, vmWorkStartStr);
+    }
+
+    @Test
+    public void testToStringWithRawParams() {
+        VmWork vmWork = new VmWork(1l,  1l, 1l, "testhandler");
+        VmWorkStart workInfo = new VmWorkStart(vmWork);
+        Map<String, String> rawParams = new HashMap<>();
+        rawParams.put(VirtualMachineProfile.Param.ConsiderLastHost.getName(), 
"rO0ABXQABHRydWU");
+        rawParams.put(VirtualMachineProfile.Param.VmPassword.getName(), 
"rO0ABXQADnNhdmVkX3Bhc3N3b3Jk");
+        workInfo.setRawParams(rawParams);
+        String expectedVmWorkStartStr = 
"{\"accountId\":1,\"dcId\":0,\"vmId\":1,\"handlerName\":\"testhandler\",\"userId\":1,\"rawParams\":{\"ConsiderLastHost\":\"rO0ABXQABHRydWU\"}}";
+
+        String vmWorkStartStr = workInfo.toString();
+        Assert.assertEquals(expectedVmWorkStartStr, vmWorkStartStr);
+    }
+}

Reply via email to