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