summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArttu Tarkiainen <arttu.tarkiainen@qt.io>2020-05-12 16:38:33 +0300
committerArttu Tarkiainen <arttu.tarkiainen@qt.io>2020-05-15 13:29:24 +0300
commit382dfab67c491288db050ce377dec3b843f35447 (patch)
tree9404a5f778b342c1054e0220b397b732160c5e62
parentf1b4b60f3a4a89ece8e5b292077cdcfd09cc2f50 (diff)
Add support for disabling CLI features from configuration file
Task-number: QTIFW-1760 Change-Id: Ibd0668756700eeab68bce12ddce1866893cc08f9 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
-rw-r--r--doc/installerfw.qdoc5
-rw-r--r--src/libs/installer/commandlineparser.cpp2
-rw-r--r--src/libs/installer/constants.h1
-rw-r--r--src/libs/installer/settings.cpp6
-rw-r--r--src/libs/installer/settings.h1
-rw-r--r--src/sdk/commandlineinterface.cpp5
-rw-r--r--tests/auto/installer/settings/data/full_config.xml1
-rw-r--r--tests/auto/installer/settings/tst_settings.cpp1
8 files changed, 21 insertions, 1 deletions
diff --git a/doc/installerfw.qdoc b/doc/installerfw.qdoc
index 2edc2977b..0a6c7bfe4 100644
--- a/doc/installerfw.qdoc
+++ b/doc/installerfw.qdoc
@@ -290,6 +290,11 @@
\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 DisableCommandLineInterface
+ \li Set to \c true if command line interface features should be disabled. This prevents
+ the user from passing any consumer command to installer, like \c install, \c update
+ and \c remove. Other options can still be used normally. Defaults to \c false.
+ \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/commandlineparser.cpp b/src/libs/installer/commandlineparser.cpp
index d1e3e89d6..bf40c9bc0 100644
--- a/src/libs/installer/commandlineparser.cpp
+++ b/src/libs/installer/commandlineparser.cpp
@@ -191,7 +191,7 @@ CommandLineParser::CommandLineParser()
// Positional arguments
m_parser.addPositionalArgument(CommandLineOptions::scCommand,
- QLatin1String("Command to be run by installer."),
+ QLatin1String("Command to be run by installer. Note that this feature may be disabled by vendor."),
QLatin1String("command"));
m_parser.addPositionalArgument(CommandLineOptions::scArguments,
QLatin1String("Extra arguments for command, each separated by space."),
diff --git a/src/libs/installer/constants.h b/src/libs/installer/constants.h
index 05728bff3..58660482c 100644
--- a/src/libs/installer/constants.h
+++ b/src/libs/installer/constants.h
@@ -81,6 +81,7 @@ static const QLatin1String scRunProgramDescription("RunProgramDescription");
static const QLatin1String scTargetConfigurationFile("TargetConfigurationFile");
static const QLatin1String scAllowNonAsciiCharacters("AllowNonAsciiCharacters");
static const QLatin1String scDisableAuthorizationFallback("DisableAuthorizationFallback");
+static const QLatin1String scDisableCommandLineInterface("DisableCommandLineInterface");
static const QLatin1String scRepositorySettingsPageVisible("RepositorySettingsPageVisible");
static const QLatin1String scAllowSpaceInPath("AllowSpaceInPath");
static const QLatin1String scWizardStyle("WizardStyle");
diff --git a/src/libs/installer/settings.cpp b/src/libs/installer/settings.cpp
index 4fd006d01..e6395e44c 100644
--- a/src/libs/installer/settings.cpp
+++ b/src/libs/installer/settings.cpp
@@ -289,6 +289,7 @@ Settings Settings::fromFileAndPrefix(const QString &path, const QString &prefix,
<< scRunProgram << scRunProgramArguments << scRunProgramDescription
<< scDependsOnLocalInstallerBinary
<< scAllowSpaceInPath << scAllowNonAsciiCharacters << scDisableAuthorizationFallback
+ << scDisableCommandLineInterface
<< scWizardStyle << scStyleSheet << scTitleColor
<< scWizardDefaultWidth << scWizardDefaultHeight
<< scRepositorySettingsPageVisible << scTargetConfigurationFile
@@ -567,6 +568,11 @@ bool Settings::disableAuthorizationFallback() const
return d->m_data.value(scDisableAuthorizationFallback, false).toBool();
}
+bool Settings::disableCommandLineInterface() const
+{
+ return d->m_data.value(scDisableCommandLineInterface, 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 fff2324f1..93e658bd8 100644
--- a/src/libs/installer/settings.h
+++ b/src/libs/installer/settings.h
@@ -137,6 +137,7 @@ public:
bool allowSpaceInPath() const;
bool allowNonAsciiCharacters() const;
bool disableAuthorizationFallback() const;
+ bool disableCommandLineInterface() const;
bool containsValue(const QString &key) const;
QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const;
diff --git a/src/sdk/commandlineinterface.cpp b/src/sdk/commandlineinterface.cpp
index 1b55b5979..0ddf973d2 100644
--- a/src/sdk/commandlineinterface.cpp
+++ b/src/sdk/commandlineinterface.cpp
@@ -59,6 +59,11 @@ bool CommandLineInterface::initialize()
qCWarning(QInstaller::lcInstallerInstallLog) << errorMessage;
return false;
}
+ if (m_core->settings().disableCommandLineInterface()) {
+ qCWarning(QInstaller::lcInstallerInstallLog)
+ << "Command line interface support disabled from installer configuration by vendor!";
+ return false;
+ }
// Filter the arguments list by removing the command itself
// and any key=value pair occurrences.
m_positionalArguments = m_parser.positionalArguments();
diff --git a/tests/auto/installer/settings/data/full_config.xml b/tests/auto/installer/settings/data/full_config.xml
index 272a1b0d7..304dd21f4 100644
--- a/tests/auto/installer/settings/data/full_config.xml
+++ b/tests/auto/installer/settings/data/full_config.xml
@@ -38,6 +38,7 @@ File should contain all elements we allow in a config.xml
<AllowSpaceInPath>true</AllowSpaceInPath>
<AllowNonAsciiCharacters>true</AllowNonAsciiCharacters>
<DisableAuthorizationFallback>true</DisableAuthorizationFallback>
+ <DisableCommandLineInterface>true</DisableCommandLineInterface>
<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 ab8611e12..54bc05e35 100644
--- a/tests/auto/installer/settings/tst_settings.cpp
+++ b/tests/auto/installer/settings/tst_settings.cpp
@@ -75,6 +75,7 @@ void tst_Settings::loadTutorialConfig()
QCOMPARE(settings.allowSpaceInPath(), true);
QCOMPARE(settings.allowNonAsciiCharacters(), false);
QCOMPARE(settings.disableAuthorizationFallback(), false);
+ QCOMPARE(settings.disableCommandLineInterface(), false);
QCOMPARE(settings.createLocalRepository(), false);
QCOMPARE(settings.installActionColumnVisible(), false);