#include "badge_ipc.h"
#include "badge_db.h"
#include "badge_private.h"
+#include "badge_setting_service.h"
#define BADGE_PKGNAME_LEN 512
#define BADGE_TABLE_NAME "badge_data"
int ret = BADGE_ERROR_NONE;
int result = BADGE_ERROR_NONE;
char *sqlbuf = NULL;
+ bool is_existed = false;
if (!badge || !badge->pkgname || !badge->writable_pkgs)
return BADGE_ERROR_INVALID_PARAMETER;
+ ret = badge_setting_is_existed_appid(badge->pkgname, &is_existed, uid);
+ if (ret == BADGE_ERROR_NONE && is_existed == false) {
+ result = BADGE_ERROR_INVALID_PACKAGE;
+ goto return_close_db;
+ } else if (ret != BADGE_ERROR_NONE) {
+ ERR("Failed to check existed appid [%d]", ret);
+ result = ret;
+ goto return_close_db;
+ }
+
sqlret = db_util_open(BADGE_DB_PATH, &db, 0);
if (sqlret != SQLITE_OK || !db) {
/* LCOV_EXCL_START */
return ret;
}
+EXPORT_API int badge_setting_is_existed_appid(const char *appid, bool *is_existed, uid_t uid)
+{
+ int ret = BADGE_ERROR_NONE;
+ int sqlret;
+ sqlite3 *db = NULL;
+ sqlite3_stmt *stmt = NULL;
+ char *sqlbuf = NULL;
+ int count = 0;
+
+ if (appid == NULL || is_existed == NULL) {
+ ERR("Invalid parameter");
+ return BADGE_ERROR_INVALID_PARAMETER;
+ }
+
+ sqlret = db_util_open(BADGE_DB_PATH, &db, 0);
+ if (sqlret != SQLITE_OK || !db) {
+ ERR("Failed to db_util_open [%d]", sqlret);
+ if (sqlret == SQLITE_PERM)
+ return BADGE_ERROR_PERMISSION_DENIED;
+ return BADGE_ERROR_FROM_DB;
+ }
+
+ sqlbuf = sqlite3_mprintf("SELECT count(*) FROM %q WHERE " \
+ "appid = %Q AND uid = %d",
+ BADGE_SETTING_DB_TABLE, appid, uid);
+ if (!sqlbuf) {
+ ERR("Failed to alloc query");
+ ret = BADGE_ERROR_OUT_OF_MEMORY;
+ goto out;
+ }
+
+ sqlret = sqlite3_prepare_v2(db, sqlbuf, -1, &stmt, NULL);
+ if (sqlret != SQLITE_OK) {
+ ERR("sqlite3_prepare_v2 failed [%d][%s]", sqlret,
+ sqlite3_errmsg(db));
+ ret = BADGE_ERROR_FROM_DB;
+ goto out;
+ }
+
+ sqlret = sqlite3_step(stmt);
+ if (sqlret == SQLITE_ROW)
+ count = sqlite3_column_int(stmt, 0);
+
+ if (count > 0)
+ *is_existed = true;
+ else
+ *is_existed = false;
+
+out:
+ if (sqlbuf)
+ sqlite3_free(sqlbuf);
+ if (stmt)
+ sqlite3_finalize(stmt);
+ if (db) {
+ sqlret = db_util_close(db);
+ if (sqlret != SQLITE_OK)
+ WARN("Failed to db_util_close [%d]", sqlret);
+ }
+
+ return ret;
+}
+
static bool _is_package_in_setting_table(sqlite3 *db, const char *pkgname, const char* appid, uid_t uid)
{
sqlite3_stmt *db_statement = NULL;