Skip to content

Commit d8a2864

Browse files
authored
Merge pull request #1692 from lilai23/fix_pathcheck_2.1.x
fix_2.1.x: support dynamic install agent multi-times with different agent directory
2 parents 949f104 + 8bea7a1 commit d8a2864

File tree

5 files changed

+21
-6
lines changed

5 files changed

+21
-6
lines changed

sermant-agentcore/sermant-agentcore-core/src/main/java/io/sermant/core/AgentCoreEntrance.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import io.sermant.core.classloader.ClassLoaderManager;
2020
import io.sermant.core.common.AgentType;
2121
import io.sermant.core.common.BootArgsIndexer;
22+
import io.sermant.core.common.CommonConstant;
2223
import io.sermant.core.common.LoggerFactory;
2324
import io.sermant.core.config.ConfigManager;
2425
import io.sermant.core.event.EventManager;
@@ -35,6 +36,7 @@
3536
import io.sermant.core.plugin.agent.info.EnhancementManager;
3637
import io.sermant.core.plugin.agent.template.DefaultAdviser;
3738
import io.sermant.core.service.ServiceManager;
39+
import io.sermant.core.utils.FileUtils;
3840
import io.sermant.god.common.SermantManager;
3941

4042
import java.lang.instrument.Instrumentation;
@@ -90,6 +92,8 @@ public static void install(String artifact, Map<String, Object> argsMap, Instrum
9092
LoggerFactory.initDefaultLogger(artifact);
9193
adviserCache = new DefaultAdviser();
9294

95+
FileUtils.setAgentPath((String) argsMap.get(CommonConstant.AGENT_PATH_KEY));
96+
9397
// Initialize the classloader of framework
9498
ClassLoaderManager.init(argsMap);
9599

sermant-agentcore/sermant-agentcore-core/src/main/java/io/sermant/core/common/CommonConstant.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,11 @@ public class CommonConstant {
127127
*/
128128
public static final String ARTIFACT_NAME_KEY = "artifact";
129129

130+
/**
131+
* The key of agent path
132+
*/
133+
public static final String AGENT_PATH_KEY = "agentPath";
134+
130135
private CommonConstant() {
131136
}
132137
}

sermant-agentcore/sermant-agentcore-core/src/main/java/io/sermant/core/utils/FileUtils.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,7 @@ public class FileUtils {
5252

5353
private static final String[] INVALID_SYMBOL = {"../", "..\\"};
5454

55-
private static final String AGENT_PATH = new File(new File(FileUtils.class.getProtectionDomain().getCodeSource()
56-
.getLocation().getPath()).getParent()).getParent();
55+
private static String agentPath;
5756

5857
/**
5958
* file name of unmatched class name
@@ -79,7 +78,7 @@ private FileUtils() {
7978
* @return path
8079
*/
8180
public static String getAgentPath() {
82-
return AGENT_PATH;
81+
return agentPath;
8382
}
8483

8584
/**
@@ -89,7 +88,7 @@ public static String getAgentPath() {
8988
* @return fixed path
9089
*/
9190
public static String validatePath(String path) {
92-
if (!path.startsWith(AGENT_PATH)) {
91+
if (!path.startsWith(agentPath)) {
9392
return "";
9493
}
9594

@@ -288,12 +287,16 @@ private static String buildUnmatchedFileString() {
288287
AgentConfig config = ConfigManager.getConfig(AgentConfig.class);
289288
String preFilterPath = config.getPreFilterPath();
290289
if (StringUtils.isEmpty(preFilterPath)) {
291-
preFilterPath = AGENT_PATH;
290+
preFilterPath = agentPath;
292291
}
293292
String preFilterFile = config.getPreFilterFile();
294293
if (StringUtils.isEmpty(preFilterFile)) {
295294
preFilterFile = DEFAULT_OUTPUT_CLASS_NAME_FILE;
296295
}
297296
return preFilterPath + File.separatorChar + preFilterFile;
298297
}
298+
299+
public static void setAgentPath(String path) {
300+
agentPath = path;
301+
}
299302
}

sermant-agentcore/sermant-agentcore-core/src/test/java/io/sermant/core/utils/FileUtilsTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public class FileUtilsTest {
2929
@Test
3030
public void testPath() {
3131
String pathValid = FileUtils.class.getProtectionDomain().getCodeSource().getLocation().getPath();
32-
Assert.assertEquals(pathValid, FileUtils.validatePath(pathValid));
32+
FileUtils.setAgentPath(pathValid);
3333
String pathInvalid = "/test/path";
3434
Assert.assertEquals("", FileUtils.validatePath(pathInvalid));
3535
String pathInvalidSymbolA = pathValid + "../" + "/test";

sermant-agentcore/sermant-agentcore-implement/src/test/java/io/sermant/implement/service/hotplugging/listener/HotPluggingListenerTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import io.sermant.core.operation.converter.api.YamlConverter;
2424
import io.sermant.core.service.dynamicconfig.common.DynamicConfigEvent;
2525
import io.sermant.core.service.dynamicconfig.common.DynamicConfigEventType;
26+
import io.sermant.core.utils.FileUtils;
2627
import io.sermant.core.utils.JarFileUtils;
2728
import io.sermant.core.utils.StringUtils;
2829
import io.sermant.implement.operation.converter.YamlConverterImpl;
@@ -84,6 +85,8 @@ public void setUp() throws Exception {
8485
.thenReturn(YAML_CONVERTER);
8586
commandProcessorMockedStatic.verify(() -> CommandProcessor.process(any()), times(0));
8687
jarFileUtilsMockedStatic.when(() -> JarFileUtils.getManifestAttr(any(), anyString())).thenReturn("1.0.0");
88+
String pathValid = FileUtils.class.getProtectionDomain().getCodeSource().getLocation().getPath();
89+
FileUtils.setAgentPath(pathValid);
8790
Map<String, Object> argsMap = new HashMap<>();
8891
argsMap.put(CommonConstant.CORE_IMPLEMENT_DIR_KEY, StringUtils.EMPTY);
8992
argsMap.put(CommonConstant.CORE_CONFIG_FILE_KEY, StringUtils.EMPTY);

0 commit comments

Comments
 (0)