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@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