From a9cff89f7e638c060621a62ca35da97a12adde42 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 31 Jan 2020 16:26:12 +0100 Subject: [PATCH] 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. Reviewed-by: Tom Lane Discussion: https://www.postgresql.org/message-id/75f72249-8ae6-322a-63df-4fe03eeccb9f@2ndquadrant.com --- 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 6c8bc29ace..781d86c8ef 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 569af6997c..b4ce53300b 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 2e2d217352..99cd6c4117 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -1095,12 +1095,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; }