diff -urNp a/src/include/realms.h b/src/include/realms.h --- a/src/include/realms.h 2009-05-18 06:13:55.000000000 -0500 +++ b/src/include/realms.h 2009-07-11 16:08:11.000000000 -0500 @@ -27,6 +27,10 @@ RCSIDH(realms_h, "$Id$") #define HOME_STATE_ZOMBIE (1) #define HOME_STATE_IS_DEAD (2) +#define HOME_POOL_NO_RESPONSE_INVALID (0) +#define HOME_POOL_NO_RESPONSE_FAIL (1) +#define HOME_POOL_NO_RESPONSE_SKIP (2) + typedef struct home_server { const char *name; @@ -100,6 +104,7 @@ typedef struct home_pool_t { home_pool_type_t type; int server_type; + int no_response_type; CONF_SECTION *cs; const char *virtual_server; /* for pre/post-proxy */ diff -urNp a/src/main/event.c b/src/main/event.c --- a/src/main/event.c 2009-05-18 06:13:55.000000000 -0500 +++ b/src/main/event.c 2009-07-11 16:13:15.000000000 -0500 @@ -1093,7 +1093,8 @@ static void no_response_to_proxied_reque home = request->home_server; - post_proxy_fail_handler(request); + if (request->home_pool->no_response_type != HOME_POOL_NO_RESPONSE_SKIP) + post_proxy_fail_handler(request); /* * Don't touch request due to race conditions diff -urNp a/src/main/realms.c b/src/main/realms.c --- a/src/main/realms.c 2009-05-18 06:13:55.000000000 -0500 +++ b/src/main/realms.c 2009-07-11 16:14:18.000000000 -0500 @@ -570,7 +570,7 @@ static int home_server_add(realm_config_ } #endif - if (home->response_window < 5) home->response_window = 5; + if (home->response_window < 1) home->response_window = 5; if (home->response_window > 60) home->response_window = 60; if (home->max_outstanding < 8) home->max_outstanding = 8; @@ -579,7 +579,7 @@ static int home_server_add(realm_config_ if (home->ping_interval < 6) home->ping_interval = 6; if (home->ping_interval > 120) home->ping_interval = 120; - if (home->zombie_period < 20) home->zombie_period = 20; + if (home->zombie_period < 1) home->zombie_period = 20; if (home->zombie_period > 120) home->zombie_period = 120; if (home->zombie_period < home->response_window) { @@ -770,6 +770,7 @@ static int server_pool_add(realm_config_ pool = server_pool_alloc(name2, HOME_POOL_FAIL_OVER, server_type, num_home_servers); pool->cs = cs; + pool->no_response_type = HOME_POOL_NO_RESPONSE_FAIL; /* @@ -830,6 +831,34 @@ static int server_pool_add(realm_config_ if (do_print) cf_log_info(cs, "\ttype = %s", value); } + cp = cf_pair_find(cs, "no_response"); + if (cp) { + static FR_NAME_NUMBER no_response_types[] = { + { "fail", HOME_POOL_NO_RESPONSE_FAIL }, + { "skip-server", HOME_POOL_NO_RESPONSE_SKIP }, + { "skip_server", HOME_POOL_NO_RESPONSE_SKIP }, + { NULL, 0 } + }; + + value = cf_pair_value(cp); + if (!value) { + cf_log_err(cf_pairtoitem(cp), + "No value given for no_response."); + goto error; + } + + pool->no_response_type = fr_str2int(no_response_types, value, 0); + if (!pool->no_response_type) { + cf_log_err(cf_pairtoitem(cp), + "Unknown no_response value \"%s\".", + value); + goto error; + } + + if (do_print) cf_log_info(cs, "\tno_response = %s", value); + } + + cp = cf_pair_find(cs, "virtual_server"); if (cp) { pool->virtual_server = cf_pair_value(cp);