From 09f1b48f8e43c2d6f327c8d805ad9a9ea6ba7234 Mon Sep 17 00:00:00 2001 From: Toshaan Bharvani Date: Fri, 22 Dec 2023 16:46:23 +0100 Subject: [PATCH] update to version 2.70.2 Signed-off-by: Toshaan Bharvani --- SOURCES/gdesktopappinfo.patch | 855 ++++++++++++++++++++++++++++++++++ SOURCES/gnutls-hmac.patch | 58 ++- SPECS/glib2.spec | 201 ++++---- 3 files changed, 973 insertions(+), 141 deletions(-) create mode 100644 SOURCES/gdesktopappinfo.patch diff --git a/SOURCES/gdesktopappinfo.patch b/SOURCES/gdesktopappinfo.patch new file mode 100644 index 0000000..786ac7c --- /dev/null +++ b/SOURCES/gdesktopappinfo.patch @@ -0,0 +1,855 @@ +From 5e42384cc4499293259a8a37a737014a56de34df Mon Sep 17 00:00:00 2001 +From: Benjamin Berg +Date: Fri, 23 Oct 2020 18:20:01 +0200 +Subject: [PATCH 1/4] tests: Iterate mainloop during launch test + +When launching an application, we wait for the DBus response from +systemd before executing the binary. Because of this the main loop needs +to be iterated for spawning to completed and the file to be created. + +Without this the test will time out if GLib was able to connect to the +session bus. +--- + gio/tests/desktop-app-info.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/gio/tests/desktop-app-info.c b/gio/tests/desktop-app-info.c +index fcc29c579..743230cbb 100644 +--- a/gio/tests/desktop-app-info.c ++++ b/gio/tests/desktop-app-info.c +@@ -334,6 +334,7 @@ wait_for_file (const gchar *want_this, + */ + while (access (want_this, F_OK) != 0) + { ++ g_main_context_iteration (NULL, FALSE); + g_usleep (100000); /* 100ms */ + g_assert_cmpuint (retries, >, 0); + retries--; +-- +2.31.1 + +From ba3b85a8fea0151e74de50e841a7f16f9b077a56 Mon Sep 17 00:00:00 2001 +From: Benjamin Berg +Date: Mon, 27 Jul 2020 22:22:32 +0200 +Subject: [PATCH 2/4] gdesktopappinfo: Move launched applications into + transient scope + +Try to move the spawned executable into its own systemd scope. To avoid +possible race conditions and ensure proper accounting, we delay the +execution of the real command until after the DBus call to systemd has +finished. + +From the two approaches we can take here, this is better in the sense +that we have a child that the API consumer can watch. API consumers +should not be doing this, however, gnome-session needs to watch children +during session startup. Until gnome-session is fixed, we will not be +able to change this. + +The alternative approach is to delegate launching itself to systemd by +creating a transient .service unit instead. This is cleaner and has e.g. +the advantage that systemd will take care of log redirection and similar +issues. + +Note that this patch is incomplete. The DBus call is done in a "fire and +forget" manner, which is fine in most cases, but means that "gio open" +will fail to move the child into the new scope as gio quits before the +DBus call finishes. +--- + gio/gdesktopappinfo.c | 264 ++++++++++++++++++++++++++++++++++++------ + 1 file changed, 227 insertions(+), 37 deletions(-) + +diff --git a/gio/gdesktopappinfo.c b/gio/gdesktopappinfo.c +index 1a4b97918..afdcd42ac 100644 +--- a/gio/gdesktopappinfo.c ++++ b/gio/gdesktopappinfo.c +@@ -2730,6 +2730,148 @@ notify_desktop_launch (GDBusConnection *session_bus, + + #define _SPAWN_FLAGS_DEFAULT (G_SPAWN_SEARCH_PATH) + ++#if defined(__linux__) && !defined(__BIONIC__) ++typedef struct { ++ int pipe[2]; ++ GSpawnChildSetupFunc user_setup; ++ gpointer user_setup_data; ++} SpawnWrapperData; ++ ++static void ++launch_uris_with_spawn_delay_exec (gpointer user_data) ++{ ++ SpawnWrapperData *data = user_data; ++ ++ /* Clear CLOEXEC again, as that was set due to ++ * G_SPAWN_LEAVE_DESCRIPTORS_OPEN not being set. */ ++ fcntl (data->pipe[0], F_SETFD, 0); ++ ++ /* No need to close read side, we have CLOEXEC set. */ ++ ++ if (data->user_setup) ++ data->user_setup (data->user_setup_data); ++} ++ ++static gchar * ++systemd_unit_name_escape (const gchar *in) ++{ ++ /* Adapted from systemd source */ ++ GString * const str = g_string_sized_new (strlen (in)); ++ ++ for (; *in; in++) ++ { ++ if (g_ascii_isalnum (*in) || *in == ':' || *in == '_' || *in == '.') ++ g_string_append_c (str, *in); ++ else ++ g_string_append_printf (str, "\\x%02x", *in); ++ } ++ return g_string_free (str, FALSE); ++} ++ ++static void ++create_systemd_scope (GDBusConnection *session_bus, ++ GDesktopAppInfo *info, ++ gint pid, ++ GAsyncReadyCallback callback, ++ gpointer user_data) ++{ ++ GVariantBuilder builder; ++ const char *app_name = g_get_application_name (); ++ char *appid = NULL; ++ char *appid_escaped = NULL; ++ char *snid_escaped = NULL; ++ char *unit_name = NULL; ++ ++ /* In this order: ++ * 1. Actual application ID from file ++ * 2. Stripping the .desktop from the desktop ID ++ * 3. Fall back to using the binary name ++ */ ++ if (info->app_id) ++ appid = g_strdup (info->app_id); ++ else if (info->desktop_id && g_str_has_suffix (info->desktop_id, ".desktop")) ++ appid = g_strndup (info->desktop_id, strlen (info->desktop_id) - 8); ++ else ++ appid = g_path_get_basename (info->binary); ++ ++ appid_escaped = systemd_unit_name_escape (appid); ++ ++ /* Generate a name conforming to ++ * https://systemd.io/DESKTOP_ENVIRONMENTS/ ++ * We use the PID to disambiguate, as that should be unique enough. ++ */ ++ unit_name = g_strdup_printf ("app-glib-%s-%d.scope", appid_escaped, pid); ++ ++ g_variant_builder_init (&builder, G_VARIANT_TYPE ("(ssa(sv)a(sa(sv)))")); ++ g_variant_builder_add (&builder, "s", unit_name); ++ g_variant_builder_add (&builder, "s", "fail"); ++ ++ g_variant_builder_open (&builder, G_VARIANT_TYPE ("a(sv)")); ++ ++ /* Add a generic human readable description, can be changed at will. */ ++ if (app_name) ++ g_variant_builder_add (&builder, ++ "(sv)", ++ "Description", ++ g_variant_new_take_string (g_strdup_printf ("Application launched by %s", ++ app_name))); ++ g_variant_builder_add (&builder, ++ "(sv)", ++ "PIDs", ++ g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32, &pid, 1, 4)); ++ /* Default to let systemd garbage collect failed applications we launched. */ ++ g_variant_builder_add (&builder, ++ "(sv)", ++ "CollectMode", ++ g_variant_new_string ("inactive-or-failed")); ++ ++ g_variant_builder_close (&builder); ++ ++ g_variant_builder_open (&builder, G_VARIANT_TYPE ("a(sa(sv))")); ++ g_variant_builder_close (&builder); ++ ++ g_dbus_connection_call (session_bus, ++ "org.freedesktop.systemd1", ++ "/org/freedesktop/systemd1", ++ "org.freedesktop.systemd1.Manager", ++ "StartTransientUnit", ++ g_variant_builder_end (&builder), ++ G_VARIANT_TYPE ("(o)"), ++ G_DBUS_CALL_FLAGS_NO_AUTO_START, ++ 1000, ++ NULL, ++ callback, ++ user_data); ++ ++ g_free (appid); ++ g_free (appid_escaped); ++ g_free (snid_escaped); ++ g_free (unit_name); ++} ++ ++static void ++systemd_scope_created_cb (GObject *object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ GVariant *res = NULL; ++ GError *error = NULL; ++ ++ res = g_dbus_connection_call_finish (G_DBUS_CONNECTION (object), result, &error); ++ if (error != NULL) ++ { ++ g_debug ("Failed to move new child into scope: %s", error->message); ++ g_error_free (error); ++ } ++ ++ /* Unblock the waiting wrapper binary. */ ++ close (GPOINTER_TO_INT (user_data)); ++ ++ if (res) ++ g_variant_unref (res); ++} ++#endif ++ + static gboolean + g_desktop_app_info_launch_uris_with_spawn (GDesktopAppInfo *info, + GDBusConnection *session_bus, +@@ -2750,13 +2892,14 @@ g_desktop_app_info_launch_uris_with_spawn (GDesktopAppInfo *info, + GList *old_uris; + GList *dup_uris; + +- char **argv, **envp; ++ GStrv argv = NULL, envp = NULL; ++ GStrv wrapped_argv = NULL; ++ GList *launched_uris = NULL; ++ char *sn_id = NULL; + int argc; + + g_return_val_if_fail (info != NULL, FALSE); + +- argv = NULL; +- + if (launch_context) + envp = g_app_launch_context_get_environment (launch_context); + else +@@ -2770,27 +2913,19 @@ g_desktop_app_info_launch_uris_with_spawn (GDesktopAppInfo *info, + do + { + GPid pid; +- GList *launched_uris; + GList *iter; +- char *sn_id = NULL; +- char **wrapped_argv; + int i; +- gsize j; +- const gchar * const wrapper_argv[] = +- { +- "/bin/sh", +- "-e", +- "-u", +- "-c", "export GIO_LAUNCHED_DESKTOP_FILE_PID=$$; exec \"$@\"", +- "sh", /* argv[0] for sh */ +- }; ++#if defined(__linux__) && !defined(__BIONIC__) ++ SpawnWrapperData wrapper_data; ++#endif ++ GSpawnChildSetupFunc setup = user_setup; ++ gpointer setup_data = user_setup_data; + + old_uris = dup_uris; + if (!expand_application_parameters (info, exec_line, &dup_uris, &argc, &argv, error)) +- goto out; ++ return FALSE; + + /* Get the subset of URIs we're launching with this process */ +- launched_uris = NULL; + for (iter = old_uris; iter != NULL && iter != dup_uris; iter = iter->next) + launched_uris = g_list_prepend (launched_uris, iter->data); + launched_uris = g_list_reverse (launched_uris); +@@ -2799,7 +2934,7 @@ g_desktop_app_info_launch_uris_with_spawn (GDesktopAppInfo *info, + { + g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, + _("Unable to find terminal required for application")); +- goto out; ++ return FALSE; + } + + if (info->filename) +@@ -2808,7 +2943,6 @@ g_desktop_app_info_launch_uris_with_spawn (GDesktopAppInfo *info, + info->filename, + TRUE); + +- sn_id = NULL; + if (launch_context) + { + GList *launched_files = create_files_for_uris (launched_uris); +@@ -2837,38 +2971,93 @@ g_desktop_app_info_launch_uris_with_spawn (GDesktopAppInfo *info, + * with a wrapper program (grep the GLib git history for + * `gio-launch-desktop` for an example of this which could be + * resurrected). */ +- wrapped_argv = g_new (char *, argc + G_N_ELEMENTS (wrapper_argv) + 1); ++ wrapped_argv = g_new (char *, argc + 6 + 1); ++ ++ wrapped_argv[0] = g_strdup ("/bin/sh"); ++ wrapped_argv[1] = g_strdup ("-e"); ++ wrapped_argv[2] = g_strdup ("-u"); ++ wrapped_argv[3] = g_strdup ("-c"); ++ /* argument 4 is filled in below */ ++ wrapped_argv[5] = g_strdup ("sh"); + +- for (j = 0; j < G_N_ELEMENTS (wrapper_argv); j++) +- wrapped_argv[j] = g_strdup (wrapper_argv[j]); + for (i = 0; i < argc; i++) +- wrapped_argv[i + G_N_ELEMENTS (wrapper_argv)] = g_steal_pointer (&argv[i]); ++ wrapped_argv[i + 6] = g_steal_pointer (&argv[i]); ++ ++ wrapped_argv[i + 6] = NULL; ++ g_clear_pointer (&argv, g_free); ++ ++#if defined(__linux__) && !defined(__BIONIC__) ++ /* Create pipes, if we use a setup func, then set cloexec, ++ * otherwise our wrapper script will close both sides. */ ++ if (!g_unix_open_pipe (wrapper_data.pipe, 0, NULL)) ++ { ++ g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, ++ _("Unable to create pipe for systemd synchronization")); ++ return FALSE; ++ } ++ ++ /* Set CLOEXEC on the write pipe, so we don't need to deal with it in the child. */ ++ fcntl (wrapper_data.pipe[1], F_SETFD, FD_CLOEXEC); + +- wrapped_argv[i + G_N_ELEMENTS (wrapper_argv)] = NULL; +- g_free (argv); +- argv = NULL; ++ if (!(spawn_flags & G_SPAWN_LEAVE_DESCRIPTORS_OPEN)) ++ { ++ /* In this case, we use a setup function (which could probably also ++ * overwrite envp to set GIO_LAUNCHED_DESKTOP_FILE_PID). ++ * ++ * Note that this does not incur an additional cost because ++ * G_SPAWN_LEAVE_DESCRIPTOR_OPEN must be set in order to use ++ * posix_spawn. */ ++ wrapper_data.user_setup = setup; ++ wrapper_data.user_setup_data = setup_data; ++ ++ setup = launch_uris_with_spawn_delay_exec; ++ setup_data = &wrapper_data; ++ } ++ ++ wrapped_argv[4] = g_strdup_printf ("export GIO_LAUNCHED_DESKTOP_FILE_PID=$$; cat <&%1$d; exec \"$@\" %1$d<&-", ++ wrapper_data.pipe[0]); ++#else ++ wrapped_argv[4] = g_strdup ("export GIO_LAUNCHED_DESKTOP_FILE_PID=$$; exec \"$@\""); ++#endif + + if (!g_spawn_async_with_fds (info->path, + wrapped_argv, + envp, + spawn_flags, +- user_setup, +- user_setup_data, ++ setup, ++ setup_data, + &pid, + stdin_fd, + stdout_fd, + stderr_fd, + error)) + { ++#if defined(__linux__) && !defined(__BIONIC__) ++ close (wrapper_data.pipe[0]); ++ close (wrapper_data.pipe[1]); ++#endif ++ + if (sn_id) + g_app_launch_context_launch_failed (launch_context, sn_id); + +- g_free (sn_id); +- g_list_free (launched_uris); +- + goto out; + } + ++#if defined(__linux__) && !defined(__BIONIC__) ++ /* We close write side asynchronously later on when the dbus call ++ * to systemd finishes. */ ++ close (wrapper_data.pipe[0]); ++ ++ if (session_bus) ++ create_systemd_scope (session_bus, ++ info, ++ pid, ++ systemd_scope_created_cb, ++ GINT_TO_POINTER (wrapper_data.pipe[1])); ++ else ++ close (wrapper_data.pipe[1]); ++#endif ++ + if (pid_callback != NULL) + pid_callback (info, pid, pid_callback_data); + +@@ -2893,19 +3082,20 @@ g_desktop_app_info_launch_uris_with_spawn (GDesktopAppInfo *info, + sn_id, + launched_uris); + +- g_free (sn_id); +- g_list_free (launched_uris); +- +- g_strfreev (wrapped_argv); +- wrapped_argv = NULL; ++ g_clear_pointer (&sn_id, g_free); ++ g_clear_pointer (&launched_uris, g_list_free); ++ g_clear_pointer (&wrapped_argv, g_strfreev); + } + while (dup_uris != NULL); + + completed = TRUE; + +- out: ++out: + g_strfreev (argv); + g_strfreev (envp); ++ g_clear_pointer (&wrapped_argv, g_strfreev); ++ g_list_free (launched_uris); ++ g_free (sn_id); + + return completed; + } +-- +2.31.1 + +From cd67a1b0256d2397dac0836e154f3449b63a6b19 Mon Sep 17 00:00:00 2001 +From: Benjamin Berg +Date: Tue, 28 Jul 2020 12:11:13 +0200 +Subject: [PATCH 3/4] gdesktopappinfo: Handle task completion from spawn + function + +This allows delaying the return of the task until all dbus calls (in +particular the ones to setup the scope) have finished. + +This fixes the behaviour of the previous commit which would not +correctly move the process into the scope if the application exited +right after the task returned. +--- + gio/gdesktopappinfo.c | 212 +++++++++++++++++++++++++++++------------- + 1 file changed, 146 insertions(+), 66 deletions(-) + +diff --git a/gio/gdesktopappinfo.c b/gio/gdesktopappinfo.c +index afdcd42ac..8d0f1688e 100644 +--- a/gio/gdesktopappinfo.c ++++ b/gio/gdesktopappinfo.c +@@ -2849,11 +2849,17 @@ create_systemd_scope (GDBusConnection *session_bus, + g_free (unit_name); + } + ++typedef struct { ++ GTask *task; ++ int fd; ++} ScopeCreatedData; ++ + static void + systemd_scope_created_cb (GObject *object, + GAsyncResult *result, + gpointer user_data) + { ++ ScopeCreatedData *data = user_data; + GVariant *res = NULL; + GError *error = NULL; + +@@ -2865,13 +2871,47 @@ systemd_scope_created_cb (GObject *object, + } + + /* Unblock the waiting wrapper binary. */ +- close (GPOINTER_TO_INT (user_data)); ++ ++ close (data->fd); ++ ++ if (data->task) ++ { ++ gint pending; ++ pending = GPOINTER_TO_INT (g_task_get_task_data (data->task)); ++ pending -= 1; ++ g_task_set_task_data (data->task, GINT_TO_POINTER (pending), NULL); ++ ++ if (pending == 0 && !g_task_get_completed (data->task)) ++ g_task_return_boolean (data->task, TRUE); ++ } + + if (res) + g_variant_unref (res); ++ g_clear_object (&data->task); ++ g_free (data); + } + #endif + ++static void ++launch_uris_with_spawn_flush_cb (GObject *object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ GTask *task = G_TASK (user_data); ++ gint pending; ++ ++ g_dbus_connection_flush_finish (G_DBUS_CONNECTION (object), result, NULL); ++ ++ pending = GPOINTER_TO_INT (g_task_get_task_data (task)); ++ pending -= 1; ++ g_task_set_task_data (task, GINT_TO_POINTER (pending), NULL); ++ ++ if (pending == 0 && !g_task_get_completed (task)) ++ g_task_return_boolean (task, TRUE); ++ ++ g_object_unref (task); ++} ++ + static gboolean + g_desktop_app_info_launch_uris_with_spawn (GDesktopAppInfo *info, + GDBusConnection *session_bus, +@@ -2886,9 +2926,10 @@ g_desktop_app_info_launch_uris_with_spawn (GDesktopAppInfo *info, + gint stdin_fd, + gint stdout_fd, + gint stderr_fd, +- GError **error) ++ GTask *task, ++ GError **error_out) + { +- gboolean completed = FALSE; ++ GError *error = NULL; + GList *old_uris; + GList *dup_uris; + +@@ -2898,8 +2939,15 @@ g_desktop_app_info_launch_uris_with_spawn (GDesktopAppInfo *info, + char *sn_id = NULL; + int argc; + ++ /* We may get a task to report back on or an error. But never both. */ ++ g_assert (!(task && error_out)); + g_return_val_if_fail (info != NULL, FALSE); + ++ /* Surrounding code must not have set any data on the task ++ * (it is cleared before calling this function). */ ++ if (session_bus && task) ++ g_assert (g_task_get_task_data (task) == NULL); ++ + if (launch_context) + envp = g_app_launch_context_get_environment (launch_context); + else +@@ -2922,8 +2970,8 @@ g_desktop_app_info_launch_uris_with_spawn (GDesktopAppInfo *info, + gpointer setup_data = user_setup_data; + + old_uris = dup_uris; +- if (!expand_application_parameters (info, exec_line, &dup_uris, &argc, &argv, error)) +- return FALSE; ++ if (!expand_application_parameters (info, exec_line, &dup_uris, &argc, &argv, &error)) ++ goto out; + + /* Get the subset of URIs we're launching with this process */ + for (iter = old_uris; iter != NULL && iter != dup_uris; iter = iter->next) +@@ -2932,9 +2980,9 @@ g_desktop_app_info_launch_uris_with_spawn (GDesktopAppInfo *info, + + if (info->terminal && !prepend_terminal_to_vector (&argc, &argv)) + { +- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, +- _("Unable to find terminal required for application")); +- return FALSE; ++ error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_FAILED, ++ _("Unable to find terminal required for application")); ++ goto out; + } + + if (info->filename) +@@ -2991,9 +3039,9 @@ g_desktop_app_info_launch_uris_with_spawn (GDesktopAppInfo *info, + * otherwise our wrapper script will close both sides. */ + if (!g_unix_open_pipe (wrapper_data.pipe, 0, NULL)) + { +- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, +- _("Unable to create pipe for systemd synchronization")); +- return FALSE; ++ error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_FAILED, ++ _("Unable to create pipe for systemd synchronization")); ++ goto out; + } + + /* Set CLOEXEC on the write pipe, so we don't need to deal with it in the child. */ +@@ -3030,7 +3078,7 @@ g_desktop_app_info_launch_uris_with_spawn (GDesktopAppInfo *info, + stdin_fd, + stdout_fd, + stderr_fd, +- error)) ++ &error)) + { + #if defined(__linux__) && !defined(__BIONIC__) + close (wrapper_data.pipe[0]); +@@ -3049,11 +3097,29 @@ g_desktop_app_info_launch_uris_with_spawn (GDesktopAppInfo *info, + close (wrapper_data.pipe[0]); + + if (session_bus) +- create_systemd_scope (session_bus, +- info, +- pid, +- systemd_scope_created_cb, +- GINT_TO_POINTER (wrapper_data.pipe[1])); ++ { ++ ScopeCreatedData *data; ++ ++ data = g_new0 (ScopeCreatedData, 1); ++ ++ if (task) ++ { ++ gint pending; ++ pending = GPOINTER_TO_INT (g_task_get_task_data (task)); ++ pending += 1; ++ g_task_set_task_data (task, GINT_TO_POINTER (pending), NULL); ++ ++ data->task = g_object_ref (task); ++ } ++ ++ data->fd = wrapper_data.pipe[1]; ++ ++ create_systemd_scope (session_bus, ++ info, ++ pid, ++ systemd_scope_created_cb, ++ data); ++ } + else + close (wrapper_data.pipe[1]); + #endif +@@ -3088,8 +3154,6 @@ g_desktop_app_info_launch_uris_with_spawn (GDesktopAppInfo *info, + } + while (dup_uris != NULL); + +- completed = TRUE; +- + out: + g_strfreev (argv); + g_strfreev (envp); +@@ -3097,7 +3161,52 @@ out: + g_list_free (launched_uris); + g_free (sn_id); + +- return completed; ++ if (!error) ++ { ++ if (session_bus && task) ++ { ++ GCancellable *cancellable = g_task_get_cancellable (task); ++ gint pending; ++ pending = GPOINTER_TO_INT (g_task_get_task_data (task)); ++ pending += 1; ++ g_task_set_task_data (task, GINT_TO_POINTER (pending), NULL); ++ ++ /* FIXME: The D-Bus message from the notify_desktop_launch() function ++ * can be still lost even if flush is called later. See: ++ * https://gitlab.freedesktop.org/dbus/dbus/issues/72 ++ */ ++ g_dbus_connection_flush (session_bus, ++ cancellable, ++ launch_uris_with_spawn_flush_cb, ++ g_steal_pointer (&task)); ++ } ++ else if (session_bus) ++ { ++ /* No task available. */ ++ g_dbus_connection_flush (session_bus, ++ NULL, ++ NULL, ++ NULL); ++ } ++ else if (task) ++ { ++ /* Return the given task. */ ++ g_task_return_boolean (task, TRUE); ++ g_object_unref (task); ++ } ++ } ++ else ++ { ++ if (task) ++ { ++ g_task_return_error (task, error); ++ g_object_unref (task); ++ } ++ else ++ g_propagate_error (error_out, error); ++ } ++ ++ return !error; + } + + static gchar * +@@ -3246,17 +3355,9 @@ g_desktop_app_info_launch_uris_internal (GAppInfo *appinfo, + success = g_desktop_app_info_launch_uris_with_spawn (info, session_bus, info->exec, uris, launch_context, + spawn_flags, user_setup, user_setup_data, + pid_callback, pid_callback_data, +- stdin_fd, stdout_fd, stderr_fd, error); ++ stdin_fd, stdout_fd, stderr_fd, NULL, error); + +- if (session_bus != NULL) +- { +- /* This asynchronous flush holds a reference until it completes, +- * which ensures that the following unref won't immediately kill +- * the connection if we were the initial owner. +- */ +- g_dbus_connection_flush (session_bus, NULL, NULL, NULL); +- g_object_unref (session_bus); +- } ++ g_clear_object (&session_bus); + + return success; + } +@@ -3310,18 +3411,6 @@ launch_uris_with_dbus_cb (GObject *object, + g_object_unref (task); + } + +-static void +-launch_uris_flush_cb (GObject *object, +- GAsyncResult *result, +- gpointer user_data) +-{ +- GTask *task = G_TASK (user_data); +- +- g_dbus_connection_flush_finish (G_DBUS_CONNECTION (object), result, NULL); +- g_task_return_boolean (task, TRUE); +- g_object_unref (task); +-} +- + static void + launch_uris_bus_get_cb (GObject *object, + GAsyncResult *result, +@@ -3330,12 +3419,20 @@ launch_uris_bus_get_cb (GObject *object, + GTask *task = G_TASK (user_data); + GDesktopAppInfo *info = G_DESKTOP_APP_INFO (g_task_get_source_object (task)); + LaunchUrisData *data = g_task_get_task_data (task); ++ LaunchUrisData *data_copy = NULL; + GCancellable *cancellable = g_task_get_cancellable (task); + GDBusConnection *session_bus; +- GError *error = NULL; + + session_bus = g_bus_get_finish (result, NULL); + ++ data_copy = g_new0 (LaunchUrisData, 1); ++ data_copy->appinfo = g_steal_pointer (&data->appinfo); ++ data_copy->uris = g_steal_pointer (&data->uris); ++ data_copy->context = g_steal_pointer (&data->context); ++ ++ /* Allow other data to be attached to the task. */ ++ g_task_set_task_data (task, NULL, NULL); ++ + if (session_bus && info->app_id) + { + /* FIXME: The g_document_portal_add_documents() function, which is called +@@ -3343,34 +3440,21 @@ launch_uris_bus_get_cb (GObject *object, + * uses blocking calls. + */ + g_desktop_app_info_launch_uris_with_dbus (info, session_bus, +- data->uris, data->context, ++ data_copy->uris, data_copy->context, + cancellable, + launch_uris_with_dbus_cb, + g_steal_pointer (&task)); + } + else + { +- /* FIXME: The D-Bus message from the notify_desktop_launch() function +- * can be still lost even if flush is called later. See: +- * https://gitlab.freedesktop.org/dbus/dbus/issues/72 +- */ + g_desktop_app_info_launch_uris_with_spawn (info, session_bus, info->exec, +- data->uris, data->context, ++ data_copy->uris, data_copy->context, + _SPAWN_FLAGS_DEFAULT, NULL, + NULL, NULL, NULL, -1, -1, -1, +- &error); +- if (error != NULL) +- { +- g_task_return_error (task, g_steal_pointer (&error)); +- g_object_unref (task); +- } +- else +- g_dbus_connection_flush (session_bus, +- cancellable, +- launch_uris_flush_cb, +- g_steal_pointer (&task)); ++ g_steal_pointer (&task), NULL); + } + ++ launch_uris_data_free (data_copy); + g_clear_object (&session_bus); + } + +@@ -5186,16 +5270,12 @@ g_desktop_app_info_launch_action (GDesktopAppInfo *info, + if (exec_line) + g_desktop_app_info_launch_uris_with_spawn (info, session_bus, exec_line, NULL, launch_context, + _SPAWN_FLAGS_DEFAULT, NULL, NULL, NULL, NULL, +- -1, -1, -1, NULL); ++ -1, -1, -1, NULL, NULL); + + g_free (exec_line); + } + +- if (session_bus != NULL) +- { +- g_dbus_connection_flush (session_bus, NULL, NULL, NULL); +- g_object_unref (session_bus); +- } ++ g_clear_object (&session_bus); + } + /* Epilogue {{{1 */ + +-- +2.31.1 + +From 8da8a3ef6df8af6de8bd388192bebe8b51b3e782 Mon Sep 17 00:00:00 2001 +From: Benjamin Berg +Date: Thu, 17 Sep 2020 17:35:58 +0200 +Subject: [PATCH 4/4] gdesktopappinfo: Add SourcePath= to transient systemd + units + +systemd allows setting a SourcePath= which shows the file that the unit +has been generated from. KDE is starting to set this and it seems like a +good idea, so do the same here. + +See https://invent.kde.org/frameworks/kio/-/merge_requests/124 +--- + gio/gdesktopappinfo.c | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/gio/gdesktopappinfo.c b/gio/gdesktopappinfo.c +index 8d0f1688e..a833de4e6 100644 +--- a/gio/gdesktopappinfo.c ++++ b/gio/gdesktopappinfo.c +@@ -2777,6 +2777,7 @@ create_systemd_scope (GDBusConnection *session_bus, + { + GVariantBuilder builder; + const char *app_name = g_get_application_name (); ++ const char *source_path = NULL; + char *appid = NULL; + char *appid_escaped = NULL; + char *snid_escaped = NULL; +@@ -2802,6 +2803,8 @@ create_systemd_scope (GDBusConnection *session_bus, + */ + unit_name = g_strdup_printf ("app-glib-%s-%d.scope", appid_escaped, pid); + ++ source_path = g_desktop_app_info_get_filename (info); ++ + g_variant_builder_init (&builder, G_VARIANT_TYPE ("(ssa(sv)a(sa(sv)))")); + g_variant_builder_add (&builder, "s", unit_name); + g_variant_builder_add (&builder, "s", "fail"); +@@ -2815,6 +2818,16 @@ create_systemd_scope (GDBusConnection *session_bus, + "Description", + g_variant_new_take_string (g_strdup_printf ("Application launched by %s", + app_name))); ++ ++ /* If we have a .desktop file, document that the scope has been "generated" ++ * from it. ++ */ ++ if (source_path && g_utf8_validate (source_path, -1, NULL)) ++ g_variant_builder_add (&builder, ++ "(sv)", ++ "SourcePath", ++ g_variant_new_string (source_path)); ++ + g_variant_builder_add (&builder, + "(sv)", + "PIDs", +-- +2.31.1 diff --git a/SOURCES/gnutls-hmac.patch b/SOURCES/gnutls-hmac.patch index 4b1ba0e..e9b3217 100644 --- a/SOURCES/gnutls-hmac.patch +++ b/SOURCES/gnutls-hmac.patch @@ -1,4 +1,4 @@ -From ff90bb8474b1e724727f4014b446e7c851e609bd Mon Sep 17 00:00:00 2001 +From 561b594fe58c3ea1c6387c64c59f4816c1fd1c38 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Fri, 7 Jun 2019 18:44:43 +0000 Subject: [PATCH 1/4] ghmac: Split off wrapper functions into ghmac-utils.c @@ -284,10 +284,10 @@ index 49fd272f0..4f181f21f 100644 - (const guchar *) str, length); -} diff --git a/glib/meson.build b/glib/meson.build -index 8c18e6de4..329b8d197 100644 +index 93600b29e..cce338969 100644 --- a/glib/meson.build +++ b/glib/meson.build -@@ -253,6 +253,7 @@ glib_sources = files( +@@ -251,6 +251,7 @@ glib_sources = files( 'ggettext.c', 'ghash.c', 'ghmac.c', @@ -298,7 +298,7 @@ index 8c18e6de4..329b8d197 100644 -- 2.31.1 -From 5395d36e6685e0b7377794c59c5820970bb472ef Mon Sep 17 00:00:00 2001 +From b87b28e06c6300479e292782100e9b94ebb6a140 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Fri, 7 Jun 2019 19:36:54 +0000 Subject: [PATCH 2/4] Add a gnutls backend for GHmac @@ -659,10 +659,10 @@ index 4f181f21f..0e39ea40a 100644 * Use g_hmac_unref() to free the memory allocated by it. * diff --git a/glib/meson.build b/glib/meson.build -index 329b8d197..2417de53d 100644 +index cce338969..1f6bb35d1 100644 --- a/glib/meson.build +++ b/glib/meson.build -@@ -252,7 +252,6 @@ glib_sources = files( +@@ -250,7 +250,6 @@ glib_sources = files( 'gfileutils.c', 'ggettext.c', 'ghash.c', @@ -670,7 +670,7 @@ index 329b8d197..2417de53d 100644 'ghmac-utils.c', 'ghook.c', 'ghostutils.c', -@@ -308,6 +307,7 @@ glib_sources = files( +@@ -306,6 +305,7 @@ glib_sources = files( 'guriprivate.h', 'gutils.c', 'gutilsprivate.h', @@ -678,7 +678,7 @@ index 329b8d197..2417de53d 100644 'guuid.c', 'gvariant.c', 'gvariant-core.c', -@@ -352,6 +352,12 @@ else +@@ -350,6 +350,12 @@ else glib_dtrace_hdr = [] endif @@ -691,20 +691,20 @@ index 329b8d197..2417de53d 100644 pcre_static_args = [] if use_pcre_static_flag -@@ -378,7 +384,7 @@ libglib = library('glib-2.0', +@@ -368,7 +374,7 @@ libglib = library('glib-2.0', # intl.lib is not compatible with SAFESEH link_args : [noseh_link_args, glib_link_flags, win32_ldflags], include_directories : configinc, -- dependencies : pcre_deps + [thread_dep, librt] + libintl_deps + libiconv + platform_deps + [gnulib_libm_dependency, libm] + [libsysprof_capture_dep], -+ dependencies : pcre_deps + [thread_dep, librt] + libgnutls_dep + libintl_deps + libiconv + platform_deps + [gnulib_libm_dependency, libm] + [libsysprof_capture_dep], +- dependencies : [pcre, thread_dep, librt] + libintl_deps + libiconv + platform_deps + [gnulib_libm_dependency, libm] + [libsysprof_capture_dep], ++ dependencies : [pcre, thread_dep, librt] + libgnutls_dep + libintl_deps + libiconv + platform_deps + [gnulib_libm_dependency, libm] + [libsysprof_capture_dep], c_args : glib_c_args, objc_args : glib_c_args, ) diff --git a/meson.build b/meson.build -index e2eba1871..cca15f653 100644 +index 1b54fdcae..98f8925a2 100644 --- a/meson.build +++ b/meson.build -@@ -2090,6 +2090,13 @@ if host_system == 'linux' +@@ -2095,6 +2095,13 @@ if host_system == 'linux' glib_conf.set('HAVE_LIBMOUNT', libmount_dep.found()) endif @@ -719,12 +719,12 @@ index e2eba1871..cca15f653 100644 winsock2 = cc.find_library('ws2_32') endif diff --git a/meson_options.txt b/meson_options.txt -index 072765361..c8f26ac02 100644 +index 6cd7bc90a..65af1d276 100644 --- a/meson_options.txt +++ b/meson_options.txt -@@ -39,6 +39,11 @@ option('internal_pcre', - value : false, - description : 'whether to use internal PCRE') +@@ -34,6 +34,11 @@ option('libmount', + value : 'auto', + description : 'build with libmount support') +option('gnutls', + type : 'boolean', @@ -734,10 +734,17 @@ index 072765361..c8f26ac02 100644 option('man', type : 'boolean', value : false, +@@ -121,4 +126,4 @@ option('glib_checks', + option('libelf', + type : 'feature', + value : 'auto', +- description : 'Enable support for listing and extracting from ELF resource files with gresource tool') +\ No newline at end of file ++ description : 'Enable support for listing and extracting from ELF resource files with gresource tool') -- 2.31.1 -From 61c175277acb8d1e080305acd444201c5ad1fb81 Mon Sep 17 00:00:00 2001 +From 379e559f5aa390272368f83ca3e6af092066ae75 Mon Sep 17 00:00:00 2001 From: Michael Catanzaro Date: Wed, 16 Jun 2021 20:35:00 -0500 Subject: [PATCH 3/4] dlopen GnuTLS instead of linking directly @@ -919,23 +926,23 @@ index 0e39ea40a..2d9be91b8 100644 #endif diff --git a/glib/meson.build b/glib/meson.build -index 2417de53d..ba42951aa 100644 +index 1f6bb35d1..f4041e50c 100644 --- a/glib/meson.build +++ b/glib/meson.build -@@ -384,7 +384,7 @@ libglib = library('glib-2.0', +@@ -374,7 +374,7 @@ libglib = library('glib-2.0', # intl.lib is not compatible with SAFESEH link_args : [noseh_link_args, glib_link_flags, win32_ldflags], include_directories : configinc, -- dependencies : pcre_deps + [thread_dep, librt] + libgnutls_dep + libintl_deps + libiconv + platform_deps + [gnulib_libm_dependency, libm] + [libsysprof_capture_dep], -+ dependencies : pcre_deps + [thread_dep, librt] + libintl_deps + libiconv + platform_deps + [gnulib_libm_dependency, libm] + [libsysprof_capture_dep] + [libdl_dep], +- dependencies : [pcre, thread_dep, librt] + libgnutls_dep + libintl_deps + libiconv + platform_deps + [gnulib_libm_dependency, libm] + [libsysprof_capture_dep], ++ dependencies : [pcre, thread_dep, librt] + libintl_deps + libiconv + platform_deps + [gnulib_libm_dependency, libm] + [libsysprof_capture_dep] + [libdl_dep], c_args : glib_c_args, objc_args : glib_c_args, ) diff --git a/meson.build b/meson.build -index cca15f653..404ef1790 100644 +index 98f8925a2..bbe26e4e4 100644 --- a/meson.build +++ b/meson.build -@@ -2090,11 +2090,9 @@ if host_system == 'linux' +@@ -2095,11 +2095,9 @@ if host_system == 'linux' glib_conf.set('HAVE_LIBMOUNT', libmount_dep.found()) endif @@ -952,7 +959,7 @@ index cca15f653..404ef1790 100644 -- 2.31.1 -From 7d1d96311b6ecd4f90ebbdd6fc58d28e06a86887 Mon Sep 17 00:00:00 2001 +From 54e7d0982c73692e92ddd8eaa328f2fbedf05688 Mon Sep 17 00:00:00 2001 From: Michael Catanzaro Date: Wed, 16 Jun 2021 20:46:24 -0500 Subject: [PATCH 4/4] Add test for GHmac in FIPS mode @@ -1084,3 +1091,4 @@ index 3ac3206df..2fa447984 100644 } -- 2.31.1 + diff --git a/SPECS/glib2.spec b/SPECS/glib2.spec index d871cca..d7d1a75 100644 --- a/SPECS/glib2.spec +++ b/SPECS/glib2.spec @@ -1,47 +1,30 @@ +## START: Set by rpmautospec +## (rpmautospec version 0.2.5) +%define autorelease(e:s:pb:) %{?-p:0.}%{lua: + release_number = 1; + base_release_number = tonumber(rpm.expand("%{?-b*}%{!?-b:1}")); + print(release_number + base_release_number - 1); +}%{?-e:.%{-e*}}%{?-s:.%{-s*}}%{?dist} +## END: Set by rpmautospec + Name: glib2 -Version: 2.68.4 -Release: 11%{?dist} +Version: 2.70.2 +Release: %autorelease Summary: A library of handy utility functions License: LGPLv2+ -URL: http://www.gtk.org -Source0: http://download.gnome.org/sources/glib/2.68/glib-%{version}.tar.xz +URL: https://www.gtk.org +Source0: https://download.gnome.org/sources/glib/2.70/glib-%{version}.tar.xz # Required for RHEL core crypto components policy. Good for Fedora too. # https://bugzilla.redhat.com/show_bug.cgi?id=1630260 # https://gitlab.gnome.org/GNOME/glib/-/merge_requests/903 -Patch: gnutls-hmac.patch - -# Add GPowerProfileMonitor -# https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1965 -# https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2194 -# https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2222 -Patch: 1965.patch -Patch: 2194.patch -Patch: 2222.patch - -# https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2244 -Patch: 2244.patch - -# https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2291 -Patch: 2291.patch - -# https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1968 -Patch: 1968.patch -# https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2435 -Patch: 2435.patch - -# https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3126 -Patch: 3126.patch -# https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3136 -Patch: 3136.patch -# https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3163 -Patch: 3163.patch - -# https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2826 -# https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3272 -Patch: 2826.patch -Patch: 3272.patch +Patch0: gnutls-hmac.patch + +# Add patches to move applications into systemd scopes in compliance with +# https://systemd.io/DESKTOP_ENVIRONMENTS/ +# Proposed upstream at https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1596 +Patch1: gdesktopappinfo.patch BuildRequires: chrpath BuildRequires: gcc @@ -63,6 +46,7 @@ BuildRequires: pkgconfig(mount) BuildRequires: pkgconfig(sysprof-capture-4) BuildRequires: pkgconfig(zlib) BuildRequires: python3-devel +BuildRequires: /usr/bin/marshalparser # For gnutls-hmac.patch. We now dlopen libgnutls.so.30 so that we can build a # static glib2 without depending on a static build of GnuTLS as well. This will @@ -76,9 +60,6 @@ Requires: libgnutls.so.30 # Remove gamin dependency Obsoletes: glib2-fam < 2.67.1-3 -# glib 2.59.0 hash table changes broke older gcr versions / password prompts in gnome-shell -Conflicts: gcr < 3.28.1 - Provides: bundled(gnulib) Provides: bundled(gvdb) Provides: bundled(libcharset) @@ -90,6 +71,7 @@ such as GTK+ and GNOME. It provides data structure handling for C, portability wrappers, and interfaces for such runtime functionality as an event loop, threads, dynamic loading, and an object system. + %package devel Summary: A library of handy utility functions Requires: %{name}%{?_isa} = %{version}-%{release} @@ -124,8 +106,9 @@ the functionality of the installed glib2 package. %autosetup -n glib-%{version} -p1 %build -# Bug 1324770: Also explicitly remove PCRE sources since we use --with-pcre=system -rm glib/pcre/*.[ch] +# No surprise bundled libraries +rm -rf glib/pcre +rm -rf subprojects %meson \ -Dman=true \ @@ -143,19 +126,25 @@ rm glib/pcre/*.[ch] %install %meson_install -# Since this is a generated .py file, set it to a known timestamp for -# better reproducibility. + +# We need reproducible .pyc files across architectures to support multilib installations +# https://bugzilla.redhat.com/show_bug.cgi?id=2008912 +# https://docs.fedoraproject.org/en-US/packaging-guidelines/Python_Appendix/#_byte_compilation_reproducibility +%global py_reproducible_pyc_path %{buildroot}%{_datadir} + +# Since this is a generated .py file, set it to a known timestamp +# because the source timestamp is baked into the .pyc file # Also copy the timestamp for other .py files, because meson doesn't # do this, see https://github.com/mesonbuild/meson/issues/5027. touch -r gio/gdbus-2.0/codegen/config.py.in %{buildroot}%{_datadir}/glib-2.0/codegen/*.py + chrpath --delete %{buildroot}%{_libdir}/*.so # Perform byte compilation manually to avoid issues with # irreproducibility of the default invalidation mode, see # https://www.python.org/dev/peps/pep-0552/ and # https://bugzilla.redhat.com/show_bug.cgi?id=1686078 -export PYTHONHASHSEED=0 -%py_byte_compile %{__python3} %{buildroot}%{_datadir} +%py_byte_compile %{python3} %{buildroot}%{_datadir} mv %{buildroot}%{_bindir}/gio-querymodules %{buildroot}%{_bindir}/gio-querymodules-%{__isa_bits} sed -i -e "/^gio_querymodules=/s/gio-querymodules/gio-querymodules-%{__isa_bits}/" %{buildroot}%{_libdir}/pkgconfig/gio-2.0.pc @@ -258,106 +247,85 @@ glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || : %{_datadir}/installed-tests %changelog -* Wed Jul 19 2023 Michael Catanzaro - 2.68.4-11 -- Really fix authentication failures when sd-bus clients connect to GDBus servers -- Resolves: #2217771 +* Mon Dec 06 2021 Kalev Lember 2.70.2-1 +- Update to 2.70.2 -* Thu Jul 06 2023 Michael Catanzaro - 2.68.4-10 -- Fix authentication failures when sd-bus clients connect to GDBus servers -- Resolves: #2217771 +* Thu Oct 28 2021 Kalev Lember 2.70.1-1 +- Update to 2.70.1 -* Thu May 25 2023 Michael Catanzaro - 2.68.4-9 -- Resolve s390x crashes introduced by fixes for CVE-2023-24593/CVE-2023-25180 -- Related: #2181196 -- Related: #2181200 +* Fri Oct 15 2021 Kalev Lember 2.70.0-5 +- Fix network state monitoring to work with NetworkManager 1.32 (#1991075) -* Wed May 17 2023 Michael Catanzaro - 2.68.4-8 -- Resolve use after free introduced by fixes for CVE-2023-24593/CVE-2023-25180 -- Related: #2181196 -- Related: #2181200 +* Tue Oct 05 2021 Miro HronĨok 2.70.0-4 +- Produce bit-by-bit identical .pyc files across different architectures, + to avoid multilib conflicts -* Fri Mar 24 2023 Michael Catanzaro - 2.68.4-7 -- Fix CVE-2023-24593 and CVE-2023-25180 -- Resolves: #2181196 -- Resolves: #2181200 +* Wed Sep 22 2021 Michael Catanzaro 2.70.0-3 +- Remove workaround for gnome-keyring -* Fri Dec 02 2022 Michael Catanzaro - 2.68.4-6 -- Drop gdesktopappinfo patchset -- Resolves: #2150307 +* Tue Sep 21 2021 Adam Williamson 2.70.0-2 +- Re-enable a workaround to fix g-i-s/gnome-keyring (#2005625) -* Fri Jan 21 2022 Michael Catanzaro - 2.68.4-5 -- Add one more upstream patch to gspawn patchset -- Related: #1910092 +* Fri Sep 17 2021 Kalev Lember 2.70.0-1 +- Update to 2.70.0 -* Fri Jan 21 2022 Michael Catanzaro - 2.68.4-4 -- Add gspawn patchset -- Resolves: #1910092 +* Wed Sep 08 2021 Kalev Lember 2.69.3-1 +- Update to 2.69.3 -* Wed Dec 01 2021 Michael Catanzaro - 2.68.4-3 -- Fix GNetworkMonitor after NetworkManager D-Bus API changes -- Resolves: #2014624 +* Sat Aug 21 2021 Kalev Lember 2.69.2-1 +- Update to 2.69.2 -* Wed Sep 15 2021 Michael Catanzaro - 2.68.4-2 -- Fix g_get_user_database_entry() crash when used with nss-systemd -- Resolves: #2004711 +* Wed Jul 21 2021 Michael Catanzaro 2.69.0-1 +- Upgrade to 2.69.0 -* Sat Aug 21 2021 Kalev Lember - 2.68.4-1 -- Update to 2.68.4 +* Mon Jul 12 2021 Michael Catanzaro 2.68.3-13 +- Note: all those previous empty commits accomplished nothing -* Wed Aug 18 2021 DJ Delorie - 2.68.3-6 -- Rebuilt for libffi 3.4.2 SONAME transition. - Related: rhbz#1891914 +* Mon Jul 12 2021 Michael Catanzaro 2.68.3-12 +- Empty commit for rpmautospec -5 -* Tue Aug 17 2021 Michael Catanzaro - 2.68.3-5 -- Backport GPowerProfileMonitor -- Resolves: #1994466 +* Mon Jul 12 2021 Michael Catanzaro 2.68.3-11 +- Empty commit for rpmautospec -4 -* Mon Aug 09 2021 Mohan Boddu - 2.68.3-4 -- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags - Related: rhbz#1991688 +* Mon Jul 12 2021 Michael Catanzaro 2.68.3-10 +- Empty commit for rpmautospec -3 -* Tue Jul 27 2021 Michael Catanzaro - 2.68.3-3 -- Fix build with glibc 2.34 -- Resolves: #1984626 +* Mon Jul 12 2021 Michael Catanzaro 2.68.3-9 +- Empty commit for rpmautospec -2 -* Thu Jul 01 2021 Michael Catanzaro - 2.68.3-2 +* Thu Jul 01 2021 Michael Catanzaro - 2.68.3-4 - Refresh gnutls-hmac patchset to fix leaks in error path -- Related: #1971823 -* Mon Jun 28 2021 Michael Catanzaro - 2.68.3-1 +* Mon Jun 28 2021 Michael Catanzaro - 2.68.3-3 +- Drop Recommends: shared-mime-info (#1947897) +- Remove old Conflicts: gcr < 3.28.1 + +* Wed Jun 23 2021 Michael Catanzaro - 2.68.3-2 +- Drop check-rpath hack, no longer required + +* Mon Jun 21 2021 Kalev Lember - 2.68.3-1 - Update to 2.68.3 -- Resolves: #1976713 -- Remove Recommends: shared-mime-info -- Resolves: #1947897 -* Wed Jun 23 2021 Michael Catanzaro - 2.68.2-2 -- Update GHmac patchset and reenable glib2-static -- Resolves: #1971823 +* Thu Jun 17 2021 Stephen Gallagher - 2.68.2-3 +- Fix the requirement for 32-bit libgnutls.so.30 -* Wed May 19 2021 Michael Catanzaro - 2.68.2-1 -- Update to 2.68.2 -- Resolves: #1961039 +* Thu Jun 17 2021 Michael Catanzaro - 2.68.2-2 +- Enable GnuTLS-based GHmac in Fedora and reenable glib2-static in RHEL +- Consolidate GDesktopAppInfo changes into gdesktopappinfo.patch +- Disable check-rpath since it seems to be broken -* Tue May 11 2021 Michael Catanzaro - 2.68.1-4 -- No changes, bump revision to retry gating -- Related: #1951126 +* Tue May 11 2021 Kalev Lember - 2.68.2-1 +- Update to 2.68.2 -* Fri May 07 2021 Michael Catanzaro - 2.68.1-3 +* Wed May 05 2021 Michael Catanzaro - 2.68.1-3 - Add missing bundled provides -- Add rpminspect gating configuration -- Consolidate GDesktopAppInfo patchset -- Resolves: #1951126 * Wed Apr 28 2021 Michael Catanzaro - 2.68.1-2 - Refresh GDesktopAppInfo patchset -- Related: #1951126 -* Thu Apr 22 2021 Kalev Lember - 2.68.1-1 +* Thu Apr 08 2021 Kalev Lember - 2.68.1-1 - Update to 2.68.1 -* Thu Apr 15 2021 Mohan Boddu - 2.68.0-3 -- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 - * Fri Mar 26 2021 Kalev Lember - 2.68.0-2 - Rebuild to fix sysprof-capture symbols leaking into libraries consuming it @@ -1016,3 +984,4 @@ Disable LTO * Thu Nov 08 2012 Kalev Lember - 2.35.1-1 - Update to 2.35.1 - Drop upstreamed codegen-in-datadir.patch +