From affd68754461e0102f9390e5b5ae4bf40c8662ef Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Mon, 21 Nov 2016 10:43:14 +0000
Subject: [PATCH] OPENDJ-3476 Update schema config and add update task for move of subordinate-base-dn attribute

---
 opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeTasks.java |   49 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 49 insertions(+), 0 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeTasks.java b/opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeTasks.java
index 25b8767..1fd0c29 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeTasks.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeTasks.java
@@ -49,6 +49,8 @@
 
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
+import org.forgerock.opendj.ldap.Attribute;
+import org.forgerock.opendj.ldap.ByteString;
 import org.forgerock.opendj.ldap.DN;
 import org.forgerock.opendj.ldap.Entry;
 import org.forgerock.opendj.ldap.Filter;
@@ -1472,4 +1474,51 @@
       }
     };
   }
+
+  /** Move subordinate-base-dn attribute from Root DSE config to Global config. */
+  static UpgradeTask moveSubordinateBaseDnToGlobalConfiguration()
+  {
+    return new AbstractUpgradeTask()
+    {
+      @Override
+      public void perform(UpgradeContext context) throws ClientException
+      {
+        final SearchRequest sr = Requests.newSearchRequest("cn=Root DSE,cn=config", SearchScope.BASE_OBJECT,
+                "(objectclass=ds-cfg-root-dse-backend)");
+        final Set<String> subordinateDns = new HashSet<>();
+        try (final EntryReader entryReader = searchConfigFile(sr))
+        {
+          if (!entryReader.hasNext())
+          {
+            return;
+          }
+          Entry entry = entryReader.readEntry();
+          Attribute attribute = entry.getAttribute("ds-cfg-subordinate-base-dn");
+          if (attribute == null || attribute.isEmpty())
+          {
+            return;
+          }
+          for (ByteString value : attribute)
+          {
+              subordinateDns.add(value.toString());
+          }
+        }
+        catch (IOException e)
+        {
+          throw new ClientException(ReturnCode.APPLICATION_ERROR, INFO_UPGRADE_TASK_MIGRATE_CONFIG_READ_FAIL.get(), e);
+        }
+        modifyConfigEntry(INFO_UPGRADE_TASK_DELETE_SUBORDINATE_BASE_DN_FROM_ROOT_DSE.get(),
+              "(objectClass=ds-cfg-root-dse-backend)",
+              "delete: ds-cfg-subordinate-base-dn");
+        List<String> ldif = new ArrayList<>();
+        ldif.add("add: ds-cfg-subordinate-base-dn");
+        for (String sub : subordinateDns)
+        {
+          ldif.add("ds-cfg-subordinate-base-dn: " + sub);
+        }
+        modifyConfigEntry(INFO_UPGRADE_TASK_ADD_SUBORDINATE_BASE_DN_TO_GLOBAL_CONFIG.get(),
+            "(objectClass=ds-cfg-root-config)", ldif.toArray(new String[0]));
+      }
+    };
+  }
 }

--
Gitblit v1.10.0