Skip to content

Commit c82c35d

Browse files
committed
Add exclusion predefined redaction keywords
In the list of predefined keywords some of them could be too generic or wanted see the content of a session for example. introduced the config parameter DD_DYNAMIC_ISTRUMENTATION_REDACTION_EXCLUDED_IDENTIFIERS for a comma list of identifiers you want to exclude from redacted keywords
1 parent 529f893 commit c82c35d

4 files changed

Lines changed: 32 additions & 0 deletions

File tree

dd-java-agent/agent-debugger/debugger-bootstrap/src/main/java/datadog/trace/bootstrap/debugger/util/Redaction.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,15 @@ public class Redaction {
110110
private static List<String> redactedPackages;
111111

112112
static {
113+
initKeywords();
114+
}
115+
116+
static void initKeywords() {
113117
/*
114118
* based on sentry list: https://github.com/getsentry/sentry-python/blob/fefb454287b771ac31db4e30fa459d9be2f977b8/sentry_sdk/scrubber.py#L17-L58
115119
*/
116120
KEYWORDS.addAll(PREDEFINED_KEYWORDS);
121+
KEYWORDS.removeAll(Config.get().getDebuggerRedactionExcludedIdentifiers());
117122
}
118123

119124
public static void addUserDefinedKeywords(Config config) {

dd-java-agent/agent-debugger/debugger-bootstrap/src/test/java/datadog/trace/bootstrap/debugger/util/RedactionTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
import datadog.trace.api.Config;
66
import java.lang.reflect.Field;
7+
import java.util.Arrays;
8+
import java.util.Collections;
9+
import java.util.HashSet;
710
import org.junit.jupiter.api.Test;
811

912
class RedactionTest {
@@ -48,6 +51,20 @@ public void userDefinedTypes() {
4851
}
4952
}
5053

54+
@Test
55+
public void exclusions() {
56+
Config config = Config.get();
57+
setFieldInConfig(
58+
config, "debuggerRedactionExcludedIdentifiers", new HashSet<>(Arrays.asList("password")));
59+
Redaction.initKeywords();
60+
try {
61+
assertFalse(Redaction.isRedactedKeyword("password"));
62+
} finally {
63+
setFieldInConfig(config, "debuggerRedactionExcludedIdentifiers", Collections.emptySet());
64+
Redaction.initKeywords();
65+
}
66+
}
67+
5168
private static void setFieldInConfig(Config config, String fieldName, Object value) {
5269
try {
5370
Field field = config.getClass().getDeclaredField(fieldName);

dd-trace-api/src/main/java/datadog/trace/api/config/DebuggerConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ public final class DebuggerConfig {
2424
public static final String DEBUGGER_CAPTURE_TIMEOUT = "dynamic.instrumentation.capture.timeout";
2525
public static final String DEBUGGER_REDACTED_IDENTIFIERS =
2626
"dynamic.instrumentation.redacted.identifiers";
27+
public static final String DEBUGGER_REDACTION_EXCLUDED_IDENTIFIERS =
28+
"dynamic.instrumentation.redaction.excluded.identifiers";
2729
public static final String DEBUGGER_REDACTED_TYPES = "dynamic.instrumentation.redacted.types";
2830
public static final String DEBUGGER_SYMBOL_ENABLED = "symbol.database.upload.enabled";
2931
public static final String DEBUGGER_SYMBOL_FORCE_UPLOAD = "internal.force.symbol.database.upload";

internal-api/src/main/java/datadog/trace/api/Config.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@
234234
import static datadog.trace.api.config.DebuggerConfig.DEBUGGER_PROBE_FILE_LOCATION;
235235
import static datadog.trace.api.config.DebuggerConfig.DEBUGGER_REDACTED_IDENTIFIERS;
236236
import static datadog.trace.api.config.DebuggerConfig.DEBUGGER_REDACTED_TYPES;
237+
import static datadog.trace.api.config.DebuggerConfig.DEBUGGER_REDACTION_EXCLUDED_IDENTIFIERS;
237238
import static datadog.trace.api.config.DebuggerConfig.DEBUGGER_SPAN_DEBUG_ENABLED;
238239
import static datadog.trace.api.config.DebuggerConfig.DEBUGGER_SYMBOL_ENABLED;
239240
import static datadog.trace.api.config.DebuggerConfig.DEBUGGER_SYMBOL_FLUSH_THRESHOLD;
@@ -865,6 +866,7 @@ static class HostNameHolder {
865866
private final String debuggerExcludeFiles;
866867
private final int debuggerCaptureTimeout;
867868
private final String debuggerRedactedIdentifiers;
869+
private final Set<String> debuggerRedactionExcludedIdentifiers;
868870
private final String debuggerRedactedTypes;
869871
private final boolean debuggerSymbolEnabled;
870872
private final boolean debuggerSymbolForceUpload;
@@ -1957,6 +1959,8 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment())
19571959
debuggerCaptureTimeout =
19581960
configProvider.getInteger(DEBUGGER_CAPTURE_TIMEOUT, DEFAULT_DEBUGGER_CAPTURE_TIMEOUT);
19591961
debuggerRedactedIdentifiers = configProvider.getString(DEBUGGER_REDACTED_IDENTIFIERS, null);
1962+
debuggerRedactionExcludedIdentifiers =
1963+
tryMakeImmutableSet(configProvider.getList(DEBUGGER_REDACTION_EXCLUDED_IDENTIFIERS));
19601964
debuggerRedactedTypes = configProvider.getString(DEBUGGER_REDACTED_TYPES, null);
19611965
debuggerSymbolEnabled =
19621966
configProvider.getBoolean(DEBUGGER_SYMBOL_ENABLED, DEFAULT_DEBUGGER_SYMBOL_ENABLED);
@@ -3399,6 +3403,10 @@ public String getDebuggerRedactedIdentifiers() {
33993403
return debuggerRedactedIdentifiers;
34003404
}
34013405

3406+
public Set<String> getDebuggerRedactionExcludedIdentifiers() {
3407+
return debuggerRedactionExcludedIdentifiers;
3408+
}
3409+
34023410
public String getDebuggerRedactedTypes() {
34033411
return debuggerRedactedTypes;
34043412
}

0 commit comments

Comments
 (0)