GUACAMOLE-957: Add support for configuring the general network timeout for LDAP.

This commit is contained in:
Michael Jumper
2021-10-21 16:17:02 -07:00
parent 55437faad0
commit 5a757d0418
7 changed files with 65 additions and 3 deletions

View File

@@ -197,6 +197,11 @@ public class ConnectedLDAPConfiguration implements LDAPConfiguration, AutoClosea
return config.getOperationTimeout();
}
@Override
public int getNetworkTimeout() throws GuacamoleException {
return config.getNetworkTimeout();
}
@Override
public List<String> getAttributes() throws GuacamoleException {
return config.getAttributes();

View File

@@ -67,6 +67,10 @@ public class LDAPConnectionService {
* The encryption method that should be used to communicate with the
* LDAP server.
*
* @param timeout
* The maximum number of milliseconds to wait for a response from the
* LDAP server.
*
* @return
* A new instance of LdapNetworkConnection which uses the given
* encryption method to communicate with the LDAP server at the given
@@ -77,11 +81,13 @@ public class LDAPConnectionService {
* bug).
*/
private LdapNetworkConnection createLDAPConnection(String host, int port,
EncryptionMethod encryptionMethod) throws GuacamoleException {
EncryptionMethod encryptionMethod, int timeout)
throws GuacamoleException {
LdapConnectionConfig config = new LdapConnectionConfig();
config.setLdapHost(host);
config.setLdapPort(port);
config.setTimeout(timeout);
// Map encryption method to proper connection and socket factory
switch (encryptionMethod) {
@@ -140,7 +146,8 @@ public class LDAPConnectionService {
return createLDAPConnection(
config.getServerHostname(),
config.getServerPort(),
config.getEncryptionMethod());
config.getEncryptionMethod(),
config.getNetworkTimeout());
}
/**
@@ -209,7 +216,8 @@ public class LDAPConnectionService {
if (port < 1)
port = encryptionMethod.DEFAULT_PORT;
return createLDAPConnection(host, port, encryptionMethod);
return createLDAPConnection(host, port, encryptionMethod,
config.getNetworkTimeout());
}

View File

@@ -125,6 +125,11 @@ public class DefaultLDAPConfiguration implements LDAPConfiguration {
return 30;
}
@Override
public int getNetworkTimeout() {
return 30000;
}
@Override
public List<String> getAttributes() {
return Collections.<String>emptyList();

View File

@@ -193,6 +193,14 @@ public class EnvironmentLDAPConfiguration implements LDAPConfiguration {
);
}
@Override
public int getNetworkTimeout() throws GuacamoleException {
return environment.getProperty(
LDAPGuacamoleProperties.LDAP_NETWORK_TIMEOUT,
DEFAULT.getNetworkTimeout()
);
}
@Override
public List<String> getAttributes() throws GuacamoleException {
return environment.getProperty(

View File

@@ -165,6 +165,13 @@ public class JacksonLDAPConfiguration implements LDAPConfiguration {
@JsonProperty("operation-timeout")
private Integer operationTimeout;
/**
* The raw YAML value of {@link LDAPGuacamoleProperties#LDAP_NETWORK_TIMEOUT}.
* If not set within the YAML, this will be null.
*/
@JsonProperty("network-timeout")
private Integer networkTimeout;
/**
* The raw YAML value of {@link LDAPGuacamoleProperties#LDAP_USER_ATTRIBUTES}.
* If not set within the YAML, this will be null.
@@ -364,6 +371,11 @@ public class JacksonLDAPConfiguration implements LDAPConfiguration {
return withDefault(operationTimeout, defaultConfig.getOperationTimeout());
}
@Override
public int getNetworkTimeout() throws GuacamoleException {
return withDefault(networkTimeout, defaultConfig.getNetworkTimeout());
}
@Override
public List<String> getAttributes() throws GuacamoleException {
return withDefault(userAttributes, defaultConfig.getAttributes());

View File

@@ -255,6 +255,19 @@ public interface LDAPConfiguration {
*/
ExprNode getGroupSearchFilter() throws GuacamoleException;
/**
* Returns the maximum number of milliseconds to wait for a response when
* communicating with the LDAP server.
*
* @return
* The maximum number of milliseconds to wait for responses from the
* LDAP server.
*
* @throws GuacamoleException
* If the LDAP network timeout cannot be retrieved.
*/
int getNetworkTimeout() throws GuacamoleException;
/**
* Returns the maximum number of seconds to wait for LDAP operations.
*

View File

@@ -254,6 +254,17 @@ public class LDAPGuacamoleProperties {
};
/**
* Number of milliseconds to wait for responses from the LDAP server.
*/
public static final IntegerGuacamoleProperty LDAP_NETWORK_TIMEOUT =
new IntegerGuacamoleProperty() {
@Override
public String getName() { return "ldap-network-timeout"; }
};
/**
* Custom attribute or attributes to query from Guacamole user's record in
* the LDAP directory.