X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=tool%2Fsrc%2Fsyncdb.c;h=231de08eb772e24d2d6626692b7c922405f26dc6;hb=refs%2Ftags%2Faccepted%2Ftizen%2Fwearable%2F20151113.060758;hp=247602b7f2bd127208145f02feeb991038dd57da;hpb=9241f15a201da5ea3e02b95f15325f7aa83f64bf;p=platform%2Fcore%2Fappfw%2Fail.git diff --git a/tool/src/syncdb.c b/tool/src/syncdb.c index 247602b..231de08 100644 --- a/tool/src/syncdb.c +++ b/tool/src/syncdb.c @@ -21,14 +21,15 @@ * */ - - +#define _GNU_SOURCE #include #include #include #include #include #include +#include +#include #include #include @@ -40,45 +41,20 @@ #ifdef _E #undef _E #endif -#define _E(fmt, arg...) fprintf(stderr, "[AIL_INITDB][E][%s,%d] "fmt"\n", __FUNCTION__, __LINE__, ##arg); +#define _E(fmt, arg...) fprintf(stderr, "[AIL_INITDB][E][%s,%d] "fmt"\n", __FUNCTION__, __LINE__, ##arg) #ifdef _D #undef _D #endif -#define _D(fmt, arg...) fprintf(stderr, "[AIL_INITDB][D][%s,%d] "fmt"\n", __FUNCTION__, __LINE__, ##arg); +#define _D(fmt, arg...) fprintf(stderr, "[AIL_INITDB][D][%s,%d] "fmt"\n", __FUNCTION__, __LINE__, ##arg) #define SET_DEFAULT_LABEL(x) \ - if(smack_setlabel((x), "*", SMACK_LABEL_ACCESS)) _E("failed chsmack -a \"*\" %s", x) \ - else _D("chsmack -a \"*\" %s", x) - -static int syncdb_count_app(void) -{ - ail_filter_h filter; - ail_error_e ret; - int total = 0; - - ret = ail_filter_new(&filter); - if (ret != AIL_ERROR_OK) { - return -1; - } - - ret = ail_filter_add_bool(filter, AIL_PROP_NODISPLAY_BOOL, false); - if (ret != AIL_ERROR_OK) { - ail_filter_destroy(filter); - return -1; - } - ret = ail_filter_count_appinfo(filter, &total); - if (ret != AIL_ERROR_OK) { - ail_filter_destroy(filter); - return -1; - } - - ail_filter_destroy(filter); - - return total; -} - - + do { \ + if (smack_setlabel((x), "*", SMACK_LABEL_ACCESS)) \ + _E("failed chsmack -a \"*\" %s", x); \ + else \ + _D("chsmack -a \"*\" %s", x); \ + } while (0) char* _desktop_to_package(const char* desktop) { @@ -90,7 +66,7 @@ char* _desktop_to_package(const char* desktop) retv_if(!package, NULL); tmp = strrchr(package, '.'); - if(tmp == NULL) { + if (tmp == NULL) { _E("[%s] is not a desktop file", package); free(package); return NULL; @@ -107,18 +83,16 @@ char* _desktop_to_package(const char* desktop) return package; } - - int syncdb_load_directory(const char *directory) { DIR *dir; struct dirent entry, *result; - int len, ret; + int ret; char buf[BUFSZE]; int total_cnt = 0; int ok_cnt = 0; - // desktop file + /* desktop file */ dir = opendir(directory); if (!dir) { if (strerror_r(errno, buf, sizeof(buf)) == 0) @@ -126,7 +100,6 @@ int syncdb_load_directory(const char *directory) return AIL_ERROR_FAIL; } - len = strlen(directory) + 1; _D("Loading desktop files from %s", directory); for (ret = readdir_r(dir, &entry, &result); @@ -142,11 +115,10 @@ int syncdb_load_directory(const char *directory) continue; } - if (ail_desktop_add(package) != AIL_ERROR_OK) { + if (ail_desktop_add(package) != AIL_ERROR_OK) _E("Failed to add a package[%s]", package); - } else { + else ok_cnt++; - } free(package); } @@ -156,50 +128,12 @@ int syncdb_load_directory(const char *directory) return AIL_ERROR_OK; } - - -static int syncdb_change_perm(const char *db_file) -{ - char buf[BUFSZE]; - char journal_file[BUFSZE]; - char *files[3]; - int ret, i; - - files[0] = (char *)db_file; - files[1] = journal_file; - files[2] = NULL; - - retv_if(!db_file, AIL_ERROR_FAIL); - - snprintf(journal_file, sizeof(journal_file), "%s%s", db_file, "-journal"); - - for (i = 0; files[i]; i++) { - ret = chown(files[i], GLOBAL_USER, OWNER_ROOT); - if (ret == -1) { - strerror_r(errno, buf, sizeof(buf)); - _E("FAIL : chown %s %d.%d, because %s", db_file, OWNER_ROOT, OWNER_ROOT, buf); - return AIL_ERROR_FAIL; - } - - ret = chmod(files[i], S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); - if (ret == -1) { - strerror_r(errno, buf, sizeof(buf)); - _E("FAIL : chmod %s 0664, because %s", db_file, buf); - return AIL_ERROR_FAIL; - } - } - - return AIL_ERROR_OK; -} - - -static int __is_authorized() +static int __is_authorized(void) { /* ail_init db should be called by as root privilege. */ - uid_t uid = getuid(); - uid_t euid = geteuid(); - //euid need to be root to allow smack label changes during initialization + /* euid need to be root to allow smack label changes during initialization */ + /* uid_t euid = geteuid(); */ if ((uid_t) OWNER_ROOT == uid) return 1; else @@ -248,26 +182,26 @@ int main(int argc, char *argv[]) _D("You are not root user!\n"); return -1; } + if (access(APP_INFO_DB_FILE, F_OK)) { fprintf(stderr, "Application database %s is missing, please use ail_createdb to create one before\n", APP_INFO_DB_FILE); return AIL_ERROR_FAIL; } + ret = setenv("AIL_INITDB", "1", 1); _D("AIL_INITDB : %d", ret); - setresuid(GLOBAL_USER, GLOBAL_USER, OWNER_ROOT); + + if (setresuid(GLOBAL_USER, GLOBAL_USER, OWNER_ROOT) != 0) + _E("setresuid() is failed."); if (db_open(DB_OPEN_RW, GLOBAL_USER) != AIL_ERROR_OK) { _E("Fail to create system databases"); return AIL_ERROR_DB_FAILED; } + ret = syncdb_load_directory(USR_DESKTOP_DIRECTORY); - if (ret == AIL_ERROR_FAIL) { + if (ret == AIL_ERROR_FAIL) _E("cannot load usr desktop directory."); - } return AIL_ERROR_OK; } - - - -// END