[Pkg-owncloud-commits] [qtkeychain] 30/115: Port Windows impl to the job API.

Sandro Knauß hefee-guest at moszumanska.debian.org
Sat Mar 15 19:25:43 UTC 2014


This is an automated email from the git hooks/post-receive script.

hefee-guest pushed a commit to branch master
in repository qtkeychain.

commit 8b1a574f354728c1194164aec318fd786110f109
Author: Frank Osterfeld <osterfeld at kde.org>
Date:   Sat May 5 10:37:48 2012 +0200

    Port Windows impl to the job API.
---
 CMakeLists.txt   |   6 ++-
 keychain.cpp     |  68 -----------------------------
 keychain_p.h     | 130 -------------------------------------------------------
 keychain_win.cpp | 109 +++++++++++++++++-----------------------------
 4 files changed, 44 insertions(+), 269 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3b0d716..711655c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -36,12 +36,14 @@ if(UNIX AND NOT APPLE)
     list(APPEND qtkeychain_SOURCES keychain_dbus.cpp)
 endif()
 
+QT4_WRAP_CPP(qtkeychain_MOC_OUTFILES keychain.h keychain_p.h)
+
 if(NOT QTKEYCHAIN_STATIC)
-    add_library(qtkeychain SHARED ${qtkeychain_SOURCES})
+    add_library(qtkeychain SHARED ${qtkeychain_SOURCES} ${qtkeychain_MOC_OUTFILES})
     set_target_properties(qtkeychain PROPERTIES COMPILE_DEFINITIONS QKEYCHAIN_BUILD_QKEYCHAIN_LIB)
     target_link_libraries(qtkeychain ${qtkeychain_LIBRARIES})
 else()
-    add_library(qtkeychain STATIC ${qtkeychain_SOURCES})
+    add_library(qtkeychain STATIC ${qtkeychain_SOURCES} ${qtkeychain_MOC_OUTFILES})
     set_target_properties(qtkeychain PROPERTIES COMPILE_DEFINITIONS QKEYCHAIN_STATICLIB)
 endif()
 
diff --git a/keychain.cpp b/keychain.cpp
index 1c691e4..8ed4dab 100644
--- a/keychain.cpp
+++ b/keychain.cpp
@@ -131,71 +131,3 @@ void WritePasswordJob::setTextData( const QString& data ) {
 void WritePasswordJob::doStart() {
     d->doStart();
 }
-
-#if 0
-Keychain::Keychain( const QString& service, QSettings* settings )
-    : d( new Private( service, settings ) ) {
-    Q_ASSERT( !service.isEmpty() );
-}
-
-Keychain::~Keychain() {
-    delete d;
-}
-
-QString Keychain::service() const {
-    return d->service;
-}
-
-QKeychain::Error Keychain::error() const {
-    return d->error;
-}
-
-QString Keychain::errorString() const {
-    return d->errorString;
-}
-
-void Keychain::writePassword( const QString &key, const QString &password ) {
-    writeEntry( key, password.toUtf8() );
-}
-
-void Keychain::writeEntry( const QString& key, const QByteArray& ba ) {
-    QString err;
-    const Error ret = d->writeEntryImpl( key, ba, &err );
-    d->error = ret;
-    d->errorString = err;
-}
-
-QString Keychain::readPassword( const QString& key ) {
-    const QByteArray ba = readEntry( key );
-    return QString::fromUtf8( ba.constData(), ba.size() );
-}
-
-QByteArray Keychain::readEntry( const QString& key ) {
-    QString err;
-    QByteArray pw;
-    const Error ret = d->readEntryImpl( &pw, key, &err );
-    d->error = ret;
-    d->errorString = err;
-    if ( ret != NoError )
-        return QByteArray();
-    else
-        return pw;
-}
-
-bool Keychain::entryExists( const QString& key ) {
-    QString err;
-    bool exists = false;
-    const Error ret = d->entryExistsImpl( &exists, key, &err );
-    d->error = ret;
-    d->errorString = err;
-    return exists;
-}
-
-void Keychain::deleteEntry( const QString& key ) {
-    QString err;
-    const Error ret = d->deleteEntryImpl( key, &err );
-    d->error = ret;
-    d->errorString = err;
-}
-
-#endif
diff --git a/keychain_p.h b/keychain_p.h
index 821287c..bac2b99 100644
--- a/keychain_p.h
+++ b/keychain_p.h
@@ -60,136 +60,6 @@ public:
     QString textData;
 };
 
-#if 0
-/**
- * Provides access to platform-specific key stores for secure persistence of
- * passwords and other sensitive user data.
- *
- * On Windows, TODO
- * On Mac OS X, the OS X keychain is used.
- * On other Unixes, TODO
- *
- * TODO we don't guarantee anything
- */
-class Keychain {
-public:
-    /**
-     * Creates a Keychain object.
-     *
-     * @param service The service name of your service/application. Used as identifier,
-     *        to disambiguate keys and avoid clashes with other applications.
-     *        Must not be empty.
-     * @param settings An optional settings object that is used to store the encrypted data
-     *        if no keychain is available on the platform. Currently only used on Windows.
-     *        If 0, a default-constructed QSettings object will be used.
-     */
-    explicit Keychain( const QString& service, QSettings* settings=0 );
-
-    /**
-     * Destructor
-     */
-    ~Keychain();
-
-    /**
-     * The service name used as identifier.
-     */
-    QString service() const;
-
-    /**
-     * The error code of the last operation.
-     */
-    Error error() const;
-
-    /**
-     * Human-readable error description of the last operation.
-     */
-    QString errorString() const;
-
-    /**
-     * Stores a @p password in the keychain, for a given @p key.
-     * error() and errorString() hold the result of the write operation.
-     *
-     * @param key the key to store a password for
-     * @param password the password to store
-     * @param om Whether to overwrite existing passwords
-     */
-    void writePassword( const QString& key,
-                        const QString& password );
-
-    /**
-     * Stores @p data in the keychain, for a given @p key.
-     * error() and errorString() hold the result of the write operation.
-     *
-     * @param key the key to store a password for
-     * @param data the data to store
-     * @param om Whether to overwrite existing passwords
-     */
-    void writeEntry( const QString& key,
-                     const QByteArray& data );
-
-    /**
-     * Reads the password for a given @p key from the keychain.
-     * error() and errorString() hold the result of the read operation.
-     *
-     * @param key the key to read the password for
-     */
-    QString readPassword( const QString& key );
-
-    /**
-     * Reads data for a given @p key from the keychain.
-     * error() and errorString() hold the result of the read operation.
-     *
-     * @param key the key to read the password for
-     */
-    QByteArray readEntry( const QString& key );
-
-    /**
-     * Returns whether the keychain has an entry with key @p key
-     * error() and errorString() hold the result of the read operation.
-     *
-     * @param key the key to check for
-     */
-    bool entryExists( const QString& key );
-
-    /**
-     * Deletes the data for a @p key from the keychain.
-     * error() and errorString() hold the result of the delete operation.
-     *
-     * @param key The key to delete the data for
-     */
-    void deleteEntry( const QString& key );
-
-private:
-    class Private;
-    Private* const d;
-    Q_DISABLE_COPY(Keychain)
-};
-
-class Keychain::Private {
-    Q_DECLARE_TR_FUNCTIONS(Keychain::Private)
-public:
-    explicit Private( const QString& service_, QSettings* settings_ ) : service( service_ ), settings( settings_ ), error( NoError ) {}
-
-    QKeychain::Error writeEntryImpl( const QString& account,
-                                    const QByteArray& data,
-                                    QString* errorString );
-    QKeychain::Error deleteEntryImpl( const QString& account,
-                                     QString* errorString );
-    QKeychain::Error readEntryImpl( QByteArray* password,
-                                   const QString& account,
-                                   QString* errorString );
-    QKeychain::Error entryExistsImpl( bool* exists,
-                                     const QString& key,
-                                     QString* errorString );
-    const QString service;
-    QPointer<QSettings> settings;
-    QKeychain::Error error;
-    QString errorString;
-};
-
-
-#endif
-
 }
 
 #endif // KEYCHAIN_P_H
diff --git a/keychain_win.cpp b/keychain_win.cpp
index e118873..76b4116 100644
--- a/keychain_win.cpp
+++ b/keychain_win.cpp
@@ -17,21 +17,15 @@
 
 using namespace QKeychain;
 
-QtKeychain::Error Keychain::Private::readEntryImpl( QByteArray* pw,
-                                                  const QString& key,
-                                                  QString* err ) {
-    Q_ASSERT( pw );
-    Q_ASSERT( err );
-    err->clear();
-
+void ReadPasswordJob::Private::doStart() {
     //Use settings member if there, create local settings object if not
-    std::auto_ptr<QSettings> local( !settings ? new QSettings( service ) : 0 );
-    QSettings* actual = settings ? settings.data() : local.get();
+    std::auto_ptr<QSettings> local( !q->settings() ? new QSettings( q->service() ) : 0 );
+    QSettings* actual = q->settings() ? q->settings() : local.get();
 
     QByteArray encrypted = actual->value( key ).toByteArray();
     if ( encrypted.isNull() ) {
-        *err = tr("Entry not found");
-        return EntryNotFound;
+        q->emitFinishedWithError( EntryNotFound, tr("Entry not found") );
+        return;
     }
 
     DATA_BLOB blob_in, blob_out;
@@ -40,28 +34,43 @@ QtKeychain::Error Keychain::Private::readEntryImpl( QByteArray* pw,
     blob_in.cbData = encrypted.size();
 
     const BOOL ret = CryptUnprotectData( &blob_in,
-                                         NULL,
+                                        NULL,
                                          NULL,
                                          NULL,
                                          NULL,
                                          0,
                                          &blob_out );
     if ( !ret ) {
-        *err = tr("Could not decrypt data");
-        return OtherError;
+        q->emitFinishedWithError( OtherError, tr("Could not decrypt data") );
+        return;
     }
-    *pw = QByteArray( reinterpret_cast<char*>( blob_out.pbData ), blob_out.cbData );
+
+    data = QByteArray( reinterpret_cast<char*>( blob_out.pbData ), blob_out.cbData );
     SecureZeroMemory( blob_out.pbData, blob_out.cbData );
     LocalFree( blob_out.pbData );
-    return NoError;
+
+    q->emitFinished();
 }
 
-QtKeychain::Error Keychain::Private::writeEntryImpl( const QString& key,
-                                                   const QByteArray& data_,
-                                                   QString* err ) {
-    Q_ASSERT( err );
-    err->clear();
-    QByteArray data = data_;
+void WritePasswordJob::Private::doStart() {
+    if ( mode == Delete ) {
+        //Use settings member if there, create local settings object if not
+        std::auto_ptr<QSettings> local( !q->settings() ? new QSettings( q->service() ) : 0 );
+        QSettings* actual = q->settings() ? q->settings() : local.get();
+        actual->remove( key );
+        actual->sync();
+        if ( actual->status() != QSettings::NoError ) {
+            const QString err = actual->status() == QSettings::AccessError
+                    ? tr("Could not delete encrypted data from settings: access error")
+                    : tr("Could not delete encrypted data from settings: format error");
+            q->emitFinishedWithError( OtherError, err );
+        } else {
+            q->emitFinished();
+        }
+        return;
+    }
+
+    QByteArray data = mode == Binary ? binaryData : textData.toUtf8();
     DATA_BLOB blob_in, blob_out;
     blob_in.pbData = reinterpret_cast<BYTE*>( data.data() );
     blob_in.cbData = data.size();
@@ -73,64 +82,26 @@ QtKeychain::Error Keychain::Private::writeEntryImpl( const QString& key,
                                        0,
                                        &blob_out );
     if ( !res ) {
-        *err = tr("Encryption failed"); //TODO more details available?
-        return OtherError;
+        q->emitFinishedWithError( OtherError, tr("Encryption failed") ); //TODO more details available?
+        return;
     }
 
     const QByteArray encrypted( reinterpret_cast<char*>( blob_out.pbData ), blob_out.cbData );
     LocalFree( blob_out.pbData );
 
     //Use settings member if there, create local settings object if not
-    std::auto_ptr<QSettings> local( !settings ? new QSettings( service ) : 0 );
-    QSettings* actual = settings ? settings.data() : local.get();
+    std::auto_ptr<QSettings> local( !q->settings() ? new QSettings( q->service() ) : 0 );
+    QSettings* actual = q->settings() ? q->settings() : local.get();
     actual->setValue( key, encrypted );
     actual->sync();
     if ( actual->status() != QSettings::NoError ) {
-        *err = actual->status() == QSettings::AccessError
+
+        const QString errorString = actual->status() == QSettings::AccessError
                 ? tr("Could not store encrypted data in settings: access error")
                 : tr("Could not store encrypted data in settings: format error");
-        return OtherError;
-    }
-
-    return NoError;
-}
-
-QtKeychain::Error Keychain::Private::deleteEntryImpl( const QString& key,
-                                                    QString* err ) {
-    Q_ASSERT( err );
-    err->clear();
-    std::auto_ptr<QSettings> local( !settings ? new QSettings( service ) : 0 );
-    QSettings* actual = settings ? settings.data() : local.get();
-    actual->remove( key );
-    actual->sync();
-    if ( actual->status() != QSettings::NoError ) {
-        *err = actual->status() == QSettings::AccessError
-                ? tr("Could not delete encrypted data from settings: access error")
-                : tr("Could not delete encrypted data from settings: format error");
-        return OtherError;
-    }
-
-    return NoError;
-}
-
-
-QtKeychain::Error Keychain::Private::entryExistsImpl( bool* exists,
-                                                    const QString& key,
-                                                    QString* err ) {
-    Q_ASSERT( exists );
-    Q_ASSERT( err );
-    err->clear();
-    *exists = false;
-    std::auto_ptr<QSettings> local( !settings ? new QSettings( service ) : 0 );
-    QSettings* actual = settings ? settings.data() : local.get();
-    const bool ex = actual->contains( key );
-    if ( actual->status() != QSettings::NoError ) {
-        *err = actual->status() == QSettings::AccessError
-                ? tr("Could not read settings: access error")
-                : tr("Could not read settings: format error");
-        return OtherError;
+        q->emitFinishedWithError( OtherError, errorString );
+        return;
     }
 
-    *exists = ex;
-    return NoError;
+    q->emitFinished();
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/qtkeychain.git



More information about the Pkg-owncloud-commits mailing list