From bb9f9a8fb451d7a2d81f7390993db75491224729 Mon Sep 17 00:00:00 2001 From: Richard Hughes 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 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