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(-)

Index: packagekit-1.1.9/src/pk-transaction.c
===================================================================
--- packagekit-1.1.9.orig/src/pk-transaction.c	2018-04-24 10:14:22.177040388 -0400
+++ packagekit-1.1.9/src/pk-transaction.c	2018-04-24 10:14:22.177040388 -0400
@@ -2351,25 +2351,14 @@ pk_transaction_authorize_actions_finishe
 
 	/* 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) {
