diff --git a/TODO b/TODO index fdeb45c4fb7..b3c335ee35f 100644 --- a/TODO +++ b/TODO @@ -538,7 +538,7 @@ Regularly: * set_put(), hashmap_put() return values check. i.e. == 0 doesn't free()! -* use __secure_getenv() instead of getenv() where appropriate +* use secure_getenv() instead of getenv() where appropriate Scheduled for removal (or fixing): diff --git a/configure.ac b/configure.ac index da550212ebc..b9891369a14 100644 --- a/configure.ac +++ b/configure.ac @@ -173,6 +173,7 @@ LIBS="$save_LIBS" AC_SUBST(CAP_LIBS) AC_CHECK_FUNCS([fanotify_init fanotify_mark name_to_handle_at]) +AC_CHECK_FUNCS([__secure_getenv secure_getenv]) AC_CHECK_DECLS([gettid, pivot_root], [], [], [[#include #include #include ]]) diff --git a/src/core/dbus.c b/src/core/dbus.c index 75773aaa49c..f05f610718e 100644 --- a/src/core/dbus.c +++ b/src/core/dbus.c @@ -30,6 +30,7 @@ #include "strv.h" #include "cgroup.h" #include "mkdir.h" +#include "missing.h" #include "dbus-unit.h" #include "dbus-job.h" #include "dbus-manager.h" @@ -955,12 +956,12 @@ static DBusConnection* manager_bus_connect_private(Manager *m, DBusBusType type) switch (type) { case DBUS_BUS_SYSTEM: - address = __secure_getenv("DBUS_SYSTEM_BUS_ADDRESS"); + address = secure_getenv("DBUS_SYSTEM_BUS_ADDRESS"); if (!address || !address[0]) address = DBUS_SYSTEM_BUS_DEFAULT_ADDRESS; break; case DBUS_BUS_SESSION: - address = __secure_getenv("DBUS_SESSION_BUS_ADDRESS"); + address = secure_getenv("DBUS_SESSION_BUS_ADDRESS"); if (!address || !address[0]) address = DBUS_SESSION_BUS_DEFAULT_ADDRESS; break; @@ -1077,7 +1078,7 @@ static int bus_init_private(Manager *m) { const char *e; char *p; - e = __secure_getenv("XDG_RUNTIME_DIR"); + e = secure_getenv("XDG_RUNTIME_DIR"); if (!e) return 0; diff --git a/src/libudev/libudev.c b/src/libudev/libudev.c index 1a74808411b..af36cc44524 100644 --- a/src/libudev/libudev.c +++ b/src/libudev/libudev.c @@ -21,6 +21,7 @@ #include "libudev.h" #include "libudev-private.h" +#include "missing.h" /** * SECTION:libudev @@ -191,7 +192,7 @@ _public_ struct udev *udev_new(void) } /* environment overrides config */ - env = __secure_getenv("UDEV_LOG"); + env = secure_getenv("UDEV_LOG"); if (env != NULL) udev_set_log_priority(udev, util_log_priority(env)); diff --git a/src/shared/dbus-common.c b/src/shared/dbus-common.c index b8229bd6633..0c73d6c6a87 100644 --- a/src/shared/dbus-common.c +++ b/src/shared/dbus-common.c @@ -32,6 +32,7 @@ #include "log.h" #include "dbus-common.h" #include "util.h" +#include "missing.h" #include "def.h" #include "strv.h" @@ -121,7 +122,7 @@ int bus_connect(DBusBusType t, DBusConnection **_bus, bool *_private, DBusError * try via XDG_RUNTIME_DIR first, then * fallback to normal bus access */ - e = __secure_getenv("XDG_RUNTIME_DIR"); + e = secure_getenv("XDG_RUNTIME_DIR"); if (e) { char *p; diff --git a/src/shared/log.c b/src/shared/log.c index 847202d7d38..96634645bc7 100644 --- a/src/shared/log.c +++ b/src/shared/log.c @@ -30,6 +30,7 @@ #include "log.h" #include "util.h" +#include "missing.h" #include "macro.h" #include "socket-util.h" @@ -804,19 +805,19 @@ int log_set_max_level_from_string(const char *e) { void log_parse_environment(void) { const char *e; - e = __secure_getenv("SYSTEMD_LOG_TARGET"); + e = secure_getenv("SYSTEMD_LOG_TARGET"); if (e && log_set_target_from_string(e) < 0) log_warning("Failed to parse log target %s. Ignoring.", e); - e = __secure_getenv("SYSTEMD_LOG_LEVEL"); + e = secure_getenv("SYSTEMD_LOG_LEVEL"); if (e && log_set_max_level_from_string(e) < 0) log_warning("Failed to parse log level %s. Ignoring.", e); - e = __secure_getenv("SYSTEMD_LOG_COLOR"); + e = secure_getenv("SYSTEMD_LOG_COLOR"); if (e && log_show_color_from_string(e) < 0) log_warning("Failed to parse bool %s. Ignoring.", e); - e = __secure_getenv("SYSTEMD_LOG_LOCATION"); + e = secure_getenv("SYSTEMD_LOG_LOCATION"); if (e && log_show_location_from_string(e) < 0) log_warning("Failed to parse bool %s. Ignoring.", e); } diff --git a/src/shared/missing.h b/src/shared/missing.h index 7fbb9259eba..c5bb71a504c 100644 --- a/src/shared/missing.h +++ b/src/shared/missing.h @@ -26,6 +26,7 @@ #include #include #include +#include #include #include @@ -218,7 +219,6 @@ static inline pid_t gettid(void) { #endif #ifndef HAVE_NAME_TO_HANDLE_AT - struct file_handle { unsigned int handle_bytes; int handle_type; @@ -229,3 +229,11 @@ static inline int name_to_handle_at(int fd, const char *name, struct file_handle return syscall(__NR_name_to_handle_at, fd, name, handle, mnt_id, flags); } #endif + +#ifndef HAVE_SECURE_GETENV +# ifdef HAVE___SECURE_GETENV +# define secure_getenv __secure_getenv +# else +# error neither secure_getenv nor __secure_getenv are available +# endif +#endif