| From 689f77c63a4e9480ce2c8576fdbeb11ab30d206c Mon Sep 17 00:00:00 2001 |
| From: Jan Grulich <jgrulich@redhat.com> |
| Date: Thu, 15 Apr 2021 09:09:10 +0200 |
| Subject: Revert "QStandardPaths: Don't change permissions of XDG_RUNTIME_DIR" |
| |
| This reverts commit 0fbb484d4aeb4eff50eb4aa312ab8ff41ce4e082. |
| |
| diff --git a/src/corelib/io/qstandardpaths_unix.cpp b/src/corelib/io/qstandardpaths_unix.cpp |
| index 4ebeefcedb..2e779bef66 100644 |
| --- a/src/corelib/io/qstandardpaths_unix.cpp |
| +++ b/src/corelib/io/qstandardpaths_unix.cpp |
| @@ -94,30 +94,6 @@ static QLatin1String xdg_key_name(QStandardPaths::StandardLocation type) |
| } |
| #endif |
| |
| -static QByteArray unixPermissionsText(QFile::Permissions permissions) |
| -{ |
| - mode_t perms = 0; |
| - if (permissions & QFile::ReadOwner) |
| - perms |= S_IRUSR; |
| - if (permissions & QFile::WriteOwner) |
| - perms |= S_IWUSR; |
| - if (permissions & QFile::ExeOwner) |
| - perms |= S_IXUSR; |
| - if (permissions & QFile::ReadGroup) |
| - perms |= S_IRGRP; |
| - if (permissions & QFile::WriteGroup) |
| - perms |= S_IWGRP; |
| - if (permissions & QFile::ExeGroup) |
| - perms |= S_IXGRP; |
| - if (permissions & QFile::ReadOther) |
| - perms |= S_IROTH; |
| - if (permissions & QFile::WriteOther) |
| - perms |= S_IWOTH; |
| - if (permissions & QFile::ExeOther) |
| - perms |= S_IXOTH; |
| - return '0' + QByteArray::number(perms, 8); |
| -} |
| - |
| static bool checkXdgRuntimeDir(const QString &xdgRuntimeDir) |
| { |
| auto describeMetaData = [](const QFileSystemMetaData &metaData) -> QByteArray { |
| @@ -137,7 +113,27 @@ static bool checkXdgRuntimeDir(const QString &xdgRuntimeDir) |
| else |
| description += "a block device"; |
| |
| - description += " permissions " + unixPermissionsText(metaData.permissions()); |
| + // convert QFileSystemMetaData permissions back to Unix |
| + mode_t perms = 0; |
| + if (metaData.permissions() & QFile::ReadOwner) |
| + perms |= S_IRUSR; |
| + if (metaData.permissions() & QFile::WriteOwner) |
| + perms |= S_IWUSR; |
| + if (metaData.permissions() & QFile::ExeOwner) |
| + perms |= S_IXUSR; |
| + if (metaData.permissions() & QFile::ReadGroup) |
| + perms |= S_IRGRP; |
| + if (metaData.permissions() & QFile::WriteGroup) |
| + perms |= S_IWGRP; |
| + if (metaData.permissions() & QFile::ExeGroup) |
| + perms |= S_IXGRP; |
| + if (metaData.permissions() & QFile::ReadOther) |
| + perms |= S_IROTH; |
| + if (metaData.permissions() & QFile::WriteOther) |
| + perms |= S_IWOTH; |
| + if (metaData.permissions() & QFile::ExeOther) |
| + perms |= S_IXOTH; |
| + description += " permissions 0" + QByteArray::number(perms, 8); |
| |
| return description |
| + " owned by UID " + QByteArray::number(metaData.userId()) |
| @@ -190,11 +186,14 @@ static bool checkXdgRuntimeDir(const QString &xdgRuntimeDir) |
| |
| // "and he MUST be the only one having read and write access to it. Its Unix access mode MUST be 0700." |
| if (metaData.permissions() != wantedPerms) { |
| - qWarning("QStandardPaths: wrong permissions on runtime directory %ls, %s instead of %s", |
| - qUtf16Printable(xdgRuntimeDir), |
| - unixPermissionsText(metaData.permissions()).constData(), |
| - unixPermissionsText(wantedPerms).constData()); |
| - return false; |
| + // attempt to correct: |
| + QSystemError error; |
| + if (!QFileSystemEngine::setPermissions(entry, wantedPerms, error)) { |
| + qErrnoWarning("QStandardPaths: could not set correct permissions on runtime directory " |
| + "'%ls', which is %s", qUtf16Printable(xdgRuntimeDir), |
| + describeMetaData(metaData).constData()); |
| + return false; |
| + } |
| } |
| |
| return true; |
| diff --git a/tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp b/tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp |
| index a0aefac268..afbd64c405 100644 |
| --- a/tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp |
| +++ b/tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp |
| @@ -532,12 +532,7 @@ void tst_qstandardpaths::testCustomRuntimeDirectory_data() |
| d.mkdir("runtime"); |
| QFile::setPermissions(p, QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner | |
| QFile::ExeGroup | QFile::ExeOther); |
| - updateRuntimeDir(p); |
| - QTest::ignoreMessage(QtWarningMsg, |
| - QString("QStandardPaths: wrong permissions on runtime directory %1, " |
| - "0711 instead of 0700") |
| - .arg(p).toLatin1()); |
| - return fallbackXdgRuntimeDir(); |
| + return updateRuntimeDir(p); |
| }); |
| |
| addRow("environment:wrong-owner", [](QDir &) { |
| @@ -602,7 +597,6 @@ void tst_qstandardpaths::testCustomRuntimeDirectory_data() |
| clearRuntimeDir(); |
| QString p = fallbackXdgRuntimeDir(); |
| d.mkdir(p); // probably has wrong permissions |
| - QFile::setPermissions(p, QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner); |
| return p; |
| }); |
| |