From: Doyoun Kang Date: Thu, 24 Oct 2024 11:25:41 +0000 (+0900) Subject: Add new define e_secure_getenv for getting environment variable X-Git-Tag: accepted/tizen/unified/20241101.174206~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=583962a7eb4da61d365e4eb05cb69622add87326;p=platform%2Fupstream%2Fenlightenment.git Add new define e_secure_getenv for getting environment variable We add new define - e_secure_getenv. If the system supports the secure_getenv() function, e_secure_getenv will use the secure_getenv() function. If not, check whether the system supports __secure_getenv. If yes, e_secure_getenv use the __secure_getenv() function. Otherwise, fall back to using the getenv function. Change-Id: If0588224a38395a8dd1a482904573ddcde3278d1 --- diff --git a/configure.ac b/configure.ac index 19a53ff34f..405c6b9e08 100755 --- a/configure.ac +++ b/configure.ac @@ -119,6 +119,19 @@ fi AC_SUBST([fnmatch_libs]) +##### check secure_getenv function ##### +AC_CHECK_FUNCS(secure_getenv, sg_res=yes, sg_res=no) +if test "x$sg_res" = "xno"; then + AC_CHECK_FUNCS(__secure_getenv, _sg_res=yes, _sg_res=no) + if test "x$_sg_res" = "xno"; then + echo "C library does not support secure_getenv, use getenv instead" + else + AC_DEFINE(HAVE___SECURE_GETENV, 1, [Have __secure_getenv]) + fi +else + AC_DEFINE(HAVE_SECURE_GETENV, 1, [Have secure_getenv]) +fi + dnl AC_E_CHECK_PKG(VALGRIND, [valgrind >= 2.4.0], [], [:]) AC_SUBST([VALGRIND_CFLAGS]) AC_SUBST([VALGRIND_LIBS]) diff --git a/src/bin/core/e_config.c b/src/bin/core/e_config.c index 109c5fe670..b5c3db918b 100644 --- a/src/bin/core/e_config.c +++ b/src/bin/core/e_config.c @@ -338,7 +338,7 @@ e_config_init(void) /* TIZEN_ONLY: We don't save e.cfg file. * Sometimes e.cfg file was broken after writing. */ - if (getenv("E_CONF_RO")) e_config_save_block_set(1); + if (e_secure_getenv("E_CONF_RO")) e_config_save_block_set(1); /* if environment var set - use this profile name */ char *s = e_util_env_get("E_CONF_PROFILE"); @@ -440,7 +440,7 @@ e_config_load(void) #undef D e_config_profile_set("default"); if (!reload) e_config_profile_del(e_config_profile_get()); - if (getenv("E_CONF_RO")) e_config_save_block_set(1); + if (e_secure_getenv("E_CONF_RO")) e_config_save_block_set(1); e_error_message_show(_("Could not load e.cfg")); return; } @@ -773,7 +773,7 @@ _e_config_domain_user_load(const char *domain, E_Config_DD *edd) E_API void * e_config_domain_load(const char *domain, E_Config_DD *edd) { - if (getenv("E_CONF_RO")) + if (e_secure_getenv("E_CONF_RO")) { return e_config_domain_system_load(domain, edd); } diff --git a/src/bin/e_main.c b/src/bin/e_main.c index e9f959687f..761c20e00c 100644 --- a/src/bin/e_main.c +++ b/src/bin/e_main.c @@ -910,7 +910,7 @@ _e_main_parse_arguments(int argc, char **argv) if ((!strcmp(argv[i], "-profile")) && (i < (argc - 1))) { i++; - if (!getenv("E_CONF_PROFILE")) + if (!e_secure_getenv("E_CONF_PROFILE")) e_util_env_set("E_CONF_PROFILE", argv[i]); } else if ((!strcmp(argv[i], "-version")) || @@ -954,7 +954,7 @@ _e_main_cb_signal_hup(void *data EINA_UNUSED, int ev_type EINA_UNUSED, void *ev static int _e_main_dirs_init(void) { - if(getenv("E_CONF_RO")) + if(e_secure_getenv("E_CONF_RO")) { return 1; } diff --git a/src/bin/log/e_log.c b/src/bin/log/e_log.c index 4488090f89..f4cafa21b4 100644 --- a/src/bin/log/e_log.c +++ b/src/bin/log/e_log.c @@ -163,11 +163,11 @@ e_log_init(void) eina_log_domain_level_set("e", 3); #ifdef HAVE_DLOG - if (getenv("E_LOG_DLOG_ENABLE")) + if (e_secure_getenv("E_LOG_DLOG_ENABLE")) e_log_dlog_enable(EINA_TRUE); #endif - s = getenv("E_LOG_FILE_PATH"); + s = e_secure_getenv("E_LOG_FILE_PATH"); if (s) { #ifdef HAVE_DLOG diff --git a/src/bin/server/e_comp_wl_input.c b/src/bin/server/e_comp_wl_input.c index 2cd2fb9630..7d7e1d011a 100644 --- a/src/bin/server/e_comp_wl_input.c +++ b/src/bin/server/e_comp_wl_input.c @@ -1672,8 +1672,8 @@ e_comp_wl_input_init(void) if (!comp_wl->seat.name) comp_wl->seat.name = "default"; - dont_set_e_input_keymap = getenv("NO_E_INPUT_KEYMAP_CACHE") ? EINA_TRUE : EINA_FALSE; - dont_use_xkb_cache = getenv("NO_KEYMAP_CACHE") ? EINA_TRUE : EINA_FALSE; + dont_set_e_input_keymap = e_secure_getenv("NO_E_INPUT_KEYMAP_CACHE") ? EINA_TRUE : EINA_FALSE; + dont_use_xkb_cache = e_secure_getenv("NO_KEYMAP_CACHE") ? EINA_TRUE : EINA_FALSE; g_mutex_init(&comp_wl->kbd.resource_mutex); g_mutex_init(&comp_wl->kbd.repeat_delay_mutex); @@ -2490,8 +2490,8 @@ e_comp_wl_input_keymap_init(void) struct xkb_keymap *map = NULL; /* keymap */ - dont_set_e_input_keymap = getenv("NO_E_INPUT_KEYMAP_CACHE") ? EINA_TRUE : EINA_FALSE; - dont_use_xkb_cache = getenv("NO_KEYMAP_CACHE") ? EINA_TRUE : EINA_FALSE; + dont_set_e_input_keymap = e_secure_getenv("NO_E_INPUT_KEYMAP_CACHE") ? EINA_TRUE : EINA_FALSE; + dont_use_xkb_cache = e_secure_getenv("NO_KEYMAP_CACHE") ? EINA_TRUE : EINA_FALSE; if (e_config->xkb.use_cache && !dont_use_xkb_cache) { diff --git a/src/bin/utils/e_utils.c b/src/bin/utils/e_utils.c index 03f1b3c23a..20412ec7c7 100644 --- a/src/bin/utils/e_utils.c +++ b/src/bin/utils/e_utils.c @@ -47,7 +47,7 @@ e_util_env_set(const char *var, const char *val) #ifdef HAVE_UNSETENV unsetenv(var); #else - if (getenv(var)) putenv(var); + if (e_secure_getenv(var)) putenv(var); #endif } } @@ -62,7 +62,7 @@ e_util_env_get(const char *name) { if (!name) return NULL; - char *val = getenv(name); + char *val = e_secure_getenv(name); if (!val) return NULL; /* Using strdup for sanitizing diff --git a/src/include/e_types.h b/src/include/e_types.h index 78e953ef6e..eb5c7d18e7 100644 --- a/src/include/e_types.h +++ b/src/include/e_types.h @@ -47,6 +47,14 @@ # define OBJECT_CHECK # define OBJECT_HASH_CHECK +#if defined(HAVE_SECURE_GETENV) +# define e_secure_getenv secure_getenv +#elif defined(HAVE___SECURE_GETENV) +# define e_secure_getenv __secure_getenv +#else +# define e_secure_getenv getenv +#endif + # define E_LAYER_COUNT 31 //#define SMARTERR(args...) abort()