Fix application web tct failure 69/49669/1 accepted/tizen/mobile/20151017.101303 accepted/tizen/tv/20151017.101522 accepted/tizen/wearable/20151017.101950 submit/tizen/20151017.083624
authorJiwoong Im <jiwoong.im@samsung.com>
Sat, 17 Oct 2015 08:12:17 +0000 (17:12 +0900)
committerJiwoong Im <jiwoong.im@samsung.com>
Sat, 17 Oct 2015 08:12:17 +0000 (17:12 +0900)
- open appsvd db correctly in readonly/readwrite case.
- add caller appid to bundle in start app.

Change-Id: Ic2026eceb291736b0bb4c3601de2743805b7cfc1
Signed-off-by: Jiwoong Im <jiwoong.im@samsung.com>
am_daemon/amd_launch.c
include/aul_svc_db.h
src/service.c
src/service_db.c

index e660af8..c42a499 100644 (file)
@@ -528,7 +528,7 @@ int _start_app(char* appid, bundle* kb, int cmd, int caller_pid, uid_t caller_ui
        const char *hwacc;
        const char *permission;
        const char *preload;
-       char caller_appid[256];
+       char *caller_appid;
        pkgmgrinfo_cert_compare_result_type_e compare_result;
        int delay_reply = 0;
        int pad_pid = LAUNCHPAD_PID;
@@ -545,13 +545,15 @@ int _start_app(char* appid, bundle* kb, int cmd, int caller_pid, uid_t caller_ui
        if (cmd == APP_START_RES)
                bundle_add(kb, AUL_K_WAIT_RESULT, "1");
 
-       /* FIXME: get caller appid by process label */
-#if 0
-       ret = aul_app_get_appid_bypid(caller_pid, caller_appid, sizeof(caller_appid));
-       if(ret == 0) {
+       caller_appid = _status_app_get_appid_bypid(caller_pid);
+       if (caller_appid != NULL) {
                bundle_add(kb, AUL_K_CALLER_APPID, caller_appid);
+       } else {
+               caller_appid = _status_app_get_appid_bypid(getpgid(caller_pid));
+               if (caller_appid != NULL) {
+                       bundle_add(kb, AUL_K_CALLER_APPID, caller_appid);
+               }
        }
-#endif
 
        ai = appinfo_find(caller_uid, appid);
        if (ai == NULL) {
index 3494673..c72a06f 100755 (executable)
@@ -19,6 +19,7 @@
 #define __AUL_SVC_DB_H__
 
 #include <sqlite3.h>
+#include <stdbool.h>
 #include <time.h>
 #include <sys/types.h>
 #include <glib.h>
@@ -36,7 +37,7 @@ extern "C"
 {
 #endif
 
-int _svc_db_check_perm(uid_t uid);
+int _svc_db_check_perm(uid_t uid, bool readonly);
 int _svc_db_add_app(const char *op, const char *mime_type, const char *uri, const char *pkg_name, uid_t uid);
 int _svc_db_delete_with_pkgname(const char *pkg_name, uid_t uid);
 char* _svc_db_get_app(const char *op, const char *mime_type, const char *uri, uid_t uid);
index 3efd355..8d455c6 100755 (executable)
@@ -780,7 +780,7 @@ SLPAPI int aul_svc_run_service_for_uid(bundle *b, int request_code,
        SECURE_LOGD("op - %s / mime - %s / scheme - %s\n", info.op, info.origin_mime,
                    info.scheme);
 
-       ret = _svc_db_check_perm(uid);
+       ret = _svc_db_check_perm(uid, true);
        if (ret < 0) {
                _E("permission error : %d", ret);
                ret = AUL_SVC_RET_EILLACC;
@@ -1065,7 +1065,7 @@ SLPAPI int aul_svc_get_all_defapps_for_uid(aul_svc_info_iter_fn iter_fn,
        GSList *iter = NULL;
 
 
-       ret = _svc_db_check_perm(uid);
+       ret = _svc_db_check_perm(uid, true);
        if (ret < 0) {
                _E("permission error : %d", ret);
                return AUL_SVC_RET_EILLACC;
@@ -1202,7 +1202,7 @@ SLPAPI int aul_svc_set_defapp_for_uid(const char *op, const char *mime_type,
        if (op == NULL || defapp == NULL)
                return AUL_SVC_RET_EINVAL;
 
-       ret = _svc_db_check_perm(uid);
+       ret = _svc_db_check_perm(uid, false);
        if (ret < 0) {
                _E("permission error : %d", ret);
                return AUL_SVC_RET_EILLACC;
@@ -1228,7 +1228,7 @@ SLPAPI int aul_svc_unset_defapp_for_uid(const char *defapp, uid_t uid)
        if (defapp == NULL)
                return AUL_SVC_RET_EINVAL;
 
-       ret = _svc_db_check_perm(uid);
+       ret = _svc_db_check_perm(uid, false);
        if (ret < 0) {
                _E("permission error : %d", ret);
                return AUL_SVC_RET_EILLACC;
@@ -1251,7 +1251,7 @@ SLPAPI int aul_svc_unset_all_defapps_for_uid(uid_t uid)
 {
        int ret;
 
-       ret = _svc_db_check_perm(uid);
+       ret = _svc_db_check_perm(uid, false);
        if (ret < 0) {
                _E("permission error : %d", ret);
                return AUL_SVC_RET_EILLACC;
@@ -1274,7 +1274,7 @@ SLPAPI int aul_svc_is_defapp_for_uid(const char *pkg_name, uid_t uid)
 {
        int ret;
 
-       ret = _svc_db_check_perm(uid);
+       ret = _svc_db_check_perm(uid, true);
        if (ret < 0) {
                _E("permission error : %d", ret);
                return AUL_SVC_RET_EILLACC;
index f5d64e2..e4c0766 100755 (executable)
@@ -176,7 +176,7 @@ static char *__get_app_info_db(uid_t uid)
  * db initialize
  */
 
-static int __init(uid_t uid)
+static int __init(uid_t uid, bool readonly)
 {
        int rc;
 
@@ -185,7 +185,8 @@ static int __init(uid_t uid)
                return 0;
        }
 
-       rc = sqlite3_open(__get_svc_db(uid), &svc_db);
+       rc = sqlite3_open_v2(__get_svc_db(uid), &svc_db,
+                       readonly ? SQLITE_OPEN_READONLY : SQLITE_OPEN_READWRITE, NULL);
        if (rc) {
                _E("Can't open database: %d, %s, extended: %d", rc, sqlite3_errmsg(svc_db),
                                sqlite3_extended_errcode(svc_db));
@@ -326,13 +327,13 @@ static int __fini(void)
        return 0;
 }
 
-int _svc_db_check_perm(uid_t uid)
+int _svc_db_check_perm(uid_t uid, bool readonly)
 {
        int ret = 0;
-       if (__init(uid) < 0)
+       if (__init(uid, readonly) < 0)
                return -1;
 
-       ret = access(__get_svc_db(uid), R_OK | W_OK);
+       ret = access(__get_svc_db(uid), readonly ? R_OK : (R_OK | W_OK));
        return ret;
 }
 
@@ -346,7 +347,7 @@ int _svc_db_add_app(const char *op, const char *mime_type, const char *uri,
        sqlite3_stmt* p_statement;
        int result;
 
-       if (__init(uid) < 0)
+       if (__init(uid, false) < 0)
                return -1;
 
        if (op == NULL )
@@ -404,7 +405,7 @@ int _svc_db_delete_with_pkgname(const char *pkg_name, uid_t uid)
                return -1;
        }
 
-       if (__init(uid) < 0)
+       if (__init(uid, false) < 0)
                return -1;
 
        result = sqlite3_prepare_v2(svc_db, delete_query, strlen(delete_query),
@@ -439,7 +440,7 @@ int _svc_db_delete_all(uid_t uid)
        char query[QUERY_MAX_LEN];
        char* error_message = NULL;
 
-       if (__init(uid) < 0)
+       if (__init(uid, false) < 0)
                return -1;
 
        snprintf(query, QUERY_MAX_LEN, "delete from appsvc;");
@@ -466,7 +467,7 @@ int _svc_db_is_defapp(const char *pkg_name, uid_t uid)
                return 0;
        }
 
-       if (__init(uid) < 0)
+       if (__init(uid, true) < 0)
                return 0;
 
        snprintf(query, QUERY_MAX_LEN,
@@ -516,7 +517,7 @@ char* _svc_db_get_app(const char *op, const char *mime_type, const char *uri,
        else
                strncpy(u, uri, URI_MAX_LEN - 1);
 
-       if (__init(uid) < 0)
+       if (__init(uid, true) < 0)
                return NULL;
 
 
@@ -733,7 +734,7 @@ int _svc_db_get_list_with_all_defapps(GSList **pkg_list, uid_t uid)
        char *pkgname = NULL;
        int found;
 
-       if (__init(uid) < 0)
+       if (__init(uid, true) < 0)
                return -1;
 
        snprintf(query, QUERY_MAX_LEN, "select pkg_name from appsvc");