Blob Blame History Raw
From 578317a67c0f30469c28752ea2f40ae87a1a356c Mon Sep 17 00:00:00 2001
From: Matej Habrnal <mhabrnal@redhat.com>
Date: Wed, 21 Feb 2018 16:14:36 +0100
Subject: [PATCH] a-container-logger: workaround permission issue in minishift

This workarounds the following issue:
https://github.com/minishift/minishift/issues/2058

Signed-off-by: Matej Habrnal <mhabrnal@redhat.com>
---
 src/plugins/abrt-container-logger.c | 27 +++++++++++++++++++++++----
 1 file changed, 23 insertions(+), 4 deletions(-)

diff --git a/src/plugins/abrt-container-logger.c b/src/plugins/abrt-container-logger.c
index 2f9488a3..df40f562 100644
--- a/src/plugins/abrt-container-logger.c
+++ b/src/plugins/abrt-container-logger.c
@@ -15,6 +15,7 @@
 
 #include <stdio.h>
 #include <unistd.h>
+#include <sys/types.h>
 
 #define INIT_PROC_STDERR_FD_PATH "/proc/1/fd/2"
 
@@ -25,7 +26,6 @@ int main(int argc, char *argv[])
         "\n"
         "\nThe tool reads from standard input and writes to '"INIT_PROC_STDERR_FD_PATH"'";
 
-    /* the tool expects one parameter STR */
     if (argc > 1)
     {
         fprintf(stderr, "%s\n", program_usage_string);
@@ -35,9 +35,27 @@ int main(int argc, char *argv[])
     FILE *f = fopen(INIT_PROC_STDERR_FD_PATH, "w");
     if (f == NULL)
     {
-        perror("Failed to open '"INIT_PROC_STDERR_FD_PATH"'");
-        return 2;
+        perror("Failed to open '"INIT_PROC_STDERR_FD_PATH"' as root");
+
+        /* Try to open the 'INIT_PROC_STDERR_FD_PATH' as normal user because of
+           https://github.com/minishift/minishift/issues/2058
+        */
+        if (seteuid(getuid()) == 0)
+        {
+            f = fopen(INIT_PROC_STDERR_FD_PATH, "w");
+            if (f == NULL)
+            {
+                perror("Failed to open '"INIT_PROC_STDERR_FD_PATH"' as user");
+                return 2;
+            }
+        }
+        else
+        {
+            perror("Failed to setuid");
+            return 3;
+        }
     }
+
     setvbuf (f, NULL, _IONBF, 0);
 
     char buffer[BUFSIZ];
@@ -52,7 +70,8 @@ int main(int argc, char *argv[])
         if (fwrite(buffer, bytes_read, 1, f) != 1)
         {
             perror("Failed to write to '"INIT_PROC_STDERR_FD_PATH"'");
-            return 3;
+            fclose(f);
+            return 4;
         }
     }
     fclose(f);
-- 
2.14.3