Blame view

buildroot/buildroot-2016.08.1/package/trousers/0004-Check-that-getpwent_r-is-available-before-using-it.patch 2.44 KB
6b13f685e   김민수   BSP 최초 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
  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