[SCM] kdeconnect packaging branch, master, updated. debian/0.9g-1-1183-g9d69498

Maximiliano Curia maxy at moszumanska.debian.org
Fri Oct 14 14:27:16 UTC 2016


Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/kdeconnect.git;a=commitdiff;h=b1de40d

The following commit has been merged in the master branch:
commit b1de40d29ea98fdd279a48179d69d6d0baa7d877
Author: Samoilenko Yuri <kinnalru at gmail.com>
Date:   Thu Jan 16 20:34:08 2014 +0400

    PrivateKey management refactored
    
     - privateKey now stored in ~/.kde4/apps/kdeconnect/key.pem
     - publicKey now stored in ~/.kde4/apps/kdeconnect/key.pub
     - Daemon checks right permission(very strict) when starting
    
    Testing needed :)
---
 kded/daemon.cpp | 40 +++++++++++++++++++++++++++++++---------
 kded/device.cpp | 14 ++++++++------
 kded/device.h   |  1 +
 3 files changed, 40 insertions(+), 15 deletions(-)

diff --git a/kded/daemon.cpp b/kded/daemon.cpp
index b390ae8..2633c5d 100644
--- a/kded/daemon.cpp
+++ b/kded/daemon.cpp
@@ -21,12 +21,15 @@
 #include "daemon.h"
 
 #include <QUuid>
+#include <QFile>
+#include <QFileInfo>
 #include <QDBusConnection>
 #include <QNetworkSession>
 #include <QNetworkConfigurationManager>
 
 #include <KConfig>
 #include <KConfigGroup>
+#include <KStandardDirs>
 
 #include "kdebugnamespace.h"
 #include "networkpackage.h"
@@ -58,16 +61,35 @@ Daemon::Daemon(QObject *parent, const QList<QVariant>&)
         return;
     }
 
-    if (!config->group("myself").hasKey("privateKey") || !config->group("myself").hasKey("publicKey")) {
-
-        //http://delta.affinix.com/docs/qca/rsatest_8cpp-example.html
-        QCA::PrivateKey privateKey = QCA::KeyGenerator().createRSA(2048);
-        config->group("myself").writeEntry("privateKey", privateKey.toPEM());
-
-        QCA::PublicKey publicKey = privateKey.toPublicKey();
-        config->group("myself").writeEntry("publicKey", publicKey.toPEM());
-        //TODO: Store key in a PEM file instead (use something like KStandardDirs::locate("appdata", "private.pem"))
+    if (!config->group("myself").hasKey("privateKey"))
+    {
+        const QString privateKeyPath = KStandardDirs::locateLocal("appdata", "key.pem", true, KComponentData("kdeconnect", "kdeconnect"));
+        
+        QFile privKey(privateKeyPath);
+        
+        if (!privKey.open(QIODevice::ReadWrite | QIODevice::Truncate))
+        {
+            qWarning() << "Error: KDE Connect could not create private keys file: " << privateKeyPath;
+            return;
+        }
+        
+        if (!privKey.setPermissions(QFile::ReadOwner | QFile::WriteOwner))
+        {
+            qWarning() << "Error: KDE Connect could not set permissions for private file: " << privateKeyPath;
+            return;
+        }
 
+        //http://delta.affinix.com/docs/qca/rsatest_8cpp-example.html        
+        privKey.write(QCA::KeyGenerator().createRSA(2048).toPEM().toAscii());
+        privKey.close();
+        
+        config->group("myself").writeEntry("privateKey", privateKeyPath);
+    }
+    
+    if (QFileInfo(config->group("myself").readEntry("privateKey")).permissions() != (QFile::ReadOwner | QFile::WriteOwner))
+    {
+        qWarning() << "Error: KDE Connect detects wrong permissions for private file " << config->group("myself").readEntry("privateKey");
+        return;
     }
 
     //Debugging
diff --git a/kded/device.cpp b/kded/device.cpp
index 5366a17..0b27b9c 100644
--- a/kded/device.cpp
+++ b/kded/device.cpp
@@ -19,6 +19,7 @@
 #undef interface
 #endif
 #include <QDBusConnection>
+#include <QFile>
 
 Device::Device(const QString& id)
     : m_deviceId(id)
@@ -33,10 +34,15 @@ Device::Device(const QString& id)
 
     const QString& key = data.readEntry<QString>("publicKey", QString());
     m_publicKey = QCA::RSAPublicKey::fromPEM(key);
+    
+    QFile privKey(config->group("myself").readEntry("privateKey"));
+    if (privKey.open(QIODevice::ReadOnly))
+    {
+        m_privateKey = QCA::PrivateKey::fromPEM(privKey.readAll());
+    }
 
     //Register in bus
     QDBusConnection::sessionBus().registerObject(dbusPath(), this, QDBusConnection::ExportScriptableContents | QDBusConnection::ExportAdaptors);
-
 }
 
 Device::Device(const NetworkPackage& identityPackage, DeviceLink* dl)
@@ -205,11 +211,7 @@ void Device::addLink(const NetworkPackage& identityPackage, DeviceLink* link)
     m_deviceName = identityPackage.get<QString>("deviceName");
     m_deviceType = str2type(identityPackage.get<QString>("deviceType"));
 
-    //TODO: Do not read the key every time from config, store somewhere
-    KSharedConfigPtr config = KSharedConfig::openConfig("kdeconnectrc");
-    const QString& key = config->group("myself").readEntry<QString>("privateKey", QString());
-    QCA::PrivateKey privateKey = QCA::PrivateKey::fromPEM(key);
-    link->setPrivateKey(privateKey);
+    link->setPrivateKey(m_privateKey);
 
     //Theoretically we will never add two links from the same provider (the provider should destroy
     //the old one before this is called), so we do not have to worry about destroying old links.
diff --git a/kded/device.h b/kded/device.h
index 955f69b..526b25b 100644
--- a/kded/device.h
+++ b/kded/device.h
@@ -122,6 +122,7 @@ private:
     const QString m_deviceId;
     QString m_deviceName;
     DeviceType m_deviceType;
+    QCA::PrivateKey m_privateKey;
     QCA::PublicKey m_publicKey;
     PairStatus m_pairStatus;
     int m_protocolVersion;

-- 
kdeconnect packaging



More information about the pkg-kde-commits mailing list