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/server/org/opends/server/admin/client/ldap/JNDIDirContextAdaptor.java |   30 ++++++++++++++++++++++--------
 1 files changed, 22 insertions(+), 8 deletions(-)

diff --git a/opends/src/server/org/opends/server/admin/client/ldap/JNDIDirContextAdaptor.java b/opends/src/server/org/opends/server/admin/client/ldap/JNDIDirContextAdaptor.java
index 9e35a95..dd7fc63 100644
--- a/opends/src/server/org/opends/server/admin/client/ldap/JNDIDirContextAdaptor.java
+++ b/opends/src/server/org/opends/server/admin/client/ldap/JNDIDirContextAdaptor.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2008 Sun Microsystems, Inc.
+ *      Copyright 2008-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.admin.client.ldap;
 
@@ -235,8 +235,15 @@
     try {
       NamingEnumeration<SearchResult> results = dirContext.search(dn, filter,
           controls);
-      if (results.hasMore()) {
-        return true;
+      try
+      {
+        if (results.hasMore()) {
+          return true;
+        }
+      }
+      finally
+      {
+        results.close();
       }
     } catch (NameNotFoundException e) {
       // Fall through - entry not found.
@@ -262,11 +269,18 @@
     List<LdapName> children = new LinkedList<LdapName>();
     NamingEnumeration<SearchResult> results = dirContext.search(dn, filter,
         controls);
-    while (results.hasMore()) {
-      SearchResult sr = results.next();
-      LdapName child = new LdapName(dn.getRdns());
-      child.add(new Rdn(sr.getName()));
-      children.add(child);
+    try
+    {
+      while (results.hasMore()) {
+        SearchResult sr = results.next();
+        LdapName child = new LdapName(dn.getRdns());
+        child.add(new Rdn(sr.getName()));
+        children.add(child);
+      }
+    }
+    finally
+    {
+      results.close();
     }
 
     return children;

--
Gitblit v1.10.0