From: Bradley Nicholes Date: Thu, 27 Jan 2005 01:13:15 +0000 (+0000) Subject: Added a new LDAPConnectionTimeout directive to util_ldap so that the socket connectio... X-Git-Tag: 2.1.3~101 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=30eea48f9b6d18cda74507ae693e1955a4f29d7a;p=apache Added a new LDAPConnectionTimeout directive to util_ldap so that the socket connection timeout value is configurable. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@126565 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 5b717fb717..48ea378aed 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,10 @@ Changes with Apache 2.1.3 [Remove entries to the current 2.0 section below, when backported] + *) mod_ldap: Added the directive LDAPConnectionTimeout to configure + the ldap socket connection timeout value. + [Brad Nicholes] + *) Add --enable-pie flag to configure, to build httpd as a Position Independent Executable where supported (GCC/binutils). [Joe Orton] diff --git a/docs/manual/mod/mod_ldap.xml b/docs/manual/mod/mod_ldap.xml index fa74cfc8e8..01cc87bc88 100644 --- a/docs/manual/mod/mod_ldap.xml +++ b/docs/manual/mod/mod_ldap.xml @@ -245,7 +245,7 @@ by other LDAP modules
SSL/TLS Certificates

The different LDAP SDKs have widely different methods of setting - and handling both CA and client side certificates.

+ and handling both CA and client side certificates.

If you intend to use SSL or TLS, read this section CAREFULLY so as to understand the differences between configurations on the different LDAP @@ -566,4 +566,19 @@ connection client certificates. + +LDAPConnectionTimeout +Specifies the socket connection timeout in seconds +LDAPConnectionTimeout seconds +server config + + +

Specifies the timeout value (in seconds) in which the module will + attempt to connect to the LDAP server. If a connection is not + successful with the timeout period, either an error will be + returned or the module will attempt to connect to a secondary LDAP + server if one is specified. The default is 10 seconds.

+ + + diff --git a/include/util_ldap.h b/include/util_ldap.h index ce21063516..dccb777e5a 100644 --- a/include/util_ldap.h +++ b/include/util_ldap.h @@ -128,6 +128,7 @@ typedef struct util_ldap_state_t { /* cache ald */ void *util_ldap_cache; char *lock_file; /* filename for shm lock mutex */ + int connectionTimeout; } util_ldap_state_t; diff --git a/modules/ldap/util_ldap.c b/modules/ldap/util_ldap.c index 72b3ae3d95..1148317908 100644 --- a/modules/ldap/util_ldap.c +++ b/modules/ldap/util_ldap.c @@ -1594,6 +1594,26 @@ static const char *util_ldap_set_trusted_mode(cmd_parms *cmd, void *dummy, const return(NULL); } +static const char *util_ldap_set_connection_timeout(cmd_parms *cmd, void *dummy, const char *ttl) +{ + util_ldap_state_t *st = + (util_ldap_state_t *)ap_get_module_config(cmd->server->module_config, + &ldap_module); + const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY); + + if (err != NULL) { + return err; + } + + st->connectionTimeout = atol(ttl); + + ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, cmd->server, + "[%d] ldap connection: Setting connection timeout to %ld seconds.", + getpid(), st->connectionTimeout); + + return NULL; +} + void *util_ldap_create_config(apr_pool_t *p, server_rec *s) { @@ -1613,6 +1633,7 @@ void *util_ldap_create_config(apr_pool_t *p, server_rec *s) st->client_certs = apr_array_make(p, 10, sizeof(apr_ldap_opt_tls_cert_t)); st->secure = APR_LDAP_NONE; st->secure_set = 0; + st->connectionTimeout = 10; return st; } @@ -1669,6 +1690,7 @@ static int util_ldap_post_config(apr_pool_t *p, apr_pool_t *plog, const char *userdata_key = "util_ldap_init"; apr_ldap_err_t *result_err = NULL; int rc; + struct timeval timeOut = {10,0}; /* 10 second connection timeout */ /* util_ldap_post_config() will be called twice. Don't bother * going through all of the initialization on the first call @@ -1788,6 +1810,20 @@ static int util_ldap_post_config(apr_pool_t *p, apr_pool_t *plog, ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, s, "LDAP: SSL support unavailable" ); } + + if (st->connectionTimeout > 0) { + timeOut.tv_sec = st->connectionTimeout; + } + + if (st->connectionTimeout >= 0) { + rc = apr_ldap_set_option(p, NULL, LDAP_OPT_NETWORK_TIMEOUT, + (void *)&timeOut, &(result_err)); + if (APR_SUCCESS != rc) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, + "LDAP: Could not set the connection timeout" ); + } + } + return(OK); } @@ -1883,6 +1919,10 @@ command_rec util_ldap_cmds[] = { " SSL - SSL encryption enabled (forced by ldaps://) " " STARTTLS - STARTTLS MUST be enabled "), + AP_INIT_TAKE1("LDAPConnectionTimeout", util_ldap_set_connection_timeout, NULL, RSRC_CONF, + "Specifies the LDAP socket connection timeout in seconds. " + "Default is 10 seconds. "), + {NULL} };