|  | @@ -170,7 +170,7 @@ test_config_addressmap(void *arg)
 | 
	
		
			
				|  |  |   done:
 | 
	
		
			
				|  |  |    ;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | - 
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  static int
 | 
	
		
			
				|  |  |  is_private_dir(const char* path)
 | 
	
		
			
				|  |  |  {
 | 
	
	
		
			
				|  | @@ -180,7 +180,7 @@ is_private_dir(const char* path)
 | 
	
		
			
				|  |  |      return 0;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  #if !defined (_WIN32) || defined (WINCE)
 | 
	
		
			
				|  |  | -  if (st.st_mode != (S_IFDIR | 0700)) {
 | 
	
		
			
				|  |  | +  if ((st.st_mode & (S_IFDIR | 0777)) != (S_IFDIR | 0700)) {
 | 
	
		
			
				|  |  |      return 0;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  #endif
 | 
	
	
		
			
				|  | @@ -190,11 +190,14 @@ is_private_dir(const char* path)
 | 
	
		
			
				|  |  |  static void
 | 
	
		
			
				|  |  |  test_config_check_or_create_data_subdir(void *arg)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -  or_options_t* options = get_options_mutable();
 | 
	
		
			
				|  |  | -  options->DataDirectory = "test_data";
 | 
	
		
			
				|  |  | -  const char* subdir = "test_stats";
 | 
	
		
			
				|  |  | -  const char* subpath = get_datadir_fname(subdir);
 | 
	
		
			
				|  |  | +  or_options_t *options = get_options_mutable();
 | 
	
		
			
				|  |  | +  char *datadir = options->DataDirectory = tor_strdup(get_fname("datadir-0"));
 | 
	
		
			
				|  |  | +  const char *subdir = "test_stats";
 | 
	
		
			
				|  |  | +  const char *subpath = get_datadir_fname(subdir);
 | 
	
		
			
				|  |  |    struct stat st;
 | 
	
		
			
				|  |  | +  int r;
 | 
	
		
			
				|  |  | +  unsigned group_permission;
 | 
	
		
			
				|  |  | +  (void)arg;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #if defined (_WIN32) && !defined (WINCE)
 | 
	
		
			
				|  |  |    mkdir(options->DataDirectory);
 | 
	
	
		
			
				|  | @@ -202,7 +205,7 @@ test_config_check_or_create_data_subdir(void *arg)
 | 
	
		
			
				|  |  |    mkdir(options->DataDirectory, 0700);
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  int r = stat(subpath, &st);
 | 
	
		
			
				|  |  | +  r = stat(subpath, &st);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // The subdirectory shouldn't exist yet,
 | 
	
		
			
				|  |  |    // but should be created by the call to check_or_create_data_subdir.
 | 
	
	
		
			
				|  | @@ -215,7 +218,7 @@ test_config_check_or_create_data_subdir(void *arg)
 | 
	
		
			
				|  |  |    test_assert(!check_or_create_data_subdir(subdir));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #if !defined (_WIN32) || defined (WINCE)
 | 
	
		
			
				|  |  | -  unsigned group_permission = st.st_mode | 0070;
 | 
	
		
			
				|  |  | +  group_permission = st.st_mode | 0070;
 | 
	
		
			
				|  |  |    r = chmod(subpath, group_permission);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    if (r) {
 | 
	
	
		
			
				|  | @@ -229,16 +232,16 @@ test_config_check_or_create_data_subdir(void *arg)
 | 
	
		
			
				|  |  |    test_assert(is_private_dir(subpath));
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  done:
 | 
	
		
			
				|  |  | -    rmdir(subpath);
 | 
	
		
			
				|  |  | -    rmdir(options->DataDirectory);
 | 
	
		
			
				|  |  | + done:
 | 
	
		
			
				|  |  | +  rmdir(subpath);
 | 
	
		
			
				|  |  | +  tor_free(datadir);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  static void
 | 
	
		
			
				|  |  | -test_config_write_to_data_subdir(void* arg)
 | 
	
		
			
				|  |  | +test_config_write_to_data_subdir(void *arg)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    or_options_t* options = get_options_mutable();
 | 
	
		
			
				|  |  | -  options->DataDirectory = "test_data";
 | 
	
		
			
				|  |  | +  char *datadir = options->DataDirectory = tor_strdup(get_fname("datadir-1"));
 | 
	
		
			
				|  |  |    const char* subdir = "test_stats";
 | 
	
		
			
				|  |  |    const char* fname = "test_file";
 | 
	
		
			
				|  |  |    const char* str =
 | 
	
	
		
			
				|  | @@ -258,6 +261,7 @@ test_config_write_to_data_subdir(void* arg)
 | 
	
		
			
				|  |  |        "sanctus est Lorem ipsum dolor sit amet.";
 | 
	
		
			
				|  |  |    const char* subpath = get_datadir_fname(subdir);
 | 
	
		
			
				|  |  |    const char* filepath = get_datadir_fname2(subdir, fname);
 | 
	
		
			
				|  |  | +  (void)arg;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #if defined (_WIN32) && !defined (WINCE)
 | 
	
		
			
				|  |  |    mkdir(options->DataDirectory);
 | 
	
	
		
			
				|  | @@ -282,6 +286,7 @@ test_config_write_to_data_subdir(void* arg)
 | 
	
		
			
				|  |  |    remove(filepath);
 | 
	
		
			
				|  |  |    rmdir(subpath);
 | 
	
		
			
				|  |  |    rmdir(options->DataDirectory);
 | 
	
		
			
				|  |  | +  tor_free(datadir);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /* Test helper function: Make sure that a bridge line gets parsed
 | 
	
	
		
			
				|  | @@ -437,8 +442,8 @@ test_config_parse_bridge_line(void *arg)
 | 
	
		
			
				|  |  |  struct testcase_t config_tests[] = {
 | 
	
		
			
				|  |  |    CONFIG_TEST(addressmap, 0),
 | 
	
		
			
				|  |  |    CONFIG_TEST(parse_bridge_line, 0),
 | 
	
		
			
				|  |  | -  CONFIG_TEST(check_or_create_data_subdir, 0),
 | 
	
		
			
				|  |  | -  CONFIG_TEST(write_to_data_subdir, 0),
 | 
	
		
			
				|  |  | +  CONFIG_TEST(check_or_create_data_subdir, TT_FORK),
 | 
	
		
			
				|  |  | +  CONFIG_TEST(write_to_data_subdir, TT_FORK),
 | 
	
		
			
				|  |  |    END_OF_TESTCASES
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 |