mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 13:17:41 +00:00
GUACAMOLE-234: Fix resource leaks in new LDAP code.
This commit is contained in:
@@ -128,10 +128,8 @@ public class LDAPConnectionService {
|
|||||||
public LdapNetworkConnection bindAs(Dn userDN, String password)
|
public LdapNetworkConnection bindAs(Dn userDN, String password)
|
||||||
throws GuacamoleException {
|
throws GuacamoleException {
|
||||||
|
|
||||||
// Obtain appropriately-configured LdapNetworkConnection instance
|
// Get ldapConnection and try to connect and bind.
|
||||||
LdapNetworkConnection ldapConnection = createLDAPConnection();
|
try (LdapNetworkConnection ldapConnection = createLDAPConnection()) {
|
||||||
|
|
||||||
try {
|
|
||||||
|
|
||||||
// Connect to LDAP server
|
// Connect to LDAP server
|
||||||
ldapConnection.connect();
|
ldapConnection.connect();
|
||||||
@@ -140,14 +138,7 @@ public class LDAPConnectionService {
|
|||||||
if (confService.getEncryptionMethod() == EncryptionMethod.STARTTLS)
|
if (confService.getEncryptionMethod() == EncryptionMethod.STARTTLS)
|
||||||
ldapConnection.startTls();
|
ldapConnection.startTls();
|
||||||
|
|
||||||
}
|
// Bind using provided credentials
|
||||||
catch (LdapException e) {
|
|
||||||
throw new GuacamoleServerException("Error connecting to LDAP server.", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bind using provided credentials
|
|
||||||
try {
|
|
||||||
|
|
||||||
BindRequest bindRequest = new BindRequestImpl();
|
BindRequest bindRequest = new BindRequestImpl();
|
||||||
bindRequest.setDn(userDN);
|
bindRequest.setDn(userDN);
|
||||||
bindRequest.setCredentials(password);
|
bindRequest.setCredentials(password);
|
||||||
@@ -165,7 +156,6 @@ public class LDAPConnectionService {
|
|||||||
// Disconnect if an error occurs during bind
|
// Disconnect if an error occurs during bind
|
||||||
catch (LdapException e) {
|
catch (LdapException e) {
|
||||||
logger.debug("Unable to bind to LDAP server.", e);
|
logger.debug("Unable to bind to LDAP server.", e);
|
||||||
disconnect(ldapConnection);
|
|
||||||
throw new GuacamoleInvalidCredentialsException(
|
throw new GuacamoleInvalidCredentialsException(
|
||||||
"Unable to bind to the LDAP server.",
|
"Unable to bind to the LDAP server.",
|
||||||
CredentialsInfo.USERNAME_PASSWORD);
|
CredentialsInfo.USERNAME_PASSWORD);
|
||||||
|
@@ -20,6 +20,7 @@
|
|||||||
package org.apache.guacamole.auth.ldap;
|
package org.apache.guacamole.auth.ldap;
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -188,26 +189,24 @@ public class ObjectQueryService {
|
|||||||
|
|
||||||
logger.debug("Searching \"{}\" for objects matching \"{}\".", baseDN, query);
|
logger.debug("Searching \"{}\" for objects matching \"{}\".", baseDN, query);
|
||||||
|
|
||||||
try {
|
LdapConnectionConfig ldapConnectionConfig = ldapConnection.getConfig();
|
||||||
|
|
||||||
LdapConnectionConfig ldapConnectionConfig = ldapConnection.getConfig();
|
|
||||||
|
|
||||||
// Search within subtree of given base DN
|
// Search within subtree of given base DN
|
||||||
SearchRequest request = ldapService.getSearchRequest(baseDN,
|
SearchRequest request = ldapService.getSearchRequest(baseDN,
|
||||||
query);
|
query);
|
||||||
|
|
||||||
SearchCursor results = ldapConnection.search(request);
|
// Produce list of all entries in the search result, automatically
|
||||||
|
// following referrals if configured to do so
|
||||||
// Produce list of all entries in the search result, automatically
|
List<Entry> entries = new ArrayList<>();
|
||||||
// following referrals if configured to do so
|
|
||||||
List<Entry> entries = new ArrayList<>();
|
try (SearchCursor results = ldapConnection.search(request)) {
|
||||||
while (results.next()) {
|
while (results.next()) {
|
||||||
|
|
||||||
if (results.isEntry()) {
|
if (results.isEntry()) {
|
||||||
entries.add(results.getEntry());
|
entries.add(results.getEntry());
|
||||||
}
|
}
|
||||||
else if (results.isReferral() && request.isFollowReferrals()) {
|
else if (results.isReferral() && request.isFollowReferrals()) {
|
||||||
|
|
||||||
Referral referral = results.getReferral();
|
Referral referral = results.getReferral();
|
||||||
for (String url : referral.getLdapUrls()) {
|
for (String url : referral.getLdapUrls()) {
|
||||||
LdapNetworkConnection referralConnection =
|
LdapNetworkConnection referralConnection =
|
||||||
@@ -218,15 +217,15 @@ public class ObjectQueryService {
|
|||||||
entries.addAll(search(referralConnection, baseDN, query,
|
entries.addAll(search(referralConnection, baseDN, query,
|
||||||
searchHop));
|
searchHop));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return entries;
|
return entries;
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (CursorException | LdapException e) {
|
catch (CursorException | IOException | LdapException e) {
|
||||||
throw new GuacamoleServerException("Unable to query list of "
|
throw new GuacamoleServerException("Unable to query list of "
|
||||||
+ "objects from LDAP directory.", e);
|
+ "objects from LDAP directory.", e);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user