This is an automated email from the git hooks/post-receive script. x2go pushed a change to branch master in repository x2goclient. from 93ab054 SSH Interaction for SSH Broker and SSH Server. new 42f3369 SSH Iteraction for method keyboard-interactive. The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Summary of changes: debian/changelog | 1 + src/InteractionDialog.cpp | 3 +- src/InteractionDialog.h | 3 +- src/httpbrokerclient.cpp | 2 + src/onmainwindow.h | 2 +- src/sshmasterconnection.cpp | 97 +++++++++++++++++++++++++++++++++++++++++++-- src/sshmasterconnection.h | 1 + 7 files changed, 100 insertions(+), 9 deletions(-) -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch master in repository x2goclient. commit 42f3369f19639cd43978c98911a46cafb70122b9 Author: Oleksandr Shneyder <o.shneyder@phoca-gmbh.de> Date: Fri May 12 15:42:33 2017 +0200 SSH Iteraction for method keyboard-interactive. --- debian/changelog | 1 + src/InteractionDialog.cpp | 3 +- src/InteractionDialog.h | 3 +- src/httpbrokerclient.cpp | 2 + src/onmainwindow.h | 2 +- src/sshmasterconnection.cpp | 97 +++++++++++++++++++++++++++++++++++++++++++-- src/sshmasterconnection.h | 1 + 7 files changed, 100 insertions(+), 9 deletions(-) diff --git a/debian/changelog b/debian/changelog index abc52ab..832c740 100644 --- a/debian/changelog +++ b/debian/changelog @@ -160,6 +160,7 @@ x2goclient (4.1.0.1-0x2go1) UNRELEASED; urgency=medium expired password). Fixes: #592. - Fixing setting widget style issue in InteractionDialog on - SSH Interaction for SSH Broker and SSH Server. + - SSH Iteraction for method keyboard-interactive. Windows client. [ Robert Parts ] * New upstream version (4.1.0.1): diff --git a/src/InteractionDialog.cpp b/src/InteractionDialog.cpp index f6a95aa..25d0936 100644 --- a/src/InteractionDialog.cpp +++ b/src/InteractionDialog.cpp @@ -24,6 +24,7 @@ #include <QLabel> #include <QLineEdit> #include <QScrollBar> +#include <QTimer> #ifndef Q_OS_LINUX #if QT_VERSION < 0x050000 @@ -114,9 +115,7 @@ void InteractionDialog::appendText(QString txt) interrupted=false; display=false; cancelButton->setText(tr("Cancel")); -#ifdef Q_OS_WIN QTimer::singleShot(0, textEntry, SLOT(setFocus())); -#endif } void InteractionDialog::reset() diff --git a/src/InteractionDialog.h b/src/InteractionDialog.h index 76efcfd..8c9d531 100644 --- a/src/InteractionDialog.h +++ b/src/InteractionDialog.h @@ -31,7 +31,7 @@ class InteractionDialog: public SVGFrame Q_OBJECT public: - enum IMode{SESSION,BROKER}; + enum IMode {SESSION,BROKER}; InteractionDialog ( QWidget* parent=0); virtual ~InteractionDialog(); void reset(); @@ -63,4 +63,3 @@ signals: }; #endif - diff --git a/src/httpbrokerclient.cpp b/src/httpbrokerclient.cpp index c652d8e..7cc1403 100644 --- a/src/httpbrokerclient.cpp +++ b/src/httpbrokerclient.cpp @@ -131,6 +131,7 @@ void HttpBrokerClient::slotSshConnectionError(QString message, QString lastSessi void HttpBrokerClient::slotSshConnectionOk() { + mainWindow->getInteractionDialog()->hide(); getUserSessions(); } @@ -252,6 +253,7 @@ void HttpBrokerClient::slotSshUserAuthError(QString error) delete sshConnection; sshConnection=0l; } + mainWindow->getInteractionDialog()->hide(); if(error!="NO_ERROR") diff --git a/src/onmainwindow.h b/src/onmainwindow.h index 7d9c008..a294d1e 100644 --- a/src/onmainwindow.h +++ b/src/onmainwindow.h @@ -342,7 +342,7 @@ public: void suspendSession ( QString sessId ); bool termSession ( QString sessId, bool warn=true ); - const InteractionDialog* getInteractionDialog() + InteractionDialog* getInteractionDialog() { return interDlg; } diff --git a/src/sshmasterconnection.cpp b/src/sshmasterconnection.cpp index 2d03044..ea34c68 100644 --- a/src/sshmasterconnection.cpp +++ b/src/sshmasterconnection.cpp @@ -1021,6 +1021,95 @@ void SshMasterConnection::setVerficationCode(QString code) } + +bool SshMasterConnection::userAuthKeyboardInteractive(QString prompt) +{ + x2goDebug<<"Open Interaction dialog to complete authentication"; + emit startInteraction(this, prompt); + interactionInterrupt=false; + interactionInputText=QString::null; + int rez=SSH_AUTH_INFO; + bool firstLoop=true; + int prompts=1; + while (rez==SSH_AUTH_INFO) + { + + if(firstLoop) + { + firstLoop=false; + } + else + { + prompts=ssh_userauth_kbdint_getnprompts(my_ssh_session); + if(prompts>0) + emit updateInteraction(this, ssh_userauth_kbdint_getprompt(my_ssh_session,0,NULL)); + + QString name= ssh_userauth_kbdint_getname(my_ssh_session); + QString instruction = ssh_userauth_kbdint_getinstruction(my_ssh_session); +#ifdef DEBUG + x2goDebug<<"Have prompts: "<<prompts<<endl; + x2goDebug<<"Name: "<<name<<endl; + x2goDebug<<"Instruction: "<<instruction<<endl; +#endif + } + if(prompts>0) + { + while(true) + { + bool interrupt; + interactionInputMutex.lock(); + interrupt=interactionInterrupt; + QString textToSend=interactionInputText; + interactionInputText=QString::null; + interactionInputMutex.unlock(); + if(textToSend.length()>0) + { + x2goDebug<<"SEND Input to SERVER"; + textToSend.replace("\n",""); + ssh_userauth_kbdint_setanswer(my_ssh_session,0,textToSend.toLocal8Bit()); + break; + } + if(interrupt) + { + x2goDebug<<"Keyboard authentication failed"; +// QString err=ssh_get_error ( my_ssh_session ); + authErrors<<"NO_ERROR"; + emit finishInteraction(this); + + return false; + } + this->usleep(30); + } + } + + rez=ssh_userauth_kbdint(my_ssh_session, NULL, NULL); + + } + if(rez==SSH_AUTH_SUCCESS) + { + x2goDebug<<"Keyboard authentication successful"; + emit finishInteraction(this); + return true; + } + if(rez==SSH_AUTH_DENIED) + { + x2goDebug<<"Keyboard authentication failed"; + QString err=ssh_get_error ( my_ssh_session ); + authErrors<<err; + emit finishInteraction(this); + + return false; + } + + QString err=ssh_get_error ( my_ssh_session ); + authErrors<<err; + + return false; + +} + + + bool SshMasterConnection::userChallengeAuth() { int rez=ssh_userauth_kbdint(my_ssh_session, NULL, NULL); @@ -1103,10 +1192,10 @@ bool SshMasterConnection::userChallengeAuth() ssh_userauth_kbdint_setanswer(my_ssh_session,0,challengeAuthVerificationCode.toLatin1()); return userChallengeAuth(); } - QString err=ssh_get_error ( my_ssh_session ); - authErrors<<err; - - return false; + else + { + return userAuthKeyboardInteractive(prompt); + } } else { diff --git a/src/sshmasterconnection.h b/src/sshmasterconnection.h index 96c2165..18ef0a4 100644 --- a/src/sshmasterconnection.h +++ b/src/sshmasterconnection.h @@ -125,6 +125,7 @@ private: bool checkLogin(); bool userAuth(); bool userAuthKrb(); + bool userAuthKeyboardInteractive(QString prompt); void channelLoop(); void finalize(int arg1); void copy(); -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git