summaryrefslogtreecommitdiff
path: root/src/backend/libpq/auth.c
diff options
context:
space:
mode:
authorPeter Eisentraut <peter@eisentraut.org>2019-10-30 12:58:32 +0100
committerPeter Eisentraut <peter@eisentraut.org>2019-12-16 09:36:08 +0100
commitf14413b684d57211068ee56ee04695efcc87a23a (patch)
treee6fe1471c6cb4c44e52e5ac5c5762125b00b6507 /src/backend/libpq/auth.c
parent956ef5875341c22a602fb825e6c98eaabb1ecce7 (diff)
Sort out getpeereid() and peer auth handling on Windows
The getpeereid() uses have so far been protected by HAVE_UNIX_SOCKETS, so they didn't ever care about Windows support. But in anticipation of Unix-domain socket support on Windows, that needs to be handled differently. Windows doesn't support getpeereid() at this time, so we use the existing not-supported code path. We let configure do its usual thing of picking up the replacement from libpgport, instead of the custom overrides that it was doing before. But then Windows doesn't have struct passwd, so this patch sprinkles some additional #ifdef WIN32 around to make it work. This is similar to existing code that deals with this issue. Reviewed-by: Andrew Dunstan <andrew.dunstan@2ndquadrant.com> Discussion: https://www.postgresql.org/message-id/5974caea-1267-7708-40f2-6009a9d653b0@2ndquadrant.com
Diffstat (limited to 'src/backend/libpq/auth.c')
-rw-r--r--src/backend/libpq/auth.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c
index c12b810c3d5..5399144c20c 100644
--- a/src/backend/libpq/auth.c
+++ b/src/backend/libpq/auth.c
@@ -77,9 +77,7 @@ static int ident_inet(hbaPort *port);
* Peer authentication
*----------------------------------------------------------------
*/
-#ifdef HAVE_UNIX_SOCKETS
static int auth_peer(hbaPort *port);
-#endif
/*----------------------------------------------------------------
@@ -559,11 +557,7 @@ ClientAuthentication(Port *port)
break;
case uaPeer:
-#ifdef HAVE_UNIX_SOCKETS
status = auth_peer(port);
-#else
- Assert(false);
-#endif
break;
case uaIdent:
@@ -1984,16 +1978,16 @@ ident_inet_done:
*
* Iff authorized, return STATUS_OK, otherwise return STATUS_ERROR.
*/
-#ifdef HAVE_UNIX_SOCKETS
-
static int
auth_peer(hbaPort *port)
{
uid_t uid;
gid_t gid;
+#ifndef WIN32
struct passwd *pw;
char *peer_user;
int ret;
+#endif
if (getpeereid(port->sock, &uid, &gid) != 0)
{
@@ -2009,6 +2003,7 @@ auth_peer(hbaPort *port)
return STATUS_ERROR;
}
+#ifndef WIN32
errno = 0; /* clear errno before call */
pw = getpwuid(uid);
if (!pw)
@@ -2030,8 +2025,12 @@ auth_peer(hbaPort *port)
pfree(peer_user);
return ret;
+#else
+ /* should have failed with ENOSYS above */
+ Assert(false);
+ return STATUS_ERROR;
+#endif
}
-#endif /* HAVE_UNIX_SOCKETS */
/*----------------------------------------------------------------