diff options
Diffstat (limited to 'src/app/config/confparse.c')
-rw-r--r-- | src/app/config/confparse.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/app/config/confparse.c b/src/app/config/confparse.c index 3341ee7844..1923a0c1ee 100644 --- a/src/app/config/confparse.c +++ b/src/app/config/confparse.c @@ -534,6 +534,23 @@ config_var_is_settable(const config_var_t *var) return struct_var_is_settable(&var->member); } +/** + * Return true iff the controller is allowed to fetch the value of + * <b>var</b>. + **/ +static bool +config_var_is_gettable(const config_var_t *var) +{ + /* Arguably, invisible or obsolete options should not be gettable. However, + * they have been gettable for a long time, and making them ungettable could + * have compatibility effects. For now, let's leave them alone. + */ + + // return (var->flags & (CVFLAG_OBSOLETE|CFGLAGS_INVISIBLE)) == 0; + (void)var; + return true; +} + bool config_var_is_contained(const config_var_t *var) { @@ -776,6 +793,11 @@ config_get_assigned_option(const config_mgr_t *mgr, const void *options, log_warn(LD_CONFIG, "Unknown option '%s'. Failing.", key); return NULL; } + if (! config_var_is_gettable(var->cvar)) { + log_warn(LD_CONFIG, "Option '%s' is obsolete or unfetchable. Failing.", + key); + return NULL; + } const void *object = config_mgr_get_obj(mgr, options, var->object_idx); result = struct_var_kvencode(object, &var->cvar->member); |