Jakub Filak d596ad
From 1cb9013d7ec62b282fd404062e88371916a12fad Mon Sep 17 00:00:00 2001
Jakub Filak d596ad
From: Jakub Filak <jfilak@redhat.com>
Jakub Filak d596ad
Date: Wed, 30 Sep 2015 12:17:47 +0200
Jakub Filak d596ad
Subject: [PATCH] conf: introduce DebugLevel
Jakub Filak d596ad
Jakub Filak d596ad
ABRT should ignore problems caused by ABRT tools if DebugLevel == 0.
Jakub Filak d596ad
DebugLevel is set to 0 by default.
Jakub Filak d596ad
Jakub Filak d596ad
Related to CVE-2015-5287
Jakub Filak d596ad
Jakub Filak d596ad
Signed-off-by: Jakub Filak <jfilak@redhat.com>
Jakub Filak d596ad
---
Jakub Filak d596ad
 doc/abrt.conf.txt     |  8 ++++++++
Jakub Filak d596ad
 src/daemon/abrt.conf  |  8 ++++++++
Jakub Filak d596ad
 src/include/libabrt.h |  2 ++
Jakub Filak d596ad
 src/lib/abrt_conf.c   | 14 ++++++++++++++
Jakub Filak d596ad
 4 files changed, 32 insertions(+)
Jakub Filak d596ad
Jakub Filak d596ad
diff --git a/doc/abrt.conf.txt b/doc/abrt.conf.txt
Jakub Filak d596ad
index 6626596..1276f55 100644
Jakub Filak d596ad
--- a/doc/abrt.conf.txt
Jakub Filak d596ad
+++ b/doc/abrt.conf.txt
Jakub Filak d596ad
@@ -36,6 +36,14 @@ DeleteUploaded = 'yes/no'::
Jakub Filak d596ad
    or not.
Jakub Filak d596ad
    The default value is 'no'.
Jakub Filak d596ad
 
Jakub Filak d596ad
+DebugLevel = '0-100':
Jakub Filak d596ad
+   Allows ABRT tools to detect problems in ABRT itself. By increasing the value
Jakub Filak d596ad
+   you can force ABRT to detect, process and report problems in ABRT. You have
Jakub Filak d596ad
+   to bare in mind that ABRT might fall into an infinite loop when handling
Jakub Filak d596ad
+   problems caused by itself.
Jakub Filak d596ad
+   The default is 0 (non debug mode).
Jakub Filak d596ad
+
Jakub Filak d596ad
+
Jakub Filak d596ad
 SEE ALSO
Jakub Filak d596ad
 --------
Jakub Filak d596ad
 abrtd(8)
Jakub Filak d596ad
diff --git a/src/daemon/abrt.conf b/src/daemon/abrt.conf
Jakub Filak d596ad
index 0050c6d..dbc2007 100644
Jakub Filak d596ad
--- a/src/daemon/abrt.conf
Jakub Filak d596ad
+++ b/src/daemon/abrt.conf
Jakub Filak d596ad
@@ -59,3 +59,11 @@ AutoreportingEnabled = no
Jakub Filak d596ad
 # SPECIAL ROOT DIRECTORY IN USER MOUNT NAMESAPCE
Jakub Filak d596ad
 #
Jakub Filak d596ad
 # ExploreChroots = false
Jakub Filak d596ad
+
Jakub Filak d596ad
+# Allows ABRT tools to detect problems in ABRT itself. By increasing the value
Jakub Filak d596ad
+# you can force ABRT to detect, process and report problems in ABRT. You have
Jakub Filak d596ad
+# to bare in mind that ABRT might fall into an infinite loop when handling
Jakub Filak d596ad
+# problems caused by itself.
Jakub Filak d596ad
+# The default is 0 (non debug mode).
Jakub Filak d596ad
+#
Jakub Filak d596ad
+# DebugLevel = 0
Jakub Filak d596ad
diff --git a/src/include/libabrt.h b/src/include/libabrt.h
Jakub Filak d596ad
index da565f9..6f89959 100644
Jakub Filak d596ad
--- a/src/include/libabrt.h
Jakub Filak d596ad
+++ b/src/include/libabrt.h
Jakub Filak d596ad
@@ -77,6 +77,8 @@ extern char *        g_settings_autoreporting_event;
Jakub Filak d596ad
 extern bool          g_settings_shortenedreporting;
Jakub Filak d596ad
 #define g_settings_explorechroots abrt_g_settings_explorechroots
Jakub Filak d596ad
 extern bool          g_settings_explorechroots;
Jakub Filak d596ad
+#define g_settings_debug_level abrt_g_settings_debug_level
Jakub Filak d596ad
+extern unsigned int  g_settings_debug_level;
Jakub Filak d596ad
 
Jakub Filak d596ad
 
Jakub Filak d596ad
 #define load_abrt_conf abrt_load_abrt_conf
Jakub Filak d596ad
diff --git a/src/lib/abrt_conf.c b/src/lib/abrt_conf.c
Jakub Filak d596ad
index 46ff689..f623344 100644
Jakub Filak d596ad
--- a/src/lib/abrt_conf.c
Jakub Filak d596ad
+++ b/src/lib/abrt_conf.c
Jakub Filak d596ad
@@ -28,6 +28,7 @@ bool          g_settings_autoreporting = 0;
Jakub Filak d596ad
 char *        g_settings_autoreporting_event = NULL;
Jakub Filak d596ad
 bool          g_settings_shortenedreporting = 0;
Jakub Filak d596ad
 bool          g_settings_explorechroots = 0;
Jakub Filak d596ad
+unsigned int  g_settings_debug_level = 0;
Jakub Filak d596ad
 
Jakub Filak d596ad
 void free_abrt_conf_data()
Jakub Filak d596ad
 {
Jakub Filak d596ad
@@ -116,6 +117,19 @@ static void ParseCommon(map_string_t *settings, const char *conf_filename)
Jakub Filak d596ad
     else
Jakub Filak d596ad
         g_settings_explorechroots = false;
Jakub Filak d596ad
 
Jakub Filak d596ad
+    value = get_map_string_item_or_NULL(settings, "DebugLevel");
Jakub Filak d596ad
+    if (value)
Jakub Filak d596ad
+    {
Jakub Filak d596ad
+        char *end;
Jakub Filak d596ad
+        errno = 0;
Jakub Filak d596ad
+        unsigned long ul = strtoul(value, &end, 10);
Jakub Filak d596ad
+        if (errno || end == value || *end != '\0' || ul > INT_MAX)
Jakub Filak d596ad
+            error_msg("Error parsing %s setting: '%s'", "DebugLevel", value);
Jakub Filak d596ad
+        else
Jakub Filak d596ad
+            g_settings_debug_level = ul;
Jakub Filak d596ad
+        remove_map_string_item(settings, "DebugLevel");
Jakub Filak d596ad
+    }
Jakub Filak d596ad
+
Jakub Filak d596ad
     GHashTableIter iter;
Jakub Filak d596ad
     const char *name;
Jakub Filak d596ad
     /*char *value; - already declared */
Jakub Filak d596ad
-- 
Jakub Filak d596ad
2.6.3
Jakub Filak d596ad