| Summary: | krdc does not handle password failures | ||
|---|---|---|---|
| Product: | [Applications] krdc | Reporter: | Dirk Mueller <mueller> |
| Component: | general | Assignee: | Urs Wolfer <uwolfer> |
| Status: | RESOLVED FIXED | ||
| Severity: | critical | ||
| Priority: | NOR | ||
| Version First Reported In: | unspecified | ||
| Target Milestone: | --- | ||
| Platform: | Compiled Sources | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
|
Description
Dirk Mueller
2007-08-31 14:38:55 UTC
SVN commit 707273 by uwolfer:
* add a timeout for stopping the vnc thread
* show VNC error messages not only in the debug output, but also in messageboxes
* do not save the VNC passwort in KWallet if the authentication did not succeeded
* save the mainwindow state (toolbars, size, ...)
* correct the debug area number and change a deprecated debug call
BUG: 149420
M +2 -0 mainwindow.cpp
M +29 -8 vnc/vncclientthread.cpp
M +4 -0 vnc/vncclientthread.h
M +13 -5 vnc/vncview.cpp
M +1 -0 vnc/vncview.h
--- trunk/KDE/kdenetwork/krdc/mainwindow.cpp #707272:707273
@@ -91,6 +91,8 @@
if (Settings::showStartPage())
createStartPage();
+
+ setAutoSaveSettings(); // e.g toolbar position, mainwindow size, ...
}
MainWindow::~MainWindow()
--- trunk/KDE/kdenetwork/krdc/vnc/vncclientthread.cpp #707272:707273
@@ -24,9 +24,13 @@
#include "vncclientthread.h"
#include <KDebug>
+#include <KLocale>
#include <QMutexLocker>
+#include <QTimer>
+static QString outputMessageString;
+
static rfbBool newclient(rfbClient *cl)
{
int width = cl->width, height = cl->height, depth = cl->format.bitsPerPixel;
@@ -92,7 +96,7 @@
char *VncClientThread::passwdHandler(rfbClient *cl)
{
- kDebug(5011) << "password request" << kdBacktrace() ;
+ kDebug(5011) << "password request" << kBacktrace();
VncClientThread *t = (VncClientThread*)rfbClientGetClientData(cl, 0);
@@ -112,27 +116,44 @@
va_end(args);
+ message = message.trimmed();
+
kDebug(5011) << message;
- if (message.contains("Could not open"))
- kDebug(5011) << "Server not found!";
+ if ((message.contains("Couldn't convert ")) ||
+ (message.contains("Unable to connect to VNC server")))
+ outputMessageString = i18n("Server not found.");
- if (message.contains("VNC authentication succeeded"))
- kDebug(5011) << "Password OK";
+ if (message.contains("VNC connection failed: Authentication failed, too many tries"))
+ outputMessageString = i18n("VNC authentication faile because of too many tries.");
}
VncClientThread::VncClientThread()
{
QMutexLocker locker(&mutex);
m_stopped = false;
+
+ QTimer *outputMessagesCheck = new QTimer(this);
+ outputMessagesCheck->setInterval(500);
+ connect(outputMessagesCheck, SIGNAL(timeout()), this, SLOT(checkOutputMessage()));
+ outputMessagesCheck->start();
}
VncClientThread::~VncClientThread()
{
stop();
- wait();
+ wait(500);
}
+void VncClientThread::checkOutputMessage()
+{
+ if (!outputMessageString.isEmpty()) {
+ kDebug(5011) << outputMessageString;
+ outputMessage(outputMessageString);
+ outputMessageString.clear();
+ }
+}
+
void VncClientThread::setHost(const QString &host)
{
QMutexLocker locker(&mutex);
@@ -207,9 +228,9 @@
m_port += 5900;
cl->serverPort = m_port;
- kDebug() << "--------------------- trying init ---------------------";
+ kDebug(5011) << "--------------------- trying init ---------------------";
- if(rfbInitClient(cl, 0, 0))
+ if (rfbInitClient(cl, 0, 0))
break;
if (m_passwordError)
--- trunk/KDE/kdenetwork/krdc/vnc/vncclientthread.h #707272:707273
@@ -56,6 +56,7 @@
signals:
void imageUpdated(int x, int y, int w, int h);
void passwordRequest();
+ void outputMessage(const QString &message);
public slots:
void mouseEvent(int x, int y, int buttonMask);
@@ -78,6 +79,9 @@
volatile bool m_stopped;
volatile bool m_passwordError;
+
+private slots:
+ void checkOutputMessage();
};
#endif
--- trunk/KDE/kdenetwork/krdc/vnc/vncview.cpp #707272:707273
@@ -24,6 +24,7 @@
#include "vncview.h"
#include <KLocale>
+#include <KMessageBox>
#include <KPasswordDialog>
#include <QImage>
@@ -48,6 +49,7 @@
connect(&vncThread, SIGNAL(imageUpdated(int, int, int, int)), this, SLOT(updateImage(int, int, int, int)), Qt::BlockingQueuedConnection);
connect(&vncThread, SIGNAL(passwordRequest()), this, SLOT(requestPassword()), Qt::BlockingQueuedConnection);
+ connect(&vncThread, SIGNAL(outputMessage(QString)), this, SLOT(outputMessage(QString)));
}
VncView::~VncView()
@@ -160,14 +162,16 @@
dialog.setPrompt(i18n("Access to the system requires a password."));
if (dialog.exec() == KPasswordDialog::Accepted) {
vncThread.setPassword(dialog.password());
-
- if (m_hostPreferences->walletSupport()) {
- //TODO: save it only when the password has also been accepted.
- saveWalletPassword(dialog.password());
- }
}
}
+void VncView::outputMessage(const QString &message)
+{
+ kDebug(5011) << message;
+
+ KMessageBox::error(this, message, i18n("VNC failure"));
+}
+
void VncView::updateImage(int x, int y, int w, int h)
{
// kDebug(5011) << "got update";
@@ -190,6 +194,10 @@
emit changeSize(vncThread.image().width(), vncThread.image().height());
emit connected();
m_initDone = true;
+
+ if (m_hostPreferences->walletSupport()) {
+ saveWalletPassword(vncThread.password());
+ }
}
m_repaint = true;
--- trunk/KDE/kdenetwork/krdc/vnc/vncview.h #707272:707273
@@ -76,6 +76,7 @@
private slots:
void updateImage(int x, int y, int w, int h);
void requestPassword();
+ void outputMessage(const QString &message);
void mouseEvent(QMouseEvent *event);
};
|