Add new define e_secure_getenv for getting environment variable 58/319658/1
authorDoyoun Kang <doyoun.kang@samsung.com>
Thu, 24 Oct 2024 11:25:41 +0000 (20:25 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Tue, 29 Oct 2024 09:47:37 +0000 (18:47 +0900)
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

configure.ac
src/bin/core/e_config.c
src/bin/e_main.c
src/bin/log/e_log.c
src/bin/server/e_comp_wl_input.c
src/bin/utils/e_utils.c
src/include/e_types.h

index 19a53ff34f6fbb29a4efa86a08fbabd29e16d1e5..405c6b9e081e54954dfcc7bae32f3f4a2ee1086c 100755 (executable)
@@ -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])
index 109c5fe6703d722f5adb5f9a378bc95f6343d9c4..b5c3db918bf9da2174e0e278c7d67cfa4fa1bed9 100644 (file)
@@ -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);
      }
index e9f959687fab080cea31f1de0d5f0b7ef8e84c11..761c20e00cb01f5dadbfdc869b451da0e8399a01 100644 (file)
@@ -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;
      }
index 4488090f89e565f77bbb14c7efa6f0e45f045f9f..f4cafa21b4388e3ef629355681fc9dbe28377652 100644 (file)
@@ -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
index 2cd2fb963082048a36f029c1b7625f5ea95625c0..7d7e1d011a183b8032214ad7310f469aaf1cf904 100644 (file)
@@ -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)
      {
index 03f1b3c23a577fff4eaac5ed65d5b82abb558f4f..20412ec7c7f00976700001e68fefb17b5910dff9 100644 (file)
@@ -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
index 78e953ef6e0436d0aa9f232ad0fadc7092b4d3f8..eb5c7d18e70a90760e784ddf3132af91427746da 100644 (file)
 # 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()