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

Jean-Noël Rouvignac
29.27.2016 a997a5af5785ee040a9ef2bca66904c7624c0b60
OPENDJ-2688 Upgrade: Error in matching rule when starting server after upgrade

Removed the configuration for the matching rules deleted in commit c2eaf97f09d246d92b8259687472304c5bab695c
4 files modified
106 ■■■■ changed files
opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/Upgrade.java 47 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeTasks.java 16 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeUtils.java 42 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/messages/org/opends/messages/tool.properties 1 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/Upgrade.java
@@ -580,6 +580,53 @@
            "ds-cfg-java-class: org.opends.server.extensions.BcryptPasswordStorageScheme",
            "ds-cfg-enabled: true"));
    /** See OPENDJ-2683 */
    register("4.0.0",
        deleteConfigEntry(INFO_UPGRADE_TASK_REMOVE_MATCHING_RULES.get(),
        "cn=Auth Password Exact Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=Bit String Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=Boolean Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=Case Exact Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=Case Exact Ordering Matching Rule,cn=Matching Rules,cn=config",
        "cn=Case Exact Substring Matching Rule,cn=Matching Rules,cn=config",
        "cn=Case Exact IA5 Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=Case Exact IA5 Substring Matching Rule,cn=Matching Rules,cn=config",
        "cn=Case Ignore Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=Case Ignore Ordering Matching Rule,cn=Matching Rules,cn=config",
        "cn=Case Ignore Substring Matching Rule,cn=Matching Rules,cn=config",
        "cn=Case Ignore IA5 Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=Case Ignore IA5 Substring Matching Rule,cn=Matching Rules,cn=config",
        "cn=Case Ignore List Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=Case Ignore List Substring Matching Rule,cn=Matching Rules,cn=config",
        "cn=Certificate Exact Matching Rule,cn=Matching Rules,cn=config",
        "cn=Directory String First Component Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=Distinguished Name Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=Double Metaphone Approximate Matching Rule,cn=Matching Rules,cn=config",
        "cn=Generalized Time Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=Generalized Time Ordering Matching Rule,cn=Matching Rules,cn=config",
        "cn=Integer Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=Integer Ordering Matching Rule,cn=Matching Rules,cn=config",
        "cn=Integer First Component Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=Keyword Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=Numeric String Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=Numeric String Ordering Matching Rule,cn=Matching Rules,cn=config",
        "cn=Numeric String Substring Matching Rule,cn=Matching Rules,cn=config",
        "cn=Object Identifier Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=Object Identifier First Component Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=Octet String Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=Octet String Ordering Matching Rule,cn=Matching Rules,cn=config",
        "cn=Octet String Substring Matching Rule,cn=Matching Rules,cn=config",
        "cn=Presentation Address Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=Protocol Information Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=Telephone Number Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=Telephone Number Substring Matching Rule,cn=Matching Rules,cn=config",
        "cn=Time Based Matching Rule,cn=Matching Rules,cn=config",
        "cn=Unique Member Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=User Password Exact Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=UUID Equality Matching Rule,cn=Matching Rules,cn=config",
        "cn=UUID Ordering Matching Rule,cn=Matching Rules,cn=config",
        "cn=Word Equality Matching Rule,cn=Matching Rules,cn=config"));
    /**
     * All upgrades will refresh the server configuration schema and generate a new upgrade folder.
     */
opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeTasks.java
@@ -195,20 +195,18 @@
  }
  /**
   * Returns a new upgrade task which deletes a config entry from the underlying
   * config file.
   * Returns a new upgrade task which deletes a config entry from the underlying config file.
   *
   * @param summary
   *          The summary of this upgrade task.
   * @param dnInLDIF
   *          The dn to delete in the form of LDIF.
   * @return A new upgrade task which applies an LDIF record to all
   *         configuration entries matching the provided filter.
   * @param dnsInLDIF
   *          The dns to delete in the form of LDIF.
   * @return A new upgrade task which applies an LDIF record to all configuration entries matching
   *         the provided filter.
   */
  public static UpgradeTask deleteConfigEntry(final LocalizableMessage summary,
      final String dnInLDIF)
  public static UpgradeTask deleteConfigEntry(final LocalizableMessage summary, final String... dnsInLDIF)
  {
    return updateConfigEntry(summary, null, ChangeOperationType.DELETE, dnInLDIF);
    return updateConfigEntry(summary, null, ChangeOperationType.DELETE, dnsInLDIF);
  }
  /**
opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeUtils.java
@@ -23,8 +23,10 @@
import java.io.FileReader;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.slf4j.LocalizedLogger;
@@ -401,13 +403,29 @@
      writer.writeComment(INFO_CONFIG_FILE_HEADER.get());
      writer.setWrapColumn(0);
      boolean entryAlreadyExist = false;
      DN ldifDN = null;
      if (filter == null && (changeType == ADD || changeType == DELETE))
      Set<DN> ldifDNs = new HashSet<>();
      if (filter == null)
      {
        // The first line should start with dn:
        ldifDN = DN.valueOf(ldifLines[0].replaceFirst("dn: ", ""));
        switch (changeType)
        {
        case ADD:
          // The first line should start with dn:
          ldifDN = DN.valueOf(removeDnPrefix(ldifLines[0]));
          ldifDNs.add(ldifDN);
          break;
        case DELETE:
          // All lines represent dns
          for (String dnLine : ldifLines)
          {
            ldifDNs.add(DN.valueOf(removeDnPrefix(dnLine)));
          }
          break;
        }
      }
      boolean entryAlreadyExist = false;
      final Filter f = filter != null ? filter : Filter.alwaysFalse();
      final Matcher matcher = f.matcher(schema);
      while (entryReader.hasNext())
@@ -424,8 +442,7 @@
                readLDIFLines(entryDN, changeType, ldifLines));
            entry = Entries.modifyEntryPermissive(entry, mr.getModifications());
            changeCount++;
            logger.debug(LocalizableMessage.raw(
                "The following entry has been modified : %s", entryDN));
            logger.debug(LocalizableMessage.raw("The following entry has been modified : %s", entryDN));
          }
          catch (Exception ex)
          {
@@ -433,7 +450,7 @@
          }
        }
        if (entryDN.equals(ldifDN))
        if (ldifDNs.remove(entryDN))
        {
          logger.debug(LocalizableMessage.raw("Entry %s found", entryDN));
          entryAlreadyExist = true;
@@ -442,8 +459,7 @@
          {
            entry = null;
            changeCount++;
            logger.debug(LocalizableMessage.raw(
                "The following entry has been deleted : %s", entryDN));
            logger.debug(LocalizableMessage.raw("The following entry has been deleted : %s", entryDN));
          }
        }
@@ -457,8 +473,7 @@
      {
        final AddRequest ar = Requests.newAddRequest(ldifLines);
        writer.writeEntry(ar);
        logger.debug(LocalizableMessage.raw("Entry successfully added %s in %s",
            ldifDN, original.getAbsolutePath()));
        logger.debug(LocalizableMessage.raw("Entry successfully added %s in %s", ldifDN, original.getAbsolutePath()));
        changeCount++;
      }
    }
@@ -485,6 +500,11 @@
    return changeCount;
  }
  private static String removeDnPrefix(String dnLine)
  {
    return dnLine.replaceFirst("dn: ", "");
  }
  /**
   * This task adds new attributes / object classes to the specified destination
   * file. The new attributes and object classes must be originally defined in
opendj-server-legacy/src/messages/org/opends/messages/tool.properties
@@ -2620,6 +2620,7 @@
INFO_UPGRADE_TASK_RENAME_JE_DB_DIR_20022=Renaming local-db backend directory '%s' to '%s'
INFO_UPGRADE_TASK_RENAME_JE_DB_DIR_WARNING_20023=You must reimport all your data into the PDB \
 backends in order to have a fully functional server
INFO_UPGRADE_TASK_REMOVE_MATCHING_RULES_2683=Removing configuration for matching rules
INFO_LDAP_CONN_PROMPT_SECURITY_LDAP=LDAP
INFO_LDAP_CONN_PROMPT_SECURITY_USE_SSL=LDAP with SSL