From 3749749fcfc4a3f9821fa8df2c0b93688971628e Mon Sep 17 00:00:00 2001
From: ludovicp <ludovicp@localhost>
Date: Mon, 31 May 2010 12:48:19 +0000
Subject: [PATCH] Fix for issue #4536. Close JNDI enumerations to avoid unbinding and closing underlying LDAP connection. Fixes in all CLI and control panel.

---
 opends/src/guitools/org/opends/guitools/controlpanel/task/AddToGroupTask.java |   69 +++++++++++++++++++---------------
 1 files changed, 38 insertions(+), 31 deletions(-)

diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/task/AddToGroupTask.java b/opends/src/guitools/org/opends/guitools/controlpanel/task/AddToGroupTask.java
index 1c7f3ca..34afc81 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/task/AddToGroupTask.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/task/AddToGroupTask.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Copyright 2008-2010 Sun Microsystems, Inc.
  */
 
 package org.opends.guitools.controlpanel.task;
@@ -259,50 +259,57 @@
           Utilities.getJNDIName(groupDn.toString()),
           filter, ctls);
 
-    while (result.hasMore())
+    try
     {
-      SearchResult sr = result.next();
-      Set<String> values =
-        ConnectionUtils.getValues(sr, ServerConstants.ATTR_UNIQUE_MEMBER);
-      Set<String> dnsToAdd = new LinkedHashSet<String>();
-      if (values != null)
+      while (result.hasMore())
       {
-        for (DN newDn : dns)
+        SearchResult sr = result.next();
+        Set<String> values =
+          ConnectionUtils.getValues(sr, ServerConstants.ATTR_UNIQUE_MEMBER);
+        Set<String> dnsToAdd = new LinkedHashSet<String>();
+        if (values != null)
         {
-          boolean found = false;
-          for (String dn : values)
+          for (DN newDn : dns)
           {
-            if (Utilities.areDnsEqual(dn, newDn.toString()))
+            boolean found = false;
+            for (String dn : values)
             {
-              found = true;
-              break;
+              if (Utilities.areDnsEqual(dn, newDn.toString()))
+              {
+                found = true;
+                break;
+              }
+            }
+            if (!found)
+            {
+              dnsToAdd.add(newDn.toString());
             }
           }
-          if (!found)
+        }
+        else
+        {
+          for (DN newDn : dns)
           {
             dnsToAdd.add(newDn.toString());
           }
         }
-      }
-      else
-      {
-        for (DN newDn : dns)
+        if (dnsToAdd.size() > 0)
         {
-          dnsToAdd.add(newDn.toString());
+          Attribute attribute =
+            new BasicAttribute(ServerConstants.ATTR_UNIQUE_MEMBER);
+          for (String dn : dnsToAdd)
+          {
+            attribute.add(dn);
+          }
+          modifications.add(new ModificationItem(
+              DirContext.ADD_ATTRIBUTE,
+              attribute));
         }
       }
-      if (dnsToAdd.size() > 0)
-      {
-        Attribute attribute =
-          new BasicAttribute(ServerConstants.ATTR_UNIQUE_MEMBER);
-        for (String dn : dnsToAdd)
-        {
-          attribute.add(dn);
-        }
-        modifications.add(new ModificationItem(
-            DirContext.ADD_ATTRIBUTE,
-            attribute));
-      }
+    }
+    finally
+    {
+      result.close();
     }
     return modifications;
   }

--
Gitblit v1.10.0