|  | @@ -397,6 +397,7 @@ static config_var_t _option_vars[] = {
 | 
	
		
			
				|  |  |    V(TestSocks,                   BOOL,     "0"),
 | 
	
		
			
				|  |  |    OBSOLETE("TestVia"),
 | 
	
		
			
				|  |  |    V(TokenBucketRefillInterval,   MSEC_INTERVAL, "100 msec"),
 | 
	
		
			
				|  |  | +  V(Tor2webMode,                 BOOL,     "0"),
 | 
	
		
			
				|  |  |    V(TrackHostExits,              CSV,      NULL),
 | 
	
		
			
				|  |  |    V(TrackHostExitsExpire,        INTERVAL, "30 minutes"),
 | 
	
		
			
				|  |  |    OBSOLETE("TrafficShaping"),
 | 
	
	
		
			
				|  | @@ -1339,6 +1340,28 @@ options_act(const or_options_t *old_options)
 | 
	
		
			
				|  |  |    if (consider_adding_dir_authorities(options, old_options) < 0)
 | 
	
		
			
				|  |  |      return -1;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +#ifdef NON_ANONYMOUS_MODE_ENABLED
 | 
	
		
			
				|  |  | +  log(LOG_WARN, LD_GENERAL, "This copy of Tor was compiled to run in a "
 | 
	
		
			
				|  |  | +      "non-anonymous mode. It will provide NO ANONYMITY.");
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#ifdef ENABLE_TOR2WEB_MODE
 | 
	
		
			
				|  |  | +  if (!options->Tor2webMode) {
 | 
	
		
			
				|  |  | +    log_err(LD_CONFIG, "This copy of Tor was compiled to run in "
 | 
	
		
			
				|  |  | +            "'tor2web mode'. It can only be run with the Tor2webMode torrc "
 | 
	
		
			
				|  |  | +            "option enabled.");
 | 
	
		
			
				|  |  | +    return -1;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +#else
 | 
	
		
			
				|  |  | +  if (options->Tor2webMode) {
 | 
	
		
			
				|  |  | +    log_err(LD_CONFIG, "This copy of Tor was not compiled to run in "
 | 
	
		
			
				|  |  | +            "'tor2web mode'. It cannot be run with the Tor2webMode torrc "
 | 
	
		
			
				|  |  | +            "option enabled. To enable Tor2webMode recompile with the "
 | 
	
		
			
				|  |  | +            "--enable-tor2webmode option.");
 | 
	
		
			
				|  |  | +    return -1;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    if (options->Bridges) {
 | 
	
		
			
				|  |  |      mark_bridge_list();
 | 
	
		
			
				|  |  |      for (cl = options->Bridges; cl; cl = cl->next) {
 | 
	
	
		
			
				|  | @@ -3617,6 +3640,24 @@ options_validate(or_options_t *old_options, or_options_t *options,
 | 
	
		
			
				|  |  |      options->RendPostPeriod = MAX_DIR_PERIOD;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  if (options->Tor2webMode && options->LearnCircuitBuildTimeout) {
 | 
	
		
			
				|  |  | +    /* LearnCircuitBuildTimeout and Tor2webMode are incompatible in
 | 
	
		
			
				|  |  | +     * two ways:
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * - LearnCircuitBuildTimeout results in a low CBT, which
 | 
	
		
			
				|  |  | +     *   Tor2webMode's use of one-hop rendezvous circuits lowers
 | 
	
		
			
				|  |  | +     *   much further, producing *far* too many timeouts.
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * - The adaptive CBT code does not update its timeout estimate
 | 
	
		
			
				|  |  | +     *   using build times for single-hop circuits.
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * If we fix both of these issues someday, we should test
 | 
	
		
			
				|  |  | +     * Tor2webMode with LearnCircuitBuildTimeout on again. */
 | 
	
		
			
				|  |  | +    log_notice(LD_CONFIG,"Tor2webMode is enabled; turning "
 | 
	
		
			
				|  |  | +               "LearnCircuitBuildTimeout off.");
 | 
	
		
			
				|  |  | +    options->LearnCircuitBuildTimeout = 0;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    if (options->MaxCircuitDirtiness < MIN_MAX_CIRCUIT_DIRTINESS) {
 | 
	
		
			
				|  |  |      log_warn(LD_CONFIG, "MaxCircuitDirtiness option is too short; "
 | 
	
		
			
				|  |  |               "raising to %d seconds.", MIN_MAX_CIRCUIT_DIRTINESS);
 |