Support debug tool 62/64262/7 accepted/tizen/common/20160408.184922 accepted/tizen/ivi/20160408.052517 accepted/tizen/mobile/20160408.052455 accepted/tizen/tv/20160408.052429 accepted/tizen/wearable/20160408.052441 submit/tizen/20160408.003820
authorHwankyu Jhun <h.jhun@samsung.com>
Thu, 31 Mar 2016 05:34:37 +0000 (14:34 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Thu, 7 Apr 2016 11:08:41 +0000 (20:08 +0900)
- Remove hardcoded path

Change-Id: Ica171199d95b8b6310cc6c28876ec33b2b53258b
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
include/common.h
include/defs.h
src/common.c
src/debug-launchpad.c
src/debug_util.c

index cff6fa6..fa7e9b4 100644 (file)
@@ -70,6 +70,6 @@ void _modify_bundle(bundle *kb, int caller_pid, appinfo_t *appinfo, int cmd);
 void _set_env(appinfo_t *app_info, bundle *kb);
 char **_create_argc_argv(bundle *kb, int *margc, const char *app_path);
 
-char *_proc_get_cmdline_bypid(int pid);
+int _proc_check_cmdline_bypid(int pid);
 
 #endif /* __COMMON_H__ */
index 8e48b21..9af5393 100644 (file)
@@ -45,9 +45,9 @@
 #define DLP_K_UNIT_TEST_ARG "__DLP_UNIT_TEST_ARG__"
 #define DLP_K_VALGRIND_ARG "__DLP_VALGRIND_ARG__"
 #define DLP_K_ATTACH_ARG "__DLP_ATTACH_ARG__"
+#define DLP_K_GDBSERVER_PATH "__DLP_GDBSERVER_PATH__"
+#define DLP_K_VALGRIND_PATH "__DLP_VALGRIND_PATH__"
 
-#define PATH_GDBSERVER "/home/developer/sdk_tools/gdbserver/gdbserver"
-#define PATH_VALGRIND "/home/developer/sdk_tools/valgrind/usr/bin/valgrind"
 #define PATH_DA_SO "/home/developer/sdk_tools/da/da_probe.so"
 
 #define OPT_VALGRIND_LOGFILE_FIXED "--log-file=/tmp/valgrind_result.txt"
index 5cb31e1..4b05749 100644 (file)
 #include "defs.h"
 
 #define MAX_PATH_LEN 1024
-#define BINSH_NAME "/bin/sh"
-#define BINSH_SIZE 7
-#define VALGRIND_NAME "/home/developer/sdk_tools/valgrind/usr/bin/valgrind"
-#define VALGRIND_SIZE 51
-#define BASH_NAME "/bin/bash"
-#define BASH_SIZE 9
-#define OPROFILE_NAME "/usr/bin/oprofile_command"
-#define OPROFILE_SIZE 25
-#define OPTION_VALGRIND_NAME "valgrind"
-#define OPTION_VALGRIND_SIZE 8
 #define MAX_CMD_BUFSZ 1024
 #define PATH_TMP "/tmp"
 #define PATH_DATA "/data"
@@ -515,7 +505,7 @@ void _set_env(appinfo_t *appinfo, bundle *kb)
                __set_sdk_env(appinfo->appid, str_array[i]);
 }
 
-static char **__add_arg(bundle * kb, char **argv, int *margc, const char *key)
+static char **__add_arg(bundle *kb, char **argv, int *margc, const char *key)
 {
        const char *str = NULL;
        const char **str_array = NULL;
@@ -523,9 +513,9 @@ static char **__add_arg(bundle * kb, char **argv, int *margc, const char *key)
        int i;
        char **new_argv = NULL;
 
-       if (bundle_get_type(kb, key) & BUNDLE_TYPE_ARRAY)
+       if (bundle_get_type(kb, key) & BUNDLE_TYPE_ARRAY) {
                str_array = bundle_get_str_array(kb, key, &len);
-       else {
+       else {
                str = bundle_get_val(kb, key);
                if (str) {
                        str_array = &str;
@@ -535,7 +525,7 @@ static char **__add_arg(bundle * kb, char **argv, int *margc, const char *key)
 
        if (str_array) {
                if (strncmp(key, DLP_K_DEBUG_ARG, strlen(key)) == 0
-                               || strncmp(key, DLP_K_VALGRIND_ARG, strlen(key)) == 0) {
+                       || strncmp(key, DLP_K_VALGRIND_ARG, strlen(key)) == 0) {
                        new_argv = (char **)realloc(argv,
                                        sizeof(char *) * (*margc + len + 2));
                        if (new_argv == NULL) {
@@ -579,7 +569,7 @@ static char **__add_arg(bundle * kb, char **argv, int *margc, const char *key)
                *margc += len;
        } else {
                if (strncmp(key, DLP_K_DEBUG_ARG, strlen(key)) == 0
-                               || strncmp(key, DLP_K_VALGRIND_ARG, strlen(key)) == 0) {
+                       || strncmp(key, DLP_K_VALGRIND_ARG, strlen(key)) == 0) {
                        new_argv = (char **)realloc(argv,
                                        sizeof(char *) * (*margc + 2));
                        if (new_argv == NULL) {
@@ -611,18 +601,19 @@ char **_create_argc_argv(bundle *kb, int *margc, const char *app_path)
        const char *str;
        const char **str_array = NULL;
        int len = 0;
+       const char *path;
 
        argc = bundle_export_to_argv(kb, &argv);
-       if (argv)
+       if (argv) {
                argv[0] = strdup(app_path);
-       else {
+       else {
                _E("bundle_export_to_argv() is failed.");
                return NULL;
        }
 
-       if (bundle_get_type(kb, AUL_K_SDK) & BUNDLE_TYPE_ARRAY)
+       if (bundle_get_type(kb, AUL_K_SDK) & BUNDLE_TYPE_ARRAY) {
                str_array = bundle_get_str_array(kb, AUL_K_SDK, &len);
-       else {
+       else {
                str = bundle_get_val(kb, AUL_K_SDK);
                if (str) {
                        str_array = &str;
@@ -645,19 +636,46 @@ char **_create_argc_argv(bundle *kb, int *margc, const char *app_path)
                        else
                                argv[0] = strdup(buf);
 
+                       path = bundle_get_val(kb, DLP_K_GDBSERVER_PATH);
+                       if (path == NULL) {
+                               _E("Failed to get gdbserver path");
+                               if (argv[0])
+                                       free(argv[0]);
+                               bundle_free_exported_argv(argc, &argv);
+                               *margc = 0;
+                               return NULL;
+                       }
                        new_argv = __add_arg(kb, argv, &argc, DLP_K_DEBUG_ARG);
-                       new_argv[0] = strdup(PATH_GDBSERVER);
+                       new_argv[0] = strdup(path);
                        argv = new_argv;
                } else if (strncmp(str_array[i], SDK_VALGRIND, strlen(str_array[i])) == 0) {
+                       path = bundle_get_val(kb, DLP_K_VALGRIND_PATH);
+                       if (path == NULL) {
+                               _E("Failed to get valgrind path");
+                               if (argv[0])
+                                       free(argv[0]);
+                               bundle_free_exported_argv(argc, &argv);
+                               *margc = 0;
+                               return NULL;
+                       }
                        new_argv = __add_arg(kb, argv, &argc, DLP_K_VALGRIND_ARG);
-                       new_argv[0] = strdup(PATH_VALGRIND);
+                       new_argv[0] = strdup(path);
                        argv = new_argv;
                } else if (strncmp(str_array[i], SDK_UNIT_TEST, strlen(str_array[i])) == 0) {
                        new_argv = __add_arg(kb, argv, &argc, DLP_K_UNIT_TEST_ARG);
                        argv = new_argv;
                } else if (strncmp(str_array[i], SDK_ATTACH, strlen(str_array[i])) == 0) {
+                       path = bundle_get_val(kb, DLP_K_GDBSERVER_PATH);
+                       if (path == NULL) {
+                               _E("Failed to get gdbserver path");
+                               if (argv[0])
+                                       free(argv[0]);
+                               bundle_free_exported_argv(argc, &argv);
+                               *margc = 0;
+                               return NULL;
+                       }
                        new_argv = __add_arg(kb, argv, &argc, DLP_K_ATTACH_ARG);
-                       new_argv[0] = strdup(PATH_GDBSERVER);
+                       new_argv[0] = strdup(path);
                        argv = new_argv;
                }
 
@@ -684,53 +702,26 @@ static int __read_proc(const char *path, char *buf, int size)
        if (ret <= 0) {
                close(fd);
                return -1;
-       } else
+       } else {
                buf[ret] = 0;
+       }
 
        close(fd);
 
        return ret;
 }
 
-char *_proc_get_cmdline_bypid(int pid)
+int _proc_check_cmdline_bypid(int pid)
 {
        char buf[MAX_CMD_BUFSZ];
        int ret;
-       char* ptr = NULL;
 
        snprintf(buf, sizeof(buf), "/proc/%d/cmdline", pid);
        ret = __read_proc(buf, buf, sizeof(buf));
        if (ret <= 0)
-               return NULL;
-
-       /* support app launched by shell script*/
-       if (strncmp(buf, BINSH_NAME, BINSH_SIZE) == 0)
-               return strdup(&buf[BINSH_SIZE + 1]);
-       else if (strncmp(buf, VALGRIND_NAME, VALGRIND_SIZE) == 0) {
-               /* buf comes with double null-terminated string */
-               while (1) {
-                       while (*ptr)
-                               ptr++;
-                       ptr++;
-
-                       if (!(*ptr))
-                               break;
-
-                       /* ignore trailing "--" */
-                       if (strncmp(ptr, "-", 1) != 0)
-                               break;
-               }
+               return -1;
 
-               return strdup(ptr);
-       } else if (strncmp(buf, BASH_NAME, BASH_SIZE) == 0) {
-               if (strncmp(&buf[BASH_SIZE + 1], OPROFILE_NAME, OPROFILE_SIZE) == 0) {
-                       if (strncmp(&buf[BASH_SIZE + OPROFILE_SIZE + 2],
-                                               OPTION_VALGRIND_NAME, OPTION_VALGRIND_SIZE) == 0) {
-                               return strdup(&buf[BASH_SIZE + OPROFILE_SIZE +
-                                               OPTION_VALGRIND_SIZE + 3]);
-                       }
-               }
-       }
+       _D("cmdline: %s", buf);
 
-       return strdup(buf);
+       return 0;
 }
index c9c4cc4..10cc305 100644 (file)
@@ -61,9 +61,9 @@ static int __real_send(int clifd, int ret)
        return 0;
 }
 
-static void __send_result_to_caller(int clifd, int ret, const char* app_path)
+static void __send_result_to_caller(int clifd, int ret)
 {
-       char *cmdline;
+       int res;
 
        _W("Check app launching");
 
@@ -76,8 +76,8 @@ static void __send_result_to_caller(int clifd, int ret, const char* app_path)
                return;
        }
 
-       cmdline = _proc_get_cmdline_bypid(ret);
-       if (cmdline == NULL) {
+       res = _proc_check_cmdline_bypid(ret);
+       if (res < 0) {
                _E("The app process might be terminated while we are wating %d", ret);
                __real_send(clifd, -1); /* abnormally launched */
                return;
@@ -141,13 +141,15 @@ static int __prepare_exec(const char *appid, const char *app_path,
 
 static int __prepare_fork(bundle *kb, const char *appid)
 {
-       const char *str = NULL;
+       const char *str;
        const char **str_array = NULL;
        int len = 0;
 
-       if (bundle_get_type(kb, AUL_K_SDK) & BUNDLE_TYPE_ARRAY)
+       if (bundle_get_type(kb, AUL_K_SDK) & BUNDLE_TYPE_ARRAY) {
                str_array = bundle_get_str_array(kb, AUL_K_SDK, &len);
-       else {
+               if (str_array == NULL)
+                       return -1;
+       } else {
                str = bundle_get_val(kb, AUL_K_SDK);
                if (str) {
                        str_array = &str;
@@ -236,14 +238,14 @@ static void __real_launch(const char *app_path, bundle *kb)
        int i;
 
        app_argv = _create_argc_argv(kb, &app_argc, app_path);
+       if (app_argv == NULL)
+               return;
+
        for (i = 0; i < app_argc; i++)
                _D("input argument %d : %s##", i, app_argv[i]);
 
        PERF("setup argument done");
 
-       /* Temporary log: launch time checking */
-       LOG(LOG_DEBUG, "LAUNCH", "[%s:Platform:launchpad:done]", app_path);
-
        __normal_fork_exec(app_argc, app_argv);
 }
 
@@ -380,7 +382,7 @@ static gboolean __handle_launch_event(gpointer data)
        pid = __start_process(appinfo->appid, app_path, kb, appinfo);
 
 end:
-       __send_result_to_caller(clifd, pid, app_path);
+       __send_result_to_caller(clifd, pid);
 
        if (pid > 0)
                _send_app_launch_signal(pid, appinfo->appid);
@@ -539,3 +541,4 @@ int main(int argc, char **argv)
 
        return 0;
 }
+
index 5e9074e..ab18d35 100644 (file)
@@ -66,7 +66,7 @@ static int __check_pkginfo(const char *appid)
        char *storeclientid = NULL;
        pkgmgrinfo_pkginfo_h handle;
 
-       r = pkgmgrinfo_pkginfo_get_pkginfo(appid, &handle);
+       r = pkgmgrinfo_pkginfo_get_usr_pkginfo(appid, getuid(), &handle);
        if (r != PMINFO_R_OK) {
                _E("Failed to get pkginfo: %s", appid);
                return -1;
@@ -101,29 +101,24 @@ static int __check_pkginfo(const char *appid)
        return 0;
 }
 
-static int __prepare_gdbserver(const char *appid)
+static int __prepare_gdbserver(bundle *kb, const char *appid)
 {
        int r;
+       const char *path;
 
        r = __check_pkginfo(appid);
        if (r < 0)
                return -1;
 
-       if (_apply_smack_rules(LABEL_SDBD, appid, "w"))
-               _E("Failed to apply smack rule %s %s w", LABEL_SDBD, appid);
-
-       /* fixed debug-as fail issue (grant permission to use 10.0.2.2, 10.0.2.16) */
-       if (_apply_smack_rules(appid, LABEL_NETWORK, "rw"))
-               _E("Failed to apply smack rule %s %s rw", appid, LABEL_NETWORK);
-
-       if (_apply_smack_rules(LABEL_NETWORK, appid, "w"))
-               _E("Failed to apply smack rule %s %s w", LABEL_NETWORK, appid);
+       path = bundle_get_val(kb, DLP_K_GDBSERVER_PATH);
+       if (path == NULL)
+               return -1;
 
-       r = dlp_chmod(PATH_GDBSERVER, S_IRUSR | S_IWUSR
+       r = dlp_chmod(path, S_IRUSR | S_IWUSR
                        | S_IXUSR | S_IRGRP | S_IXGRP
                        | S_IROTH | S_IXOTH, 1);
        if (r != 0)
-               _W("Failed to set 755: %s", PATH_GDBSERVER);
+               _W("Failed to set 755: %s", path);
 
        gdbserver = true;
 
@@ -137,9 +132,11 @@ static int __prepare_valgrind(bundle *kb)
        int len = 0;
        int i;
 
-       if (bundle_get_type(kb, DLP_K_VALGRIND_ARG) & BUNDLE_TYPE_ARRAY)
+       if (bundle_get_type(kb, DLP_K_VALGRIND_ARG) & BUNDLE_TYPE_ARRAY) {
                str_arr = bundle_get_str_array(kb, DLP_K_VALGRIND_ARG, &len);
-       else {
+               if (str_arr == NULL)
+                       return -1;
+       } else {
                str = bundle_get_val(kb, DLP_K_VALGRIND_ARG);
                if (str) {
                        str_arr = &str;
@@ -200,7 +197,7 @@ int _prepare_debug_tool(bundle *kb, const char *appid,
 
                if (strncmp(str_arr[i], SDK_DEBUG, strlen(SDK_DEBUG)) == 0
                        || strncmp(str_arr[i], SDK_ATTACH, strlen(SDK_ATTACH)) == 0) {
-                       if (__prepare_gdbserver(appid) < 0)
+                       if (__prepare_gdbserver(kb, appid) < 0)
                                return -1;
                } else if (strncmp(str_arr[i], SDK_VALGRIND, strlen(SDK_VALGRIND)) == 0) {
                        __prepare_valgrind(kb);