[X2Go-Commits] [x2goclient] 01/02: src/{onmainwindow, sshmasterconnection}.{cpp, h}: add support for ANSI X9.9 OTP tokens. Fixes: #1027.
git-admin at x2go.org
git-admin at x2go.org
Wed May 4 05:04:11 CEST 2016
This is an automated email from the git hooks/post-receive script.
x2go pushed a commit to branch master
in repository x2goclient.
commit c788a1424ce7a270fd65e028da190d9f16586d05
Author: Tor Perkins <x2go34 at noid.net>
Date: Wed May 4 03:30:19 2016 +0200
src/{onmainwindow,sshmasterconnection}.{cpp,h}: add support for ANSI X9.9 OTP tokens. Fixes: #1027.
For this to work correctly, the challenge string needs to be displayed
to the user.
---
debian/changelog | 6 ++++++
src/onmainwindow.cpp | 29 +++++++++++++++++++++++++++++
src/onmainwindow.h | 1 +
src/sshmasterconnection.cpp | 26 ++++++++++++++++++--------
src/sshmasterconnection.h | 1 +
5 files changed, 55 insertions(+), 8 deletions(-)
diff --git a/debian/changelog b/debian/changelog
index 80d3c80..d418845 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -37,6 +37,12 @@ x2goclient (4.0.5.2-0x2go1) UNRELEASED; urgency=medium
* New upstream version (4.0.5.2):
- misc {src/,x2goclient.pro}: port to Qt5.
+ [ Tor Perkins ]
+ * New upstream release (4.0.5.2):
+ - src/{onmainwindow,sshmasterconnection}.{cpp,h}: add support for ANSI
+ X9.9 OTP tokens. Fixes: #1027. For this to work correctly, the challenge
+ string needs to be displayed to the user.
+
-- X2Go Release Manager <git-admin at x2go.org> Thu, 24 Mar 2016 23:04:42 +0100
x2goclient (4.0.5.1-0x2go1) unstable; urgency=low
diff --git a/src/onmainwindow.cpp b/src/onmainwindow.cpp
index c7fffd7..18ca368 100644
--- a/src/onmainwindow.cpp
+++ b/src/onmainwindow.cpp
@@ -2825,6 +2825,8 @@ SshMasterConnection* ONMainWindow::startSshConnection ( QString host, QString po
SLOT ( slotSshServerAuthError ( int,QString, SshMasterConnection* ) ) );
connect ( con, SIGNAL ( needPassPhrase(SshMasterConnection*, bool)),this,
SLOT ( slotSshServerAuthPassphrase(SshMasterConnection*, bool)) );
+ connect ( con, SIGNAL ( needChallengeResponse(SshMasterConnection*, QString)),this,
+ SLOT ( slotSshServerAuthChallengeResponse(SshMasterConnection*, QString)) );
connect ( con, SIGNAL ( userAuthError ( QString ) ),this,SLOT ( slotSshUserAuthError ( QString ) ) );
connect ( con, SIGNAL ( connectionError ( QString,QString ) ), this,
SLOT ( slotSshConnectionError ( QString,QString ) ) );
@@ -2948,6 +2950,33 @@ void ONMainWindow::slotSshServerAuthPassphrase(SshMasterConnection* connection,
}
+void ONMainWindow::slotSshServerAuthChallengeResponse(SshMasterConnection* connection, QString Challenge)
+{
+ bool ok;
+ QString message;
+
+ message=Challenge;
+
+ QString phrase=QInputDialog::getText(0,connection->getUser()+"@"+connection->getHost()+":"+QString::number(connection->getPort()),
+ message,QLineEdit::Password,QString::null, &ok);
+ if(!ok)
+ {
+ phrase=QString::null;
+ }
+ else
+ {
+ if(phrase==QString::null)
+ phrase="";
+ }
+ connection->setKeyPhrase(phrase);
+ if(isHidden())
+ {
+ show();
+ QTimer::singleShot(1, this, SLOT(hide()));
+ }
+}
+
+
void ONMainWindow::slotSshServerAuthError ( int error, QString sshMessage, SshMasterConnection* connection )
{
if ( startHidden )
diff --git a/src/onmainwindow.h b/src/onmainwindow.h
index 809fe5f..0962ac6 100644
--- a/src/onmainwindow.h
+++ b/src/onmainwindow.h
@@ -1036,6 +1036,7 @@ private slots:
void slotSshConnectionError ( QString message, QString lastSessionError );
void slotSshServerAuthError ( int error, QString sshMessage, SshMasterConnection* connection );
void slotSshServerAuthPassphrase ( SshMasterConnection* connection, bool verificationCode );
+ void slotSshServerAuthChallengeResponse( SshMasterConnection* connection, QString Challenge );
void slotSshUserAuthError ( QString error );
void slotSshConnectionOk();
void slotServSshConnectionOk(QString server);
diff --git a/src/sshmasterconnection.cpp b/src/sshmasterconnection.cpp
index 8ebac10..1d330a3 100644
--- a/src/sshmasterconnection.cpp
+++ b/src/sshmasterconnection.cpp
@@ -881,15 +881,21 @@ bool SshMasterConnection::userChallengeAuth()
}
bool has_challenge_auth_code_prompt = false;
+ bool need_to_display_auth_code_prompt = false;
const std::size_t challenge_auth_code_prompts_size = (sizeof (challenge_auth_code_prompts_)/sizeof (*challenge_auth_code_prompts_));
- for (std::size_t i = 0; i < challenge_auth_code_prompts_size; ++i) {
- x2goDebug << "Checking against known prompt #" << i << ": " << challenge_auth_code_prompts_[i] << endl;
-
- if (pr.startsWith (challenge_auth_code_prompts_[i])) {
- has_challenge_auth_code_prompt = true;
- break;
- }
+ if( pr.contains("challenge", Qt::CaseInsensitive) ) {
+ x2goDebug << "prompt contains 'challenge': " << pr << endl;
+ has_challenge_auth_code_prompt = true;
+ need_to_display_auth_code_prompt = true;
+ } else {
+ for (std::size_t i = 0; i < challenge_auth_code_prompts_size; ++i) {
+ x2goDebug << "Checking against known prompt #" << i << ": " << challenge_auth_code_prompts_[i] << endl;
+ if (pr.startsWith (challenge_auth_code_prompts_[i])) {
+ has_challenge_auth_code_prompt = true;
+ break;
+ }
+ }
}
if (has_challenge_auth_code_prompt) {
@@ -901,7 +907,11 @@ bool SshMasterConnection::userChallengeAuth()
if(challengeAuthVerificationCode == QString::null)
{
keyPhraseReady=false;
- emit needPassPhrase(this, true);
+ if (need_to_display_auth_code_prompt) {
+ emit needChallengeResponse(this, pr);
+ } else {
+ emit needPassPhrase(this, true);
+ }
for(;;)
{
bool ready=false;
diff --git a/src/sshmasterconnection.h b/src/sshmasterconnection.h
index 0136ac4..79da49a 100644
--- a/src/sshmasterconnection.h
+++ b/src/sshmasterconnection.h
@@ -218,6 +218,7 @@ signals:
void connectionOk( QString host);
void needPassPhrase(SshMasterConnection*, bool verificationCode);
+ void needChallengeResponse(SshMasterConnection*, QString Challenge);
};
--
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