mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Don't connect() to a wildcard address in test_postmaster_connection().
At least OpenBSD, NetBSD, and Windows don't support it. This repairs pg_ctl for listen_addresses='0.0.0.0' and listen_addresses='::'. Since pg_ctl prefers to test a Unix-domain socket, Windows users are most likely to need this change. Back-patch to 9.1 (all supported versions). This could change pg_ctl interaction with loopback-interface firewall rules. Therefore, in 9.4 and earlier (released branches), activate the change only on known-affected platforms. Reported (bug #13611) and designed by Kondo Yuta.
This commit is contained in:
		@@ -623,9 +623,22 @@ test_postmaster_connection(pgpid_t pm_pid, bool do_checkpoint)
 | 
				
			|||||||
							return PQPING_NO_ATTEMPT;
 | 
												return PQPING_NO_ATTEMPT;
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						/* If postmaster is listening on "*", use localhost */
 | 
											/*
 | 
				
			||||||
 | 
											 * Map listen-only addresses to counterparts usable
 | 
				
			||||||
 | 
											 * for establishing a connection.  connect() to "::"
 | 
				
			||||||
 | 
											 * or "0.0.0.0" is not portable to OpenBSD 5.0 or to
 | 
				
			||||||
 | 
											 * Windows Server 2008, and connect() to "::" is
 | 
				
			||||||
 | 
											 * additionally not portable to NetBSD 6.0.  (Cygwin
 | 
				
			||||||
 | 
											 * does handle both addresses, though.)
 | 
				
			||||||
 | 
											 */
 | 
				
			||||||
						if (strcmp(host_str, "*") == 0)
 | 
											if (strcmp(host_str, "*") == 0)
 | 
				
			||||||
							strcpy(host_str, "localhost");
 | 
												strcpy(host_str, "localhost");
 | 
				
			||||||
 | 
					#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(WIN32)
 | 
				
			||||||
 | 
											else if (strcmp(host_str, "0.0.0.0") == 0)
 | 
				
			||||||
 | 
												strcpy(host_str, "127.0.0.1");
 | 
				
			||||||
 | 
											else if (strcmp(host_str, "::") == 0)
 | 
				
			||||||
 | 
												strcpy(host_str, "::1");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						/*
 | 
											/*
 | 
				
			||||||
						 * We need to set connect_timeout otherwise on Windows
 | 
											 * We need to set connect_timeout otherwise on Windows
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user