diff options
Diffstat (limited to 'opensuse/core/tdelibs/kwalletd-try-open.diff')
-rw-r--r-- | opensuse/core/tdelibs/kwalletd-try-open.diff | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/opensuse/core/tdelibs/kwalletd-try-open.diff b/opensuse/core/tdelibs/kwalletd-try-open.diff new file mode 100644 index 000000000..547f8192d --- /dev/null +++ b/opensuse/core/tdelibs/kwalletd-try-open.diff @@ -0,0 +1,81 @@ +Index: kio/misc/kwalletd/kwalletd.cpp +=================================================================== +--- kio/misc/kwalletd/kwalletd.cpp.orig ++++ kio/misc/kwalletd/kwalletd.cpp +@@ -355,6 +355,44 @@ int KWalletD::doTransactionOpen(const QC + return rc; + } + ++int KWalletD::tryOpen(const QString& wallet, const QCString& password) ++{ ++ if (isOpen(wallet)) ++ return 0; ++ ++ if (_tryOpenBlocked.isActive()) { ++ kdDebug() << "tryOpen is active.." << endl; ++ return -1; ++ } ++ ++ if (!KWallet::Backend::exists(wallet)) ++ return -2; ++ ++ KWallet::Backend *b = new KWallet::Backend(wallet, false /*isPath*/); ++ int rc = b->open(QByteArray().duplicate(password, strlen(password))); ++ if (rc == 0) { ++ _wallets.insert(rc = generateHandle(), b); ++ _passwords[wallet] = password; ++ b->ref(); ++ _tryOpenBlocked.stop(); ++ QByteArray data; ++ QDataStream ds(data, IO_WriteOnly); ++ ds << wallet; ++ emitDCOPSignal("walletOpened(QString)", data); ++ } ++ else { ++ delete b; ++ // make sure that we're not bombed with a dictionary attack ++ _tryOpenBlocked.start (30 * 1000, true /*single shot*/); ++ if (++_failed > 5) { ++ _failed = 0; ++ QTimer::singleShot(0, this, SLOT(notifyFailures())); ++ } ++ ++ rc = -1; ++ } ++ return rc; ++} + + int KWalletD::internalOpen(const QCString& appid, const QString& wallet, bool isPath, WId w, bool modal) { + int rc = -1; +Index: kio/misc/kwalletd/kwalletd.h +=================================================================== +--- kio/misc/kwalletd/kwalletd.h.orig ++++ kio/misc/kwalletd/kwalletd.h +@@ -26,6 +26,7 @@ + #include <qintdict.h> + #include <qstring.h> + #include <qwidget.h> ++#include <qtimer.h> + #include <qguardedptr.h> + #include "kwalletbackend.h" + +@@ -51,8 +52,10 @@ class KWalletD : public KDEDModule { + + // Open and unlock the wallet + virtual int open(const QString& wallet, uint wId); +- ++ // Open and unlock the wallet ++ virtual int tryOpen(const QString& wallet, const QCString& passwd); + // Open and unlock the wallet with this path ++ + virtual int openPath(const QString& path, uint wId); + + // Asynchronous open - must give the object to return the handle +@@ -186,6 +189,7 @@ class KWalletD : public KDEDModule { + int _idleTime; + QMap<QString,QStringList> _implicitAllowMap, _implicitDenyMap; + KTimeout *_timeouts; ++ QTimer _tryOpenBlocked; + + QPtrList<KWalletTransaction> _transactions; + QGuardedPtr< QWidget > activeDialog; |