summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/installerfw.qdoc4
-rw-r--r--src/libs/installer/constants.h1
-rw-r--r--src/libs/installer/packagemanagercore.cpp2
-rw-r--r--src/libs/installer/remoteclient.cpp6
-rw-r--r--src/libs/installer/remoteclient.h1
-rw-r--r--src/libs/installer/remoteclient_p.h17
-rw-r--r--src/libs/installer/settings.cpp8
-rw-r--r--src/libs/installer/settings.h1
-rw-r--r--tests/auto/installer/settings/data/full_config.xml1
-rw-r--r--tests/auto/installer/settings/tst_settings.cpp1
10 files changed, 41 insertions, 1 deletions
diff --git a/doc/installerfw.qdoc b/doc/installerfw.qdoc
index 196fbab10..7a667f912 100644
--- a/doc/installerfw.qdoc
+++ b/doc/installerfw.qdoc
@@ -282,6 +282,10 @@
\li Set to \c true if the installation path can contain non-ASCII
characters.
\row
+ \li DisableAuthorizationFallback
+ \li Set to \c true if the installation should not ask users to run the authorization
+ fallback in case of authorization errors. Instead abort the installation immediately.
+ \row
\li RepositorySettingsPageVisible
\li Set to \c false to hide the repository settings page inside the settings dialog.
\row
diff --git a/src/libs/installer/constants.h b/src/libs/installer/constants.h
index 1cba6d572..b871e6209 100644
--- a/src/libs/installer/constants.h
+++ b/src/libs/installer/constants.h
@@ -81,6 +81,7 @@ static const QLatin1String scRemoveTargetDir("RemoveTargetDir");
static const QLatin1String scRunProgramDescription("RunProgramDescription");
static const QLatin1String scTargetConfigurationFile("TargetConfigurationFile");
static const QLatin1String scAllowNonAsciiCharacters("AllowNonAsciiCharacters");
+static const QLatin1String scDisableAuthorizationFallback("DisableAuthorizationFallback");
static const QLatin1String scRepositorySettingsPageVisible("RepositorySettingsPageVisible");
static const QLatin1String scAllowSpaceInPath("AllowSpaceInPath");
static const QLatin1String scWizardStyle("WizardStyle");
diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp
index af517da5b..492920efc 100644
--- a/src/libs/installer/packagemanagercore.cpp
+++ b/src/libs/installer/packagemanagercore.cpp
@@ -854,6 +854,8 @@ PackageManagerCore::PackageManagerCore(qint64 magicmaker, const QList<OperationB
d->initialize(QHash<QString, QString>());
+ RemoteClient::instance().setAuthorizationFallbackDisabled(settings().disableAuthorizationFallback());
+
//
// Sanity check to detect a broken installations with missing operations.
// Every installed package should have at least one MinimalProgress operation.
diff --git a/src/libs/installer/remoteclient.cpp b/src/libs/installer/remoteclient.cpp
index 59a236635..275d8308b 100644
--- a/src/libs/installer/remoteclient.cpp
+++ b/src/libs/installer/remoteclient.cpp
@@ -77,6 +77,12 @@ void RemoteClient::init(const QString &socketName, const QString &key, Protocol:
d->init(socketName, key, mode, startAs);
}
+void RemoteClient::setAuthorizationFallbackDisabled(bool disabled)
+{
+ Q_D(RemoteClient);
+ d->setAuthorizationFallbackDisabled(disabled);
+}
+
void RemoteClient::shutdown()
{
Q_D(RemoteClient);
diff --git a/src/libs/installer/remoteclient.h b/src/libs/installer/remoteclient.h
index 278132ba8..f8a87aece 100644
--- a/src/libs/installer/remoteclient.h
+++ b/src/libs/installer/remoteclient.h
@@ -52,6 +52,7 @@ public:
static RemoteClient &instance();
void init(const QString &socketName, const QString &key, Protocol::Mode mode,
Protocol::StartAs startAs);
+ void setAuthorizationFallbackDisabled(bool disabled);
void shutdown();
void destroy();
diff --git a/src/libs/installer/remoteclient_p.h b/src/libs/installer/remoteclient_p.h
index e88d0579d..92dc18bfa 100644
--- a/src/libs/installer/remoteclient_p.h
+++ b/src/libs/installer/remoteclient_p.h
@@ -64,6 +64,7 @@ public:
, m_active(false)
, m_key(QLatin1String(Protocol::DefaultAuthorizationKey))
, m_mode(Protocol::Mode::Debug)
+ , m_authorizationFallbackDisabled(false)
{
m_thread.setObjectName(QLatin1String("KeepAlive"));
}
@@ -106,6 +107,11 @@ public:
}
}
+ void setAuthorizationFallbackDisabled(bool disabled)
+ {
+ m_authorizationFallbackDisabled = disabled;
+ }
+
void maybeStartServer() {
if (m_mode == Protocol::Mode::Debug)
m_serverStarted = true; // we expect the server to be started by the developer
@@ -123,6 +129,16 @@ public:
started = AdminAuthorization::execute(0, m_serverCommand, m_serverArguments);
if (!started) {
+ if (m_authorizationFallbackDisabled) {
+ MessageBoxHandler::critical(MessageBoxHandler::currentBestSuitParent(),
+ QLatin1String("AuthorizationError"),
+ QCoreApplication::translate("RemoteClient", "Cannot get authorization."),
+ QCoreApplication::translate("RemoteClient",
+ "Cannot get authorization that is needed for continuing the installation.\n\n"
+ "Please start the setup program as a user with the appropriate rights.\n"
+ "Or accept the elevation of access rights if being asked."));
+ return;
+ }
// something went wrong with authorizing, either user pressed cancel or entered
// wrong password
const QString fallback = m_serverCommand + QLatin1String(" ") + m_serverArguments
@@ -184,6 +200,7 @@ private:
QString m_key;
QThread m_thread;
Protocol::Mode m_mode;
+ bool m_authorizationFallbackDisabled;
};
} // namespace QInstaller
diff --git a/src/libs/installer/settings.cpp b/src/libs/installer/settings.cpp
index 3f0845649..3e933574d 100644
--- a/src/libs/installer/settings.cpp
+++ b/src/libs/installer/settings.cpp
@@ -256,7 +256,8 @@ Settings Settings::fromFileAndPrefix(const QString &path, const QString &prefix,
<< scStartMenuDir << scMaintenanceToolName << scMaintenanceToolIniFile << scRemoveTargetDir
<< scRunProgram << scRunProgramArguments << scRunProgramDescription
<< scDependsOnLocalInstallerBinary
- << scAllowSpaceInPath << scAllowNonAsciiCharacters << scWizardStyle << scStyleSheet << scTitleColor
+ << scAllowSpaceInPath << scAllowNonAsciiCharacters << scDisableAuthorizationFallback
+ << scWizardStyle << scStyleSheet << scTitleColor
<< scWizardDefaultWidth << scWizardDefaultHeight
<< scRepositorySettingsPageVisible << scTargetConfigurationFile
<< scRemoteRepositories << scTranslations << scUrlQueryString << QLatin1String(scControlScript)
@@ -520,6 +521,11 @@ bool Settings::allowNonAsciiCharacters() const
return d->m_data.value(scAllowNonAsciiCharacters, false).toBool();
}
+bool Settings::disableAuthorizationFallback() const
+{
+ return d->m_data.value(scDisableAuthorizationFallback, false).toBool();
+}
+
bool Settings::dependsOnLocalInstallerBinary() const
{
return d->m_data.value(scDependsOnLocalInstallerBinary).toBool();
diff --git a/src/libs/installer/settings.h b/src/libs/installer/settings.h
index 9171ff6ae..6c437a72d 100644
--- a/src/libs/installer/settings.h
+++ b/src/libs/installer/settings.h
@@ -134,6 +134,7 @@ public:
bool allowSpaceInPath() const;
bool allowNonAsciiCharacters() const;
+ bool disableAuthorizationFallback() const;
bool containsValue(const QString &key) const;
QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const;
diff --git a/tests/auto/installer/settings/data/full_config.xml b/tests/auto/installer/settings/data/full_config.xml
index 5479fa353..1544961f5 100644
--- a/tests/auto/installer/settings/data/full_config.xml
+++ b/tests/auto/installer/settings/data/full_config.xml
@@ -37,6 +37,7 @@ File should contain all elements we allow in a config.xml
<DependsOnLocalInstallerBinary>true</DependsOnLocalInstallerBinary>
<AllowSpaceInPath>true</AllowSpaceInPath>
<AllowNonAsciiCharacters>true</AllowNonAsciiCharacters>
+ <DisableAuthorizationFallback>true</DisableAuthorizationFallback>
<RepositorySettingsPageVisible>false</RepositorySettingsPageVisible>
<CreateLocalRepository>false</CreateLocalRepository>
<TargetConfigurationFile>components.xml</TargetConfigurationFile>
diff --git a/tests/auto/installer/settings/tst_settings.cpp b/tests/auto/installer/settings/tst_settings.cpp
index 38855dccf..0b1987b3d 100644
--- a/tests/auto/installer/settings/tst_settings.cpp
+++ b/tests/auto/installer/settings/tst_settings.cpp
@@ -74,6 +74,7 @@ void tst_Settings::loadTutorialConfig()
QCOMPARE(settings.repositorySettingsPageVisible(), true);
QCOMPARE(settings.allowSpaceInPath(), true);
QCOMPARE(settings.allowNonAsciiCharacters(), false);
+ QCOMPARE(settings.disableAuthorizationFallback(), false);
QCOMPARE(settings.createLocalRepository(), false);
QCOMPARE(settings.installActionColumnVisible(), false);