summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2019-02-08 08:37:43 -0500
committerNick Mathewson <nickm@torproject.org>2019-02-08 08:37:43 -0500
commitab6534781996404ca57e9f5b0cbdda998579c329 (patch)
treebab5257169246e99f755f1c93585139687fa5549
parent4b36f9676db4ca98101c26ba5fc539ed458ae571 (diff)
parenteca0f87801ea5062038544b6cfe2bdbba0998999 (diff)
downloadtor-ab6534781996404ca57e9f5b0cbdda998579c329.tar.gz
tor-ab6534781996404ca57e9f5b0cbdda998579c329.zip
Merge branch 'ticket29040_1_changes' into maint-0.3.5
-rw-r--r--changes/bug290404
-rw-r--r--src/app/config/config.c16
-rw-r--r--src/app/config/config.h10
-rw-r--r--src/feature/hs/hs_client.c6
4 files changed, 29 insertions, 7 deletions
diff --git a/changes/bug29040 b/changes/bug29040
new file mode 100644
index 0000000000..0662aaa8a5
--- /dev/null
+++ b/changes/bug29040
@@ -0,0 +1,4 @@
+ o Minor bugfixes (onion services):
+ - Avoid crashing if ClientOnionAuthDir (incorrectly) contains
+ more than one private key for a hidden service. Fixes bug 29040;
+ bugfix on 0.3.5.1-alpha.
diff --git a/src/app/config/config.c b/src/app/config/config.c
index 974b97130f..e06c77e439 100644
--- a/src/app/config/config.c
+++ b/src/app/config/config.c
@@ -1086,10 +1086,14 @@ config_free_all(void)
* (We return "[scrubbed]" if SafeLogging is "1", and address otherwise.)
*/
const char *
-safe_str_client(const char *address)
+safe_str_client_opts(const or_options_t *options, const char *address)
{
tor_assert(address);
- if (get_options()->SafeLogging_ == SAFELOG_SCRUB_ALL)
+ if (!options) {
+ options = get_options();
+ }
+
+ if (options->SafeLogging_ == SAFELOG_SCRUB_ALL)
return "[scrubbed]";
else
return address;
@@ -1103,10 +1107,14 @@ safe_str_client(const char *address)
* otherwise.)
*/
const char *
-safe_str(const char *address)
+safe_str_opts(const or_options_t *options, const char *address)
{
tor_assert(address);
- if (get_options()->SafeLogging_ != SAFELOG_SCRUB_NONE)
+ if (!options) {
+ options = get_options();
+ }
+
+ if (options->SafeLogging_ != SAFELOG_SCRUB_NONE)
return "[scrubbed]";
else
return address;
diff --git a/src/app/config/config.h b/src/app/config/config.h
index 22834bd242..301faf7067 100644
--- a/src/app/config/config.h
+++ b/src/app/config/config.h
@@ -143,6 +143,16 @@ MOCK_DECL(char *,
#define get_cachedir_fname_suffix(sub1, suffix) \
options_get_cachedir_fname2_suffix(get_options(), (sub1), NULL, (suffix))
+#define safe_str_client(address) \
+ safe_str_client_opts(NULL, address)
+#define safe_str(address) \
+ safe_str_opts(NULL, address)
+
+const char * safe_str_client_opts(const or_options_t *options,
+ const char *address);
+const char * safe_str_opts(const or_options_t *options,
+ const char *address);
+
int using_default_dir_authorities(const or_options_t *options);
int create_keys_directory(const or_options_t *options);
diff --git a/src/feature/hs/hs_client.c b/src/feature/hs/hs_client.c
index d4eee50bb7..bd43ef6132 100644
--- a/src/feature/hs/hs_client.c
+++ b/src/feature/hs/hs_client.c
@@ -1637,17 +1637,17 @@ hs_config_client_authorization(const or_options_t *options,
* as a key of global map in the future. */
if (hs_parse_address(auth->onion_address, &identity_pk,
NULL, NULL) < 0) {
- client_service_authorization_free(auth);
log_warn(LD_REND, "The onion address \"%s\" is invalid in "
"file %s", filename, auth->onion_address);
+ client_service_authorization_free(auth);
continue;
}
if (digest256map_get(auths, identity_pk.pubkey)) {
- client_service_authorization_free(auth);
log_warn(LD_REND, "Duplicate authorization for the same hidden "
"service address %s.",
- safe_str_client(auth->onion_address));
+ safe_str_client_opts(options, auth->onion_address));
+ client_service_authorization_free(auth);
goto end;
}