Commit df42eb0a authored by Sebastian Hahn's avatar Sebastian Hahn
Browse files

Fix unit test failure in dir/formats

options->DirPort is 0 in the unit tests, so
router_get_advertised_dir_port() would return 0 so we wouldn't pick a
dirport. This isn't what we want for the unit tests. Fixes bug
introduced in 95ac3ea5.
parent 1d8bcba0
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1952,7 +1952,7 @@ retry_all_listeners(smartlist_t *replaced_conns,
  or_options_t *options = get_options();
  int retval = 0;
  const uint16_t old_or_port = router_get_advertised_or_port(options);
  const uint16_t old_dir_port = router_get_advertised_dir_port(options);
  const uint16_t old_dir_port = router_get_advertised_dir_port(options, 0);

  if (retry_listeners(CONN_TYPE_OR_LISTENER, options->ORListenAddress,
                      options->ORPort, "0.0.0.0",
@@ -1998,7 +1998,7 @@ retry_all_listeners(smartlist_t *replaced_conns,
    return -1;

  if (old_or_port != router_get_advertised_or_port(options) ||
      old_dir_port != router_get_advertised_dir_port(options)) {
      old_dir_port != router_get_advertised_dir_port(options, 0)) {
    /* Our chosen ORPort or DirPort is not what it used to be: the
     * descriptor we had (if any) should be regenerated.  (We won't
     * automatically notice this because of changes in the option,
+3 −2
Original line number Diff line number Diff line
@@ -2705,7 +2705,7 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key,
  voter->sigs = smartlist_create();
  voter->address = hostname;
  voter->addr = addr;
  voter->dir_port = router_get_advertised_dir_port(options);
  voter->dir_port = router_get_advertised_dir_port(options, 0);
  voter->or_port = router_get_advertised_or_port(options);
  voter->contact = tor_strdup(contact);
  if (options->V3AuthUseLegacyKey) {
@@ -2812,7 +2812,8 @@ generate_v2_networkstatus_opinion(void)
               "dir-options%s%s%s%s\n"
               "%s" /* client version line, server version line. */
               "dir-signing-key\n%s",
               hostname, ipaddr, (int)router_get_advertised_dir_port(options),
               hostname, ipaddr,
               (int)router_get_advertised_dir_port(options, 0),
               fingerprint,
               contact,
               published,
+11 −7
Original line number Diff line number Diff line
@@ -704,7 +704,7 @@ init_keys(void)
  ds = router_get_trusteddirserver_by_digest(digest);
  if (!ds) {
    ds = add_trusted_dir_server(options->Nickname, NULL,
                                router_get_advertised_dir_port(options),
                                router_get_advertised_dir_port(options, 0),
                                router_get_advertised_or_port(options),
                                digest,
                                v3_digest,
@@ -802,7 +802,7 @@ decide_to_advertise_dirport(or_options_t *options, uint16_t dir_port)
    return 0;
  if (!check_whether_dirport_reachable())
    return 0;
  if (!router_get_advertised_dir_port(options))
  if (!router_get_advertised_dir_port(options, dir_port))
    return 0;

  /* Section two: reasons to publish or not publish that the user
@@ -1184,12 +1184,16 @@ router_get_advertised_or_port(or_options_t *options)
  return options->ORPort;
}

/** Return the port that we should advertise as our DirPort; this is either
 * the one configured in the DirPort option, or the one we actually bound to
 * if DirPort is "auto". */
/** Return the port that we should advertise as our DirPort;
 * this is one of three possibilities:
 * The one that is passed as <b>dirport</b> if the DirPort option is 0, or
 * the one configured in the DirPort option,
 * or the one we actually bound to if DirPort is "auto". */
uint16_t
router_get_advertised_dir_port(or_options_t *options)
router_get_advertised_dir_port(or_options_t *options, uint16_t dirport)
{
  if (!options->DirPort)
    return dirport;
  if (options->DirPort == CFG_AUTO_PORT) {
    connection_t *c = connection_get_by_type(CONN_TYPE_DIR_LISTENER);
    if (c)
@@ -1440,7 +1444,7 @@ router_rebuild_descriptor(int force)
  ri->nickname = tor_strdup(options->Nickname);
  ri->addr = addr;
  ri->or_port = router_get_advertised_or_port(options);
  ri->dir_port = router_get_advertised_dir_port(options);
  ri->dir_port = router_get_advertised_dir_port(options, 0);
  ri->cache_info.published_on = time(NULL);
  ri->onion_pkey = crypto_pk_dup_key(get_onion_key()); /* must invoke from
                                                        * main thread */
+2 −1
Original line number Diff line number Diff line
@@ -51,7 +51,8 @@ int authdir_mode_tests_reachability(or_options_t *options);
int authdir_mode_bridge(or_options_t *options);

uint16_t router_get_advertised_or_port(or_options_t *options);
uint16_t router_get_advertised_dir_port(or_options_t *options);
uint16_t router_get_advertised_dir_port(or_options_t *options,
                                        uint16_t dirport);

int server_mode(or_options_t *options);
int public_server_mode(or_options_t *options);