diff options
author | Nick Mathewson <nickm@torproject.org> | 2019-10-23 15:38:15 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2019-10-24 20:30:32 -0400 |
commit | dc6d7f072d7307c21df80b982c1d1f98130d3286 (patch) | |
tree | 93298a500138ab9c332c0fb16492188205241bcc | |
parent | 0cb42385378d539185a20ce8899cdc16cf46145c (diff) | |
download | tor-dc6d7f072d7307c21df80b982c1d1f98130d3286.tar.gz tor-dc6d7f072d7307c21df80b982c1d1f98130d3286.zip |
Make foo_validate() functions call config_validate().
The former foo_validate() functions are now toplevel
legacy_validate_fn callbacks. The new foo_validate() functions now
call them.
This change lets us remove the old shared_random disk state
validation callback entirely.
-rw-r--r-- | scripts/maint/practracker/exceptions.txt | 2 | ||||
-rw-r--r-- | src/app/config/config.c | 37 | ||||
-rw-r--r-- | src/app/config/statefile.c | 26 | ||||
-rw-r--r-- | src/feature/dirauth/shared_random_state.c | 19 | ||||
-rw-r--r-- | src/lib/confmgt/confparse.c | 2 |
5 files changed, 39 insertions, 47 deletions
diff --git a/scripts/maint/practracker/exceptions.txt b/scripts/maint/practracker/exceptions.txt index 054bbbdebf..f7bd8287e8 100644 --- a/scripts/maint/practracker/exceptions.txt +++ b/scripts/maint/practracker/exceptions.txt @@ -38,7 +38,7 @@ problem include-count /src/app/config/config.c 89 problem function-size /src/app/config/config.c:options_act_reversible() 296 problem function-size /src/app/config/config.c:options_act() 589 problem function-size /src/app/config/config.c:resolve_my_address() 190 -problem function-size /src/app/config/config.c:options_validate() 1209 +problem function-size /src/app/config/config.c:options_validate_cb() 1209 problem function-size /src/app/config/config.c:options_init_from_torrc() 207 problem function-size /src/app/config/config.c:options_init_from_string() 113 problem function-size /src/app/config/config.c:options_init_logs() 145 diff --git a/src/app/config/config.c b/src/app/config/config.c index 4e7720b0b3..b372791a4d 100644 --- a/src/app/config/config.c +++ b/src/app/config/config.c @@ -3239,13 +3239,20 @@ compute_publishserverdescriptor(or_options_t *options) * */ #define RECOMMENDED_MIN_CIRCUIT_BUILD_TIMEOUT (10) -static int -options_validate_cb(const void *old_options, void *options, char **msg) +/** + * Return 0 if every setting in <b>options</b> is reasonable, is a + * permissible transition from <b>old_options</b>, and none of the + * testing-only settings differ from <b>default_options</b> unless in + * testing mode. Else return -1. Should have no side effects, except for + * normalizing the contents of <b>options</b>. + * + * On error, tor_strdup an error explanation into *<b>msg</b>. + */ +STATIC int +options_validate(const or_options_t *old_options, or_options_t *options, + char **msg) { - in_option_validation = 1; - int rv = options_validate(old_options, options, msg); - in_option_validation = 0; - return rv; + return config_validate(get_options_mgr(), old_options, options, msg); } #define REJECT(arg) \ @@ -3431,18 +3438,16 @@ options_validate_single_onion(or_options_t *options, char **msg) return 0; } -/** Return 0 if every setting in <b>options</b> is reasonable, is a - * permissible transition from <b>old_options</b>, and none of the - * testing-only settings differ from <b>default_options</b> unless in - * testing mode. Else return -1. Should have no side effects, except for - * normalizing the contents of <b>options</b>. - * - * On error, tor_strdup an error explanation into *<b>msg</b>. +/** + * Legacy validation/normalization callback for or_options_t. See + * legacy_validate_fn_t for more information. */ -STATIC int -options_validate(const or_options_t *old_options, or_options_t *options, - char **msg) +static int +options_validate_cb(const void *old_options_, void *options_, char **msg) { + const or_options_t *old_options = old_options_; + or_options_t *options = options_; + config_line_t *cl; const char *uname = get_uname(); int n_ports=0; diff --git a/src/app/config/statefile.c b/src/app/config/statefile.c index e277e722cd..d3a0ec1790 100644 --- a/src/app/config/statefile.c +++ b/src/app/config/statefile.c @@ -265,16 +265,6 @@ validate_transports_in_state(or_state_t *state) return 0; } -static int -or_state_validate_cb(const void *old_state, void *state, char **msg) -{ - /* We don't use these; only options do. Still, we need to match that - * signature. */ - (void) old_state; - - return or_state_validate(state, msg); -} - /** Return 0 if every setting in <b>state</b> is reasonable, and a * permissible transition from <b>old_state</b>. Else warn and return -1. * Should have no side effects, except for normalizing the contents of @@ -283,6 +273,22 @@ or_state_validate_cb(const void *old_state, void *state, char **msg) static int or_state_validate(or_state_t *state, char **msg) { + return config_validate(get_state_mgr(), NULL, state, msg); +} + +/** + * Legacy validation/normalization callback for or_state_t. See + * legacy_validate_fn_t for more information. + */ +static int +or_state_validate_cb(const void *old_state, void *state_, char **msg) +{ + /* There is not a meaningful concept of a state-to-state transition, + * since we do not reload the state after we start. */ + (void) old_state; + + or_state_t *state = state_; + if (entry_guards_parse_state(state, 0, msg)<0) return -1; diff --git a/src/feature/dirauth/shared_random_state.c b/src/feature/dirauth/shared_random_state.c index eeb005d477..e548eb4028 100644 --- a/src/feature/dirauth/shared_random_state.c +++ b/src/feature/dirauth/shared_random_state.c @@ -59,9 +59,6 @@ DUMMY_TYPECHECK_INSTANCE(sr_disk_state_t); /** Our persistent state magic number. */ #define SR_DISK_STATE_MAGIC 0x98AB1254 -static int -disk_state_validate_cb(const void *old_state, void *state, char **msg); - /** Array of variables that are saved to disk as a persistent state. */ static const config_var_t state_vars[] = { V(Version, POSINT, "0"), @@ -94,7 +91,6 @@ static const config_format_t state_format = { offsetof(sr_disk_state_t, magic_), }, .vars = state_vars, - .legacy_validate_fn = disk_state_validate_cb, .extra = &state_extra_var, .config_suite_offset = -1, }; @@ -339,21 +335,6 @@ disk_state_validate(const sr_disk_state_t *state) return -1; } -/** Validate the disk state (NOP for now). */ -static int -disk_state_validate_cb(const void *old_state, void *state, char **msg) -{ - /* We don't use these; only options do. */ - (void) old_state; - - /* This is called by config_dump which is just before we are about to - * write it to disk. At that point, our global memory state has been - * copied to the disk state so it's fair to assume it's trustable. */ - (void) state; - (void) msg; - return 0; -} - /** Parse the Commit line(s) in the disk state and translate them to the * the memory state. Return 0 on success else -1 on error. */ static int diff --git a/src/lib/confmgt/confparse.c b/src/lib/confmgt/confparse.c index 6d272ed044..f1bec76c0e 100644 --- a/src/lib/confmgt/confparse.c +++ b/src/lib/confmgt/confparse.c @@ -1239,7 +1239,7 @@ config_dump(const config_mgr_t *mgr, const void *default_options, /* XXX use a 1 here so we don't add a new log line while dumping */ if (default_options == NULL) { - if (fmt->legacy_validate_fn(NULL, defaults_tmp, &msg) < 0) { + if (config_validate(mgr, NULL, defaults_tmp, &msg) < 0) { // LCOV_EXCL_START log_err(LD_BUG, "Failed to validate default config: %s", msg); tor_free(msg); |