Commit aed93f8a authored by Nick Mathewson's avatar Nick Mathewson 🦀
Browse files

Merge branch 'bug6490_v2' into maint-0.2.3

parents d9bd0de0 2bd45213
Loading
Loading
Loading
Loading

changes/bug6490

0 → 100644
+4 −0
Original line number Diff line number Diff line
  o Minor features:
    - Warn when Tor is configured to use accounting in a way that will
      link a hidden service to some other hidden service or public
      address. Fix for bug 6490.
+29 −0
Original line number Diff line number Diff line
@@ -594,6 +594,7 @@ static void option_reset(const config_format_t *fmt, or_options_t *options,
                         const config_var_t *var, int use_defaults);
static void config_free(const config_format_t *fmt, void *options);
static int config_lines_eq(config_line_t *a, config_line_t *b);
static int config_count_key(const config_line_t *a, const char *key);
static int option_is_same(const config_format_t *fmt,
                          const or_options_t *o1, const or_options_t *o2,
                          const char *name);
@@ -3066,6 +3067,20 @@ config_lines_eq(config_line_t *a, config_line_t *b)
  return 1;
}

/** Return the number of lines in <b>a</b> whose key is <b>key</b>. */
static int
config_count_key(const config_line_t *a, const char *key)
{
  int n = 0;
  while (a) {
    if (!strcasecmp(a->key, key)) {
      ++n;
    }
    a = a->next;
  }
  return n;
}

/** Return true iff the option <b>name</b> has the same value in <b>o1</b>
 * and <b>o2</b>.  Must not be called for LINELIST_S or OBSOLETE options.
 */
@@ -3848,6 +3863,20 @@ options_validate(or_options_t *old_options, or_options_t *options,
  if (accounting_parse_options(options, 1)<0)
    REJECT("Failed to parse accounting options. See logs for details.");

  if (options->AccountingMax) {
    if (options->RendConfigLines && server_mode(options)) {
      log_warn(LD_CONFIG, "Using accounting with a hidden service and an "
               "ORPort is risky: your hidden service(s) and your public "
               "address will all turn off at the same time, which may alert "
               "observers that they are being run by the same party.");
    } else if (config_count_key(options->RendConfigLines,
                                "HiddenServiceDir") > 1) {
      log_warn(LD_CONFIG, "Using accounting with multiple hidden services is "
               "risky: they will all turn off at the same time, which may "
               "alert observers that they are being run by the same party.");
    }
  }

  if (options->HTTPProxy) { /* parse it now */
    if (tor_addr_port_lookup(options->HTTPProxy,
                        &options->HTTPProxyAddr, &options->HTTPProxyPort) < 0)