Dbeaver/pro#7192 ldap case insensitivity (#3907)

* dbeaver/pro#7192 ldap case insensitivity

* dbeaver/pro#7192 ldap case-insensitive matching

* dbeaver/pro#7192 case insensitive from auth descriptor

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
This commit is contained in:
Ruslan Musaev
2025-11-21 09:23:28 +01:00
committed by GitHub
co-authored by Evgenia
parent 24b7b6021d
commit dc5f86c40c
2 changed files with 18 additions and 5 deletions
@@ -418,10 +418,10 @@ public class LdapAuthProvider implements SMAuthProviderExternal<SMSession>, SMBr
private String buildFullUserDN(String userName, LdapSettings ldapSettings) {
String fullUserDN = userName;
if (!fullUserDN.startsWith(ldapSettings.getUserIdentifierAttr())) {
if (!CommonUtils.startsWithIgnoreCase(fullUserDN, ldapSettings.getUserIdentifierAttr())) {
fullUserDN = String.join("=", ldapSettings.getUserIdentifierAttr(), userName);
}
if (CommonUtils.isNotEmpty(ldapSettings.getBaseDN()) && !fullUserDN.endsWith(ldapSettings.getBaseDN())) {
if (CommonUtils.isNotEmpty(ldapSettings.getBaseDN()) && !CommonUtils.endsWithIgnoreCase(fullUserDN, ldapSettings.getBaseDN())) {
fullUserDN = String.join(",", fullUserDN, ldapSettings.getBaseDN());
}
@@ -2577,7 +2577,8 @@ public class CBEmbeddedSecurityController<T extends ServletAuthApplication>
.flatMap(externalTeamId -> findTeamByExternalTeamId(
allTeams,
externalTeamIdMetadataFieldName,
externalTeamId
externalTeamId,
authProvider.isCaseInsensitive()
).stream())
.map(SMTeam::getTeamId)
.toArray(String[]::new);
@@ -2614,17 +2615,29 @@ public class CBEmbeddedSecurityController<T extends ServletAuthApplication>
}
@NotNull
private List<SMTeam> findTeamByExternalTeamId(SMTeam[] allTeams, String externalGroupParameterName, String groupId) {
private List<SMTeam> findTeamByExternalTeamId(
SMTeam[] allTeams,
String externalGroupParameterName,
String groupId,
boolean isCaseInsensitive
) {
List<SMTeam> result = new ArrayList<>();
for (SMTeam team : allTeams) {
String teamGroupId = team.getMetaParameters().get(externalGroupParameterName);
if (CommonUtils.equalObjects(teamGroupId, groupId)) {
if (matchesGroupId(teamGroupId, groupId, isCaseInsensitive)) {
result.add(team);
}
}
return result;
}
private boolean matchesGroupId(String teamGroupId, String groupId, boolean isCaseInsensitive) {
if (isCaseInsensitive) {
return teamGroupId != null && teamGroupId.equalsIgnoreCase(groupId);
}
return CommonUtils.equalObjects(teamGroupId, groupId);
}
private String readProviderConfigId(String authAttemptId, String authProviderId) throws DBException {
try (Connection dbCon = database.openConnection()) {