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 95ac3ea594.
This commit is contained in:
Sebastian Hahn 2011-06-02 13:30:32 +02:00
parent 1d8bcba067
commit df42eb0a18
4 changed files with 18 additions and 12 deletions

View File

@ -1952,7 +1952,7 @@ retry_all_listeners(smartlist_t *replaced_conns,
or_options_t *options = get_options(); or_options_t *options = get_options();
int retval = 0; int retval = 0;
const uint16_t old_or_port = router_get_advertised_or_port(options); 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, if (retry_listeners(CONN_TYPE_OR_LISTENER, options->ORListenAddress,
options->ORPort, "0.0.0.0", options->ORPort, "0.0.0.0",
@ -1998,7 +1998,7 @@ retry_all_listeners(smartlist_t *replaced_conns,
return -1; return -1;
if (old_or_port != router_get_advertised_or_port(options) || 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 /* Our chosen ORPort or DirPort is not what it used to be: the
* descriptor we had (if any) should be regenerated. (We won't * descriptor we had (if any) should be regenerated. (We won't
* automatically notice this because of changes in the option, * automatically notice this because of changes in the option,

View File

@ -2705,7 +2705,7 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key,
voter->sigs = smartlist_create(); voter->sigs = smartlist_create();
voter->address = hostname; voter->address = hostname;
voter->addr = addr; 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->or_port = router_get_advertised_or_port(options);
voter->contact = tor_strdup(contact); voter->contact = tor_strdup(contact);
if (options->V3AuthUseLegacyKey) { if (options->V3AuthUseLegacyKey) {
@ -2812,7 +2812,8 @@ generate_v2_networkstatus_opinion(void)
"dir-options%s%s%s%s\n" "dir-options%s%s%s%s\n"
"%s" /* client version line, server version line. */ "%s" /* client version line, server version line. */
"dir-signing-key\n%s", "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, fingerprint,
contact, contact,
published, published,

View File

@ -704,7 +704,7 @@ init_keys(void)
ds = router_get_trusteddirserver_by_digest(digest); ds = router_get_trusteddirserver_by_digest(digest);
if (!ds) { if (!ds) {
ds = add_trusted_dir_server(options->Nickname, NULL, 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), router_get_advertised_or_port(options),
digest, digest,
v3_digest, v3_digest,
@ -802,7 +802,7 @@ decide_to_advertise_dirport(or_options_t *options, uint16_t dir_port)
return 0; return 0;
if (!check_whether_dirport_reachable()) if (!check_whether_dirport_reachable())
return 0; return 0;
if (!router_get_advertised_dir_port(options)) if (!router_get_advertised_dir_port(options, dir_port))
return 0; return 0;
/* Section two: reasons to publish or not publish that the user /* 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 options->ORPort;
} }
/** Return the port that we should advertise as our DirPort; this is either /** Return the port that we should advertise as our DirPort;
* the one configured in the DirPort option, or the one we actually bound to * this is one of three possibilities:
* if DirPort is "auto". */ * 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 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) { if (options->DirPort == CFG_AUTO_PORT) {
connection_t *c = connection_get_by_type(CONN_TYPE_DIR_LISTENER); connection_t *c = connection_get_by_type(CONN_TYPE_DIR_LISTENER);
if (c) if (c)
@ -1440,7 +1444,7 @@ router_rebuild_descriptor(int force)
ri->nickname = tor_strdup(options->Nickname); ri->nickname = tor_strdup(options->Nickname);
ri->addr = addr; ri->addr = addr;
ri->or_port = router_get_advertised_or_port(options); 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->cache_info.published_on = time(NULL);
ri->onion_pkey = crypto_pk_dup_key(get_onion_key()); /* must invoke from ri->onion_pkey = crypto_pk_dup_key(get_onion_key()); /* must invoke from
* main thread */ * main thread */

View File

@ -51,7 +51,8 @@ int authdir_mode_tests_reachability(or_options_t *options);
int authdir_mode_bridge(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_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 server_mode(or_options_t *options);
int public_server_mode(or_options_t *options); int public_server_mode(or_options_t *options);