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

Nicolas Capponi
18.36.2016 b5f211cba2660529048afc4ebd37b1903c3ea4ac
OPENDJ-2987 Use OID instead of full ObjectClass to detect multiple updates of the same objectclass in a modification

Improves the error message when parsing oid for any schema element
3 files modified
51 ■■■■■ changed files
opendj-server-legacy/src/main/java/org/opends/server/backends/SchemaBackend.java 16 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/types/Schema.java 25 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/messages/org/opends/messages/schema.properties 10 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/backends/SchemaBackend.java
@@ -1587,22 +1587,18 @@
      for (ByteString v : a)
      {
        ObjectClass oc;
        String oid;
        try
        {
          oc = schema.parseObjectClass(v.toString());
          oid = schema.parseOID(v.toString(), ResultCode.INVALID_ATTRIBUTE_SYNTAX, ERR_PARSING_OBJECTCLASS_OID);
        }
        catch (DirectoryException de)
        {
          logger.traceException(de);
          LocalizableMessage message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_OBJECTCLASS.get(
              v, de.getMessageObject());
          throw new DirectoryException(
                         ResultCode.INVALID_ATTRIBUTE_SYNTAX, message, de);
          throw de;
        }
        if (objectClass.getOID().equals(oc.getOID()))
        if (objectClass.getOID().equals(oid))
        {
          // We found a match where the objectClass is added back later, so we
          // don't need to do anything else here.
@@ -2492,7 +2488,7 @@
  {
    // Check if there is an existing syntax with this oid.
    String oid =
        Schema.parseOID(definition, ResultCode.INVALID_ATTRIBUTE_SYNTAX, ERR_ATTR_SYNTAX_LDAPSYNTAX_EMPTY_VALUE);
        Schema.parseOID(definition, ResultCode.INVALID_ATTRIBUTE_SYNTAX, ERR_PARSING_LDAP_SYNTAX_OID);
    // We allow only unimplemented syntaxes to be substituted.
    if (schema.hasSyntax(oid))
@@ -2547,7 +2543,7 @@
     * hence never deleted.
     */
    String oid =
        Schema.parseOID(definition, ResultCode.INVALID_ATTRIBUTE_SYNTAX, ERR_ATTR_SYNTAX_LDAPSYNTAX_EMPTY_VALUE);
        Schema.parseOID(definition, ResultCode.INVALID_ATTRIBUTE_SYNTAX, ERR_PARSING_LDAP_SYNTAX_OID);
    LDAPSyntaxDescription removeLSD = schema.getLdapSyntaxDescription(oid);
    if (removeLSD == null)
opendj-server-legacy/src/main/java/org/opends/server/types/Schema.java
@@ -16,8 +16,6 @@
 */
package org.opends.server.types;
import static org.opends.messages.SchemaMessages.ERR_ATTR_SYNTAX_MRUSE_EMPTY_VALUE;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
@@ -42,7 +40,7 @@
import java.util.concurrent.locks.ReentrantLock;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.LocalizableMessageDescriptor.Arg0;
import org.forgerock.i18n.LocalizableMessageDescriptor.Arg1;
import org.forgerock.i18n.LocalizedIllegalArgumentException;
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.forgerock.opendj.ldap.AttributeDescription;
@@ -507,19 +505,28 @@
    }
  }
  private String parseObjectClassOID(String definition) throws DirectoryException
  /**
   * Retrieves the OID of the provided object class definition.
   *
   * @param definition
   *            Definition of an object class.
   * @return the OID of the object class
   * @throws DirectoryException
   *            If the definition couldn't be parsed.
   */
  public String parseObjectClassOID(String definition) throws DirectoryException
  {
    return parseOID(definition, ResultCode.INVALID_ATTRIBUTE_SYNTAX, ERR_ATTR_SYNTAX_OBJECTCLASS_EMPTY_VALUE);
    return parseOID(definition, ResultCode.INVALID_ATTRIBUTE_SYNTAX, ERR_PARSING_OBJECTCLASS_OID);
  }
  private String parseAttributeTypeOID(String definition) throws DirectoryException
  {
    return parseOID(definition, ResultCode.INVALID_ATTRIBUTE_SYNTAX, ERR_ATTR_SYNTAX_ATTRTYPE_EMPTY_VALUE);
    return parseOID(definition, ResultCode.INVALID_ATTRIBUTE_SYNTAX, ERR_PARSING_ATTRIBUTE_TYPE_OID);
  }
  private String parseMatchingRuleUseOID(String definition) throws DirectoryException
  {
    return parseOID(definition, ResultCode.INVALID_ATTRIBUTE_SYNTAX, ERR_ATTR_SYNTAX_MRUSE_EMPTY_VALUE);
    return parseOID(definition, ResultCode.INVALID_ATTRIBUTE_SYNTAX, ERR_PARSING_MATCHING_RULE_USE_OID);
  }
  /**
@@ -536,7 +543,7 @@
   * @throws DirectoryException
   *           If a problem occurs while parsing the definition
   */
  public static String parseOID(String definition, ResultCode parsingErrorResultCode, Arg0 parsingErrorMsg)
  public static String parseOID(String definition, ResultCode parsingErrorResultCode, Arg1<Object> parsingErrorMsg)
      throws DirectoryException
  {
    try
@@ -565,7 +572,7 @@
    }
    catch (IndexOutOfBoundsException e)
    {
      throw new DirectoryException(parsingErrorResultCode, parsingErrorMsg.get(), e);
      throw new DirectoryException(parsingErrorResultCode, parsingErrorMsg.get(definition), e);
    }
  }
opendj-server-legacy/src/messages/org/opends/messages/schema.properties
@@ -501,4 +501,12 @@
ERR_MATCHING_RULE_USE_CANNOT_REGISTER_342=Matching rule use could not be \
 registered from definition: %s
ERR_OBJECT_CLASS_CANNOT_REGISTER_343=Object class could not be \
 registered from definition: %s
 registered from definition: %s
ERR_PARSING_OBJECTCLASS_OID_344=Unable to parse the OID from the provided definition \
 of objectclass: '%s'
ERR_PARSING_ATTRIBUTE_TYPE_OID_345=Unable to parse the OID from the provided definition \
 of attribute type: '%s'
ERR_PARSING_LDAP_SYNTAX_OID_346=Unable to parse the OID from the provided definition \
 of ldap syntax: '%s'
ERR_PARSING_MATCHING_RULE_USE_OID_347=Unable to parse the OID from the provided definition \
 of matching rule use: '%s'