From bb9f9a8fb451d7a2d81f7390993db75491224729 Mon Sep 17 00:00:00 2001
From: Richard Hughes <richard@hughsie.com>
Date: Mon, 9 Apr 2018 16:39:56 +0100
Subject: [PATCH] Do not set JUST_REINSTALL on any kind of auth failure
If we try to continue the auth queue when it has been cancelled (or failed)
then we fall upon the obscure JUST_REINSTALL transaction flag which only the
DNF backend actually verifies.
Many thanks to Matthias Gerstner <mgerstner@suse.de> for spotting the problem.
---
src/pk-transaction.c | 27 ++++++++-------------------
1 file changed, 8 insertions(+), 19 deletions(-)
diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index 1d006c782..ffee29f6f 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -2351,25 +2351,14 @@ pk_transaction_authorize_actions_finished_cb (GObject *source_object,
/* did not auth */
if (!polkit_authorization_result_get_is_authorized (result)) {
- if (g_strcmp0 (action_id, "org.freedesktop.packagekit.package-install") == 0 &&
- pk_bitfield_contain (priv->cached_transaction_flags,
- PK_TRANSACTION_FLAG_ENUM_ALLOW_REINSTALL)) {
- g_debug ("allowing just reinstallation");
- pk_bitfield_add (priv->cached_transaction_flags,
- PK_TRANSACTION_FLAG_ENUM_JUST_REINSTALL);
- } else {
- priv->waiting_for_auth = FALSE;
- /* emit an ::StatusChanged, ::ErrorCode() and then ::Finished() */
- pk_transaction_status_changed_emit (data->transaction, PK_STATUS_ENUM_FINISHED);
- pk_transaction_error_code_emit (data->transaction, PK_ERROR_ENUM_NOT_AUTHORIZED,
- "Failed to obtain authentication.");
- pk_transaction_finished_emit (data->transaction, PK_EXIT_ENUM_FAILED, 0);
-
- syslog (LOG_AUTH | LOG_NOTICE,
- "uid %i failed to obtain auth",
- priv->uid);
- goto out;
- }
+ priv->waiting_for_auth = FALSE;
+ /* emit an ::StatusChanged, ::ErrorCode() and then ::Finished() */
+ pk_transaction_status_changed_emit (data->transaction, PK_STATUS_ENUM_FINISHED);
+ pk_transaction_error_code_emit (data->transaction, PK_ERROR_ENUM_NOT_AUTHORIZED,
+ "Failed to obtain authentication.");
+ pk_transaction_finished_emit (data->transaction, PK_EXIT_ENUM_FAILED, 0);
+ syslog (LOG_AUTH | LOG_NOTICE, "uid %i failed to obtain auth", priv->uid);
+ goto out;
}
if (data->actions->len <= 1) {
--
2.17.0