Hello community, here is the log from the commit of package gnome-packagekit for openSUSE:Factory checked in at 2016-08-16 13:01:37 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gnome-packagekit (Old) and /work/SRC/openSUSE:Factory/.gnome-packagekit.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gnome-packagekit" Changes: -------- --- /work/SRC/openSUSE:Factory/gnome-packagekit/gnome-packagekit.changes 2016-07-27 16:07:57.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.gnome-packagekit.new/gnome-packagekit.changes 2016-08-16 13:01:38.000000000 +0200 @@ -1,0 +2,7 @@ +Thu Aug 4 01:24:20 CEST 2016 - h...@suse.com + +- Add bnc#881245-update-test-affects-package-manager-should-restart-gpk-update-viewer.patch + (bsc#881245), bnc#939278-gnome-packagekit-asks-for-reboot-password-too-early.patch + (bsc#939278), bnc-946886-install-signatures-in-viewer.patch (bsc#946886). + +------------------------------------------------------------------- New: ---- bnc#881245-update-test-affects-package-manager-should-restart-gpk-update-viewer.patch bnc#939278-gnome-packagekit-asks-for-reboot-password-too-early.patch bnc-946886-install-signatures-in-viewer.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gnome-packagekit.spec ++++++ --- /var/tmp/diff_new_pack.DEOE6D/_old 2016-08-16 13:01:39.000000000 +0200 +++ /var/tmp/diff_new_pack.DEOE6D/_new 2016-08-16 13:01:39.000000000 +0200 @@ -1,7 +1,7 @@ # # spec file for package gnome-packagekit # -# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2016 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -31,6 +31,12 @@ Patch0: gnome-packagekit-displaysize.patch # PATCH-FEATURE-OPENSUSE -- Only show gnome-packagekit in gnome. Patch1: gnome-packagekit-OnlyShowIn.patch +# PATCH-FIX-SLED bnc#881245-update-test-affects-package-manager-should-restart-gpk-update-viewer.patch r...@suse.com -- Restart gpk-update-viewer after certain update. +Patch2: bnc#881245-update-test-affects-package-manager-should-restart-gpk-update-viewer.patch +# PATCH-FIX-UPSTREAM bnc-946886-install-signatures-in-viewer.patch bsc#946886 mgo...@suse.com -- install signatures in gpk-update-viewer if needed. +Patch3: bnc-946886-install-signatures-in-viewer.patch +# PATCH-FIX-SLED bnc#939278-gnome-packagekit-asks-for-reboot-password-too-early.patch r...@suse.com -- Fixed asks for passwd too early. +Patch4: bnc#939278-gnome-packagekit-asks-for-reboot-password-too-early.patch BuildRequires: PackageKit-devel BuildRequires: desktop-file-utils BuildRequires: docbook-utils-minimal @@ -82,6 +88,9 @@ # Disabled as a test, I suspect upstream solved the issue an other way. #%%patch0 -p1 %patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 %build %configure \ ++++++ bnc#881245-update-test-affects-package-manager-should-restart-gpk-update-viewer.patch ++++++ diff -urp gnome-packagekit-3.20.0.orig/src/gpk-update-viewer.c gnome-packagekit-3.20.0/src/gpk-update-viewer.c --- gnome-packagekit-3.20.0.orig/src/gpk-update-viewer.c 2015-08-19 07:49:32.000000000 -0500 +++ gnome-packagekit-3.20.0/src/gpk-update-viewer.c 2016-04-13 15:42:44.669318353 -0500 @@ -220,7 +220,17 @@ gpk_update_viewer_check_restart (void) message = _("Some of the updates that were installed require you to log out and back in before the changes will be applied."); /* TRANSLATORS: the button text for the log out */ button = _("Log Out"); - + } else if (restart_update == PK_RESTART_ENUM_APPLICATION) { + /* TRANSLATORS: the message text for the application restart */ + message = _("Some of the updates that were installed require you to restart this application before the changes will be applied."); + /* TRANSLATORS: the button text for the application restart */ + button = _("Restart Application"); + + ret = pk_control_suggest_daemon_quit (control, cancellable, &error); + if (!ret) { + gpk_update_viewer_error_dialog (_("Could not terminate PackageKit"), NULL, error->message); + g_error_free (error); + } } else if (restart_update == PK_RESTART_ENUM_SECURITY_SESSION) { /* TRANSLATORS: the message text for the log out */ message = _("Some of the updates that were installed require you to log out and back in to remain secure."); @@ -273,6 +283,21 @@ gpk_update_viewer_check_restart (void) g_error_free (error); } #endif + } else if (restart_update == PK_RESTART_ENUM_APPLICATION) { + char cmd[256] = {0}; + /* need to wait for PackageKit to finish too */ + sprintf(cmd, "/bin/bash -c 'while ps -p %d > /dev/null; do sleep 1; done; while pgrep packagekitd > /dev/null; do sleep 1; done;/usr/bin/gpk-update-viewer'", getpid()); + + /* restart asynchronously after gpk-update-viewer was quit */ + ret = g_spawn_command_line_async (cmd, &error); + + if (!ret) { + gpk_update_viewer_error_dialog (_("Could not restart application"), NULL, error->message); + g_error_free (error); + } + + /* needed to force gpk-update-viewer to quit */ + ret = FALSE; } out: return ret; @@ -461,6 +486,7 @@ gpk_update_viewer_update_packages_cb (Pk /* check restart */ if (restart_update == PK_RESTART_ENUM_SYSTEM || restart_update == PK_RESTART_ENUM_SESSION || + restart_update == PK_RESTART_ENUM_APPLICATION || restart_update == PK_RESTART_ENUM_SECURITY_SESSION || restart_update == PK_RESTART_ENUM_SECURITY_SYSTEM) { gpk_update_viewer_check_restart (); @@ -2066,6 +2092,10 @@ gpk_update_viewer_populate_details (PkUp /* TRANSLATORS: reboot required */ gtk_text_buffer_insert_with_tags_by_name (text_buffer, &iter, _("The computer will have to be restarted after the update for the changes to take effect."), -1, "para", NULL); gtk_text_buffer_insert (text_buffer, &iter, "\n", -1); + } else if (restart == PK_RESTART_ENUM_APPLICATION) { + /* TRANSLATORS: application restart required */ + gtk_text_buffer_insert_with_tags_by_name (text_buffer, &iter, _("This application will have to be restarted after the update for the changes to take effect."), -1, "para", NULL); + gtk_text_buffer_insert (text_buffer, &iter, "\n", -1); } else if (restart == PK_RESTART_ENUM_SESSION) { /* TRANSLATORS: log out required */ gtk_text_buffer_insert_with_tags_by_name (text_buffer, &iter, _("You will need to log out and back in after the update for the changes to take effect."), -1, "para", NULL); ++++++ bnc#939278-gnome-packagekit-asks-for-reboot-password-too-early.patch ++++++ Index: gnome-packagekit-3.10.1/src/systemd-proxy.c =================================================================== --- gnome-packagekit-3.10.1.orig/src/systemd-proxy.c +++ gnome-packagekit-3.10.1/src/systemd-proxy.c @@ -63,27 +63,6 @@ systemd_proxy_can_restart (SystemdProxy gboolean *can_restart, GError **error) { - PolkitAuthorizationResult *res; - GError *local_error = NULL; - - *can_restart = FALSE; - res = polkit_authority_check_authorization_sync (proxy->authority, - proxy->subject, - SYSTEMD_REBOOT_ACTION, - NULL, - POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION, - NULL, - &local_error); - if (res == NULL) { - g_propagate_error (error, local_error); - return FALSE; - } - - *can_restart = polkit_authorization_result_get_is_authorized (res) || - polkit_authorization_result_get_is_challenge (res); - - g_object_unref (res); - return TRUE; } @@ -91,17 +70,32 @@ gboolean systemd_proxy_restart (SystemdProxy *proxy, GError **error) { - GDBusConnection *bus; - - bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL); - g_dbus_connection_call_sync (bus, - SYSTEMD_DBUS_NAME, - SYSTEMD_DBUS_PATH, - SYSTEMD_DBUS_INTERFACE, - "Reboot", - g_variant_new ("(b)", TRUE), - NULL, 0, G_MAXINT, NULL, NULL); - g_object_unref (bus); - - return TRUE; + PolkitAuthorizationResult *res; + GDBusConnection *bus; + GError *local_error = NULL; + + res = polkit_authority_check_authorization_sync (proxy->authority, + proxy->subject, + SYSTEMD_REBOOT_ACTION, + NULL, + POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION, + NULL, + &local_error); + if (res == NULL) { + g_propagate_error (error, local_error); + return FALSE; + } else if (polkit_authorization_result_get_is_authorized (res) || + polkit_authorization_result_get_is_challenge (res)) { + bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL); + g_dbus_connection_call_sync (bus, + SYSTEMD_DBUS_NAME, + SYSTEMD_DBUS_PATH, + SYSTEMD_DBUS_INTERFACE, + "Reboot", + g_variant_new ("(b)", TRUE), + NULL, 0, G_MAXINT, NULL, NULL); + g_object_unref (bus); + } + + return TRUE; } ++++++ bnc-946886-install-signatures-in-viewer.patch ++++++ >From e5582ec970aa61006167e70d2fb5bdd5bcfc8254 Mon Sep 17 00:00:00 2001 From: Mike Gorse <mgo...@suse.com> Date: Thu, 22 Oct 2015 15:51:08 -0500 Subject: [PATCH] gpk-update-viewer: offer to install signatures if needed https://bugzilla.gnome.org/show_bug.cgi?id=756991 --- src/gpk-update-viewer.c | 237 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 237 insertions(+) diff --git a/src/gpk-update-viewer.c b/src/gpk-update-viewer.c index 9b08f18..241f034 100644 --- a/src/gpk-update-viewer.c +++ b/src/gpk-update-viewer.c @@ -63,6 +63,7 @@ static GCancellable *cancellable = NULL; static GSettings *settings = NULL; static GPtrArray *update_array = NULL; static GtkBuilder *builder = NULL; +static GtkBuilder *builder_signature = NULL; static GtkTreeStore *array_store_updates = NULL; static GtkTextBuffer *text_buffer = NULL; static PkControl *control = NULL; @@ -74,6 +75,10 @@ static GtkWidget *info_mobile_label = NULL; static GtkApplication *application = NULL; static PkBitfield roles = 0; static gboolean have_available_distro_upgrades = FALSE; +static GtkWindow *current_window = NULL; +static PkResults *last_results; +static gboolean need_signature_for_distro = FALSE; +static gboolean need_signature_for_update = FALSE; enum { GPK_UPDATES_COLUMN_TEXT, @@ -2628,6 +2633,168 @@ gpk_update_viewer_packages_to_ids (GPtrArray *array) return value; } +static void +gpk_update_viewer_get_distro_upgrades_cb (PkClient *client, GAsyncResult *res, gpointer user_data); + +static void +gpk_update_viewer_install_signatures_ready_cb (GObject *source_object, GAsyncResult *res, gpointer data) +{ + PkResults *results = NULL; + GError *error = NULL; + PkExitEnum exit_enum; + + /* get the results */ + results = pk_client_generic_finish (PK_CLIENT(task), res, &error); + if (results == NULL) { + /* TRANSLATORS: the PackageKit request did not complete, and it did not send an error */ + gpk_update_viewer_error_dialog (_("Could not get updates"), NULL, error->message); + g_error_free (error); + return; + } + + /* get exit code */ + exit_enum = pk_results_get_exit_code (results); + + /* need untrusted */ + if (exit_enum != PK_EXIT_ENUM_SUCCESS) { + PkError *error_code = NULL; + error_code = pk_results_get_error_code (results); + /* TODO: convert the PkErrorEnum to a PK_CLIENT_ERROR_* enum */ + g_set_error (&error, + PK_CLIENT_ERROR, + PK_CLIENT_ERROR_FAILED, "failed to install signature: %s", pk_error_get_details (error_code)); + g_object_unref (error_code); + return; + } + + /* now try the action again */ + if (need_signature_for_update) + gpk_update_viewer_get_new_update_array (); + + if (need_signature_for_distro) + pk_client_get_distro_upgrades_async (PK_CLIENT(task), cancellable, + (PkProgressCallback) gpk_update_viewer_progress_cb, NULL, + (GAsyncReadyCallback) gpk_update_viewer_get_distro_upgrades_cb, NULL); + + need_signature_for_distro = FALSE; + need_signature_for_update = FALSE; + g_object_unref (results); +} + +static void +gpk_update_viewer_install_signatures (PkResults *results) +{ + PkRepoSignatureRequired *item; + PkSigTypeEnum type; + GError *error = NULL; + gchar *key_id = NULL; + gchar *package_id = NULL; + GPtrArray *array = NULL; + + /* get results */ + array = pk_results_get_repo_signature_required_array (results); + if (array == NULL || array->len == 0) { + g_set_error (&error, + PK_CLIENT_ERROR, + PK_CLIENT_ERROR_FAILED, "no signatures to install"); + return; + } + + /* did we get more than result? */ + if (array->len > 1) { + /* TODO: support more than one signature */ + g_set_error (&error, + PK_CLIENT_ERROR, + PK_CLIENT_ERROR_FAILED, "more than one signature to install"); + g_ptr_array_unref (array); + return; + } + + /* get first item of data */ + item = g_ptr_array_index (array, 0); + g_object_get (item, + "type", &type, + "key-id", &key_id, + "package-id", &package_id, + NULL); + + /* do new async method */ + pk_client_install_signature_async (PK_CLIENT(task), type, key_id, package_id, + cancellable, (PkProgressCallback) gpk_update_viewer_progress_cb, NULL, + gpk_update_viewer_install_signatures_ready_cb, NULL); + + g_free (key_id); + g_free (package_id); + g_ptr_array_unref (array); +} + +static void +gpk_update_viewer_key_question (PkResults *results) +{ + GPtrArray *array; + GtkWidget *widget; + gchar *printable = NULL; + gchar *package_id = NULL; + gchar *repository_name = NULL; + gchar *key_url = NULL; + gchar *key_userid = NULL; + gchar *key_id = NULL; + PkRepoSignatureRequired *item; + const gchar *help_id; + GtkWindow *main_window; + + /* get data */ + array = pk_results_get_repo_signature_required_array (results); + if (array->len != 1) { + g_warning ("array length %i, aborting", array->len); + goto out; + } + + /* only one item supported */ + item = g_ptr_array_index (array, 0); + g_object_get (item, + "package-id", &package_id, + "repository-name", &repository_name, + "key-url", &key_url, + "key-userid", &key_userid, + "key-id", &key_id, + NULL); + + /* show correct text */ + widget = GTK_WIDGET (gtk_builder_get_object (builder_signature, "label_name")); + gtk_label_set_label (GTK_LABEL (widget), repository_name); + widget = GTK_WIDGET (gtk_builder_get_object (builder_signature, "label_url")); + gtk_label_set_label (GTK_LABEL (widget), key_url); + widget = GTK_WIDGET (gtk_builder_get_object (builder_signature, "label_user")); + gtk_label_set_label (GTK_LABEL (widget), key_userid); + widget = GTK_WIDGET (gtk_builder_get_object (builder_signature, "label_id")); + gtk_label_set_label (GTK_LABEL (widget), key_id); + + printable = pk_package_id_to_printable (package_id); + widget = GTK_WIDGET (gtk_builder_get_object (builder_signature, "label_package")); + gtk_label_set_label (GTK_LABEL (widget), printable); + + /* show window */ + current_window = GTK_WINDOW(gtk_builder_get_object (builder_signature, "dialog_gpg")); + main_window = GTK_WINDOW(gtk_builder_get_object (builder, "dialog_updates")); + gtk_window_set_transient_for (current_window, main_window); + gtk_window_set_modal (current_window, TRUE); + /* this is a modal popup, so don't show a window title */ + gtk_window_set_title (current_window, ""); + help_id = "gpg-signature"; + last_results = g_object_ref (results); + gtk_widget_show (GTK_WIDGET (current_window)); + +out: + g_free (printable); + g_free (package_id); + g_free (repository_name); + g_free (key_url); + g_free (key_userid); + g_free (key_id); + g_ptr_array_unref (array); +} + /** * gpk_update_viewer_get_updates_cb: **/ @@ -2655,6 +2822,7 @@ gpk_update_viewer_get_updates_cb (PkClient *client, GAsyncResult *res, gpointer PkInfoEnum info; gchar *package_id = NULL; gchar *summary = NULL; + PkExitEnum exit_enum; /* get the results */ results = pk_client_generic_finish (client, res, &error); @@ -2665,6 +2833,16 @@ gpk_update_viewer_get_updates_cb (PkClient *client, GAsyncResult *res, gpointer goto out; } + exit_enum = pk_results_get_exit_code(results); + if (exit_enum == PK_EXIT_ENUM_KEY_REQUIRED) { + need_signature_for_update = TRUE; + if (!need_signature_for_distro) + gpk_update_viewer_key_question (results); + g_object_unref (results); + return; + } + + /* check error code */ error_code = pk_results_get_error_code (results); if (error_code != NULL) { @@ -3072,6 +3250,7 @@ gpk_update_viewer_get_distro_upgrades_cb (PkClient *client, GAsyncResult *res, g GtkWidget *widget; PkError *error_code = NULL; GtkWindow *window; + PkExitEnum exit_enum; /* get the results */ results = pk_client_generic_finish (client, res, &error); @@ -3087,6 +3266,15 @@ gpk_update_viewer_get_distro_upgrades_cb (PkClient *client, GAsyncResult *res, g if (error_code != NULL) { g_warning ("failed to get list of distro upgrades: %s, %s", pk_error_enum_to_string (pk_error_get_code (error_code)), pk_error_get_details (error_code)); + exit_enum = pk_results_get_exit_code(results); + if (exit_enum == PK_EXIT_ENUM_KEY_REQUIRED) { + need_signature_for_distro = TRUE; + if (!need_signature_for_update) + gpk_update_viewer_key_question (results); + g_object_unref (results); + return; + } + window = GTK_WINDOW(gtk_builder_get_object (builder, "dialog_updates")); gpk_error_dialog_modal (window, gpk_error_enum_to_localised_text (pk_error_get_code (error_code)), gpk_error_enum_to_localised_message (pk_error_get_code (error_code)), pk_error_get_details (error_code)); @@ -3186,6 +3374,53 @@ gpk_update_viewer_activate_cb (GtkApplication *_application, gpointer user_data) gtk_window_present (window); } +static void +gpk_update_viewer_button_decline_cb (GtkWidget *widget, gpointer data) +{ + gtk_widget_hide (GTK_WIDGET(current_window)); + current_window = NULL; +} + +static void +gpk_update_viewer_button_accept_cb (GtkWidget *widget, gpointer data) +{ + gtk_widget_hide (GTK_WIDGET(current_window)); + current_window = NULL; + gpk_update_viewer_install_signatures (last_results); + g_object_unref (last_results); +} + +static void +gpk_update_viewer_setup_dialog_signature () +{ + GtkWidget *widget; + guint retval; + GError *error = NULL; + + /* get UI */ + builder_signature = gtk_builder_new (); + retval = gtk_builder_add_from_file (builder_signature, GPK_DATA "/gpk-signature.ui", &error); + if (retval == 0) { + g_warning ("failed to load ui: %s", error->message); + g_error_free (error); + return; + } + + /* connect up default actions */ + widget = GTK_WIDGET (gtk_builder_get_object (builder_signature, "dialog_gpg")); + g_signal_connect (widget, "delete_event", G_CALLBACK (gpk_update_viewer_button_decline_cb), task); + + /* set icon name */ + widget = GTK_WIDGET (gtk_builder_get_object (builder_signature, "dialog_gpg")); + gtk_window_set_icon_name (GTK_WINDOW(widget), GPK_ICON_SOFTWARE_INSTALLER); + + /* connect up buttons */ + widget = GTK_WIDGET (gtk_builder_get_object (builder_signature, "button_yes")); + g_signal_connect (widget, "clicked", G_CALLBACK (gpk_update_viewer_button_accept_cb), NULL); + widget = GTK_WIDGET (gtk_builder_get_object (builder_signature, "button_no")); + g_signal_connect (widget, "clicked", G_CALLBACK (gpk_update_viewer_button_decline_cb), NULL); +} + /** * gpk_update_viewer_application_startup_cb: **/ @@ -3243,6 +3478,8 @@ gpk_update_viewer_application_startup_cb (GtkApplication *_application, gpointer goto out; } + gpk_update_viewer_setup_dialog_signature (); + main_window = GTK_WIDGET(gtk_builder_get_object (builder, "dialog_updates")); gtk_window_set_icon_name (GTK_WINDOW(main_window), GPK_ICON_SOFTWARE_UPDATE); gtk_application_add_window (application, GTK_WINDOW(main_window)); -- 2.1.4