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

This commit is contained in:
Nick Mathewson 2011-06-03 10:47:35 -04:00
commit 13ec1bf5c2
4 changed files with 41 additions and 8 deletions

8
changes/bug2355 Normal file
View File

@ -0,0 +1,8 @@
o Major features:
- If "UseBridges 1" is set and no bridges are configured, Tor will
now refuse to build any circuits until some bridges are set.
If "UseBridges auto" is set, Tor will use bridges if they are
configured and we are not running as a server, but otherwise
will make circuits as usual. The new default is "auto". Patch
by anonym.

View File

@ -726,10 +726,14 @@ The following options are useful only for clients (that is, if
from the configured bridge authorities when feasible. It will fall back to from the configured bridge authorities when feasible. It will fall back to
a direct request if the authority responds with a 404. (Default: 0) a direct request if the authority responds with a 404. (Default: 0)
**UseBridges** **0**|**1**:: **UseBridges** **0**|**1**|**auto**::
When set, Tor will fetch descriptors for each bridge listed in the "Bridge" Make Tor fetch descriptors for each bridge listed in the "Bridge"
config lines, and use these relays as both entry guards and directory config lines, and use these relays as both entry guards and directory
guards. (Default: 0) guards. If the option is 1, bridges must be used and if no bridges are
configured Tor will not make any connections until a bridge is configured;
if it's "auto", Tor will use bridges if any are configured, otherwise it
will connect directly to the Tor network; if it's 0, bridges are not used
at all. (Defaults to auto)
**UseEntryGuards** **0**|**1**:: **UseEntryGuards** **0**|**1**::
If this option is set to 1, we pick a few long-term entry servers, and try If this option is set to 1, we pick a few long-term entry servers, and try

View File

@ -387,7 +387,7 @@ static config_var_t _option_vars[] = {
V(TransPort, PORT, "0"), V(TransPort, PORT, "0"),
V(TunnelDirConns, BOOL, "1"), V(TunnelDirConns, BOOL, "1"),
V(UpdateBridgesFromAuthority, BOOL, "0"), V(UpdateBridgesFromAuthority, BOOL, "0"),
V(UseBridges, BOOL, "0"), VAR("UseBridges", STRING, UseBridges_, "auto"),
V(UseEntryGuards, BOOL, "1"), V(UseEntryGuards, BOOL, "1"),
V(UseMicrodescriptors, AUTOBOOL, "0"), V(UseMicrodescriptors, AUTOBOOL, "0"),
V(User, STRING, NULL), V(User, STRING, NULL),
@ -3308,6 +3308,19 @@ options_validate(or_options_t *old_options, or_options_t *options,
"of the Internet, so they must not set Reachable*Addresses " "of the Internet, so they must not set Reachable*Addresses "
"or FascistFirewall."); "or FascistFirewall.");
/* XXX023 use autobool instead. */
if (!strcmp(options->UseBridges_, "auto")) {
options->UseBridges = (options->Bridges &&
!server_mode(options) &&
!options->EntryNodes);
} else if (!strcmp(options->UseBridges_, "0")) {
options->UseBridges = 0;
} else if (!strcmp(options->UseBridges_, "1")) {
options->UseBridges = 1;
} else {
REJECT("UseBridges must be 0, 1, or auto");
}
if (options->UseBridges && if (options->UseBridges &&
server_mode(options)) server_mode(options))
REJECT("Servers must be able to freely connect to the rest " REJECT("Servers must be able to freely connect to the rest "
@ -3653,10 +3666,8 @@ options_validate(or_options_t *old_options, or_options_t *options,
if (validate_dir_authorities(options, old_options) < 0) if (validate_dir_authorities(options, old_options) < 0)
REJECT("Directory authority line did not parse. See logs for details."); REJECT("Directory authority line did not parse. See logs for details.");
if (options->UseBridges && !options->Bridges)
REJECT("If you set UseBridges, you must specify at least one bridge.");
if (options->UseBridges && !options->TunnelDirConns) if (options->UseBridges && !options->TunnelDirConns)
REJECT("If you set UseBridges, you must set TunnelDirConns."); REJECT("TunnelDirConns set to 0 only works with UseBridges set to 0");
if (options->Bridges) { if (options->Bridges) {
for (cl = options->Bridges; cl; cl = cl->next) { for (cl = options->Bridges; cl; cl = cl->next) {
if (parse_bridge_line(cl->value, 1)<0) if (parse_bridge_line(cl->value, 1)<0)

View File

@ -2646,7 +2646,17 @@ typedef struct {
* when doing so. */ * when doing so. */
char *BridgePassword; char *BridgePassword;
int UseBridges; /**< Boolean: should we start all circuits with a bridge? */ /** Whether we should start all circuits with a bridge. "1" means strictly
* yes, "0" means strictly no, and "auto" means that we do iff any bridges
* are configured, we are not running a server and have not specified a list
* of entry nodes. */
char *UseBridges_;
/** Effective value of UseBridges. Will be set equally for UseBridges set to
* 1 or 0, but for 'auto' it will be set to 1 iff any bridges are
* configured, we are not running a server and have not specified a list of
* entry nodes. */
int UseBridges;
config_line_t *Bridges; /**< List of bootstrap bridge addresses. */ config_line_t *Bridges; /**< List of bootstrap bridge addresses. */
int BridgeRelay; /**< Boolean: are we acting as a bridge relay? We make int BridgeRelay; /**< Boolean: are we acting as a bridge relay? We make