[ 
https://issues.apache.org/jira/browse/KNOX-3562?focusedWorklogId=1054019&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-1054019
 ]

ASF GitHub Bot logged work on KNOX-3562:
----------------------------------------

                Author: ASF GitHub Bot
            Created on: 11/Nov/26 10:40
            Start Date: 11/Nov/26 10:40
    Worklog Time Spent: 10m 
      Work Description: smolnar82 commented on code in PR #1504:
URL: https://github.com/apache/knox/pull/1504#discussion_r4536840200


##########
gateway-server/src/main/java/org/apache/knox/gateway/services/ldap/KnoxLDAPServerManager.java:
##########
@@ -527,10 +527,10 @@ private void createBaseEntriesForDn(SchemaManager 
schemaManager, String dn) thro
         if (!directoryService.getAdminSession().exists(baseDnName)) {
             Entry baseDnEntry = new DefaultEntry(schemaManager);
             baseDnEntry.setDn(baseDnName);
-            baseDnEntry.add("objectClass", "top", "domain");
-            // Extract dc value from baseDn (e.g., "dc=proxy,dc=com" -> 
"proxy")
-            String dcValue = dn.split(",")[0].split("=")[1];
-            baseDnEntry.add("dc", dcValue);
+            // An entry must have at least one STRUCTURAL class, which 
'top'/'extensibleObject' alone are not.
+            // 'locality' is a STRUCTURAL objectClass with no MUST attributes; 
'extensibleObject'
+            // (AUXILIARY) then permits whatever attribute the base DN's RDN 
uses (dc, cn, ou, o, ...).
+            baseDnEntry.add("objectClass", "top", "locality", 
"extensibleObject");

Review Comment:
   This method also creates the proxy root (`gateway.ldap.base.dn`), so with 
this change `dc=proxy,dc=com` becomes `locality`/`extensibleObject` instead of 
`domain` on fresh installs. Existing installs keep `domain`, because the saved 
entry isn't recreated. Could we keep `domain` when the RDN is `dc` and only use 
the `locality` + `extensibleObject` fallback for other RDN types (`cn`, `ou`, 
…)? Optionally `ou` → `organizationalUnit` and `o` → `organization`.



##########
gateway-server/src/test/java/org/apache/knox/gateway/services/ldap/KnoxLDAPServerManagerTest.java:
##########
@@ -398,6 +398,58 @@ public void testStartWithLdapProxyBackend() throws 
Exception {
                 new Dn(serverManager.directoryService.getSchemaManager(), 
interceptor.getBackend().getBaseDn()));
     }
 
+    @Test
+    public void testStartWithLdapProxyBackendWithCnBaseDn() throws Exception {

Review Comment:
   This test and `testStartWithLdapProxyBackendWithOuBaseDn` (line 428) are 
copies of `testStartWithLdapProxyBackend`. Could they be one parameterized 
test? It would also help to assert the created entry's objectClass, not only 
that the partition exists.



##########
gateway-server/src/test/java/org/apache/knox/gateway/services/ldap/KnoxLDAPServerManagerTest.java:
##########
@@ -398,6 +398,58 @@ public void testStartWithLdapProxyBackend() throws 
Exception {
                 new Dn(serverManager.directoryService.getSchemaManager(), 
interceptor.getBackend().getBaseDn()));
     }
 
+    @Test
+    public void testStartWithLdapProxyBackendWithCnBaseDn() throws Exception {
+        GatewayConfig mockConfig = 
EasyMock.createNiceMock(GatewayConfig.class);
+        
expect(mockConfig.getGatewayDataDir()).andReturn(tempWorkDir.getParent()).anyTimes();

Review Comment:
   `getGatewayDataDir()` returns `tempWorkDir.getParent()`, so the 
`ldap-server` work dir is shared and survives between runs. When I ran these 
new tests without the fix they passed, because the entry was still saved from 
an earlier run. On a clean dir they fail correctly with `ERR_277`. This is 
older than your PR, but returning `tempWorkDir.getAbsolutePath()` would make 
these regression tests reliable on dev machines.
   





Issue Time Tracking
-------------------

    Worklog Id:     (was: 1054019)
    Time Spent: 0.5h  (was: 20m)

> Accept cn for backend search base dn
> ------------------------------------
>
>                 Key: KNOX-3562
>                 URL: https://issues.apache.org/jira/browse/KNOX-3562
>             Project: Apache Knox
>          Issue Type: Bug
>          Components: LDAP
>    Affects Versions: 3.0.0
>            Reporter: David Han
>            Assignee: David Han
>            Priority: Major
>             Fix For: 3.1.0
>
>          Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> The LDAP Proxy creates base entries for the configured backend DNs. The code 
> is limited to handling dc values only. The LDAP Proxy doesn't really care 
> what the value of the backend base DN is since it's passed on through to the 
> backend. We do need to create the DN in the LDAP Proxy so that the searches 
> for the backend DN are accepted. Loosen the restrictions on DN to accept cn 
> values as well.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to