summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLorn Potter <lorn.potter@jollamobile.com>2014-03-06 09:21:52 +1000
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-04-05 21:11:46 +0200
commit87338cd15b47cad56bf2b4c166d294c3306bdf2c (patch)
tree5bf518652ccde572c2dbd03ca21237503e907c2b /src
parent948359ed4f896f666dbebc1ad5ab21b521b6bdd1 (diff)
try harder for unique ID, use wlan mac addy
Change-Id: Iac5112c6a781620f71de33e0dbc07041e91c0312 Reviewed-by: Jakub Adam <jakub.adam@ktknet.cz> Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
Diffstat (limited to 'src')
-rw-r--r--src/systeminfo/linux/qdeviceinfo_linux.cpp62
-rw-r--r--src/systeminfo/linux/qdeviceinfo_linux_p.h1
2 files changed, 51 insertions, 12 deletions
diff --git a/src/systeminfo/linux/qdeviceinfo_linux.cpp b/src/systeminfo/linux/qdeviceinfo_linux.cpp
index 97985632..6c19bfcc 100644
--- a/src/systeminfo/linux/qdeviceinfo_linux.cpp
+++ b/src/systeminfo/linux/qdeviceinfo_linux.cpp
@@ -46,6 +46,7 @@
#endif // QT_NO_OFONO
#include "qscreensaver_linux_p.h"
+#include <QNetworkInfo>
#include <QtCore/qdir.h>
#include <QtCore/qmetaobject.h>
@@ -61,6 +62,7 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <QUuid>
+#include <QCryptographicHash>
#if !defined(QT_NO_DBUS)
#include <QtDBus/QDBusInterface>
@@ -367,46 +369,82 @@ QString QDeviceInfoPrivate::uniqueDeviceID()
QFile file(QStringLiteral("/sys/devices/virtual/dmi/id/product_uuid"));
if (file.open(QIODevice::ReadOnly)) {
QString id = QString::fromLocal8Bit(file.readAll().simplified().data());
- if (id.length() == 36)
+ if (id.length() == 36) {
+ if (isUuid(id)) {
+ uniqueDeviceIDBuffer = id;
+ }
+ }
+ }
+ }
+
+ if (uniqueDeviceIDBuffer.isEmpty()) { //try wifi mac address
+ QNetworkInfo netinfo;
+ QString macaddy;
+ macaddy = netinfo.macAddress(QNetworkInfo::WlanMode,0);
+ if (macaddy.isEmpty())
+ macaddy = netinfo.macAddress(QNetworkInfo::EthernetMode,0);
+ if (!macaddy.isEmpty()) {
+ QCryptographicHash hash2(QCryptographicHash::Sha1);
+ hash2.addData(macaddy.toLocal8Bit());
+
+ QString id = hash2.result().toHex();
+
+ id = id.insert(8,'-').insert(13,'-').insert(18,'-').insert(23,'-');
+ if (isUuid(id))
uniqueDeviceIDBuffer = id;
}
}
+
if (uniqueDeviceIDBuffer.isEmpty()) {
+ QFile file(QStringLiteral("/var/lib/dbus/machine-id"));
- QFile file(QStringLiteral("/etc/machine-id"));
if (file.open(QIODevice::ReadOnly)) {
QString id = QString::fromLocal8Bit(file.readAll().simplified().data());
- if (id.length() == 32)
- uniqueDeviceIDBuffer = id.insert(8,'-').insert(13,'-').insert(18,'-').insert(23,'-');
+ if (id.length() == 32) {
+ id = id.insert(8,'-').insert(13,'-').insert(18,'-').insert(23,'-');
+ if (isUuid(id)) {
+ uniqueDeviceIDBuffer = id;
+ }
+ }
file.close();
}
}
if (uniqueDeviceIDBuffer.isEmpty()) {
- QFile file(QStringLiteral("/etc/unique-id"));
+ QFile file(QStringLiteral("/etc/machine-id"));
if (file.open(QIODevice::ReadOnly)) {
QString id = QString::fromLocal8Bit(file.readAll().simplified().data());
- if (id.length() == 32)
- uniqueDeviceIDBuffer = id.insert(8,'-').insert(13,'-').insert(18,'-').insert(23,'-');
+ if (id.length() == 32) {
+ id = id.insert(8,'-').insert(13,'-').insert(18,'-').insert(23,'-');
+ if (isUuid(id)) {
+ uniqueDeviceIDBuffer = id;
+ }
+ }
file.close();
}
}
//last ditch effort
if (uniqueDeviceIDBuffer.isEmpty()) {
- QFile file(QStringLiteral("/var/lib/dbus/machine-id"));
+ QFile file(QStringLiteral("/etc/unique-id"));
if (file.open(QIODevice::ReadOnly)) {
QString id = QString::fromLocal8Bit(file.readAll().simplified().data());
if (id.length() == 32) {
- uniqueDeviceIDBuffer = id.insert(8,'-').insert(13,'-').insert(18,'-').insert(23,'-');
+ id = id.insert(8,'-').insert(13,'-').insert(18,'-').insert(23,'-');
+ if (isUuid(id)) {
+ uniqueDeviceIDBuffer = id;
+ }
file.close();
}
}
}
- QUuid uid(uniqueDeviceIDBuffer); //make sure this can be made into a valid QUUid
- if (uid.isNull())
- uniqueDeviceIDBuffer = QString();
return uniqueDeviceIDBuffer;
}
+bool QDeviceInfoPrivate::isUuid(const QString &id)
+{
+ QUuid uid(id); //make sure this can be made into a valid QUUid
+ return !uid.isNull();
+}
+
QString QDeviceInfoPrivate::version(QDeviceInfo::Version type)
{
switch (type) {
diff --git a/src/systeminfo/linux/qdeviceinfo_linux_p.h b/src/systeminfo/linux/qdeviceinfo_linux_p.h
index bd13a6c2..646df25c 100644
--- a/src/systeminfo/linux/qdeviceinfo_linux_p.h
+++ b/src/systeminfo/linux/qdeviceinfo_linux_p.h
@@ -129,6 +129,7 @@ private:
QOfonoWrapper *ofonoWrapper;
#endif // QT_NO_OFONO
QString findInRelease(const QString &searchTerm, const QString &file = QString());
+ bool isUuid(const QString &id);
bool connectedBtPower;
bool btPowered;