| 1 | #ifndef _COMPAT_GETENV_H |
| 2 | #define _COMPAT_GETENV_H |
| 3 | |
| 4 | /* |
| 5 | * Copyright (C) 2015 Mathieu Desnoyers <mathieu.desnoyers@efficios.com> |
| 6 | * |
| 7 | * SPDX-License-Identifier: LGPL-2.1-only |
| 8 | * |
| 9 | */ |
| 10 | |
| 11 | #include <stdlib.h> |
| 12 | #include <unistd.h> |
| 13 | #include <sys/types.h> |
| 14 | #include <common/error.hpp> |
| 15 | |
| 16 | static inline |
| 17 | int lttng_is_setuid_setgid() |
| 18 | { |
| 19 | return geteuid() != getuid() || getegid() != getgid(); |
| 20 | } |
| 21 | |
| 22 | static inline |
| 23 | char *lttng_secure_getenv(const char *name) |
| 24 | { |
| 25 | if (lttng_is_setuid_setgid()) { |
| 26 | WARN("Getting environment variable '%s' from setuid/setgid binary refused for security reasons.", |
| 27 | name); |
| 28 | return nullptr; |
| 29 | } |
| 30 | return getenv(name); |
| 31 | } |
| 32 | |
| 33 | #endif /* _COMPAT_GETENV_H */ |