Don't set no_interaction for --assumeyes

Resolves: RHEL-11901
This commit is contained in:
Luigi Pavan 2026-07-30 12:52:36 +02:00
parent e5e776b9b8
commit b695fcb246
2 changed files with 183 additions and 1 deletions

View File

@ -0,0 +1,175 @@
From dccb913c6d7b3c5694af3a5e617e671b9a4f4339 Mon Sep 17 00:00:00 2001
From: Luigi Pavan <lpavan@redhat.com>
Date: Thu, 30 Jul 2026 12:58:43 +0200
Subject: [PATCH] cli: Don't set no_interaction for --assumeyes
Backport of commit 0717cd168582473418300eee8baaae988e9c0579.
Adapted for 1.12.9: different prompt text in end_of_lifed_with_rebase
(`"Replace it with %s?"` instead of `"Replace?"`).
---
app/flatpak-cli-transaction.c | 24 ++++++++++--------------
app/flatpak-cli-transaction.h | 2 +-
tests/test-auth.sh | 19 ++++++++++++++++++-
3 files changed, 29 insertions(+), 16 deletions(-)
diff --git a/app/flatpak-cli-transaction.c b/app/flatpak-cli-transaction.c
index b8c6776..a8c4693 100644
--- a/app/flatpak-cli-transaction.c
+++ b/app/flatpak-cli-transaction.c
@@ -34,7 +34,7 @@ struct _FlatpakCliTransaction
{
FlatpakTransaction parent;
- gboolean disable_interaction;
+ gboolean assume_yes;
gboolean stop_on_first_error;
gboolean non_default_arch;
GError *first_operation_error;
@@ -86,7 +86,7 @@ choose_remote_for_ref (FlatpakTransaction *transaction,
self->did_interaction = TRUE;
- if (self->disable_interaction)
+ if (self->assume_yes)
{
g_print (_("Required runtime for %s (%s) found in remote %s\n"),
pref, runtime_ref, remotes[0]);
@@ -122,7 +122,7 @@ add_new_remote (FlatpakTransaction *transaction,
self->did_interaction = TRUE;
- if (self->disable_interaction)
+ if (self->assume_yes)
{
g_print (_("Configuring %s as new remote '%s'\n"), url, remote_name);
return TRUE;
@@ -168,7 +168,7 @@ install_authenticator (FlatpakTransaction *old_transaction,
old_cli->did_interaction = TRUE;
- transaction2 = flatpak_cli_transaction_new (dir, old_cli->disable_interaction, TRUE, FALSE, &local_error);
+ transaction2 = flatpak_cli_transaction_new (dir, old_cli->assume_yes, TRUE, FALSE, &local_error);
if (transaction2 == NULL)
{
g_printerr ("Unable to install authenticator: %s\n", local_error->message);
@@ -570,7 +570,7 @@ webflow_start (FlatpakTransaction *transaction,
self->did_interaction = TRUE;
- if (!self->disable_interaction)
+ if (!self->assume_yes)
{
g_print (_("Authentication required for remote '%s'\n"), remote);
if (!flatpak_yes_no_prompt (TRUE, _("Open browser?")))
@@ -621,9 +621,6 @@ basic_auth_start (FlatpakTransaction *transaction,
FlatpakCliTransaction *self = FLATPAK_CLI_TRANSACTION (transaction);
char *user, *password, *previous_error = NULL;
- if (self->disable_interaction)
- return FALSE;
-
self->did_interaction = TRUE;
if (g_variant_lookup (options, "previous-error", "&s", &previous_error))
@@ -748,10 +745,10 @@ end_of_lifed_with_rebase (FlatpakTransaction *transaction,
if (rebased_to_ref && remote)
{
- if (self->disable_interaction ||
+ if (self->assume_yes ||
flatpak_yes_no_prompt (TRUE, _("Replace it with %s?"), rebased_to_ref))
{
- if (self->disable_interaction)
+ if (self->assume_yes)
g_print (_("Updating to rebased version\n"));
action = EOL_REBASE;
@@ -1233,7 +1230,7 @@ transaction_ready_pre_auth (FlatpakTransaction *transaction)
g_print ("\n");
- if (!self->disable_interaction)
+ if (!self->assume_yes)
{
g_autoptr(FlatpakInstallation) installation = flatpak_transaction_get_installation (transaction);
const char *name;
@@ -1368,7 +1365,7 @@ flatpak_cli_transaction_class_init (FlatpakCliTransactionClass *klass)
FlatpakTransaction *
flatpak_cli_transaction_new (FlatpakDir *dir,
- gboolean disable_interaction,
+ gboolean assume_yes,
gboolean stop_on_first_error,
gboolean non_default_arch,
GError **error)
@@ -1387,11 +1384,10 @@ flatpak_cli_transaction_new (FlatpakDir *dir,
if (self == NULL)
return NULL;
- self->disable_interaction = disable_interaction;
+ self->assume_yes = assume_yes;
self->stop_on_first_error = stop_on_first_error;
self->non_default_arch = non_default_arch;
- flatpak_transaction_set_no_interaction (FLATPAK_TRANSACTION (self), disable_interaction);
flatpak_transaction_add_default_dependency_sources (FLATPAK_TRANSACTION (self));
return (FlatpakTransaction *) g_steal_pointer (&self);
diff --git a/app/flatpak-cli-transaction.h b/app/flatpak-cli-transaction.h
index 4328185..4175f9b 100644
--- a/app/flatpak-cli-transaction.h
+++ b/app/flatpak-cli-transaction.h
@@ -28,7 +28,7 @@
G_DECLARE_FINAL_TYPE (FlatpakCliTransaction, flatpak_cli_transaction, FLATPAK, CLI_TRANSACTION, FlatpakTransaction)
FlatpakTransaction * flatpak_cli_transaction_new (FlatpakDir * dir,
- gboolean disable_interaction,
+ gboolean assume_yes,
gboolean stop_on_first_error,
gboolean non_default_arch,
GError **error);
diff --git a/tests/test-auth.sh b/tests/test-auth.sh
index 78ff48b..99d8705 100755
--- a/tests/test-auth.sh
+++ b/tests/test-auth.sh
@@ -22,7 +22,7 @@ set -euo pipefail
. $(dirname $0)/libtest.sh
-echo "1..3"
+echo "1..4"
setup_repo
@@ -90,6 +90,8 @@ assert_file_has_content ${XDG_RUNTIME_DIR}/request "^uri: http://127.0.0.1:${por
if [ x${USE_COLLECTIONS_IN_CLIENT-} == xyes ] ; then
assert_file_has_content ${XDG_RUNTIME_DIR}/request "^options: .*'collection-id': <'org.test.Collection.test'>"
fi
+# -y/--assumeyes should not send no-interaction to the authenticator (only --noninteractive should)
+assert_not_file_has_content ${XDG_RUNTIME_DIR}/request "no-interaction"
EXPORT_ARGS="--token-type=2" make_updated_app test "" master UPDATE2
mark_need_token app/org.test.Hello/$ARCH/master the-secret
@@ -159,3 +161,18 @@ EXPORT_ARGS="--token-type=2" make_updated_app test "" master UPDATE5
mark_need_token app/org.test.Hello/$ARCH/master the-secret
ok "update with webflow"
+
+rm -f ${XDG_RUNTIME_DIR}/request-webflow
+rm -f ${XDG_RUNTIME_DIR}/require-webflow
+
+${FLATPAK} ${U} uninstall -y org.test.Hello//master org.test.Hello//copy >&2
+
+EXPORT_ARGS="--token-type=2" make_updated_app test "" master UPDATE6
+mark_need_token app/org.test.Hello/$ARCH/master the-secret
+echo -n the-secret > ${XDG_RUNTIME_DIR}/required-token
+
+${FLATPAK} ${U} install --noninteractive test-repo org.test.Hello master >&2
+
+assert_file_has_content ${XDG_RUNTIME_DIR}/request "no-interaction"
+
+ok "--noninteractive sends no-interaction to the authenticator"
--
2.52.0

View File

@ -3,7 +3,7 @@
Name: flatpak
Version: 1.12.9
Release: 5%{?dist}
Release: 6%{?dist}
Summary: Application deployment framework for desktop apps
License: LGPLv2+
@ -62,6 +62,9 @@ Patch130: CVE-2026-34079-1-utils-only-remove-cached-files-in-the-cache-dir
Patch131: CVE-2026-34079-2-utils-do-not-follow-symlinks-in-local-open-file.patch
Patch132: CVE-2026-34079-3-system-helper-only-remove-an-ongoing-pull-if-users-match.patch
# Don't set no_interaction for --assumeyes (https://github.com/flatpak/flatpak/pull/6744)
Patch133: cli-dont-set-no-interaction-for-assumeyes.patch
BuildRequires: pkgconfig(appstream-glib)
BuildRequires: pkgconfig(dconf)
@ -320,6 +323,10 @@ fi
%changelog
* Thu Jul 30 2026 Luigi Pavan <lpavan@redhat.com> - 1.12.9-6
- Don't set no_interaction for --assumeyes
Resolves: RHEL-11901
* Wed May 20 2026 Jan Grulich <jgrulich@redhat.com> - 1.12.9-5
- Fix arbitrary code execution via crafted symlinks in sandbox-expose options
Resolves: RHEL-165644