From 1e1c39644fa2efe85b0042a83269f13debdbad6d Mon Sep 17 00:00:00 2001
From: Violette Roche-Montane <violette.roche-montane@forgerock.com>
Date: Tue, 11 Jun 2013 15:25:39 +0000
Subject: [PATCH] CR-1829 OPENDJ-982 Upgrade: SNMP Connection Handler does not start after the upgrade As suggested in CR, a new upgrade task has been created 'Rename SNMP security config file'. This task is launched if the old SNMP config file actually exists in the config/snmp/security. The task renames the file with the new opendj name.

---
 opends/src/server/org/opends/server/tools/upgrade/UpgradeTasks.java |   55 +++++++++++++++++++++++++++
 opends/src/server/org/opends/server/tools/upgrade/Installation.java |   10 +++++
 opends/src/messages/messages/tools.properties                       |    4 ++
 opends/src/server/org/opends/server/tools/upgrade/UpgradeUtils.java |   10 ++++-
 opends/src/server/org/opends/server/tools/upgrade/Upgrade.java      |    5 ++
 5 files changed, 82 insertions(+), 2 deletions(-)

diff --git a/opends/src/messages/messages/tools.properties b/opends/src/messages/messages/tools.properties
index 5923f7f..d4f48be 100644
--- a/opends/src/messages/messages/tools.properties
+++ b/opends/src/messages/messages/tools.properties
@@ -2688,6 +2688,8 @@
 configuration file '%s': %s
 INFO_OPTION_ACCEPT_LICENSE_1836=Automatically accepts the product license \
 (if present)
+SEVERE_ERR_UPGRADE_RENAME_SNMP_SECURITY_CONFIG_FILE_1838=An error occurred when \
+trying to rename the SNMP security config file: %s
 
 # Upgrade tasks
 INFO_UPGRADE_TASK_6869_SUMMARY_10000=Fixing de-DE collation matching rule OID
@@ -2708,3 +2710,5 @@
 INFO_UPGRADE_TASK_8487_SUMMARY_10013=Adding PBKDF2 password storage scheme configuration
 INFO_UPGRADE_TASK_8613_SUMMARY_10014=Adding HTTP connection handler configuration
 INFO_UPGRADE_TASK_8832_SUMMARY_10015=Adding file-based HTTP access logger
+INFO_UPGRADE_TASK_7466_SUMMARY_10016=Rename SNMP security config file
+
diff --git a/opends/src/server/org/opends/server/tools/upgrade/Installation.java b/opends/src/server/org/opends/server/tools/upgrade/Installation.java
index 91c0f17..38bb90b 100644
--- a/opends/src/server/org/opends/server/tools/upgrade/Installation.java
+++ b/opends/src/server/org/opends/server/tools/upgrade/Installation.java
@@ -90,6 +90,16 @@
   public static final String TMP_PATH_RELATIVE = "tmp";
 
   /**
+   * Relative path to the snmp directory.
+   */
+  public static final String SNMP_PATH_RELATIVE = "snmp";
+
+  /**
+   * Relative path to the security directory.
+   */
+  public static final String SECURITY_PATH_RELATIVE = "security";
+
+  /**
    * The relative path to the current Configuration LDIF file.
    */
   public static final String CURRENT_CONFIG_FILE_NAME = "config.ldif";
diff --git a/opends/src/server/org/opends/server/tools/upgrade/Upgrade.java b/opends/src/server/org/opends/server/tools/upgrade/Upgrade.java
index cc708ea..5428111 100644
--- a/opends/src/server/org/opends/server/tools/upgrade/Upgrade.java
+++ b/opends/src/server/org/opends/server/tools/upgrade/Upgrade.java
@@ -128,6 +128,9 @@
         "delete: objectClass",
         "objectClass: ds-cfg-file-based-access-log-publisher"));
 
+    register ("2.5.0.7466",
+        renameSnmpSecurityConfig(INFO_UPGRADE_TASK_7466_SUMMARY.get()));
+
     register("2.5.0.7748",
         newAttributeTypes(INFO_UPGRADE_TASK_7748_1_SUMMARY.get(),
         "00-core.ldif", "etag"),
@@ -272,6 +275,8 @@
           "cn=File Count Retention Policy,cn=Log Retention Policies,cn=config",
         "ds-cfg-log-file-permissions: 640",
         "ds-cfg-enabled: false"));
+
+
     /*
      * All upgrades will refresh the server configuration schema and generate
      * a new upgrade folder.
diff --git a/opends/src/server/org/opends/server/tools/upgrade/UpgradeTasks.java b/opends/src/server/org/opends/server/tools/upgrade/UpgradeTasks.java
index 3728290..51b6701 100644
--- a/opends/src/server/org/opends/server/tools/upgrade/UpgradeTasks.java
+++ b/opends/src/server/org/opends/server/tools/upgrade/UpgradeTasks.java
@@ -422,6 +422,61 @@
     };
   }
 
+  /**
+   * Renames the SNMP security config file if it exists. Since 2.5.0.7466 this
+   * file has been renamed.
+   *
+   * @param summary
+   *          The summary of this upgrade task.
+   * @return An upgrade task which renames the old SNMP security config file if
+   *         it exists.
+   */
+  public static UpgradeTask renameSnmpSecurityConfig(final Message summary)
+  {
+    return new AbstractUpgradeTask()
+    {
+      @Override
+      public void perform(final UpgradeContext context) throws ClientException
+      {
+        /*
+         * Snmp config file contains old name in old version(like 2.4.5), in
+         * order to make sure the process will still work after upgrade, we need
+         * to rename it - only if it exists.
+         */
+        if (UpgradeUtils.configSnmpSecurityDirectory.exists())
+        {
+          ProgressNotificationCallback pnc =
+              new ProgressNotificationCallback(0, summary, 0);
+          try
+          {
+            final File oldSnmpConfig =
+                new File(UpgradeUtils.configSnmpSecurityDirectory
+                    + File.separator + "opends-snmp.security");
+            if (oldSnmpConfig.exists())
+            {
+              context.notifyProgress(pnc.changeProgress(20));
+              LOG.log(Level.INFO, summary.toString());
+
+              final File snmpConfig =
+                  new File(UpgradeUtils.configSnmpSecurityDirectory
+                      + File.separator + "opendj-snmp.security");
+
+              FileManager.rename(oldSnmpConfig, snmpConfig);
+
+              context.notifyProgress(pnc.changeProgress(100));
+            }
+          }
+          catch (final Exception ex)
+          {
+            manageTaskException(context,
+                ERR_UPGRADE_RENAME_SNMP_SECURITY_CONFIG_FILE.get(ex
+                    .getMessage()), pnc);
+          }
+        }
+      }
+    };
+  }
+
   private static UpgradeTask addConfigEntry0(final Message summary,
       final Message description, final boolean needsUserConfirmation,
       final String... ldif)
diff --git a/opends/src/server/org/opends/server/tools/upgrade/UpgradeUtils.java b/opends/src/server/org/opends/server/tools/upgrade/UpgradeUtils.java
index 9e2ffc1..d439e78 100644
--- a/opends/src/server/org/opends/server/tools/upgrade/UpgradeUtils.java
+++ b/opends/src/server/org/opends/server/tools/upgrade/UpgradeUtils.java
@@ -97,14 +97,20 @@
   /** The template/config/schema folder of the current installation. */
   static final File templateConfigSchemaDirectory = new File(
       getInstallationPath(), Installation.TEMPLATE_RELATIVE_PATH
-          + File.separator + Installation.CONFIG_PATH_RELATIVE + File.separator
-          + Installation.SCHEMA_PATH_RELATIVE);
+          + File.separator + Installation.CONFIG_PATH_RELATIVE
+          + File.separator + Installation.SCHEMA_PATH_RELATIVE);
 
   /** The template/config folder of the current installation. */
   static final File templateConfigDirectory = new File(
       getInstallationPath(), Installation.TEMPLATE_RELATIVE_PATH
           + File.separator + Installation.CONFIG_PATH_RELATIVE);
 
+  /** The config snmp security folder of the current installation. */
+  static final File configSnmpSecurityDirectory = new File(
+      getInstallationPath(), Installation.CONFIG_PATH_RELATIVE
+      + File.separator + Installation.SNMP_PATH_RELATIVE + File.separator
+      + Installation.SECURITY_PATH_RELATIVE);
+
   /**
    * Returns the path of the installation of the directory server. Note that
    * this method assumes that this code is being run locally.

--
Gitblit v1.10.0