KEYCLOAK-19183
LDAPDn should use a static Pattern instead calling String.split with a regex
This commit is contained in:
parent
c7f8544b0c
commit
0c64d32b9b
1 changed files with 8 additions and 3 deletions
|
@ -22,6 +22,7 @@ import java.util.Collection;
|
|||
import java.util.Deque;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
|
@ -29,6 +30,10 @@ import java.util.stream.Collectors;
|
|||
*/
|
||||
public class LDAPDn {
|
||||
|
||||
private static final Pattern DN_PATTERN = Pattern.compile("(?<!\\\\),");
|
||||
private static final Pattern ENTRY_PATTERN = Pattern.compile("(?<!\\\\)\\+");
|
||||
private static final Pattern SUB_ENTRY_PATTERN = Pattern.compile("(?<!\\\\)=");
|
||||
|
||||
private final Deque<RDN> entries;
|
||||
|
||||
private LDAPDn() {
|
||||
|
@ -49,7 +54,7 @@ public class LDAPDn {
|
|||
if(dnString.trim().isEmpty())
|
||||
return dn;
|
||||
|
||||
String[] rdns = dnString.split("(?<!\\\\),");
|
||||
String[] rdns = DN_PATTERN.split(dnString);
|
||||
for (String entryStr : rdns) {
|
||||
if (entryStr.indexOf('+') == -1) {
|
||||
// This is 99.9% of cases where RDN consists of single key-value pair
|
||||
|
@ -57,7 +62,7 @@ public class LDAPDn {
|
|||
dn.addLast(new RDN(subEntry));
|
||||
} else {
|
||||
// This is 0.1% of cases where RDN consists of more key-value pairs like "uid=foo+cn=bar"
|
||||
String[] subEntries = entryStr.split("(?<!\\\\)\\+");
|
||||
String[] subEntries = ENTRY_PATTERN.split(entryStr);
|
||||
RDN entry = new RDN();
|
||||
for (String subEntryStr : subEntries) {
|
||||
SubEntry subEntry = parseSingleSubEntry(dn, subEntryStr);
|
||||
|
@ -72,7 +77,7 @@ public class LDAPDn {
|
|||
|
||||
// parse single sub-entry and add it to the "dn" . Assumption is that subentry is something like "uid=bar" and does not contain + character
|
||||
private static SubEntry parseSingleSubEntry(LDAPDn dn, String subEntryStr) {
|
||||
String[] rdn = subEntryStr.split("(?<!\\\\)=");
|
||||
String[] rdn = SUB_ENTRY_PATTERN.split(subEntryStr);
|
||||
if (rdn.length >1) {
|
||||
return new SubEntry(rdn[0].trim(), rdn[1].trim());
|
||||
} else {
|
||||
|
|
Loading…
Reference in a new issue