diff --git a/.gitignore b/.gitignore index 41d1ef0..16cc618 100644 --- a/.gitignore +++ b/.gitignore @@ -69,3 +69,5 @@ abrt-1.1.13.tar.gz /abrt-2.12.2.tar.gz /abrt-2.13.0.tar.gz /abrt-2.14.0.tar.gz +/abrt-2.14.1.tar.gz +/abrt-2.14.2.tar.gz diff --git a/0001-applet-Pass-instance-pointer-to-signal-handler.patch b/0001-applet-Pass-instance-pointer-to-signal-handler.patch new file mode 100644 index 0000000..9010657 --- /dev/null +++ b/0001-applet-Pass-instance-pointer-to-signal-handler.patch @@ -0,0 +1,28 @@ +From 5618985d3d7f830ebba0ef78e2ee6d3d6f9f6c55 Mon Sep 17 00:00:00 2001 +From: Ernestas Kulik +Date: Fri, 15 May 2020 15:49:59 +0200 +Subject: [PATCH] applet: Pass instance pointer to signal handler + +Some fallout from 802a40a2f7c971b6533162e70b860e01ae3b5a27. + +https://bugzilla.redhat.com/show_bug.cgi?id=1836190 +--- + src/applet/abrt-applet-application.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/applet/abrt-applet-application.c b/src/applet/abrt-applet-application.c +index d982c9f9..8ea653bb 100644 +--- a/src/applet/abrt-applet-application.c ++++ b/src/applet/abrt-applet-application.c +@@ -177,7 +177,7 @@ abrt_applet_application_init (AbrtAppletApplication *self) + g_signal_connect (network_monitor, "notify::connectivity", + G_CALLBACK (on_connectivity_changed), self); + g_signal_connect (network_monitor, "notify::network-available", +- G_CALLBACK (on_connectivity_changed), NULL); ++ G_CALLBACK (on_connectivity_changed), self); + + self->deferred_problems = g_ptr_array_new_with_free_func (g_object_unref); + } +-- +2.26.2 + diff --git a/0002-applet-Chain-up-in-dispose.patch b/0002-applet-Chain-up-in-dispose.patch new file mode 100644 index 0000000..7d749e1 --- /dev/null +++ b/0002-applet-Chain-up-in-dispose.patch @@ -0,0 +1,26 @@ +From b08e7cbd26704b0a5400fdfab1f3f2e3922b102f Mon Sep 17 00:00:00 2001 +From: Ernestas Kulik +Date: Fri, 15 May 2020 15:50:50 +0200 +Subject: [PATCH] applet: Chain up in dispose() + +Also something missed in 802a40a2f7c971b6533162e70b860e01ae3b5a27. +--- + src/applet/abrt-applet-application.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/applet/abrt-applet-application.c b/src/applet/abrt-applet-application.c +index 8ea653bb..52ed5529 100644 +--- a/src/applet/abrt-applet-application.c ++++ b/src/applet/abrt-applet-application.c +@@ -985,6 +985,8 @@ abrt_applet_application_dispose (GObject *object) + self = ABRT_APPLET_APPLICATION (object); + + g_clear_pointer (&self->deferred_problems, g_ptr_array_unref); ++ ++ G_OBJECT_CLASS (abrt_applet_application_parent_class)->dispose (object); + } + + static void +-- +2.26.2 + diff --git a/0003-applet-application-Fix-crash-when-processing-deferre.patch b/0003-applet-application-Fix-crash-when-processing-deferre.patch new file mode 100644 index 0000000..1cb1394 --- /dev/null +++ b/0003-applet-application-Fix-crash-when-processing-deferre.patch @@ -0,0 +1,59 @@ +From b28fcc053db224c11f1f88d2885eba88d60a7322 Mon Sep 17 00:00:00 2001 +From: Ernestas Kulik +Date: Tue, 28 Jul 2020 15:39:43 +0200 +Subject: [PATCH] applet: application: Fix crash when processing deferred + +Currently, when processing the deferred problems, if reporting fails, +the problem is re-added to the queue, but the object is not +re-referenced, leading to invalid reads later on. +--- + src/applet/abrt-applet-application.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/src/applet/abrt-applet-application.c b/src/applet/abrt-applet-application.c +index 28e55135..4716524b 100644 +--- a/src/applet/abrt-applet-application.c ++++ b/src/applet/abrt-applet-application.c +@@ -771,11 +771,9 @@ handle_event_output_cb (GIOChannel *gio, + gpointer data) + { + EventProcessingState *state; +- AbrtAppletProblemInfo *problem_info; + int status; + + state = data; +- problem_info = state->problem_info; + + /* Read streamed data and split lines */ + for (;;) +@@ -836,21 +834,23 @@ handle_event_output_cb (GIOChannel *gio, + + if (WIFEXITED (status) && WEXITSTATUS (status) == EXIT_STOP_EVENT_RUN) + { +- abrt_applet_problem_info_set_known (problem_info, true); ++ abrt_applet_problem_info_set_known (state->problem_info, true); + status = 0; + } + + if (status == 0) + { +- abrt_applet_problem_info_set_reported (problem_info, true); ++ abrt_applet_problem_info_set_reported (state->problem_info, true); + + log_debug ("fast report finished successfully"); +- abrt_applet_application_send_problem_notification (state->application, problem_info); ++ abrt_applet_application_send_problem_notification (state->application, ++ state->problem_info); + } + else + { + log_debug ("fast report failed, deferring"); +- g_ptr_array_add (state->application->deferred_problems, problem_info); ++ g_ptr_array_add (state->application->deferred_problems, ++ g_steal_pointer (&state->problem_info)); + } + + event_processing_state_free (state); +-- +2.26.2 + diff --git a/0004-daemon-rpm-Use-NEVRA-instead-of-ENVRA.patch b/0004-daemon-rpm-Use-NEVRA-instead-of-ENVRA.patch new file mode 100644 index 0000000..2ffb878 --- /dev/null +++ b/0004-daemon-rpm-Use-NEVRA-instead-of-ENVRA.patch @@ -0,0 +1,208 @@ +From 7013e4e0de5d3f1538475a92b08687924f5e01c2 Mon Sep 17 00:00:00 2001 +From: Ernestas Kulik +Date: Wed, 3 Jun 2020 14:49:50 +0200 +Subject: [PATCH] daemon: rpm: Use NEVRA instead of ENVRA + +libdnf is only able to parse package names in the NEVRA form, leading to +retrace-server bailing when retracing dumps from, say, gedit. + +Closes https://github.com/abrt/abrt/issues/1378 +Fixes https://github.com/abrt/retrace-server/issues/233 +--- + src/daemon/abrt-action-save-package-data.c | 12 +++++------ + src/daemon/rpm.c | 25 +++++++++++----------- + src/daemon/rpm.h | 8 +++---- + 3 files changed, 23 insertions(+), 22 deletions(-) + +diff --git a/src/daemon/abrt-action-save-package-data.c b/src/daemon/abrt-action-save-package-data.c +index 9373c2b1..de926383 100644 +--- a/src/daemon/abrt-action-save-package-data.c ++++ b/src/daemon/abrt-action-save-package-data.c +@@ -228,7 +228,7 @@ static bool is_path_blacklisted(const char *path) + return false; + } + +-static struct pkg_envra *get_script_name(const char *cmdline, char **executable, const char *chroot) ++static struct pkg_nevra *get_script_name(const char *cmdline, char **executable, const char *chroot) + { + // TODO: we don't verify that python executable is not modified + // or that python package is properly signed +@@ -237,7 +237,7 @@ static struct pkg_envra *get_script_name(const char *cmdline, char **executable, + * This will work only if the cmdline contains the whole path. + * Example: python /usr/bin/system-control-network + */ +- struct pkg_envra *script_pkg = NULL; ++ struct pkg_nevra *script_pkg = NULL; + char *script_name = get_argv1_if_full_path(cmdline); + if (script_name) + { +@@ -271,7 +271,7 @@ static int SavePackageDescriptionToDebugDump(const char *dump_dir_name, const ch + char *rootdir = NULL; + char *package_short_name = NULL; + char *fingerprint = NULL; +- struct pkg_envra *pkg_name = NULL; ++ struct pkg_nevra *pkg_name = NULL; + char *component = NULL; + char *kernel = NULL; + int error = 1; +@@ -353,7 +353,7 @@ static int SavePackageDescriptionToDebugDump(const char *dump_dir_name, const ch + if (g_regex_match_simple(DEFAULT_INTERPRETERS_REGEX, basename, G_REGEX_EXTENDED, /*MatchFlags*/0) || + g_list_find_custom(settings_Interpreters, basename, (GCompareFunc)g_strcmp0)) + { +- struct pkg_envra *script_pkg = get_script_name(cmdline, &executable, chroot); ++ struct pkg_nevra *script_pkg = get_script_name(cmdline, &executable, chroot); + /* executable may have changed, check it again */ + if (is_path_blacklisted(executable)) + { +@@ -379,7 +379,7 @@ static int SavePackageDescriptionToDebugDump(const char *dump_dir_name, const ch + goto ret0; + } + +- free_pkg_envra(pkg_name); ++ free_pkg_nevra(pkg_name); + pkg_name = script_pkg; + } + +@@ -460,7 +460,7 @@ skip_interpreter: + free(executable); + free(rootdir); + free(package_short_name); +- free_pkg_envra(pkg_name); ++ free_pkg_nevra(pkg_name); + free(component); + free(fingerprint); + +diff --git a/src/daemon/rpm.c b/src/daemon/rpm.c +index 07ad227e..d39901a6 100644 +--- a/src/daemon/rpm.c ++++ b/src/daemon/rpm.c +@@ -282,7 +282,7 @@ char* rpm_get_component(const char *filename, const char *rootdir_or_NULL) + + #ifdef HAVE_LIBRPM + #define pkg_add_id(name) \ +- static inline int pkg_add_##name(Header header, struct pkg_envra *p) \ ++ static inline int pkg_add_##name(Header header, struct pkg_nevra *p) \ + { \ + const char *errmsg = NULL; \ + p->p_##name = headerFormat(header, "%{"#name"}", &errmsg); \ +@@ -294,8 +294,8 @@ char* rpm_get_component(const char *filename, const char *rootdir_or_NULL) + return -1; \ + } \ + +-pkg_add_id(epoch); + pkg_add_id(name); ++pkg_add_id(epoch); + pkg_add_id(version); + pkg_add_id(release); + pkg_add_id(arch); +@@ -303,14 +303,14 @@ pkg_add_id(vendor); + #endif + + // caller is responsible to free returned value +-struct pkg_envra *rpm_get_package_nvr(const char *filename, const char *rootdir_or_NULL) ++struct pkg_nevra *rpm_get_package_nvr(const char *filename, const char *rootdir_or_NULL) + { + #ifdef HAVE_LIBRPM + rpmts ts; + rpmdbMatchIterator iter; + Header header; + +- struct pkg_envra *p = NULL; ++ struct pkg_nevra *p = NULL; + + if (rpm_query_file(&ts, &iter, &header, filename, rootdir_or_NULL) < 0) + return NULL; +@@ -320,6 +320,11 @@ struct pkg_envra *rpm_get_package_nvr(const char *filename, const char *rootdir_ + + p = libreport_xzalloc(sizeof(*p)); + int r; ++ ++ r = pkg_add_name(header, p); ++ if (r) ++ goto error; ++ + r = pkg_add_epoch(header, p); + if (r) + goto error; +@@ -333,10 +338,6 @@ struct pkg_envra *rpm_get_package_nvr(const char *filename, const char *rootdir_ + p->p_epoch = libreport_xstrdup("0"); + } + +- r = pkg_add_name(header, p); +- if (r) +- goto error; +- + r = pkg_add_version(header, p); + if (r) + goto error; +@@ -356,14 +357,14 @@ struct pkg_envra *rpm_get_package_nvr(const char *filename, const char *rootdir_ + if (strcmp(p->p_epoch, "0") == 0) + p->p_nvr = libreport_xasprintf("%s-%s-%s", p->p_name, p->p_version, p->p_release); + else +- p->p_nvr = libreport_xasprintf("%s:%s-%s-%s", p->p_epoch, p->p_name, p->p_version, p->p_release); ++ p->p_nvr = libreport_xasprintf("%s-%s:%s-%s", p->p_name, p->p_epoch, p->p_version, p->p_release); + + rpmdbFreeIterator(iter); + rpmtsFree(ts); + return p; + + error: +- free_pkg_envra(p); ++ free_pkg_nevra(p); + + rpmdbFreeIterator(iter); + rpmtsFree(ts); +@@ -373,14 +374,14 @@ struct pkg_envra *rpm_get_package_nvr(const char *filename, const char *rootdir_ + #endif + } + +-void free_pkg_envra(struct pkg_envra *p) ++void free_pkg_nevra(struct pkg_nevra *p) + { + if (!p) + return; + + free(p->p_vendor); +- free(p->p_epoch); + free(p->p_name); ++ free(p->p_epoch); + free(p->p_version); + free(p->p_release); + free(p->p_arch); +diff --git a/src/daemon/rpm.h b/src/daemon/rpm.h +index 1fd56e8f..90821f81 100644 +--- a/src/daemon/rpm.h ++++ b/src/daemon/rpm.h +@@ -26,17 +26,17 @@ + extern "C" { + #endif + +-struct pkg_envra { ++struct pkg_nevra { + char *p_nvr; +- char *p_epoch; + char *p_name; ++ char *p_epoch; + char *p_version; + char *p_release; + char *p_arch; + char *p_vendor; + }; + +-void free_pkg_envra(struct pkg_envra *p); ++void free_pkg_nevra(struct pkg_nevra *p); + + /** + * Checks if an application is modified by third party. +@@ -85,7 +85,7 @@ char *rpm_get_fingerprint(const char* pkg); + * @param filename A file name. + * @return A package name (malloc'ed string) + */ +-struct pkg_envra *rpm_get_package_nvr(const char *filename, const char *rootdir_or_NULL); ++struct pkg_nevra *rpm_get_package_nvr(const char *filename, const char *rootdir_or_NULL); + /** + * Finds a main package for given file. This package contains particular + * file. If the file doesn't belong to any package, empty string is +-- +2.26.2 + diff --git a/abrt.spec b/abrt.spec index c210274..37119c6 100644 --- a/abrt.spec +++ b/abrt.spec @@ -43,17 +43,22 @@ %define docdirversion -%{version} %endif -%define libreport_ver 2.12.0 +%define libreport_ver 2.13.0 %define satyr_ver 0.24 Summary: Automatic bug detection and reporting tool Name: abrt -Version: 2.14.0 -Release: 2%{?dist} +Version: 2.14.2 +Release: 4%{?dist} License: GPLv2+ URL: https://abrt.readthedocs.org/ Source: https://github.com/abrt/%{name}/archive/%{version}/%{name}-%{version}.tar.gz +Patch0: 0001-applet-Pass-instance-pointer-to-signal-handler.patch +Patch1: 0002-applet-Chain-up-in-dispose.patch +Patch2: 0003-applet-application-Fix-crash-when-processing-deferre.patch +Patch3: 0004-daemon-rpm-Use-NEVRA-instead-of-ENVRA.patch + BuildRequires: git-core BuildRequires: %{dbus_devel} BuildRequires: hostname @@ -114,7 +119,6 @@ BuildRequires: libreport-gtk-devel >= %{libreport_ver} BuildRequires: gsettings-desktop-schemas-devel >= 3.15 #addon-ccpp BuildRequires: gdb-headless -BuildRequires: libcap-devel #addon-kerneloops BuildRequires: systemd-devel BuildRequires: %{libjson_devel} @@ -750,7 +754,7 @@ killall abrt-dbus >/dev/null 2>&1 || : %dir %attr(0751, root, abrt) %{default_dump_dir} %dir %attr(0700, abrt, abrt) %{_localstatedir}/spool/%{name}-upload # abrtd runs as root -%dir %attr(0755, root, root) %{_localstatedir}/run/%{name} +%ghost %dir %attr(0755, root, root) %{_localstatedir}/run/%{name} %ghost %attr(0666, -, -) %{_localstatedir}/run/%{name}/abrt.socket %ghost %attr(0644, -, -) %{_localstatedir}/run/%{name}/abrtd.pid @@ -1016,6 +1020,38 @@ killall abrt-dbus >/dev/null 2>&1 || : %config(noreplace) %{_sysconfdir}/profile.d/abrt-console-notification.sh %changelog +* Thu Dec 17 2020 Matěj Grabovský - 2.14.2-4 +- Add fix for https://bugzilla.redhat.com/show_bug.cgi?id=1900982 + +* Tue Jul 28 2020 - Ernestas Kulik - 2.14.2-3 +- Add patch for https://bugzilla.redhat.com/show_bug.cgi?id=1860903 + +* Thu May 21 2020 Ernestas Kulik - 2.14.2-2 +- Add fix for https://bugzilla.redhat.com/show_bug.cgi?id=1836190 + +* Tue May 12 2020 Michal Fabik - 2.14.2-1 +- Fix broken builds with --enable-authenticated-autoreporting + +* Fri Apr 24 2020 Michal Fabik - 2.14.1-1 +- tests: Add perl, php R and tcl to dont-blame-interpret +- a-a-save-package-data: Add R and tcl to interpreted langs +- a-a-save-package-data: Use regexps to match interpreters +- .travis.yml: Update secret +- plugins: xorg-utils: Loopify parsing +- Add namespace to libreport function and global names +- cli: Correct debug directories in config +- cli: Show defaults in help output +- cli: Fix verbosity option +- cli: Fix descriptions for --since and --until +- autogen.sh: Handle NOCONFIGURE per the Build API +- plugins: journal: Fix ci_mapping being overwritten +- plugins: abrt-journal-core: Don’t assume anything about uid_t +- lib,plugins: Accomodate for multiple debug directories +- dbus: Drop bogus dependency +- dbus: Drop abrt_problems2 +- Drop libcap dependency +- Drop Travis config + * Fri Feb 07 2020 Ernestas Kulik - 2.14.0-2 - Bump libreport dependency diff --git a/sources b/sources index fe58d9f..ad6df13 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (abrt-2.14.0.tar.gz) = 2d817b7761d5afdca00a825281b759bc084a17d7393fcdf87df1a901b5c1a75595e3a733e481b30b02d068a123f8eac26163e2e55366e7cc20266a95e863967e +SHA512 (abrt-2.14.2.tar.gz) = 020bd0550c41b2358a718a4f0f0c3a839d86fd46fc0c4f4cfc4b7d7f851baf2d5179e008ac1912b350f9f0fbfbfee94e422de3aadce5eb0f7f84a04f233349ff