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

coulbeck
30.38.2007 4a261fe8cd3300751284740534c91099604198f6
Fix for issue #1464: Getting errors exporting non-userRoot backend IDs.
This change fixes export-ldif on the schema backend, but disables it for the config and monitor backends.
3 files modified
154 ■■■■ changed files
opends/src/server/org/opends/server/backends/MonitorBackend.java 67 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/backends/SchemaBackend.java 82 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/extensions/ConfigFileHandler.java 5 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/backends/MonitorBackend.java
@@ -941,7 +941,9 @@
  public boolean supportsLDIFExport()
  {
    // We can export all the monitor entries as a point-in-time snapshot.
    return true;
    // TODO implementation of export is incomplete
    // TODO export-ldif reports nonsense for upTime etc.
    return false;
  }
@@ -953,6 +955,68 @@
                         LDIFExportConfig exportConfig)
         throws DirectoryException
  {
    // TODO export-ldif reports nonsense for upTime etc.
    configEntryDN = configEntry.getDN();
    // Get the set of user-defined attributes for the configuration entry.  Any
    // attributes that we don't recognize will be included directly in the base
    // monitor entry.
    userDefinedAttributes = new ArrayList<Attribute>();
    for (List<Attribute> attrs :
         configEntry.getEntry().getUserAttributes().values())
    {
      for (Attribute a : attrs)
      {
        if (! isMonitorConfigAttribute(a))
        {
          userDefinedAttributes.add(a);
        }
      }
    }
    for (List<Attribute> attrs :
         configEntry.getEntry().getOperationalAttributes().values())
    {
      for (Attribute a : attrs)
      {
        if (! isMonitorConfigAttribute(a))
        {
          userDefinedAttributes.add(a);
        }
      }
    }
    // Create the set of base DNs that we will handle.  In this case, it's just
    // the DN of the base monitor entry.
    try
    {
      baseMonitorDN = DN.decode(DN_MONITOR_ROOT);
    }
    catch (Exception e)
    {
      if (debugEnabled())
      {
        debugCaught(DebugLogLevel.ERROR, e);
      }
      int msgID = MSGID_MONITOR_CANNOT_DECODE_MONITOR_ROOT_DN;
      String message = getMessage(msgID, getExceptionMessage(e));
      throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                   message, msgID, e);
    }
    // Construct the set of objectclasses to include in the base monitor entry.
    monitorObjectClasses = new LinkedHashMap<ObjectClass,String>(2);
    ObjectClass topOC = DirectoryServer.getObjectClass(OC_TOP, true);
    monitorObjectClasses.put(topOC, OC_TOP);
    ObjectClass monitorOC = DirectoryServer.getObjectClass(OC_MONITOR_ENTRY,
                                                           true);
    monitorObjectClasses.put(monitorOC, OC_MONITOR_ENTRY);
    // Create the LDIF writer.
    LDIFWriter ldifWriter;
    try
@@ -1011,6 +1075,7 @@
    {
      try
      {
        // TODO implementation of export is incomplete
      }
      catch (Exception e)
      {
opends/src/server/org/opends/server/backends/SchemaBackend.java
@@ -246,12 +246,19 @@
  }
  /**
   * {@inheritDoc}
   * Initialization shared by multiple backend methods.
   * @param  configEntry  The configuration entry that contains the
   *                      information to use to initialize this
   *                      backend.
   * @param  baseDNs      The set of base DNs that have been
   *                      configured for this backend.
   * @throws  ConfigException  If an unrecoverable problem arises in
   *                           the process of performing the
   *                           initialization.
   */
  public void initializeBackend(ConfigEntry configEntry, DN[] baseDNs)
         throws ConfigException, InitializationException
  private void initializeCommon(ConfigEntry configEntry, DN[] baseDNs)
       throws ConfigException
  {
    // Make sure that a configuration entry was provided.  If not, then we will
    // not be able to complete initialization.
@@ -262,8 +269,8 @@
      throw new ConfigException(msgID, message);
    }
    configEntryDN = configEntry.getDN();
    SchemaBackendCfg cfg = getSchemaBackendCfg(configEntry);
    configEntryDN = configEntry.getDN();
    // Get all of the attribute types that we will use for schema elements.
    attributeTypesType =
@@ -295,6 +302,27 @@
    modifyTimestampType =
         DirectoryServer.getAttributeType(OP_ATTR_MODIFY_TIMESTAMP_LC, true);
    // Construct the set of objectclasses to include in the schema entry.
    schemaObjectClasses = new LinkedHashMap<ObjectClass,String>(3);
    schemaObjectClasses.put(DirectoryServer.getTopObjectClass(), OC_TOP);
    ObjectClass subentryOC = DirectoryServer.getObjectClass(OC_LDAP_SUBENTRY_LC,
                                                            true);
    schemaObjectClasses.put(subentryOC, OC_LDAP_SUBENTRY);
    ObjectClass subschemaOC = DirectoryServer.getObjectClass(OC_SUBSCHEMA,
                                                             true);
    schemaObjectClasses.put(subschemaOC, OC_SUBSCHEMA);
    // Define empty sets for the supported controls and features.
    supportedControls = new HashSet<String>(0);
    supportedFeatures = new HashSet<String>(0);
    configEntryDN = configEntry.getDN();
    this.baseDNs = baseDNs;
    creatorsName  = new AttributeValue(creatorsNameType, baseDNs[0].toString());
    modifiersName =
         new AttributeValue(modifiersNameType, baseDNs[0].toString());
@@ -340,9 +368,20 @@
    showAllAttributes = cfg.isShowAllAttributes();
    currentConfig = cfg;
  }
  /**
   * {@inheritDoc}
   */
  public void initializeBackend(ConfigEntry configEntry, DN[] baseDNs)
         throws ConfigException, InitializationException
  {
    initializeCommon(configEntry, baseDNs);
    // Register each of the suffixes with the Directory Server.  Also, register
    // the first one as the schema base.
    this.baseDNs = baseDNs;
    DirectoryServer.setSchemaDN(baseDNs[0]);
    for (int i=0; i < baseDNs.length; i++)
    {
@@ -365,24 +404,6 @@
    }
    // Construct the set of objectclasses to include in the schema entry.
    schemaObjectClasses = new LinkedHashMap<ObjectClass,String>(3);
    schemaObjectClasses.put(DirectoryServer.getTopObjectClass(), OC_TOP);
    ObjectClass subentryOC = DirectoryServer.getObjectClass(OC_LDAP_SUBENTRY_LC,
                                                            true);
    schemaObjectClasses.put(subentryOC, OC_LDAP_SUBENTRY);
    ObjectClass subschemaOC = DirectoryServer.getObjectClass(OC_SUBSCHEMA,
                                                             true);
    schemaObjectClasses.put(subschemaOC, OC_SUBSCHEMA);
    // Define an empty sets for the supported controls and features.
    supportedControls = new HashSet<String>(0);
    supportedFeatures = new HashSet<String>(0);
    // Identify any differences that may exist between the concatenated schema
    // file from the last online modification and the current schema files.  If
    // there are any differences, then they should be from making changes to the
@@ -494,8 +515,7 @@
    // Register with the Directory Server as a configurable component.
    currentConfig = cfg;
    cfg.addSchemaChangeListener(this);
    currentConfig.addSchemaChangeListener(this);
  }
@@ -4134,6 +4154,16 @@
                         LDIFExportConfig exportConfig)
         throws DirectoryException
  {
    try
    {
      initializeCommon(configEntry, baseDNs);
    }
    catch (ConfigException e)
    {
      throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                   e.getMessage(), e.getMessageID());
    }
    // Create the LDIF writer.
    LDIFWriter ldifWriter;
    try
opends/src/server/org/opends/server/extensions/ConfigFileHandler.java
@@ -1970,7 +1970,8 @@
   */
  public boolean supportsLDIFExport()
  {
    return true;
    // TODO We would need export-ldif to initialize this backend.
    return false;
  }
@@ -1992,6 +1993,8 @@
                         LDIFExportConfig exportConfig)
         throws DirectoryException
  {
    // TODO We would need export-ldif to initialize this backend.
    LDIFWriter writer;
    try
    {