summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorteor <teor@torproject.org>2019-11-12 10:09:57 +1000
committerteor <teor@torproject.org>2019-11-12 10:09:57 +1000
commit0cfb7f6ce715d1947029c7dd92e6fd79868dc599 (patch)
tree0d536598c2b59e35ff62485c22daa908756acf97
parent111f988b5c586ce34a1e482561a988f4794ea6e8 (diff)
parent9be51e8a8e0663a60359f720664defdb4d1d593a (diff)
downloadtor-0cfb7f6ce715d1947029c7dd92e6fd79868dc599.tar.gz
tor-0cfb7f6ce715d1947029c7dd92e6fd79868dc599.zip
Merge branch 'maint-0.4.2' into release-0.4.2
-rw-r--r--changes/bug322953
-rw-r--r--src/lib/confmgt/type_defs.c39
-rw-r--r--src/lib/confmgt/typedvar.c11
-rw-r--r--src/lib/confmgt/typedvar.h2
-rw-r--r--src/lib/confmgt/var_type_def_st.h5
-rw-r--r--src/test/conf_examples/obsolete_1/expected0
-rw-r--r--src/test/conf_examples/obsolete_1/torrc68
-rw-r--r--src/test/conf_examples/obsolete_2/expected0
-rw-r--r--src/test/conf_examples/obsolete_2/torrc2
9 files changed, 110 insertions, 20 deletions
diff --git a/changes/bug32295 b/changes/bug32295
new file mode 100644
index 0000000000..e5e5a4399d
--- /dev/null
+++ b/changes/bug32295
@@ -0,0 +1,3 @@
+ o Minor bugfixes (configuration):
+ - Log the option name when skipping an obsolete option.
+ Fixes bug 32295; bugfix on 0.4.2.1-alpha.
diff --git a/src/lib/confmgt/type_defs.c b/src/lib/confmgt/type_defs.c
index ed930fb02a..5066e12265 100644
--- a/src/lib/confmgt/type_defs.c
+++ b/src/lib/confmgt/type_defs.c
@@ -52,10 +52,11 @@
static int
string_parse(void *target, const char *value, char **errmsg,
- const void *params)
+ const void *params, const char *key)
{
(void)params;
(void)errmsg;
+ (void)key;
char **p = (char**)target;
*p = tor_strdup(value);
return 0;
@@ -106,8 +107,10 @@ static const int_parse_params_t INT_PARSE_POSINT = {
};
static int
-int_parse(void *target, const char *value, char **errmsg, const void *params)
+int_parse(void *target, const char *value, char **errmsg, const void *params,
+ const char *key)
{
+ (void)key;
const int_parse_params_t *pp;
if (params) {
pp = params;
@@ -169,10 +172,11 @@ static const var_type_fns_t int_fns = {
static int
uint64_parse(void *target, const char *value, char **errmsg,
- const void *params)
+ const void *params, const char *key)
{
(void)params;
(void)errmsg;
+ (void)key;
uint64_t *p = target;
int ok=0;
*p = tor_parse_uint64(value, 10, 0, UINT64_MAX, &ok, NULL);
@@ -219,8 +223,9 @@ static const var_type_fns_t uint64_fns = {
static int
units_parse_u64(void *target, const char *value, char **errmsg,
- const void *params)
+ const void *params, const char *key)
{
+ (void)key;
const unit_table_t *table = params;
tor_assert(table);
uint64_t *v = (uint64_t*)target;
@@ -235,8 +240,9 @@ units_parse_u64(void *target, const char *value, char **errmsg,
static int
units_parse_int(void *target, const char *value, char **errmsg,
- const void *params)
+ const void *params, const char *key)
{
+ (void)key;
const unit_table_t *table = params;
tor_assert(table);
int *v = (int*)target;
@@ -283,10 +289,11 @@ static const var_type_fns_t interval_fns = {
static int
double_parse(void *target, const char *value, char **errmsg,
- const void *params)
+ const void *params, const char *key)
{
(void)params;
(void)errmsg;
+ (void)key;
double *v = (double*)target;
char *endptr=NULL;
errno = 0;
@@ -347,8 +354,9 @@ typedef struct enumeration_table_t {
static int
enum_parse(void *target, const char *value, char **errmsg,
- const void *params)
+ const void *params, const char *key)
{
+ (void)key;
const enumeration_table_t *table = params;
int *p = (int *)target;
for (; table->name; ++table) {
@@ -422,9 +430,10 @@ static const var_type_fns_t enum_fns = {
static int
time_parse(void *target, const char *value, char **errmsg,
- const void *params)
+ const void *params, const char *key)
{
(void) params;
+ (void) key;
time_t *p = target;
if (parse_iso_time(value, p) < 0) {
tor_asprintf(errmsg, "Invalid time %s", escaped(value));
@@ -466,10 +475,11 @@ static const var_type_fns_t time_fns = {
static int
csv_parse(void *target, const char *value, char **errmsg,
- const void *params)
+ const void *params, const char *key)
{
(void)params;
(void)errmsg;
+ (void)key;
smartlist_t **sl = (smartlist_t**)target;
*sl = smartlist_new();
smartlist_split_string(*sl, value, ",",
@@ -515,7 +525,7 @@ static const var_type_fns_t csv_fns = {
static int
legacy_csv_interval_parse(void *target, const char *value, char **errmsg,
- const void *params)
+ const void *params, const char *key)
{
(void)params;
/* We used to have entire smartlists here. But now that all of our
@@ -529,7 +539,7 @@ legacy_csv_interval_parse(void *target, const char *value, char **errmsg,
val = tmp;
}
- int rv = units_parse_int(target, val, errmsg, &time_units);
+ int rv = units_parse_int(target, val, errmsg, &time_units, key);
tor_free(tmp);
return rv;
}
@@ -693,14 +703,17 @@ static const var_type_fns_t linelist_s_fns = {
static int
ignore_parse(void *target, const char *value, char **errmsg,
- const void *params)
+ const void *params, const char *key)
{
(void)target;
(void)value;
(void)errmsg;
(void)params;
// XXXX move this to a higher level, once such a level exists.
- log_warn(LD_GENERAL, "Skipping obsolete configuration option.");
+ log_warn(LD_GENERAL, "Skipping obsolete configuration option%s%s%s",
+ key && *key ? " \"" : "",
+ key && *key ? key : "",
+ key && *key ? "\"." : ".");
return 0;
}
diff --git a/src/lib/confmgt/typedvar.c b/src/lib/confmgt/typedvar.c
index 219a2d15bc..ce11a69379 100644
--- a/src/lib/confmgt/typedvar.c
+++ b/src/lib/confmgt/typedvar.c
@@ -33,7 +33,8 @@
/**
* Try to parse a string in <b>value</b> that encodes an object of the type
- * defined by <b>def</b>.
+ * defined by <b>def</b>. If not NULL, <b>key</b> is the name of the option,
+ * which may be used for logging.
*
* On success, adjust the lvalue pointed to by <b>target</b> to hold that
* value, and return 0. On failure, set *<b>errmsg</b> to a newly allocated
@@ -41,7 +42,7 @@
**/
int
typed_var_assign(void *target, const char *value, char **errmsg,
- const var_type_def_t *def)
+ const var_type_def_t *def, const char *key)
{
if (BUG(!def))
return -1; // LCOV_EXCL_LINE
@@ -49,7 +50,7 @@ typed_var_assign(void *target, const char *value, char **errmsg,
typed_var_free(target, def);
tor_assert(def->fns->parse);
- return def->fns->parse(target, value, errmsg, def->params);
+ return def->fns->parse(target, value, errmsg, def->params, key);
}
/**
@@ -75,7 +76,7 @@ typed_var_kvassign(void *target, const config_line_t *line,
return def->fns->kv_parse(target, line, errmsg, def->params);
}
- return typed_var_assign(target, line->value, errmsg, def);
+ return typed_var_assign(target, line->value, errmsg, def, line->key);
}
/**
@@ -158,7 +159,7 @@ typed_var_copy(void *dest, const void *src, const var_type_def_t *def)
return 0;
}
char *err = NULL;
- int rv = typed_var_assign(dest, enc, &err, def);
+ int rv = typed_var_assign(dest, enc, &err, def, NULL);
if (BUG(rv < 0)) {
// LCOV_EXCL_START
log_warn(LD_BUG, "Encoded value %s was not parseable as a %s: %s",
diff --git a/src/lib/confmgt/typedvar.h b/src/lib/confmgt/typedvar.h
index 22f2e3c58e..4382613833 100644
--- a/src/lib/confmgt/typedvar.h
+++ b/src/lib/confmgt/typedvar.h
@@ -21,7 +21,7 @@ typedef struct var_type_fns_t var_type_fns_t;
typedef struct var_type_def_t var_type_def_t;
int typed_var_assign(void *target, const char *value, char **errmsg,
- const var_type_def_t *def);
+ const var_type_def_t *def, const char *key);
void typed_var_free(void *target, const var_type_def_t *def);
char *typed_var_encode(const void *value, const var_type_def_t *def);
int typed_var_copy(void *dest, const void *src, const var_type_def_t *def);
diff --git a/src/lib/confmgt/var_type_def_st.h b/src/lib/confmgt/var_type_def_st.h
index 2bf3d37cae..aa9ded39e9 100644
--- a/src/lib/confmgt/var_type_def_st.h
+++ b/src/lib/confmgt/var_type_def_st.h
@@ -52,9 +52,12 @@ struct var_type_fns_t {
* type. On success, adjust the lvalue pointed to by <b>target</b> to hold
* that value, and return 0. On failure, set *<b>errmsg</b> to a newly
* allocated string holding an error message, and return -1.
+ *
+ * If not NULL, <b>key</b> is the name of the option, which may be used for
+ * logging.
**/
int (*parse)(void *target, const char *value, char **errmsg,
- const void *params);
+ const void *params, const char *key);
/**
* Try to parse a single line from the head of<b>line</b> that encodes
* an object of this type. On success and failure, behave as in the parse()
diff --git a/src/test/conf_examples/obsolete_1/expected b/src/test/conf_examples/obsolete_1/expected
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/src/test/conf_examples/obsolete_1/expected
diff --git a/src/test/conf_examples/obsolete_1/torrc b/src/test/conf_examples/obsolete_1/torrc
new file mode 100644
index 0000000000..3cd9a6d777
--- /dev/null
+++ b/src/test/conf_examples/obsolete_1/torrc
@@ -0,0 +1,68 @@
+# These options are obsolete as of 0.4.2
+AllowDotExit
+AllowInvalidNodes
+AllowSingleHopCircuits
+AllowSingleHopExits
+AlternateHSAuthority
+AuthDirBadDir
+AuthDirBadDirCCs
+AuthDirRejectUnlisted
+AuthDirListBadDirs
+AuthDirMaxServersPerAuthAddr
+CircuitIdleTimeout
+ControlListenAddress
+DirListenAddress
+DisableIOCP
+DisableV2DirectoryInfo_
+DynamicDHGroups
+DNSListenAddress
+TestingEnableTbEmptyEvent
+ExcludeSingleHopRelays
+FallbackNetworkstatusFile
+FastFirstHopPK
+FetchV2Networkstatus
+Group
+HidServDirectoryV2
+CloseHSClientCircuitsImmediatelyOnTimeout
+CloseHSServiceRendCircuitsImmediatelyOnTimeout
+MaxOnionsPending
+NamingAuthoritativeDirectory
+NATDListenAddress
+PredictedPortsRelevanceTime
+WarnUnsafeSocks
+ORListenAddress
+PathBiasDisableRate
+PathBiasScaleFactor
+PathBiasMultFactor
+PathBiasUseCloseCounts
+PortForwarding
+PortForwardingHelper
+PreferTunneledDirConns
+RecommendedPackages
+RunTesting
+SchedulerLowWaterMark__
+SchedulerHighWaterMark__
+SchedulerMaxFlushCells__
+SocksListenAddress
+StrictEntryNodes
+StrictExitNodes
+Support022HiddenServices
+Tor2webMode
+Tor2webRendezvousPoints
+TLSECGroup
+TransListenAddress
+TunnelDirConns
+UseEntryGuardsAsDirGuards
+UseNTorHandshake
+UserspaceIOCPBuffers
+V1AuthoritativeDirectory
+V2AuthoritativeDirectory
+VoteOnHidServDirectoriesV2
+UseFilteringSSLBufferevents
+__UseFilteringSSLBufferevents
+TestingConsensusMaxDownloadTries
+ClientBootstrapConsensusMaxDownloadTries
+ClientBootstrapConsensusAuthorityOnlyMaxDownloadTries
+TestingDescriptorMaxDownloadTries
+TestingMicrodescMaxDownloadTries
+TestingCertMaxDownloadTries
diff --git a/src/test/conf_examples/obsolete_2/expected b/src/test/conf_examples/obsolete_2/expected
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/src/test/conf_examples/obsolete_2/expected
diff --git a/src/test/conf_examples/obsolete_2/torrc b/src/test/conf_examples/obsolete_2/torrc
new file mode 100644
index 0000000000..4f78d47625
--- /dev/null
+++ b/src/test/conf_examples/obsolete_2/torrc
@@ -0,0 +1,2 @@
+# This option has been obsolete for some time
+AllowDotExit