diff options
author | Lorn Potter <lorn.potter@jollamobile.com> | 2014-03-06 09:21:52 +1000 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-04-05 21:11:46 +0200 |
commit | 87338cd15b47cad56bf2b4c166d294c3306bdf2c (patch) | |
tree | 5bf518652ccde572c2dbd03ca21237503e907c2b /src | |
parent | 948359ed4f896f666dbebc1ad5ab21b521b6bdd1 (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.cpp | 62 | ||||
-rw-r--r-- | src/systeminfo/linux/qdeviceinfo_linux_p.h | 1 |
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; |