Hi again!

I have modified the LDAP API to be able to deal with the attributeType properly when we have a SchemaManager, and to do so in a more user friendly way.

Here is thge modified original test:

    @Test
    public void testMinimalEqualityRequest() throws Exception {
SearchRequestDsml searchRequest = new SearchRequestDsml(LdapApiServiceFactory.getSingleton());

        // Create the SchemaManager instance
        SchemaManager schemaManager = new DefaultSchemaManager();

        // Use it as a parameter so that the filter get properly parsed
searchRequest.setFilter( schemaManager, "(uid=SomeArbitraryBenignString)" );


        BatchRequestDsml batchRequest = new BatchRequestDsml();
        batchRequest.addRequest(searchRequest);
        String dsmlString = batchRequest.toDsml();

        System.out.print( dsmlString );
    }

which prints out the expected result:

<?xml version="1.0" encoding="UTF-8"?>
<batchRequest>
   <searchRequest derefAliases="derefAlways">
      <filter>
         <equalityMatch name="uid">
            <value>SomeArbitraryBenignString</value>
         </equalityMatch>
      </filter>
   </searchRequest>
</batchRequest>

It will most certainly be included in 2.1.6.


On 04/12/2023 21:18, Patrick Peer wrote:
Hello!

I recently upgraded the version of org.apache.directory.api:api-all from 2.1.0 to 2.1.5 in the dependencies of our product, which resulted in some test failures on my end. As it seems, values for equality filters are not set in the request anymore. For your convenience, I cobbled together a minimal test case to reproduce the condition [1]. It works with Version 2.1.0 and does not work with 2.1.5.

Upon further investigation, I think I found some issues in org.apache.directory.api.dsmlv2.request.SearchRequestDsml.toDsml(Element, ExprNode)@2.1.5: + On line 559 value.isHumanReadable() is queried to decide whether to use the value as is, or to encode it in base64. => This seems broken, since, as far as I can tell, the org.apache.directory.api.ldap.model.entry.Value.isHR flag is always false at this particular point in the code. + org.apache.directory.api.dsmlv2.ParserUtils.base64Encode(Object) only yields base64 values for byte[] and String, however here a org.apache.directory.api.ldap.model.entry.Value is passed, which will always result in an empty String.

The corresponding commit should be [2].

Do you agree that this is a bug, and should I jump through the hoops to open a Jira issue, or is there an alternative/intended way to work around this?

Cheers,
Patrick Peer



[1]
@Test
public void testMinimalEqualityRequest() throws Exception {
    SearchRequestDsml searchRequest = new SearchRequestDsml(LdapApiServiceFactory.getSingleton());
     searchRequest.setFilter("(uid=SomeArbitraryBenignString)");

     BatchRequestDsml batchRequest = new BatchRequestDsml();
     batchRequest.addRequest(searchRequest);
     String dsmlString = batchRequest.toDsml();

     assertThat(dsmlString).contains("SomeArbitraryBenignString");
}

[2] https://github.com/apache/directory-ldap-api/commit/1dd1248d33ffed80cc225e76b2769e4558bbc859 <https://github.com/apache/directory-ldap-api/commit/1dd1248d33ffed80cc225e76b2769e4558bbc859>

--
*Emmanuel Lécharny* P. +33 (0)6 08 33 32 61
[email protected]

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to