X-Git-Url: http://www.privoxy.org/gitweb/?a=blobdiff_plain;f=loadcfg.c;h=4efa2ea166bc958acf8d4f514276b01cfbf2c46d;hb=2c8c7bc03545ae4a2da7152b79d957cd0f9ff6bd;hp=9b39f54c9cf228cb0fe118899b974a40b1f57b85;hpb=d718332b42f884d9c3c2fd0cfa9b83f4973c6971;p=privoxy.git diff --git a/loadcfg.c b/loadcfg.c index 9b39f54c..4efa2ea1 100644 --- a/loadcfg.c +++ b/loadcfg.c @@ -7,7 +7,7 @@ * routine to load the configuration and the global * variables it writes to. * - * Copyright : Written by and Copyright (C) 2001-2017 the + * Copyright : Written by and Copyright (C) 2001-2022 the * Privoxy team. https://www.privoxy.org/ * * Based on the Internet Junkbuster originally written @@ -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" */ @@ -634,12 +634,12 @@ struct configuration_spec * load_config(void) config->proxy_args = strdup_or_die(""); config->forwarded_connect_retries = 0; #ifdef FEATURE_HTTPS_INSPECTION - config->ca_password = strdup(""); - ca_cert_file = strdup("cacert.crt"); - ca_key_file = strdup("cakey.pem"); - ca_directory = strdup("./CA"); - trusted_cas_file = strdup("trustedCAs.pem"); - certificate_directory = strdup("./certs"); + config->ca_password = strdup_or_die(""); + ca_cert_file = strdup_or_die("cacert.crt"); + ca_key_file = strdup_or_die("cakey.pem"); + ca_directory = strdup_or_die("./CA"); + trusted_cas_file = strdup_or_die("trustedCAs.pem"); + certificate_directory = strdup_or_die("./certs"); #endif #ifdef FEATURE_CLIENT_TAGS @@ -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; /* *************************************************************************