From 43f350defad59c6697ab9df9196f512a0d405428 Mon Sep 17 00:00:00 2001 From: re2zero Date: Sat, 8 Feb 2025 15:37:19 +0800 Subject: [PATCH] fix: Fix can not get any logs issue (#361) The service did not read logs by gio, the gio-qt have include qt6 and qt5 libraries since v0.0.14, rollback codes. Log: Fix can not get any logs issue. --- logViewerService/CMakeLists.txt | 5 +- logViewerService/logviewerservice.cpp | 70 ++++----------------------- logViewerService/logviewerservice.h | 47 ++---------------- 3 files changed, 14 insertions(+), 108 deletions(-) diff --git a/logViewerService/CMakeLists.txt b/logViewerService/CMakeLists.txt index 5d46ba73..e9d006c7 100755 --- a/logViewerService/CMakeLists.txt +++ b/logViewerService/CMakeLists.txt @@ -40,9 +40,8 @@ find_package(Qt${QT_DESIRED_VERSION} REQUIRED COMPONENTS ${qt_required_component find_package(Dtk${DTK_VERSION_MAJOR} COMPONENTS Core Gui REQUIRED) find_package(PolkitQt${QT_DESIRED_VERSION}-1) -if (QT_DESIRED_VERSION MATCHES 5) - pkg_check_modules(Gio REQUIRED gio-qt) -endif() +pkg_check_modules(Gio REQUIRED gio-qt${DTK_VERSION_MAJOR}) + set(LINK_LIBS Qt${QT_DESIRED_VERSION}::Core diff --git a/logViewerService/logviewerservice.cpp b/logViewerService/logviewerservice.cpp index 424fc307..50fa8b8a 100644 --- a/logViewerService/logviewerservice.cpp +++ b/logViewerService/logviewerservice.cpp @@ -9,11 +9,11 @@ #include #include -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) -#include #include #include #include +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) +#include #else #include #endif @@ -652,17 +652,9 @@ QStringList LogViewerService::getHomePaths() QStringList LogViewerService::getExternalDevPaths() { QStringList devPaths; -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) const QList > mounts = getMounts_safe(); -#else - const QList mounts = getMounts_safe(); -#endif for (auto mount : mounts) { - #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QString uri = mount->getRootFile()->uri(); - #else - QString uri = mount.source(); - #endif QString scheme = QUrl(uri).scheme(); // sbm路径判断,分为gvfs挂载和cifs挂载两种 @@ -679,12 +671,8 @@ QStringList LogViewerService::getExternalDevPaths() if ((scheme == "file") || //usb device (scheme == "gphoto2") || //phone photo (scheme == "mtp")) { //android file - // QExplicitlySharedDataPointer locationFile = mount->getDefaultLocationFile(); - #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - QString path = mount->getDefaultLocationFile()->path(); - #else - QString path = mount.target(); - #endif + QExplicitlySharedDataPointer locationFile = mount->getDefaultLocationFile(); + QString path = locationFile->path(); if (path.startsWith("/media/")) { QFlags power = QFile::permissions(path); if (power.testFlag(QFile::WriteUser)) { @@ -698,38 +686,11 @@ QStringList LogViewerService::getExternalDevPaths() } //可重入版本的getMounts -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) -QList> LogViewerService::getMounts_safe() -#else -QList LogViewerService::getMounts_safe() -#endif +QList > LogViewerService::getMounts_safe() { static QMutex mutex; mutex.lock(); -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) auto result = DGioVolumeManager::getMounts(); -#else - QList result; - QFile mountsFile("/proc/mounts"); - if (mountsFile.open(QIODevice::ReadOnly | QIODevice::Text)) { - QTextStream in(&mountsFile); - while (!in.atEnd()) { - QString line = in.readLine(); - QStringList parts = line.split(' '); - if (parts.size() >= 4) { - Mount mount(new MountData); - mount.setSource(parts.at(0)); - mount.setTarget(parts.at(1)); - mount.setFilesystemType(parts.at(2)); - mount.setOptions(parts.at(3)); - result.append(mount); - } - } - mountsFile.close(); - } else { - qWarning() << "Failed to open /proc/mounts"; - } -#endif mutex.unlock(); return result; } @@ -1095,23 +1056,10 @@ bool LogViewerService::isValidInvoker(bool checkAuth/* = true*/) uint pid = conn.interface()->servicePid(msg.service()).value(); // 判断是否存在执行路径且是否存在于可调用者名单中 - QFileInfo initNsMntFileInfo("/proc/1/ns/mnt"); - QFileInfo senderNsMntFileInfo(QString("/proc/%1/ns/mnt").arg(pid)); - QString initNsMnt; - QString senderNsMnt; - - if (!initNsMntFileInfo.isSymLink() || !senderNsMntFileInfo.isSymLink()) { - sendErrorReply(QDBusError::ErrorType::Failed, "Invalid symlink!!!!!"); - return false; - } - - #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - initNsMnt = initNsMntFileInfo.symLinkTarget().trimmed(); - senderNsMnt = senderNsMntFileInfo.symLinkTarget().trimmed(); - #else - initNsMnt = initNsMntFileInfo.readLink().trimmed(); - senderNsMnt = senderNsMntFileInfo.readLink().trimmed(); - #endif + QFile initNsMntFile("/proc/1/ns/mnt"); + QFile senderNsMntFile(QString("/proc/%1/ns/mnt").arg(pid)); + auto initNsMnt = initNsMntFile.symLinkTarget().trimmed().remove(0, QString("/proc/1/ns/mnt").length()); + auto senderNsMnt = senderNsMntFile.symLinkTarget().trimmed().remove(0, QString("/proc/%1/ns/mnt").arg(pid).length()); if (initNsMnt != senderNsMnt) { sendErrorReply(QDBusError::ErrorType::Failed, "Illegal calls!!!!!"); return false; diff --git a/logViewerService/logviewerservice.h b/logViewerService/logviewerservice.h index b741e945..a895ce4f 100755 --- a/logViewerService/logviewerservice.h +++ b/logViewerService/logviewerservice.h @@ -5,51 +5,14 @@ #ifndef LOGVIEWERSERVICE_H #define LOGVIEWERSERVICE_H +#include + #include #include #include #include #include #include -#include - -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) -#include - -using DMount = DGioMount; - -#else -class MountData : public QSharedData { -public: - QString source; - QString target; - QString filesystemType; - QString options; -}; - -class Mount { -public: - Mount() : d(new MountData) {} - Mount(const Mount& other) : d(other.d) {} - Mount(MountData* data) : d(data) {} - - QString source() const { return d->source; } - QString target() const { return d->target; } - QString filesystemType() const { return d->filesystemType; } - QString options() const { return d->options; } - - void setSource(const QString& source) { d->source = source; } - void setTarget(const QString& target) { d->target = target; } - void setFilesystemType(const QString& filesystemType) { d->filesystemType = filesystemType; } - void setOptions(const QString& options) { d->options = options; } - -private: - QExplicitlySharedDataPointer d; -}; - -using DMount = Mount; - -#endif class QTextStream; class DGioVolumeManager; @@ -87,11 +50,7 @@ public Q_SLOTS: QStringList getHomePaths(); // 获取外设挂载路径(包括smb路径) QStringList getExternalDevPaths(); -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - QList> getMounts_safe(); -#else - QList getMounts_safe(); -#endif + QList> getMounts_safe(); private: QString readLog(const QString &filePath);