|  | @@ -1267,7 +1267,8 @@ router_orport_found_reachable(void)
 | 
	
		
			
				|  |  |      char *address = tor_dup_ip(me->addr);
 | 
	
		
			
				|  |  |      log_notice(LD_OR,"Self-testing indicates your ORPort is reachable from "
 | 
	
		
			
				|  |  |                 "the outside. Excellent.%s",
 | 
	
		
			
				|  |  | -               get_options()->PublishServerDescriptor_ != NO_DIRINFO ?
 | 
	
		
			
				|  |  | +               get_options()->PublishServerDescriptor_ != NO_DIRINFO
 | 
	
		
			
				|  |  | +               && check_whether_dirport_reachable() ?
 | 
	
		
			
				|  |  |                   " Publishing server descriptor." : "");
 | 
	
		
			
				|  |  |      can_reach_or_port = 1;
 | 
	
		
			
				|  |  |      mark_my_descriptor_dirty("ORPort found reachable");
 | 
	
	
		
			
				|  | @@ -1291,7 +1292,10 @@ router_dirport_found_reachable(void)
 | 
	
		
			
				|  |  |    if (!can_reach_dir_port && me) {
 | 
	
		
			
				|  |  |      char *address = tor_dup_ip(me->addr);
 | 
	
		
			
				|  |  |      log_notice(LD_DIRSERV,"Self-testing indicates your DirPort is reachable "
 | 
	
		
			
				|  |  | -               "from the outside. Excellent.");
 | 
	
		
			
				|  |  | +               "from the outside. Excellent.%s",
 | 
	
		
			
				|  |  | +               get_options()->PublishServerDescriptor_ != NO_DIRINFO
 | 
	
		
			
				|  |  | +               && check_whether_orport_reachable() ?
 | 
	
		
			
				|  |  | +               " Publishing server descriptor." : "");
 | 
	
		
			
				|  |  |      can_reach_dir_port = 1;
 | 
	
		
			
				|  |  |      if (decide_to_advertise_dirport(get_options(), me->dir_port)) {
 | 
	
		
			
				|  |  |        mark_my_descriptor_dirty("DirPort found reachable");
 | 
	
	
		
			
				|  | @@ -1494,7 +1498,8 @@ proxy_mode(const or_options_t *options)
 | 
	
		
			
				|  |  |   * and
 | 
	
		
			
				|  |  |   * - We have ORPort set
 | 
	
		
			
				|  |  |   * and
 | 
	
		
			
				|  |  | - * - We believe we are reachable from the outside; or
 | 
	
		
			
				|  |  | + * - We believe both our ORPort and DirPort (if present) are reachable from
 | 
	
		
			
				|  |  | + *   the outside; or
 | 
	
		
			
				|  |  |   * - We are an authoritative directory server.
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  static int
 | 
	
	
		
			
				|  | @@ -1513,7 +1518,7 @@ decide_if_publishable_server(void)
 | 
	
		
			
				|  |  |    if (!router_get_advertised_or_port(options))
 | 
	
		
			
				|  |  |      return 0;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  return check_whether_orport_reachable();
 | 
	
		
			
				|  |  | +  return check_whether_orport_reachable() && check_whether_dirport_reachable();
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /** Initiate server descriptor upload as reasonable (if server is publishable,
 |