[FIX] smack access to screenshots 89/29989/4
authorVitaliy Cherepanov <v.cherepanov@samsung.com>
Thu, 6 Nov 2014 15:49:03 +0000 (18:49 +0300)
committerVitaliy Cherepanov <v.cherepanov@samsung.com>
Thu, 6 Nov 2014 16:34:23 +0000 (19:34 +0300)
Change-Id: Id730f25562aa733079f2fc3105a6962410f50ba2
Signed-off-by: Vitaliy Cherepanov <v.cherepanov@samsung.com>
daemon/threads.c

index 81480a0..fd2c188 100644 (file)
@@ -39,6 +39,7 @@
 #include <sys/time.h>          // for setitimer
 #include <signal.h>                    // for sigemptyset, sigset_t, sigaddset, ...
 #include <unistd.h>                    // for write
+#include <sys/wait.h>
 
 #include "daemon.h"
 #include "utils.h"
 #include "buffer.h"
 #include "input_events.h"
 
+static chsmack(const char *filename)
+{
+       int res = 1;
+       pid_t pid;
+       char cmd[1024];
+       int status;
+
+       pid = fork();
+       switch (pid) {
+       case -1:
+               /* fail to fork */
+               LOGE("cannot fork");
+               break;
+       case 0:
+               /* child */
+               snprintf(cmd, sizeof(cmd), "chsmack -a sdbd \"%s\"", filename);
+               execl(SHELL_CMD, SHELL_CMD, "-c", cmd, NULL);
+
+               /* exec fail */
+               LOGE("exec fail! <%s>\n", cmd);
+               break;
+       default:
+               /* parent */
+               waitpid(pid, &status, 0);
+               res = 0;
+       }
+
+       return res;
+}
 static void* recvThread(void* data)
 {
        struct target *target = data;
@@ -143,6 +173,23 @@ static void* recvThread(void* data)
                        // don't send to host
                        LOGW("EXTRA '%s'\n", log.data);
                        continue;
+               } else if (log.type == MSG_IMAGE) {
+                       /* need chsmak */
+                       char *file_name = log.data;
+                       LOGI("MSG_IMAGE> <%s>\n", file_name);
+
+                       if (chsmack(file_name) == 0) {
+                               /* exctract probe message */
+                               file_name += strnlen(file_name, PATH_MAX) + 1;
+                               struct msg_data_t *msg_data = (struct msg_data_t *)file_name;
+                               if (write_to_buf(msg_data) != 0)
+                                       LOGE("write to buf fail\n");
+                       } else {
+                               LOGE("chsmack fail\n");
+                       }
+
+
+                       continue;
                }
 #ifdef PRINT_TARGET_LOG
                else if(log.type == MSG_LOG)
@@ -160,10 +207,6 @@ static void* recvThread(void* data)
                                        break;
                        }
                }
-               else if(log.type == MSG_IMAGE)
-               {
-                       LOGI("MSG_IMAGE received\n");
-               }
                else    // not MSG_LOG and not MSG_IMAGE
                {
                        LOGI("Extra MSG TYPE (%d|%d|%s)\n", log.type, log.length, log.data);