-javaagent:force-hostname-agent.jar=host56;C:/temp/dds
=====================
public static String cachePattern;
public static String cacheOverride;
public static void premain(String agentArgs, Instrumentation inst) {
String[] parts = agentArgs != null ? agentArgs.split(";") : new String[0];
final String forcedHost = parts.length > 0 ? parts[0] : "forced-hostname";
final String forcedUser = parts.length > 1 ? parts[1] : "forced-user";
cachePattern = parts.length > 2 ? parts[2] : null;
cacheOverride = parts.length > 3 ? parts[3] : null;
HostnameAdvice.forcedHost = forcedHost;
UserNameAdvice.forcedUser = forcedUser;
new AgentBuilder.Default()
.type(named("com.citi.rio.umb"))
.transform((builder, typeDescription, classLoader, module) ->
builder
.method(named("getCurrentCanonicalHostname"))
.intercept(Advice.to(HostnameAdvice.class))
.method(named("getCurrentUserName"))
.intercept(Advice.to(UserNameAdvice.class))
)
.type(named("com.citigroup.get.quantum.config.v2.internal.ClientConfig"))
.transform((builder, typeDescription, classLoader, module) ->
builder
.method(named("getFileCacheLocation"))
.intercept(Advice.to(FileCacheLocationAdvice.class))
)
.installOn(inst);
}
===================
public static class FileCacheLocationAdvice {
@Advice.OnMethodExit
static void exit(@Advice.Return(readOnly = false) String returned) {
// If original value is null, or agent not configured, skip override
if (returned == null ||
ForceHostnameAgent.cachePattern == null ||
ForceHostnameAgent.cacheOverride == null) {
return; // keeps the original constructor-set value
}
// Only replace if pattern matches
if (returned.contains(ForceHostnameAgent.cachePattern)) {
System.out.println(
"Agent overriding cache location: "
+ returned + " -> "
+ ForceHostnameAgent.cacheOverride
);
returned = ForceHostnameAgent.cacheOverride;
}
// else: nothing changed, original value is returned
}
}
==================
public static void premain(String agentArgs, Instrumentation inst) {
String[] parts = agentArgs != null ? agentArgs.split(";") : new String[0];
// existing hostname/user args
final String forcedHost = parts.length > 0 ? parts[0] : "forced-hostname";
final String forcedUser = parts.length > 1 ? parts[1] : "forced-user";
// cache override args
cachePattern = parts.length > 2 ? parts[2] : null;
cacheOverride = parts.length > 3 ? parts[3] : null;
HostnameAdvice.forcedHost = forcedHost;
UserNameAdvice.forcedUser = forcedUser;
System.out.println("Agent args: host=" + forcedHost +
", user=" + forcedUser +
", cachePattern=" + cachePattern +
", cacheOverride=" + cacheOverride);
// -----------------------------
// Transformer 1: Hostname / User
// -----------------------------
new AgentBuilder.Default()
.type(named("com.citi.rio.umb"))
.transform((builder, td, cl, m) ->
builder
.method(named("getCurrentCanonicalHostname"))
.intercept(Advice.to(HostnameAdvice.class))
.method(named("getCurrentUserName"))
.intercept(Advice.to(UserNameAdvice.class))
)
.installOn(inst);
// -----------------------------
// Transformer 2: ClientConfig file cache
// -----------------------------
new AgentBuilder.Default()
.type(named("com.citigroup.get.quantum.config.v2.internal.ClientConfig"))
.transform((builder, td, cl, m) ->
builder
.method(named("getFileCacheLocation"))
.intercept(Advice.to(FileCacheLocationAdvice.class))
)
.installOn(inst);
// -----------------------------
// Future transformers can go here
// -----------------------------
}
For further actions, you may consider blocking this person and/or reporting abuse
Top comments (0)