Matej Habrnal 933436
From 0fcf4fdd56970ca333f36d7fcfda2d6ecb14c8f2 Mon Sep 17 00:00:00 2001
Matej Habrnal 933436
From: Jakub Filak <jfilak@redhat.com>
Matej Habrnal 933436
Date: Thu, 16 Jun 2016 14:21:28 +0200
Matej Habrnal 933436
Subject: [PATCH] vmcore: use findmnt to get mountpoint
Matej Habrnal 933436
Matej Habrnal 933436
findmnt solves both problems:
Matej Habrnal 933436
* UUID=/LABEL=
Matej Habrnal 933436
* different device links
Matej Habrnal 933436
Matej Habrnal 933436
Related: rhbz#1147053
Matej Habrnal 933436
Matej Habrnal 933436
Signed-off-by: Jakub Filak <jfilak@redhat.com>
Matej Habrnal 933436
---
Matej Habrnal 933436
 configure.ac                        |  2 +-
Matej Habrnal 933436
 src/hooks/Makefile.am               |  2 +-
Matej Habrnal 933436
 src/hooks/abrt_harvest_vmcore.py.in | 59 ++++++++++++++-----------------------
Matej Habrnal 933436
 3 files changed, 24 insertions(+), 39 deletions(-)
Matej Habrnal 933436
Matej Habrnal 933436
diff --git a/configure.ac b/configure.ac
Matej Habrnal 933436
index 8e13524..98fbebc 100644
Matej Habrnal 933436
--- a/configure.ac
Matej Habrnal 933436
+++ b/configure.ac
Matej Habrnal 933436
@@ -263,7 +263,7 @@ AC_ARG_ENABLE(doxygen-docs,
Matej Habrnal 933436
     [enable_doxygen_docs=no]
Matej Habrnal 933436
 )
Matej Habrnal 933436
 
Matej Habrnal 933436
-AC_PATH_PROG([BLKID], [BLKID], [/usr/sbin/blkid], [$PATH:/usr/sbin:/sbin])
Matej Habrnal 933436
+AC_PATH_PROG([FINDMNT], [findmnt], [/usr/bin/findmnt], [$PATH:/usr/sbin:/sbin])
Matej Habrnal 933436
 
Matej Habrnal 933436
 # Doxygen Documentation
Matej Habrnal 933436
 
Matej Habrnal 933436
diff --git a/src/hooks/Makefile.am b/src/hooks/Makefile.am
Matej Habrnal 933436
index c0255d9..8e73bdc 100644
Matej Habrnal 933436
--- a/src/hooks/Makefile.am
Matej Habrnal 933436
+++ b/src/hooks/Makefile.am
Matej Habrnal 933436
@@ -119,7 +119,7 @@ abrt-install-ccpp-hook: abrt-install-ccpp-hook.in
Matej Habrnal 933436
 abrt-harvest-vmcore: abrt_harvest_vmcore.py.in
Matej Habrnal 933436
 	sed -e s,\@CONF_DIR\@,\$(CONF_DIR)\,g \
Matej Habrnal 933436
 	    -e s,\@DEFAULT_DUMP_LOCATION\@,$(DEFAULT_DUMP_LOCATION),g \
Matej Habrnal 933436
-	    -e s,\@BLKID\@,$(BLKID),g \
Matej Habrnal 933436
+	    -e s,\@FINDMNT\@,$(FINDMNT),g \
Matej Habrnal 933436
 		$< >$@
Matej Habrnal 933436
 
Matej Habrnal 933436
 abrt-harvest-pstoreoops: abrt-harvest-pstoreoops.in
Matej Habrnal 933436
diff --git a/src/hooks/abrt_harvest_vmcore.py.in b/src/hooks/abrt_harvest_vmcore.py.in
Matej Habrnal 933436
index ab976dc..1cceea7 100644
Matej Habrnal 933436
--- a/src/hooks/abrt_harvest_vmcore.py.in
Matej Habrnal 933436
+++ b/src/hooks/abrt_harvest_vmcore.py.in
Matej Habrnal 933436
@@ -19,6 +19,12 @@ import problem
Matej Habrnal 933436
 import report
Matej Habrnal 933436
 
Matej Habrnal 933436
 
Matej Habrnal 933436
+def errx(message, code=1):
Matej Habrnal 933436
+    sys.stderr.write(message)
Matej Habrnal 933436
+    sys.stderr.write("\n")
Matej Habrnal 933436
+    sys.stderr.flush()
Matej Habrnal 933436
+    sys.exit(code)
Matej Habrnal 933436
+
Matej Habrnal 933436
 def get_augeas(module, file_path):
Matej Habrnal 933436
     """
Matej Habrnal 933436
     A function for efficient configuration of Augeas.
Matej Habrnal 933436
@@ -33,49 +39,28 @@ def get_augeas(module, file_path):
Matej Habrnal 933436
 
Matej Habrnal 933436
 def get_mount_point(part_id):
Matej Habrnal 933436
     """
Matej Habrnal 933436
-    A function used to look up a mount point in mtab using
Matej Habrnal 933436
-    the provided identifier.
Matej Habrnal 933436
+    A function used to look up a mount point of the provided identifier
Matej Habrnal 933436
+    using 'findmnt' system utility.
Matej Habrnal 933436
 
Matej Habrnal 933436
     part_id - device node, label or uuid
Matej Habrnal 933436
     """
Matej Habrnal 933436
 
Matej Habrnal 933436
-    idtypes = {"UUID=":"-U", "PARTUUID=":"-U", "LABEL=":"-L", "PARTLABEL=":"-L"}
Matej Habrnal 933436
-
Matej Habrnal 933436
-    for typ, switch in idtypes.items():
Matej Habrnal 933436
-        if not part_id.startswith(typ):
Matej Habrnal 933436
-            continue
Matej Habrnal 933436
-
Matej Habrnal 933436
-        idf = part_id[len(typ):]
Matej Habrnal 933436
-        try:
Matej Habrnal 933436
-            proc = Popen(["@BLKID@", switch, idf], stdout=PIPE, stderr=PIPE)
Matej Habrnal 933436
-            out, err = proc.communicate()
Matej Habrnal 933436
-            if err:
Matej Habrnal 933436
-                sys.stderr.write("Failed 'blkid {0} {1}': {2}\n"
Matej Habrnal 933436
-                                 .format(switch, idf, err))
Matej Habrnal 933436
-                sys.exit(1)
Matej Habrnal 933436
-            if not out:
Matej Habrnal 933436
-                sys.stderr.write("No results from 'blkid {0} {1}'\n"
Matej Habrnal 933436
-                                 .format(switch, idf))
Matej Habrnal 933436
-                sys.exit(1)
Matej Habrnal 933436
-
Matej Habrnal 933436
-            part_id = out.decode().strip()
Matej Habrnal 933436
-            break
Matej Habrnal 933436
-        except OSError as ex:
Matej Habrnal 933436
-            sys.stderr.write("Cannot run 'blkid {0} {1}': {2}\n"
Matej Habrnal 933436
-                              .format(switch, idf, str(ex)))
Matej Habrnal 933436
-            sys.exit(1)
Matej Habrnal 933436
+    try:
Matej Habrnal 933436
+        proc = Popen(["@FINDMNT@", "--noheadings", "--first-only", "--raw",
Matej Habrnal 933436
+                     "--evaluate", "--output", "TARGET", part_id],
Matej Habrnal 933436
+                     stdout=PIPE, stderr=PIPE)
Matej Habrnal 933436
+        out, err = proc.communicate()
Matej Habrnal 933436
+        if err:
Matej Habrnal 933436
+            errx("Error finding mountpoint of '{0}': {1}"
Matej Habrnal 933436
+                 .format(devpath, err.decode()))
Matej Habrnal 933436
+
Matej Habrnal 933436
+        result = out.decode().strip()
Matej Habrnal 933436
+        if proc.returncode != 0 or not result:
Matej Habrnal 933436
+            errx("Cannot find mountpoint of '{0}'".format(part_id))
Matej Habrnal 933436
 
Matej Habrnal 933436
-    # look up the identifier in /etc/mtab
Matej Habrnal 933436
-    result = get_augeas("Fstab", "/etc/mtab").get("/files/etc/mtab/*"
Matej Habrnal 933436
-                                 "[spec=\"" + part_id + "\"]/file")
Matej Habrnal 933436
-    if result:
Matej Habrnal 933436
         return result
Matej Habrnal 933436
-    else:
Matej Habrnal 933436
-        # identifier not in the table
Matej Habrnal 933436
-        sys.stderr.write("Error: Cannot access partition '" + part_id +
Matej Habrnal 933436
-                         "', mount point not found in /etc/mtab!\n")
Matej Habrnal 933436
-        sys.exit(1)
Matej Habrnal 933436
-
Matej Habrnal 933436
+    except OSError as ex:
Matej Habrnal 933436
+        errx("Cannot run 'findmnt': {1}".format(str(ex)))
Matej Habrnal 933436
 
Matej Habrnal 933436
 def parse_kdump():
Matej Habrnal 933436
     """
Matej Habrnal 933436
-- 
Matej Habrnal 933436
2.7.4
Matej Habrnal 933436