From 61be60eef8694b2c28386faf6dd2d7c4e842addd Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Thu, 16 Jun 2011 18:00:52 +0000
Subject: [PATCH] Fix OPENDJ-198: RFC 4512 compliance for ldap-toolkit

---
 opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/schema/GuideSyntaxImpl.java |   34 +++++++++++++++++++++-------------
 1 files changed, 21 insertions(+), 13 deletions(-)

diff --git a/opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/schema/GuideSyntaxImpl.java b/opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/schema/GuideSyntaxImpl.java
index e438696..efc4d81 100644
--- a/opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/schema/GuideSyntaxImpl.java
+++ b/opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/schema/GuideSyntaxImpl.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions copyright 2011 ForgeRock AS
  */
 
 package org.forgerock.opendj.ldap.schema;
@@ -54,6 +55,8 @@
    * Determines whether the provided string represents a valid criteria
    * according to the guide syntax.
    *
+   * @param schema
+   *          The schema in which this syntax is defined.
    * @param criteria
    *          The portion of the criteria for which to make the determination.
    * @param valueStr
@@ -64,7 +67,8 @@
    * @return <CODE>true</CODE> if the provided string does contain a valid
    *         criteria, or <CODE>false</CODE> if not.
    */
-  static boolean criteriaIsValid(final String criteria, final String valueStr,
+  static boolean criteriaIsValid(final Schema schema,
+      final String criteria, final String valueStr,
       final LocalizableMessageBuilder invalidReason)
   {
     // See if the criteria starts with a '!'. If so, then just evaluate
@@ -72,7 +76,8 @@
     char c = criteria.charAt(0);
     if (c == '!')
     {
-      return criteriaIsValid(criteria.substring(1), valueStr, invalidReason);
+      return criteriaIsValid(schema, criteria.substring(1), valueStr,
+          invalidReason);
     }
 
     // See if the criteria starts with a '('. If so, then find the
@@ -91,7 +96,7 @@
           if (depth == 0)
           {
             final String subCriteria = criteria.substring(1, i);
-            if (!criteriaIsValid(subCriteria, valueStr, invalidReason))
+            if (!criteriaIsValid(schema, subCriteria, valueStr, invalidReason))
             {
               return false;
             }
@@ -108,7 +113,8 @@
               c = criteria.charAt(i + 1);
               if (c == '|' || c == '&')
               {
-                return criteriaIsValid(criteria.substring(i + 2), valueStr,
+                return criteriaIsValid(schema,
+                    criteria.substring(i + 2), valueStr,
                     invalidReason);
               }
               else
@@ -152,7 +158,7 @@
           c = criteria.charAt(5);
           if (c == '|' || c == '&')
           {
-            return criteriaIsValid(criteria.substring(6), valueStr,
+            return criteriaIsValid(schema, criteria.substring(6), valueStr,
                 invalidReason);
           }
           else
@@ -176,7 +182,7 @@
           c = criteria.charAt(6);
           if (c == '|' || c == '&')
           {
-            return criteriaIsValid(criteria.substring(7), valueStr,
+            return criteriaIsValid(schema, criteria.substring(7), valueStr,
                 invalidReason);
           }
           else
@@ -230,7 +236,8 @@
       try
       {
         SchemaUtils.readOID(new SubstringReader(criteria
-            .substring(0, dollarPos)));
+            .substring(0, dollarPos)),
+            schema.allowMalformedNamesAndOptions());
       }
       catch (final DecodeException de)
       {
@@ -328,8 +335,8 @@
       c = criteria.charAt(endPos);
       if (c == '|' || c == '&')
       {
-        return criteriaIsValid(criteria.substring(endPos + 1), valueStr,
-            invalidReason);
+        return criteriaIsValid(schema,
+            criteria.substring(endPos + 1), valueStr, invalidReason);
       }
       else
       {
@@ -397,7 +404,7 @@
     final int sharpPos = valueStr.indexOf('#');
     if (sharpPos < 0)
     {
-      return criteriaIsValid(valueStr, valueStr, invalidReason);
+      return criteriaIsValid(schema, valueStr, valueStr, invalidReason);
     }
 
     // Get the objectclass and see if it is a valid name or OID.
@@ -412,7 +419,8 @@
 
     try
     {
-      SchemaUtils.readOID(new SubstringReader(ocName.substring(0, ocLength)));
+      SchemaUtils.readOID(new SubstringReader(ocName.substring(0, ocLength)),
+          schema.allowMalformedNamesAndOptions());
     }
     catch (final DecodeException de)
     {
@@ -421,7 +429,7 @@
     }
 
     // The rest of the value must be the criteria.
-    return criteriaIsValid(valueStr.substring(sharpPos + 1), valueStr,
-        invalidReason);
+    return criteriaIsValid(schema, valueStr.substring(sharpPos + 1),
+        valueStr, invalidReason);
   }
 }

--
Gitblit v1.10.0