[X2Go-Commits] [x2goclient] 02/31: src/sshmasterconnection.cpp: turns out libssh < 0.6.0 doesn't support fetching the host, port and username parameters at all.

git-admin at x2go.org git-admin at x2go.org
Sun Mar 5 23:22:21 CET 2017


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

x2go pushed a commit to branch master
in repository x2goclient.

commit 9e96ba4d800beb14a0d49f707c7052378aca3ac0
Author: Mihai Moldovan <ionic at ionic.de>
Date:   Thu Feb 23 08:17:55 2017 +0100

    src/sshmasterconnection.cpp: turns out libssh < 0.6.0 doesn't support fetching the host, port and username parameters at all.
    
    We're in the clear for non-SSH-proxied connections and can use config
    file parsing, but have to disable config file parsing in the proxy
    settings, as there's no way to query the remote endpoint information. As
    a result we will be unable to open a new socket to the remote endpoint
    and proxying will fail badly.
---
 debian/changelog            |  7 ++++++
 src/sshmasterconnection.cpp | 54 ++++++++++++++-------------------------------
 2 files changed, 24 insertions(+), 37 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 713e269..10c656e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -67,6 +67,13 @@ x2goclient (4.1.0.1-0x2go1) UNRELEASED; urgency=medium
       ssh_options_get () API, but instead expects users to pull out
       information directly from the ssh_session structure. This fixes compile
       issues on systems with older libssh versions.
+    - src/sshmasterconnection.cpp: turns out libssh < 0.6.0 doesn't support
+      fetching the host, port and username parameters at all. We're in the
+      clear for non-SSH-proxied connections and can use config file parsing,
+      but have to disable config file parsing in the proxy settings, as
+      there's no way to query the remote endpoint information. As a result we
+      will be unable to open a new socket to the remote endpoint and proxying
+      will fail badly.
 
  -- X2Go Release Manager <git-admin at x2go.org>  Wed, 22 Feb 2017 07:13:10 +0100
 
diff --git a/src/sshmasterconnection.cpp b/src/sshmasterconnection.cpp
index f99a1bd..0ceff00 100644
--- a/src/sshmasterconnection.cpp
+++ b/src/sshmasterconnection.cpp
@@ -196,6 +196,7 @@ SshMasterConnection::SshMasterConnection (QObject* parent, QString host, int por
     kerberos=krblogin;
     challengeAuthVerificationCode=QString::null;
 
+#if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 0)
     if (this->user.isEmpty ()) {
         /* We might have a config file request pending, honor this. */
         ssh_session tmp_session = ssh_new ();
@@ -224,11 +225,7 @@ SshMasterConnection::SshMasterConnection (QObject* parent, QString host, int por
             }
 
             char *inferred_username = NULL;
-#if LIBSSH_VERSION_INT < SSH_VERSION_INT (0, 6, 0)
-            inferred_username = tmp_session->username;
-#else
             ssh_options_get (tmp_session, SSH_OPTIONS_USER, &inferred_username);
-#endif
             x2goDebug << "Temporary session user name after config file parse: " << inferred_username;
 
             this->user = QString::fromLocal8Bit (inferred_username);
@@ -237,6 +234,7 @@ SshMasterConnection::SshMasterConnection (QObject* parent, QString host, int por
             ssh_free (tmp_session);
         }
     }
+#endif
 
     if (this->user.isEmpty ()) {
 #ifdef Q_OS_WIN
@@ -828,25 +826,21 @@ bool SshMasterConnection::sshConnect()
         }
     }
 
+#if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 0)
     unsigned int cur_port = 0;
-#if LIBSSH_VERSION_INT < SSH_VERSION_INT (0, 6, 0)
-    cur_port = my_ssh_session->port;
-#else
     ssh_options_get_port (my_ssh_session, &cur_port);
-#endif
     x2goDebug << "Session port before config file parse: " << cur_port;
+#endif
 
     /* Parse ~/.ssh/config. */
     if (ssh_options_parse_config (my_ssh_session, NULL) < 0) {
         x2goDebug << "Warning: unable to parse the SSH config file.";
     }
 
-#if LIBSSH_VERSION_INT < SSH_VERSION_INT (0, 6, 0)
-    cur_port = my_ssh_session->port;
-#else
+#if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 0)
     ssh_options_get_port (my_ssh_session, &cur_port);
-#endif
     x2goDebug << "Session port after config file parse: " << cur_port;
+#endif
 
     rc = ssh_connect ( my_ssh_session );
     if ( rc != SSH_OK )
@@ -862,24 +856,20 @@ bool SshMasterConnection::sshConnect()
         }
     }
 
-#if LIBSSH_VERSION_INT < SSH_VERSION_INT (0, 6, 0)
-    cur_port = my_ssh_session->port;
-#else
+#if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 0)
     ssh_options_get_port (my_ssh_session, &cur_port);
-#endif
     x2goDebug << "Session port before config file parse (part 2): " << cur_port;
+#endif
 
     /* Parse ~/.ssh/config. */
     if (ssh_options_parse_config (my_ssh_session, NULL) < 0) {
         x2goDebug << "Warning: unable to parse the SSH config file.";
     }
 
-#if LIBSSH_VERSION_INT < SSH_VERSION_INT (0, 6, 0)
-    cur_port = my_ssh_session->port;
-#else
+#if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 0)
     ssh_options_get_port (my_ssh_session, &cur_port);
-#endif
     x2goDebug << "Session port after config file parse (part 2): " << cur_port;
+#endif
 
     return true;
 }
@@ -1674,6 +1664,12 @@ void SshMasterConnection::channelLoop()
                               << channelConnections.at (i).localHost << ":" << channelConnections.at (i).localPort
                               << ")";
 #endif
+
+                    /*
+                     * Cannot support config file parsing here with pre-0.6.0 libssh versions.
+                     * There's just no way to get the inferred host and port values.
+                     */
+#if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 0)
                     ssh_session tmp_session = ssh_new ();
 
                     if (!tmp_session) {
@@ -1699,36 +1695,20 @@ void SshMasterConnection::channelLoop()
                         }
 
                         unsigned int inferred_port = 0;
-#if LIBSSH_VERSION_INT < SSH_VERSION_INT (0, 6, 0)
-                        inferred_port = tmp_session->port;
-#else
                         ssh_options_get_port (tmp_session, &inferred_port);
-#endif
                         x2goDebug << "Temporary session port after config file parse: " << inferred_port;
 
                         char *inferred_host = NULL;
-#if LIBSSH_VERSION_INT < SSH_VERSION_INT (0, 6, 0)
-                        if (inferred_host) {
-                            inferred_host = strdup(tmp_session->host);
-                        }
-                        else {
-                            x2goDebug << "Temporary session host after config file parse NULL; should not happen, as it was set before.";
-                        }
-#else
                         ssh_options_get (tmp_session, SSH_OPTIONS_HOST, &inferred_host);
-#endif
                         x2goDebug << "Temporary session host after config file parse: " << inferred_host;
 
                         channelConnections[i].forwardHost = QString (inferred_host);
                         channelConnections[i].forwardPort = static_cast<int> (inferred_port);
 
-#if LIBSSH_VERSION_INT < SSH_VERSION_INT (0, 6, 0)
-                        free (inferred_host);
-#else
                         ssh_string_free_char (inferred_host);
-#endif
                         ssh_free (tmp_session);
                     }
+#endif
 
                     {
                         QByteArray tmp_BA_forward = channelConnections.at (i).forwardHost.toLocal8Bit ();

--
Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git


More information about the x2go-commits mailing list