X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fail_db.c;h=462c54525edb1b7c6e449672e38b17e7cb20469a;hb=4df6f91071ef4ddc2918cbe7679c787b835e8c7a;hp=bfa3ced3c182e777b90eb8caef6e1078db72098c;hpb=3edbd0fad8dae864d431f7cd410c41ce3bd0833a;p=platform%2Fcore%2Fappfw%2Fail.git diff --git a/src/ail_db.c b/src/ail_db.c index bfa3ced..462c545 100755 --- a/src/ail_db.c +++ b/src/ail_db.c @@ -146,9 +146,10 @@ char* ail_get_icon_path(uid_t uid) } else { result = tzplatform_mkpath(TZ_SYS_RW_ICONS, "/"); } - int ret; - mkdir(result, S_IRWXU | S_IRGRP | S_IXGRP | S_IXOTH); - if (getuid() == OWNER_ROOT) { + int ret = mkdir(result, S_IRWXU | S_IRGRP | S_IXGRP | S_IXOTH); + if (ret == -1 && errno != EEXIST) { + _E("FAIL : to create directory %s %d", result, errno); + } else if (getuid() == OWNER_ROOT) { ret = chown(result, uid, ((grpinfo)?grpinfo->gr_gid:0)); SET_SMACK_LABEL(result,uid) if (ret == -1) { @@ -160,10 +161,19 @@ char* ail_get_icon_path(uid_t uid) return result; } -static char* ail_get_app_DB(uid_t uid) +char* ail_get_app_DB_journal(uid_t uid) +{ + + char *app_path = ail_get_app_DB(uid); + char* result = NULL; + + asprintf(&result, "%s-journal", app_path); + return result; +} + +char* ail_get_app_DB(uid_t uid) { char *result = NULL; - char *journal = NULL; struct group *grpinfo = NULL; char *dir = NULL; struct passwd *userinfo = getpwuid(uid); @@ -188,10 +198,8 @@ static char* ail_get_app_DB(uid_t uid) return NULL; } asprintf(&result, "%s/.applications/dbspace/.app_info.db", userinfo->pw_dir); - asprintf(&journal, "%s/.applications/dbspace/.app_info.db-journal", userinfo->pw_dir); } else { result = strdup(APP_INFO_DB_FILE); - journal = strdup(APP_INFO_DB_FILE_JOURNAL); } char *temp = strdup(result); dir = strrchr(temp, '/'); @@ -201,10 +209,10 @@ static char* ail_get_app_DB(uid_t uid) return result; } *dir = 0; - if ((uid != GLOBAL_USER)||((uid == GLOBAL_USER)&& (geteuid() == 0 ))) { - int ret; - mkdir(temp, S_IRWXU | S_IRGRP | S_IXGRP | S_IXOTH); - if (getuid() == OWNER_ROOT) { + int ret = mkdir(temp, S_IRWXU | S_IRGRP | S_IXGRP | S_IXOTH); + if (ret == -1 && errno != EEXIST) { + _E("FAIL : to create directory %s %d", temp, errno); + } else if (getuid() == OWNER_ROOT) { ret = chown(temp, uid, ((grpinfo)?grpinfo->gr_gid:0)); SET_SMACK_LABEL(temp,uid) if (ret == -1) { @@ -212,13 +220,12 @@ static char* ail_get_app_DB(uid_t uid) strerror_r(errno, buf, sizeof(buf)); _E("FAIL : chown %s %d.%d, because %s", temp, uid, ((grpinfo)?grpinfo->gr_gid:0), buf); } - } - } + } free(temp); return result; } -char* al_get_desktop_path(uid_t uid) +char* ail_get_desktop_path(uid_t uid) { char *result = NULL; struct group *grpinfo = NULL; @@ -248,17 +255,18 @@ char* al_get_desktop_path(uid_t uid) } else { result = tzplatform_mkpath(TZ_SYS_RW_DESKTOP_APP, "/"); } - if ((uid != GLOBAL_USER)||((uid == GLOBAL_USER)&& (geteuid() == 0 ))) { - int ret; - mkdir(result, S_IRWXU | S_IRGRP | S_IXGRP | S_IXOTH); - ret = chown(result, uid, ((grpinfo)?grpinfo->gr_gid:0)); - SET_SMACK_LABEL(result,uid) - if (ret == -1) { - char buf[BUFSIZE]; - strerror_r(errno, buf, sizeof(buf)); - _E("FAIL : chown %s %d.%d, because %s", result, uid, ((grpinfo)?grpinfo->gr_gid:0), buf); + int ret = mkdir(result, S_IRWXU | S_IRGRP | S_IXGRP | S_IXOTH); + if (ret == -1 && errno != EEXIST) { + _E("FAIL : to create directory %s %d", result, errno); + } else if (getuid() == OWNER_ROOT) { + ret = chown(result, uid, ((grpinfo)?grpinfo->gr_gid:0)); + SET_SMACK_LABEL(result,uid) + if (ret == -1) { + char buf[BUFSIZE]; + strerror_r(errno, buf, sizeof(buf)); + _E("FAIL : chown %s %d.%d, because %s", result, uid, ((grpinfo)?grpinfo->gr_gid:0), buf); + } } - } return result; } @@ -324,19 +332,22 @@ ail_error_e db_open(db_open_mode mode, uid_t uid) NULL }; - if (access(ail_get_app_DB(uid), F_OK)) { - if (AIL_ERROR_OK == db_util_open_with_options(ail_get_app_DB(uid), &dbInit, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL)) + char *db = ail_get_app_DB(uid); + char *global_db = ail_get_app_DB(GLOBAL_USER); + + if (access(db, F_OK)) { + if (AIL_ERROR_OK == db_util_open_with_options(db, &dbInit, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL)) { for (i = 0; tbls[i] != NULL; i++) { ret = do_db_exec(tbls[i], dbInit); retv_if(ret != AIL_ERROR_OK, AIL_ERROR_DB_FAILED); } - if(AIL_ERROR_OK != ail_db_change_perm(ail_get_app_DB(uid), uid)) { + if(getuid() == OWNER_ROOT && AIL_ERROR_OK != ail_db_change_perm(db, uid)) { _E("Failed to change permission\n"); - } + } } else { dbInit = NULL; - _E("Failed to create table %s\n", ail_get_app_DB(uid)); + _E("Failed to create table %s\n", db); } } if(dbInit) { @@ -347,48 +358,57 @@ ail_error_e db_open(db_open_mode mode, uid_t uid) if(mode & DB_OPEN_RO) { if(uid != GLOBAL_USER) { if (!db_info.dbUserro) { - db_util_open_with_options(ail_get_app_DB(uid), &db_info.dbUserro, SQLITE_OPEN_READONLY, NULL); + db_util_open_with_options(db, &db_info.dbUserro, SQLITE_OPEN_READONLY, NULL); char query_attach[AIL_SQL_QUERY_MAX_LEN]; char query_view_app[AIL_SQL_QUERY_MAX_LEN]; char query_view_local[AIL_SQL_QUERY_MAX_LEN]; - snprintf(query_attach, AIL_SQL_QUERY_MAX_LEN, QUERY_ATTACH, ail_get_app_DB(GLOBAL_USER)); + snprintf(query_attach, AIL_SQL_QUERY_MAX_LEN, QUERY_ATTACH, global_db); if (db_exec_usr_ro(query_attach) < 0) { _D("executing query_attach : %s", query_attach ); - return AIL_ERROR_DB_FAILED; + goto error; } snprintf(query_view_app, AIL_SQL_QUERY_MAX_LEN, QUERY_CREATE_VIEW_APP); if (db_exec_usr_ro(query_view_app) < 0) { _D("executing query_attach : %s", query_view_app ); - return AIL_ERROR_DB_FAILED; + goto error; } snprintf(query_view_local, AIL_SQL_QUERY_MAX_LEN, QUERY_CREATE_VIEW_LOCAL); if (db_exec_usr_ro(query_view_local) < 0) { _D("executing query_attach : %s", query_view_local ); - return AIL_ERROR_DB_FAILED; + goto error; } } } else { if (!db_info.dbGlobalro) { - ret = db_util_open_with_options(ail_get_app_DB(GLOBAL_USER), &db_info.dbGlobalro, SQLITE_OPEN_READONLY, NULL); + ret = db_util_open_with_options(global_db, &db_info.dbGlobalro, SQLITE_OPEN_READONLY, NULL); retv_with_dbmsg_if(ret != SQLITE_OK, AIL_ERROR_DB_FAILED); } } - } + } if(mode & DB_OPEN_RW) { if(uid != GLOBAL_USER) { if(!db_info.dbUserrw){ - ret = db_util_open(ail_get_app_DB(uid), &db_info.dbUserrw, 0); + ret = db_util_open(db, &db_info.dbUserrw, 0); } } else { if(!db_info.dbGlobalrw){ - ret = db_util_open(ail_get_app_DB(GLOBAL_USER), &db_info.dbGlobalrw, 0); + ret = db_util_open(global_db, &db_info.dbGlobalrw, 0); } } retv_with_dbmsg_if(ret != SQLITE_OK, AIL_ERROR_DB_FAILED); } + free(global_db); + free(db); + return AIL_ERROR_OK; + +error: + free(global_db); + free(db); + + return AIL_ERROR_DB_FAILED; } @@ -544,7 +564,7 @@ ail_error_e db_finalize(sqlite3_stmt *stmt) ail_error_e do_db_exec(const char *query, sqlite3 * fileSQL) { int ret; - char *errmsg; + char *errmsg = NULL; retv_if(!query, AIL_ERROR_INVALID_PARAMETER); retv_if(!fileSQL, AIL_ERROR_DB_FAILED); @@ -553,7 +573,8 @@ ail_error_e do_db_exec(const char *query, sqlite3 * fileSQL) if (ret != SQLITE_OK) { _E("Cannot execute this query - %s. because %s", query, errmsg? errmsg:"uncatched error"); - sqlite3_free(errmsg); + if(errmsg) + sqlite3_free(errmsg); return AIL_ERROR_DB_FAILED; }