diff options
author | Tim Jenssen <tim.jenssen@digia.com> | 2013-06-27 11:20:29 +0200 |
---|---|---|
committer | Tim Jenssen <tim.jenssen@digia.com> | 2013-06-27 11:20:29 +0200 |
commit | 72dfa6df1eeed9526ae8d7dfc0cb4b96b26dbb40 (patch) | |
tree | 1428d86aae7b4a12ce700c5f60bf35457b74e36e /src/libs/installer/packagemanagercore_p.cpp | |
parent | b38573f2da0d7de7f9e7abad3e03b666d65ac341 (diff) | |
parent | 5409e2f56265639454a0f97270de7e584d949120 (diff) |
Merge remote-tracking branch 'origin/1.4'
Conflicts:
installerfw.pri
tools/binarycreator/binarycreator.cpp
tools/common/repositorygen.cpp
tools/common/repositorygen.h
tools/repogen/repogen.cpp
Change-Id: I97767b2e4ef9b7afd5ce368d99c6a7d38dfbd947
Diffstat (limited to 'src/libs/installer/packagemanagercore_p.cpp')
-rw-r--r-- | src/libs/installer/packagemanagercore_p.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp index f514f8a5c..1728a85b2 100644 --- a/src/libs/installer/packagemanagercore_p.cpp +++ b/src/libs/installer/packagemanagercore_p.cpp @@ -782,8 +782,17 @@ static QSet<Repository> readRepositories(QXmlStreamReader &reader, bool isDefaul void PackageManagerCorePrivate::writeMaintenanceConfigFiles() { + bool gainedAdminRights = false; // write current state (variables) to the uninstaller ini file const QString iniPath = targetDir() + QLatin1Char('/') + m_data.settings().uninstallerIniFile(); + { + QFile tmp(iniPath); // force gaining admin rights in case we haven't done already and we need it + if (!tmp.open(QIODevice::ReadWrite) || !tmp.isWritable()) { + if (!m_FSEngineClientHandler->isActive()) // check if nobody did it before... + gainedAdminRights = m_core->gainAdminRights(); + } + tmp.close(); + } QVariantHash variables; QSettingsWrapper cfg(iniPath, QSettingsWrapper::IniFormat); @@ -800,6 +809,8 @@ void PackageManagerCorePrivate::writeMaintenanceConfigFiles() cfg.sync(); if (cfg.status() != QSettingsWrapper::NoError) { + if (gainedAdminRights) + m_core->dropAdminRights(); const QString reason = cfg.status() == QSettingsWrapper::AccessError ? tr("Access error") : tr("Format error"); throw Error(tr("Could not write installer configuration to %1: %2").arg(iniPath, reason)); @@ -841,6 +852,9 @@ void PackageManagerCorePrivate::writeMaintenanceConfigFiles() writer.writeEndElement(); writer.writeEndElement(); } + + if (gainedAdminRights) + m_core->dropAdminRights(); } void PackageManagerCorePrivate::readMaintenanceConfigFiles(const QString &targetDir) |