summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/packagemanagercore_p.cpp
diff options
context:
space:
mode:
authorTim Jenssen <tim.jenssen@digia.com>2013-06-27 11:20:29 +0200
committerTim Jenssen <tim.jenssen@digia.com>2013-06-27 11:20:29 +0200
commit72dfa6df1eeed9526ae8d7dfc0cb4b96b26dbb40 (patch)
tree1428d86aae7b4a12ce700c5f60bf35457b74e36e /src/libs/installer/packagemanagercore_p.cpp
parentb38573f2da0d7de7f9e7abad3e03b666d65ac341 (diff)
parent5409e2f56265639454a0f97270de7e584d949120 (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.cpp14
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)