mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Jean-Noel Rouvignac
22.58.2013 97cfcdaa5cf2900db577a9639a1342bf960660fc
OPENDJ-735 (CR-1310) Server does not support absolute true or false filters

Applied Matt's suggested fix in org.opends.server.types.RawFilter.decodeCompoundFilter(ASN1Reader).
Added 2 unit tests.
2 files modified
29 ■■■■■ changed files
opends/src/server/org/opends/server/types/RawFilter.java 12 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPFilter.java 17 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/types/RawFilter.java
@@ -23,6 +23,7 @@
 *
 *
 *      Copyright 2006-2009 Sun Microsystems, Inc.
 *      Portions Copyright 2013 ForgeRock AS
 */
package org.opends.server.types;
import org.opends.messages.Message;
@@ -32,12 +33,12 @@
import java.util.ArrayList;
import java.io.IOException;
import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.protocols.asn1.*;
import org.opends.server.protocols.ldap.LDAPFilter;
import static org.opends.server.loggers.debug.DebugLogger.*;
import org.opends.server.loggers.debug.DebugTracer;
import static org.opends.messages.ProtocolMessages.*;
import static org.opends.server.loggers.debug.DebugLogger.*;
import static org.opends.server.protocols.ldap.LDAPConstants.*;
import static org.opends.server.protocols.ldap.LDAPResultCode.*;
import static org.opends.server.util.StaticUtils.*;
@@ -636,12 +637,12 @@
    try
    {
      reader.readStartSequence();
      // Should have atleast 1 filter.
      do
      // Should have at least 1 filter
      // could also be an absolute true/false filter
      while (reader.hasNextElement())
      {
        filterComponents.add(LDAPFilter.decode(reader));
      }
      while(reader.hasNextElement());
      reader.readEndSequence();
    }
    catch (LDAPException le)
@@ -1135,6 +1136,7 @@
   *
   * @return  A string representation of this search filter.
   */
  @Override
  public String toString()
  {
    StringBuilder buffer = new StringBuilder();
opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPFilter.java
@@ -23,10 +23,12 @@
 *
 *
 *      Copyright 2006-2008 Sun Microsystems, Inc.
 *      Portions Copyright 2011 ForgeRock AS
 *      Portions Copyright 2011-2013 ForgeRock AS
 */
package org.opends.server.protocols.ldap;
import java.util.ArrayList;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeTest;
@@ -36,8 +38,7 @@
import org.opends.server.protocols.asn1.ASN1;
import org.opends.server.protocols.asn1.ASN1Reader;
import static org.testng.Assert.assertEquals;
import java.util.ArrayList;
import static org.testng.Assert.*;
public class TestLDAPFilter extends LdapTestCase
{
@@ -195,17 +196,19 @@
        {
            "(ds-sync-conflict=uid=\\5c+3904211775265,ou=SharedAddressBook,cn=1038372,dc=cab)",
            LDAPFilter.createEqualityFilter("ds-sync-conflict",
                    ByteString.valueOf("uid=\\+3904211775265,ou=SharedAddressBook,cn=1038372,dc=cab")) }
                    ByteString.valueOf("uid=\\+3904211775265,ou=SharedAddressBook,cn=1038372,dc=cab")) },
      // OPENDJ-735
      { "(&)", LDAPFilter.createANDFilter(new ArrayList<RawFilter>()) },
      // OPENDJ-735
      { "(|)", LDAPFilter.createORFilter(new ArrayList<RawFilter>()) }
    };
  }
  @Test(dataProvider = "filterstrings")
  public void testDecode(String filterStr, LDAPFilter filter) throws Exception
  {
    //LDAPFilter decodedFilter = LDAPFilter.decode(filterStr);
    //System.out.println(decodedFilter.);
    //System.out.println(filter.toString());
    LDAPFilter decoded = LDAPFilter.decode(filterStr);
    assertEquals(decoded.toString(), filter.toString());
    assertEquals(decoded.getAssertionValue(), filter.getAssertionValue());