[libreport] ask before sending sensitive data and some minor improvements

Jakub Filak jfilak at fedoraproject.org
Fri Aug 10 12:30:14 UTC 2012


commit 4f72cee7c861866f8b1329359145687a924be861
Author: Jakub Filak <jfilak at redhat.com>
Date:   Fri Aug 10 13:27:19 2012 +0200

    ask before sending sensitive data and some minor improvements

 0003-fix-leaks-in-list_possible_events.patch       |   29 +++++
 ...k-for-analyzer-Kerneloops-when-appending-.patch |   66 ++++++++++++
 ...d-support-for-sendining-sensitive-data-ev.patch |   58 ++++++++++
 ...port-gtk-introduce-generic-ask_yes_no-fun.patch |  103 ++++++++++++++++++
 ...port-gtk-asks-for-permission-to-send-sens.patch |   62 +++++++++++
 ...port-cli-asks-for-premission-to-send-sens.patch |   40 +++++++
 ..._opendir-fails-if-time-file-doesn-t-conta.patch |  112 ++++++++++++++++++++
 ...l-changes-to-message-texts-and-one-functi.patch |   77 ++++++++++++++
 libreport.spec                                     |   28 +++++-
 9 files changed, 574 insertions(+), 1 deletions(-)
---
diff --git a/0003-fix-leaks-in-list_possible_events.patch b/0003-fix-leaks-in-list_possible_events.patch
new file mode 100644
index 0000000..c38c9b3
--- /dev/null
+++ b/0003-fix-leaks-in-list_possible_events.patch
@@ -0,0 +1,29 @@
+From 673b451d38aa323a82da1d94718902bb88c56375 Mon Sep 17 00:00:00 2001
+From: Jakub Filak <jfilak at redhat.com>
+Date: Tue, 7 Aug 2012 11:01:10 +0200
+Subject: [PATCH 03/10] fix leaks in list_possible_events()
+
+Signed-off-by: Jakub Filak <jfilak at redhat.com>
+---
+ src/lib/run_event.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/lib/run_event.c b/src/lib/run_event.c
+index 6b48568..bc04c5e 100644
+--- a/src/lib/run_event.c
++++ b/src/lib/run_event.c
+@@ -603,7 +603,11 @@ char *list_possible_events(struct dump_dir *dd, const char *dump_dir_name, const
+                 pfx, pfx_len       /* for events with this prefix */
+         );
+         if (!cmd)
++        {
++            free_rule_list(rule_list);
++            free(event_name);
+             break;
++        }
+         free(cmd);
+ 
+         if (event_name)
+-- 
+1.7.11.2
+
diff --git a/0004-Do-not-check-for-analyzer-Kerneloops-when-appending-.patch b/0004-Do-not-check-for-analyzer-Kerneloops-when-appending-.patch
new file mode 100644
index 0000000..0254fc2
--- /dev/null
+++ b/0004-Do-not-check-for-analyzer-Kerneloops-when-appending-.patch
@@ -0,0 +1,66 @@
+From d74fcb70b4b9acec451479303978bcb23673d991 Mon Sep 17 00:00:00 2001
+From: Denys Vlasenko <vda.linux at googlemail.com>
+Date: Thu, 9 Aug 2012 14:29:15 +0200
+Subject: [PATCH 04/10] Do not check for analyzer == "Kerneloops" when
+ appending "TAINTED" msg
+
+The check was superfluous
+
+Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
+---
+ src/plugins/rhbz.c | 11 +++++------
+ 1 file changed, 5 insertions(+), 6 deletions(-)
+
+diff --git a/src/plugins/rhbz.c b/src/plugins/rhbz.c
+index b4a5a06..ea8c09d 100644
+--- a/src/plugins/rhbz.c
++++ b/src/plugins/rhbz.c
+@@ -632,7 +632,7 @@ int rhbz_new_bug(struct abrt_xmlrpc *ax, problem_data_t *problem_data,
+     }
+     else
+     {
+-        if (analyzer && !strcmp(analyzer, "Kerneloops"))
++        if (analyzer && strcmp(analyzer, "Kerneloops") == 0)
+             strbuf_append_str(buf_summary, "[abrt]");
+         else
+             strbuf_append_strf(buf_summary, "[abrt] %s", package);
+@@ -643,8 +643,7 @@ int rhbz_new_bug(struct abrt_xmlrpc *ax, problem_data_t *problem_data,
+         if (reason)
+             strbuf_append_strf(buf_summary, ": %s", reason);
+ 
+-        if (tainted_short && analyzer
+-            && (strcmp(analyzer, "Kerneloops") == 0))
++        if (tainted_short)
+         {
+             strbuf_append_strf(buf_summary, ": TAINTED %s", tainted_short);
+         }
+@@ -652,7 +651,7 @@ int rhbz_new_bug(struct abrt_xmlrpc *ax, problem_data_t *problem_data,
+     char *status_whiteboard = xasprintf("abrt_hash:%s", duphash);
+ 
+     char *full_dsc = NULL;
+-    if (analyzer && !strcmp(analyzer, "Kerneloops"))
++    if (analyzer && strcmp(analyzer, "Kerneloops") == 0)
+     {
+         char *bz_dsc = make_description_koops(problem_data, CD_TEXT_ATT_SIZE_BZ);
+         full_dsc = xasprintf("libreport version: "VERSION"\n%s", bz_dsc);
+@@ -831,7 +830,7 @@ int rhbz_attach_files(struct abrt_xmlrpc *ax, const char *bug_id,
+     const char *analyzer = problem_data_get_content_or_NULL(problem_data,
+                                                             FILENAME_ANALYZER);
+     /* Do not attach anything if analyzer is Kerneloops */
+-    if (!strcmp(analyzer, "Kerneloops"))
++    if (strcmp(analyzer, "Kerneloops") == 0)
+         return 0;
+ 
+     GHashTableIter iter;
+@@ -853,7 +852,7 @@ int rhbz_attach_files(struct abrt_xmlrpc *ax, const char *bug_id,
+             const unsigned len = strlen(content);
+ 
+             /* For standard bugs, do not attach backtrace shorter than CD_TEXT_ATT_SIZE_BZ */
+-            if (!strcmp(name, FILENAME_BACKTRACE) && len < CD_TEXT_ATT_SIZE_BZ)
++            if (len < CD_TEXT_ATT_SIZE_BZ && strcmp(name, FILENAME_BACKTRACE) == 0)
+                 continue;
+ 
+             rhbz_attach_blob(ax, name, bug_id, content, len, flags);
+-- 
+1.7.11.2
+
diff --git a/0005-trac-660-add-support-for-sendining-sensitive-data-ev.patch b/0005-trac-660-add-support-for-sendining-sensitive-data-ev.patch
new file mode 100644
index 0000000..0d75122
--- /dev/null
+++ b/0005-trac-660-add-support-for-sendining-sensitive-data-ev.patch
@@ -0,0 +1,58 @@
+From 046a3ceb281888bc2cb026d29e3186b929fcceb7 Mon Sep 17 00:00:00 2001
+From: Jakub Filak <jfilak at redhat.com>
+Date: Wed, 8 Aug 2012 15:58:03 +0200
+Subject: [PATCH 05/10] trac#660: add support for sendining-sensitive-data
+ event option
+
+* configuration parser reads a value of the 'sendining-sensitive-data'
+  xml element
+* the default value for this option is false
+* the option means that 'an event sends possibly sensitive data somewhere'
+* core file is an example of sensitive data
+* this option is required for automatic execution of events from event
+  chain (a user have to get an approval)
+
+Signed-off-by: Jakub Filak <jfilak at redhat.com>
+---
+ src/include/event_config.h | 1 +
+ src/lib/event_xml_parser.c | 5 +++++
+ 2 files changed, 6 insertions(+)
+
+diff --git a/src/include/event_config.h b/src/include/event_config.h
+index 15ebf52..0ca3bda 100644
+--- a/src/include/event_config.h
++++ b/src/include/event_config.h
+@@ -80,6 +80,7 @@ typedef struct
+     bool  ec_exclude_binary_items;
+     long  ec_minimal_rating;
+     bool  ec_skip_review;
++    bool  ec_sending_sensitive_data;
+ 
+     GList *options;
+ } event_config_t;
+diff --git a/src/lib/event_xml_parser.c b/src/lib/event_xml_parser.c
+index cd99784..157b717 100644
+--- a/src/lib/event_xml_parser.c
++++ b/src/lib/event_xml_parser.c
+@@ -32,6 +32,7 @@
+ #define DEFAULT_VALUE_ELEMENT   "default-value"
+ #define MINIMAL_RATING_ELEMENT  "minimal-rating"
+ #define GUI_REVIEW_ELEMENTS     "gui-review-elements"
++#define SENDING_SENSITIVE_DATA_ELEMENT  "sending-sensitive-data"
+ 
+ #define REQUIRES_ELEMENT        "requires-items"
+ #define EXCL_BY_DEFAULT_ELEMENT "exclude-items-by-default"
+@@ -423,6 +424,10 @@ static void text(GMarkupParseContext *context,
+         {
+             ui->ec_skip_review = !string_to_bool(text_copy);
+         }
++        else if (strcmp(inner_element, SENDING_SENSITIVE_DATA_ELEMENT) == 0)
++        {
++            ui->ec_sending_sensitive_data = string_to_bool(text_copy);
++        }
+     }
+     free(text_copy);
+ }
+-- 
+1.7.11.2
+
diff --git a/0006-trac-660-report-gtk-introduce-generic-ask_yes_no-fun.patch b/0006-trac-660-report-gtk-introduce-generic-ask_yes_no-fun.patch
new file mode 100644
index 0000000..4058767
--- /dev/null
+++ b/0006-trac-660-report-gtk-introduce-generic-ask_yes_no-fun.patch
@@ -0,0 +1,103 @@
+From 58b2f3df81c46f8596a0a81bd2f8071948ec9238 Mon Sep 17 00:00:00 2001
+From: Jakub Filak <jfilak at redhat.com>
+Date: Wed, 8 Aug 2012 16:59:33 +0200
+Subject: [PATCH 06/10] trac#660: report-gtk: introduce generic ask_yes_no()
+ function for options
+
+* the generic ask_yes_no() function shows a standard 'yes/no' dialog
+  with a checkbox
+* if user checks the checkbox the ask_yes_no() function immediately
+  returns 'yes' in the future calls
+
+Signed-off-by: Jakub Filak <jfilak at redhat.com>
+---
+ src/gui-wizard-gtk/wizard.c | 52 ++++++++++++++++++++++++++++-----------------
+ 1 file changed, 33 insertions(+), 19 deletions(-)
+
+diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c
+index ce7b742..861d922 100644
+--- a/src/gui-wizard-gtk/wizard.c
++++ b/src/gui-wizard-gtk/wizard.c
+@@ -310,46 +310,60 @@ static void update_window_title(void)
+     free(title);
+ }
+ 
+-static void on_toggle_ask_steal_cb(GtkToggleButton *tb, gpointer user_data)
++static void on_toggle_ask_yes_no_save_result_cb(GtkToggleButton *tb, gpointer user_data)
+ {
+-    set_user_setting("ask_steal_dir", gtk_toggle_button_get_active(tb) ? "no" : "yes");
++    set_user_setting(user_data, gtk_toggle_button_get_active(tb) ? "no" : "yes");
+ }
+ 
+-static bool ask_continue_before_steal(const char *base_dir, const char *dump_dir)
++/*
++ * Function shows a dialog with 'Yes/No' buttons and a check box allowing to
++ * remeber the answer. The answer is stored in configuration file under
++ * 'option_name' key.
++ */
++static bool ask_yes_no_save_result(const char *message, const char *option_name)
+ {
+-    const char *ask_steal_dir = get_user_setting("ask_steal_dir");
++    const char *ask_result = get_user_setting(option_name);
+ 
+-    if (ask_steal_dir && string_to_bool(ask_steal_dir) == false)
++    if (ask_result && string_to_bool(ask_result) == false)
+         return true;
+ 
+     GtkWidget *dialog = gtk_message_dialog_new(GTK_WINDOW(g_wnd_assistant),
+-            GTK_DIALOG_DESTROY_WITH_PARENT,
+-            GTK_MESSAGE_QUESTION,
+-            GTK_BUTTONS_OK_CANCEL,
+-            _("Need writable directory, but '%s' is not writable."
+-            " Move it to '%s' and operate on the moved data?"),
+-            dump_dir, base_dir
+-            );
++                                               GTK_DIALOG_DESTROY_WITH_PARENT,
++                                               GTK_MESSAGE_QUESTION,
++                                               GTK_BUTTONS_YES_NO,
++                                               "%s", message);
+ 
+     gint response = GTK_RESPONSE_CANCEL;
+-    g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(save_dialog_response), &response);
++    g_signal_connect(G_OBJECT(dialog), "response",
++                     G_CALLBACK(save_dialog_response), &response);
+ 
+-    GtkWidget *ask_steal_cb = gtk_check_button_new_with_label(_("Don't ask me again"));
++    GtkWidget *ask_yes_no_cb = gtk_check_button_new_with_label(_("Don't ask me again"));
+     gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
+-            ask_steal_cb, TRUE, TRUE, 0);
+-    g_signal_connect(ask_steal_cb, "toggled", G_CALLBACK(on_toggle_ask_steal_cb), NULL);
++                       ask_yes_no_cb, TRUE, TRUE, 0);
++    g_signal_connect(ask_yes_no_cb, "toggled",
++                     G_CALLBACK(on_toggle_ask_yes_no_save_result_cb), (gpointer)option_name);
+ 
+     /* check it by default if it's shown for the first time */
+-    if (!ask_steal_dir)
+-        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ask_steal_cb), TRUE);
++    if (!ask_result)
++        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ask_yes_no_cb), TRUE);
+ 
+-    gtk_widget_show(ask_steal_cb);
++    gtk_widget_show(ask_yes_no_cb);
+     gtk_dialog_run(GTK_DIALOG(dialog));
+     gtk_widget_destroy(dialog);
+ 
+     return response == GTK_RESPONSE_OK;
+ }
+ 
++static bool ask_continue_before_steal(const char *base_dir, const char *dump_dir)
++{
++    char *msg = xasprintf(_("Need writable directory, but '%s' is not writable."
++                            " Move it to '%s' and operate on the moved data?"),
++                            dump_dir, base_dir);
++    const bool response = ask_yes_no_save_result(msg, "ask_steal_dir");
++    free(msg);
++    return response;
++}
++
+ struct dump_dir *wizard_open_directory_for_writing(const char *dump_dir_name)
+ {
+     struct dump_dir *dd = open_directory_for_writing(dump_dir_name,
+-- 
+1.7.11.2
+
diff --git a/0007-trac-660-report-gtk-asks-for-permission-to-send-sens.patch b/0007-trac-660-report-gtk-asks-for-permission-to-send-sens.patch
new file mode 100644
index 0000000..183f19c
--- /dev/null
+++ b/0007-trac-660-report-gtk-asks-for-permission-to-send-sens.patch
@@ -0,0 +1,62 @@
+From 98156aa13a496b83c998f651efd0f7f3f0700c6b Mon Sep 17 00:00:00 2001
+From: Jakub Filak <jfilak at redhat.com>
+Date: Wed, 8 Aug 2012 17:52:00 +0200
+Subject: [PATCH 07/10] trac#660: report-gtk asks for permission to send
+ sensitive data
+
+* if the currently process event has configured 'sending-sensitive-data'
+  report-gtk asks for permission to continue with processing of the
+  event
+
+Signed-off-by: Jakub Filak <jfilak at redhat.com>
+---
+ src/gui-wizard-gtk/wizard.c | 26 ++++++++++++++++++++++++++
+ 1 file changed, 26 insertions(+)
+
+diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c
+index 861d922..6f540a8 100644
+--- a/src/gui-wizard-gtk/wizard.c
++++ b/src/gui-wizard-gtk/wizard.c
+@@ -2028,6 +2028,22 @@ static void on_page_prepare(GtkNotebook *assistant, GtkWidget *page, gpointer us
+     }
+ }
+ 
++static bool get_sensitive_data_permission(const char *event_name)
++{
++    event_config_t *event_cfg = get_event_config(event_name);
++
++    if (!event_cfg || !event_cfg->ec_sending_sensitive_data)
++        return true;
++
++    char *msg = xasprintf(_("Event '%s' requires permission to send possibly sensitive data."
++                            "\nDo you want to continue?"),
++                            event_cfg->screen_name ? event_cfg->screen_name : event_name);
++    const bool response = ask_yes_no_save_result(msg, "ask_send_sensitive_data");
++    free(msg);
++
++    return response;
++}
++
+ static gint select_next_page_no(gint current_page_no, gpointer data)
+ {
+     GtkWidget *page;
+@@ -2049,6 +2065,16 @@ static gint select_next_page_no(gint current_page_no, gpointer data)
+             }
+ 
+             free(g_event_selected);
++
++            if (!get_sensitive_data_permission(event))
++            {
++                g_event_selected = NULL;
++                gtk_label_set_text(g_lbl_event_log, _("Processing was cancelled"));
++                terminate_event_chain();
++                current_page_no = pages[PAGENO_EVENT_PROGRESS].page_no - 1;
++                goto again;
++            }
++
+             g_event_selected = xstrdup(event);
+ 
+             if (check_event_config(g_event_selected) != 0)
+-- 
+1.7.11.2
+
diff --git a/0008-trac-660-report-cli-asks-for-premission-to-send-sens.patch b/0008-trac-660-report-cli-asks-for-premission-to-send-sens.patch
new file mode 100644
index 0000000..e635651
--- /dev/null
+++ b/0008-trac-660-report-cli-asks-for-premission-to-send-sens.patch
@@ -0,0 +1,40 @@
+From ac9f6625886d5eb283335d88b45f4bdfccf8a226 Mon Sep 17 00:00:00 2001
+From: Jakub Filak <jfilak at redhat.com>
+Date: Wed, 8 Aug 2012 18:23:52 +0200
+Subject: [PATCH 08/10] trac#660: report-cli asks for premission to send
+ sensitive data
+
+* if the currently process event has configured 'sending-sensitive-data'
+  report-cli asks for permission to continue with processing of the
+  event
+
+Signed-off-by: Jakub Filak <jfilak at redhat.com>
+---
+ src/cli/cli-report.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/src/cli/cli-report.c b/src/cli/cli-report.c
+index 77ae34a..2f988fa 100644
+--- a/src/cli/cli-report.c
++++ b/src/cli/cli-report.c
+@@ -1003,6 +1003,17 @@ int run_events_chain(const char *dump_dir_name, GList *chain)
+ 
+         if (config)
+         {
++            if (config->ec_sending_sensitive_data)
++            {
++                char *msg = xasprintf(_("Event '%s' requires permision to send possibly sensitive data."
++                                        " Do you want to continue?"),
++                            config->screen_name ? config->screen_name : event);
++                const bool response = ask_yesno(msg);
++                free(msg);
++                if (!response)
++                    break;
++            }
++
+             /* can't fail */
+             ask_for_missing_settings(event);
+ 
+-- 
+1.7.11.2
+
diff --git a/0009-trac-623-dd_opendir-fails-if-time-file-doesn-t-conta.patch b/0009-trac-623-dd_opendir-fails-if-time-file-doesn-t-conta.patch
new file mode 100644
index 0000000..23dd24f
--- /dev/null
+++ b/0009-trac-623-dd_opendir-fails-if-time-file-doesn-t-conta.patch
@@ -0,0 +1,112 @@
+From 945e99efc043b3a8ca34615a4bd3f649fd8602c3 Mon Sep 17 00:00:00 2001
+From: Jakub Filak <jfilak at redhat.com>
+Date: Tue, 31 Jul 2012 17:39:17 +0200
+Subject: [PATCH 09/10] trac#623 : dd_opendir() fails if time file doesn't
+ contain valid time stamp
+
+* the old implementation checks only presence of the time file
+* now we check validity of the time file
+
+Signed-off-by: Jakub Filak <jfilak at redhat.com>
+---
+ src/lib/dump_dir.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++---
+ 1 file changed, 60 insertions(+), 3 deletions(-)
+
+diff --git a/src/lib/dump_dir.c b/src/lib/dump_dir.c
+index eef01f7..6a44359 100644
+--- a/src/lib/dump_dir.c
++++ b/src/lib/dump_dir.c
+@@ -109,6 +109,63 @@ static bool exist_file_dir(const char *path)
+     return false;
+ }
+ 
++/* Returns true if the file is not readable or */
++/* if the file doesn't contain valid unixt time stamp */
++/* implementation is a compromise between efficiency and accuracy */
++/* the function gets false negative results for big numbers */
++static bool not_valid_time_file(const char *filename)
++{
++    /* Open input file, and parse it. */
++    int fd = open(filename, O_RDONLY);
++    if (fd < 0)
++    {
++        VERB2 perror_msg("Can't open '%s'", filename);
++        return true;
++    }
++
++    /* ~ maximal number of digits for positive time stamp string*/
++    char time_buf[sizeof(time_t) * 3 + 1];
++    ssize_t rdsz = read(fd, time_buf, sizeof(time_buf));
++
++    /* Just reading, so no need to check the returned value. */
++    close(fd);
++
++    if (rdsz == -1)
++    {
++        VERB2 perror_msg("Can't read from '%s'", filename);
++        return true;
++    }
++
++    /* approximate maximal number of digits in timestamp is sizeof(time_t)*3 */
++    /* buffer has this size + 1 byte for trailing '\0' */
++    /* if whole size of buffer was read then file is bigger */
++    /* than string representing maximal time stamp */
++    if (rdsz == sizeof(time_buf))
++    {
++        VERB2 log("File '%s' is too long to be valid unix "
++                  "time stamp (max size %zdB)", filename, sizeof(time_buf));
++        return true;
++    }
++
++    /* Our tools don't put trailing newline into time file,
++     * but we allow such format too:
++     */
++    if (rdsz > 0 && time_buf[rdsz - 1] == '\n')
++        rdsz--;
++    time_buf[rdsz] = '\0';
++
++    /* the value should fit to timestamp number range because of file size */
++    /* condition above, hence check if the value string consists only from digits */
++    if (!isdigit_str(time_buf))
++    {
++        VERB2 log("File '%s' doesn't contain valid unix "
++                  "time stamp ('%s')", filename, time_buf);
++        return true;
++    }
++
++    return false;
++}
++
+ /* Return values:
+  * -1: error (in this case, errno is 0 if error message is already logged)
+  *  0: failed to lock (someone else has it locked)
+@@ -203,7 +260,7 @@ static int dd_lock(struct dump_dir *dd, unsigned sleep_usec, int flags)
+     if (sleep_usec == WAIT_FOR_OTHER_PROCESS_USLEEP) /* yes */
+     {
+         strcpy(lock_buf + dirname_len, "/"FILENAME_TIME);
+-        if (access(lock_buf, F_OK) != 0)
++        if (not_valid_time_file(lock_buf))
+         {
+             /* time file doesn't exist. We managed to lock the directory
+              * which was just created by somebody else, or is almost deleted
+@@ -212,7 +269,7 @@ static int dd_lock(struct dump_dir *dd, unsigned sleep_usec, int flags)
+              */
+             strcpy(lock_buf + dirname_len, "/.lock");
+             xunlink(lock_buf);
+-            VERB1 log("Unlocked '%s' (no time file)", lock_buf);
++            VERB1 log("Unlocked '%s' (no or corrupted time file)", lock_buf);
+             if (--count == 0)
+             {
+                 errno = EISDIR; /* "this is an ordinary dir, not dump dir" */
+@@ -303,7 +360,7 @@ struct dump_dir *dd_opendir(const char *dir, int flags)
+              && access(dir, R_OK) == 0
+             ) {
+                 char *time_file_name = concat_path_file(dir, FILENAME_TIME);
+-                if (access(time_file_name, R_OK) != 0)
++                if (not_valid_time_file(time_file_name))
+                 {
+                     dd_close(dd);
+                     dd = NULL;
+-- 
+1.7.11.2
+
diff --git a/0010-wizard-small-changes-to-message-texts-and-one-functi.patch b/0010-wizard-small-changes-to-message-texts-and-one-functi.patch
new file mode 100644
index 0000000..9477c58
--- /dev/null
+++ b/0010-wizard-small-changes-to-message-texts-and-one-functi.patch
@@ -0,0 +1,77 @@
+From a1479b71b40290ad7faeb72a7ea0fd47324cd300 Mon Sep 17 00:00:00 2001
+From: Denys Vlasenko <vda.linux at googlemail.com>
+Date: Fri, 10 Aug 2012 10:32:14 +0200
+Subject: [PATCH 10/10] wizard: small changes to message texts and one
+ function name
+
+Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
+---
+ src/gui-wizard-gtk/wizard.c | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c
+index 6f540a8..5d399f4 100644
+--- a/src/gui-wizard-gtk/wizard.c
++++ b/src/gui-wizard-gtk/wizard.c
+@@ -1279,7 +1279,7 @@ static void on_btn_cancel_event(GtkButton *button)
+         kill(- g_event_child_pid, SIGTERM);
+ }
+ 
+-static bool is_reporting_finished()
++static bool is_processing_finished()
+ {
+     return !g_expert_mode && !g_auto_event_list;
+ }
+@@ -1327,7 +1327,7 @@ static char *run_event_gtk_logging(char *log_line, void *param)
+         VERB1 log("Received a request for termination of processing of event chain. (Request: '%s')", log_line);
+         terminate_event_chain();
+         if (!g_expert_mode)
+-            evd->success_msg = _("Reporting finished. Thank you!");
++            evd->success_msg = _("Processing finished.");
+     }
+ 
+     return log_line;
+@@ -1537,7 +1537,7 @@ static gboolean consume_cmd_output(GIOChannel *source, GIOCondition condition, g
+         /* Inform abrt-gui that it is a good idea to rescan the directory */
+         kill(getppid(), SIGCHLD);
+ 
+-        if (is_reporting_finished())
++        if (is_processing_finished())
+             update_gui_on_finished_reporting();
+         else if (retval == 0 && !g_verbose && !g_expert_mode)
+             on_next_btn_cb(GTK_WIDGET(g_btn_next), NULL);
+@@ -1605,7 +1605,7 @@ static void start_event_run(const char *event_name,
+         free_run_event_state(state);
+         if (!g_expert_mode)
+         {
+-            char *msg = xasprintf(_("Reporting was interrupted. Can't contiue without writable directory. Thank you!"));
++            char *msg = xasprintf(_("Processing interrupted: can't continue without writable directory."));
+             gtk_label_set_text(status_label, msg);
+             free(msg);
+             terminate_event_chain();
+@@ -1901,10 +1901,10 @@ static void setup_and_start_even_run(const char *event_name)
+             g_lbl_event_log,
+             _("Processing..."),
+             g_expert_mode ? _("Processing failed. You can try another operation if available.")
+-                          : _("Processing failed. Nothing more can be done. Thank you!"),
++                          : _("Processing failed."),
+             /* this event is the last event from the chain */
+-            is_reporting_finished() ? _("Reporting finished. Thank you!")
+-                                    : _("Processing finished, please proceed to the next step.")
++            is_processing_finished() ? _("Processing finished.")
++                                     : _("Processing finished, please proceed to the next step.")
+     );
+ }
+ 
+@@ -1937,7 +1937,7 @@ static const char *setup_next_processed_event(GList **events_list)
+         free(g_event_selected);
+         g_event_selected = NULL;
+         /* No next event, go to progress page and finish */
+-        gtk_label_set_text(g_lbl_event_log, _("Reporting finished. Thank you!"));
++        gtk_label_set_text(g_lbl_event_log, _("Processing finished."));
+         update_gui_on_finished_reporting();
+         return NULL;
+     }
+-- 
+1.7.11.2
+
diff --git a/libreport.spec b/libreport.spec
index e249312..69ddc86 100644
--- a/libreport.spec
+++ b/libreport.spec
@@ -5,13 +5,21 @@
 Summary: Generic library for reporting various problems
 Name: libreport
 Version: 2.0.12
-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
 Patch1: 0001-don-t-try-to-delete-dump-dir-which-doesn-t-exist-rhb.patch
 Patch2: 0002-report-gtk-fixed-bug-in-automatic-running-of-next-ev.patch
+Patch3: 0003-fix-leaks-in-list_possible_events.patch
+Patch4: 0004-Do-not-check-for-analyzer-Kerneloops-when-appending-.patch
+Patch5: 0005-trac-660-add-support-for-sendining-sensitive-data-ev.patch
+Patch6: 0006-trac-660-report-gtk-introduce-generic-ask_yes_no-fun.patch
+Patch7: 0007-trac-660-report-gtk-asks-for-permission-to-send-sens.patch
+Patch8: 0008-trac-660-report-cli-asks-for-premission-to-send-sens.patch
+Patch9: 0009-trac-623-dd_opendir-fails-if-time-file-doesn-t-conta.patch
+Patch10: 0010-wizard-small-changes-to-message-texts-and-one-functi.patch
 BuildRequires: dbus-devel
 BuildRequires: gtk3-devel
 BuildRequires: curl-devel
@@ -229,6 +237,14 @@ Plugin to report bugs into anonymous FTP site associated with ticketing system.
 %setup -q
 %patch1 -p1
 %patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
+%patch9 -p1
+%patch10 -p1
 
 %build
 autoconf
@@ -401,6 +417,16 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
 %config(noreplace) %{_sysconfdir}/libreport/events.d/uploader_event.conf
 
 %changelog
+* Fri Aug 10 2012 Jakub Filak <jfilak at redhat.com> 2.0.12-3
+- wizard: small changes to message texts and one function name
+- trac#623: dd_opendir() fails if time file doesn't contain valid time stamp
+- trac#660: report-cli asks for premission to send sensitive data
+- trac#660: report-gtk asks for permission to send sensitive data
+- trac#660: report-gtk: introduce generic ask_yes_no() function for options
+- trac#660: add support for sendining-sensitive-data event option
+- Do not check for analyzer == "Kerneloops" when appending "TAINTED" msg
+- fix leaks in list_possible_events()
+
 * Tue Aug 7 2012 Jakub Filak <jfilak at redhat.com> 2.0.12-2
 - report-gtk: fixed bug in automatic running of next event
 - don't try to delete dump dir which doesn't exist rhbz#799909


More information about the scm-commits mailing list