diff --git a/ChangeLog b/ChangeLog index 9c01aeb3cd..66376ce338 100644 --- a/ChangeLog +++ b/ChangeLog @@ -30,6 +30,10 @@ Changes in version 0.2.0.20-?? - 2008-02-?? - Fix code used to find strings within buffers, when those strings are not in the first chunk of the buffer. - Fix potential segfault when parsing HTTP headers. Bugfix on 0.2.0.x. + - Servers that don't know their own IP address should go to the + authorities for their first directory fetch, even if their DirPort + is off or if they don't know they're reachable yet. This will help + them bootstrap better. Bugfix on 0.2.0.18-alpha; fixes bug 609. o Minor features (performance): - Tune parameters for cell pool allocation to minimize amount of diff --git a/src/or/dirserv.c b/src/or/dirserv.c index cb3def9714..5570a3905a 100644 --- a/src/or/dirserv.c +++ b/src/or/dirserv.c @@ -1118,12 +1118,15 @@ int directory_fetches_from_authorities(or_options_t *options) { routerinfo_t *me; + uint32_t addr; if (options->FetchDirInfoEarly) return 1; - if (options->DirPort == 0) - return 0; if (options->BridgeRelay == 1) return 0; + if (server_mode(options) && router_pick_published_address(options, &addr)<0) + return 1; /* we don't know our IP address; ask an authority. */ + if (options->DirPort == 0) + return 0; if (!server_mode(options) || !advertised_server_mode()) return 0; me = router_get_my_routerinfo(); diff --git a/src/or/router.c b/src/or/router.c index ec7a45fd1b..2a2493998d 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -1160,9 +1160,10 @@ static smartlist_t *warned_nonexistent_family = NULL; static int router_guess_address_from_dir_headers(uint32_t *guess); -/** Return our current best guess at our address, either because +/** Make a current best guess at our address, either because * it's configured in torrc, or because we've learned it from - * dirserver headers. */ + * dirserver headers. Place the answer in *addr and return + * 0 on success, else return -1 if we have no guess. */ int router_pick_published_address(or_options_t *options, uint32_t *addr) {