| 
					
				 | 
			
			
				@@ -259,7 +259,7 @@ static config_var_t option_vars_[] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   V(BridgeRelay,                 BOOL,     "0"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   V(BridgeDistribution,          STRING,   NULL), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   VAR("CacheDirectory",          FILENAME, CacheDirectory_option, NULL), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  V(CacheDirectoryGroupReadable, BOOL,     "0"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  V(CacheDirectoryGroupReadable, AUTOBOOL,     "auto"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   V(CellStatistics,              BOOL,     "0"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   V(PaddingStatistics,           BOOL,     "1"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   V(LearnCircuitBuildTimeout,    BOOL,     "1"), 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1516,9 +1516,26 @@ options_act_reversible(const or_options_t *old_options, char **msg) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                       msg) < 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     goto done; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /* We need to handle the group-readable flag for the cache directory 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * specially, since the directory defaults to being the same as the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * DataDirectory. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  int cache_dir_group_readable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (options->CacheDirectoryGroupReadable != -1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /* If the user specified a value, use their setting */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    cache_dir_group_readable = options->CacheDirectoryGroupReadable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } else if (!strcmp(options->CacheDirectory, options->DataDirectory)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /* If the user left the value as "auto", and the cache is the same as the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * datadirectory, use the datadirectory setting. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    cache_dir_group_readable = options->DataDirectoryGroupReadable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /* Otherwise, "auto" means "not group readable". */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    cache_dir_group_readable = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (check_and_create_data_directory(running_tor /* create */, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                       options->CacheDirectory, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                      options->CacheDirectoryGroupReadable, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                      cache_dir_group_readable, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                       options->User, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                       msg) < 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     goto done; 
			 |