[X2Go-Commits] [libx2goclient] 02/02: src/x2goclient-network-ssh.c: re-implement master connection spawning via GSubprocess.

git-admin at x2go.org git-admin at x2go.org
Wed Jan 15 08:01:36 CET 2020


This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch master
in repository libx2goclient.

commit 2e1e4d76fb92d7e0fe2fa06a502c2a4f69a693d4
Author: Mihai Moldovan <ionic at ionic.de>
Date:   Wed Jan 15 08:01:18 2020 +0100

    src/x2goclient-network-ssh.c: re-implement master connection spawning via GSubprocess.
    
    Sadly, even that "fails" to work correctly with the forking/detaching
    ssh process.
---
 src/x2goclient-network-ssh.c | 37 ++++++++++++++++++++++++-------------
 1 file changed, 24 insertions(+), 13 deletions(-)

diff --git a/src/x2goclient-network-ssh.c b/src/x2goclient-network-ssh.c
index 28e1294..502e7fb 100644
--- a/src/x2goclient-network-ssh.c
+++ b/src/x2goclient-network-ssh.c
@@ -796,30 +796,41 @@ static gboolean x2goclient_network_ssh_parent_connect (X2GoClientNetwork *parent
     g_printf ("\n");
 
     g_printf ("Launching!\n");
-    gint ssh_exit = -1;
-    gchar *ssh_stdout = NULL, *ssh_stderr = NULL;
     GError *ssh_err = NULL;
-    ret = g_spawn_sync (NULL, (gchar**)(ssh_cmd->pdata), NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, &ssh_stdout, &ssh_stderr, &ssh_exit, &ssh_err);
+    self->master_conn = g_subprocess_newv ((const gchar* const*)(ssh_cmd->pdata), G_SUBPROCESS_FLAGS_STDOUT_PIPE | G_SUBPROCESS_FLAGS_STDERR_PIPE, &ssh_err);
+
+    ret = self->master_conn != NULL;
 
     if (ret) {
-      g_printf ("Process executed successfully!\nReturn value: %d\nStdout:\n>>>%s<<<\nStderr:\n>>>%s<<<\n", ssh_exit, ssh_stdout, ssh_stderr);
+      g_printf ("Process started/executed successfully!\n");
 
       if (ssh_err) {
         g_printf ("Successful execution, but ssh_err set? Weird, here's the message: %s", ssh_err->message);
       }
+
+      GCancellable *master_conn_comm_cancel = g_cancellable_new ();
+      g_clear_error (&ssh_err);
+      GBytes *ssh_stdout = NULL, *ssh_stderr = NULL;
+      if (!(g_subprocess_communicate (self->master_conn, NULL, master_conn_comm_cancel, &ssh_stdout, &ssh_stderr, &ssh_err))) {
+        g_log (NULL, G_LOG_LEVEL_CRITICAL, "Communication with master connection subprocess failed: %s", ssh_err->message);
+      }
+      else {
+        gsize ssh_stdout_size = 0, ssh_stderr_size = 0;
+        const gchar *ssh_stdout_str = g_bytes_get_data (ssh_stdout, &ssh_stdout_size),
+                    *ssh_stderr_str = g_bytes_get_data (ssh_stderr, &ssh_stderr_size);
+        g_printf ("Stdout:\n>>>%.*s<<<\nStderr:\n>>>%.*s<<<\n", ssh_stdout_size, ssh_stdout_str, ssh_stderr_size, ssh_stderr_str);
+
+        g_bytes_unref (ssh_stdout);
+        g_bytes_unref (ssh_stderr);
+      }
+
+      g_clear_error (&ssh_err);
     }
     else {
-      g_printf ("Process didn't execute successfully!\nError:\n>>>%s<<<\n", ssh_err->message);
+      g_printf ("Process didn't execute/start successfully!\nError:\n>>>%s<<<\n", ssh_err->message);
     }
 
-    g_free (ssh_stdout);
-    ssh_stdout = NULL;
-
-    g_free (ssh_stderr);
-    ssh_stderr = NULL;
-
-    g_free (ssh_err);
-    ssh_err = NULL;
+    g_clear_error (&ssh_err);
   }
 
   g_free (session_path);

--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/libx2goclient.git


More information about the x2go-commits mailing list