diff --git a/ChangeLog b/ChangeLog index 3d8e10434..93741fb43 100644 --- a/ChangeLog +++ b/ChangeLog @@ -37,6 +37,12 @@ Changes in version 0.2.0.33 - 200?-??-?? - Fix another case of assuming, when a specific exit is requested, that we know more than the user about what hosts it allows. Fixes one case of bug 752. Patch from rovv. + - Clip the MaxCircuitDirtiness config option to a minimum of 10 + seconds. Warn the user if lower values are given in the + configuration. Bugfix on 0.1.0.1-rc. Patch by Sebastian. + - Clip the CircuitBuildTimeout to a minimum of 30 seconds. Warn the + user if lower values are given in the configuration. Bugfix on + 0.1.1.17-rc. Patch by Sebastian. o Minor features: - Report the case where all signatures in a detached set are rejected diff --git a/src/or/config.c b/src/or/config.c index d69254b30..3e6cac869 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -2681,6 +2681,15 @@ compute_publishserverdescriptor(or_options_t *options) /** Highest allowable value for RendPostPeriod. */ #define MAX_DIR_PERIOD (MIN_ONION_KEY_LIFETIME/2) +/** Lowest allowable value for CircuitBuildTimeout; values too low will + * increase network load because of failing connections being retried, and + * might prevent users from connecting to the network at all. */ +#define MIN_CIRCUIT_BUILD_TIMEOUT 30 + +/** Lowest allowable value for MaxCircuitDirtiness; if this is too low, Tor + * will generate too many circuits and potentially overload the network. */ +#define MIN_MAX_CIRCUIT_DIRTINESS 10 + /** Return 0 if every setting in options is reasonable, and a * permissible transition from old_options. Else return -1. * Should have no side effects, except for normalizing the contents of @@ -3084,6 +3093,18 @@ options_validate(or_options_t *old_options, or_options_t *options, options->RendPostPeriod = MAX_DIR_PERIOD; } + if (options->CircuitBuildTimeout < MIN_CIRCUIT_BUILD_TIMEOUT) { + log(LOG_WARN, LD_CONFIG, "CircuitBuildTimeout option is too short; " + "raising to %d seconds.", MIN_CIRCUIT_BUILD_TIMEOUT); + options->CircuitBuildTimeout = MIN_CIRCUIT_BUILD_TIMEOUT; + } + + if (options->MaxCircuitDirtiness < MIN_MAX_CIRCUIT_DIRTINESS) { + log(LOG_WARN, LD_CONFIG, "MaxCircuitDirtiness option is too short; " + "raising to %d seconds.", MIN_MAX_CIRCUIT_DIRTINESS); + options->MaxCircuitDirtiness = MIN_MAX_CIRCUIT_DIRTINESS; + } + if (options->KeepalivePeriod < 1) REJECT("KeepalivePeriod option must be positive.");