Make "invisibility" and "undumpability" properties of variables.

Previously, these were magical things that we detected by checking
whether a variable's name was prefixed with two or three underscores.
This commit is contained in:
Nick Mathewson 2019-06-21 10:17:59 -04:00
parent a7835202cf
commit f3330d2be3
3 changed files with 34 additions and 13 deletions

View File

@ -265,6 +265,13 @@ DUMMY_TYPECHECK_INSTANCE(or_options_t);
#define VAR_D(varname,conftype,member,initvalue) \
CONFIG_VAR_DEFN(or_options_t, varname, conftype, member, 0, initvalue)
#define VAR_NODUMP(varname,conftype,member,initvalue) \
CONFIG_VAR_ETYPE(or_options_t, varname, conftype, member, \
CVFLAG_NODUMP, initvalue)
#define VAR_INVIS(varname,conftype,member,initvalue) \
CONFIG_VAR_ETYPE(or_options_t, varname, conftype, member, \
CVFLAG_NODUMP|CVFLAG_INVISIBLE, initvalue)
#define V(member,conftype,initvalue) \
VAR(#member, conftype, member, initvalue)
@ -285,7 +292,7 @@ DUMMY_TYPECHECK_INSTANCE(or_options_t);
#define VPORT(member) \
VAR(#member "Lines", LINELIST_V, member ## _lines, NULL), \
VAR(#member, LINELIST_S, member ## _lines, NULL), \
VAR("__" #member, LINELIST_S, member ## _lines, NULL)
VAR_NODUMP("__" #member, LINELIST_S, member ## _lines, NULL)
/** UINT64_MAX as a decimal string */
#define UINT64_MAX_STRING "18446744073709551615"
@ -682,15 +689,17 @@ static config_var_t option_vars_[] = {
V(WarnPlaintextPorts, CSV, "23,109,110,143"),
OBSOLETE("UseFilteringSSLBufferevents"),
OBSOLETE("__UseFilteringSSLBufferevents"),
VAR("__ReloadTorrcOnSIGHUP", BOOL, ReloadTorrcOnSIGHUP, "1"),
VAR("__AllDirActionsPrivate", BOOL, AllDirActionsPrivate, "0"),
VAR("__DisablePredictedCircuits",BOOL,DisablePredictedCircuits, "0"),
VAR("__DisableSignalHandlers", BOOL, DisableSignalHandlers, "0"),
VAR("__LeaveStreamsUnattached",BOOL, LeaveStreamsUnattached, "0"),
VAR("__HashedControlSessionPassword", LINELIST, HashedControlSessionPassword,
VAR_NODUMP("__ReloadTorrcOnSIGHUP", BOOL, ReloadTorrcOnSIGHUP, "1"),
VAR_NODUMP("__AllDirActionsPrivate", BOOL, AllDirActionsPrivate, "0"),
VAR_NODUMP("__DisablePredictedCircuits",BOOL,DisablePredictedCircuits, "0"),
VAR_NODUMP("__DisableSignalHandlers", BOOL, DisableSignalHandlers, "0"),
VAR_NODUMP("__LeaveStreamsUnattached",BOOL, LeaveStreamsUnattached, "0"),
VAR_NODUMP("__HashedControlSessionPassword", LINELIST,
HashedControlSessionPassword,
NULL),
VAR("__OwningControllerProcess",STRING,OwningControllerProcess, NULL),
VAR("__OwningControllerFD", UINT64, OwningControllerFD, UINT64_MAX_STRING),
VAR_NODUMP("__OwningControllerProcess",STRING,OwningControllerProcess, NULL),
VAR_NODUMP("__OwningControllerFD", UINT64, OwningControllerFD,
UINT64_MAX_STRING),
V(MinUptimeHidServDirectoryV2, INTERVAL, "96 hours"),
V(TestingServerDownloadInitialDelay, CSV_INTERVAL, "0"),
V(TestingClientDownloadInitialDelay, CSV_INTERVAL, "0"),
@ -743,7 +752,8 @@ static config_var_t option_vars_[] = {
V(TestingDirAuthVoteGuardIsStrict, BOOL, "0"),
V_D(TestingDirAuthVoteHSDir, ROUTERSET, NULL),
V(TestingDirAuthVoteHSDirIsStrict, BOOL, "0"),
VAR("___UsingTestNetworkDefaults", BOOL, UsingTestNetworkDefaults_, "0"),
VAR_INVIS("___UsingTestNetworkDefaults", BOOL, UsingTestNetworkDefaults_,
"0"),
END_OF_CONFIG_VARS
};
@ -783,7 +793,8 @@ static const config_var_t testing_tor_network_defaults[] = {
V(TestingDirConnectionMaxStall, INTERVAL, "30 seconds"),
V(TestingEnableConnBwEvent, BOOL, "1"),
V(TestingEnableCellStatsEvent, BOOL, "1"),
VAR("___UsingTestNetworkDefaults", BOOL, UsingTestNetworkDefaults_, "1"),
VAR_INVIS("___UsingTestNetworkDefaults", BOOL, UsingTestNetworkDefaults_,
"1"),
V(RendPostPeriod, INTERVAL, "2 minutes"),
END_OF_CONFIG_VARS
@ -8180,7 +8191,7 @@ getinfo_helper_config(control_connection_t *conn,
for (i = 0; option_vars_[i].member.name; ++i) {
const config_var_t *var = &option_vars_[i];
/* don't tell controller about triple-underscore options */
if (!strncmp(option_vars_[i].member.name, "___", 3))
if (option_vars_[i].flags & CVFLAG_INVISIBLE)
continue;
const char *type = struct_var_get_typename(&var->member);
if (!type)

View File

@ -642,7 +642,7 @@ config_dump(const config_format_t *fmt, const void *default_options,
continue;
}
/* Don't save 'hidden' control variables. */
if (!strcmpstart(fmt->vars[i].member.name, "__"))
if (fmt->vars[i].flags & CVFLAG_NODUMP)
continue;
if (minimal && config_is_same(fmt, options, defaults,
fmt->vars[i].member.name))

View File

@ -110,6 +110,16 @@ typedef struct struct_magic_decl_t {
* fetch this option should produce a warning.
**/
#define CVFLAG_OBSOLETE (1u<<0)
/**
* Flag to indicate that an option is undumpable. An undumpable option is
* never saved to disk, and is prefixed with __.
**/
#define CVFLAG_NODUMP (1u<<1)
/**
* Flag to indicate that an option is "invisible". An invisible option
* is always undumpable, and we don't tell the controller about it.
**/
#define CVFLAG_INVISIBLE (1u<<2)
/** A variable allowed in the configuration file or on the command line. */
typedef struct config_var_t {