#define MIN_UID 100
#define MIN_GID 100
+#define MAX_FAILURES 5
+
module AP_MODULE_DECLARE_DATA vhost_ldap_module;
typedef enum {
char *cgi;
const char *hostname = NULL;
int is_fallback = 0;
- int sleep = 1;
+ int sleep0 = 0;
+ int sleep1 = 1;
+ int sleep;
reqc =
(mod_vhost_ldap_request_t *)apr_pcalloc(r->pool, sizeof(mod_vhost_ldap_request_t));
if (AP_LDAP_IS_SERVER_DOWN(result) ||
(result == LDAP_TIMEOUT) ||
(result == LDAP_CONNECT_ERROR)) {
- if (failures++ <= 5) {
+ sleep = sleep0 + sleep1;
+ ap_log_rerror(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0, r,
+ "[mod_vhost_ldap.c]: lookup failure, retry number #[%d], sleeping for [%d] seconds", failures, sleep);
+ if (failures++ < MAX_FAILURES) {
/* Back-off exponentially */
apr_sleep(apr_time_from_sec(sleep));
- sleep = sleep*2;
+ sleep0 = sleep1;
+ sleep1 = sleep;
goto start_over;
} else {
return HTTP_GATEWAY_TIME_OUT;
return DECLINED;
}
-static int mod_vhost_ldap_cleanup(request_rec * r)
-{
- mod_vhost_ldap_request_t *reqc =
- (mod_vhost_ldap_request_t *)ap_get_module_config(r->request_config,
- &vhost_ldap_module);
-
- /* Set ap_document_root back to saved value */
- return set_document_root(r, reqc->saved_docroot);
-}
-
#ifdef HAVE_UNIX_SUEXEC
static ap_unix_identity_t *mod_vhost_ldap_get_suexec_id_doer(const request_rec * r)
{
ap_hook_post_config(mod_vhost_ldap_post_config, NULL, NULL, APR_HOOK_MIDDLE);
ap_hook_translate_name(mod_vhost_ldap_translate_name, NULL, aszRewrite, APR_HOOK_FIRST);
- ap_hook_fixups(mod_vhost_ldap_cleanup, aszRewrite, NULL, APR_HOOK_MIDDLE);
#ifdef HAVE_UNIX_SUEXEC
ap_hook_get_suexec_identity(mod_vhost_ldap_get_suexec_id_doer, NULL, NULL, APR_HOOK_MIDDLE);
#endif