summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2019-02-08 08:37:46 -0500
committerNick Mathewson <nickm@torproject.org>2019-02-08 08:37:46 -0500
commit7f59b9fb1fdc4519e663fa82e416eccae88e8934 (patch)
treeb7835f898ac1cd47a0e02bea5da20c6eee017733
parentb1ae2fd65ba165722dc121df7bb0be4ec5d6597c (diff)
parentab6534781996404ca57e9f5b0cbdda998579c329 (diff)
downloadtor-7f59b9fb1fdc4519e663fa82e416eccae88e8934.tar.gz
tor-7f59b9fb1fdc4519e663fa82e416eccae88e8934.zip
Merge branch '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 952b9cd301..8e4794315f 100644
--- a/src/app/config/config.c
+++ b/src/app/config/config.c
@@ -1056,10 +1056,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;
@@ -1073,10 +1077,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 b3b3150825..46db02f944 100644
--- a/src/app/config/config.h
+++ b/src/app/config/config.h
@@ -141,6 +141,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;
}