From 6dd2c941ae4e51051f59761e6ad7630ec410a736 Mon Sep 17 00:00:00 2001 From: uwolfer Date: Sun, 7 Sep 2008 13:36:12 +0000 Subject: [PATCH] Greatly improve experience for LDAP (e.g. MS Active Directory) administrators. Save passwords per LDAP login, not host. This way all hosts with the same login name use the same passwords (and changing the password affects all hosts with the same login name). Also add possibilty to set a default login name for RDP. FEATURE:167431 FEATURE:167429 git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/KDE/kdenetwork@858154 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- krdc/config/general.ui | 7 ------- krdc/config/krdc.kcfg | 9 ++++++--- krdc/rdp/rdphostpreferences.cpp | 2 ++ krdc/rdp/rdppreferences.ui | 43 ++++++++++++++++++++++++++++++++++++++--- krdc/rdp/rdpview.cpp | 18 +++++++++-------- krdc/remoteview.cpp | 34 +++++++++++++++++++++----------- krdc/remoteview.h | 4 ++-- 7 files changed, 83 insertions(+), 34 deletions(-) diff --git a/krdc/config/general.ui b/krdc/config/general.ui index 8ea5d4f1c..e03e521a7 100644 --- a/krdc/config/general.ui +++ b/krdc/config/general.ui @@ -32,13 +32,6 @@ - - - Send current username to server - - - - Show start page diff --git a/krdc/config/krdc.kcfg b/krdc/config/krdc.kcfg index 1625b96cd..615bd6936 100644 --- a/krdc/config/krdc.kcfg +++ b/krdc/config/krdc.kcfg @@ -15,9 +15,6 @@ true - - false - true @@ -58,6 +55,12 @@ + + + + + true + diff --git a/krdc/rdp/rdphostpreferences.cpp b/krdc/rdp/rdphostpreferences.cpp index dd04f7e3b..58c1521c5 100644 --- a/krdc/rdp/rdphostpreferences.cpp +++ b/krdc/rdp/rdphostpreferences.cpp @@ -118,6 +118,8 @@ void RdpHostPreferences::showDialog() QWidget *rdpPage = new QWidget(); rdpUi.setupUi(rdpPage); + rdpUi.loginGroupBox->setVisible(false); + KDialog *dialog = createDialog(rdpPage); rdpUi.kcfg_Height->setValue(height()); diff --git a/krdc/rdp/rdppreferences.ui b/krdc/rdp/rdppreferences.ui index a000d4944..7361e16b2 100644 --- a/krdc/rdp/rdppreferences.ui +++ b/krdc/rdp/rdppreferences.ui @@ -5,11 +5,11 @@ 0 0 - 446 - 315 + 484 + 406 - + @@ -476,6 +476,43 @@ + + + Login + + + + + + + + Default user name: + + + + + + + No default user name + + + true + + + + + + + + + Automatically recognize "LDAP"-Logins and share passwords + + + + + + + Qt::Vertical diff --git a/krdc/rdp/rdpview.cpp b/krdc/rdp/rdpview.cpp index 5b70a11f8..3ce8fa368 100644 --- a/krdc/rdp/rdpview.cpp +++ b/krdc/rdp/rdpview.cpp @@ -120,14 +120,16 @@ bool RdpView::start() userName = KInputDialog::getText(i18n("Enter Username"), i18n("Please enter the username you would like to use for login."), - QString(), &ok, this); + Settings::defaultRdpUserName(), &ok, this); if (ok) m_url.setUserName(userName); } if (!m_url.userName().isEmpty()) { - QString walletPassword = readWalletPassword(); + bool useLdapLogin = Settings::recognizeLdapLogins() && m_url.userName().contains('\\'); + kDebug(5012) << "Is LDAP login:" << useLdapLogin << m_url.userName(); + QString walletPassword = readWalletPassword(useLdapLogin); if (!walletPassword.isNull()) m_url.setPassword(walletPassword); @@ -138,7 +140,7 @@ bool RdpView::start() m_url.setPassword(dialog.password()); if (m_hostPreferences->walletSupport()) - saveWalletPassword(dialog.password()); + saveWalletPassword(dialog.password(), useLdapLogin); } } } @@ -153,7 +155,7 @@ bool RdpView::start() if (!m_url.userName().isEmpty()) arguments << "-u" << m_url.userName(); - else if (!Settings::sendCurrentUserName()) + else arguments << "-u" << ""; if (!m_url.password().isNull()) @@ -234,8 +236,8 @@ void RdpView::processError(QProcess::ProcessError error) setStatus(Disconnected); if (error == QProcess::FailedToStart) { - KMessageBox::error(0, i18n("Could not start rdesktop; make sure rdesktop is properly installed."), - i18n("rdesktop Failure")); + KMessageBox::error(0, i18n("Could not start \"rdesktop\"; make sure rdesktop is properly installed."), + i18n("RDP Failure")); return; } @@ -243,9 +245,9 @@ void RdpView::processError(QProcess::ProcessError error) KMessageBox::error(0, i18n("Connection attempt to host failed."), i18n("Connection Failure")); } else { - KMessageBox::error(0, i18n("The version of rdesktop you are using (%1) is too old:\n" + KMessageBox::error(0, i18n("The version of \"rdesktop\" you are using (%1) is too old:\n" "rdesktop 1.3.2 or greater is required.", m_clientVersion), - i18n("rdesktop Failure")); + i18n("RDP Failure")); } emit disconnectedError(); } diff --git a/krdc/remoteview.cpp b/krdc/remoteview.cpp index fb361db54..267f1d438 100644 --- a/krdc/remoteview.cpp +++ b/krdc/remoteview.cpp @@ -191,25 +191,31 @@ KUrl RemoteView::url() } #ifndef QTONLY -QString RemoteView::readWalletPassword() +QString RemoteView::readWalletPassword(bool fromUserNameOnly) { - QString krdc_folder = "KRDC"; + const QString KRDCFOLDER = "KRDC"; m_wallet = KWallet::Wallet::openWallet(KWallet::Wallet::NetworkWallet(), window()->winId()); if (m_wallet) { - bool walletOK = m_wallet->hasFolder(krdc_folder); + bool walletOK = m_wallet->hasFolder(KRDCFOLDER); if (!walletOK) { - walletOK = m_wallet->createFolder(krdc_folder); + walletOK = m_wallet->createFolder(KRDCFOLDER); kDebug(5010) << "Wallet folder created"; } if (walletOK) { kDebug(5010) << "Wallet OK"; - m_wallet->setFolder(krdc_folder); + m_wallet->setFolder(KRDCFOLDER); QString password; - - if (m_wallet->hasEntry(m_url.prettyUrl(KUrl::RemoveTrailingSlash)) && - !m_wallet->readPassword(m_url.prettyUrl(KUrl::RemoveTrailingSlash), password)) { + + QString key; + if (fromUserNameOnly) + key = m_url.userName(); + else + key = m_url.prettyUrl(KUrl::RemoveTrailingSlash); + + if (m_wallet->hasEntry(key) && + !m_wallet->readPassword(key, password)) { kDebug(5010) << "Password read OK"; return password; @@ -219,11 +225,17 @@ QString RemoteView::readWalletPassword() return QString(); } -void RemoteView::saveWalletPassword(const QString &password) +void RemoteView::saveWalletPassword(const QString &password, bool fromUserNameOnly) { - if (m_wallet && m_wallet->isOpen() && !m_wallet->hasEntry(m_url.prettyUrl(KUrl::RemoveTrailingSlash))) { + QString key; + if (fromUserNameOnly) + key = m_url.userName(); + else + key = m_url.prettyUrl(KUrl::RemoveTrailingSlash); + + if (m_wallet && m_wallet->isOpen() && !m_wallet->hasEntry(key) { kDebug(5010) << "Write wallet password"; - m_wallet->writePassword(m_url.prettyUrl(KUrl::RemoveTrailingSlash), password); + m_wallet->writePassword(key, password); } } #endif diff --git a/krdc/remoteview.h b/krdc/remoteview.h index af55b5b58..9a5c14b77 100644 --- a/krdc/remoteview.h +++ b/krdc/remoteview.h @@ -388,8 +388,8 @@ protected: KUrl m_url; #ifndef QTONLY - QString readWalletPassword(); - void saveWalletPassword(const QString &password); + QString readWalletPassword(bool fromUserNameOnly = false); + void saveWalletPassword(const QString &password, bool fromUserNameOnly = false); KWallet::Wallet *m_wallet; #endif -- 2.11.4.GIT