Merge "Add robustness to mkdir" into tizen
[platform/core/appfw/ail.git] / src / ail_db.c
index 30fb8e4..462c545 100755 (executable)
@@ -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;
 }
 
@@ -327,16 +335,16 @@ ail_error_e db_open(db_open_mode mode, uid_t uid)
        char *db = ail_get_app_DB(uid);
        char *global_db = ail_get_app_DB(GLOBAL_USER);
 
-       if (db, F_OK) {
+       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(db, 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", db);