Merge remote-tracking branch 'origin/maint-0.2.2'

Conflicts:
	src/or/dirserv.c
	src/or/networkstatus.c

Conflicts were related to routerinfo->node shift.
This commit is contained in:
Nick Mathewson 2011-09-07 14:51:55 -04:00
commit 41eef6680e
8 changed files with 35 additions and 9 deletions

5
changes/bug2649a Normal file
View File

@ -0,0 +1,5 @@
o Minor features:
- Add a VoteOnHidServDirectoriesV2 configuration option to allow
directory authorities to abstain from voting on assignment of
the HSDir consensus flag. Related to bug 2649.

5
changes/bug2649b Normal file
View File

@ -0,0 +1,5 @@
o Minor bugfixes:
- Change the default required uptime for a relay to be accepted as
a HSDir from 24 hours to 25 hours. Bugfix on 0.2.0.10-alpha;
fixes bug 2649.

View File

@ -1285,7 +1285,7 @@ if DirPort is non-zero):
**MinUptimeHidServDirectoryV2** __N__ **seconds**|**minutes**|**hours**|**days**|**weeks**:: **MinUptimeHidServDirectoryV2** __N__ **seconds**|**minutes**|**hours**|**days**|**weeks**::
Minimum uptime of a v2 hidden service directory to be accepted as such by Minimum uptime of a v2 hidden service directory to be accepted as such by
authoritative directories. (Default: 24 hours) authoritative directories. (Default: 25 hours)
**DirPort** __PORT__|**auto**:: **DirPort** __PORT__|**auto**::
If this option is nonzero, advertise the directory service on this port. If this option is nonzero, advertise the directory service on this port.
@ -1437,6 +1437,11 @@ DIRECTORY AUTHORITY SERVER OPTIONS
that fine-grained information about nodes can be discarded when it hasn't that fine-grained information about nodes can be discarded when it hasn't
changed for a given amount of time. (Default: 24 hours) changed for a given amount of time. (Default: 24 hours)
**VoteOnHidServDirectoriesV2** **0**|**1**::
When this option is set in addition to **AuthoritativeDirectory**, Tor
votes on whether to accept relays as hidden service directories.
(Default: 1)
HIDDEN SERVICE OPTIONS HIDDEN SERVICE OPTIONS
---------------------- ----------------------

View File

@ -420,7 +420,8 @@ static config_var_t _option_vars[] = {
VAR("__HashedControlSessionPassword", LINELIST, HashedControlSessionPassword, VAR("__HashedControlSessionPassword", LINELIST, HashedControlSessionPassword,
NULL), NULL),
VAR("__OwningControllerProcess",STRING,OwningControllerProcess, NULL), VAR("__OwningControllerProcess",STRING,OwningControllerProcess, NULL),
V(MinUptimeHidServDirectoryV2, INTERVAL, "24 hours"), V(MinUptimeHidServDirectoryV2, INTERVAL, "25 hours"),
V(VoteOnHidServDirectoriesV2, BOOL, "1"),
V(_UsingTestNetworkDefaults, BOOL, "0"), V(_UsingTestNetworkDefaults, BOOL, "0"),
{ NULL, CONFIG_TYPE_OBSOLETE, 0, NULL } { NULL, CONFIG_TYPE_OBSOLETE, 0, NULL }

View File

@ -2301,7 +2301,7 @@ set_routerstatus_from_routerinfo(routerstatus_t *rs,
routerinfo_t *ri, routerinfo_t *ri,
time_t now, time_t now,
int naming, int listbadexits, int naming, int listbadexits,
int listbaddirs) int listbaddirs, int vote_on_hsdirs)
{ {
int unstable_version = int unstable_version =
!tor_version_as_new_as(ri->platform,"0.1.1.16-rc-cvs"); !tor_version_as_new_as(ri->platform,"0.1.1.16-rc-cvs");
@ -2340,10 +2340,11 @@ set_routerstatus_from_routerinfo(routerstatus_t *rs,
} else { } else {
rs->is_possible_guard = 0; rs->is_possible_guard = 0;
} }
rs->is_bad_directory = listbaddirs && node->is_bad_directory; rs->is_bad_directory = listbaddirs && node->is_bad_directory;
rs->is_bad_exit = listbadexits && node->is_bad_exit; rs->is_bad_exit = listbadexits && node->is_bad_exit;
node->is_hs_dir = dirserv_thinks_router_is_hs_dir(ri, node, now); node->is_hs_dir = dirserv_thinks_router_is_hs_dir(ri, node, now);
rs->is_hs_dir = node->is_hs_dir; rs->is_hs_dir = vote_on_hsdirs && node->is_hs_dir;
rs->is_v2_dir = ri->dir_port != 0; rs->is_v2_dir = ri->dir_port != 0;
if (!strcasecmp(ri->nickname, UNNAMED_ROUTER_NICKNAME)) if (!strcasecmp(ri->nickname, UNNAMED_ROUTER_NICKNAME))
@ -2563,6 +2564,7 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key,
int naming = options->NamingAuthoritativeDir; int naming = options->NamingAuthoritativeDir;
int listbadexits = options->AuthDirListBadExits; int listbadexits = options->AuthDirListBadExits;
int listbaddirs = options->AuthDirListBadDirs; int listbaddirs = options->AuthDirListBadDirs;
int vote_on_hsdirs = options->VoteOnHidServDirectoriesV2;
routerlist_t *rl = router_get_routerlist(); routerlist_t *rl = router_get_routerlist();
time_t now = time(NULL); time_t now = time(NULL);
time_t cutoff = now - ROUTER_MAX_AGE_TO_PUBLISH; time_t cutoff = now - ROUTER_MAX_AGE_TO_PUBLISH;
@ -2629,7 +2631,8 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key,
vrs = tor_malloc_zero(sizeof(vote_routerstatus_t)); vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
rs = &vrs->status; rs = &vrs->status;
set_routerstatus_from_routerinfo(rs, node, ri, now, set_routerstatus_from_routerinfo(rs, node, ri, now,
naming, listbadexits, listbaddirs); naming, listbadexits, listbaddirs,
vote_on_hsdirs);
if (digestmap_get(omit_as_sybil, ri->cache_info.identity_digest)) if (digestmap_get(omit_as_sybil, ri->cache_info.identity_digest))
clear_status_flags_on_sybil(rs); clear_status_flags_on_sybil(rs);
@ -2706,7 +2709,7 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key,
v3_out->server_versions = server_versions; v3_out->server_versions = server_versions;
v3_out->known_flags = smartlist_create(); v3_out->known_flags = smartlist_create();
smartlist_split_string(v3_out->known_flags, smartlist_split_string(v3_out->known_flags,
"Authority Exit Fast Guard HSDir Stable V2Dir Valid", "Authority Exit Fast Guard Stable V2Dir Valid",
0, SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0); 0, SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
if (vote_on_reachability) if (vote_on_reachability)
smartlist_add(v3_out->known_flags, tor_strdup("Running")); smartlist_add(v3_out->known_flags, tor_strdup("Running"));
@ -2718,6 +2721,8 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key,
smartlist_add(v3_out->known_flags, tor_strdup("Named")); smartlist_add(v3_out->known_flags, tor_strdup("Named"));
smartlist_add(v3_out->known_flags, tor_strdup("Unnamed")); smartlist_add(v3_out->known_flags, tor_strdup("Unnamed"));
} }
if (vote_on_hsdirs)
smartlist_add(v3_out->known_flags, tor_strdup("HSDir"));
smartlist_sort_strings(v3_out->known_flags); smartlist_sort_strings(v3_out->known_flags);
if (options->ConsensusParams) { if (options->ConsensusParams) {
@ -2780,6 +2785,7 @@ generate_v2_networkstatus_opinion(void)
int versioning = options->VersioningAuthoritativeDir; int versioning = options->VersioningAuthoritativeDir;
int listbaddirs = options->AuthDirListBadDirs; int listbaddirs = options->AuthDirListBadDirs;
int listbadexits = options->AuthDirListBadExits; int listbadexits = options->AuthDirListBadExits;
int vote_on_hsdirs = options->VoteOnHidServDirectoriesV2;
const char *contact; const char *contact;
char *version_lines = NULL; char *version_lines = NULL;
smartlist_t *routers = NULL; smartlist_t *routers = NULL;
@ -2874,7 +2880,8 @@ generate_v2_networkstatus_opinion(void)
continue; continue;
} }
set_routerstatus_from_routerinfo(&rs, node, ri, now, set_routerstatus_from_routerinfo(&rs, node, ri, now,
naming, listbadexits, listbaddirs); naming, listbadexits, listbaddirs,
vote_on_hsdirs);
if (digestmap_get(omit_as_sybil, ri->cache_info.identity_digest)) if (digestmap_get(omit_as_sybil, ri->cache_info.identity_digest))
clear_status_flags_on_sybil(&rs); clear_status_flags_on_sybil(&rs);

View File

@ -63,7 +63,7 @@ void set_routerstatus_from_routerinfo(routerstatus_t *rs,
node_t *node, node_t *node,
routerinfo_t *ri, time_t now, routerinfo_t *ri, time_t now,
int naming, int listbadexits, int naming, int listbadexits,
int listbaddirs); int listbaddirs, int vote_on_hsdirs);
void router_clear_status_flags(routerinfo_t *ri); void router_clear_status_flags(routerinfo_t *ri);
networkstatus_t * networkstatus_t *
dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key, dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key,

View File

@ -2133,7 +2133,7 @@ networkstatus_getinfo_by_purpose(const char *purpose_string, time_t now)
if (bridge_auth && ri->purpose == ROUTER_PURPOSE_BRIDGE) if (bridge_auth && ri->purpose == ROUTER_PURPOSE_BRIDGE)
dirserv_set_router_is_running(ri, now); dirserv_set_router_is_running(ri, now);
/* then generate and write out status lines for each of them */ /* then generate and write out status lines for each of them */
set_routerstatus_from_routerinfo(&rs, node, ri, now, 0, 0, 0); set_routerstatus_from_routerinfo(&rs, node, ri, now, 0, 0, 0, 0);
smartlist_add(statuses, networkstatus_getinfo_helper_single(&rs)); smartlist_add(statuses, networkstatus_getinfo_helper_single(&rs));
}); });

View File

@ -2901,8 +2901,11 @@ typedef struct {
* we don't need to? */ * we don't need to? */
int HidServDirectoryV2; /**< Do we participate in the HS DHT? */ int HidServDirectoryV2; /**< Do we participate in the HS DHT? */
int VoteOnHidServDirectoriesV2; /**< As a directory authority, vote on
* assignment of the HSDir flag? */
int MinUptimeHidServDirectoryV2; /**< As directory authority, accept hidden int MinUptimeHidServDirectoryV2; /**< As directory authority, accept hidden
* service directories after what time? */ * service directories after what time? */
int FetchUselessDescriptors; /**< Do we fetch non-running descriptors too? */ int FetchUselessDescriptors; /**< Do we fetch non-running descriptors too? */
int AllDirActionsPrivate; /**< Should every directory action be sent int AllDirActionsPrivate; /**< Should every directory action be sent
* through a Tor circuit? */ * through a Tor circuit? */