Author: markt Date: Mon Mar 7 16:28:09 2016 New Revision: 1733940 URL: http://svn.apache.org/viewvc?rev=1733940&view=rev Log: Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=59123 Close NamingEnumeration objects used by the JNDIRealm once they are no longer required.
Modified: tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java?rev=1733940&r1=1733939&r2=1733940&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java (original) +++ tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java Mon Mar 7 16:28:09 2016 @@ -1685,60 +1685,65 @@ public class JNDIRealm extends RealmBase NamingEnumeration<SearchResult> results = context.search(userBase, filter, constraints); - - // Fail if no entries found try { - if (results == null || !results.hasMore()) { - return null; - } - } catch (PartialResultException ex) { - if (!adCompat) - throw ex; - else - return null; - } - - // Get result for the first entry found - SearchResult result = results.next(); - - // Check no further entries were found - try { - if (results.hasMore()) { - if(containerLog.isInfoEnabled()) - containerLog.info("username " + username + " has multiple entries"); + // Fail if no entries found + try { + if (results == null || !results.hasMore()) { + return null; + } + } catch (PartialResultException ex) { + if (!adCompat) + throw ex; + else + return null; + } + + // Get result for the first entry found + SearchResult result = results.next(); + + // Check no further entries were found + try { + if (results.hasMore()) { + if(containerLog.isInfoEnabled()) + containerLog.info("username " + username + " has multiple entries"); + return null; + } + } catch (PartialResultException ex) { + if (!adCompat) + throw ex; + } + + String dn = getDistinguishedName(context, userBase, result); + + if (containerLog.isTraceEnabled()) + containerLog.trace(" entry found for " + username + " with dn " + dn); + + // Get the entry's attributes + Attributes attrs = result.getAttributes(); + if (attrs == null) return null; + + // Retrieve value of userPassword + String password = null; + if (userPassword != null) + password = getAttributeValue(userPassword, attrs); + + String userRoleAttrValue = null; + if (userRoleAttribute != null) { + userRoleAttrValue = getAttributeValue(userRoleAttribute, attrs); + } + + // Retrieve values of userRoleName attribute + ArrayList<String> roles = null; + if (userRoleName != null) + roles = addAttributeValues(userRoleName, attrs, roles); + + return new User(username, dn, password, roles, userRoleAttrValue); + } finally { + if (results != null) { + results.close(); } - } catch (PartialResultException ex) { - if (!adCompat) - throw ex; } - - String dn = getDistinguishedName(context, userBase, result); - - if (containerLog.isTraceEnabled()) - containerLog.trace(" entry found for " + username + " with dn " + dn); - - // Get the entry's attributes - Attributes attrs = result.getAttributes(); - if (attrs == null) - return null; - - // Retrieve value of userPassword - String password = null; - if (userPassword != null) - password = getAttributeValue(userPassword, attrs); - - String userRoleAttrValue = null; - if (userRoleAttribute != null) { - userRoleAttrValue = getAttributeValue(userRoleAttribute, attrs); - } - - // Retrieve values of userRoleName attribute - ArrayList<String> roles = null; - if (userRoleName != null) - roles = addAttributeValues(userRoleName, attrs, roles); - - return new User(username, dn, password, roles, userRoleAttrValue); } @@ -2003,6 +2008,8 @@ public class JNDIRealm extends RealmBase } catch (PartialResultException ex) { if (!adCompat) throw ex; + } finally { + results.close(); } if (containerLog.isTraceEnabled()) { @@ -2054,6 +2061,8 @@ public class JNDIRealm extends RealmBase } catch (PartialResultException ex) { if (!adCompat) throw ex; + } finally { + results.close(); } } @@ -2131,6 +2140,8 @@ public class JNDIRealm extends RealmBase } catch (PartialResultException ex) { if (!adCompat) throw ex; + } finally { + e.close(); } return values; } Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1733940&r1=1733939&r2=1733940&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Mon Mar 7 16:28:09 2016 @@ -156,6 +156,11 @@ quoted-string, unquote the string before returning it to the user. (markt) </fix> + <fix> + <bug>59123</bug>: Close <code>NamingEnumeration</code> objects used by + the <code>JNDIRealm</code> once they are no longer required. + (fschumacher/markt) + </fix> </changelog> </subsection> <subsection name="Coyote"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org