Matej Habrnal fa1950
From 8f6a49db8997b1296eafa639920e039f87fb1989 Mon Sep 17 00:00:00 2001
Matej Habrnal fa1950
From: Martin Milata <mmilata@redhat.com>
Matej Habrnal fa1950
Date: Mon, 8 Dec 2014 17:01:56 +0100
Matej Habrnal fa1950
Subject: [PATCH] abrt-install-ccpp-hook check configuration
Matej Habrnal fa1950
Matej Habrnal fa1950
Check that either full coredump or core backtrace are configured to be
Matej Habrnal fa1950
saved, fail init script if neither is.
Matej Habrnal fa1950
Matej Habrnal fa1950
Related to #829.
Matej Habrnal fa1950
Matej Habrnal fa1950
Signed-off-by: Martin Milata <mmilata@redhat.com>
Matej Habrnal fa1950
---
Matej Habrnal fa1950
 src/hooks/abrt-hook-ccpp.c          | 63 +++++++++++++++++++++++--------------
Matej Habrnal fa1950
 src/hooks/abrt-install-ccpp-hook.in |  5 +++
Matej Habrnal fa1950
 2 files changed, 44 insertions(+), 24 deletions(-)
Matej Habrnal fa1950
Matej Habrnal fa1950
diff --git a/src/hooks/abrt-hook-ccpp.c b/src/hooks/abrt-hook-ccpp.c
Matej Habrnal fa1950
index 57c56a7..f8f97ad 100644
Matej Habrnal fa1950
--- a/src/hooks/abrt-hook-ccpp.c
Matej Habrnal fa1950
+++ b/src/hooks/abrt-hook-ccpp.c
Matej Habrnal fa1950
@@ -501,6 +501,18 @@ static int create_user_core(int user_core_fd, pid_t pid, off_t ulimit_c)
Matej Habrnal fa1950
     return 0;
Matej Habrnal fa1950
 }
Matej Habrnal fa1950
 
Matej Habrnal fa1950
+static int test_configuration(bool setting_SaveFullCore, bool setting_CreateCoreBacktrace)
Matej Habrnal fa1950
+{
Matej Habrnal fa1950
+    if (!setting_SaveFullCore && !setting_CreateCoreBacktrace)
Matej Habrnal fa1950
+    {
Matej Habrnal fa1950
+        fprintf(stderr, "Both SaveFullCore and CreateCoreBacktrace are disabled - "
Matej Habrnal fa1950
+                        "at least one of them is needed for useful report.\n");
Matej Habrnal fa1950
+        return 1;
Matej Habrnal fa1950
+    }
Matej Habrnal fa1950
+
Matej Habrnal fa1950
+    return 0;
Matej Habrnal fa1950
+}
Matej Habrnal fa1950
+
Matej Habrnal fa1950
 int main(int argc, char** argv)
Matej Habrnal fa1950
 {
Matej Habrnal fa1950
     /* Kernel starts us with all fd's closed.
Matej Habrnal fa1950
@@ -510,31 +522,9 @@ int main(int argc, char** argv)
Matej Habrnal fa1950
      */
Matej Habrnal fa1950
     int fd = xopen("/dev/null", O_RDWR);
Matej Habrnal fa1950
     while (fd < 2)
Matej Habrnal fa1950
-	fd = xdup(fd);
Matej Habrnal fa1950
+        fd = xdup(fd);
Matej Habrnal fa1950
     if (fd > 2)
Matej Habrnal fa1950
-	close(fd);
Matej Habrnal fa1950
-
Matej Habrnal fa1950
-    if (argc < 8)
Matej Habrnal fa1950
-    {
Matej Habrnal fa1950
-        /* percent specifier:         %s   %c              %p  %u  %g  %t   %e          %i */
Matej Habrnal fa1950
-        /* argv:                  [0] [1]  [2]             [3] [4] [5] [6]  [7]         [8]*/
Matej Habrnal fa1950
-        error_msg_and_die("Usage: %s SIGNO CORE_SIZE_LIMIT PID UID GID TIME BINARY_NAME [TID]", argv[0]);
Matej Habrnal fa1950
-    }
Matej Habrnal fa1950
-
Matej Habrnal fa1950
-    /* Not needed on 2.6.30.
Matej Habrnal fa1950
-     * At least 2.6.18 has a bug where
Matej Habrnal fa1950
-     * argv[1] = "SIGNO CORE_SIZE_LIMIT PID ..."
Matej Habrnal fa1950
-     * argv[2] = "CORE_SIZE_LIMIT PID ..."
Matej Habrnal fa1950
-     * and so on. Fixing it:
Matej Habrnal fa1950
-     */
Matej Habrnal fa1950
-    if (strchr(argv[1], ' '))
Matej Habrnal fa1950
-    {
Matej Habrnal fa1950
-        int i;
Matej Habrnal fa1950
-        for (i = 1; argv[i]; i++)
Matej Habrnal fa1950
-        {
Matej Habrnal fa1950
-            strchrnul(argv[i], ' ')[0] = '\0';
Matej Habrnal fa1950
-        }
Matej Habrnal fa1950
-    }
Matej Habrnal fa1950
+        close(fd);
Matej Habrnal fa1950
 
Matej Habrnal fa1950
     logmode = LOGMODE_JOURNAL;
Matej Habrnal fa1950
 
Matej Habrnal fa1950
@@ -563,6 +553,31 @@ int main(int argc, char** argv)
Matej Habrnal fa1950
         free_map_string(settings);
Matej Habrnal fa1950
     }
Matej Habrnal fa1950
 
Matej Habrnal fa1950
+    if (argc == 2 && strcmp(argv[1], "--config-test"))
Matej Habrnal fa1950
+        return test_configuration(setting_SaveFullCore, setting_CreateCoreBacktrace);
Matej Habrnal fa1950
+
Matej Habrnal fa1950
+    if (argc < 8)
Matej Habrnal fa1950
+    {
Matej Habrnal fa1950
+        /* percent specifier:         %s   %c              %p  %u  %g  %t   %e          %i */
Matej Habrnal fa1950
+        /* argv:                  [0] [1]  [2]             [3] [4] [5] [6]  [7]         [8]*/
Matej Habrnal fa1950
+        error_msg_and_die("Usage: %s SIGNO CORE_SIZE_LIMIT PID UID GID TIME BINARY_NAME [TID]", argv[0]);
Matej Habrnal fa1950
+    }
Matej Habrnal fa1950
+
Matej Habrnal fa1950
+    /* Not needed on 2.6.30.
Matej Habrnal fa1950
+     * At least 2.6.18 has a bug where
Matej Habrnal fa1950
+     * argv[1] = "SIGNO CORE_SIZE_LIMIT PID ..."
Matej Habrnal fa1950
+     * argv[2] = "CORE_SIZE_LIMIT PID ..."
Matej Habrnal fa1950
+     * and so on. Fixing it:
Matej Habrnal fa1950
+     */
Matej Habrnal fa1950
+    if (strchr(argv[1], ' '))
Matej Habrnal fa1950
+    {
Matej Habrnal fa1950
+        int i;
Matej Habrnal fa1950
+        for (i = 1; argv[i]; i++)
Matej Habrnal fa1950
+        {
Matej Habrnal fa1950
+            strchrnul(argv[i], ' ')[0] = '\0';
Matej Habrnal fa1950
+        }
Matej Habrnal fa1950
+    }
Matej Habrnal fa1950
+
Matej Habrnal fa1950
     errno = 0;
Matej Habrnal fa1950
     const char* signal_str = argv[1];
Matej Habrnal fa1950
     int signal_no = xatoi_positive(signal_str);
Matej Habrnal fa1950
diff --git a/src/hooks/abrt-install-ccpp-hook.in b/src/hooks/abrt-install-ccpp-hook.in
Matej Habrnal fa1950
index d4ed4a5..fff0a33 100755
Matej Habrnal fa1950
--- a/src/hooks/abrt-install-ccpp-hook.in
Matej Habrnal fa1950
+++ b/src/hooks/abrt-install-ccpp-hook.in
Matej Habrnal fa1950
@@ -31,6 +31,11 @@ CORE_PIPE_LIMIT_FILE="/proc/sys/kernel/core_pipe_limit"
Matej Habrnal fa1950
 CORE_PIPE_LIMIT="4"
Matej Habrnal fa1950
 
Matej Habrnal fa1950
 start() {
Matej Habrnal fa1950
+	if ! $HOOK_BIN --test-config; then
Matej Habrnal fa1950
+		echo "Invalid configuration."
Matej Habrnal fa1950
+		exit 1
Matej Habrnal fa1950
+	fi
Matej Habrnal fa1950
+
Matej Habrnal fa1950
 	cur=`cat "$PATTERN_FILE"`
Matej Habrnal fa1950
 	cur_first=`printf "%s" "$cur" | sed 's/ .*//'`
Matej Habrnal fa1950
 
Matej Habrnal fa1950
-- 
Matej Habrnal fa1950
2.1.0
Matej Habrnal fa1950