5454import org .elasticsearch .xpack .core .security .authc .Authentication ;
5555import org .elasticsearch .xpack .core .security .authc .AuthenticationContext ;
5656import org .elasticsearch .xpack .core .security .authc .Subject ;
57+ import org .elasticsearch .xpack .core .security .authc .esnative .NativeRealmSettings ;
58+ import org .elasticsearch .xpack .core .security .authc .file .FileRealmSettings ;
5759import org .elasticsearch .xpack .core .security .user .User ;
5860import org .elasticsearch .xpack .security .support .SecurityIndexManager ;
5961
@@ -98,7 +100,6 @@ public void getProfile(String uid, @Nullable Set<String> dataKeys, ActionListene
98100 }
99101
100102 // TODO: with request when we take request body for profile activation
101-
102103 /**
103104 * Create a new profile or update an existing profile for the user of the given Authentication.
104105 * @param authentication This is the object from which the profile will be created or updated.
@@ -259,8 +260,10 @@ void getVersionedDocument(Subject subject, ActionListener<VersionedDocument> lis
259260 final BoolQueryBuilder boolQuery = QueryBuilders .boolQuery ()
260261 .filter (QueryBuilders .termQuery ("user_profile.user.username" , subject .getUser ().principal ()));
261262 if (subject .getRealm ().getDomain () == null ) {
262- boolQuery .filter (QueryBuilders .termQuery ("user_profile.user.realm.name" , subject .getRealm ().getName ()))
263- .filter (QueryBuilders .termQuery ("user_profile.user.realm.type" , subject .getRealm ().getType ()));
263+ boolQuery .filter (QueryBuilders .termQuery ("user_profile.user.realm.type" , subject .getRealm ().getType ()));
264+ if (false == isFileOrNativeRealm (subject .getRealm ().getType ())) {
265+ boolQuery .filter (QueryBuilders .termQuery ("user_profile.user.realm.name" , subject .getRealm ().getName ()));
266+ }
264267 } else {
265268 logger .debug (
266269 () -> new ParameterizedMessage (
@@ -271,11 +274,12 @@ void getVersionedDocument(Subject subject, ActionListener<VersionedDocument> lis
271274 )
272275 );
273276 subject .getRealm ().getDomain ().realms ().forEach (realmIdentifier -> {
274- boolQuery .should (
275- QueryBuilders .boolQuery ()
276- .filter (QueryBuilders .termQuery ("user_profile.user.realm.name" , realmIdentifier .getName ()))
277- .filter (QueryBuilders .termQuery ("user_profile.user.realm.type" , realmIdentifier .getType ()))
278- );
277+ final BoolQueryBuilder perRealmQuery = QueryBuilders .boolQuery ()
278+ .filter (QueryBuilders .termQuery ("user_profile.user.realm.type" , realmIdentifier .getType ()));
279+ if (false == isFileOrNativeRealm (realmIdentifier .getType ())) {
280+ perRealmQuery .filter (QueryBuilders .termQuery ("user_profile.user.realm.name" , realmIdentifier .getName ()));
281+ }
282+ boolQuery .should (perRealmQuery );
279283 });
280284 boolQuery .minimumShouldMatch (1 );
281285 }
@@ -489,6 +493,10 @@ private ProfileDocument updateWithSubject(ProfileDocument doc, Subject subject)
489493 );
490494 }
491495
496+ private boolean isFileOrNativeRealm (String realmType ) {
497+ return FileRealmSettings .TYPE .equals (realmType ) || NativeRealmSettings .TYPE .equals (realmType );
498+ }
499+
492500 // Package private for testing
493501 record VersionedDocument (ProfileDocument doc , long primaryTerm , long seqNo ) {
494502
0 commit comments