Make path to launcher_user a definition 85/119085/6
authorKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Wed, 15 Mar 2017 11:29:12 +0000 (12:29 +0100)
committerKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Wed, 29 Mar 2017 12:48:14 +0000 (14:48 +0200)
Currently the path was calculated by appending "_user" to argv[0]

Change-Id: I892e389d85262dc76f9963395d3d0093ecad00ee

test/app_encryption/launcher/CMakeLists.txt
test/app_encryption/launcher/launcher.cpp

index 9fdc3c651567a93bcdd99a8d35ac87795c2ffc46..ac42420b9941198a03e18fa371e4fc4549e4d321 100644 (file)
@@ -45,6 +45,8 @@ SET(LAUNCHER_SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/launcher.cpp
 )
 
+ADD_DEFINITIONS("-DLAUNCHER_USER=\"${APP_ENCRYPTION_DIR}/${TARGET_LAUNCHER_USER}\"")
+
 ADD_EXECUTABLE(${TARGET_LAUNCHER} ${LAUNCHER_SOURCES})
 
 TARGET_LINK_LIBRARIES(${TARGET_LAUNCHER}
index 8fe5b32ae768fa7797c212627b37f0fdd2a665cd..2e8978921558768b7e7fc5bc323bcdc6e30ee2e6 100644 (file)
@@ -79,6 +79,12 @@ int main(int argc, char* argv[])
             return 1;
         }
 
+        // prevent capabilities drop
+        if (0 != prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0)) {
+            std::cerr << "prctl() failed" << std::endl;
+            return 1;
+        }
+
         // uid / gid (because real uid is not affected by chmod)
         passwd* pw = getpwnam(OWNER);
         if (pw == NULL) {
@@ -142,18 +148,17 @@ int main(int argc, char* argv[])
         }
 
         // launch helper binary with smack exec label = User
-        std::string launcher_user = std::string(argv[0]) + "_user";
-
-        char* user_argv[argc+1];
-        user_argv[0] = strdup(launcher_user.c_str());
+        char* userArgv[argc+1];
+        userArgv[0] = strdup(LAUNCHER_USER);
         for (int i = 1; i < argc; i++)
-            user_argv[i] = argv[i];
-        user_argv[argc] = NULL;
+            userArgv[i] = argv[i];
+        userArgv[argc] = NULL;
 
         char* envp[] = { NULL };
-        execve(user_argv[0], user_argv, envp);
+
+        execve(userArgv[0], userArgv, envp);
         std::cerr << "execve() failed" << std::endl;
-        free(user_argv[0]);
+        free(userArgv[0]);
         return 1;
     }
     return 0;