Skip to content

Commit a3d58f1

Browse files
Ensure usr.exists tag is not overridden by UsernameNotFoundException instrumentation (#8376)
1 parent 3fd5db0 commit a3d58f1

File tree

4 files changed

+25
-15
lines changed

4 files changed

+25
-15
lines changed

dd-java-agent/appsec/src/main/java/com/datadog/appsec/gateway/GatewayBridge.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,12 @@ private Flow<Void> onLoginEvent(
288288
segment.setTagTop("_dd.appsec.events." + eventName + ".auto.mode", mode.fullName(), true);
289289
}
290290

291+
if (exists != null) {
292+
if (mode == SDK || ctx.getUserLoginSource() != SDK) {
293+
segment.setTagTop("appsec.events." + eventName + ".usr.exists", exists, true);
294+
}
295+
}
296+
291297
final String user = anonymizeUser(mode, originalUser);
292298
if (user == null) {
293299
// can happen in custom events
@@ -312,10 +318,6 @@ private Flow<Void> onLoginEvent(
312318
segment.setTagTop("_dd.appsec.user.collection_mode", mode.fullName());
313319
}
314320

315-
if (exists != null) {
316-
segment.setTagTop("appsec.events." + eventName + ".usr.exists", exists, true);
317-
}
318-
319321
// update user span tags
320322
segment.setTagTop("appsec.events." + eventName + ".usr.login", user, true);
321323

dd-java-agent/appsec/src/test/groovy/com/datadog/appsec/gateway/GatewayBridgeSpecification.groovy

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1320,6 +1320,21 @@ class GatewayBridgeSpecification extends DDSpecification {
13201320
0 * eventDispatcher.publishDataEvent
13211321
}
13221322
1323+
void 'test onUserNotFound'() {
1324+
setup:
1325+
eventDispatcher.getDataSubscribers(_) >> nonEmptyDsInfo
1326+
1327+
when:
1328+
loginEventCB.apply(ctx, IDENTIFICATION, 'users.login.failure', exists, null, null)
1329+
1330+
then:
1331+
1 * traceSegment.setTagTop('appsec.events.users.login.failure.usr.exists', exists, true)
1332+
0 * eventDispatcher.publishDataEvent
1333+
1334+
where:
1335+
exists << [true, false]
1336+
}
1337+
13231338
void 'test configuration updates should reset cached subscriptions'() {
13241339
when:
13251340
requestSessionCB.apply(ctx, UUID.randomUUID().toString())

dd-java-agent/appsec/src/test/groovy/com/datadog/appsec/user/AppSecEventTrackerSpecification.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ class AppSecEventTrackerSpecification extends DDSpecification {
198198
199199
then:
200200
if (mode != DISABLED) {
201-
1 * traceSegment.setTagTop('appsec.events.users.login.failure.usr.exists', false)
201+
1 * loginEvent.apply(_ as RequestContext, mode, 'users.login.failure', false, null, null) >> NoopFlow.INSTANCE
202202
}
203203
0 * _
204204

internal-api/src/main/java/datadog/trace/api/appsec/AppSecEventTracker.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import datadog.trace.api.gateway.Flow;
1515
import datadog.trace.api.gateway.RequestContext;
1616
import datadog.trace.api.gateway.RequestContextSlot;
17-
import datadog.trace.api.internal.TraceSegment;
1817
import datadog.trace.bootstrap.ActiveSubsystems;
1918
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
2019
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
@@ -63,15 +62,9 @@ public void onUserNotFound(final UserIdCollectionMode mode) {
6362
if (!isEnabled(mode)) {
6463
return;
6564
}
66-
final AgentTracer.TracerAPI tracer = tracer();
67-
if (tracer == null) {
68-
return;
69-
}
70-
final TraceSegment segment = tracer.getTraceSegment();
71-
if (segment == null) {
72-
return;
73-
}
74-
segment.setTagTop("appsec.events.users.login.failure.usr.exists", false);
65+
dispatch(
66+
EVENTS.loginEvent(),
67+
(ctx, callback) -> callback.apply(ctx, mode, "users.login.failure", false, null, null));
7568
}
7669

7770
public void onUserEvent(final UserIdCollectionMode mode, final String userId) {

0 commit comments

Comments
 (0)