From dd8c650cbf1e43efbdf0c47863dafde443a6d055 Mon Sep 17 00:00:00 2001
From: vharseko <vharseko@3a-systems.ru>
Date: Thu, 02 Dec 2021 21:09:04 +0000
Subject: [PATCH] FIX DN escape 'Equal sign': (#201)

---
 opendj-core/src/test/java/org/forgerock/opendj/ldap/DNTestCase.java                          |   10 +++++-----
 opendj-core/src/main/java/org/forgerock/opendj/ldap/AVA.java                                 |    2 +-
 opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/authz/AuthzIdTemplateTest.java |    2 +-
 opendj-core/src/main/java/org/openidentityplatform/opendj/ldif/JSONEntryReader.java          |    9 +++++++--
 4 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/opendj-core/src/main/java/org/forgerock/opendj/ldap/AVA.java b/opendj-core/src/main/java/org/forgerock/opendj/ldap/AVA.java
index 935053a..937e305 100644
--- a/opendj-core/src/main/java/org/forgerock/opendj/ldap/AVA.java
+++ b/opendj-core/src/main/java/org/forgerock/opendj/ldap/AVA.java
@@ -167,7 +167,7 @@
                 } else {
                     if ((c == ' ' && si == length - 1)
                             || (c == '"' || c == '+' || c == ',' || c == ';' || c == '<'
-                            || c == '>' || c == '\\' || c == '\u0000')) {
+                            || c == '>' || c == '\\' || c == '\u0000' || c == '=')) {
                         builder.append('\\');
                     }
                     builder.append(c);
diff --git a/opendj-core/src/main/java/org/openidentityplatform/opendj/ldif/JSONEntryReader.java b/opendj-core/src/main/java/org/openidentityplatform/opendj/ldif/JSONEntryReader.java
index 4073fc8..7e6ef2e 100644
--- a/opendj-core/src/main/java/org/openidentityplatform/opendj/ldif/JSONEntryReader.java
+++ b/opendj-core/src/main/java/org/openidentityplatform/opendj/ldif/JSONEntryReader.java
@@ -47,8 +47,13 @@
     public Entry readEntry() throws DecodeException, IOException {
     	if (hasNext()) {
     		final Map<String,List<Map<String,String>>> entry=mapper.readValue(parser,new TypeReference<Map<String,List<Map<String,String>>>>() {});
-    		final Entry res=new LinkedHashMapEntry(entry.keySet().iterator().next());
-    		for (Map<String,String> attrs : entry.get(res.getName().toString())) {
+    		final String key=entry.keySet().iterator().next(); 
+    		final Entry res=new LinkedHashMapEntry(key);
+    		List<Map<String,String>> attrsArray=entry.get(res.getName().toString());
+    		if (attrsArray==null) {
+    			attrsArray=entry.get(key);
+    		}
+    		for (Map<String,String> attrs : attrsArray) {
     			for (java.util.Map.Entry<String,String> attr : attrs.entrySet()) {
     				res.addAttribute(attr.getKey(), attr.getValue());
 				}
diff --git a/opendj-core/src/test/java/org/forgerock/opendj/ldap/DNTestCase.java b/opendj-core/src/test/java/org/forgerock/opendj/ldap/DNTestCase.java
index 51046cb..9f1ebd0 100644
--- a/opendj-core/src/test/java/org/forgerock/opendj/ldap/DNTestCase.java
+++ b/opendj-core/src/test/java/org/forgerock/opendj/ldap/DNTestCase.java
@@ -105,9 +105,9 @@
             { "givenName=John+cn=Doe,ou=People,dc=example,dc=com",
                 "cn=doe+givenname=john,ou=people,dc=example,dc=com",
                 "givenName=John+cn=Doe,ou=People,dc=example,dc=com" },
-            { "givenName=John\\+cn=Doe,ou=People,dc=example,dc=com",
-                "givenname=john\\+cn=doe,ou=people,dc=example,dc=com",
-                "givenName=John\\+cn=Doe,ou=People,dc=example,dc=com" },
+            { "givenName=John\\+cn\\=Doe,ou=People,dc=example,dc=com",
+                "givenname=john\\+cn\\=doe,ou=people,dc=example,dc=com",
+                "givenName=John\\+cn\\=Doe,ou=People,dc=example,dc=com" },
             { "cn=Doe\\, John,ou=People,dc=example,dc=com",
                 "cn=doe\\, john,ou=people,dc=example,dc=com",
                 "cn=Doe\\, John,ou=People,dc=example,dc=com" },
@@ -1111,14 +1111,14 @@
         DN actual = DN.format("uid=%s,dc=test", "#cn=foo+sn=bar");
         DN expected = DN.valueOf("dc=test").child("uid", "#cn=foo+sn=bar");
         assertEquals(actual, expected);
-        assertEquals(actual.toString(), "uid=\\#cn=foo\\+sn=bar,dc=test");
+        assertEquals(actual.toString(), "uid=\\#cn\\=foo\\+sn\\=bar,dc=test");
     }
 
     /** Tests the {@link DN#escapeAttributeValue(Object)} method. */
     @Test
     public void testEscapeAttributeValue() {
         String actual = DN.escapeAttributeValue("#cn=foo+sn=bar");
-        assertEquals(actual, "\\#cn=foo\\+sn=bar");
+        assertEquals(actual, "\\#cn\\=foo\\+sn\\=bar");
     }
 
     /** Tests the {@link DN#toNormalizedByteString()} method. */
diff --git a/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/authz/AuthzIdTemplateTest.java b/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/authz/AuthzIdTemplateTest.java
index bfec765..0c99ca7 100644
--- a/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/authz/AuthzIdTemplateTest.java
+++ b/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/authz/AuthzIdTemplateTest.java
@@ -47,7 +47,7 @@
             {
                 // Should perform DN quoting.
                 "dn:uid={uid},ou={realm},dc=example,dc=com",
-                "uid=test.user,ou=test\\+cn=quoting,dc=example,dc=com",
+                "uid=test.user,ou=test\\+cn\\=quoting,dc=example,dc=com",
                 map("uid", "test.user", "realm", "test+cn=quoting")
             },
             {

--
Gitblit v1.10.0