Remove dead getpwuid_r replacement code.
authorThomas Munro <[email protected]>
Sat, 23 Jul 2022 21:44:29 +0000 (09:44 +1200)
committerThomas Munro <[email protected]>
Sat, 23 Jul 2022 21:44:29 +0000 (09:44 +1200)
getpwuid_r is in SUSv2 and all targeted Unix systems have it.  We don't
use it for Windows.

Reviewed-by: Tom Lane <[email protected]>
Reviewed-by: Greg Stark <[email protected]>
Reviewed-by: Robert Haas <[email protected]>
Discussion: https://postgr.es/m/CA+hUKGJ3LHeP9w5Fgzdr4G8AnEtJ=z=p6hGDEm4qYGEUX5B6fQ@mail.gmail.com

configure
configure.ac
src/include/pg_config.h.in
src/port/thread.c
src/tools/msvc/Solution.pm

index 3e4ab15dc5b0f0a1c4f175acc1473760142c2ea6..c5bc382395804c9921b76a50412844abd7369201 100755 (executable)
--- a/configure
+++ b/configure
@@ -11751,7 +11751,7 @@ fi
 
 
 
-for ac_func in strerror_r getpwuid_r gethostbyname_r
+for ac_func in strerror_r gethostbyname_r
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
index ff3ef3cf0bed0d9fcf01f6dd6e5fd61aca95e318..61d0dd5d5869e465b78a4a62d98ab0241392ae0d 100644 (file)
@@ -1214,7 +1214,7 @@ LIBS="$LIBS $PTHREAD_LIBS"
 AC_CHECK_HEADER(pthread.h, [], [AC_MSG_ERROR([
 pthread.h not found;  use --disable-thread-safety to disable thread safety])])
 
-AC_CHECK_FUNCS([strerror_r getpwuid_r gethostbyname_r])
+AC_CHECK_FUNCS([strerror_r gethostbyname_r])
 
 # Do test here with the proper thread flags
 PGAC_FUNC_STRERROR_R_INT
index bf42c541dc4418dbb56d2a022745f1f6e05716e1..f9618e19863778ffa7e7076cbcf5b8008d4dad67 100644 (file)
 /* Define to 1 if you have the `getpeerucred' function. */
 #undef HAVE_GETPEERUCRED
 
-/* Define to 1 if you have the `getpwuid_r' function. */
-#undef HAVE_GETPWUID_R
-
 /* Define to 1 if you have the `getrlimit' function. */
 #undef HAVE_GETRLIMIT
 
index 23c3fbdf864146edc15023bed934da347892efe7..492e5a3b72d04a07cf41e90b3443cb719afecdfa 100644 (file)
 
 
 /*
- * Threading sometimes requires specially-named versions of functions
- * that return data in static buffers, like strerror_r() instead of
- * strerror().  Other operating systems use pthread_setspecific()
- * and pthread_getspecific() internally to allow standard library
- * functions to return static data to threaded applications. And some
- * operating systems have neither.
- *
- * Additional confusion exists because many operating systems that
- * use pthread_setspecific/pthread_getspecific() also have *_r versions
- * of standard library functions for compatibility with operating systems
- * that require them.  However, internally, these *_r functions merely
- * call the thread-safe standard library functions.
- *
- * For example, BSD/OS 4.3 uses Bind 8.2.3 for getpwuid().  Internally,
- * getpwuid() calls pthread_setspecific/pthread_getspecific() to return
- * static data to the caller in a thread-safe manner.  However, BSD/OS
- * also has getpwuid_r(), which merely calls getpwuid() and shifts
- * around the arguments to match the getpwuid_r() function declaration.
- * Therefore, while BSD/OS has getpwuid_r(), it isn't required.  It also
- * doesn't have strerror_r(), so we can't fall back to only using *_r
- * functions for threaded programs.
- *
- * The current setup is to try threading in this order:
- *
- *     use *_r function names if they exit
- *         (*_THREADSAFE=yes)
- *     use non-*_r functions if they are thread-safe
+ *  Historically, the code in this module had to deal with operating systems
+ *  that lacked getpwuid_r().
  */
 
 #ifndef WIN32
 
-/*
- * Wrapper around getpwuid() or getpwuid_r() to mimic POSIX getpwuid_r()
- * behaviour, if that function is not available or required.
- *
- * Per POSIX, the possible cases are:
- * success: returns zero, *result is non-NULL
- * uid not found: returns zero, *result is NULL
- * error during lookup: returns an errno code, *result is NULL
- * (caller should *not* assume that the errno variable is set)
- */
-static int
-pqGetpwuid(uid_t uid, struct passwd *resultbuf, char *buffer,
-          size_t buflen, struct passwd **result)
-{
-#if defined(FRONTEND) && defined(ENABLE_THREAD_SAFETY) && defined(HAVE_GETPWUID_R)
-   return getpwuid_r(uid, resultbuf, buffer, buflen, result);
-#else
-   /* no getpwuid_r() available, just use getpwuid() */
-   errno = 0;
-   *result = getpwuid(uid);
-   /* paranoia: ensure we return zero on success */
-   return (*result == NULL) ? errno : 0;
-#endif
-}
-
 /*
  * pg_get_user_name - get the name of the user with the given ID
  *
@@ -89,7 +39,7 @@ pg_get_user_name(uid_t user_id, char *buffer, size_t buflen)
    struct passwd *pw = NULL;
    int         pwerr;
 
-   pwerr = pqGetpwuid(user_id, &pwdstr, pwdbuf, sizeof(pwdbuf), &pw);
+   pwerr = getpwuid_r(user_id, &pwdstr, pwdbuf, sizeof(pwdbuf), &pw);
    if (pw != NULL)
    {
        strlcpy(buffer, pw->pw_name, buflen);
@@ -125,7 +75,7 @@ pg_get_user_home_dir(uid_t user_id, char *buffer, size_t buflen)
    struct passwd *pw = NULL;
    int         pwerr;
 
-   pwerr = pqGetpwuid(user_id, &pwdstr, pwdbuf, sizeof(pwdbuf), &pw);
+   pwerr = getpwuid_r(user_id, &pwdstr, pwdbuf, sizeof(pwdbuf), &pw);
    if (pw != NULL)
    {
        strlcpy(buffer, pw->pw_dir, buflen);
index a71a24d435d8cebcbd501d03ec0fd7916ce93c22..b09872e018d29f3c77cae302dead3b5ba470a684 100644 (file)
@@ -274,7 +274,6 @@ sub GenerateFiles
        HAVE_GETOPT_LONG                            => undef,
        HAVE_GETPEEREID                             => undef,
        HAVE_GETPEERUCRED                           => undef,
-       HAVE_GETPWUID_R                             => undef,
        HAVE_GETRLIMIT                              => undef,
        HAVE_GETTIMEOFDAY                           => undef,
        HAVE_GSSAPI_GSSAPI_H                        => undef,