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