From f59c6ebf626b30f5bf7726700528d3da1cc111a9 Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Sat, 20 Jun 2009 00:29:09 +0000
Subject: [PATCH] Fix for issue 4063 (dsreplication disable throws java.lang.NumberFormatException) Handle the case where the ADS entry did not have a reference to the administration port (this occurs when OpenDS 1.0 have been upgraded).

---
 opends/src/ads/org/opends/admin/ads/ServerDescriptor.java |   76 ++++++++++++++++++++++++++++++--------
 1 files changed, 60 insertions(+), 16 deletions(-)

diff --git a/opends/src/ads/org/opends/admin/ads/ServerDescriptor.java b/opends/src/ads/org/opends/admin/ads/ServerDescriptor.java
index d8d1a53..8fa88a1 100644
--- a/opends/src/ads/org/opends/admin/ads/ServerDescriptor.java
+++ b/opends/src/ads/org/opends/admin/ads/ServerDescriptor.java
@@ -33,6 +33,8 @@
 import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import javax.naming.NameNotFoundException;
 import javax.naming.NamingEnumeration;
@@ -57,6 +59,10 @@
   private Map<ServerProperty, Object> serverProperties =
     new HashMap<ServerProperty, Object>();
   private TopologyCacheException lastException;
+
+  private static final Logger LOG =
+    Logger.getLogger(ServerDescriptor.class.getName());
+
   /**
    * Enumeration containing the different server properties that we can keep in
    * the ServerProperty object.
@@ -472,26 +478,64 @@
     }
     else
     {
-      boolean secure;
+      ArrayList<ADSContext.ServerProperty> enabledAttrs =
+        new ArrayList<ADSContext.ServerProperty>();
 
-      Object v = adsProperties.get(ADSContext.ServerProperty.ADMIN_ENABLED);
-      secure = securePreferred && "true".equalsIgnoreCase(String.valueOf(v));
-      try
+      if (securePreferred)
       {
-        if (secure)
-        {
-          port = Integer.parseInt((String)adsProperties.get(
-              ADSContext.ServerProperty.ADMIN_PORT));
-        }
-        else
-        {
-          port = Integer.parseInt((String)adsProperties.get(
-              ADSContext.ServerProperty.LDAP_PORT));
-        }
+        enabledAttrs.add(ADSContext.ServerProperty.ADMIN_ENABLED);
+        enabledAttrs.add(ADSContext.ServerProperty.LDAPS_ENABLED);
+        enabledAttrs.add(ADSContext.ServerProperty.LDAP_ENABLED);
       }
-      catch (Throwable t)
+      else
       {
-        /* ignore */
+        enabledAttrs.add(ADSContext.ServerProperty.LDAP_ENABLED);
+        enabledAttrs.add(ADSContext.ServerProperty.ADMIN_ENABLED);
+        enabledAttrs.add(ADSContext.ServerProperty.LDAPS_ENABLED);
+      }
+
+      for (ADSContext.ServerProperty prop : enabledAttrs)
+      {
+        Object v = adsProperties.get(prop);
+        if ((v != null) && "true".equalsIgnoreCase(String.valueOf(v)))
+        {
+          ADSContext.ServerProperty portProp;
+          if (prop == ADSContext.ServerProperty.ADMIN_ENABLED)
+          {
+            portProp = ADSContext.ServerProperty.ADMIN_PORT;
+          }
+          else if (prop == ADSContext.ServerProperty.LDAPS_ENABLED)
+          {
+            portProp = ADSContext.ServerProperty.LDAPS_PORT;
+          }
+          else if (prop == ADSContext.ServerProperty.LDAP_ENABLED)
+          {
+            portProp = ADSContext.ServerProperty.LDAP_PORT;
+          }
+          else
+          {
+            throw new IllegalStateException("Unexpected prop: "+prop);
+          }
+          Object p = adsProperties.get(portProp);
+          if (p != null)
+          {
+            try
+            {
+              port = Integer.parseInt(String.valueOf(p));
+            }
+            catch (Throwable t)
+            {
+              LOG.log(Level.WARNING, "Error calculating host port: "+t+" in "+
+                  adsProperties, t);
+            }
+            break;
+          }
+          else
+          {
+            LOG.log(Level.WARNING, "Value for "+portProp+" is null in "+
+                adsProperties);
+          }
+        }
       }
     }
     return host + ":" + port;

--
Gitblit v1.10.0