9334368
From 193f2898d9bf3c7f971d2e37a846b61857e7eb77 Mon Sep 17 00:00:00 2001
9334368
From: Jakub Filak <jfilak@redhat.com>
9334368
Date: Tue, 5 Apr 2016 15:09:39 +0200
9334368
Subject: [PATCH] Merge a-a-save-kernel-data with a-a-save-package-data
9334368
9334368
I forgot to do this while working on commit
9334368
650822d0d2438825515c0e41f06cd9fb77a18334
9334368
9334368
I do not think creating another tool doing almost the same thing was a
9334368
good idea. I believe we must keep relevant bits together and not to
9334368
spread functionality among myriads of tools just because someone do not
9334368
want to code in C.
9334368
9334368
I failed to find any justification for creating
9334368
'abrt-action-save-kernel-data' instead of teaching
9334368
'abrt-action-save-package-data' to do that job:
9334368
130dee46d601f3af6bb196d99a5c911335506adf
9334368
9334368
This commit changes contents of 'package' file from 'kernel' to
9334368
'kernel-$version' string. It should not break anything as I could not
9334368
find any justification for the 'kernel' string except the original
9334368
author's believe it should be like that (probably because of efficiency).
9334368
9334368
Just for the record, we do not need the version in 'package' file
9334368
because the version is already included in 'kernel' file.
9334368
9334368
This commit enables GPGCheck and ProcessUnpackaged options for
9334368
Kerneloopses and VMcores.
9334368
9334368
Signed-off-by: Jakub Filak <jfilak@redhat.com>
9334368
---
9334368
 doc/Makefile.am                            |  1 -
9334368
 doc/abrt-action-save-kernel-data.txt       | 33 -------------
9334368
 src/daemon/abrt-action-save-package-data.c | 63 ++++++++++++++++--------
9334368
 src/plugins/Makefile.am                    |  2 -
9334368
 src/plugins/abrt-action-save-kernel-data   | 78 ------------------------------
9334368
 src/plugins/koops_event.conf               |  3 +-
9334368
 src/plugins/vmcore_event.conf              |  2 +-
9334368
 7 files changed, 46 insertions(+), 136 deletions(-)
9334368
 delete mode 100644 doc/abrt-action-save-kernel-data.txt
9334368
 delete mode 100755 src/plugins/abrt-action-save-kernel-data
9334368
9334368
diff --git a/doc/Makefile.am b/doc/Makefile.am
9334368
index d3184c4..4a5d94c 100644
9334368
--- a/doc/Makefile.am
9334368
+++ b/doc/Makefile.am
9334368
@@ -32,7 +32,6 @@ MAN1_TXT += abrt-merge-pstoreoops.txt
9334368
 MAN1_TXT += abrt-server.txt
9334368
 MAN1_TXT += abrt-cli.txt
9334368
 MAN1_TXT += abrt-action-save-package-data.txt
9334368
-MAN1_TXT += abrt-action-save-kernel-data.txt
9334368
 MAN1_TXT += abrt-install-ccpp-hook.txt
9334368
 MAN1_TXT += abrt-action-analyze-ccpp-local.txt
9334368
 MAN1_TXT += abrt-watch-log.txt
9334368
diff --git a/doc/abrt-action-save-kernel-data.txt b/doc/abrt-action-save-kernel-data.txt
9334368
deleted file mode 100644
9334368
index f82fa35..0000000
9334368
--- a/doc/abrt-action-save-kernel-data.txt
9334368
+++ /dev/null
9334368
@@ -1,33 +0,0 @@
9334368
-abrt-action-save-kernel-data(1)
9334368
-================================
9334368
-
9334368
-NAME
9334368
-----
9334368
-abrt-action-save-kernel-data - Creates uReport mandatory files for kernel oopses.
9334368
-
9334368
-SYNOPSIS
9334368
---------
9334368
-'abrt-action-save-kernel-data'
9334368
-
9334368
-DESCRIPTION
9334368
------------
9334368
-The tool reads problem directory DIR. It analyzes contents of 'kernel' element,
9334368
-checks database of installed packages, and creates new elements
9334368
-'pkg_name', 'pkg_arch', 'pkg_version', 'pkg_release'.
9334368
-
9334368
-These files are required by reporter-ureporter (mandatory in uReport).
9334368
-
9334368
-Integration with ABRT events
9334368
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9334368
-This tool can be used as an ABRT reporter. Example
9334368
-fragment for /etc/libreport/report_event.conf:
9334368
-
9334368
-------------
9334368
-# Determine in which package/component the crash happened (if not yet done):
9334368
-EVENT=post-create analyzer=Kerneloops
9334368
-        abrt-action-save-kernel-data
9334368
-------------
9334368
-
9334368
-AUTHORS
9334368
--------
9334368
-* ABRT team
9334368
diff --git a/src/daemon/abrt-action-save-package-data.c b/src/daemon/abrt-action-save-package-data.c
9334368
index 72c9878..6f8c80d 100644
9334368
--- a/src/daemon/abrt-action-save-package-data.c
9334368
+++ b/src/daemon/abrt-action-save-package-data.c
9334368
@@ -217,14 +217,7 @@ static int SavePackageDescriptionToDebugDump(const char *dump_dir_name, const ch
9334368
         return 1;
9334368
 
9334368
     char *type = dd_load_text(dd, FILENAME_TYPE);
9334368
-    if (!strcmp(type, "Kerneloops"))
9334368
-    {
9334368
-        dd_save_text(dd, FILENAME_PACKAGE, "kernel");
9334368
-        dd_save_text(dd, FILENAME_COMPONENT, "kernel");
9334368
-        dd_close(dd);
9334368
-        free(type);
9334368
-        return 0;
9334368
-    }
9334368
+    bool kernel_oops = !strcmp(type, "Kerneloops") || !strcmp(type, "vmcore");
9334368
     free(type);
9334368
 
9334368
     char *cmdline = NULL;
9334368
@@ -233,12 +226,32 @@ static int SavePackageDescriptionToDebugDump(const char *dump_dir_name, const ch
9334368
     char *package_short_name = NULL;
9334368
     struct pkg_envra *pkg_name = NULL;
9334368
     char *component = NULL;
9334368
+    char *kernel = NULL;
9334368
     int error = 1;
9334368
     /* note: "goto ret" statements below free all the above variables,
9334368
      * but they don't dd_close(dd) */
9334368
 
9334368
-    cmdline = dd_load_text_ext(dd, FILENAME_CMDLINE, DD_FAIL_QUIETLY_ENOENT);
9334368
-    executable = dd_load_text(dd, FILENAME_EXECUTABLE);
9334368
+    if (kernel_oops)
9334368
+    {
9334368
+        kernel = dd_load_text(dd, FILENAME_KERNEL);
9334368
+        if (!kernel)
9334368
+        {
9334368
+            log("File 'kernel' containing kernel version not "
9334368
+                "found in current directory");
9334368
+            goto ret;
9334368
+        }
9334368
+        /* Trim trailing white-spaces. */
9334368
+        strchrnul(kernel, ' ')[0] = '\0';
9334368
+
9334368
+        log_info("Looking for kernel package");
9334368
+        executable = xasprintf("/boot/vmlinuz-%s", kernel);
9334368
+    }
9334368
+    else
9334368
+    {
9334368
+        cmdline = dd_load_text_ext(dd, FILENAME_CMDLINE, DD_FAIL_QUIETLY_ENOENT);
9334368
+        executable = dd_load_text(dd, FILENAME_EXECUTABLE);
9334368
+    }
9334368
+
9334368
 
9334368
     /* Do not implicitly query rpm database in process's root dir, if
9334368
      * ExploreChroots is disabled. */
9334368
@@ -249,8 +262,12 @@ static int SavePackageDescriptionToDebugDump(const char *dump_dir_name, const ch
9334368
     /* Close dd while we query package database. It can take some time,
9334368
      * don't want to keep dd locked longer than necessary */
9334368
     dd_close(dd);
9334368
+    dd = NULL;
9334368
 
9334368
-    if (is_path_blacklisted(executable))
9334368
+    /* The check for kernel_oops is there because it could be an unexpected
9334368
+     * behaviour. If one wants to ignore kernel oops, she/he should disable
9334368
+     * the corresponding services. */
9334368
+    if (!kernel_oops && is_path_blacklisted(executable))
9334368
     {
9334368
         log("Blacklisted executable '%s'", executable);
9334368
         goto ret; /* return 1 (failure) */
9334368
@@ -265,13 +282,17 @@ static int SavePackageDescriptionToDebugDump(const char *dump_dir_name, const ch
9334368
                       "proceeding without packaging information", executable);
9334368
             goto ret0; /* no error */
9334368
         }
9334368
-        log("Executable '%s' doesn't belong to any package"
9334368
-		" and ProcessUnpackaged is set to 'no'",
9334368
-		executable
9334368
-        );
9334368
+        if (kernel_oops)
9334368
+            log("Can't find kernel package corresponding to '%s'", kernel);
9334368
+        else
9334368
+            log("Executable '%s' doesn't belong to any package"
9334368
+                " and ProcessUnpackaged is set to 'no'", executable);
9334368
         goto ret; /* return 1 (failure) */
9334368
     }
9334368
 
9334368
+    if (kernel_oops)
9334368
+        goto skip_interperter;
9334368
+
9334368
     /* Check well-known interpreter names */
9334368
     const char *basename = strrchr(executable, '/');
9334368
     if (basename)
9334368
@@ -314,11 +335,14 @@ static int SavePackageDescriptionToDebugDump(const char *dump_dir_name, const ch
9334368
         pkg_name = script_pkg;
9334368
     }
9334368
 
9334368
+skip_interperter:
9334368
     package_short_name = xasprintf("%s", pkg_name->p_name);
9334368
     log_info("Package:'%s' short:'%s'", pkg_name->p_nvr, package_short_name);
9334368
 
9334368
-
9334368
-    if (g_list_find_custom(settings_setBlackListedPkgs, package_short_name, (GCompareFunc)g_strcmp0))
9334368
+    /* The check for kernel_oops is there because it could be an unexpected
9334368
+     * behaviour. If one wants to ignore kernel oops, she/he should disable
9334368
+     * the corresponding services. */
9334368
+    if (!kernel_oops && g_list_find_custom(settings_setBlackListedPkgs, package_short_name, (GCompareFunc)g_strcmp0))
9334368
     {
9334368
         log("Blacklisted package '%s'", package_short_name);
9334368
         goto ret; /* return 1 (failure) */
9334368
@@ -358,11 +382,12 @@ static int SavePackageDescriptionToDebugDump(const char *dump_dir_name, const ch
9334368
     if (component)
9334368
         dd_save_text(dd, FILENAME_COMPONENT, component);
9334368
 
9334368
-    dd_close(dd);
9334368
-
9334368
  ret0:
9334368
     error = 0;
9334368
  ret:
9334368
+    if (dd)
9334368
+        dd_close(dd);
9334368
+
9334368
     free(cmdline);
9334368
     free(executable);
9334368
     free(rootdir);
9334368
diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am
9334368
index 005cc9d..2c9028b 100644
9334368
--- a/src/plugins/Makefile.am
9334368
+++ b/src/plugins/Makefile.am
9334368
@@ -6,7 +6,6 @@ bin_SCRIPTS = \
9334368
     abrt-action-analyze-vulnerability \
9334368
     abrt-action-list-dsos \
9334368
     abrt-action-perform-ccpp-analysis \
9334368
-    abrt-action-save-kernel-data \
9334368
     abrt-action-analyze-ccpp-local \
9334368
     abrt-action-notify
9334368
 
9334368
@@ -101,7 +100,6 @@ EXTRA_DIST = \
9334368
     analyze_RetraceServer.xml.in \
9334368
     abrt-action-analyze-core.in \
9334368
     abrt-action-generate-machine-id \
9334368
-    abrt-action-save-kernel-data \
9334368
     abrt-action-ureport \
9334368
     abrt-gdb-exploitable \
9334368
     https-utils.h \
9334368
diff --git a/src/plugins/abrt-action-save-kernel-data b/src/plugins/abrt-action-save-kernel-data
9334368
deleted file mode 100755
9334368
index f8b18f0..0000000
9334368
--- a/src/plugins/abrt-action-save-kernel-data
9334368
+++ /dev/null
9334368
@@ -1,78 +0,0 @@
9334368
-#!/bin/bash
9334368
-#
9334368
-# Save pkg_{name, arch, version, release} for kernel oopses.
9334368
-#
9334368
-# These files are required by reporter-ureporter (mandatory
9334368
-# in uReport).
9334368
-#
9334368
-
9334368
-function print_usage
9334368
-{
9334368
-    echo "Usage: abrt-action-save-package-data [OPTION]"
9334368
-    echo ""
9334368
-    echo "    -r, --root ROOT      use ROOT as top level directory"
9334368
-    echo "    -h, --help           Show this help message"
9334368
-}
9334368
-
9334368
-ROOT="/"
9334368
-
9334368
-while [ $# -gt 0 ];
9334368
-do
9334368
-    case "$1" in
9334368
-        "-r"|"--root")
9334368
-            if [ -z "$2" ]; then
9334368
-                >&2
9334368
-                echo "$1: requires argument"
9334368
-                print_usage
9334368
-                exit 1
9334368
-            fi
9334368
-
9334368
-            ROOT=$2
9334368
-            shift
9334368
-            ;;
9334368
-
9334368
-        "-h"|"--help")
9334368
-            echo "Save pkg_{name, arch, version, release} for kernel oopses."
9334368
-            echo ""
9334368
-            echo "These files are required by reporter-ureporter (mandatory"
9334368
-            echo "in uReport)."
9334368
-
9334368
-            print_usage
9334368
-            exit 0
9334368
-            ;;
9334368
-
9334368
-        *)
9334368
-            >&2
9334368
-            echo "$1: unknown option"
9334368
-            echo
9334368
-            print_usage
9334368
-            exit 1
9334368
-            ;;
9334368
-    esac
9334368
-
9334368
-    shift
9334368
-done
9334368
-
9334368
-if [ ! -f kernel ]; then
9334368
-    echo "File 'kernel' containing kernel version not found in current directory"
9334368
-    exit 1
9334368
-fi
9334368
-
9334368
-echo "Looking for kernel package"
9334368
-kernel_version="$( sed 's/ .*//' kernel )"
9334368
-
9334368
-package="$( rpm --root $ROOT -qf "/boot/vmlinuz-$kernel_version" )"
9334368
-if [ $? != 0 ]; then
9334368
-        echo "Can't find kernel package corresponding to '$kernel_version'"
9334368
-        echo "Can't record package version data (pkg_version, pkg_release, ...)."
9334368
-        exit 1
9334368
-fi
9334368
-
9334368
-echo "Kernel package $package found"
9334368
-rpm --root $ROOT -q --qf "%{name}\n" "$package" > pkg_name
9334368
-rpm --root $ROOT -q --qf "%{arch}\n" "$package" > pkg_arch
9334368
-rpm --root $ROOT -q --qf "%{version}\n" "$package" > pkg_version
9334368
-rpm --root $ROOT -q --qf "%{release}\n" "$package" > pkg_release
9334368
-epoch="$( rpm --root $ROOT -q --qf "%{epoch}" "$package" )"
9334368
-test "$epoch" = "(none)"  && epoch=0
9334368
-echo "$epoch" > pkg_epoch
9334368
diff --git a/src/plugins/koops_event.conf b/src/plugins/koops_event.conf
9334368
index df7e446..f273ba2 100644
9334368
--- a/src/plugins/koops_event.conf
9334368
+++ b/src/plugins/koops_event.conf
9334368
@@ -16,8 +16,7 @@ EVENT=post-create type=Kerneloops remote!=1
9334368
         if test ! -f uuid -a ! -f duphash; then
9334368
              abrt-action-analyze-oops || exit 1
9334368
         fi
9334368
-        } &&
9334368
-        abrt-action-save-kernel-data
9334368
+        }
9334368
 
9334368
 
9334368
 # If you want behavior similar to one provided by kerneloops daemon
9334368
diff --git a/src/plugins/vmcore_event.conf b/src/plugins/vmcore_event.conf
9334368
index ae4dc9f..61bc9d1 100644
9334368
--- a/src/plugins/vmcore_event.conf
9334368
+++ b/src/plugins/vmcore_event.conf
9334368
@@ -34,7 +34,7 @@ EVENT=post-create type=vmcore remote!=1
9334368
 # analyze
9334368
 EVENT=analyze_VMcore type=vmcore
9334368
         abrt-action-analyze-oops &&
9334368
-        abrt-action-save-kernel-data
9334368
+        abrt-action-save-package-data
9334368
 
9334368
 # If you want behavior similar to one provided by kerneloops daemon
9334368
 # distributed by kerneloops.org - that is, if you want
9334368
-- 
9334368
2.7.4
9334368