Merge remote-tracking branch 'teor/bug-15642-v3-fallback-unit-tests'

This commit is contained in:
Nick Mathewson 2015-04-23 09:22:16 -04:00
commit 01d988d72f
4 changed files with 1806 additions and 12 deletions

View File

@ -0,0 +1,10 @@
o Minor bugfixes (configuration, unit tests):
- Only add the default fallback directories when the DirAuthorities,
AlternateDirAuthority, and FallbackDir directory config options
are set to their defaults.
The default fallback directory list is currently empty, this fix
will only change tor's behaviour when it has default fallback
directories.
Includes unit tests for consider_adding_dir_servers().
Fixes bug 15642; bugfix on 90f6071d8dc0 in 0.2.4.7-alpha.
Patch by "teor".

View File

@ -545,8 +545,6 @@ static char *get_bindaddr_from_transport_listen_line(const char *line,
static int parse_dir_authority_line(const char *line,
dirinfo_type_t required_type,
int validate_only);
static int parse_dir_fallback_line(const char *line,
int validate_only);
static void port_cfg_free(port_cfg_t *port);
static int parse_ports(or_options_t *options, int validate_only,
char **msg_out, int *n_ports_out);
@ -891,8 +889,8 @@ add_default_trusted_dir_authorities(dirinfo_type_t type)
/** Add the default fallback directory servers into the fallback directory
* server list. */
static void
add_default_fallback_dir_servers(void)
MOCK_IMPL(void,
add_default_fallback_dir_servers,(void))
{
int i;
const char *fallback[] = {
@ -961,7 +959,7 @@ validate_dir_servers(or_options_t *options, or_options_t *old_options)
/** Look at all the config options and assign new dir authorities
* as appropriate.
*/
static int
int
consider_adding_dir_servers(const or_options_t *options,
const or_options_t *old_options)
{
@ -979,23 +977,36 @@ consider_adding_dir_servers(const or_options_t *options,
if (!need_to_update)
return 0; /* all done */
/* "You cannot set both DirAuthority and Alternate*Authority."
* Checking that this restriction holds allows us to simplify
* the unit tests. */
tor_assert(!(options->DirAuthorities &&
(options->AlternateDirAuthority
|| options->AlternateBridgeAuthority)));
/* Start from a clean slate. */
clear_dir_servers();
if (!options->DirAuthorities) {
/* then we may want some of the defaults */
dirinfo_type_t type = NO_DIRINFO;
if (!options->AlternateBridgeAuthority)
if (!options->AlternateBridgeAuthority) {
type |= BRIDGE_DIRINFO;
if (!options->AlternateDirAuthority)
}
if (!options->AlternateDirAuthority) {
type |= V3_DIRINFO | EXTRAINFO_DIRINFO | MICRODESC_DIRINFO;
/* Only add the default fallback directories when the DirAuthorities,
* AlternateDirAuthority, and FallbackDir directory config options
* are set to their defaults. */
if (!options->FallbackDir) {
add_default_fallback_dir_servers();
}
}
/* if type == NO_DIRINFO, we don't want to add any of the
* default authorities, because we've replaced them all */
if (type != NO_DIRINFO)
add_default_trusted_dir_authorities(type);
}
if (!options->FallbackDir)
add_default_fallback_dir_servers();
for (cl = options->DirAuthorities; cl; cl = cl->next)
if (parse_dir_authority_line(cl->value, NO_DIRINFO, 0)<0)
@ -5495,7 +5506,7 @@ parse_dir_authority_line(const char *line, dirinfo_type_t required_type,
* <b>validate_only</b> is 0, and the line is well-formed, then add the
* dirserver described in the line as a fallback directory. Return 0 on
* success, or -1 if the line isn't well-formed or if we can't add it. */
static int
int
parse_dir_fallback_line(const char *line,
int validate_only)
{

View File

@ -144,6 +144,12 @@ STATIC int options_validate(or_options_t *old_options,
STATIC int parse_transport_line(const or_options_t *options,
const char *line, int validate_only,
int server);
STATIC int consider_adding_dir_servers(const or_options_t *options,
const or_options_t *old_options);
MOCK_DECL(STATIC void, add_default_fallback_dir_servers, (void));
STATIC int
parse_dir_fallback_line(const char *line,
int validate_only);
#endif
#endif

File diff suppressed because it is too large Load Diff