From 382dfab67c491288db050ce377dec3b843f35447 Mon Sep 17 00:00:00 2001 From: Arttu Tarkiainen Date: Tue, 12 May 2020 16:38:33 +0300 Subject: Add support for disabling CLI features from configuration file Task-number: QTIFW-1760 Change-Id: Ibd0668756700eeab68bce12ddce1866893cc08f9 Reviewed-by: Katja Marttila --- doc/installerfw.qdoc | 5 +++++ src/libs/installer/commandlineparser.cpp | 2 +- src/libs/installer/constants.h | 1 + src/libs/installer/settings.cpp | 6 ++++++ src/libs/installer/settings.h | 1 + src/sdk/commandlineinterface.cpp | 5 +++++ tests/auto/installer/settings/data/full_config.xml | 1 + tests/auto/installer/settings/tst_settings.cpp | 1 + 8 files changed, 21 insertions(+), 1 deletion(-) diff --git a/doc/installerfw.qdoc b/doc/installerfw.qdoc index 2edc2977b..0a6c7bfe4 100644 --- a/doc/installerfw.qdoc +++ b/doc/installerfw.qdoc @@ -289,6 +289,11 @@ \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 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. 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 true true true + true false false components.xml 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); -- cgit v1.2.3