X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=loadcfg.c;h=f98e0841ea4b02332cc38b876a8272d18068fe7d;hp=9b39f54c9cf228cb0fe118899b974a40b1f57b85;hb=657f2453b5be61cd11f2900c429c732664659151;hpb=9126f0c935e4bb64a87be7c3a1855b7768791142 diff --git a/loadcfg.c b/loadcfg.c index 9b39f54c..f98e0841 100644 --- a/loadcfg.c +++ b/loadcfg.c @@ -140,7 +140,7 @@ static struct file_list *current_configfile = NULL; #define hash_cipher_list 1225729316U /* "cipher-list" */ #define hash_client_header_order 2701453514U /* "client-header-order" */ #define hash_client_specific_tag 3353703383U /* "client-specific-tag" */ -#define hash_client_tag_lifetime 647957580U /* "client-tag-lifetime" */ +#define hash_client_tag_lifetime 3239141416U /* "client-tag-lifetime" */ #define hash_compression_level 2464423563U /* "compression-level" */ #define hash_confdir 1978389U /* "confdir" */ #define hash_connection_sharing 1348841265U /* "connection-sharing" */ @@ -1460,13 +1460,41 @@ struct configuration_spec * load_config(void) { int max_client_connections = parse_numeric_value(cmd, arg); +#if !defined(_WIN32) && !defined(HAVE_POLL) + /* + * Reject values below 1 for obvious reasons and values above + * FD_SETSIZE/2 because Privoxy needs two sockets to serve + * client connections that need forwarding. + * + * We ignore the fact that the first three file descriptors + * are usually set to /dev/null, one is used for logging + * and yet another file descriptor is required to load + * config files. + */ + if ((max_client_connections < 1) || (FD_SETSIZE/2 < max_client_connections)) + { + log_error(LOG_LEVEL_FATAL, "max-client-connections value %d" + " is invalid. Value needs to be above 1 and below %d" + " (FD_SETSIZE/2).", max_client_connections, FD_SETSIZE/2); + } +#else + /* + * The Windows libc uses FD_SETSIZE for an array used + * by select(), but has no problems with file descriptors + * above the limit as long as no more than FD_SETSIZE are + * passed to select(). + * https://msdn.microsoft.com/en-us/library/windows/desktop/ms739169%28v=vs.85%29.aspx + * + * On platforms were we use poll() we don't have to enforce + * an upper connection limit either. + */ if (max_client_connections < 1) { log_error(LOG_LEVEL_FATAL, "max-client-connections value" " has to be a number above 1. %d is invalid.", max_client_connections); } - +#endif config->max_client_connections = max_client_connections; break; } @@ -1564,7 +1592,7 @@ struct configuration_spec * load_config(void) if (config->receive_buffer_size < BUFFER_SIZE) { log_error(LOG_LEVEL_INFO, - "receive-buffer-size %lu seems low and may cause problems." + "receive-buffer-size %lu seems low and may cause problems. " "Consider setting it to at least %d.", config->receive_buffer_size, BUFFER_SIZE); } @@ -1574,7 +1602,7 @@ struct configuration_spec * load_config(void) * single-threaded 0|1 * *************************************************************************/ case hash_single_threaded : - config->multi_threaded = 0 == parse_toggle_state(cmd, arg); + config->multi_threaded = 0 == parse_toggle_state(cmd, arg); break; /* *************************************************************************