|
Nikola Pajkovsky |
1fe8d9b |
From 42953f66890978304f2b3645c378f5c87b8f2547 Mon Sep 17 00:00:00 2001
|
|
Nikola Pajkovsky |
1fe8d9b |
Message-Id: <42953f66890978304f2b3645c378f5c87b8f2547.1317995685.git.npajkovs@redhat.com>
|
|
Nikola Pajkovsky |
1fe8d9b |
From: Nikola Pajkovsky <npajkovs@redhat.com>
|
|
Nikola Pajkovsky |
1fe8d9b |
Date: Fri, 7 Oct 2011 15:54:38 +0200
|
|
Nikola Pajkovsky |
1fe8d9b |
Subject: [PATCH] refuse reporting when *not-reportable* file exist
|
|
Nikola Pajkovsky |
1fe8d9b |
|
|
Nikola Pajkovsky |
1fe8d9b |
Signed-off-by: Nikola Pajkovsky <npajkovs@redhat.com>
|
|
Nikola Pajkovsky |
1fe8d9b |
---
|
|
Nikola Pajkovsky |
1fe8d9b |
src/cli/cli-report.c | 20 ++++++++++++++++++++
|
|
Nikola Pajkovsky |
1fe8d9b |
src/gui-wizard-gtk/wizard.c | 38 +++++++++++++++++++++++++++++++-------
|
|
Nikola Pajkovsky |
1fe8d9b |
src/include/internal_libreport.h | 3 ++-
|
|
Nikola Pajkovsky |
1fe8d9b |
src/lib/kernel-tainted.c | 26 +++++++++++++-------------
|
|
Nikola Pajkovsky |
1fe8d9b |
4 files changed, 66 insertions(+), 21 deletions(-)
|
|
Nikola Pajkovsky |
1fe8d9b |
|
|
Nikola Pajkovsky |
1fe8d9b |
diff --git a/src/cli/cli-report.c b/src/cli/cli-report.c
|
|
Nikola Pajkovsky |
1fe8d9b |
index 49a0598..2aebc51 100644
|
|
Nikola Pajkovsky |
1fe8d9b |
--- a/src/cli/cli-report.c
|
|
Nikola Pajkovsky |
1fe8d9b |
+++ b/src/cli/cli-report.c
|
|
Nikola Pajkovsky |
1fe8d9b |
@@ -684,6 +684,26 @@ int report(const char *dump_dir_name, int flags)
|
|
Nikola Pajkovsky |
1fe8d9b |
if (!dd)
|
|
Nikola Pajkovsky |
1fe8d9b |
return -1;
|
|
Nikola Pajkovsky |
1fe8d9b |
|
|
Nikola Pajkovsky |
1fe8d9b |
+ char *not_reportable = dd_load_text_ext(dd, FILENAME_NOT_REPORTABLE, 0
|
|
Nikola Pajkovsky |
1fe8d9b |
+ | DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE
|
|
Nikola Pajkovsky |
1fe8d9b |
+ | DD_FAIL_QUIETLY_ENOENT
|
|
Nikola Pajkovsky |
1fe8d9b |
+ | DD_FAIL_QUIETLY_EACCES);
|
|
Nikola Pajkovsky |
1fe8d9b |
+
|
|
Nikola Pajkovsky |
1fe8d9b |
+ if (not_reportable)
|
|
Nikola Pajkovsky |
1fe8d9b |
+ {
|
|
Nikola Pajkovsky |
1fe8d9b |
+ char *reason = dd_load_text_ext(dd, FILENAME_REASON, 0
|
|
Nikola Pajkovsky |
1fe8d9b |
+ | DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE);
|
|
Nikola Pajkovsky |
1fe8d9b |
+ char *t = xasprintf("%s%s%s",
|
|
Nikola Pajkovsky |
1fe8d9b |
+ not_reportable ?: "",
|
|
Nikola Pajkovsky |
1fe8d9b |
+ not_reportable ? ": " : "",
|
|
Nikola Pajkovsky |
1fe8d9b |
+ reason ?: _("(no description)"));
|
|
Nikola Pajkovsky |
1fe8d9b |
+
|
|
Nikola Pajkovsky |
1fe8d9b |
+ dd_close(dd);
|
|
Nikola Pajkovsky |
1fe8d9b |
+ error_msg("%s", t);
|
|
Nikola Pajkovsky |
1fe8d9b |
+ free(t);
|
|
Nikola Pajkovsky |
1fe8d9b |
+ xfunc_die();
|
|
Nikola Pajkovsky |
1fe8d9b |
+ }
|
|
Nikola Pajkovsky |
1fe8d9b |
+
|
|
Nikola Pajkovsky |
1fe8d9b |
if (!(flags & CLI_REPORT_ONLY))
|
|
Nikola Pajkovsky |
1fe8d9b |
{
|
|
Nikola Pajkovsky |
1fe8d9b |
char *analyze_events_as_lines = list_possible_events(dd, NULL, "analyze");
|
|
Nikola Pajkovsky |
1fe8d9b |
diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c
|
|
Nikola Pajkovsky |
1fe8d9b |
index 6048847..6ea0e30 100644
|
|
Nikola Pajkovsky |
1fe8d9b |
--- a/src/gui-wizard-gtk/wizard.c
|
|
Nikola Pajkovsky |
1fe8d9b |
+++ b/src/gui-wizard-gtk/wizard.c
|
|
Nikola Pajkovsky |
1fe8d9b |
@@ -719,7 +719,16 @@ void update_gui_state_from_problem_data(void)
|
|
Nikola Pajkovsky |
1fe8d9b |
gtk_window_set_title(GTK_WINDOW(g_assistant), g_dump_dir_name);
|
|
Nikola Pajkovsky |
1fe8d9b |
|
|
Nikola Pajkovsky |
1fe8d9b |
const char *reason = get_problem_item_content_or_NULL(g_cd, FILENAME_REASON);
|
|
Nikola Pajkovsky |
1fe8d9b |
- gtk_label_set_text(g_lbl_cd_reason, reason ? reason : _("(no description)"));
|
|
Nikola Pajkovsky |
1fe8d9b |
+ const char *not_reportable = get_problem_item_content_or_NULL(g_cd,
|
|
Nikola Pajkovsky |
1fe8d9b |
+ FILENAME_NOT_REPORTABLE);
|
|
Nikola Pajkovsky |
1fe8d9b |
+
|
|
Nikola Pajkovsky |
1fe8d9b |
+ char *t = xasprintf("%s%s%s",
|
|
Nikola Pajkovsky |
1fe8d9b |
+ not_reportable ?: "",
|
|
Nikola Pajkovsky |
1fe8d9b |
+ not_reportable ? ": " : "",
|
|
Nikola Pajkovsky |
1fe8d9b |
+ reason ?: _("(no description)"));
|
|
Nikola Pajkovsky |
1fe8d9b |
+
|
|
Nikola Pajkovsky |
1fe8d9b |
+ gtk_label_set_text(g_lbl_cd_reason, t);
|
|
Nikola Pajkovsky |
1fe8d9b |
+ free(t);
|
|
Nikola Pajkovsky |
1fe8d9b |
|
|
Nikola Pajkovsky |
1fe8d9b |
gtk_list_store_clear(g_ls_details);
|
|
Nikola Pajkovsky |
1fe8d9b |
struct cd_stats stats = { 0 };
|
|
Nikola Pajkovsky |
1fe8d9b |
@@ -1605,12 +1614,21 @@ static void add_pages()
|
|
Nikola Pajkovsky |
1fe8d9b |
error_msg_and_die("Can't load %s: %s", g_glade_file, error->message);
|
|
Nikola Pajkovsky |
1fe8d9b |
}
|
|
Nikola Pajkovsky |
1fe8d9b |
|
|
Nikola Pajkovsky |
1fe8d9b |
+ struct dump_dir *dd = dd_opendir(g_dump_dir_name, DD_OPEN_READONLY | DD_FAIL_QUIETLY_EACCES);
|
|
Nikola Pajkovsky |
1fe8d9b |
+ if (!dd)
|
|
Nikola Pajkovsky |
1fe8d9b |
+ return;
|
|
Nikola Pajkovsky |
1fe8d9b |
+ char *not_reportable = dd_load_text_ext(dd, FILENAME_NOT_REPORTABLE, 0
|
|
Nikola Pajkovsky |
1fe8d9b |
+ | DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE
|
|
Nikola Pajkovsky |
1fe8d9b |
+ | DD_FAIL_QUIETLY_ENOENT
|
|
Nikola Pajkovsky |
1fe8d9b |
+ | DD_FAIL_QUIETLY_EACCES);
|
|
Nikola Pajkovsky |
1fe8d9b |
+ dd_close(dd);
|
|
Nikola Pajkovsky |
1fe8d9b |
+
|
|
Nikola Pajkovsky |
1fe8d9b |
int i;
|
|
Nikola Pajkovsky |
1fe8d9b |
int page_no = 0;
|
|
Nikola Pajkovsky |
1fe8d9b |
for (i = 0; page_names[i] != NULL; i++)
|
|
Nikola Pajkovsky |
1fe8d9b |
{
|
|
Nikola Pajkovsky |
1fe8d9b |
char *delim = strrchr(page_names[i], '_');
|
|
Nikola Pajkovsky |
1fe8d9b |
- if (delim != NULL)
|
|
Nikola Pajkovsky |
1fe8d9b |
+ if (!not_reportable && delim)
|
|
Nikola Pajkovsky |
1fe8d9b |
{
|
|
Nikola Pajkovsky |
1fe8d9b |
if (g_report_only && (strncmp(delim + 1, "report", strlen("report"))) != 0)
|
|
Nikola Pajkovsky |
1fe8d9b |
{
|
|
Nikola Pajkovsky |
1fe8d9b |
@@ -1632,7 +1650,10 @@ static void add_pages()
|
|
Nikola Pajkovsky |
1fe8d9b |
gtk_assistant_set_page_complete(g_assistant, page, true);
|
|
Nikola Pajkovsky |
1fe8d9b |
|
|
Nikola Pajkovsky |
1fe8d9b |
gtk_assistant_set_page_title(g_assistant, page, pages[i].title);
|
|
Nikola Pajkovsky |
1fe8d9b |
- gtk_assistant_set_page_type(g_assistant, page, pages[i].type);
|
|
Nikola Pajkovsky |
1fe8d9b |
+ if (not_reportable && i == 0)
|
|
Nikola Pajkovsky |
1fe8d9b |
+ gtk_assistant_set_page_type(g_assistant, pages[i].page_widget, GTK_ASSISTANT_PAGE_SUMMARY);
|
|
Nikola Pajkovsky |
1fe8d9b |
+ else
|
|
Nikola Pajkovsky |
1fe8d9b |
+ gtk_assistant_set_page_type(g_assistant, page, pages[i].type);
|
|
Nikola Pajkovsky |
1fe8d9b |
|
|
Nikola Pajkovsky |
1fe8d9b |
VERB1 log("added page: %s", page_names[i]);
|
|
Nikola Pajkovsky |
1fe8d9b |
}
|
|
Nikola Pajkovsky |
1fe8d9b |
@@ -1680,10 +1701,13 @@ static void add_pages()
|
|
Nikola Pajkovsky |
1fe8d9b |
|
|
Nikola Pajkovsky |
1fe8d9b |
/* Add "Close" button */
|
|
Nikola Pajkovsky |
1fe8d9b |
GtkWidget *w;
|
|
Nikola Pajkovsky |
1fe8d9b |
- w = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
|
|
Nikola Pajkovsky |
1fe8d9b |
- g_signal_connect(w, "clicked", G_CALLBACK(gtk_main_quit), NULL);
|
|
Nikola Pajkovsky |
1fe8d9b |
- gtk_widget_show(w);
|
|
Nikola Pajkovsky |
1fe8d9b |
- gtk_assistant_add_action_widget(g_assistant, w);
|
|
Nikola Pajkovsky |
1fe8d9b |
+ if (!not_reportable)
|
|
Nikola Pajkovsky |
1fe8d9b |
+ {
|
|
Nikola Pajkovsky |
1fe8d9b |
+ w = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
|
|
Nikola Pajkovsky |
1fe8d9b |
+ g_signal_connect(w, "clicked", G_CALLBACK(gtk_main_quit), NULL);
|
|
Nikola Pajkovsky |
1fe8d9b |
+ gtk_widget_show(w);
|
|
Nikola Pajkovsky |
1fe8d9b |
+ gtk_assistant_add_action_widget(g_assistant, w);
|
|
Nikola Pajkovsky |
1fe8d9b |
+ }
|
|
Nikola Pajkovsky |
1fe8d9b |
/* and hide "Cancel" button - "Close" is a better name for what we want */
|
|
Nikola Pajkovsky |
1fe8d9b |
gtk_assistant_commit(g_assistant);
|
|
Nikola Pajkovsky |
1fe8d9b |
|
|
Nikola Pajkovsky |
1fe8d9b |
diff --git a/src/include/internal_libreport.h b/src/include/internal_libreport.h
|
|
Nikola Pajkovsky |
1fe8d9b |
index c7811a5..16e50bd 100644
|
|
Nikola Pajkovsky |
1fe8d9b |
--- a/src/include/internal_libreport.h
|
|
Nikola Pajkovsky |
1fe8d9b |
+++ b/src/include/internal_libreport.h
|
|
Nikola Pajkovsky |
1fe8d9b |
@@ -575,7 +575,7 @@ int delete_dump_dir_possibly_using_abrtd(const char *dump_dir_name);
|
|
Nikola Pajkovsky |
1fe8d9b |
struct dump_dir *steal_directory(const char *base_dir, const char *dump_dir_name);
|
|
Nikola Pajkovsky |
1fe8d9b |
|
|
Nikola Pajkovsky |
1fe8d9b |
#define kernel_tainted_short libreport_kernel_tainted_short
|
|
Nikola Pajkovsky |
1fe8d9b |
-char *kernel_tainted_short(unsigned tainted);
|
|
Nikola Pajkovsky |
1fe8d9b |
+char *kernel_tainted_short(const char *kernel_bt);
|
|
Nikola Pajkovsky |
1fe8d9b |
#define kernel_tainted_long libreport_kernel_tainted_long
|
|
Nikola Pajkovsky |
1fe8d9b |
GList *kernel_tainted_long(unsigned tainted);
|
|
Nikola Pajkovsky |
1fe8d9b |
|
|
Nikola Pajkovsky |
1fe8d9b |
@@ -629,6 +629,7 @@ GList *kernel_tainted_long(unsigned tainted);
|
|
Nikola Pajkovsky |
1fe8d9b |
*/
|
|
Nikola Pajkovsky |
1fe8d9b |
#define FILENAME_REPORTED_TO "reported_to"
|
|
Nikola Pajkovsky |
1fe8d9b |
#define FILENAME_EVENT_LOG "event_log"
|
|
Nikola Pajkovsky |
1fe8d9b |
+#define FILENAME_NOT_REPORTABLE "not-reportable"
|
|
Nikola Pajkovsky |
1fe8d9b |
|
|
Nikola Pajkovsky |
1fe8d9b |
// Not stored as files, added "on the fly":
|
|
Nikola Pajkovsky |
1fe8d9b |
#define CD_DUMPDIR "Directory"
|
|
Nikola Pajkovsky |
1fe8d9b |
diff --git a/src/lib/kernel-tainted.c b/src/lib/kernel-tainted.c
|
|
Nikola Pajkovsky |
1fe8d9b |
index 3595408..efca2c8 100644
|
|
Nikola Pajkovsky |
1fe8d9b |
--- a/src/lib/kernel-tainted.c
|
|
Nikola Pajkovsky |
1fe8d9b |
+++ b/src/lib/kernel-tainted.c
|
|
Nikola Pajkovsky |
1fe8d9b |
@@ -18,6 +18,12 @@
|
|
Nikola Pajkovsky |
1fe8d9b |
*/
|
|
Nikola Pajkovsky |
1fe8d9b |
#include "internal_libreport.h"
|
|
Nikola Pajkovsky |
1fe8d9b |
|
|
Nikola Pajkovsky |
1fe8d9b |
+/* reading /proc/sys/kernel/tainted file after an oops is ALWAYS going
|
|
Nikola Pajkovsky |
1fe8d9b |
+ * to show it as tainted.
|
|
Nikola Pajkovsky |
1fe8d9b |
+ *
|
|
Nikola Pajkovsky |
1fe8d9b |
+ * https://bugzilla.redhat.com/show_bug.cgi?id=724838
|
|
Nikola Pajkovsky |
1fe8d9b |
+ */
|
|
Nikola Pajkovsky |
1fe8d9b |
+
|
|
Nikola Pajkovsky |
1fe8d9b |
/* From RHEL6 kernel/panic.c: */
|
|
Nikola Pajkovsky |
1fe8d9b |
static const int tnts_short[] = {
|
|
Nikola Pajkovsky |
1fe8d9b |
'P' ,
|
|
Nikola Pajkovsky |
1fe8d9b |
@@ -106,21 +112,15 @@ static const char *const tnts_long[] = {
|
|
Nikola Pajkovsky |
1fe8d9b |
"Tech_preview",
|
|
Nikola Pajkovsky |
1fe8d9b |
};
|
|
Nikola Pajkovsky |
1fe8d9b |
|
|
Nikola Pajkovsky |
1fe8d9b |
-char *kernel_tainted_short(unsigned tainted)
|
|
Nikola Pajkovsky |
1fe8d9b |
+char *kernel_tainted_short(const char *kernel_bt)
|
|
Nikola Pajkovsky |
1fe8d9b |
{
|
|
Nikola Pajkovsky |
1fe8d9b |
- char *tnt = xzalloc(ARRAY_SIZE(tnts_short) + 1);
|
|
Nikola Pajkovsky |
1fe8d9b |
- int i = 0;
|
|
Nikola Pajkovsky |
1fe8d9b |
- while (tainted)
|
|
Nikola Pajkovsky |
1fe8d9b |
- {
|
|
Nikola Pajkovsky |
1fe8d9b |
- if (0x1 & tainted)
|
|
Nikola Pajkovsky |
1fe8d9b |
- tnt[i] = tnts_short[i];
|
|
Nikola Pajkovsky |
1fe8d9b |
- else
|
|
Nikola Pajkovsky |
1fe8d9b |
- tnt[i] = '-';
|
|
Nikola Pajkovsky |
1fe8d9b |
-
|
|
Nikola Pajkovsky |
1fe8d9b |
- ++i;
|
|
Nikola Pajkovsky |
1fe8d9b |
- tainted >>= 1;
|
|
Nikola Pajkovsky |
1fe8d9b |
- }
|
|
Nikola Pajkovsky |
1fe8d9b |
+ /* example of flags: |G B | */
|
|
Nikola Pajkovsky |
1fe8d9b |
+ char *tainted = strstr(kernel_bt, "Tainted: ");
|
|
Nikola Pajkovsky |
1fe8d9b |
+ if (!tainted)
|
|
Nikola Pajkovsky |
1fe8d9b |
+ return NULL;
|
|
Nikola Pajkovsky |
1fe8d9b |
|
|
Nikola Pajkovsky |
1fe8d9b |
+ /* 12 == count of flags */
|
|
Nikola Pajkovsky |
1fe8d9b |
+ char *tnt = xstrndup(tainted + strlen("Tainted: "), 12);
|
|
Nikola Pajkovsky |
1fe8d9b |
return tnt;
|
|
Nikola Pajkovsky |
1fe8d9b |
}
|
|
Nikola Pajkovsky |
1fe8d9b |
|
|
Nikola Pajkovsky |
1fe8d9b |
--
|
|
Nikola Pajkovsky |
1fe8d9b |
1.7.7.rc0.70.g82660
|
|
Nikola Pajkovsky |
1fe8d9b |
|