diff --git a/configure b/configure index 3d9bd0bdf8..de431d0d38 100755 --- a/configure +++ b/configure @@ -15685,6 +15685,19 @@ esac fi +ac_fn_c_check_func "$LINENO" "getpeereid" "ac_cv_func_getpeereid" +if test "x$ac_cv_func_getpeereid" = xyes; then : + $as_echo "#define HAVE_GETPEEREID 1" >>confdefs.h + +else + case " $LIBOBJS " in + *" getpeereid.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS getpeereid.$ac_objext" + ;; +esac + +fi + ac_fn_c_check_func "$LINENO" "getrusage" "ac_cv_func_getrusage" if test "x$ac_cv_func_getrusage" = xyes; then : $as_echo "#define HAVE_GETRUSAGE 1" >>confdefs.h @@ -15863,19 +15876,13 @@ $as_echo "$as_me: On $host_os we will use our strtof wrapper." >&6;} esac case $host_os in - # Windows uses a specialised env handler - # and doesn't need a replacement getpeereid because it doesn't use - # Unix sockets. mingw*) $as_echo "#define HAVE_UNSETENV 1" >>confdefs.h - -$as_echo "#define HAVE_GETPEEREID 1" >>confdefs.h - ac_cv_func_unsetenv=yes - ac_cv_func_getpeereid=yes;; + ;; *) ac_fn_c_check_func "$LINENO" "unsetenv" "ac_cv_func_unsetenv" if test "x$ac_cv_func_unsetenv" = xyes; then : @@ -15890,21 +15897,8 @@ esac fi -ac_fn_c_check_func "$LINENO" "getpeereid" "ac_cv_func_getpeereid" -if test "x$ac_cv_func_getpeereid" = xyes; then : - $as_echo "#define HAVE_GETPEEREID 1" >>confdefs.h -else - case " $LIBOBJS " in - *" getpeereid.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS getpeereid.$ac_objext" - ;; -esac - -fi - - - ;; + ;; esac # System's version of getaddrinfo(), if any, may be used only if we found diff --git a/configure.in b/configure.in index 34aea0b4ac..85829be069 100644 --- a/configure.in +++ b/configure.in @@ -1729,6 +1729,7 @@ AC_REPLACE_FUNCS(m4_normalize([ explicit_bzero fls getopt + getpeereid getrusage inet_aton mkdtemp @@ -1757,18 +1758,14 @@ case $host_os in esac case $host_os in - # Windows uses a specialised env handler - # and doesn't need a replacement getpeereid because it doesn't use - # Unix sockets. mingw*) AC_DEFINE(HAVE_UNSETENV, 1, [Define to 1 because replacement version used.]) - AC_DEFINE(HAVE_GETPEEREID, 1, [Define to 1 because function not required.]) ac_cv_func_unsetenv=yes - ac_cv_func_getpeereid=yes;; + ;; *) - AC_REPLACE_FUNCS([unsetenv getpeereid]) - ;; + AC_REPLACE_FUNCS([unsetenv]) + ;; esac # System's version of getaddrinfo(), if any, may be used only if we found diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c index c12b810c3d..5399144c20 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 */ /*---------------------------------------------------------------- diff --git a/src/include/port.h b/src/include/port.h index bfd2e2759f..9567590581 100644 --- a/src/include/port.h +++ b/src/include/port.h @@ -354,7 +354,7 @@ extern int fls(int mask); #define ftello(a) ftell(a) #endif -#if !defined(HAVE_GETPEEREID) && !defined(WIN32) +#ifndef HAVE_GETPEEREID extern int getpeereid(int sock, uid_t *uid, gid_t *gid); #endif diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index 66a9128605..3ca7e0560c 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -2733,8 +2733,6 @@ keep_going: /* We will come back to here until there is char *startpacket; int packetlen; -#ifdef HAVE_UNIX_SOCKETS - /* * Implement requirepeer check, if requested and it's a * Unix-domain socket. @@ -2742,10 +2740,12 @@ keep_going: /* We will come back to here until there is if (conn->requirepeer && conn->requirepeer[0] && IS_AF_UNIX(conn->raddr.addr.ss_family)) { +#ifndef WIN32 char pwdbuf[BUFSIZ]; struct passwd pass_buf; struct passwd *pass; int passerr; +#endif uid_t uid; gid_t gid; @@ -2766,6 +2766,7 @@ keep_going: /* We will come back to here until there is goto error_return; } +#ifndef WIN32 passerr = pqGetpwuid(uid, &pass_buf, pwdbuf, sizeof(pwdbuf), &pass); if (pass == NULL) { @@ -2788,8 +2789,11 @@ keep_going: /* We will come back to here until there is conn->requirepeer, pass->pw_name); goto error_return; } +#else /* WIN32 */ + /* should have failed with ENOSYS above */ + Assert(false); +#endif /* WIN32 */ } -#endif /* HAVE_UNIX_SOCKETS */ if (IS_AF_UNIX(conn->raddr.addr.ss_family)) { diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm index 275f3bb699..3d6ef0de84 100644 --- a/src/tools/msvc/Mkvcbuild.pm +++ b/src/tools/msvc/Mkvcbuild.pm @@ -94,7 +94,7 @@ sub mkvcbuild $solution = CreateSolution($vsVersion, $config); our @pgportfiles = qw( - chklocale.c explicit_bzero.c fls.c fseeko.c getrusage.c inet_aton.c random.c + chklocale.c explicit_bzero.c fls.c fseeko.c getpeereid.c getrusage.c inet_aton.c random.c srandom.c getaddrinfo.c gettimeofday.c inet_net_ntop.c kill.c open.c erand48.c snprintf.c strlcat.c strlcpy.c dirmod.c noblock.c path.c dirent.c dlopen.c getopt.c getopt_long.c