12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- From 9e42c405f30d2b52d019598436ea346ef8586f43 Mon Sep 17 00:00:00 2001
- From: =?UTF-8?q?No=C3=A9=20Rubinstein?= <nrubinstein@aldebaran.com>
- Date: Wed, 24 Aug 2016 18:55:25 +0200
- Subject: [PATCH] Check that getpwent_r is available before using it
- This fixes building trousers with musl
- Signed-off-by: Noé Rubinstein <nrubinstein@aldebaran.com>
- [Bernd: Rebased for version 0.3.14]
- Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
- ---
- configure.ac | 4 ++++
- src/tspi/ps/tspps.c | 10 +++++-----
- 2 files changed, 9 insertions(+), 5 deletions(-)
- diff --git a/configure.in b/configure.in
- index fd3f5f1..e3d7acf 100644
- --- a/configure.ac
- +++ b/configure.ac
- @@ -145,6 +145,10 @@ else
- AC_MSG_ERROR(["gtk", "openssl" and "none" are the only supported gui options for trousers])
- fi
-
- +# Look for getpwent_r. If it is not found, getpwent will be used instead, with
- +# an additional mutex.
- +AC_CHECK_FUNC(getpwent_r, [AC_DEFINE(HAVE_GETPWENT_R)])
- +
- #
- # The default port that the TCS daemon listens on
- #
- diff --git a/src/tspi/ps/tspps.c b/src/tspi/ps/tspps.c
- index c6f9c3d..9d00d2a 100644
- --- a/src/tspi/ps/tspps.c
- +++ b/src/tspi/ps/tspps.c
- @@ -45,7 +45,7 @@
-
- static int user_ps_fd = -1;
- static MUTEX_DECLARE_INIT(user_ps_lock);
- -#if (defined (__FreeBSD__) || defined (__OpenBSD__))
- +#ifndef HAVE_GETPWENT_R
- static MUTEX_DECLARE_INIT(user_ps_path);
- #endif
- static struct flock fl;
- @@ -60,7 +60,7 @@ get_user_ps_path(char **file)
- TSS_RESULT result;
- char *file_name = NULL, *home_dir = NULL;
- struct passwd *pwp;
- -#if (defined (__linux) || defined (linux) || defined(__GLIBC__))
- +#ifdef HAVE_GETPWENT_R
- struct passwd pw;
- #endif
- struct stat stat_buf;
- @@ -72,7 +72,7 @@ get_user_ps_path(char **file)
- *file = strdup(file_name);
- return (*file) ? TSS_SUCCESS : TSPERR(TSS_E_OUTOFMEMORY);
- }
- -#if (defined (__FreeBSD__) || defined (__OpenBSD__))
- +#ifndef HAVE_GETPWENT_R
- MUTEX_LOCK(user_ps_path);
- #endif
-
- @@ -90,7 +90,7 @@ get_user_ps_path(char **file)
- #else
- setpwent();
- while (1) {
- -#if (defined (__linux) || defined (linux) || defined(__GLIBC__))
- +#ifdef HAVE_GETPWENT_R
- rc = getpwent_r(&pw, buf, PASSWD_BUFSIZE, &pwp);
- if (rc) {
- LogDebugFn("USER PS: Error getting path to home directory: getpwent_r: %s",
- @@ -99,7 +99,7 @@ get_user_ps_path(char **file)
- return TSPERR(TSS_E_INTERNAL_ERROR);
- }
-
- -#elif (defined (__FreeBSD__) || defined (__OpenBSD__))
- +#else
- if ((pwp = getpwent()) == NULL) {
- LogDebugFn("USER PS: Error getting path to home directory: getpwent: %s",
- strerror(rc));
- --
- 2.1.4
|