commit 34e47d1052bdb76780a4dedbbce613972c896bad Author: Sebastian Hahn sebastian@torproject.org Date: Sat Feb 26 09:06:09 2011 +0100
Fix GETINFO config-text for private networks
In private networks, the defaults for some options are changed. This means that in options_validate(), where we're testing that the defaults are what we think they are, we fail. Use a workaround by setting a hidden configuration option _UsingTestingTorNetwork when we have altered the configuration this way, so that options_validate() can do the right thing.
Fixes bug 2250, bugfix on 0.2.1.2-alpha (the version introducing private network options). --- src/or/config.c | 13 ++++++++----- src/or/or.h | 5 +++++ 2 files changed, 13 insertions(+), 5 deletions(-)
diff --git a/src/or/config.c b/src/or/config.c index 4d2c872..771e2cf 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -393,6 +393,7 @@ static config_var_t _option_vars[] = { VAR("__HashedControlSessionPassword", LINELIST, HashedControlSessionPassword, NULL), V(MinUptimeHidServDirectoryV2, INTERVAL, "24 hours"), + V(_UsingTestingTorNetwork, BOOL, "0"),
{ NULL, CONFIG_TYPE_OBSOLETE, 0, NULL } }; @@ -418,6 +419,7 @@ static config_var_t testing_tor_network_defaults[] = { V(TestingAuthDirTimeToLearnReachability, INTERVAL, "0 minutes"), V(TestingEstimatedDescriptorPropagationTime, INTERVAL, "0 minutes"), V(MinUptimeHidServDirectoryV2, INTERVAL, "0 minutes"), + V(_UsingTestingTorNetwork, BOOL, "1"), { NULL, CONFIG_TYPE_OBSOLETE, 0, NULL } }; #undef VAR @@ -3655,7 +3657,7 @@ options_validate(or_options_t *old_options, or_options_t *options, /* Keep changes to hard-coded values synchronous to man page and default * values table. */ if (options->TestingV3AuthInitialVotingInterval != 30*60 && - !options->TestingTorNetwork) { + !options->TestingTorNetwork && !options->_UsingTestingTorNetwork) { REJECT("TestingV3AuthInitialVotingInterval may only be changed in testing " "Tor networks!"); } else if (options->TestingV3AuthInitialVotingInterval < MIN_VOTE_INTERVAL) { @@ -3666,7 +3668,8 @@ options_validate(or_options_t *old_options, or_options_t *options, }
if (options->TestingV3AuthInitialVoteDelay != 5*60 && - !options->TestingTorNetwork) { + !options->TestingTorNetwork && !options->_UsingTestingTorNetwork) { + REJECT("TestingV3AuthInitialVoteDelay may only be changed in testing " "Tor networks!"); } else if (options->TestingV3AuthInitialVoteDelay < MIN_VOTE_SECONDS) { @@ -3674,7 +3677,7 @@ options_validate(or_options_t *old_options, or_options_t *options, }
if (options->TestingV3AuthInitialDistDelay != 5*60 && - !options->TestingTorNetwork) { + !options->TestingTorNetwork && !options->_UsingTestingTorNetwork) { REJECT("TestingV3AuthInitialDistDelay may only be changed in testing " "Tor networks!"); } else if (options->TestingV3AuthInitialDistDelay < MIN_DIST_SECONDS) { @@ -3689,7 +3692,7 @@ options_validate(or_options_t *old_options, or_options_t *options, }
if (options->TestingAuthDirTimeToLearnReachability != 30*60 && - !options->TestingTorNetwork) { + !options->TestingTorNetwork && !options->_UsingTestingTorNetwork) { REJECT("TestingAuthDirTimeToLearnReachability may only be changed in " "testing Tor networks!"); } else if (options->TestingAuthDirTimeToLearnReachability < 0) { @@ -3699,7 +3702,7 @@ options_validate(or_options_t *old_options, or_options_t *options, }
if (options->TestingEstimatedDescriptorPropagationTime != 10*60 && - !options->TestingTorNetwork) { + !options->TestingTorNetwork && !options->_UsingTestingTorNetwork) { REJECT("TestingEstimatedDescriptorPropagationTime may only be changed in " "testing Tor networks!"); } else if (options->TestingEstimatedDescriptorPropagationTime < 0) { diff --git a/src/or/or.h b/src/or/or.h index 74ff743..c742f09 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -2841,6 +2841,11 @@ typedef struct { */ double CircuitPriorityHalflife;
+ /** Set to true if the TestingTorNetwork configuration option is set. + * This is used so that options_validate() has a chance to realize that + * the defaults have changed. */ + int _UsingTestingTorNetwork; + } or_options_t;
/** Persistent state for an onion router, as saved to disk. */
tor-commits@lists.torproject.org