Patrick Williams | d8c66bc | 2016-06-20 12:57:21 -0500 | [diff] [blame] | 1 | From d0537cb7f2dc5877700ad78dfd191515379d4edc Mon Sep 17 00:00:00 2001 |
| 2 | From: Khem Raj <raj.khem@gmail.com> |
| 3 | Date: Thu, 7 Jan 2016 02:22:51 +0000 |
| 4 | Subject: [PATCH 1/2] Check for issetugid() |
| 5 | |
| 6 | If secure version of getenv is not there then we can use |
| 7 | issetugid() as aid to call getenv() |
| 8 | |
| 9 | Signed-off-by: Khem Raj <raj.khem@gmail.com> |
| 10 | --- |
| 11 | Upstream-Status: Pending |
| 12 | |
| 13 | configure.ac | 1 + |
| 14 | lib/config.c | 12 +++++++++++- |
| 15 | 2 files changed, 12 insertions(+), 1 deletion(-) |
| 16 | |
| 17 | diff --git a/configure.ac b/configure.ac |
| 18 | index 1ded1a2..ee19e1f 100644 |
| 19 | --- a/configure.ac |
| 20 | +++ b/configure.ac |
| 21 | @@ -125,6 +125,7 @@ AC_TYPE_OFF_T |
| 22 | AC_TYPE_SIZE_T |
| 23 | |
| 24 | AC_CHECK_FUNCS([__secure_getenv secure_getenv]) |
| 25 | +AC_CHECK_FUNCS([issetugid]) |
| 26 | |
| 27 | # Modify CFLAGS after all tests are run (some of them could fail because |
| 28 | # of the -Werror). |
| 29 | diff --git a/lib/config.c b/lib/config.c |
| 30 | index 29e7120..30f9daf 100644 |
| 31 | --- a/lib/config.c |
| 32 | +++ b/lib/config.c |
| 33 | @@ -44,8 +44,10 @@ |
| 34 | # define safe_getenv(string) secure_getenv(string) |
| 35 | #elif defined(HAVE___SECURE_GETENV) |
| 36 | # define safe_getenv(string) __secure_getenv(string) |
| 37 | +#elif defined(HAVE_ISSETUGID) |
| 38 | +# define safe_getenv(string) safe_getenv_issetugid(string) |
| 39 | #else |
| 40 | -# error Neither secure_getenv not __secure_getenv are available |
| 41 | +# error None of secure_getenv, __secure_getenv, or issetugid is available |
| 42 | #endif |
| 43 | |
| 44 | struct config_config { |
| 45 | @@ -59,6 +61,14 @@ struct config_key { |
| 46 | GList *values; |
| 47 | }; |
| 48 | |
| 49 | +static const char* |
| 50 | +safe_getenv_issetugid(const char* name) |
| 51 | +{ |
| 52 | + if (issetugid ()) |
| 53 | + return 0; |
| 54 | + return getenv (name); |
| 55 | +} |
| 56 | + |
| 57 | /* Compare two section names */ |
| 58 | static int |
| 59 | compare_section_names(gconstpointer a, gconstpointer b) |
| 60 | -- |
| 61 | 2.7.0 |
| 62 | |