keycloak-memoizeit

Details

diff --git a/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/model/LDAPDn.java b/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/model/LDAPDn.java
index c7fbe06..e47c897 100644
--- a/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/model/LDAPDn.java
+++ b/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/model/LDAPDn.java
@@ -2,6 +2,8 @@ package org.keycloak.federation.ldap.idm.model;
 
 import java.util.Deque;
 import java.util.LinkedList;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
@@ -10,12 +12,15 @@ public class LDAPDn {
 
     private final Deque<Entry> entries = new LinkedList<>();
 
+    private static final Pattern dnRegex = Pattern.compile("[^,\\\\]*(?:\\\\.[^,\\\\]*)");
+
     public static LDAPDn fromString(String dnString) {
         LDAPDn dn = new LDAPDn();
 
-        String[] rdns = dnString.split(",");
-        for (String entryStr : rdns) {
-            String[] rdn = entryStr.split("=");
+        Matcher dnMatches = dnRegex.matcher(dnString);
+
+        while (dnMatches.find()) {
+            String[] rdn = dnMatches.group(1).split("=");
             dn.addLast(rdn[0].trim(), rdn[1].trim());
         }