This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch master in repository x2goclient.
commit d0be65ee5177c2df4761c1fba18e2967b49951aa Author: Mihai Moldovan <io...@ionic.de> Date: Fri Nov 10 21:33:46 2017 +0100 src/sshmasterconnection.cpp: query for password if it wasn't already provided. This usually happens if auto-login is enabled, which bypasses the password prompt. If auto-login fails, authentication normally continues via challenge auth or plain passwords, but since users had no chance to input a password, such authentication will always fail. Give users a way to enter passwords, in case the auto-login failed. --- debian/changelog | 6 +++++ src/sshmasterconnection.cpp | 55 ++++++++++++++++++++++++++++----------------- 2 files changed, 41 insertions(+), 20 deletions(-) diff --git a/debian/changelog b/debian/changelog index 13568ba..5a04c84 100644 --- a/debian/changelog +++ b/debian/changelog @@ -17,6 +17,12 @@ x2goclient (4.1.1.1-0x2go1) UNRELEASED; urgency=medium since we also have to use it in SshMasterConnection, that may not include onmainwindow.h to avoid a circular dependency, it has to be part of SshMasterConnection for now. + - src/sshmasterconnection.cpp: query for password if it wasn't already + provided. This usually happens if auto-login is enabled, which bypasses + the password prompt. If auto-login fails, authentication normally + continues via challenge auth or plain passwords, but since users had no + chance to input a password, such authentication will always fail. Give + users a way to enter passwords, in case the auto-login failed. [ Oleksandr Shneyder ] * Change echo mode for user input in InteractionDialog. diff --git a/src/sshmasterconnection.cpp b/src/sshmasterconnection.cpp index 7831265..fb0dee8 100644 --- a/src/sshmasterconnection.cpp +++ b/src/sshmasterconnection.cpp @@ -1250,36 +1250,51 @@ bool SshMasterConnection::userAuthWithPass() int method = ssh_userauth_list(my_ssh_session, NULL); - if (method& SSH_AUTH_METHOD_INTERACTIVE) - { -#ifdef DEBUG - x2goDebug<<"Challenge authentication requested."<<endl; -#endif - challengeAuthPasswordAccepted=false; - ret = userChallengeAuth(); + if (method & SSH_AUTH_METHOD_INTERACTIVE) { + x2goDebug << "Challenge authentication requested." << endl; + + challengeAuthPasswordAccepted = false; + ret = userChallengeAuth (); + + if (!ret) { + x2goDebug << "Challenge authentication failed." << endl; + } } if (!ret) { - x2goDebug << "Challenge authentication failed. Trying password mechanism if available." << endl; + x2goDebug << "Trying password mechanism if available." << endl; } - if ((!ret) && (method & SSH_AUTH_METHOD_PASSWORD)) - { - if (!ret) { - x2goDebug << "Password mechanism available. Continuing." << endl; - } + if ((!ret) && (method & SSH_AUTH_METHOD_PASSWORD)) { + x2goDebug << "Password mechanism available. Continuing." << endl; -#ifdef DEBUG - x2goDebug<<"Password authentication requested."<<endl; -#endif - int rc = ssh_userauth_password ( my_ssh_session, NULL, pass.toLatin1() ); + QString auth_password = pass; + + if (auth_password.isEmpty ()) { + keyPhraseReady = false; + emit needPassPhrase (this, PASSPHRASE_PASSWORD); + + for (bool ready = false; !ready;) { + this->usleep (200); + + keyPhraseMutex.lock (); + ready = keyPhraseReady; + keyPhraseMutex.unlock (); + } + + if (keyPhrase.isNull ()) { + return (ret); + } + else { + auth_password = keyPhrase; + } + } + int rc = ssh_userauth_password (my_ssh_session, NULL, auth_password.toLatin1 ()); if ( rc != SSH_AUTH_SUCCESS ) { QString err=ssh_get_error ( my_ssh_session ); authErrors<<err; -#ifdef DEBUG - x2goDebug<<"userAuthWithPass failed:" <<err<<endl; -#endif + x2goDebug << "Password authentication failed: " << err << endl; } else { ret = true; -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git _______________________________________________ x2go-commits mailing list x2go-commits@lists.x2go.org https://lists.x2go.org/listinfo/x2go-commits