X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fail_desktop.c;h=48f7d3d46e8f6aa49a422d608632f2590b2447b1;hb=e8545f8a12867e1b9191c69180669e03e4f0a3b7;hp=6fd4fa1cef02d4db111c7625fe0769215b94e53d;hpb=067d80d54e49361d813f50c8d4fbf11704ed03a2;p=platform%2Fcore%2Fappfw%2Fail.git diff --git a/src/ail_desktop.c b/src/ail_desktop.c index 6fd4fa1..48f7d3d 100755 --- a/src/ail_desktop.c +++ b/src/ail_desktop.c @@ -22,6 +22,7 @@ #define _GNU_SOURCE +#include #include #include #include @@ -29,19 +30,21 @@ #include #include #include +#include #include #include #include +#include +#include #include "ail_private.h" #include "ail_db.h" #include "ail_sql.h" #include "ail.h" -#define OPT_DESKTOP_DIRECTORY "/opt/share/applications" -#define USR_DESKTOP_DIRECTORY "/usr/share/applications" -#define BUFSZE 4096 +#define BUFSIZE 4096 +#define GLOBAL_USER tzplatform_getuid(TZ_SYS_GLOBALAPP_USER) #define whitespace(c) (((c) == ' ') || ((c) == '\t')) #define argsdelimiter " \t" @@ -63,7 +66,7 @@ typedef enum { struct entry_parser { const char *field; - ail_error_e (*value_cb)(void *data, char *tag, char *value); + ail_error_e (*value_cb)(void *data, char *tag, char *value, uid_t uid); }; inline static char *_ltrim(char *str) @@ -128,7 +131,7 @@ typedef struct { -static ail_error_e _read_exec(void *data, char *tag, char *value) +static ail_error_e _read_exec(void *data, char *tag, char *value, uid_t uid) { desktop_info_s *info = data; char *token_exe_path; @@ -164,7 +167,7 @@ static ail_error_e _read_exec(void *data, char *tag, char *value) -static ail_error_e _read_name(void *data, char *tag, char *value) +static ail_error_e _read_name(void *data, char *tag, char *value, uid_t uid) { desktop_info_s *info = data; @@ -205,7 +208,7 @@ static ail_error_e _read_name(void *data, char *tag, char *value) -static ail_error_e _read_type(void *data, char *tag, char *value) +static ail_error_e _read_type(void *data, char *tag, char *value, uid_t uid) { desktop_info_s *info = data; @@ -241,7 +244,7 @@ _get_package_from_icon(char* icon) static char* -_get_icon_with_path(char* icon) +_get_icon_with_path(char* icon, uid_t uid) { retv_if(!icon, NULL); @@ -250,6 +253,7 @@ _get_icon_with_path(char* icon) char* theme = NULL; char* icon_with_path = NULL; int len; + char *app_path = NULL; package = _get_package_from_icon(icon); retv_if(!package, NULL); @@ -271,44 +275,28 @@ _get_icon_with_path(char* icon) len = (0x01 << 7) + strlen(icon) + strlen(package) + strlen(theme); icon_with_path = malloc(len); if(icon_with_path == NULL) { - _E("(icon_with_path == NULL) return\n"); + _E("icon_with_path == NULL\n"); free(package); free(theme); return NULL; } memset(icon_with_path, 0, len); - - sqlite3_snprintf( len, icon_with_path,"/opt/share/icons/%q/small/%q", theme, icon); - do { - if (access(icon_with_path, R_OK) == 0) break; - sqlite3_snprintf( len, icon_with_path,"/usr/share/icons/%q/small/%q", theme, icon); - if (access(icon_with_path, R_OK) == 0) break; - _D("cannot find icon %s", icon_with_path); - sqlite3_snprintf( len, icon_with_path, "/opt/share/icons/default/small/%q", icon); - if (access(icon_with_path, R_OK) == 0) break; - sqlite3_snprintf( len, icon_with_path, "/usr/share/icons/default/small/%q", icon); - if (access(icon_with_path, R_OK) == 0) break; - - #if 1 /* this will be remove when finish the work for moving icon path */ - _E("icon file must be moved to %s", icon_with_path); - sqlite3_snprintf( len, icon_with_path, "/opt/apps/%q/res/icons/%q/small/%q", package, theme, icon); - if (access(icon_with_path, R_OK) == 0) break; - sqlite3_snprintf( len, icon_with_path, "/usr/apps/%q/res/icons/%q/small/%q", package, theme, icon); - if (access(icon_with_path, R_OK) == 0) break; - _D("cannot find icon %s", icon_with_path); - sqlite3_snprintf( len, icon_with_path, "/opt/apps/%q/res/icons/default/small/%q", package, icon); - if (access(icon_with_path, R_OK) == 0) break; - sqlite3_snprintf( len, icon_with_path, "/usr/apps/%q/res/icons/default/small/%q", package, icon); - if (access(icon_with_path, R_OK) == 0) break; - #endif - } while (0); - + if (uid != GLOBAL_USER) + sqlite3_snprintf( len, icon_with_path, "%s%q", ail_get_icon_path(uid), icon); + else + sqlite3_snprintf( len, icon_with_path, "%s/%q/small/%q", ail_get_icon_path(GLOBAL_USER), theme, icon); + + if (access (icon_with_path, F_OK)) { + app_path = tzplatform_getenv(TZ_SYS_RW_APP); + if (app_path) + sqlite3_snprintf( len, icon_with_path, "%s/%q/res/icons/%q/small/%q",app_path, package, theme, icon); + if (access (icon_with_path, F_OK)) + _E("Cannot find icon path"); + } free(theme); free(package); - - _D("Icon path : %s ---> %s", icon, icon_with_path); - + _D("Icon path : %s", icon_with_path); return icon_with_path; } else { char* confirmed_icon = NULL; @@ -320,14 +308,14 @@ _get_icon_with_path(char* icon) } -static ail_error_e _read_icon(void *data, char *tag, char *value) +static ail_error_e _read_icon(void *data, char *tag, char *value, uid_t uid) { desktop_info_s *info = data; retv_if(!data, AIL_ERROR_INVALID_PARAMETER); retv_if(!value, AIL_ERROR_INVALID_PARAMETER); - info->icon = _get_icon_with_path(value); + info->icon = _get_icon_with_path(value, uid); retv_if (!info->icon, AIL_ERROR_OUT_OF_MEMORY); @@ -336,7 +324,7 @@ static ail_error_e _read_icon(void *data, char *tag, char *value) -static ail_error_e _read_categories(void *data, char *tag, char *value) +static ail_error_e _read_categories(void *data, char *tag, char *value, uid_t uid) { desktop_info_s *info = data; @@ -351,7 +339,7 @@ static ail_error_e _read_categories(void *data, char *tag, char *value) -static ail_error_e _read_version(void *data, char *tag, char *value) +static ail_error_e _read_version(void *data, char *tag, char *value, uid_t uid) { desktop_info_s *info = data; @@ -366,7 +354,7 @@ static ail_error_e _read_version(void *data, char *tag, char *value) -static ail_error_e _read_mimetype(void *data, char *tag, char *value) +static ail_error_e _read_mimetype(void *data, char *tag, char *value, uid_t uid) { desktop_info_s *info = data; int size, total_len = 0; @@ -428,7 +416,7 @@ static ail_error_e _read_mimetype(void *data, char *tag, char *value) -static ail_error_e _read_nodisplay(void *data, char *tag, char *value) +static ail_error_e _read_nodisplay(void *data, char *tag, char *value, uid_t uid) { desktop_info_s* info = data; @@ -442,7 +430,7 @@ static ail_error_e _read_nodisplay(void *data, char *tag, char *value) -static ail_error_e _read_x_slp_service(void *data, char *tag, char *value) +static ail_error_e _read_x_slp_service(void *data, char *tag, char *value, uid_t uid) { desktop_info_s *info = data; @@ -457,7 +445,7 @@ static ail_error_e _read_x_slp_service(void *data, char *tag, char *value) -static ail_error_e _read_x_slp_packagetype(void *data, char *tag, char *value) +static ail_error_e _read_x_slp_packagetype(void *data, char *tag, char *value, uid_t uid) { desktop_info_s *info = data; @@ -472,7 +460,7 @@ static ail_error_e _read_x_slp_packagetype(void *data, char *tag, char *value) -static ail_error_e _read_x_slp_packagecategories(void *data, char *tag, char *value) +static ail_error_e _read_x_slp_packagecategories(void *data, char *tag, char *value, uid_t uid) { desktop_info_s *info = data; @@ -487,7 +475,7 @@ static ail_error_e _read_x_slp_packagecategories(void *data, char *tag, char *va -static ail_error_e _read_x_slp_packageid(void *data, char *tag, char *value) +static ail_error_e _read_x_slp_packageid(void *data, char *tag, char *value, uid_t uid) { desktop_info_s *info = data; @@ -500,7 +488,7 @@ static ail_error_e _read_x_slp_packageid(void *data, char *tag, char *value) return AIL_ERROR_OK; } -static ail_error_e _read_x_slp_submodemainid(void *data, char *tag, char *value) +static ail_error_e _read_x_slp_submodemainid(void *data, char *tag, char *value, uid_t uid) { desktop_info_s *info = data; @@ -513,7 +501,7 @@ static ail_error_e _read_x_slp_submodemainid(void *data, char *tag, char *value) return AIL_ERROR_OK; } -static ail_error_e _read_x_slp_installedstorage(void *data, char *tag, char *value) +static ail_error_e _read_x_slp_installedstorage(void *data, char *tag, char *value, uid_t uid) { desktop_info_s *info = data; @@ -526,7 +514,7 @@ static ail_error_e _read_x_slp_installedstorage(void *data, char *tag, char *val return AIL_ERROR_OK; } -static ail_error_e _read_x_slp_uri(void *data, char *tag, char *value) +static ail_error_e _read_x_slp_uri(void *data, char *tag, char *value, uid_t uid) { desktop_info_s *info = data; @@ -541,7 +529,7 @@ static ail_error_e _read_x_slp_uri(void *data, char *tag, char *value) -static ail_error_e _read_x_slp_svc(void *data, char *tag, char *value) +static ail_error_e _read_x_slp_svc(void *data, char *tag, char *value, uid_t uid) { desktop_info_s *info = data; @@ -556,7 +544,7 @@ static ail_error_e _read_x_slp_svc(void *data, char *tag, char *value) -static ail_error_e _read_x_slp_taskmanage(void *data, char *tag, char *value) +static ail_error_e _read_x_slp_taskmanage(void *data, char *tag, char *value, uid_t uid) { desktop_info_s *info = data; @@ -570,7 +558,7 @@ static ail_error_e _read_x_slp_taskmanage(void *data, char *tag, char *value) -static ail_error_e _read_x_slp_multiple(void *data, char *tag, char *value) +static ail_error_e _read_x_slp_multiple(void *data, char *tag, char *value, uid_t uid) { desktop_info_s *info = data; @@ -584,7 +572,7 @@ static ail_error_e _read_x_slp_multiple(void *data, char *tag, char *value) -static ail_error_e _read_x_slp_removable(void *data, char *tag, char *value) +static ail_error_e _read_x_slp_removable(void *data, char *tag, char *value, uid_t uid) { desktop_info_s *info = data; @@ -597,7 +585,7 @@ static ail_error_e _read_x_slp_removable(void *data, char *tag, char *value) } -static ail_error_e _read_x_slp_submode(void *data, char *tag, char *value) +static ail_error_e _read_x_slp_submode(void *data, char *tag, char *value, uid_t uid) { desktop_info_s *info = data; @@ -609,7 +597,7 @@ static ail_error_e _read_x_slp_submode(void *data, char *tag, char *value) return AIL_ERROR_OK; } -static ail_error_e _read_x_slp_appid(void *data, char *tag, char *value) +static ail_error_e _read_x_slp_appid(void *data, char *tag, char *value, uid_t uid) { desktop_info_s *info = data; @@ -623,7 +611,7 @@ static ail_error_e _read_x_slp_appid(void *data, char *tag, char *value) } -static ail_error_e _read_x_slp_pkgid(void *data, char *tag, char *value) +static ail_error_e _read_x_slp_pkgid(void *data, char *tag, char *value, uid_t uid) { desktop_info_s *info = data; @@ -637,7 +625,7 @@ static ail_error_e _read_x_slp_pkgid(void *data, char *tag, char *value) } -static ail_error_e _read_x_slp_domain(void *data, char *tag, char *value) +static ail_error_e _read_x_slp_domain(void *data, char *tag, char *value, uid_t uid) { desktop_info_s *info = data; @@ -651,7 +639,7 @@ static ail_error_e _read_x_slp_domain(void *data, char *tag, char *value) } -static ail_error_e _read_x_slp_enabled(void *data, char *tag, char *value) +static ail_error_e _read_x_slp_enabled(void *data, char *tag, char *value, uid_t uid) { desktop_info_s *info = data; @@ -774,12 +762,15 @@ static struct entry_parser entry_parsers[] = { /* Utility functions */ -static int _count_all(void) +static int _count_all(uid_t uid) { ail_error_e ret; int count; - ret = ail_filter_count_appinfo(NULL, &count); + if (uid != GLOBAL_USER) + ret = ail_filter_count_usr_appinfo(NULL, &count, uid); + else + ret = ail_filter_count_appinfo(NULL, &count); if(ret != AIL_ERROR_OK) { _E("cannot count appinfo"); count = -1; @@ -790,25 +781,23 @@ static int _count_all(void) return count; } - - -char *_pkgname_to_desktop(const char *package) +char *_pkgname_to_desktop(const char *package, uid_t uid) { char *desktop; + char *desktop_path; int size; retv_if(!package, NULL); - size = strlen(OPT_DESKTOP_DIRECTORY) + strlen(package) + 10; + desktop_path = ail_get_desktop_path(uid); + + size = strlen(desktop_path) + strlen(package) + 10; desktop = malloc(size); retv_if(!desktop, NULL); - snprintf(desktop, size, OPT_DESKTOP_DIRECTORY"/%s.desktop", package); - - if (access(desktop, R_OK) == 0) - return desktop; + snprintf(desktop, size, "%s/%s.desktop", desktop_path, package); - snprintf(desktop, size, USR_DESKTOP_DIRECTORY"/%s.desktop", package); + _D("uid: %d / desktop: [%s]\n", uid, desktop); return desktop; } @@ -857,7 +846,7 @@ static inline int _len_local_info(desktop_info_s* info) } -static inline int _insert_local_info(desktop_info_s* info) +static inline int _insert_local_info(desktop_info_s* info, uid_t uid) { int len_query = SQL_INSERT_LOCALNAME_STR_LEN; int nb_locale_args; @@ -881,7 +870,10 @@ static inline int _insert_local_info(desktop_info_s* info) strcat(query, SQL_LOCALNAME_TRIPLET_STR); do { - ret = db_prepare_rw(query, &stmt); + if(uid != GLOBAL_USER) + ret = db_prepare_rw(query, &stmt); + else + ret = db_prepare_globalrw(query, &stmt); if (ret < 0) break; ret = _bind_local_info(info, stmt); @@ -943,13 +935,13 @@ int __is_ail_initdb(void) return 0; } - - /* Manipulating desktop_info functions */ -static ail_error_e _init_desktop_info(desktop_info_s *info, const char *package) +static ail_error_e _init_desktop_info(desktop_info_s *info, const char *package, uid_t uid) { static int is_initdb = -1; + _D("package - [%s].", package); + if(is_initdb == -1) is_initdb = __is_ail_initdb(); @@ -982,15 +974,17 @@ static ail_error_e _init_desktop_info(desktop_info_s *info, const char *package) info->x_slp_enabled = 1; - info->desktop = _pkgname_to_desktop(package); + info->desktop = _pkgname_to_desktop(package, uid); retv_if(!info->desktop, AIL_ERROR_FAIL); + _D("desktop - [%s].", info->desktop); + return AIL_ERROR_OK; } -static ail_error_e _read_desktop_info(desktop_info_s* info) +static ail_error_e _read_desktop_info(desktop_info_s* info,uid_t uid) { char *line = NULL; FILE *fp; @@ -1033,7 +1027,7 @@ static ail_error_e _read_desktop_info(desktop_info_s* info) for (idx = 0; entry_parsers[idx].field; idx ++) { if (!g_ascii_strcasecmp(entry_parsers[idx].field, field_name) && entry_parsers[idx].value_cb) { - if (entry_parsers[idx].value_cb(info, tag, tmp) != AIL_ERROR_OK) { + if (entry_parsers[idx].value_cb(info, tag, tmp,uid) != AIL_ERROR_OK) { _E("field - [%s] is wrong.", field_name); } break; @@ -1124,7 +1118,7 @@ NEXT: } -static ail_error_e _load_desktop_info(desktop_info_s* info) +static ail_error_e _load_desktop_info(desktop_info_s* info, uid_t uid) { ail_error_e ret; char query[AIL_SQL_QUERY_MAX_LEN]; @@ -1138,10 +1132,11 @@ static ail_error_e _load_desktop_info(desktop_info_s* info) snprintf(query, sizeof(query), "SELECT %s FROM %s WHERE %s",SQL_FLD_APP_INFO, SQL_TBL_APP_INFO, w); do { - ret = db_open(DB_OPEN_RO); + ret = db_open(DB_OPEN_RO, uid); if (ret < 0) break; - +//is_admin ret = db_prepare(query, &stmt); + //ret = db_prepare_globalro(query, &stmt); if (ret < 0) break; ret = db_step(stmt); @@ -1229,65 +1224,7 @@ static ail_error_e _modify_desktop_info_str(desktop_info_s* info, } - - -static ail_error_e _create_table(void) -{ - int i; - ail_error_e ret; - const char *tbls[3] = { - "CREATE TABLE app_info " - "(package TEXT PRIMARY KEY, " - "exec TEXT DEFAULT 'No Exec', " - "name TEXT DEFAULT 'No Name', " - "type TEXT DEFAULT 'Application', " - "icon TEXT DEFAULT 'No Icon', " - "categories TEXT, " - "version TEXT, " - "mimetype TEXT, " - "x_slp_service TEXT, " - "x_slp_packagetype TEXT, " - "x_slp_packagecategories TEXT, " - "x_slp_packageid TEXT, " - "x_slp_uri TEXT, " - "x_slp_svc TEXT, " - "x_slp_exe_path TEXT, " - "x_slp_appid TEXT, " - "x_slp_pkgid TEXT, " - "x_slp_domain TEXT, " - "x_slp_submodemainid TEXT, " - "x_slp_installedstorage TEXT, " - "x_slp_baselayoutwidth INTEGER DEFAULT 0, " - "x_slp_installedtime INTEGER DEFAULT 0, " - "nodisplay INTEGER DEFAULT 0, " - "x_slp_taskmanage INTEGER DEFAULT 1, " - "x_slp_multiple INTEGER DEFAULT 0, " - "x_slp_removable INTEGER DEFAULT 1, " - "x_slp_ishorizontalscale INTEGER DEFAULT 0, " - "x_slp_enabled INTEGER DEFAULT 1, " - "x_slp_submode INTEGER DEFAULT 0, " - "desktop TEXT UNIQUE NOT NULL);", - "CREATE TABLE localname (package TEXT NOT NULL, " - "locale TEXT NOT NULL, " - "name TEXT NOT NULL, " - "x_slp_pkgid TEXT NOT NULL, PRIMARY KEY (package, locale));", - - NULL - }; - - ret = db_open(DB_OPEN_RW); - retv_if(ret != AIL_ERROR_OK, AIL_ERROR_DB_FAILED); - - for (i = 0; tbls[i] != NULL; i++) { - ret = db_exec(tbls[i]); - retv_if(ret != AIL_ERROR_OK, AIL_ERROR_DB_FAILED); - } - - return AIL_ERROR_OK; -} - - -static inline void _insert_localname(gpointer data, gpointer user_data) +static inline void _insert_localname(gpointer data, gpointer user_data, uid_t uid) { char query[512]; @@ -1297,11 +1234,16 @@ static inline void _insert_localname(gpointer data, gpointer user_data) sqlite3_snprintf(sizeof(query), query, "insert into localname (package, locale, name, x_slp_pkgid) " "values ('%q', '%q', '%q', '%q');", info->package, item->locale, item->name, info->x_slp_pkgid); - if (db_exec(query) < 0) - _E("Failed to insert local name of package[%s]",info->package); + if(uid != GLOBAL_USER) { + if (db_exec_usr_rw(query) < 0) + _E("Failed to insert local name of package[%s]",info->package); + } else { + if (db_exec_glo_rw(query) < 0) + _E("Failed to insert local name of package[%s]",info->package); + } } -static ail_error_e _insert_desktop_info(desktop_info_s *info) +static ail_error_e _insert_desktop_info(desktop_info_s *info, uid_t uid) { char *query; int len; @@ -1381,19 +1323,22 @@ static ail_error_e _insert_desktop_info(desktop_info_s *info) info->desktop ); - ret = db_open(DB_OPEN_RW); + ret = db_open(DB_OPEN_RW, uid); if(ret != AIL_ERROR_OK) { _E("(tmp == NULL) return\n"); free(query); return AIL_ERROR_DB_FAILED; } - - ret = db_exec(query); + if (uid != GLOBAL_USER) + ret = db_exec_usr_rw(query); + else + ret = db_exec_glo_rw(query); + free(query); retv_if(ret != AIL_ERROR_OK, AIL_ERROR_DB_FAILED); if (info->localname) - _insert_local_info(info); + _insert_local_info(info, uid); _D("Add (%s).", query); @@ -1402,14 +1347,14 @@ static ail_error_e _insert_desktop_info(desktop_info_s *info) -static ail_error_e _update_desktop_info(desktop_info_s *info) +static ail_error_e _update_desktop_info(desktop_info_s *info, uid_t uid) { char *query; int len; retv_if (NULL == info, AIL_ERROR_INVALID_PARAMETER); - if (db_open(DB_OPEN_RW) < 0) { + if (db_open(DB_OPEN_RW, uid) < 0) { return AIL_ERROR_DB_FAILED; } @@ -1479,20 +1424,31 @@ static ail_error_e _update_desktop_info(desktop_info_s *info) info->desktop, info->package); - if (db_exec(query) < 0) { - free (query); - return AIL_ERROR_DB_FAILED; + if(uid != GLOBAL_USER) { + if (db_exec_usr_rw(query) < 0) { + free (query); + return AIL_ERROR_DB_FAILED; + } + } else { + if (db_exec_glo_rw(query) < 0) { + free (query); + return AIL_ERROR_DB_FAILED; + } } - snprintf(query, len, "delete from localname where package = '%s'", info->package); - - if (db_exec(query) < 0) { - free (query); - return AIL_ERROR_DB_FAILED; + if (uid != GLOBAL_USER) { + if (db_exec_usr_rw(query) < 0) { + free (query); + return AIL_ERROR_DB_FAILED; + } + } else { + if (db_exec_glo_rw(query) < 0) { + free (query); + return AIL_ERROR_DB_FAILED; + } } - if (info->localname) - _insert_local_info(info); + _insert_local_info(info, uid); _D("Update (%s).", info->package); @@ -1503,14 +1459,14 @@ static ail_error_e _update_desktop_info(desktop_info_s *info) -static ail_error_e _remove_package(const char* package) +static ail_error_e _remove_package(const char* package, uid_t uid) { char *query; int size; retv_if(!package, AIL_ERROR_INVALID_PARAMETER); - if (db_open(DB_OPEN_RW) < 0) { + if (db_open(DB_OPEN_RW, uid) < 0) { return AIL_ERROR_DB_FAILED; } @@ -1520,33 +1476,45 @@ static ail_error_e _remove_package(const char* package) snprintf(query, size, "delete from app_info where package = '%s'", package); - if (db_exec(query) < 0) { - free(query); - return AIL_ERROR_DB_FAILED; + if(uid != GLOBAL_USER) { + if (db_exec_usr_rw(query) < 0) { + free(query); + return AIL_ERROR_DB_FAILED; + } + } else { + if (db_exec_glo_rw(query) < 0) { + free(query); + return AIL_ERROR_DB_FAILED; + } } - snprintf(query, size, "delete from localname where package = '%s'", package); _D("query=%s",query); - - if (db_exec(query) < 0) { - free(query); - return AIL_ERROR_DB_FAILED; + + if(uid != GLOBAL_USER) { + if (db_exec_usr_rw(query) < 0) { + free(query); + return AIL_ERROR_DB_FAILED; + } + } else { + if (db_exec_glo_rw(query) < 0) { + free(query); + return AIL_ERROR_DB_FAILED; + } } - _D("Remove (%s).", package); free(query); return AIL_ERROR_OK; } -static ail_error_e _clean_pkgid_data(const char* pkgid) +static ail_error_e _clean_pkgid_data(const char* pkgid, uid_t uid) { char *query; int size; retv_if(!pkgid, AIL_ERROR_INVALID_PARAMETER); - if (db_open(DB_OPEN_RW) < 0) { + if (db_open(DB_OPEN_RW, uid) ){ return AIL_ERROR_DB_FAILED; } @@ -1556,26 +1524,37 @@ static ail_error_e _clean_pkgid_data(const char* pkgid) snprintf(query, size, "delete from app_info where x_slp_pkgid = '%s'", pkgid); - if (db_exec(query) < 0) { - free(query); - return AIL_ERROR_DB_FAILED; + if(uid != GLOBAL_USER) { + if (db_exec_usr_rw(query) < 0) { + free(query); + return AIL_ERROR_DB_FAILED; + } + } else { + if (db_exec_glo_rw(query) < 0) { + free(query); + return AIL_ERROR_DB_FAILED; + } } - snprintf(query, size, "delete from localname where x_slp_pkgid = '%s'", pkgid); _D("query=%s",query); - if (db_exec(query) < 0) { - free(query); - return AIL_ERROR_DB_FAILED; + if(uid != GLOBAL_USER) { + if (db_exec_usr_rw(query) < 0) { + free(query); + return AIL_ERROR_DB_FAILED; + } + } else { + if (db_exec_glo_rw(query) < 0) { + free(query); + return AIL_ERROR_DB_FAILED; + } } - _D("Clean pkgid data (%s).", pkgid); free(query); return AIL_ERROR_OK; } - static ail_error_e _send_db_done_noti(noti_type type, const char *package) { char *type_string, *noti_string; @@ -1597,11 +1576,11 @@ static ail_error_e _send_db_done_noti(noti_type type, const char *package) return AIL_ERROR_FAIL; } - size = strlen(package) + 8; - noti_string = calloc(1, size); + size = snprintf(NULL, 0, "%s:%s:%u", type_string, package, getuid()); + noti_string = (char*) calloc(size + 1, sizeof(char)); retv_if(!noti_string, AIL_ERROR_OUT_OF_MEMORY); - snprintf(noti_string, size, "%s:%s", type_string, package); + snprintf(noti_string, size + 1, "%s:%s:%u", type_string, package, getuid()); vconf_set_str(VCONFKEY_AIL_INFO_STATE, noti_string); vconf_set_str(VCONFKEY_MENUSCREEN_DESKTOP, noti_string); // duplicate, will be removed _D("Noti : %s", noti_string); @@ -1657,7 +1636,7 @@ static void _fini_desktop_info(desktop_info_s *info) static int __is_authorized() { uid_t uid = getuid(); - if ((uid_t) 0 == uid ) + if ((uid_t) GLOBAL_USER == uid ) return 1; else return 0; @@ -1665,33 +1644,20 @@ static int __is_authorized() /* Public functions */ -EXPORT_API ail_error_e ail_desktop_add(const char *appid) +EXPORT_API ail_error_e ail_usr_desktop_add(const char *appid, uid_t uid) { desktop_info_s info = {0,}; ail_error_e ret; - int count; retv_if(!appid, AIL_ERROR_INVALID_PARAMETER); - if (!__is_authorized()) { - _E("You are not an authorized user on adding!\n"); - return -1; - } - - count = _count_all(); - if (count <= 0) { - ret = _create_table(); - if (ret != AIL_ERROR_OK) { - _D("Cannot create a table. Maybe there is already a table."); - } - } - ret = _init_desktop_info(&info, appid); + ret = _init_desktop_info(&info, appid, uid); retv_if(ret != AIL_ERROR_OK, AIL_ERROR_FAIL); - ret = _read_desktop_info(&info); + ret = _read_desktop_info(&info,uid); retv_if(ret != AIL_ERROR_OK, AIL_ERROR_FAIL); - ret = _insert_desktop_info(&info); + ret = _insert_desktop_info(&info, uid); retv_if(ret != AIL_ERROR_OK, AIL_ERROR_FAIL); ret = _send_db_done_noti(NOTI_ADD, appid); @@ -1702,26 +1668,25 @@ EXPORT_API ail_error_e ail_desktop_add(const char *appid) return AIL_ERROR_OK; } +EXPORT_API ail_error_e ail_desktop_add(const char *appid) +{ + return ail_usr_desktop_add(appid,GLOBAL_USER); +} - -EXPORT_API ail_error_e ail_desktop_update(const char *appid) +EXPORT_API ail_error_e ail_usr_desktop_update(const char *appid, uid_t uid) { desktop_info_s info = {0,}; ail_error_e ret; retv_if(!appid, AIL_ERROR_INVALID_PARAMETER); - if (!__is_authorized()) { - _E("You are not an authorized user on updating!\n"); - return -1; - } - ret = _init_desktop_info(&info, appid); + ret = _init_desktop_info(&info, appid, uid); retv_if(ret != AIL_ERROR_OK, AIL_ERROR_FAIL); - ret = _read_desktop_info(&info); + ret = _read_desktop_info(&info,uid); retv_if(ret != AIL_ERROR_OK, AIL_ERROR_FAIL); - ret = _update_desktop_info(&info); + ret = _update_desktop_info(&info, uid); retv_if(ret != AIL_ERROR_OK, AIL_ERROR_FAIL); ret = _send_db_done_noti(NOTI_UPDATE, appid); @@ -1732,19 +1697,19 @@ EXPORT_API ail_error_e ail_desktop_update(const char *appid) return AIL_ERROR_OK; } +EXPORT_API ail_error_e ail_desktop_update(const char *appid) +{ + return ail_usr_desktop_update(appid,GLOBAL_USER); +} -EXPORT_API ail_error_e ail_desktop_remove(const char *appid) +EXPORT_API ail_error_e ail_usr_desktop_remove(const char *appid, uid_t uid) { ail_error_e ret; retv_if(!appid, AIL_ERROR_INVALID_PARAMETER); - if (!__is_authorized()) { - _E("You are not an authorized user on removing!\n"); - return -1; - } - ret = _remove_package(appid); + ret = _remove_package(appid, uid); retv_if(ret != AIL_ERROR_OK, AIL_ERROR_FAIL); ret = _send_db_done_noti(NOTI_REMOVE, appid); @@ -1753,52 +1718,45 @@ EXPORT_API ail_error_e ail_desktop_remove(const char *appid) return AIL_ERROR_OK; } -EXPORT_API ail_error_e ail_desktop_clean(const char *pkgid) +EXPORT_API ail_error_e ail_desktop_remove(const char *appid) +{ + return ail_usr_desktop_remove(appid, GLOBAL_USER); +} + + +EXPORT_API ail_error_e ail_usr_desktop_clean(const char *pkgid, uid_t uid) { ail_error_e ret; retv_if(!pkgid, AIL_ERROR_INVALID_PARAMETER); - if (!__is_authorized()) { - _E("You are not an authorized user on removing!\n"); - return -1; - } _D("ail_desktop_clean=%s",pkgid); - ret = _clean_pkgid_data(pkgid); + ret = _clean_pkgid_data(pkgid, uid); retv_if(ret != AIL_ERROR_OK, AIL_ERROR_FAIL); return AIL_ERROR_OK; } +EXPORT_API ail_error_e ail_desktop_clean(const char *pkgid) +{ + return ail_usr_desktop_clean(pkgid, GLOBAL_USER); +} -EXPORT_API ail_error_e ail_desktop_fota(const char *appid) +EXPORT_API ail_error_e ail_usr_desktop_fota(const char *appid, uid_t uid) { desktop_info_s info = {0,}; ail_error_e ret; - int count; retv_if(!appid, AIL_ERROR_INVALID_PARAMETER); - if (!__is_authorized()) { - _E("You are not an authorized user on adding!\n"); - return -1; - } - - count = _count_all(); - if (count <= 0) { - ret = _create_table(); - if (ret != AIL_ERROR_OK) { - _D("Cannot create a table. Maybe there is already a table."); - } - } - ret = _init_desktop_info(&info, appid); + ret = _init_desktop_info(&info, appid, uid); retv_if(ret != AIL_ERROR_OK, AIL_ERROR_FAIL); - ret = _read_desktop_info(&info); + ret = _read_desktop_info(&info,uid); retv_if(ret != AIL_ERROR_OK, AIL_ERROR_FAIL); - ret = _insert_desktop_info(&info); + ret = _insert_desktop_info(&info, uid); retv_if(ret != AIL_ERROR_OK, AIL_ERROR_FAIL); _fini_desktop_info(&info); @@ -1806,10 +1764,16 @@ EXPORT_API ail_error_e ail_desktop_fota(const char *appid) return AIL_ERROR_OK; } -EXPORT_API ail_error_e ail_desktop_appinfo_modify_bool(const char *appid, +EXPORT_API ail_error_e ail_desktop_fota(const char *appid) +{ + return ail_usr_desktop_fota(appid, GLOBAL_USER); +} + + +EXPORT_API ail_error_e ail_desktop_appinfo_modify_usr_bool(const char *appid, const char *property, bool value, - bool broadcast) + bool broadcast, uid_t uid) { desktop_info_s info = {0,}; ail_error_e ret; @@ -1819,16 +1783,16 @@ EXPORT_API ail_error_e ail_desktop_appinfo_modify_bool(const char *appid, retv_if(strcmp(property, AIL_PROP_X_SLP_ENABLED_BOOL), AIL_ERROR_INVALID_PARAMETER); - ret = _init_desktop_info(&info, appid); + ret = _init_desktop_info(&info, appid, uid); retv_if(ret != AIL_ERROR_OK, AIL_ERROR_FAIL); - ret = _load_desktop_info(&info); + ret = _load_desktop_info(&info, uid); retv_if(ret != AIL_ERROR_OK, AIL_ERROR_FAIL); ret = _modify_desktop_info_bool(&info, property, value); retv_if(ret != AIL_ERROR_OK, AIL_ERROR_FAIL); - ret = _update_desktop_info(&info); + ret = _update_desktop_info(&info, uid); retv_if(ret != AIL_ERROR_OK, AIL_ERROR_FAIL); if (broadcast) { @@ -1841,8 +1805,17 @@ EXPORT_API ail_error_e ail_desktop_appinfo_modify_bool(const char *appid, return AIL_ERROR_OK; } +EXPORT_API ail_error_e ail_desktop_appinfo_modify_bool(const char *appid, + const char *property, + bool value, + bool broadcast) +{ + return ail_desktop_appinfo_modify_usr_bool(appid, property, value, broadcast, + GLOBAL_USER); +} -EXPORT_API ail_error_e ail_desktop_appinfo_modify_str(const char *appid, + +EXPORT_API ail_error_e ail_desktop_appinfo_modify_usr_str(const char *appid, uid_t uid, const char *property, const char *value, bool broadcast) @@ -1852,10 +1825,10 @@ EXPORT_API ail_error_e ail_desktop_appinfo_modify_str(const char *appid, retv_if(!appid, AIL_ERROR_INVALID_PARAMETER); - ret = _init_desktop_info(&info, appid); + ret = _init_desktop_info(&info, appid, uid); retv_if(ret != AIL_ERROR_OK, AIL_ERROR_FAIL); - ret = _load_desktop_info(&info); + ret = _load_desktop_info(&info, uid); retv_if(ret != AIL_ERROR_OK, AIL_ERROR_FAIL); _D("info.name [%s], value [%s]", info.name, value); @@ -1863,7 +1836,7 @@ EXPORT_API ail_error_e ail_desktop_appinfo_modify_str(const char *appid, retv_if(ret != AIL_ERROR_OK, AIL_ERROR_FAIL); _D("info.name [%s], value [%s]", info.name, value); - ret = _update_desktop_info(&info); + ret = _update_desktop_info(&info, uid); retv_if(ret != AIL_ERROR_OK, AIL_ERROR_FAIL); if (broadcast) { @@ -1876,4 +1849,13 @@ EXPORT_API ail_error_e ail_desktop_appinfo_modify_str(const char *appid, return AIL_ERROR_OK; } +EXPORT_API ail_error_e ail_desktop_appinfo_modify_str(const char *appid, + const char *property, + const char *value, + bool broadcast) +{ + return ail_desktop_appinfo_modify_usr_str(appid, GLOBAL_USER, property, value, + broadcast); +} + // End of File