aboutsummaryrefslogtreecommitdiffstats
path: root/testing/libuser/0001-Check-for-issetugid.patch
blob: 79756b9a07df16671424a0a943db33d7fdc47313 (plain)
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
From d0537cb7f2dc5877700ad78dfd191515379d4edc Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Thu, 7 Jan 2016 02:22:51 +0000
Subject: [PATCH 1/2] Check for issetugid()

If secure version of getenv is not there then we can use
issetugid() as aid to call getenv()

Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Upstream-Status: Pending

 configure.ac |  1 +
 lib/config.c | 12 +++++++++++-
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/configure.ac b/configure.ac
index 1ded1a2..ee19e1f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -125,6 +125,7 @@ AC_TYPE_OFF_T
 AC_TYPE_SIZE_T
 
 AC_CHECK_FUNCS([__secure_getenv secure_getenv])
+AC_CHECK_FUNCS([issetugid])
 
 # Modify CFLAGS after all tests are run (some of them could fail because
 # of the -Werror).
diff --git a/lib/config.c b/lib/config.c
index 29e7120..30f9daf 100644
--- a/lib/config.c
+++ b/lib/config.c
@@ -44,8 +44,10 @@
 #  define safe_getenv(string) secure_getenv(string)
 #elif defined(HAVE___SECURE_GETENV)
 #  define safe_getenv(string) __secure_getenv(string)
+#elif defined(HAVE_ISSETUGID)
+#  define safe_getenv(string) safe_getenv_issetugid(string)
 #else
-#  error Neither secure_getenv not __secure_getenv are available
+#  error None of secure_getenv, __secure_getenv, or issetugid is available
 #endif
 
 struct config_config {
@@ -59,6 +61,14 @@ struct config_key {
 	GList *values;
 };
 
+static const char*
+safe_getenv_issetugid(const char* name)
+{
+	if (issetugid ())
+		return 0;
+	return getenv (name);
+}
+
 /* Compare two section names */
 static int
 compare_section_names(gconstpointer a, gconstpointer b)
-- 
2.7.0