mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged HEAD-BUG-FIX (4.3/Cloud) to HEAD (4.3/Cloud)
59364: Merged DEV to HEAD-BUG-FIX (Cloud/4.3) 59311: ALF-20682 : LDAP context not closed properly (connections to LDAP stay open) Fixed connection leak to LDAP server. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@62133 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2005-2010 Alfresco Software Limited.
|
* Copyright (C) 2005-2013 Alfresco Software Limited.
|
||||||
*
|
*
|
||||||
* This file is part of Alfresco
|
* This file is part of Alfresco
|
||||||
*
|
*
|
||||||
@@ -41,6 +41,7 @@ import java.util.TreeSet;
|
|||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import javax.naming.CompositeName;
|
import javax.naming.CompositeName;
|
||||||
|
import javax.naming.Context;
|
||||||
import javax.naming.InvalidNameException;
|
import javax.naming.InvalidNameException;
|
||||||
import javax.naming.Name;
|
import javax.naming.Name;
|
||||||
import javax.naming.NamingEnumeration;
|
import javax.naming.NamingEnumeration;
|
||||||
@@ -944,8 +945,11 @@ public class LDAPUserRegistry implements UserRegistry, LDAPNameResolver, Initial
|
|||||||
});
|
});
|
||||||
|
|
||||||
String query = this.userSearchBase + "(&" + this.personQuery
|
String query = this.userSearchBase + "(&" + this.personQuery
|
||||||
+ "(" + this.userIdAttributeName + "= userId))";
|
+ "(" + this.userIdAttributeName + "= userId))";
|
||||||
|
|
||||||
|
|
||||||
|
NamingEnumeration<SearchResult> searchResults = null;
|
||||||
|
SearchResult result = null;
|
||||||
|
|
||||||
InitialDirContext ctx = null;
|
InitialDirContext ctx = null;
|
||||||
try
|
try
|
||||||
@@ -955,7 +959,7 @@ public class LDAPUserRegistry implements UserRegistry, LDAPNameResolver, Initial
|
|||||||
// Execute the user query with an additional condition that ensures only the user with the required ID is
|
// Execute the user query with an additional condition that ensures only the user with the required ID is
|
||||||
// returned. Force RFC 2254 escaping of the user ID in the filter to avoid any manipulation
|
// returned. Force RFC 2254 escaping of the user ID in the filter to avoid any manipulation
|
||||||
|
|
||||||
NamingEnumeration<SearchResult> searchResults = ctx.search(this.userSearchBase, "(&" + this.personQuery
|
searchResults = ctx.search(this.userSearchBase, "(&" + this.personQuery
|
||||||
+ "(" + this.userIdAttributeName + "={0}))", new Object[]
|
+ "(" + this.userIdAttributeName + "={0}))", new Object[]
|
||||||
{
|
{
|
||||||
userId
|
userId
|
||||||
@@ -963,7 +967,7 @@ public class LDAPUserRegistry implements UserRegistry, LDAPNameResolver, Initial
|
|||||||
|
|
||||||
if (searchResults.hasMore())
|
if (searchResults.hasMore())
|
||||||
{
|
{
|
||||||
SearchResult result = searchResults.next();
|
result = searchResults.next();
|
||||||
Attributes attributes = result.getAttributes();
|
Attributes attributes = result.getAttributes();
|
||||||
Attribute uidAttribute = attributes.get(this.userIdAttributeName);
|
Attribute uidAttribute = attributes.get(this.userIdAttributeName);
|
||||||
if (uidAttribute == null)
|
if (uidAttribute == null)
|
||||||
@@ -985,8 +989,18 @@ public class LDAPUserRegistry implements UserRegistry, LDAPNameResolver, Initial
|
|||||||
// only resolve this user if the user ID matches
|
// only resolve this user if the user ID matches
|
||||||
else if (userId.equalsIgnoreCase((String) uidAttribute.get(0)))
|
else if (userId.equalsIgnoreCase((String) uidAttribute.get(0)))
|
||||||
{
|
{
|
||||||
return result.getNameInNamespace();
|
String name = result.getNameInNamespace();
|
||||||
|
|
||||||
|
// Close the contexts, see ALF-20682
|
||||||
|
((Context)result.getObject()).close();
|
||||||
|
result = null;
|
||||||
|
|
||||||
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Close the contexts, see ALF-20682
|
||||||
|
((Context)result.getObject()).close();
|
||||||
|
result = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
Object[] args = {userId, query};
|
Object[] args = {userId, query};
|
||||||
@@ -1007,6 +1021,28 @@ public class LDAPUserRegistry implements UserRegistry, LDAPNameResolver, Initial
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
if (result != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
((Context)result.getObject()).close();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
logger.debug("error when closing result block context", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (searchResults != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
searchResults.close();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
logger.debug("error when closing searchResults context", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (ctx != null)
|
if (ctx != null)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -1220,18 +1256,23 @@ public class LDAPUserRegistry implements UserRegistry, LDAPNameResolver, Initial
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
InitialDirContext ctx = null;
|
InitialDirContext ctx = null;
|
||||||
|
NamingEnumeration<SearchResult> searchResults = null;
|
||||||
|
SearchResult result = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
ctx = this.ldapInitialContextFactory.getDefaultIntialDirContext(this.queryBatchSize);
|
ctx = this.ldapInitialContextFactory.getDefaultIntialDirContext(this.queryBatchSize);
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
NamingEnumeration<SearchResult> searchResults;
|
|
||||||
searchResults = ctx.search(searchBase, query, searchControls);
|
searchResults = ctx.search(searchBase, query, searchControls);
|
||||||
|
|
||||||
while (searchResults.hasMore())
|
while (searchResults.hasMore())
|
||||||
{
|
{
|
||||||
SearchResult result = searchResults.next();
|
result = searchResults.next();
|
||||||
callback.process(result);
|
callback.process(result);
|
||||||
|
|
||||||
|
// Close the contexts, see ALF-20682
|
||||||
|
((Context)result.getObject()).close();
|
||||||
|
result = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (this.ldapInitialContextFactory.hasNextPage(ctx, this.queryBatchSize));
|
while (this.ldapInitialContextFactory.hasNextPage(ctx, this.queryBatchSize));
|
||||||
@@ -1248,6 +1289,28 @@ public class LDAPUserRegistry implements UserRegistry, LDAPNameResolver, Initial
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
if (result != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
((Context)result.getObject()).close();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
logger.debug("error when closing result block context", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (searchResults != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
searchResults.close();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
logger.debug("error when closing searchResults context", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (ctx != null)
|
if (ctx != null)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
Reference in New Issue
Block a user