|
@@ -0,0 +1,80 @@
|
|
|
+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>
|
|
|
+---
|
|
|
+ configure.in | 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.in
|
|
|
++++ b/configure.in
|
|
|
+@@ -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
|
|
|
+
|