[gnome-terminal] client: legacy: Add option to not pass the environment



commit 4a491e99ee942285a55ebef6caf9558804ebca67
Author: Christian Persch <chpe src gnome org>
Date:   Thu Apr 23 23:18:08 2020 +0200

    client: legacy: Add option to not pass the environment
    
    Add --no-environment option that makes the client not pass
    the client's environment to the server to be used as the
    environment for the newly created terminal.
    
    https://gitlab.gnome.org/GNOME/gnome-terminal/-/issues/253

 src/terminal-client-utils.c | 45 ++++++++++++++++++++++++---------------------
 src/terminal-client-utils.h |  1 +
 src/terminal-options.c      |  9 +++++++++
 src/terminal-options.h      |  1 +
 src/terminal.c              |  1 +
 5 files changed, 36 insertions(+), 21 deletions(-)
---
diff --git a/src/terminal-client-utils.c b/src/terminal-client-utils.c
index 323f98d3..8ddfb7a3 100644
--- a/src/terminal-client-utils.c
+++ b/src/terminal-client-utils.c
@@ -109,32 +109,35 @@ terminal_client_append_create_instance_options (GVariantBuilder *builder,
  */
 void
 terminal_client_append_exec_options (GVariantBuilder *builder,
+                                     gboolean         pass_environment,
                                      const char      *working_directory,
                                      PassFdElement   *fd_array,
                                      gsize            fd_array_len,
                                      gboolean         shell)
 {
-  gs_strfreev char **envv;
-
-  envv = g_get_environ ();
-  envv = g_environ_unsetenv (envv, "COLORTERM");
-  envv = g_environ_unsetenv (envv, "COLUMNS");
-  envv = g_environ_unsetenv (envv, "DESKTOP_STARTUP_ID");
-  envv = g_environ_unsetenv (envv, "GIO_LAUNCHED_DESKTOP_FILE_PID");
-  envv = g_environ_unsetenv (envv, "GIO_LAUNCHED_DESKTOP_FILE");
-  envv = g_environ_unsetenv (envv, "GNOME_DESKTOP_ICON");
-  envv = g_environ_unsetenv (envv, "LINES");
-  envv = g_environ_unsetenv (envv, "NOTIFY_SOCKET");
-  envv = g_environ_unsetenv (envv, "PWD");
-  envv = g_environ_unsetenv (envv, "TERM");
-  envv = g_environ_unsetenv (envv, "VTE_VERSION");
-  envv = g_environ_unsetenv (envv, "WINDOWID");
-  envv = g_environ_unsetenv (envv, TERMINAL_ENV_SERVICE_NAME);
-  envv = g_environ_unsetenv (envv, TERMINAL_ENV_SCREEN);
-
-  g_variant_builder_add (builder, "{sv}",
-                         "environ",
-                         g_variant_new_bytestring_array ((const char * const *) envv, -1));
+  if (pass_environment) {
+    gs_strfreev char **envv;
+
+    envv = g_get_environ ();
+    envv = g_environ_unsetenv (envv, "COLORTERM");
+    envv = g_environ_unsetenv (envv, "COLUMNS");
+    envv = g_environ_unsetenv (envv, "DESKTOP_STARTUP_ID");
+    envv = g_environ_unsetenv (envv, "GIO_LAUNCHED_DESKTOP_FILE_PID");
+    envv = g_environ_unsetenv (envv, "GIO_LAUNCHED_DESKTOP_FILE");
+    envv = g_environ_unsetenv (envv, "GNOME_DESKTOP_ICON");
+    envv = g_environ_unsetenv (envv, "LINES");
+    envv = g_environ_unsetenv (envv, "NOTIFY_SOCKET");
+    envv = g_environ_unsetenv (envv, "PWD");
+    envv = g_environ_unsetenv (envv, "TERM");
+    envv = g_environ_unsetenv (envv, "VTE_VERSION");
+    envv = g_environ_unsetenv (envv, "WINDOWID");
+    envv = g_environ_unsetenv (envv, TERMINAL_ENV_SERVICE_NAME);
+    envv = g_environ_unsetenv (envv, TERMINAL_ENV_SCREEN);
+
+    g_variant_builder_add (builder, "{sv}",
+                           "environ",
+                           g_variant_new_bytestring_array ((const char * const *) envv, -1));
+  }
 
   if (working_directory)
     g_variant_builder_add (builder, "{sv}",
diff --git a/src/terminal-client-utils.h b/src/terminal-client-utils.h
index fc3b9683..0a70637a 100644
--- a/src/terminal-client-utils.h
+++ b/src/terminal-client-utils.h
@@ -41,6 +41,7 @@ typedef struct {
 } PassFdElement;
 
 void terminal_client_append_exec_options            (GVariantBuilder *builder,
+                                                     gboolean         pass_environment,
                                                      const char      *working_directory,
                                                      PassFdElement   *fd_array,
                                                      gsize            fd_array_len,
diff --git a/src/terminal-options.c b/src/terminal-options.c
index 5cc20798..afe45455 100644
--- a/src/terminal-options.c
+++ b/src/terminal-options.c
@@ -1347,6 +1347,15 @@ get_goption_context (TerminalOptions *options)
       unsupported_option_callback,
       NULL, NULL
     },
+    {
+      "no-environment",
+      0,
+      0,
+      G_OPTION_ARG_NONE,
+      &options->no_environment,
+      N_("Do not pass the environment"),
+      NULL
+    },
     {
       "preferences",
       0,
diff --git a/src/terminal-options.h b/src/terminal-options.h
index 007a1745..3ac4070e 100644
--- a/src/terminal-options.h
+++ b/src/terminal-options.h
@@ -87,6 +87,7 @@ typedef struct
   char   **exec_argv;
   char    *default_profile;
   gboolean default_profile_is_id;
+  gboolean no_environment;
 
   gboolean  execute;
   double    zoom;
diff --git a/src/terminal.c b/src/terminal.c
index 8e0aca42..ad975391 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -516,6 +516,7 @@ handle_options (TerminalOptions *options,
           gsize fd_array_len = it->fd_array ? it->fd_array->len : 0;
 
           terminal_client_append_exec_options (&builder,
+                                               !options->no_environment,
                                                it->working_dir ? it->working_dir
                                                                : options->default_working_dir,
                                                fd_array, fd_array_len,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]