[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