Commit c31700d6 authored by Nick Mathewson's avatar Nick Mathewson 🤹
Browse files

Merge branch 'maint-0.3.2' into maint-0.3.3

parents 28d1057d 559f79fd
Loading
Loading
Loading
Loading

changes/bug26485

0 → 100644
+4 −0
Original line number Diff line number Diff line
  o Minor bugfixes (directory authority):
    - When voting for recommended versions, make sure that all of the
      versions are well-formed and parsable. Fixes bug 26485; bugfix on
      0.1.1.6-alpha.
+8 −1
Original line number Diff line number Diff line
@@ -3472,6 +3472,14 @@ options_validate(or_options_t *old_options, or_options_t *options,
         !options->RecommendedServerVersions))
      REJECT("Versioning authoritative dir servers must set "
             "Recommended*Versions.");

    char *t;
    /* Call these functions to produce warnings only. */
    t = format_recommended_version_list(options->RecommendedClientVersions, 1);
    tor_free(t);
    t = format_recommended_version_list(options->RecommendedServerVersions, 1);
    tor_free(t);

    if (options->UseEntryGuards) {
      log_info(LD_CONFIG, "Authoritative directory servers can't set "
               "UseEntryGuards. Disabling.");
@@ -8399,4 +8407,3 @@ init_cookie_authentication(const char *fname, const char *header,
  tor_free(cookie_file_str);
  return retval;
}
+37 −6
Original line number Diff line number Diff line
@@ -74,7 +74,6 @@
static int routers_with_measured_bw = 0;

static void directory_remove_invalid(void);
static char *format_versions_list(config_line_t *ln);
struct authdir_config_t;
static uint32_t
dirserv_get_status_impl(const char *fp, const char *nickname,
@@ -1061,8 +1060,8 @@ list_server_status_v1(smartlist_t *routers, char **router_status_out,
 * allocate and return a new string containing the version numbers, in order,
 * separated by commas.  Used to generate Recommended(Client|Server)?Versions
 */
static char *
format_versions_list(config_line_t *ln)
char *
format_recommended_version_list(const config_line_t *ln, int warn)
{
  smartlist_t *versions;
  char *result;
@@ -1071,6 +1070,37 @@ format_versions_list(config_line_t *ln)
    smartlist_split_string(versions, ln->value, ",",
                           SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
  }

  /* Handle the case where a dirauth operator has accidentally made some
   * versions space-separated instead of comma-separated. */
  smartlist_t *more_versions = smartlist_new();
  SMARTLIST_FOREACH_BEGIN(versions, char *, v) {
    if (strchr(v, ' ')) {
      if (warn)
        log_warn(LD_DIRSERV, "Unexpected space in versions list member %s. "
                 "(These are supposed to be comma-separated; I'll pretend you "
                 "used commas instead.)", escaped(v));
      SMARTLIST_DEL_CURRENT(versions, v);
      smartlist_split_string(more_versions, v, NULL,
                             SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
      tor_free(v);
    }
  } SMARTLIST_FOREACH_END(v);
  smartlist_add_all(versions, more_versions);
  smartlist_free(more_versions);

  /* Check to make sure everything looks like a version. */
  if (warn) {
    SMARTLIST_FOREACH_BEGIN(versions, const char *, v) {
      tor_version_t ver;
      if (tor_version_parse(v, &ver) < 0) {
        log_warn(LD_DIRSERV, "Recommended version %s does not look valid. "
                 " (I'll include it anyway, since you told me to.)",
                 escaped(v));
      }
    } SMARTLIST_FOREACH_END(v);
  }

  sort_version_list(versions, 1);
  result = smartlist_join_strings(versions,",",0,NULL);
  SMARTLIST_FOREACH(versions,char *,s,tor_free(s));
@@ -2911,8 +2941,10 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
  }

  if (options->VersioningAuthoritativeDir) {
    client_versions = format_versions_list(options->RecommendedClientVersions);
    server_versions = format_versions_list(options->RecommendedServerVersions);
    client_versions =
      format_recommended_version_list(options->RecommendedClientVersions, 0);
    server_versions =
      format_recommended_version_list(options->RecommendedServerVersions, 0);
  }

  contact = get_options()->ContactInfo;
@@ -4062,4 +4094,3 @@ dirserv_free_all(void)

  dirserv_clear_measured_bw_cache();
}
+1 −2
Original line number Diff line number Diff line
@@ -155,7 +155,7 @@ char *routerstatus_format_entry(
void dirserv_free_all(void);
void cached_dir_decref(cached_dir_t *d);
cached_dir_t *new_cached_dir(char *s, time_t published);

char *format_recommended_version_list(const config_line_t *line, int warn);
int validate_recommended_package_line(const char *line);

#ifdef DIRSERV_PRIVATE
@@ -208,4 +208,3 @@ void dirserv_spool_sort(dir_connection_t *conn);
void dir_conn_clear_spool(dir_connection_t *conn);

#endif /* !defined(TOR_DIRSERV_H) */
+8 −1
Original line number Diff line number Diff line
@@ -707,6 +707,14 @@ compute_consensus_versions_list(smartlist_t *lst, int n_versioning)
  int min = n_versioning / 2;
  smartlist_t *good = smartlist_new();
  char *result;
  SMARTLIST_FOREACH_BEGIN(lst, const char *, v) {
    if (strchr(v, ' ')) {
      log_warn(LD_DIR, "At least one authority has voted for a version %s "
               "that contains a space. This probably wasn't intentional, and "
               "is likely to cause trouble. Please tell them to stop it.",
               escaped(v));
    }
  } SMARTLIST_FOREACH_END(v);
  sort_version_list(lst, 0);
  get_frequent_members(good, lst, min);
  result = smartlist_join_strings(good, ",", 0, NULL);
@@ -4077,4 +4085,3 @@ vote_routerstatus_find_microdesc_hash(char *digest256_out,
  }
  return -1;
}
Loading