diff --git a/0021-wizard-terminate-event-chain-after-the-emergency-ana.patch b/0021-wizard-terminate-event-chain-after-the-emergency-ana.patch new file mode 100644 index 0000000..8696671 --- /dev/null +++ b/0021-wizard-terminate-event-chain-after-the-emergency-ana.patch @@ -0,0 +1,38 @@ +From ac5caa31a929c3ed9cf2950c95333aa79a979f3b Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Tue, 26 Aug 2014 12:51:19 +0200 +Subject: [LIBREPORT PATCH] wizard: terminate event chain after the emergency + analysis + +Resolves rhbz#1133549 +Related to rhbz#1069917 + +Signed-off-by: Jakub Filak +--- + src/gui-wizard-gtk/wizard.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c +index e4718bf..5779052 100644 +--- a/src/gui-wizard-gtk/wizard.c ++++ b/src/gui-wizard-gtk/wizard.c +@@ -1752,6 +1752,16 @@ static bool event_need_review(const char *event_name) + + static void on_btn_failed_cb(GtkButton *button) + { ++ /* Since the Repeat button has been introduced, the event chain isn't ++ * terminated upon a failure in order to be able to continue in processing ++ * in the retry action. ++ * ++ * Now, user decided to run the emergency analysis instead of trying to ++ * reconfigure libreport, so we have to terminate the event chain. ++ */ ++ gtk_widget_hide(g_btn_repeat); ++ terminate_event_chain(TERMINATE_NOFLAGS); ++ + /* Show detailed log */ + gtk_expander_set_expanded(g_exp_report_log, TRUE); + +-- +1.8.3.1 + diff --git a/0022-gui-use-symbolic-icons.patch b/0022-gui-use-symbolic-icons.patch new file mode 100644 index 0000000..f313f18 --- /dev/null +++ b/0022-gui-use-symbolic-icons.patch @@ -0,0 +1,91 @@ +From 0d3bb6e322592ebce330af756593a2a92bae4a8c Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Tue, 26 Aug 2014 22:36:30 +0200 +Subject: [LIBREPORT PATCH] gui: use -symbolic icons + +Related to abrt/gnome-abrt#72 + +Signed-off-by: Jakub Filak +--- + src/gui-wizard-gtk/wizard.c | 10 +++++----- + src/gui-wizard-gtk/wizard.glade | 8 ++++---- + 2 files changed, 9 insertions(+), 9 deletions(-) + +diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c +index 5779052..525d275 100644 +--- a/src/gui-wizard-gtk/wizard.c ++++ b/src/gui-wizard-gtk/wizard.c +@@ -3494,17 +3494,17 @@ void create_assistant(GtkApplication *app, bool expert_mode) + gtk_notebook_set_show_tabs(g_assistant, (g_verbose != 0 && g_expert_mode)); + + g_btn_close = gtk_button_new_with_mnemonic(_("_Close")); +- gtk_button_set_image(GTK_BUTTON(g_btn_close), gtk_image_new_from_icon_name("window-close", GTK_ICON_SIZE_BUTTON)); ++ gtk_button_set_image(GTK_BUTTON(g_btn_close), gtk_image_new_from_icon_name("window-close-symbolic", GTK_ICON_SIZE_BUTTON)); + g_btn_stop = gtk_button_new_with_mnemonic(_("_Stop")); +- gtk_button_set_image(GTK_BUTTON(g_btn_stop), gtk_image_new_from_icon_name("process-close", GTK_ICON_SIZE_BUTTON)); ++ gtk_button_set_image(GTK_BUTTON(g_btn_stop), gtk_image_new_from_icon_name("process-close-symbolic", GTK_ICON_SIZE_BUTTON)); + gtk_widget_set_no_show_all(g_btn_stop, true); /* else gtk_widget_hide won't work */ + g_btn_onfail = gtk_button_new_with_label(_("Upload for analysis")); +- gtk_button_set_image(GTK_BUTTON(g_btn_onfail), gtk_image_new_from_icon_name("go-up", GTK_ICON_SIZE_BUTTON)); ++ gtk_button_set_image(GTK_BUTTON(g_btn_onfail), gtk_image_new_from_icon_name("go-up-symbolic", GTK_ICON_SIZE_BUTTON)); + gtk_widget_set_no_show_all(g_btn_onfail, true); /* else gtk_widget_hide won't work */ + g_btn_repeat = gtk_button_new_with_label(_("Repeat")); + gtk_widget_set_no_show_all(g_btn_repeat, true); /* else gtk_widget_hide won't work */ + g_btn_next = gtk_button_new_with_mnemonic(_("_Forward")); +- gtk_button_set_image(GTK_BUTTON(g_btn_next), gtk_image_new_from_icon_name("go-next", GTK_ICON_SIZE_BUTTON)); ++ gtk_button_set_image(GTK_BUTTON(g_btn_next), gtk_image_new_from_icon_name("go-next-symbolic", GTK_ICON_SIZE_BUTTON)); + gtk_widget_set_no_show_all(g_btn_next, true); /* else gtk_widget_hide won't work */ + + g_box_buttons = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0)); +@@ -3530,7 +3530,7 @@ void create_assistant(GtkApplication *app, bool expert_mode) + gtk_widget_set_visible(GTK_WIDGET(vbox), TRUE); + gtk_box_pack_start(vbox, GTK_WIDGET(g_box_warning_labels), false, false, 5); + +- GtkWidget *image = gtk_image_new_from_icon_name("dialog-warning", GTK_ICON_SIZE_DIALOG); ++ GtkWidget *image = gtk_image_new_from_icon_name("dialog-warning-symbolic", GTK_ICON_SIZE_DIALOG); + gtk_widget_set_visible(image, TRUE); + + g_widget_warnings_area = GTK_WIDGET(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0)); +diff --git a/src/gui-wizard-gtk/wizard.glade b/src/gui-wizard-gtk/wizard.glade +index 854a402..b0953db 100644 +--- a/src/gui-wizard-gtk/wizard.glade ++++ b/src/gui-wizard-gtk/wizard.glade +@@ -5,7 +5,7 @@ + + True + False +- media-record ++ media-record-symbolic + + + +@@ -133,7 +133,7 @@ + True + True + +- edit-find ++ edit-find-symbolic + False + Clear the search bar to see the list of security sensitive words. + Clear the search bar to see the list of security sensitive words. +@@ -244,7 +244,7 @@ + True + False + 4 +- media-record ++ media-record-symbolic + 1 + + +@@ -761,7 +761,7 @@ + + False + True +- dialog-error ++ dialog-error-symbolic + 1 + + +-- +1.8.3.1 + diff --git a/0023-gui-Problem-Details-suite.patch b/0023-gui-Problem-Details-suite.patch new file mode 100644 index 0000000..38a4fa0 --- /dev/null +++ b/0023-gui-Problem-Details-suite.patch @@ -0,0 +1,751 @@ +From 136dfd3c7ccf2d3235ec69db4eb9af00b364ba8c Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Mon, 25 Aug 2014 17:18:02 +0200 +Subject: [LIBREPORT PATCH] gui: Problem Details suite + ++ ProblemDetailsWidget ++ ProblemDetailsDialog + +Related to abrt/gnome-abrt#64 + +Signed-off-by: Jakub Filak +--- + po/POTFILES.in | 2 + + src/gtk-helpers/Makefile.am | 10 +- + src/gtk-helpers/internal_libreport_gtk.h | 6 + + src/gtk-helpers/problem_details_dialog.c | 80 +++++++ + src/gtk-helpers/problem_details_dialog.h | 37 +++ + src/gtk-helpers/problem_details_widget.c | 375 +++++++++++++++++++++++++++++++ + src/gtk-helpers/problem_details_widget.h | 62 +++++ + src/gtk-helpers/utils.c | 25 +++ + src/gui-wizard-gtk/wizard.c | 21 +- + 9 files changed, 596 insertions(+), 22 deletions(-) + create mode 100644 src/gtk-helpers/problem_details_dialog.c + create mode 100644 src/gtk-helpers/problem_details_dialog.h + create mode 100644 src/gtk-helpers/problem_details_widget.c + create mode 100644 src/gtk-helpers/problem_details_widget.h + create mode 100644 src/gtk-helpers/utils.c + +diff --git a/po/POTFILES.in b/po/POTFILES.in +index 4a0b565..c599dab 100644 +--- a/po/POTFILES.in ++++ b/po/POTFILES.in +@@ -10,6 +10,8 @@ src/gtk-helpers/config_dialog.c + src/gtk-helpers/event_config_dialog.c + src/gtk-helpers/secrets.c + src/gtk-helpers/workflow_config_dialog.c ++src/gtk-helpers/problem_details_widget.c ++src/gtk-helpers/problem_details_dialog.c + src/gui-wizard-gtk/main.c + src/gui-wizard-gtk/wizard.c + src/gui-wizard-gtk/wizard.glade +diff --git a/src/gtk-helpers/Makefile.am b/src/gtk-helpers/Makefile.am +index 13b9072..a7cc554 100644 +--- a/src/gtk-helpers/Makefile.am ++++ b/src/gtk-helpers/Makefile.am +@@ -3,12 +3,15 @@ libreport_gtk_includedir = \ + $(includedir)/libreport + + libreport_gtk_include_HEADERS = \ +- internal_libreport_gtk.h ++ internal_libreport_gtk.h \ ++ problem_details_widget.h \ ++ problem_details_dialog.h + + lib_LTLIBRARIES = \ + libreport-gtk.la + + libreport_gtk_la_SOURCES = \ ++ utils.c \ + event_config_dialog.c \ + secrets.c \ + hyperlinks.c \ +@@ -16,11 +19,14 @@ libreport_gtk_la_SOURCES = \ + workflow_config_dialog.c \ + config_dialog.c \ + ask_dialogs.c \ +- search_item.c search_item.h ++ search_item.c search_item.h \ ++ problem_details_widget.c problem_details_widget.h \ ++ problem_details_dialog.c problem_details_dialog.h + + libreport_gtk_la_CPPFLAGS = \ + -I$(srcdir)/../include \ + -I$(srcdir)/../lib \ ++ -Wno-error=unused-local-typedefs \ + $(GTK_CFLAGS) \ + $(GLIB_CFLAGS) \ + $(GIO_CFLAGS) \ +diff --git a/src/gtk-helpers/internal_libreport_gtk.h b/src/gtk-helpers/internal_libreport_gtk.h +index f8f1c13..57f5889 100644 +--- a/src/gtk-helpers/internal_libreport_gtk.h ++++ b/src/gtk-helpers/internal_libreport_gtk.h +@@ -20,6 +20,8 @@ + #define INTERNAL_LIBREPORT_GTK_H_ + + #include ++#include "problem_details_dialog.h" ++#include "problem_details_widget.h" + #include "report.h" + #include "internal_libreport.h" + +@@ -96,6 +98,10 @@ struct url_token + #define find_url_tokens libreport_find_url_tokens + GList *find_url_tokens(const char *line); + ++ ++#define reload_text_to_text_view libreport_reload_text_to_text_view ++void reload_text_to_text_view(GtkTextView *tv, const char *text); ++ + /* Ask dialogs */ + + /* +diff --git a/src/gtk-helpers/problem_details_dialog.c b/src/gtk-helpers/problem_details_dialog.c +new file mode 100644 +index 0000000..dc2362e +--- /dev/null ++++ b/src/gtk-helpers/problem_details_dialog.c +@@ -0,0 +1,80 @@ ++/* ++ Copyright (C) 2014 ABRT Team ++ Copyright (C) 2014 RedHat inc. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with this program; if not, write to the Free Software Foundation, Inc., ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++*/ ++ ++#include "problem_details_dialog.h" ++#include "internal_libreport_gtk.h" ++#include "internal_libreport.h" ++ ++GtkWidget * ++problem_details_dialog_new(problem_data_t *problem, GtkWindow *parent) ++{ ++ INITIALIZE_LIBREPORT(); ++ ++ GtkWidget *dialog = gtk_dialog_new_with_buttons( ++ _("Problem details"), ++ parent, ++ GTK_DIALOG_DESTROY_WITH_PARENT, ++ _("OK"), ++ GTK_RESPONSE_NONE, ++ NULL ++ ); ++ ++ gtk_window_set_default_size(GTK_WINDOW(dialog), 800, 600); ++ ++ g_signal_connect_swapped(dialog, "response", G_CALLBACK(gtk_widget_destroy), dialog); ++ ++ ProblemDetailsWidget *details = problem_details_widget_new(problem); ++ ++ GtkWidget *scrolled = gtk_scrolled_window_new(NULL, NULL); ++ gtk_widget_set_halign(scrolled, GTK_ALIGN_FILL); ++ gtk_widget_set_valign(scrolled, GTK_ALIGN_FILL); ++ gtk_widget_set_hexpand(scrolled, TRUE); ++ gtk_widget_set_vexpand(scrolled, TRUE); ++ ++ gtk_container_add(GTK_CONTAINER(scrolled), GTK_WIDGET(details)); ++ ++ GtkWidget *content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); ++ gtk_container_add(GTK_CONTAINER(content_area), GTK_WIDGET(scrolled)); ++ ++ gtk_widget_show_all(dialog); ++ ++ return dialog; ++} ++ ++GtkWidget * ++problem_details_dialog_new_for_dir(const char *dir, GtkWindow *parent) ++{ ++ INITIALIZE_LIBREPORT(); ++ ++ struct dump_dir *dd = dd_opendir(dir, DD_OPEN_READONLY); ++ if (!dd) ++ return NULL; ++ ++ problem_data_t *problem = create_problem_data_from_dump_dir(dd); ++ problem_data_add_text_noteditable(problem, CD_DUMPDIR, dir); ++ ++ dd_close(dd); ++ ++ GtkWidget *dialog = problem_details_dialog_new(problem, parent); ++ ++ g_signal_connect_swapped(dialog, "destroy", G_CALLBACK(problem_data_free), problem); ++ ++ return dialog; ++} ++ +diff --git a/src/gtk-helpers/problem_details_dialog.h b/src/gtk-helpers/problem_details_dialog.h +new file mode 100644 +index 0000000..e8ba8ad +--- /dev/null ++++ b/src/gtk-helpers/problem_details_dialog.h +@@ -0,0 +1,37 @@ ++/* ++ Copyright (C) 2014 ABRT Team ++ Copyright (C) 2014 RedHat inc. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with this program; if not, write to the Free Software Foundation, Inc., ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++*/ ++#ifndef _PROBLEM_DETAILS_DIALOG_H ++#define _PROBLEM_DETAILS_DIALOG_H ++ ++#include ++#include "problem_data.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif /* __cplusplus */ ++ ++GtkWidget *problem_details_dialog_new(problem_data_t *problem, GtkWindow *parent); ++GtkWidget *problem_details_dialog_new_for_dir(const char *dir, GtkWindow *parent); ++ ++#ifdef __cplusplus ++} ++#endif /* __cplusplus */ ++ ++#endif /* _PROBLEM_DETAILS_DIALOG_H */ ++ +diff --git a/src/gtk-helpers/problem_details_widget.c b/src/gtk-helpers/problem_details_widget.c +new file mode 100644 +index 0000000..2cb3206 +--- /dev/null ++++ b/src/gtk-helpers/problem_details_widget.c +@@ -0,0 +1,375 @@ ++/* ++ Copyright (C) 2014 ABRT Team ++ Copyright (C) 2014 RedHat inc. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with this program; if not, write to the Free Software Foundation, Inc., ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++*/ ++ ++#include "problem_details_widget.h" ++#include "internal_libreport_gtk.h" ++#include "internal_libreport.h" ++ ++#define PROBLEM_DETAILS_WIDGET_GET_PRIVATE(o) \ ++ (G_TYPE_INSTANCE_GET_PRIVATE((o), TYPE_PROBLEM_DETAILS_WIDGET, ProblemDetailsWidgetPrivate)) ++ ++#define EXPLICIT_ITEMS \ ++ CD_DUMPDIR, \ ++ FILENAME_TIME, \ ++ FILENAME_LAST_OCCURRENCE, \ ++ FILENAME_UID, \ ++ FILENAME_USERNAME, \ ++ FILENAME_TYPE, \ ++ FILENAME_COMMENT, \ ++ FILENAME_ANALYZER ++ ++#define ORDERED_ITEMS \ ++ FILENAME_EXPLOITABLE, \ ++ FILENAME_NOT_REPORTABLE, \ ++ FILENAME_REASON, \ ++ FILENAME_BACKTRACE, \ ++ FILENAME_CRASH_FUNCTION, \ ++ FILENAME_CMDLINE, \ ++ FILENAME_EXECUTABLE, \ ++ FILENAME_PACKAGE, \ ++ FILENAME_COMPONENT, \ ++ FILENAME_PID, \ ++ FILENAME_PWD, \ ++ FILENAME_HOSTNAME, \ ++ FILENAME_COUNT ++ ++static const char *items_orderlist[] = { ++ ORDERED_ITEMS, ++ NULL, ++}; ++ ++static const char *items_auto_blacklist[] = { ++ EXPLICIT_ITEMS, ++ ORDERED_ITEMS, ++ FILENAME_PKG_NAME, ++ FILENAME_PKG_VERSION, ++ FILENAME_PKG_RELEASE, ++ FILENAME_PKG_ARCH, ++ FILENAME_PKG_EPOCH, ++ NULL, ++}; ++ ++struct ProblemDetailsWidgetPrivate { ++ PangoFontDescription *font; ++ gulong rows; ++ problem_data_t *problem_data; ++}; ++ ++G_DEFINE_TYPE(ProblemDetailsWidget, problem_details_widget, GTK_TYPE_GRID) ++ ++static void problem_details_widget_finalize(GObject *object); ++ ++static void ++problem_details_widget_class_init(ProblemDetailsWidgetClass *klass) ++{ ++ GObjectClass *object_class = G_OBJECT_CLASS(klass); ++ ++ object_class->finalize = problem_details_widget_finalize; ++ ++ g_type_class_add_private(klass, sizeof(ProblemDetailsWidgetPrivate)); ++} ++ ++static void ++problem_details_widget_finalize(GObject *object) ++{ ++ ProblemDetailsWidget *self; ++ ++ self = PROBLEM_DETAILS_WIDGET(object); ++ ++ self->priv->problem_data = (void *)0xdeadbeaf; ++ ++ G_OBJECT_CLASS(problem_details_widget_parent_class)->finalize(object); ++} ++ ++static gulong ++problem_details_widget_append_row(ProblemDetailsWidget *self) ++{ ++ gtk_grid_insert_row(GTK_GRID(self), self->priv->rows); ++ return self->priv->rows++; ++} ++ ++static void ++problem_details_widget_add_single_line(ProblemDetailsWidget *self, const char *name, const char *content) ++{ ++ GtkWidget *label = gtk_label_new(name); ++ gtk_widget_set_halign(label, GTK_ALIGN_START); ++ gtk_widget_set_valign(label, GTK_ALIGN_START); ++ gtk_widget_set_margin_start(label, 20); ++ gtk_widget_set_margin_end(label, 20); ++ ++ GtkWidget *value = gtk_label_new(content); ++ gtk_label_set_selectable(GTK_LABEL(value), TRUE); ++ gtk_label_set_line_wrap(GTK_LABEL(value), TRUE); ++ gtk_label_set_line_wrap_mode(GTK_LABEL(value), GTK_WRAP_WORD); ++ gtk_widget_set_halign(value, GTK_ALIGN_START); ++ gtk_widget_set_hexpand(value, TRUE); ++ gtk_widget_set_margin_start(value, 5); ++ gtk_widget_override_font(GTK_WIDGET(value), self->priv->font); ++ ++ const gulong row = problem_details_widget_append_row(self); ++ ++ gtk_grid_attach(GTK_GRID(self), label, 0, row, 1, 1); ++ gtk_grid_attach(GTK_GRID(self), value, 1, row, 1, 1); ++} ++ ++static void ++problem_details_widget_add_multi_line(ProblemDetailsWidget *self, const char *name, const char *content) ++{ ++#if 0 ++ GtkWidget *value = gtk_text_view_new(); ++ gtk_text_view_set_editable(GTK_TEXT_VIEW(value), FALSE); ++ ++ if (strcmp(name, FILENAME_COMMENT) == 0 ++ || strcmp(name, FILENAME_REASON) == 0) ++ gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(value), GTK_WRAP_WORD); ++ ++ reload_text_to_text_view(GTK_TEXT_VIEW(value), content); ++#else ++ GtkWidget *value = gtk_label_new(content); ++ gtk_widget_set_halign(value, GTK_ALIGN_START); ++ ++ if (strcmp(name, FILENAME_COMMENT) == 0 ++ || strcmp(name, FILENAME_REASON) == 0) ++ { ++ gtk_label_set_line_wrap(GTK_LABEL(value), TRUE); ++ gtk_label_set_line_wrap_mode(GTK_LABEL(value), GTK_WRAP_WORD); ++ gtk_widget_set_margin_bottom(value, 12); ++ } ++ ++ gtk_label_set_selectable(GTK_LABEL(value), TRUE); ++#endif ++ ++ gtk_widget_override_font(GTK_WIDGET(value), self->priv->font); ++ ++ GtkWidget *expander = gtk_expander_new(name); ++ gtk_widget_set_hexpand(expander, TRUE); ++ gtk_container_add(GTK_CONTAINER(expander), value); ++ ++ const gulong row = problem_details_widget_append_row(self); ++ ++ gtk_grid_attach(GTK_GRID(self), expander, 0, row, 2, 1); ++} ++ ++static void ++problem_details_widget_add_binary(ProblemDetailsWidget *self, const char *label, const char *path) ++{ ++ struct stat statbuf; ++ statbuf.st_size = 0; ++ ++ if (stat(path, &statbuf) != 0) ++ { ++ log("File '%s' does not exist", path); ++ return; ++ } ++ ++ gchar *size = g_format_size_full((long long)statbuf.st_size, G_FORMAT_SIZE_IEC_UNITS); ++ char *msg = xasprintf(_("$DATA_DIRECTORY/%s (binary file, %s)"), label, size); ++ problem_details_widget_add_single_line(self, label, msg); ++ free(msg); ++ g_free(size); ++} ++ ++static void ++problem_details_widget_add_time_stamp(ProblemDetailsWidget *self, const char *label, const char *stamp) ++{ ++ struct tm tm; ++ memset(&tm, 0, sizeof(struct tm)); ++ ++ const char *ret = strptime(stamp, "%s", &tm); ++ ++ if (ret == NULL || ret[0] != '\0') ++ return; ++ ++ char buf[255]; ++ strftime(buf, sizeof(buf), "%F %T", &tm); ++ ++ problem_details_widget_add_single_line(self, label, buf); ++} ++ ++static void ++problem_details_widget_add_problem_item(ProblemDetailsWidget *self, const char *name, problem_item *item) ++{ ++ if (item->flags & CD_FLAG_TXT) ++ { ++ if (strchr(item->content, '\n') == NULL) ++ problem_details_widget_add_single_line(self, name, item->content); ++ else ++ problem_details_widget_add_multi_line(self, name, item->content); ++ } ++ else if (item->flags & CD_FLAG_BIN) ++ problem_details_widget_add_binary(self, name, item->content); ++ else ++ log("Unsupported file type"); ++} ++ ++/* Callback for GHashTable */ ++static void ++problem_data_entry_to_grid_row_one_line(const char *item_name, problem_item *item, ProblemDetailsWidget *self) ++{ ++ if (((item->flags & CD_FLAG_TXT) && (strchr(item->content, '\n') == NULL)) ++ && !is_in_string_list(item_name, (char **)items_auto_blacklist)) ++ problem_details_widget_add_single_line(self, item_name, item->content); ++} ++ ++static void ++problem_data_entry_to_grid_row_multi_line(const char *item_name, problem_item *item, ProblemDetailsWidget *self) ++{ ++ if (((item->flags & CD_FLAG_TXT) && (strchr(item->content, '\n') != NULL)) ++ && !is_in_string_list(item_name, (char **)items_auto_blacklist)) ++ problem_details_widget_add_multi_line(self, item_name, item->content); ++} ++ ++static void ++problem_data_entry_to_grid_row_binary(const char *item_name, problem_item *item, ProblemDetailsWidget *self) ++{ ++ if ((item->flags & CD_FLAG_BIN) ++ && !is_in_string_list(item_name, (char **)items_auto_blacklist)) ++ problem_details_widget_add_binary(self, item_name, item->content); ++} ++ ++static void ++problem_details_widget_populate(ProblemDetailsWidget *self) ++{ ++ { /* Explicit order */ ++ for (const char **iter = items_orderlist; *iter; ++iter) ++ { ++ struct problem_item *item = problem_data_get_item_or_NULL( ++ self->priv->problem_data, *iter); ++ ++ if (item == NULL) ++ continue; ++ ++ problem_details_widget_add_problem_item(self, *iter, item); ++ } ++ } ++ ++ { /* comment: */ ++ const char *dd = problem_data_get_content_or_NULL( ++ self->priv->problem_data, FILENAME_COMMENT); ++ if (dd) ++ problem_details_widget_add_multi_line(self, FILENAME_COMMENT, dd); ++ } ++ ++ { /* First occurence: 2014-08-26 11:08 */ ++ const char *ts = problem_data_get_content_or_NULL( ++ self->priv->problem_data, FILENAME_TIME); ++ if (ts) ++ problem_details_widget_add_time_stamp(self, "first_occurence", ts); ++ } ++ ++ { /* Last occurence: 2014-08-27 11:08 */ ++ const char *ts = problem_data_get_content_or_NULL( ++ self->priv->problem_data, FILENAME_LAST_OCCURRENCE); ++ if (ts) ++ problem_details_widget_add_time_stamp(self, "last_occurence", ts); ++ } ++ ++ { /* User: login(UID) */ ++ const char *uid = problem_data_get_content_or_NULL( ++ self->priv->problem_data, FILENAME_UID); ++ ++ const char *username = problem_data_get_content_or_NULL( ++ self->priv->problem_data, "username"); ++ ++ char *line = NULL; ++ if (uid && username) ++ line = xasprintf("%s (%s)", username, uid); ++ else if (!uid && !username) ++ line = xstrdup("unknown user"); ++ else ++ line = xasprintf("%s", uid ? uid : username); ++ ++ problem_details_widget_add_single_line(self, "user", line); ++ } ++ ++ { /* Type/Analyzer: CCpp */ ++ const char *type = problem_data_get_content_or_NULL( ++ self->priv->problem_data, FILENAME_TYPE); ++ const char *analyzer = problem_data_get_content_or_NULL( ++ self->priv->problem_data, FILENAME_ANALYZER); ++ ++ char *label = NULL; ++ char *line = NULL; ++ if (type != NULL && analyzer != NULL) ++ { ++ if (strcmp(type, analyzer) != 0) ++ { ++ label = xstrdup("type/analyzer"); ++ line = xasprintf("%s/%s", type, analyzer); ++ } ++ else ++ { ++ label = xstrdup("type"); ++ line = xstrdup(type); ++ } ++ } ++ else ++ { ++ label = xstrdup(type ? "type" : "anlyzer"); ++ line = xstrdup(type ? type : analyzer); ++ } ++ ++ problem_details_widget_add_single_line(self, label, line); ++ ++ free(line); ++ free(label); ++ } ++ ++ g_hash_table_foreach(self->priv->problem_data, ++ (GHFunc)problem_data_entry_to_grid_row_one_line, self); ++ ++ { /* data directory: */ ++ const char *dd = problem_data_get_content_or_NULL( ++ self->priv->problem_data, CD_DUMPDIR); ++ if (dd) ++ problem_details_widget_add_single_line(self, "data_directory", dd); ++ ++ /* show binaries below the data_directory entry */ ++ g_hash_table_foreach(self->priv->problem_data, ++ (GHFunc)problem_data_entry_to_grid_row_binary, self); ++ } ++ ++ g_hash_table_foreach(self->priv->problem_data, ++ (GHFunc)problem_data_entry_to_grid_row_multi_line, self); ++} ++ ++static void ++problem_details_widget_init(ProblemDetailsWidget *self) ++{ ++ self->priv = PROBLEM_DETAILS_WIDGET_GET_PRIVATE(self); ++ self->priv->font = pango_font_description_from_string("monospace"); ++ self->priv->rows = 0; ++ self->priv->problem_data = NULL; ++} ++ ++ProblemDetailsWidget * ++problem_details_widget_new(problem_data_t *problem) ++{ ++ INITIALIZE_LIBREPORT(); ++ ++ GObject *object = g_object_new(TYPE_PROBLEM_DETAILS_WIDGET, NULL); ++ ProblemDetailsWidget *self = PROBLEM_DETAILS_WIDGET(object); ++ self->priv->problem_data = problem; ++ ++ problem_details_widget_populate(self); ++ gtk_widget_show_all(GTK_WIDGET(self)); ++ ++ return self; ++} ++ +diff --git a/src/gtk-helpers/problem_details_widget.h b/src/gtk-helpers/problem_details_widget.h +new file mode 100644 +index 0000000..c736a5d +--- /dev/null ++++ b/src/gtk-helpers/problem_details_widget.h +@@ -0,0 +1,62 @@ ++/* ++ Copyright (C) 2014 ABRT Team ++ Copyright (C) 2014 RedHat inc. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with this program; if not, write to the Free Software Foundation, Inc., ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++*/ ++#ifndef _PROBLEM_DETAILS_WIDGET_H ++#define _PROBLEM_DETAILS_WIDGET_H ++ ++#include ++#include "problem_data.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif /* __cplusplus */ ++ ++G_BEGIN_DECLS ++ ++#define TYPE_PROBLEM_DETAILS_WIDGET (problem_details_widget_get_type()) ++#define PROBLEM_DETAILS_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PROBLEM_DETAILS_WIDGET, ProblemDetailsWidget)) ++#define PROBLEM_DETAILS_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_PROBLEM_DETAILS_WIDGET, ProblemDetailsWidgetClass)) ++#define IS_PROBLEM_DETAILS_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PROBLEM_DETAILS_WIDGET)) ++#define IS_PROBLEM_DETAILS_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_PROBLEM_DETAILS_WIDGET)) ++#define PROBLEM_DETAILS_WIDGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_PROBLEM_DETAILS_WIDGET, ProblemDetailsWidgetClass)) ++ ++typedef struct _ProblemDetailsWidget ProblemDetailsWidget; ++typedef struct _ProblemDetailsWidgetClass ProblemDetailsWidgetClass; ++typedef struct ProblemDetailsWidgetPrivate ProblemDetailsWidgetPrivate; ++ ++struct _ProblemDetailsWidget { ++ GtkGrid parent_instance; ++ ProblemDetailsWidgetPrivate *priv; ++}; ++ ++struct _ProblemDetailsWidgetClass { ++ GtkGridClass parent_class; ++}; ++ ++GType problem_details_widget_get_type (void) G_GNUC_CONST; ++ ++ProblemDetailsWidget *problem_details_widget_new(problem_data_t *problem); ++ ++G_END_DECLS ++ ++#ifdef __cplusplus ++} ++#endif /* __cplusplus */ ++ ++#endif /* _PROBLEM_DETAILS_WIDGET_H */ ++ +diff --git a/src/gtk-helpers/utils.c b/src/gtk-helpers/utils.c +new file mode 100644 +index 0000000..4ba2c0e +--- /dev/null ++++ b/src/gtk-helpers/utils.c +@@ -0,0 +1,25 @@ ++#include "internal_libreport_gtk.h" ++ ++void reload_text_to_text_view(GtkTextView *tv, const char *text) ++{ ++ GtkTextBuffer *tb = gtk_text_view_get_buffer(tv); ++ GtkTextIter beg_iter, end_iter; ++ gtk_text_buffer_get_iter_at_offset(tb, &beg_iter, 0); ++ gtk_text_buffer_get_iter_at_offset(tb, &end_iter, -1); ++ gtk_text_buffer_delete(tb, &beg_iter, &end_iter); ++ ++ if (!text) ++ return; ++ ++ const gchar *end; ++ while (!g_utf8_validate(text, -1, &end)) ++ { ++ gtk_text_buffer_insert_at_cursor(tb, text, end - text); ++ char buf[8]; ++ unsigned len = snprintf(buf, sizeof(buf), "<%02X>", (unsigned char)*end); ++ gtk_text_buffer_insert_at_cursor(tb, buf, len); ++ text = end + 1; ++ } ++ ++ gtk_text_buffer_insert_at_cursor(tb, text, strlen(text)); ++} +diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c +index 525d275..54b9b10 100644 +--- a/src/gui-wizard-gtk/wizard.c ++++ b/src/gui-wizard-gtk/wizard.c +@@ -393,31 +393,12 @@ static void load_text_to_text_view(GtkTextView *tv, const char *name) + /* a result of xstrdup() is freed */ + g_hash_table_insert(g_loaded_texts, (gpointer)xstrdup(name), (gpointer)1); + +- GtkTextBuffer *tb = gtk_text_view_get_buffer(tv); +- + const char *str = g_cd ? problem_data_get_content_or_NULL(g_cd, name) : NULL; + /* Bad: will choke at any text with non-Unicode parts: */ + /* gtk_text_buffer_set_text(tb, (str ? str : ""), -1);*/ + /* Start torturing ourself instead: */ + +- GtkTextIter beg_iter, end_iter; +- gtk_text_buffer_get_iter_at_offset(tb, &beg_iter, 0); +- gtk_text_buffer_get_iter_at_offset(tb, &end_iter, -1); +- gtk_text_buffer_delete(tb, &beg_iter, &end_iter); +- +- if (!str) +- return; +- +- const gchar *end; +- while (!g_utf8_validate(str, -1, &end)) +- { +- gtk_text_buffer_insert_at_cursor(tb, str, end - str); +- char buf[8]; +- unsigned len = snprintf(buf, sizeof(buf), "<%02X>", (unsigned char)*end); +- gtk_text_buffer_insert_at_cursor(tb, buf, len); +- str = end + 1; +- } +- gtk_text_buffer_insert_at_cursor(tb, str, strlen(str)); ++ reload_text_to_text_view(tv, str); + } + + static gchar *get_malloced_string_from_text_view(GtkTextView *tv) +-- +1.8.3.1 + diff --git a/0024-gui-port-to-Problem-Details-suite.patch b/0024-gui-port-to-Problem-Details-suite.patch new file mode 100644 index 0000000..1f9d493 --- /dev/null +++ b/0024-gui-port-to-Problem-Details-suite.patch @@ -0,0 +1,168 @@ +From 49791d07c907048de4e36a1fa777ebc3cebd36fd Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Mon, 25 Aug 2014 17:20:16 +0200 +Subject: [LIBREPORT PATCH] gui: port to Problem Details suite + +- show the "Details" button on the comment page +- use the problem details widget on the summary page + +Signed-off-by: Jakub Filak +--- + src/gui-wizard-gtk/wizard.c | 43 ++++++++++++++++++++--------------------- + src/gui-wizard-gtk/wizard.glade | 16 +++++++-------- + 2 files changed, 29 insertions(+), 30 deletions(-) + +diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c +index 54b9b10..f0445eb 100644 +--- a/src/gui-wizard-gtk/wizard.c ++++ b/src/gui-wizard-gtk/wizard.c +@@ -69,6 +69,7 @@ static GtkWidget *g_btn_close; + static GtkWidget *g_btn_next; + static GtkWidget *g_btn_onfail; + static GtkWidget *g_btn_repeat; ++static GtkWidget *g_btn_detail; + + static GtkBox *g_box_events; + static GtkBox *g_box_workflows; +@@ -2673,6 +2674,7 @@ static void on_page_prepare(GtkNotebook *assistant, GtkWidget *page, gpointer us + clear_warnings(); + } + ++ gtk_widget_hide(g_btn_detail); + gtk_widget_hide(g_btn_onfail); + if (!g_expert_mode) + gtk_widget_hide(g_btn_repeat); +@@ -2710,31 +2712,12 @@ static void on_page_prepare(GtkNotebook *assistant, GtkWidget *page, gpointer us + show_warnings(); + } + +- if (pages[PAGENO_SUMMARY].page_widget == page +- || pages[PAGENO_REVIEW_DATA].page_widget == page +- ) { +- GtkWidget *w = GTK_WIDGET(g_tv_details); +- GtkContainer *c = GTK_CONTAINER(gtk_widget_get_parent(w)); +- if (c) +- gtk_container_remove(c, w); +- gtk_container_add(pages[PAGENO_SUMMARY].page_widget == page ? +- g_container_details1 : g_container_details2, +- w +- ); +- /* Make checkbox column visible only on the last page */ +- gtk_tree_view_column_set_visible(g_tv_details_col_checkbox, +- (pages[PAGENO_REVIEW_DATA].page_widget == page) +- ); +- +- if (pages[PAGENO_REVIEW_DATA].page_widget == page) +- { +- gtk_widget_set_sensitive(g_btn_next, gtk_toggle_button_get_active(g_tb_approve_bt)); +- update_ls_details_checkboxes(g_event_selected); +- } +- } ++ if (pages[PAGENO_REVIEW_DATA].page_widget == page) ++ update_ls_details_checkboxes(g_event_selected); + + if (pages[PAGENO_EDIT_COMMENT].page_widget == page) + { ++ gtk_widget_show(g_btn_detail); + gtk_widget_set_sensitive(g_btn_next, false); + on_comment_changed(gtk_text_view_get_buffer(g_tv_comment), NULL); + } +@@ -3192,6 +3175,12 @@ static void on_btn_add_file(GtkButton *button) + } + } + ++static void on_btn_detail(GtkButton *button) ++{ ++ GtkWidget *pdd = problem_details_dialog_new(g_cd, g_wnd_assistant); ++ gtk_dialog_run(GTK_DIALOG(pdd)); ++} ++ + /* [Del] key handling in item list */ + static void delete_item(GtkTreeView *treeview) + { +@@ -3317,6 +3306,8 @@ static void add_pages(void) + + g_signal_connect(g_tv_details, "key-press-event", G_CALLBACK(on_key_press_event_in_item_list), NULL); + g_tv_sensitive_sel_hndlr = g_signal_connect(g_tv_sensitive_sel, "changed", G_CALLBACK(on_sensitive_word_selection_changed), NULL); ++ ++ + } + + static void create_details_treeview(void) +@@ -3487,6 +3478,8 @@ void create_assistant(GtkApplication *app, bool expert_mode) + g_btn_next = gtk_button_new_with_mnemonic(_("_Forward")); + gtk_button_set_image(GTK_BUTTON(g_btn_next), gtk_image_new_from_icon_name("go-next-symbolic", GTK_ICON_SIZE_BUTTON)); + gtk_widget_set_no_show_all(g_btn_next, true); /* else gtk_widget_hide won't work */ ++ g_btn_detail = gtk_button_new_with_mnemonic(_("Details")); ++ gtk_widget_set_no_show_all(g_btn_detail, true); /* else gtk_widget_hide won't work */ + + g_box_buttons = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0)); + gtk_box_pack_start(g_box_buttons, g_btn_close, false, false, 5); +@@ -3497,10 +3490,12 @@ void create_assistant(GtkApplication *app, bool expert_mode) + #if ((GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION < 13) || (GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION == 13 && GTK_MICRO_VERSION < 5)) + GtkWidget *w = gtk_alignment_new(0.0, 0.0, 1.0, 1.0); + gtk_box_pack_start(g_box_buttons, w, true, true, 5); ++ gtk_box_pack_start(g_box_buttons, g_btn_detail, false, false, 5); + gtk_box_pack_start(g_box_buttons, g_btn_next, false, false, 5); + #else + gtk_widget_set_valign(GTK_WIDGET(g_btn_next), GTK_ALIGN_END); + gtk_box_pack_end(g_box_buttons, g_btn_next, false, false, 5); ++ gtk_box_pack_end(g_box_buttons, g_btn_detail, false, false, 5); + #endif + + { /* Warnings area widget definition start */ +@@ -3564,6 +3559,9 @@ void create_assistant(GtkApplication *app, bool expert_mode) + + create_details_treeview(); + ++ ProblemDetailsWidget *details = problem_details_widget_new(g_cd); ++ gtk_container_add(GTK_CONTAINER(g_container_details1), GTK_WIDGET(details)); ++ + g_signal_connect(g_btn_close, "clicked", G_CALLBACK(assistant_quit_cb), g_wnd_assistant); + g_signal_connect(g_btn_stop, "clicked", G_CALLBACK(on_btn_cancel_event), NULL); + g_signal_connect(g_btn_onfail, "clicked", G_CALLBACK(on_btn_failed_cb), NULL); +@@ -3577,6 +3575,7 @@ void create_assistant(GtkApplication *app, bool expert_mode) + g_signal_connect(gtk_text_view_get_buffer(g_tv_comment), "changed", G_CALLBACK(on_comment_changed), NULL); + + g_signal_connect(g_btn_add_file, "clicked", G_CALLBACK(on_btn_add_file), NULL); ++ g_signal_connect(g_btn_detail, "clicked", G_CALLBACK(on_btn_detail), NULL); + + if (is_screencast_available()) { + /* we need to override the activate-link handler, because we use +diff --git a/src/gui-wizard-gtk/wizard.glade b/src/gui-wizard-gtk/wizard.glade +index b0953db..5edca64 100644 +--- a/src/gui-wizard-gtk/wizard.glade ++++ b/src/gui-wizard-gtk/wizard.glade +@@ -405,13 +405,7 @@ + True + out + +- +- True +- True +- +- +- +- ++ + + + +@@ -676,7 +670,13 @@ + True + out + +- ++ ++ True ++ True ++ ++ ++ ++ + + + +-- +1.8.3.1 + diff --git a/0026-gui-fix-build-with-older-gtk.patch b/0026-gui-fix-build-with-older-gtk.patch new file mode 100644 index 0000000..5389055 --- /dev/null +++ b/0026-gui-fix-build-with-older-gtk.patch @@ -0,0 +1,48 @@ +From ddde221387b5e9f9d9abc7614a671934fdf1e56d Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Thu, 28 Aug 2014 09:38:16 +0200 +Subject: [LIBREPORT PATCH] gui: fix build with older gtk + +Signed-off-by: Jakub Filak +--- + src/gtk-helpers/problem_details_widget.c | 15 ++++++++++++--- + 1 file changed, 12 insertions(+), 3 deletions(-) + +diff --git a/src/gtk-helpers/problem_details_widget.c b/src/gtk-helpers/problem_details_widget.c +index 2cb3206..c314d4d 100644 +--- a/src/gtk-helpers/problem_details_widget.c ++++ b/src/gtk-helpers/problem_details_widget.c +@@ -110,8 +110,6 @@ problem_details_widget_add_single_line(ProblemDetailsWidget *self, const char *n + GtkWidget *label = gtk_label_new(name); + gtk_widget_set_halign(label, GTK_ALIGN_START); + gtk_widget_set_valign(label, GTK_ALIGN_START); +- gtk_widget_set_margin_start(label, 20); +- gtk_widget_set_margin_end(label, 20); + + GtkWidget *value = gtk_label_new(content); + gtk_label_set_selectable(GTK_LABEL(value), TRUE); +@@ -119,9 +117,20 @@ problem_details_widget_add_single_line(ProblemDetailsWidget *self, const char *n + gtk_label_set_line_wrap_mode(GTK_LABEL(value), GTK_WRAP_WORD); + gtk_widget_set_halign(value, GTK_ALIGN_START); + gtk_widget_set_hexpand(value, TRUE); +- gtk_widget_set_margin_start(value, 5); + gtk_widget_override_font(GTK_WIDGET(value), self->priv->font); + ++#if ((GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION < 11) || (GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION == 11 && GTK_MICRO_VERSION < 2)) ++ gtk_widget_set_margin_left(label, 20); ++ gtk_widget_set_margin_right(label, 20); ++ ++ gtk_widget_set_margin_left(value, 5); ++#else ++ gtk_widget_set_margin_start(label, 20); ++ gtk_widget_set_margin_end(label, 20); ++ ++ gtk_widget_set_margin_start(value, 5); ++#endif ++ + const gulong row = problem_details_widget_append_row(self); + + gtk_grid_attach(GTK_GRID(self), label, 0, row, 1, 1); +-- +1.8.3.1 + diff --git a/0027-wizard-don-t-work-with-destroyed-widgets.patch b/0027-wizard-don-t-work-with-destroyed-widgets.patch new file mode 100644 index 0000000..53ba91c --- /dev/null +++ b/0027-wizard-don-t-work-with-destroyed-widgets.patch @@ -0,0 +1,111 @@ +From 25d6050b2c5b71d1c1bd9e9820429aa1f79e8dd7 Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Thu, 28 Aug 2014 12:22:39 +0200 +Subject: [LIBREPORT PATCH] wizard: don't work with destroyed widgets + +Resolves rhbz#1133055 +Related to rhbz#1069917 + +Signed-off-by: Jakub Filak +--- + src/gui-wizard-gtk/wizard.c | 35 ++++++++++++++++++++++++++++------- + 1 file changed, 28 insertions(+), 7 deletions(-) + +diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c +index f0445eb..8620823 100644 +--- a/src/gui-wizard-gtk/wizard.c ++++ b/src/gui-wizard-gtk/wizard.c +@@ -57,6 +57,7 @@ static char *g_event_selected; + static unsigned g_black_event_count = 0; + + static pid_t g_event_child_pid = 0; ++static guint g_event_source_id = 0; + + static bool g_expert_mode; + +@@ -1529,10 +1530,18 @@ static void update_event_log_on_disk(const char *str) + dd_close(dd); + } + ++static bool cancel_event_run() ++{ ++ if (g_event_child_pid <= 0) ++ return false; ++ ++ kill(- g_event_child_pid, SIGTERM); ++ return true; ++} ++ + static void on_btn_cancel_event(GtkButton *button) + { +- if (g_event_child_pid > 0) +- kill(- g_event_child_pid, SIGTERM); ++ cancel_event_run(); + } + + static bool is_processing_finished() +@@ -1938,8 +1947,10 @@ static gboolean consume_cmd_output(GIOChannel *source, GIOCondition condition, g + : _("Processing finished, please proceed to the next step.")); + } + +- /*g_source_remove(evd->event_source_id);*/ ++ g_source_remove(g_event_source_id); ++ g_event_source_id = 0; + close(evd->fd); ++ g_io_channel_unref(evd->channel); + free_run_event_state(evd->run_state); + strbuf_free(evd->event_log); + free(evd->event_name); +@@ -2108,7 +2119,7 @@ static void start_event_run(const char *event_name) + + ndelay_on(evd->fd); + evd->channel = g_io_channel_unix_new(evd->fd); +- /*evd->event_source_id = */ g_io_add_watch(evd->channel, ++ g_event_source_id = g_io_add_watch(evd->channel, + G_IO_IN | G_IO_ERR | G_IO_HUP, /* need HUP to detect EOF w/o any data */ + consume_cmd_output, + evd +@@ -3385,13 +3396,23 @@ static void init_pages(void) + + static void assistant_quit_cb(void *obj, void *data) + { ++ /* Suppress execution of consume_cmd_output() */ ++ if (g_event_source_id != 0) ++ { ++ g_source_remove(g_event_source_id); ++ g_event_source_id = 0; ++ } ++ ++ cancel_event_run(); ++ + if (g_loaded_texts) + { + g_hash_table_destroy(g_loaded_texts); + g_loaded_texts = NULL; + } + +- gtk_widget_destroy(GTK_WIDGET(data)); ++ gtk_widget_destroy(GTK_WIDGET(g_wnd_assistant)); ++ g_wnd_assistant = (void *)0xdeadbeaf; + } + + static void on_btn_startcast(GtkWidget *btn, gpointer user_data) +@@ -3562,13 +3583,13 @@ void create_assistant(GtkApplication *app, bool expert_mode) + ProblemDetailsWidget *details = problem_details_widget_new(g_cd); + gtk_container_add(GTK_CONTAINER(g_container_details1), GTK_WIDGET(details)); + +- g_signal_connect(g_btn_close, "clicked", G_CALLBACK(assistant_quit_cb), g_wnd_assistant); ++ g_signal_connect(g_btn_close, "clicked", G_CALLBACK(assistant_quit_cb), NULL); + g_signal_connect(g_btn_stop, "clicked", G_CALLBACK(on_btn_cancel_event), NULL); + g_signal_connect(g_btn_onfail, "clicked", G_CALLBACK(on_btn_failed_cb), NULL); + g_signal_connect(g_btn_repeat, "clicked", G_CALLBACK(on_btn_repeat_cb), NULL); + g_signal_connect(g_btn_next, "clicked", G_CALLBACK(on_next_btn_cb), NULL); + +- g_signal_connect(g_wnd_assistant, "destroy", G_CALLBACK(assistant_quit_cb), g_wnd_assistant); ++ g_signal_connect(g_wnd_assistant, "destroy", G_CALLBACK(assistant_quit_cb), NULL); + g_signal_connect(g_assistant, "switch-page", G_CALLBACK(on_page_prepare), NULL); + + g_signal_connect(g_tb_approve_bt, "toggled", G_CALLBACK(on_bt_approve_toggle), NULL); +-- +1.8.3.1 + diff --git a/0028-wizard-make-report-gtk-s-application-nonunique.patch b/0028-wizard-make-report-gtk-s-application-nonunique.patch new file mode 100644 index 0000000..eeecb03 --- /dev/null +++ b/0028-wizard-make-report-gtk-s-application-nonunique.patch @@ -0,0 +1,28 @@ +From da84e28b50483e92e1b6a472875af045ded61bfc Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Tue, 9 Sep 2014 10:55:43 +0200 +Subject: [LIBREPORT PATCH] wizard: make report-gtk's application nonunique + +Resolves: rhbz#1135782 + +Signed-off-by: Jakub Filak +--- + src/gui-wizard-gtk/main.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/gui-wizard-gtk/main.c b/src/gui-wizard-gtk/main.c +index 697b91f..44918ec 100644 +--- a/src/gui-wizard-gtk/main.c ++++ b/src/gui-wizard-gtk/main.c +@@ -216,7 +216,7 @@ int main(int argc, char **argv) + problem_data_reload_from_dump_dir(); + + g_custom_logger = &show_error_as_msgbox; +- GtkApplication *app = gtk_application_new("org.freedesktop.libreport.report", G_APPLICATION_FLAGS_NONE); ++ GtkApplication *app = gtk_application_new("org.freedesktop.libreport.report", G_APPLICATION_NON_UNIQUE); + g_signal_connect(app, "activate", G_CALLBACK(activate_wizard), (gpointer)expert_mode); + g_signal_connect(app, "startup", G_CALLBACK(startup_wizard), NULL); + /* Enter main loop */ +-- +1.8.3.1 + diff --git a/0029-Fix-bugzilla-bug-formating-for-libreport-analyzer.patch b/0029-Fix-bugzilla-bug-formating-for-libreport-analyzer.patch new file mode 100644 index 0000000..2751d89 --- /dev/null +++ b/0029-Fix-bugzilla-bug-formating-for-libreport-analyzer.patch @@ -0,0 +1,242 @@ +From add69e68e0990642574d41954fe8fc9d9c892ba7 Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Wed, 10 Sep 2014 18:34:29 +0200 +Subject: [LIBREPORT PATCH] Fix bugzilla bug formating for libreport analyzer + +Name of format for git component collided with name of format for analyzer. +Signed-off-by: Matej Habrnal +--- + doc/Makefile.am | 2 +- + doc/bugzilla_format_analyzer_libreport.conf.txt | 19 +++++++ + doc/bugzilla_format_libreport.conf.txt | 19 ------- + src/plugins/Makefile.am | 2 +- + src/plugins/bugzilla_event.conf | 2 +- + .../bugzilla_format_analyzer_libreport.conf | 59 ++++++++++++++++++++++ + src/plugins/bugzilla_format_libreport.conf | 59 ---------------------- + 7 files changed, 81 insertions(+), 81 deletions(-) + create mode 100644 doc/bugzilla_format_analyzer_libreport.conf.txt + delete mode 100644 doc/bugzilla_format_libreport.conf.txt + create mode 100644 src/plugins/bugzilla_format_analyzer_libreport.conf + delete mode 100644 src/plugins/bugzilla_format_libreport.conf + +diff --git a/doc/Makefile.am b/doc/Makefile.am +index 7c07991..b319ac5 100644 +--- a/doc/Makefile.am ++++ b/doc/Makefile.am +@@ -36,7 +36,7 @@ MAN5_TXT += bugzilla_format.conf.txt + MAN5_TXT += bugzilla_formatdup_anaconda.conf.txt + MAN5_TXT += bugzilla_formatdup.conf.txt + MAN5_TXT += bugzilla_format_kernel.conf.txt +-MAN5_TXT += bugzilla_format_libreport.conf.txt ++MAN5_TXT += bugzilla_format_analyzer_libreport.conf.txt + MAN5_TXT += emergencyanalysis_event.conf.txt + MAN5_TXT += ignored_words.conf.txt + MAN5_TXT += forbidden_words.conf.txt +diff --git a/doc/bugzilla_format_analyzer_libreport.conf.txt b/doc/bugzilla_format_analyzer_libreport.conf.txt +new file mode 100644 +index 0000000..9637870 +--- /dev/null ++++ b/doc/bugzilla_format_analyzer_libreport.conf.txt +@@ -0,0 +1,19 @@ ++bugzilla_format_analyzer_libreport.conf(5) ++========================================= ++ ++NAME ++---- ++bugzilla_format_analyzer_libreport.conf - configuration file for libreport. ++ ++DESCRIPTION ++----------- ++This configuration file provides definition of formatting for new Bugzilla bugs ++for arbitrary problems reported over libreport. ++ ++SEE ALSO ++-------- ++reporter-bugzilla(1), bugzilla_format.conf(5), bugzilla_event.conf(5) ++ ++AUTHOR ++------ ++* ABRT Team +diff --git a/doc/bugzilla_format_libreport.conf.txt b/doc/bugzilla_format_libreport.conf.txt +deleted file mode 100644 +index 80fcb33..0000000 +--- a/doc/bugzilla_format_libreport.conf.txt ++++ /dev/null +@@ -1,19 +0,0 @@ +-bugzilla_format_libreport.conf(5) +-================================ +- +-NAME +----- +-bugzilla_format_libreport.conf - configuration file for libreport. +- +-DESCRIPTION +------------ +-This configuration file provides definition of formatting for new Bugzilla bugs +-for arbitrary problems reported over libreport. +- +-SEE ALSO +--------- +-reporter-bugzilla(1), bugzilla_format.conf(5), bugzilla_event.conf(5) +- +-AUTHOR +------- +-* ABRT Team +diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am +index 7e0e753..fcbdc64 100644 +--- a/src/plugins/Makefile.am ++++ b/src/plugins/Makefile.am +@@ -28,7 +28,7 @@ if BUILD_BUGZILLA + reporters_plugin_conf += bugzilla.conf + reporters_plugin_format_conf += bugzilla_format.conf \ + bugzilla_formatdup.conf \ +- bugzilla_format_libreport.conf \ ++ bugzilla_format_analyzer_libreport.conf \ + bugzilla_format_kernel.conf \ + bugzilla_format_anaconda.conf \ + bugzilla_formatdup_anaconda.conf +diff --git a/src/plugins/bugzilla_event.conf b/src/plugins/bugzilla_event.conf +index e0556e3..0910d70 100644 +--- a/src/plugins/bugzilla_event.conf ++++ b/src/plugins/bugzilla_event.conf +@@ -1,6 +1,6 @@ + EVENT=report_Bugzilla analyzer=libreport + reporter-bugzilla -b \ +- -F /etc/libreport/plugins/bugzilla_format_libreport.conf ++ -F /etc/libreport/plugins/bugzilla_format_analyzer_libreport.conf + + EVENT=watch_Bugzilla reported_to~=Bugzilla + reporter-bugzilla -t -w -d "$DUMP_DIR" +diff --git a/src/plugins/bugzilla_format_analyzer_libreport.conf b/src/plugins/bugzilla_format_analyzer_libreport.conf +new file mode 100644 +index 0000000..2ecdf6f +--- /dev/null ++++ b/src/plugins/bugzilla_format_analyzer_libreport.conf +@@ -0,0 +1,59 @@ ++# Lines starting with # are ignored. ++# Lines can be continued on the next line using trailing backslash. ++# ++# Format: ++# %summary:: summary format ++# section:: element1[,element2]... ++# The literal text line to be added to Bugzilla comment. Can be empty. ++# (IOW: empty lines are NOT ignored!) ++# ++# Summary format is a line of text, where %element% is replaced by ++# text element's content, and [[...%element%...]] block is used only if ++# %element% exists. [[...]] blocks can nest. ++# ++# Sections can be: ++# - %summary: bug summary format string. ++# - %attach: a list of elements to attach. ++# - text, double colon (::) and the list of comma-separated elements. ++# ++# Elements can be: ++# - problem directory element names, which get formatted as ++# : ++# or ++# : ++# : ++# : ++# : ++# - problem directory element names prefixed by "%bare_", ++# which is formatted as-is, without ":" and colons ++# - %oneline, %multiline, %text wildcards, which select all corresponding ++# elements for output or attachment ++# - %binary wildcard, valid only for %attach section, instructs to attach ++# binary elements ++# - problem directory element names prefixed by "-", ++# which excludes given element from all wildcards ++# ++# Nonexistent elements are silently ignored. ++# If none of elements exists, the section will not be created. ++ ++%summary:: %reason% ++ ++Description of problem:: %bare_comment, %bare_description ++# (%bare_description is used only by SELinux's AVCs, ++# to be fixed...) ++ ++Version-Release number of selected component:: %bare_package ++ ++Additional info:: \ ++ -pkg_arch,-pkg_epoch,-pkg_name,-pkg_release,-pkg_version,\ ++ -component,-architecture,\ ++ -analyzer,-count,-duphash,-uuid,-abrt_version,\ ++ -username,-hostname,-os_release,-os_info,\ ++ -time,-pid,-pwd,-last_occurrence,-ureports_counter,\ ++ %reporter,\ ++ %oneline ++ ++Truncated backtrace:: %bare_%short_backtrace ++ ++%attach:: -reported_to,-comment,-reason,-event_log,%multiline,\ ++ -coredump,%binary +diff --git a/src/plugins/bugzilla_format_libreport.conf b/src/plugins/bugzilla_format_libreport.conf +deleted file mode 100644 +index 2ecdf6f..0000000 +--- a/src/plugins/bugzilla_format_libreport.conf ++++ /dev/null +@@ -1,59 +0,0 @@ +-# Lines starting with # are ignored. +-# Lines can be continued on the next line using trailing backslash. +-# +-# Format: +-# %summary:: summary format +-# section:: element1[,element2]... +-# The literal text line to be added to Bugzilla comment. Can be empty. +-# (IOW: empty lines are NOT ignored!) +-# +-# Summary format is a line of text, where %element% is replaced by +-# text element's content, and [[...%element%...]] block is used only if +-# %element% exists. [[...]] blocks can nest. +-# +-# Sections can be: +-# - %summary: bug summary format string. +-# - %attach: a list of elements to attach. +-# - text, double colon (::) and the list of comma-separated elements. +-# +-# Elements can be: +-# - problem directory element names, which get formatted as +-# : +-# or +-# : +-# : +-# : +-# : +-# - problem directory element names prefixed by "%bare_", +-# which is formatted as-is, without ":" and colons +-# - %oneline, %multiline, %text wildcards, which select all corresponding +-# elements for output or attachment +-# - %binary wildcard, valid only for %attach section, instructs to attach +-# binary elements +-# - problem directory element names prefixed by "-", +-# which excludes given element from all wildcards +-# +-# Nonexistent elements are silently ignored. +-# If none of elements exists, the section will not be created. +- +-%summary:: %reason% +- +-Description of problem:: %bare_comment, %bare_description +-# (%bare_description is used only by SELinux's AVCs, +-# to be fixed...) +- +-Version-Release number of selected component:: %bare_package +- +-Additional info:: \ +- -pkg_arch,-pkg_epoch,-pkg_name,-pkg_release,-pkg_version,\ +- -component,-architecture,\ +- -analyzer,-count,-duphash,-uuid,-abrt_version,\ +- -username,-hostname,-os_release,-os_info,\ +- -time,-pid,-pwd,-last_occurrence,-ureports_counter,\ +- %reporter,\ +- %oneline +- +-Truncated backtrace:: %bare_%short_backtrace +- +-%attach:: -reported_to,-comment,-reason,-event_log,%multiline,\ +- -coredump,%binary +-- +1.8.3.1 + diff --git a/0031-man_page-corrected-man-pages.patch b/0031-man_page-corrected-man-pages.patch new file mode 100644 index 0000000..2e61fe8 --- /dev/null +++ b/0031-man_page-corrected-man-pages.patch @@ -0,0 +1,50 @@ +From 9bcfdf4cf000a4e262b6c963e6a2a3d63bbc99d9 Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Thu, 18 Sep 2014 17:32:58 +0200 +Subject: [LIBREPORT PATCH] man_page: corrected man pages + +Corrected nonsence in report_rhel.conf and report_fedora.conf. + +Fixes #283 + +Signed-off-by: Matej Habrnal +--- + doc/report_fedora.conf.txt | 5 +++-- + doc/report_rhel.conf.txt | 5 +++-- + 2 files changed, 6 insertions(+), 4 deletions(-) + +diff --git a/doc/report_fedora.conf.txt b/doc/report_fedora.conf.txt +index 125bd71..1c29080 100644 +--- a/doc/report_fedora.conf.txt ++++ b/doc/report_fedora.conf.txt +@@ -10,8 +10,9 @@ DESCRIPTION + This configuration file specifies which of the reporting work flow definitions + are applicable for all problems types on Fedora. + +-All applicable reporting work flows are presented to users in User Interface as +-possibilities for processing of particular problem in 'anaconda' package. ++All applicable work flows are presented to users in User Interface as ++possibilities for processing of any problems. A particular work flow becomes ++applicable if its conditions are satisfied. + + This configuration file consists from one condition per line. + +diff --git a/doc/report_rhel.conf.txt b/doc/report_rhel.conf.txt +index e2e5b0e..251748c 100644 +--- a/doc/report_rhel.conf.txt ++++ b/doc/report_rhel.conf.txt +@@ -10,8 +10,9 @@ DESCRIPTION + This configuration file specifies which of the reporting work flow definitions + are applicable for all problems types on Red Hat Enterprise Linux. + +-All applicable reporting work flows are presented to users in User Interface as +-possibilities for processing of particular problem in 'anaconda' package. ++All applicable work flows are presented to users in User Interface as ++possibilities for processing of any problems. A particular work flow becomes ++applicable if its conditions are satisfied. + + This configuration file consists from one condition per line. + +-- +1.8.3.1 + diff --git a/0032-doc-updated-manpages-reporter.patch b/0032-doc-updated-manpages-reporter.patch new file mode 100644 index 0000000..d23d317 --- /dev/null +++ b/0032-doc-updated-manpages-reporter.patch @@ -0,0 +1,171 @@ +From 33e348eb0e0e40ed659e9920fce26f6b67971f83 Mon Sep 17 00:00:00 2001 +From: Matej Habrnal +Date: Thu, 18 Sep 2014 23:12:45 +0200 +Subject: [LIBREPORT PATCH] doc: updated manpages reporter-* + +Added section FILES to reporter-* manpages and updated section SEE ALSO. + +Related to rhbz#1067143 + +Signed-off-by: Matej Habrnal + +Conflicts: + doc/reporter-ureport.txt +--- + doc/reporter-bugzilla.txt | 13 ++++++++++++- + doc/reporter-kerneloops.txt | 4 ++++ + doc/reporter-mailx.txt | 12 ++++++++++++ + doc/reporter-print.txt | 4 ++++ + doc/reporter-rhtsupport.txt | 10 +++++++++- + doc/reporter-upload.txt | 12 ++++++++++++ + doc/reporter-ureport.txt | 10 +++++++++- + 7 files changed, 62 insertions(+), 3 deletions(-) + +diff --git a/doc/reporter-bugzilla.txt b/doc/reporter-bugzilla.txt +index 2feb922..48afb03 100644 +--- a/doc/reporter-bugzilla.txt ++++ b/doc/reporter-bugzilla.txt +@@ -191,9 +191,20 @@ the configuration file. + 'HTTPS_PROXY':: + the proxy server to use for HTTPS + ++FILES ++----- ++/usr/share/libreport/conf.d/plugins/bugzilla.conf:: ++ Readonly default configuration files. ++ ++/etc/libreport/plugins/bugzilla.conf:: ++ Configuration file. ++ ++/etc/libreport/plugins/bugzilla_format.conf:: ++ Configure formating for reporting. ++ + SEE ALSO + -------- +-report_event.conf, bugzilla_format.conf ++report_event.conf(5), bugzilla_format.conf(5) + + AUTHORS + ------- +diff --git a/doc/reporter-kerneloops.txt b/doc/reporter-kerneloops.txt +index 57b0983..b23d517 100644 +--- a/doc/reporter-kerneloops.txt ++++ b/doc/reporter-kerneloops.txt +@@ -63,6 +63,10 @@ the configuration file. + 'KerneloopsReporter_SubmitURL':: + The URL of the kerneloops tracker. + ++SEE ALSO ++-------- ++koops_event.conf(5) ++ + AUTHORS + ------- + * ABRT team +diff --git a/doc/reporter-mailx.txt b/doc/reporter-mailx.txt +index f946653..bd0c63e 100644 +--- a/doc/reporter-mailx.txt ++++ b/doc/reporter-mailx.txt +@@ -86,6 +86,18 @@ the configuration file. + Use yes/true/on/1 to attach all binary files from the problem + directory to the email. + ++FILES ++----- ++/usr/share/libreport/conf.d/plugins/mailx.conf:: ++ Readonly default configuration files. ++ ++/etc/libreport/plugins/mailx.conf:: ++ Configuration files. ++ ++SEE ALSO ++-------- ++mailx_event.conf(5), mailx.conf(5), report_mailx.conf(5) ++ + AUTHORS + ------- + * ABRT team +diff --git a/doc/reporter-print.txt b/doc/reporter-print.txt +index 5a39673..6e35000 100644 +--- a/doc/reporter-print.txt ++++ b/doc/reporter-print.txt +@@ -59,6 +59,10 @@ Elements which have more than one line are printed in the form + + Output may contain empty lines for better readability. + ++SEE ALSO ++-------- ++print_event.conf(5) ++ + AUTHORS + ------- + * ABRT team +diff --git a/doc/reporter-rhtsupport.txt b/doc/reporter-rhtsupport.txt +index 6ac8eff..b018906 100644 +--- a/doc/reporter-rhtsupport.txt ++++ b/doc/reporter-rhtsupport.txt +@@ -71,6 +71,14 @@ OPTIONS + -t[ID]:: + Upload FILEs to the already created case on RHTSupport site. + ++FILES ++----- ++/usr/share/libreport/conf.d/plugins/rhtsupport.conf:: ++ Readonly default configuration files. ++ ++/etc/libreport/plugins/rhtsupport.conf:: ++ Configuration file. ++ + SEE ALSO + -------- +-abrt_event.conf ++abrt_event.conf(5), rhtsupport.conf(5), rhtsupport_event.conf(5) +diff --git a/doc/reporter-upload.txt b/doc/reporter-upload.txt +index 640d951..acd72e7 100644 +--- a/doc/reporter-upload.txt ++++ b/doc/reporter-upload.txt +@@ -69,6 +69,18 @@ the configuration file. + 'Upload_URL':: + The URL where should be the tarball uploaded. + ++FILES ++----- ++/usr/share/libreport/conf.d/plugins/upload.conf:: ++ Readonly default configuration files. ++ ++/etc/libreport/plugins/upload.conf:: ++ Configuration file. ++ ++SEE ALSO ++-------- ++uploader_event.conf(5), report_uploader.conf(5) ++ + AUTHORS + ------- + * ABRT team +diff --git a/doc/reporter-ureport.txt b/doc/reporter-ureport.txt +index 54823ae..a4040fc 100644 +--- a/doc/reporter-ureport.txt ++++ b/doc/reporter-ureport.txt +@@ -99,9 +99,17 @@ the configuration file. + 'uReport_ContactEmail':: + Email address attached to a bthash on the server. + ++FILES ++----- ++/usr/share/libreport/conf.d/plugins/ureport.conf:: ++ Readonly default configuration files. ++ ++/etc/libreport/plugins/ureport.conf:: ++ Configuration file. ++ + SEE ALSO + -------- +-ureport.conf(5) ++ureport.conf(5), report_uploader.conf(5), uploader_event.conf(5) + + AUTHORS + ------- +-- +1.8.3.1 + diff --git a/0033-anaconda-auto-remove-rootpw-lines.patch b/0033-anaconda-auto-remove-rootpw-lines.patch new file mode 100644 index 0000000..60eea2e --- /dev/null +++ b/0033-anaconda-auto-remove-rootpw-lines.patch @@ -0,0 +1,40 @@ +From 81fd964b6c9e5952eef8233cf03774ad05a41ad5 Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Thu, 6 Nov 2014 06:34:35 +0100 +Subject: [LIBREPORT PATCH] anaconda: auto-remove rootpw lines + +Replace that lines with: + + +in the following files: + - backtrace + - ks.cfg + +Related to #1041558 + +Signed-off-by: Jakub Filak +--- + src/plugins/bugzilla_anaconda_event.conf | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/src/plugins/bugzilla_anaconda_event.conf b/src/plugins/bugzilla_anaconda_event.conf +index 430e5ee..923dda0 100644 +--- a/src/plugins/bugzilla_anaconda_event.conf ++++ b/src/plugins/bugzilla_anaconda_event.conf +@@ -1,4 +1,13 @@ + EVENT=report_Bugzilla component=anaconda ++ # remove sensitive information from the sensitive files ++ for sf in backtrace ks.cfg; do ++ if [ -f $sf ]; then ++ # blindly remove entire line ++ # filing a less usable bug is surely better than publishing passwords ++ sed 's/^.*rootpw.*$//' -i $sf ++ fi ++ done ++ # file a bug in Bugzilla + reporter-bugzilla -b \ + -F /etc/libreport/plugins/bugzilla_format_anaconda.conf \ + -A /etc/libreport/plugins/bugzilla_formatdup_anaconda.conf +-- +1.8.3.1 + diff --git a/0034-wizard-put-rootpw-on-the-forbidden-words-list.patch b/0034-wizard-put-rootpw-on-the-forbidden-words-list.patch new file mode 100644 index 0000000..4f90d65 --- /dev/null +++ b/0034-wizard-put-rootpw-on-the-forbidden-words-list.patch @@ -0,0 +1,27 @@ +From f26fab1cd6d41d662ddd4641bff4b68ed8d4edeb Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Thu, 6 Nov 2014 06:35:53 +0100 +Subject: [LIBREPORT PATCH] wizard: put rootpw on the forbidden words list + +Related to #1041558 + +Signed-off-by: Jakub Filak +--- + src/gui-wizard-gtk/forbidden_words.conf | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/gui-wizard-gtk/forbidden_words.conf b/src/gui-wizard-gtk/forbidden_words.conf +index deab04b..1fbc1ca 100644 +--- a/src/gui-wizard-gtk/forbidden_words.conf ++++ b/src/gui-wizard-gtk/forbidden_words.conf +@@ -23,6 +23,7 @@ PASS + password + Password + PASSWORD ++rootpw + secret + Secret + SECRET +-- +1.8.3.1 + diff --git a/0035-problem_data-make-ks.cfg-file-editable.patch b/0035-problem_data-make-ks.cfg-file-editable.patch new file mode 100644 index 0000000..908c883 --- /dev/null +++ b/0035-problem_data-make-ks.cfg-file-editable.patch @@ -0,0 +1,45 @@ +From bee6ed83c3ce506bda616f734bc0f13f279a3fe9 Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Thu, 6 Nov 2014 06:43:42 +0100 +Subject: [LIBREPORT PATCH] problem_data: make ks.cfg file editable + +Otherwise the GUI will not highlight the forbidden words in that file. + +Related to #1041558 + +Signed-off-by: Jakub Filak +--- + src/include/internal_libreport.h | 4 ++++ + src/lib/problem_data.c | 1 + + 2 files changed, 5 insertions(+) + +diff --git a/src/include/internal_libreport.h b/src/include/internal_libreport.h +index f9670b0..4bce4ba 100644 +--- a/src/include/internal_libreport.h ++++ b/src/include/internal_libreport.h +@@ -903,6 +903,10 @@ struct dump_dir *open_directory_for_writing( + #define FILENAME_ABRT_VERSION "abrt_version" + #define FILENAME_EXPLOITABLE "exploitable" + ++/* File names related to Anaconda problems ++ */ ++#define FILENAME_KICKSTART_CFG "ks.cfg" ++ + // Not stored as files, added "on the fly": + #define CD_DUMPDIR "Directory" + +diff --git a/src/lib/problem_data.c b/src/lib/problem_data.c +index 18d9541..777afa7 100644 +--- a/src/lib/problem_data.c ++++ b/src/lib/problem_data.c +@@ -261,6 +261,7 @@ static const char *const editable_files[] = { + //FILENAME_COUNT , + //FILENAME_REPORTED_TO, + //FILENAME_EVENT_LOG , ++ FILENAME_KICKSTART_CFG, + NULL + }; + static bool is_editable_file(const char *file_name) +-- +1.8.3.1 + diff --git a/0036-anaconda-mark-anaconda-tb-as-editable-file-and-remov.patch b/0036-anaconda-mark-anaconda-tb-as-editable-file-and-remov.patch new file mode 100644 index 0000000..94a4ce8 --- /dev/null +++ b/0036-anaconda-mark-anaconda-tb-as-editable-file-and-remov.patch @@ -0,0 +1,74 @@ +From 8dae4295895e4ebc4f89dd93e4dfe895763e504f Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Tue, 18 Nov 2014 10:18:32 +0100 +Subject: [LIBREPORT PATCH] anaconda: mark anaconda-tb as editable file and + remove rootpw lines + +anaconda-tb file contains the main information about Anaconda problems. + +report-gtk won't be highlighting forbidden words, because anaconda-tb +contains many false positives words as the file is mainly composed of +log outputs. + +Related to #1041558 + +Signed-off-by: Jakub Filak +--- + src/gui-wizard-gtk/wizard.c | 2 +- + src/include/internal_libreport.h | 1 + + src/lib/problem_data.c | 1 + + src/plugins/bugzilla_anaconda_event.conf | 2 +- + 4 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c +index 8620823..b77756b 100644 +--- a/src/gui-wizard-gtk/wizard.c ++++ b/src/gui-wizard-gtk/wizard.c +@@ -1185,7 +1185,7 @@ static void append_item_to_ls_details(gpointer name, gpointer value, gpointer da + //FIXME: use the human-readable problem_item_format(item) instead of item->content. + if (item->flags & CD_FLAG_TXT) + { +- if (item->flags & CD_FLAG_ISEDITABLE) ++ if (item->flags & CD_FLAG_ISEDITABLE && strcmp(name, FILENAME_ANACONDA_TB) != 0) + { + GtkWidget *tab_lbl = gtk_label_new((char *)name); + GtkWidget *tev = gtk_text_view_new(); +diff --git a/src/include/internal_libreport.h b/src/include/internal_libreport.h +index 4bce4ba..e3765bf 100644 +--- a/src/include/internal_libreport.h ++++ b/src/include/internal_libreport.h +@@ -906,6 +906,7 @@ struct dump_dir *open_directory_for_writing( + /* File names related to Anaconda problems + */ + #define FILENAME_KICKSTART_CFG "ks.cfg" ++#define FILENAME_ANACONDA_TB "anaconda-tb" + + // Not stored as files, added "on the fly": + #define CD_DUMPDIR "Directory" +diff --git a/src/lib/problem_data.c b/src/lib/problem_data.c +index 777afa7..11088ae 100644 +--- a/src/lib/problem_data.c ++++ b/src/lib/problem_data.c +@@ -262,6 +262,7 @@ static const char *const editable_files[] = { + //FILENAME_REPORTED_TO, + //FILENAME_EVENT_LOG , + FILENAME_KICKSTART_CFG, ++ FILENAME_ANACONDA_TB, + NULL + }; + static bool is_editable_file(const char *file_name) +diff --git a/src/plugins/bugzilla_anaconda_event.conf b/src/plugins/bugzilla_anaconda_event.conf +index 923dda0..e45a10a 100644 +--- a/src/plugins/bugzilla_anaconda_event.conf ++++ b/src/plugins/bugzilla_anaconda_event.conf +@@ -1,6 +1,6 @@ + EVENT=report_Bugzilla component=anaconda + # remove sensitive information from the sensitive files +- for sf in backtrace ks.cfg; do ++ for sf in backtrace ks.cfg anaconda-tb; do + if [ -f $sf ]; then + # blindly remove entire line + # filing a less usable bug is surely better than publishing passwords +-- +1.8.3.1 + diff --git a/0037-gui-try-to-reduce-false-positive-sensitive-words.patch b/0037-gui-try-to-reduce-false-positive-sensitive-words.patch new file mode 100644 index 0000000..2c3fcda --- /dev/null +++ b/0037-gui-try-to-reduce-false-positive-sensitive-words.patch @@ -0,0 +1,65 @@ +From 34c9ea7039fd2da4250fbbf767d3617b346e1734 Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Sat, 3 Jan 2015 23:15:27 +0100 +Subject: [LIBREPORT PATCH] gui: try to reduce false positive sensitive words + +I used words suggested by Michael Catanzaro < @Catanzaro > and run +several grep commands to find all variants. + +Related: #311 + +Signed-off-by: Jakub Filak +--- + src/gui-wizard-gtk/ignored_words.conf | 32 +++++++++++++++++++++++++++++++- + 1 file changed, 31 insertions(+), 1 deletion(-) + +diff --git a/src/gui-wizard-gtk/ignored_words.conf b/src/gui-wizard-gtk/ignored_words.conf +index 600dd55..ff658bd 100644 +--- a/src/gui-wizard-gtk/ignored_words.conf ++++ b/src/gui-wizard-gtk/ignored_words.conf +@@ -6,11 +6,41 @@ accountsservice + account_for_vscrollbar + AccountsService + Cannot access memory ++EventKey ++event_key + gnome-ssh-askpass ++keyboard ++KEYBOARD ++keymap ++KEYMAP ++keyDown ++KeyDown ++KEYDOWN ++KEY_Down ++keyring ++KEYRING ++KeyUp ++KEYUP ++KeyEvent ++key_event ++KEY_EVENT ++keypress ++KeyPress ++key_press ++KEY_PRESS ++key_release ++KEY_RELEASE ++KeyValuePair ++KeyValuePairKeyExtractor ++keyup ++KEYUP ++ksshaskpass + libpciaccess.so + libsecret + login.so +-ksshaskpass ++libkeyutils ++PassOwnPtr ++PassRefPtr + This access was not denied. + # not considered sensitive + USER= +-- +1.8.3.1 + diff --git a/libreport.spec b/libreport.spec index de67d77..06a2ce6 100644 --- a/libreport.spec +++ b/libreport.spec @@ -7,22 +7,24 @@ Summary: Generic library for reporting various problems Name: libreport Version: 2.2.3 -Release: 2%{?dist} +Release: 3%{?dist} License: GPLv2+ Group: System Environment/Libraries URL: https://fedorahosted.org/abrt/ Source: https://fedorahosted.org/released/abrt/%{name}-%{version}.tar.gz Source1: autogen.sh -Patch1: 0001-ureport-implement-attaching-of-user-comments.patch -Patch2: 0002-gui-make-preferences-dialogue-modal-for-parents.patch -Patch3: 0003-gui-select-the-first-in-the-configuration-list.patch -Patch4: 0004-gui-wrap-lines-for-human-readable-files.patch -Patch5: 0005-wizard-fix-help-text-for-screencasting.patch -Patch6: 0006-gui-support-Enter-2Click-in-Preferences-list.patch -Patch7: 0007-gui-apply-configuration-dialogues-changes-on-Enter-k.patch -Patch8: 0008-gui-close-ask-dialogues-on-Enter-key.patch -Patch9: 0009-logging-test-log-level-at-first-step.patch +# git format-patch -N --topo-order 2.2.3 +# i=0; for p in `ls *patch`; do echo Patch$((i += 1)): $p; done +Patch1: 0001-ureport-implement-attaching-of-user-comments.patch +Patch2: 0002-gui-make-preferences-dialogue-modal-for-parents.patch +Patch3: 0003-gui-select-the-first-in-the-configuration-list.patch +Patch4: 0004-gui-wrap-lines-for-human-readable-files.patch +Patch5: 0005-wizard-fix-help-text-for-screencasting.patch +Patch6: 0006-gui-support-Enter-2Click-in-Preferences-list.patch +Patch7: 0007-gui-apply-configuration-dialogues-changes-on-Enter-k.patch +Patch8: 0008-gui-close-ask-dialogues-on-Enter-key.patch +Patch9: 0009-logging-test-log-level-at-first-step.patch Patch10: 0010-json-include-json.h-accordingly-to-json-c-CFLAGS.patch Patch11: 0011-ureport-include-json.h-accordingly-to-json-c-CFLAGS.patch Patch12: 0012-gui-port-to-gtk-3.13.patch @@ -34,6 +36,23 @@ Patch17: 0017-gui-clear-the-sensitive-cache-between-two-event-runs.patch Patch18: 0018-gui-don-t-remove-already-removed-GTimeoutSource.patch Patch19: 0019-gui-reload-destroyed-sensitive-data-warn-widgets-fro.patch Patch20: 0020-gui-add-Repeat-button.patch +Patch21: 0021-wizard-terminate-event-chain-after-the-emergency-ana.patch +Patch22: 0022-gui-use-symbolic-icons.patch +Patch23: 0023-gui-Problem-Details-suite.patch +Patch24: 0024-gui-port-to-Problem-Details-suite.patch +#Patch25: 0025-spec-install-Problem-Details-stuff.patch +Patch26: 0026-gui-fix-build-with-older-gtk.patch +Patch27: 0027-wizard-don-t-work-with-destroyed-widgets.patch +Patch28: 0028-wizard-make-report-gtk-s-application-nonunique.patch +Patch29: 0029-Fix-bugzilla-bug-formating-for-libreport-analyzer.patch +#Patch30: 0030-spec-update-the-spec-file-to-work-with-the-last-comm.patch +Patch31: 0031-man_page-corrected-man-pages.patch +Patch32: 0032-doc-updated-manpages-reporter.patch +Patch33: 0033-anaconda-auto-remove-rootpw-lines.patch +Patch34: 0034-wizard-put-rootpw-on-the-forbidden-words-list.patch +Patch35: 0035-problem_data-make-ks.cfg-file-editable.patch +Patch36: 0036-anaconda-mark-anaconda-tb-as-editable-file-and-remov.patch +Patch37: 0037-gui-try-to-reduce-false-positive-sensitive-words.patch # git is need for '%%autosetup -S git' which automatically applies all the # patches above. Please, be aware that the patches must be generated @@ -464,6 +483,8 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %{_includedir}/libreport/file_obj.h %{_includedir}/libreport/config_item_info.h %{_includedir}/libreport/workflow.h +%{_includedir}/libreport/problem_details_widget.h +%{_includedir}/libreport/problem_details_dialog.h # Private api headers: %{_includedir}/libreport/internal_abrt_dbus.h %{_includedir}/libreport/internal_libreport.h @@ -561,7 +582,7 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %{_datadir}/%{name}/conf.d/plugins/bugzilla.conf %config(noreplace) %{_sysconfdir}/libreport/plugins/bugzilla_format.conf %config(noreplace) %{_sysconfdir}/libreport/plugins/bugzilla_formatdup.conf -%config(noreplace) %{_sysconfdir}/libreport/plugins/bugzilla_format_libreport.conf +%config(noreplace) %{_sysconfdir}/libreport/plugins/bugzilla_format_analyzer_libreport.conf %config(noreplace) %{_sysconfdir}/libreport/plugins/bugzilla_format_kernel.conf %{_datadir}/%{name}/events/report_Bugzilla.xml %{_datadir}/%{name}/events/watch_Bugzilla.xml @@ -575,7 +596,7 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %{_mandir}/man5/bugzilla.conf.5.* %{_mandir}/man5/bugzilla_format.conf.5.* %{_mandir}/man5/bugzilla_formatdup.conf.5.* -%{_mandir}/man5/bugzilla_format_libreport.conf.5.* +%{_mandir}/man5/bugzilla_format_analyzer_libreport.conf.5.* %{_mandir}/man5/bugzilla_format_kernel.conf.5.* %{_bindir}/reporter-bugzilla @@ -672,6 +693,14 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %changelog +* Mon Feb 16 2015 Jakub Filak - 2.2.3-3 +- add problem Details +- reduce false positive sensitive words +- anaconda: auto-remove rootpw lines +- gui: use -symbolic icons +- allow to have several windows opened at once +- Resolves: #1153479, #1153760, #1168523 + * Wed Aug 20 2014 Jakub Filak 2.2.3-2 - add the "Repeat" button to the reporting wizard - a bunch of GUI improvements