Merge branch 'ticket29040_1_changes' into maint-0.3.5

This commit is contained in:
Nick Mathewson 2019-02-08 08:37:43 -05:00
commit ab65347819
4 changed files with 29 additions and 7 deletions

4
changes/bug29040 Normal file
View File

@ -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.

View File

@ -1086,10 +1086,14 @@ config_free_all(void)
* (We return "[scrubbed]" if SafeLogging is "1", and address otherwise.) * (We return "[scrubbed]" if SafeLogging is "1", and address otherwise.)
*/ */
const char * const char *
safe_str_client(const char *address) safe_str_client_opts(const or_options_t *options, const char *address)
{ {
tor_assert(address); tor_assert(address);
if (get_options()->SafeLogging_ == SAFELOG_SCRUB_ALL) if (!options) {
options = get_options();
}
if (options->SafeLogging_ == SAFELOG_SCRUB_ALL)
return "[scrubbed]"; return "[scrubbed]";
else else
return address; return address;
@ -1103,10 +1107,14 @@ safe_str_client(const char *address)
* otherwise.) * otherwise.)
*/ */
const char * const char *
safe_str(const char *address) safe_str_opts(const or_options_t *options, const char *address)
{ {
tor_assert(address); tor_assert(address);
if (get_options()->SafeLogging_ != SAFELOG_SCRUB_NONE) if (!options) {
options = get_options();
}
if (options->SafeLogging_ != SAFELOG_SCRUB_NONE)
return "[scrubbed]"; return "[scrubbed]";
else else
return address; return address;

View File

@ -143,6 +143,16 @@ MOCK_DECL(char *,
#define get_cachedir_fname_suffix(sub1, suffix) \ #define get_cachedir_fname_suffix(sub1, suffix) \
options_get_cachedir_fname2_suffix(get_options(), (sub1), NULL, (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 using_default_dir_authorities(const or_options_t *options);
int create_keys_directory(const or_options_t *options); int create_keys_directory(const or_options_t *options);

View File

@ -1637,17 +1637,17 @@ hs_config_client_authorization(const or_options_t *options,
* as a key of global map in the future. */ * as a key of global map in the future. */
if (hs_parse_address(auth->onion_address, &identity_pk, if (hs_parse_address(auth->onion_address, &identity_pk,
NULL, NULL) < 0) { NULL, NULL) < 0) {
client_service_authorization_free(auth);
log_warn(LD_REND, "The onion address \"%s\" is invalid in " log_warn(LD_REND, "The onion address \"%s\" is invalid in "
"file %s", filename, auth->onion_address); "file %s", filename, auth->onion_address);
client_service_authorization_free(auth);
continue; continue;
} }
if (digest256map_get(auths, identity_pk.pubkey)) { if (digest256map_get(auths, identity_pk.pubkey)) {
client_service_authorization_free(auth);
log_warn(LD_REND, "Duplicate authorization for the same hidden " log_warn(LD_REND, "Duplicate authorization for the same hidden "
"service address %s.", "service address %s.",
safe_str_client(auth->onion_address)); safe_str_client_opts(options, auth->onion_address));
client_service_authorization_free(auth);
goto end; goto end;
} }