Next patch: This allows building *with* Unix-domain socket support but
*without* a default Unix socket path. This is needed because on Windows
we don't have a good default location like "/tmp" and we probably don't
want Unix sockets by default at run time so that older Windows versions
continue to work out of the box with the same binaries.
We have code paths for Unix socket support and no Unix socket support.
Now add a third variant: Unix socket support but do not use a Unix
socket by default in the client or the server, only if you explicitly
specify one.
To implement this, tweak things so that setting DEFAULT_PGSOCKET_DIR
to "" has the desired effect. This mostly already worked like that;
only a few places needed to be adjusted. Notably, the reference to
DEFAULT_PGSOCKET_DIR in UNIXSOCK_PATH() could be removed because all
callers already resolve an empty socket directory setting with a
default if appropriate.
--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
From 0b63a8a758d507095bf5070cec8119436c267519 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pe...@eisentraut.org>
Date: Wed, 18 Dec 2019 14:47:04 +0100
Subject: [PATCH v5] Allow building without default socket directory
We have code paths for Unix socket support and no Unix socket support.
Now add a third variant: Unix socket support but do not use a Unix
socket by default in the client or the server, only if you explicitly
specify one. This will be useful when we enable Unix socket support
on Windows.
To implement this, tweak things so that setting DEFAULT_PGSOCKET_DIR
to "" has the desired effect. This mostly already worked like that;
only a few places needed to be adjusted. Notably, the reference to
DEFAULT_PGSOCKET_DIR in UNIXSOCK_PATH() could be removed because all
callers already resolve an empty socket directory setting with a
default if appropriate.
---
src/include/libpq/pqcomm.h | 6 +++---
src/include/pg_config_manual.h | 5 +++++
src/interfaces/libpq/fe-connect.c | 15 ++++++++++-----
3 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/src/include/libpq/pqcomm.h b/src/include/libpq/pqcomm.h
index baf6a4b6c0..a24bb796f4 100644
--- a/src/include/libpq/pqcomm.h
+++ b/src/include/libpq/pqcomm.h
@@ -68,10 +68,10 @@ typedef struct
/* Configure the UNIX socket location for the well known port. */
#define UNIXSOCK_PATH(path, port, sockdir) \
+ (AssertMacro(sockdir), \
+ AssertMacro(*(sockdir) != '\0'), \
snprintf(path, sizeof(path), "%s/.s.PGSQL.%d", \
- ((sockdir) && *(sockdir) != '\0') ? (sockdir) :
\
- DEFAULT_PGSOCKET_DIR, \
- (port))
+ (sockdir), (port)))
/*
* The maximum workable length of a socket path is what will fit into
diff --git a/src/include/pg_config_manual.h b/src/include/pg_config_manual.h
index 61b667d166..3b7cf8d0b5 100644
--- a/src/include/pg_config_manual.h
+++ b/src/include/pg_config_manual.h
@@ -191,6 +191,11 @@
* directory. But if you just hate the idea of sockets in /tmp,
* here's where to twiddle it. You can also override this at runtime
* with the postmaster's -k switch.
+ *
+ * If set to an empty string, then AF_UNIX sockets are not used by default. A
+ * server will not create an AF_UNIX socket unless the run-time configuration
+ * is changed; a client will connect via TCP/IP by default and will only use
+ * an AF_UNIX socket if one is explicitly specified.
*/
#define DEFAULT_PGSOCKET_DIR "/tmp"
diff --git a/src/interfaces/libpq/fe-connect.c
b/src/interfaces/libpq/fe-connect.c
index 3ca7e0560c..198ecbc040 100644
--- a/src/interfaces/libpq/fe-connect.c
+++ b/src/interfaces/libpq/fe-connect.c
@@ -1079,12 +1079,17 @@ connectOptions2(PGconn *conn)
if (ch->host)
free(ch->host);
#ifdef HAVE_UNIX_SOCKETS
- ch->host = strdup(DEFAULT_PGSOCKET_DIR);
- ch->type = CHT_UNIX_SOCKET;
-#else
- ch->host = strdup(DefaultHost);
- ch->type = CHT_HOST_NAME;
+ if (DEFAULT_PGSOCKET_DIR[0])
+ {
+ ch->host = strdup(DEFAULT_PGSOCKET_DIR);
+ ch->type = CHT_UNIX_SOCKET;
+ }
+ else
#endif
+ {
+ ch->host = strdup(DefaultHost);
+ ch->type = CHT_HOST_NAME;
+ }
if (ch->host == NULL)
goto oom_error;
}
--
2.24.1