[X2Go-Commits] [x2goclient] 02/06: src/{httpbrokerclient, onmainwindow, sshmasterconnection}.{cpp, h}: introduce new passphrase_type enum and replace the old verificationCode boolean value with that.
git-admin at x2go.org
git-admin at x2go.org
Fri Nov 10 23:09:18 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 d8c10770678414652fe024fdc8a953b0649033d3
Author: Mihai Moldovan <ionic at ionic.de>
Date: Fri Nov 10 21:23:45 2017 +0100
src/{httpbrokerclient,onmainwindow,sshmasterconnection}.{cpp,h}: introduce new passphrase_type enum and replace the old verificationCode boolean value with that.
Allows using more messages, including a new one for plain password
prompts.
Adapt usage accordingly.
The implementation is ugly, but there's no good way around that (short
of using C++11 features). The enum would really logically belong to
ONMainWindow, but 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.
---
debian/changelog | 9 +++++++
src/httpbrokerclient.cpp | 54 ++++++++++++++++++++-------------------
src/httpbrokerclient.h | 2 +-
src/onmainwindow.cpp | 61 +++++++++++++++++++++++++--------------------
src/onmainwindow.h | 2 +-
src/sshmasterconnection.cpp | 10 ++++----
src/sshmasterconnection.h | 10 +++++++-
7 files changed, 88 insertions(+), 60 deletions(-)
diff --git a/debian/changelog b/debian/changelog
index 91f6478..13568ba 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -8,6 +8,15 @@ x2goclient (4.1.1.1-0x2go1) UNRELEASED; urgency=medium
in MacPorts.
- src/sshmasterconnection.cpp: don't ask for private key passphrase if
auto-login merely failed due to the server denying the public key.
+ - src/{httpbrokerclient,onmainwindow,sshmasterconnection}.{cpp,h}:
+ introduce new passphrase_type enum and replace the old verificationCode
+ boolean value with that. Allows using more messages, including a new one
+ for plain password prompts. Adapt usage accordingly. The implementation
+ is ugly, but there's no good way around that (short of using C++11
+ features). The enum would really logically belong to ONMainWindow, but
+ 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.
[ Oleksandr Shneyder ]
* Change echo mode for user input in InteractionDialog.
diff --git a/src/httpbrokerclient.cpp b/src/httpbrokerclient.cpp
index 7cc1403..1540e98 100644
--- a/src/httpbrokerclient.cpp
+++ b/src/httpbrokerclient.cpp
@@ -93,8 +93,8 @@ void HttpBrokerClient::createSshConnection()
connect ( sshConnection, SIGNAL ( connectionOk(QString)), this, SLOT ( slotSshConnectionOk() ) );
connect ( sshConnection, SIGNAL ( serverAuthError ( int,QString, SshMasterConnection* ) ),this,
SLOT ( slotSshServerAuthError ( int,QString, SshMasterConnection* ) ) );
- connect ( sshConnection, SIGNAL ( needPassPhrase(SshMasterConnection*, bool)),this,
- SLOT ( slotSshServerAuthPassphrase(SshMasterConnection*, bool)) );
+ connect ( sshConnection, SIGNAL ( needPassPhrase(SshMasterConnection*, SshMasterConnection::passphrase_types)),this,
+ SLOT ( slotSshServerAuthPassphrase(SshMasterConnection*, SshMasterConnection::passphrase_types)) );
connect ( sshConnection, SIGNAL ( userAuthError ( QString ) ),this,SLOT ( slotSshUserAuthError ( QString ) ) );
connect ( sshConnection, SIGNAL ( connectionError(QString,QString)), this,
SLOT ( slotSshConnectionError ( QString,QString ) ) );
@@ -209,34 +209,38 @@ void HttpBrokerClient::slotSshServerAuthError(int error, QString sshMessage, Ssh
}
-void HttpBrokerClient::slotSshServerAuthPassphrase(SshMasterConnection* connection, bool verificationCode)
+void HttpBrokerClient::slotSshServerAuthPassphrase(SshMasterConnection* connection, SshMasterConnection::passphrase_types passphrase_type)
{
bool ok;
QString message;
- if(verificationCode)
- {
- message=tr("Verification code:");
- }
- else
- {
- message=tr("Enter passphrase to decrypt a key");
- }
-
-
- 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="";
+ switch (passphrase_type) {
+ case SshMasterConnection::PASSPHRASE_PRIVKEY:
+ message = tr ("Enter passphrase to decrypt a key");
+ ok = true;
+ break;
+ case SshMasterConnection::PASSPHRASE_CHALLENGE:
+ message = tr ("Verification code:");
+ ok = true;
+ break;
+ case SshMasterConnection::PASSPHRASE_PASSWORD:
+ message = tr ("Enter user account password:");
+ ok = true;
+ break;
+ default:
+ x2goDebug << "Unknown passphrase type requested! Was: " << passphrase_type << endl;
+ ok = false;
+ break;
+ }
+
+ if (ok) {
+ QString phrase = QInputDialog::getText (0, connection->getUser () + "@" + connection->getHost () + ":" + QString::number (connection->getPort ()),
+ message, QLineEdit::Password, QString (""), &ok);
+ if (!ok) {
+ phrase = QString ("");
+ }
+ connection->setKeyPhrase (phrase);
}
- connection->setKeyPhrase(phrase);
-
}
void HttpBrokerClient::closeSSHInteractionDialog()
diff --git a/src/httpbrokerclient.h b/src/httpbrokerclient.h
index f654954..1b62b26 100644
--- a/src/httpbrokerclient.h
+++ b/src/httpbrokerclient.h
@@ -72,7 +72,7 @@ private slots:
QString getHexVal ( const QByteArray& ba );
void slotSshConnectionError ( QString message, QString lastSessionError );
void slotSshServerAuthError ( int error, QString sshMessage, SshMasterConnection* connection );
- void slotSshServerAuthPassphrase ( SshMasterConnection* connection, bool verificationCode=false );
+ void slotSshServerAuthPassphrase ( SshMasterConnection* connection, SshMasterConnection::passphrase_types passphrase_type = SshMasterConnection::PASSPHRASE_PRIVKEY );
void slotSshUserAuthError ( QString error );
void slotSshConnectionOk();
void slotListSessions ( bool success, QString answer, int pid);
diff --git a/src/onmainwindow.cpp b/src/onmainwindow.cpp
index b4b8f28..cd6cab5 100644
--- a/src/onmainwindow.cpp
+++ b/src/onmainwindow.cpp
@@ -2989,8 +2989,8 @@ SshMasterConnection* ONMainWindow::startSshConnection ( QString host, QString po
connect ( con, SIGNAL ( serverAuthError ( int,QString, SshMasterConnection* ) ),this,
SLOT ( slotSshServerAuthError ( int,QString, SshMasterConnection* ) ) );
- connect ( con, SIGNAL ( needPassPhrase(SshMasterConnection*, bool)),this,
- SLOT ( slotSshServerAuthPassphrase(SshMasterConnection*, bool)) );
+ connect ( con, SIGNAL ( needPassPhrase(SshMasterConnection*, SshMasterConnection::passphrase_types)),this,
+ SLOT ( slotSshServerAuthPassphrase(SshMasterConnection*, SshMasterConnection::passphrase_types)) );
connect ( con, SIGNAL ( needChallengeResponse(SshMasterConnection*, QString)),this,
SLOT ( slotSshServerAuthChallengeResponse(SshMasterConnection*, QString)) );
connect ( con, SIGNAL ( userAuthError ( QString ) ),this,SLOT ( slotSshUserAuthError ( QString ) ) );
@@ -3160,34 +3160,41 @@ void ONMainWindow::slotSshInteractionUpdate(SshMasterConnection* connection, QSt
x2goDebug<<"SSH Interaction update:"<<output;
}
-void ONMainWindow::slotSshServerAuthPassphrase(SshMasterConnection* connection, bool verificationCode)
+void ONMainWindow::slotSshServerAuthPassphrase(SshMasterConnection* connection, SshMasterConnection::passphrase_types passphrase_type)
{
bool ok;
QString message;
- if(verificationCode)
- {
- message=tr("Verification code:");
- }
- else
- {
- message=tr("Enter passphrase to decrypt a key");
- }
- 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()));
+
+ switch (passphrase_type) {
+ case SshMasterConnection::PASSPHRASE_PRIVKEY:
+ message = tr ("Enter passphrase to decrypt a key");
+ ok = true;
+ break;
+ case SshMasterConnection::PASSPHRASE_CHALLENGE:
+ message = tr ("Verification code:");
+ ok = true;
+ break;
+ case SshMasterConnection::PASSPHRASE_PASSWORD:
+ message = tr ("Enter user account password:");
+ ok = true;
+ break;
+ default:
+ x2goDebug << "Unknown passphrase type requested! Was: " << passphrase_type << endl;
+ ok = false;
+ break;
+ }
+
+ if (ok) {
+ QString phrase = QInputDialog::getText (0, connection->getUser () + "@" + connection->getHost () + ":" + QString::number (connection->getPort ()),
+ message, QLineEdit::Password, QString (""), &ok);
+ if (!ok) {
+ phrase = QString ("");
+ }
+ connection->setKeyPhrase (phrase);
+ if(isHidden ()) {
+ show ();
+ QTimer::singleShot (1, this, SLOT (hide ()));
+ }
}
}
diff --git a/src/onmainwindow.h b/src/onmainwindow.h
index 5d3d728..0a115bb 100644
--- a/src/onmainwindow.h
+++ b/src/onmainwindow.h
@@ -1045,7 +1045,7 @@ private slots:
void showSessionStatus();
void slotSshConnectionError ( QString message, QString lastSessionError );
void slotSshServerAuthError ( int error, QString sshMessage, SshMasterConnection* connection );
- void slotSshServerAuthPassphrase ( SshMasterConnection* connection, bool verificationCode );
+ void slotSshServerAuthPassphrase ( SshMasterConnection* connection, SshMasterConnection::passphrase_types passphrase_type );
void slotSshInteractionStart ( SshMasterConnection* connection, QString prompt );
void slotSshInteractionUpdate ( SshMasterConnection* connection, QString output );
void slotSshInteractionFinish ( SshMasterConnection* connection);
diff --git a/src/sshmasterconnection.cpp b/src/sshmasterconnection.cpp
index 6ccf099..7831265 100644
--- a/src/sshmasterconnection.cpp
+++ b/src/sshmasterconnection.cpp
@@ -528,8 +528,8 @@ void SshMasterConnection::run()
connect ( sshProxy, SIGNAL ( serverAuthError ( int,QString,SshMasterConnection* ) ),this,
SLOT ( slotSshProxyServerAuthError ( int,QString, SshMasterConnection* ) ) );
- connect ( sshProxy, SIGNAL ( needPassPhrase(SshMasterConnection*, bool)),this,
- SIGNAL ( needPassPhrase(SshMasterConnection*, bool)) );
+ connect ( sshProxy, SIGNAL ( needPassPhrase(SshMasterConnection*, SshMasterConnection::passphrase_types)),this,
+ SIGNAL ( needPassPhrase(SshMasterConnection*, SshMasterConnection::passphrase_types)) );
connect ( sshProxy, SIGNAL ( serverAuthAborted()),this,
SLOT ( slotSshProxyServerAuthAborted()) );
connect ( sshProxy, SIGNAL ( userAuthError ( QString ) ),this,SLOT ( slotSshProxyUserAuthError ( QString ) ) );
@@ -1180,7 +1180,7 @@ bool SshMasterConnection::userChallengeAuth()
if (need_to_display_auth_code_prompt) {
emit needChallengeResponse(this, pr);
} else {
- emit needPassPhrase(this, true);
+ emit needPassPhrase(this, PASSPHRASE_CHALLENGE);
}
for(;;)
{
@@ -1303,7 +1303,7 @@ bool SshMasterConnection::userAuthAuto()
/* This section should only be executed if rc is SSH_AUTH_ERROR. */
keyPhraseReady=false;
- emit needPassPhrase(this, false);
+ emit needPassPhrase(this, PASSPHRASE_PRIVKEY);
for(;;)
{
bool ready=false;
@@ -1413,7 +1413,7 @@ bool SshMasterConnection::userAuthWithKey()
#endif
{
keyPhraseReady=false;
- emit needPassPhrase(this, false);
+ emit needPassPhrase(this, PASSPHRASE_PRIVKEY);
for(;;)
{
bool ready=false;
diff --git a/src/sshmasterconnection.h b/src/sshmasterconnection.h
index e6924e0..6f4a442 100644
--- a/src/sshmasterconnection.h
+++ b/src/sshmasterconnection.h
@@ -74,6 +74,14 @@ class SshMasterConnection: public QThread
PROPERTY(bool, kerberosDelegation)
public:
enum ProxyType {PROXYSSH, PROXYHTTP};
+
+ enum passphrase_types {
+ PASSPHRASE_PRIVKEY,
+ PASSPHRASE_CHALLENGE,
+ PASSPHRASE_PASSWORD,
+ PASSPHRASE_UNKNOWN
+ };
+
void run();
SshMasterConnection(QObject* parent, QString host, int port, bool acceptUnknownServers, QString user,
QString pass, QString key, bool autologin, bool krblogin=false,
@@ -228,7 +236,7 @@ signals:
void connectionOk( QString host);
- void needPassPhrase(SshMasterConnection*, bool verificationCode);
+ void needPassPhrase(SshMasterConnection*, passphrase_types);
void needChallengeResponse(SshMasterConnection*, QString Challenge);
void startInteraction(SshMasterConnection*, QString prompt);
void finishInteraction(SshMasterConnection*);
--
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