Matej Habrnal bcf6f2
From 578317a67c0f30469c28752ea2f40ae87a1a356c Mon Sep 17 00:00:00 2001
Matej Habrnal bcf6f2
From: Matej Habrnal <mhabrnal@redhat.com>
Matej Habrnal bcf6f2
Date: Wed, 21 Feb 2018 16:14:36 +0100
Matej Habrnal bcf6f2
Subject: [PATCH] a-container-logger: workaround permission issue in minishift
Matej Habrnal bcf6f2
Matej Habrnal bcf6f2
This workarounds the following issue:
Matej Habrnal bcf6f2
https://github.com/minishift/minishift/issues/2058
Matej Habrnal bcf6f2
Matej Habrnal bcf6f2
Signed-off-by: Matej Habrnal <mhabrnal@redhat.com>
Matej Habrnal bcf6f2
---
Matej Habrnal bcf6f2
 src/plugins/abrt-container-logger.c | 27 +++++++++++++++++++++++----
Matej Habrnal bcf6f2
 1 file changed, 23 insertions(+), 4 deletions(-)
Matej Habrnal bcf6f2
Matej Habrnal bcf6f2
diff --git a/src/plugins/abrt-container-logger.c b/src/plugins/abrt-container-logger.c
Matej Habrnal bcf6f2
index 2f9488a3..df40f562 100644
Matej Habrnal bcf6f2
--- a/src/plugins/abrt-container-logger.c
Matej Habrnal bcf6f2
+++ b/src/plugins/abrt-container-logger.c
Matej Habrnal bcf6f2
@@ -15,6 +15,7 @@
Matej Habrnal bcf6f2
 
Matej Habrnal bcf6f2
 #include <stdio.h>
Matej Habrnal bcf6f2
 #include <unistd.h>
Matej Habrnal bcf6f2
+#include <sys/types.h>
Matej Habrnal bcf6f2
 
Matej Habrnal bcf6f2
 #define INIT_PROC_STDERR_FD_PATH "/proc/1/fd/2"
Matej Habrnal bcf6f2
 
Matej Habrnal bcf6f2
@@ -25,7 +26,6 @@ int main(int argc, char *argv[])
Matej Habrnal bcf6f2
         "\n"
Matej Habrnal bcf6f2
         "\nThe tool reads from standard input and writes to '"INIT_PROC_STDERR_FD_PATH"'";
Matej Habrnal bcf6f2
 
Matej Habrnal bcf6f2
-    /* the tool expects one parameter STR */
Matej Habrnal bcf6f2
     if (argc > 1)
Matej Habrnal bcf6f2
     {
Matej Habrnal bcf6f2
         fprintf(stderr, "%s\n", program_usage_string);
Matej Habrnal bcf6f2
@@ -35,9 +35,27 @@ int main(int argc, char *argv[])
Matej Habrnal bcf6f2
     FILE *f = fopen(INIT_PROC_STDERR_FD_PATH, "w");
Matej Habrnal bcf6f2
     if (f == NULL)
Matej Habrnal bcf6f2
     {
Matej Habrnal bcf6f2
-        perror("Failed to open '"INIT_PROC_STDERR_FD_PATH"'");
Matej Habrnal bcf6f2
-        return 2;
Matej Habrnal bcf6f2
+        perror("Failed to open '"INIT_PROC_STDERR_FD_PATH"' as root");
Matej Habrnal bcf6f2
+
Matej Habrnal bcf6f2
+        /* Try to open the 'INIT_PROC_STDERR_FD_PATH' as normal user because of
Matej Habrnal bcf6f2
+           https://github.com/minishift/minishift/issues/2058
Matej Habrnal bcf6f2
+        */
Matej Habrnal bcf6f2
+        if (seteuid(getuid()) == 0)
Matej Habrnal bcf6f2
+        {
Matej Habrnal bcf6f2
+            f = fopen(INIT_PROC_STDERR_FD_PATH, "w");
Matej Habrnal bcf6f2
+            if (f == NULL)
Matej Habrnal bcf6f2
+            {
Matej Habrnal bcf6f2
+                perror("Failed to open '"INIT_PROC_STDERR_FD_PATH"' as user");
Matej Habrnal bcf6f2
+                return 2;
Matej Habrnal bcf6f2
+            }
Matej Habrnal bcf6f2
+        }
Matej Habrnal bcf6f2
+        else
Matej Habrnal bcf6f2
+        {
Matej Habrnal bcf6f2
+            perror("Failed to setuid");
Matej Habrnal bcf6f2
+            return 3;
Matej Habrnal bcf6f2
+        }
Matej Habrnal bcf6f2
     }
Matej Habrnal bcf6f2
+
Matej Habrnal bcf6f2
     setvbuf (f, NULL, _IONBF, 0);
Matej Habrnal bcf6f2
 
Matej Habrnal bcf6f2
     char buffer[BUFSIZ];
Matej Habrnal bcf6f2
@@ -52,7 +70,8 @@ int main(int argc, char *argv[])
Matej Habrnal bcf6f2
         if (fwrite(buffer, bytes_read, 1, f) != 1)
Matej Habrnal bcf6f2
         {
Matej Habrnal bcf6f2
             perror("Failed to write to '"INIT_PROC_STDERR_FD_PATH"'");
Matej Habrnal bcf6f2
-            return 3;
Matej Habrnal bcf6f2
+            fclose(f);
Matej Habrnal bcf6f2
+            return 4;
Matej Habrnal bcf6f2
         }
Matej Habrnal bcf6f2
     }
Matej Habrnal bcf6f2
     fclose(f);
Matej Habrnal bcf6f2
-- 
Matej Habrnal bcf6f2
2.14.3
Matej Habrnal bcf6f2