[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