This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch master in repository libx2goclient.
commit fcb526e1347e8a9d7b2f59350bc6e4e461e8bc48 Author: Mihai Moldovan <io...@ionic.de> Date: Thu Jul 30 11:59:03 2020 +0200 src/x2goclient-network-ssh.c: split out appending host (and, if applicable, port) to an GPtrArray to a new function called x2goclient_network_ssh_sshcmd_add_host_port (). Just a code move, really, but we'll need that later on. --- src/x2goclient-network-ssh.c | 181 +++++++++++++++++++++++-------------------- 1 file changed, 98 insertions(+), 83 deletions(-) diff --git a/src/x2goclient-network-ssh.c b/src/x2goclient-network-ssh.c index 9f11df6..e833ead 100644 --- a/src/x2goclient-network-ssh.c +++ b/src/x2goclient-network-ssh.c @@ -136,6 +136,7 @@ static gboolean x2goclient_network_ssh_fetch_openssh_version (X2GoClientNetworkS static void x2goclient_network_ssh_log_std_str (const gchar * const str, const gsize str_size, const _Bool select_stderr); static gboolean x2goclient_network_ssh_gptrarray_to_string (GPtrArray * const arr, const gchar * const prelude, gchar ** const ret_str); static void x2goclient_network_ssh_gptrarray_print_debug (GPtrArray * const arr, const gchar * const prelude, const gchar * const desc); +static gboolean x2goclient_network_ssh_sshcmd_add_host_port (X2GoClientNetworkSSH * const self, GPtrArray * const ssh_cmd, GError ** const gerr); static void x2goclient_network_ssh_class_init (X2GoClientNetworkSSHClass * const klass) { @@ -783,90 +784,8 @@ static gboolean x2goclient_network_ssh_parent_connect (X2GoClientNetwork * const GPtrArray *ssh_cmd = g_ptr_array_new_with_free_func (&x2goclient_clear_strings); g_ptr_array_add (ssh_cmd, g_strdup ("ssh")); - GSocketAddress *sock_addr = NULL; - if (ret) { - g_object_get (G_OBJECT (self), "socket", &sock_addr, NULL); - - if (!(sock_addr)) { - g_set_error_literal (gerr, X2GOCLIENT_NETWORK_SSH_ERROR, X2GOCLIENT_NETWORK_SSH_ERROR_CONNECT_SOCK_ADDR_NULL, "No end point to connect to."); - ret = FALSE; - } - } - - if (ret) { - if (G_IS_UNIX_SOCKET_ADDRESS (sock_addr)) { - GUnixSocketAddress *unix_sock_addr = G_UNIX_SOCKET_ADDRESS (sock_addr); - - /* - * Tiny problem here: abstract sockets won't work. - * Since program arguments can't contain NULL bytes due to being C - * strings and every abstract socket already has to start with a NULL - * byte, we'll be just adding an empty argument here. - * - * Maybe there will be a way to do that correctly, some day. - */ - g_ptr_array_add (ssh_cmd, g_strdup (g_unix_socket_address_get_path (unix_sock_addr))); - } - else if (G_IS_INET_SOCKET_ADDRESS (sock_addr)) { - GInetSocketAddress *inet_sock_addr = G_INET_SOCKET_ADDRESS (sock_addr); - GInetAddress *inet_addr = g_inet_socket_address_get_address (inet_sock_addr); - guint16 port = g_inet_socket_address_get_port (inet_sock_addr); - - if (!(inet_addr)) { - g_set_error_literal (gerr, X2GOCLIENT_NETWORK_SSH_ERROR, X2GOCLIENT_NETWORK_SSH_ERROR_CONNECT_INET_ADDR_NULL, "Internet socket address is undefined, cannot connect to an unknown remote IP host."); - ret = FALSE; - } - else { - g_ptr_array_add (ssh_cmd, g_inet_address_to_string (inet_addr)); - - /* - * Handle port parameter, unless it's 0, which means to use the default - * value. - */ - if (port) { - g_ptr_array_add (ssh_cmd, g_strdup ("-p")); - g_ptr_array_add (ssh_cmd, g_strdup_printf ("%d", port)); - } - } - } - else if (G_IS_NATIVE_SOCKET_ADDRESS (sock_addr)) { - GNativeSocketAddress *native_sock_addr = G_NATIVE_SOCKET_ADDRESS (sock_addr); - - g_assert (sizeof (sockaddr_ho) == g_socket_address_get_native_size (sock_addr)); - - sockaddr_ho tmp_sockaddr = { 0 }; - - /* Fetch data. */ - GError *tmp_err = NULL; - g_socket_address_to_native (sock_addr, &tmp_sockaddr, sizeof (sockaddr_ho), &tmp_err); - - if (tmp_err) { - g_set_error (gerr, X2GOCLIENT_NETWORK_SSH_ERROR, X2GOCLIENT_NETWORK_SSH_ERROR_CONNECT_NATIVE_FETCH, "Unable to convert native socket address object to sockaddr struct: %s", tmp_err->message); - g_clear_error (&tmp_err); - ret = FALSE; - } - - if (ret) { - g_ptr_array_add (ssh_cmd, g_strdup (tmp_sockaddr.sho_addr)); - - /* - * Handle port parameter, unless it's 0, which means to use the default - * value. - */ - if (tmp_sockaddr.sho_port) { - g_ptr_array_add (ssh_cmd, g_strdup ("-p")); - g_ptr_array_add (ssh_cmd, g_strdup_printf ("%d", tmp_sockaddr.sho_port)); - } - } - } - else { - g_set_error_literal (gerr, X2GOCLIENT_NETWORK_SSH_ERROR, X2GOCLIENT_NETWORK_SSH_ERROR_CONNECT_SOCK_ADDR_UNKNOWN, "Unknown data in socket property, can't connect."); - ret = FALSE; - } - - g_clear_object (&sock_addr); - sock_addr = NULL; + ret = x2goclient_network_ssh_sshcmd_add_host_port (self, ssh_cmd, gerr); } if (ret) { @@ -1268,3 +1187,99 @@ static void x2goclient_network_ssh_gptrarray_print_debug (GPtrArray * const arr, g_log (NULL, G_LOG_LEVEL_DEBUG, "Unable to print out %s, internal error (the string likely was too big).", real_desc); } } + +static gboolean x2goclient_network_ssh_sshcmd_add_host_port (X2GoClientNetworkSSH * const self, GPtrArray * const ssh_cmd, GError ** const gerr) { + gboolean ret = FALSE; + + g_return_val_if_fail (X2GOCLIENT_IS_NETWORK_SSH (self), ret); + g_return_val_if_fail (ssh_cmd, ret); + g_return_val_if_fail (((NULL == gerr) || (NULL == *gerr)), ret); + + ret = TRUE; + + GSocketAddress *sock_addr = NULL; + + g_object_get (G_OBJECT (self), "socket", &sock_addr, NULL); + + if (!(sock_addr)) { + g_set_error_literal (gerr, X2GOCLIENT_NETWORK_SSH_ERROR, X2GOCLIENT_NETWORK_SSH_ERROR_CONNECT_SOCK_ADDR_NULL, "No end point to connect to."); + ret = FALSE; + } + + if (ret) { + if (G_IS_UNIX_SOCKET_ADDRESS (sock_addr)) { + GUnixSocketAddress *unix_sock_addr = G_UNIX_SOCKET_ADDRESS (sock_addr); + + /* + * Tiny problem here: abstract sockets won't work. + * Since program arguments can't contain NULL bytes due to being C + * strings and every abstract socket already has to start with a NULL + * byte, we'll be just adding an empty argument here. + * + * Maybe there will be a way to do that correctly, some day. + */ + g_ptr_array_add (ssh_cmd, g_strdup (g_unix_socket_address_get_path (unix_sock_addr))); + } + else if (G_IS_INET_SOCKET_ADDRESS (sock_addr)) { + GInetSocketAddress *inet_sock_addr = G_INET_SOCKET_ADDRESS (sock_addr); + GInetAddress *inet_addr = g_inet_socket_address_get_address (inet_sock_addr); + guint16 port = g_inet_socket_address_get_port (inet_sock_addr); + + if (!(inet_addr)) { + g_set_error_literal (gerr, X2GOCLIENT_NETWORK_SSH_ERROR, X2GOCLIENT_NETWORK_SSH_ERROR_CONNECT_INET_ADDR_NULL, "Internet socket address is undefined, cannot connect to an unknown remote IP host."); + ret = FALSE; + } + else { + g_ptr_array_add (ssh_cmd, g_inet_address_to_string (inet_addr)); + + /* + * Handle port parameter, unless it's 0, which means to use the default + * value. + */ + if (port) { + g_ptr_array_add (ssh_cmd, g_strdup ("-p")); + g_ptr_array_add (ssh_cmd, g_strdup_printf ("%d", port)); + } + } + } + else if (G_IS_NATIVE_SOCKET_ADDRESS (sock_addr)) { + GNativeSocketAddress *native_sock_addr = G_NATIVE_SOCKET_ADDRESS (sock_addr); + + g_assert (sizeof (sockaddr_ho) == g_socket_address_get_native_size (sock_addr)); + + sockaddr_ho tmp_sockaddr = { 0 }; + + /* Fetch data. */ + GError *tmp_err = NULL; + g_socket_address_to_native (sock_addr, &tmp_sockaddr, sizeof (sockaddr_ho), &tmp_err); + + if (tmp_err) { + g_set_error (gerr, X2GOCLIENT_NETWORK_SSH_ERROR, X2GOCLIENT_NETWORK_SSH_ERROR_CONNECT_NATIVE_FETCH, "Unable to convert native socket address object to sockaddr struct: %s", tmp_err->message); + g_clear_error (&tmp_err); + ret = FALSE; + } + + if (ret) { + g_ptr_array_add (ssh_cmd, g_strdup (tmp_sockaddr.sho_addr)); + + /* + * Handle port parameter, unless it's 0, which means to use the default + * value. + */ + if (tmp_sockaddr.sho_port) { + g_ptr_array_add (ssh_cmd, g_strdup ("-p")); + g_ptr_array_add (ssh_cmd, g_strdup_printf ("%d", tmp_sockaddr.sho_port)); + } + } + } + else { + g_set_error_literal (gerr, X2GOCLIENT_NETWORK_SSH_ERROR, X2GOCLIENT_NETWORK_SSH_ERROR_CONNECT_SOCK_ADDR_UNKNOWN, "Unknown data in socket property, can't connect."); + ret = FALSE; + } + + g_clear_object (&sock_addr); + sock_addr = NULL; + } + + return (ret); +} -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/libx2goclient.git _______________________________________________ x2go-commits mailing list x2go-commits@lists.x2go.org https://lists.x2go.org/listinfo/x2go-commits