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

neil_a_wilson
09.08.2007 319d06155b26a9ae793a000d4efca619272b01b2
Fix a problem that prevented the server from handling attribute options in a
case-insensitive manner.

OpenDS Issue Number: 1348
3 files modified
62 ■■■■ changed files
opendj-sdk/opends/src/server/org/opends/server/types/Attribute.java 32 ●●●● patch | view | raw | blame | history
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/CompareOperationTestCase.java 19 ●●●●● patch | view | raw | blame | history
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/types/SearchFilterTests.java 11 ●●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/server/org/opends/server/types/Attribute.java
@@ -59,16 +59,20 @@
  // The attribute type for this attribute.
  private AttributeType attributeType;
  private final AttributeType attributeType;
  // The set of values for this attribute.
  private LinkedHashSet<AttributeValue> values;
  // The set of options for this attribute.
  private LinkedHashSet<String> options;
  private final LinkedHashSet<String> options;
  // The set of options for this attribute, formatted in all lowercase
  // characters.
  private final LinkedHashSet<String> lowerOptions;
  // The name of this attribute as provided by the end user.
  private String name;
  private final String name;
@@ -84,6 +88,8 @@
    this.name          = attributeType.getPrimaryName();
    this.options       = new LinkedHashSet<String>(0);
    this.values        = new LinkedHashSet<AttributeValue>();
    lowerOptions = options;
  }
@@ -101,6 +107,8 @@
    this.name          = name;
    this.options       = new LinkedHashSet<String>(0);
    this.values        = new LinkedHashSet<AttributeValue>();
    lowerOptions = options;
  }
@@ -120,6 +128,8 @@
    this.name          = name;
    this.options       = new LinkedHashSet<String>(0);
    lowerOptions = options;
    if (values == null)
    {
      this.values = new LinkedHashSet<AttributeValue>();
@@ -150,6 +160,8 @@
    this.values.add(new AttributeValue(this.attributeType,
                                       valueString));
    this.options = new LinkedHashSet<String>(0);
    lowerOptions = options;
  }
@@ -173,10 +185,16 @@
    if (options == null)
    {
      this.options = new LinkedHashSet<String>(0);
      lowerOptions = options;
    }
    else
    {
      this.options = options;
      lowerOptions = new LinkedHashSet<String>();
      for (String option : options)
      {
        lowerOptions.add(toLowerCase(option));
      }
    }
    if (values == null)
@@ -237,7 +255,7 @@
   */
  public boolean hasOption(String option)
  {
    return options.contains(option);
    return lowerOptions.contains(toLowerCase(option));
  }
@@ -250,7 +268,7 @@
   */
  public boolean hasOptions()
  {
    return ((options != null) && (! options.isEmpty()));
    return (! options.isEmpty());
  }
@@ -275,7 +293,7 @@
    for (String option : options)
    {
      if (! this.options.contains(option))
      if (! lowerOptions.contains(toLowerCase(option)))
      {
        return false;
      }
@@ -316,7 +334,7 @@
    for (String s : options)
    {
      if (! this.options.contains(s))
      if (! lowerOptions.contains(toLowerCase(s)))
      {
        return false;
      }
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/CompareOperationTestCase.java
@@ -398,6 +398,25 @@
  }
  @Test
  public void testCompareOptions3()
  {
    InternalClientConnection conn =
         InternalClientConnection.getRootConnection();
    CompareOperation compareOperation =
         new CompareOperation(conn, InternalClientConnection.nextOperationID(),
                              InternalClientConnection.nextMessageID(),
                              new ArrayList<Control>(),
                              new ASN1OctetString(entry.getDN().toString()),
                              "givenName;lAnG-En",
                              new ASN1OctetString("Rodney"));
    compareOperation.run();
    assertEquals(compareOperation.getResultCode(),
                 ResultCode.COMPARE_TRUE);
  }
  @Test
  public void testCompareTrueAssertion() throws Exception
  {
    InvocationCounterPlugin.resetAllCounters();
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/types/SearchFilterTests.java
@@ -369,15 +369,18 @@
            // attribute options
            {JOHN_SMITH_LDIF, "(cn;lang-en=Jonathan Smith)", true},
            {JOHN_SMITH_LDIF, "(cn;lang-EN=Jonathan Smith)", true},
            {JOHN_SMITH_LDIF, "(cn;lang-en=Jonathan Smithe)", false},
            {JOHN_SMITH_LDIF, "(cn;lang-fr=Jonathan Smith)", false},
            {JOHN_SMITH_LDIF, "(cn;lang-en=*jon*an*)", true},
            {JOHN_SMITH_LDIF, "(cn;lAnG-En=*jon*an*)", true},
            // attribute subtypes.  Enable this once 593 is fixed.
//            {JOHN_SMITH_LDIF, "(name=John Smith)", true},
//            {JOHN_SMITH_LDIF, "(name=*Smith*)", true},
//            {JOHN_SMITH_LDIF, "(name;lang-en=Jonathan Smith)", true},  // ? maybe not
//            {JOHN_SMITH_LDIF, "(name;lang-en=*Jonathan*)", true},  // ? maybe not
            {JOHN_SMITH_LDIF, "(name=John Smith)", true},
            {JOHN_SMITH_LDIF, "(name=*Smith*)", true},
            {JOHN_SMITH_LDIF, "(name;lang-en=Jonathan Smith)", true},
            {JOHN_SMITH_LDIF, "(name;lang-EN=Jonathan Smith)", true},
            {JOHN_SMITH_LDIF, "(name;lang-en=*Jonathan*)", true},
            // Enable this once
//            {JOHN_SMITH_LDIF, "(cn=*Jo**i*th*)", true},