#include <stdbool.h>
#include <sqlite3.h>
+#include <sys/types.h>
#include <badge_error.h>
#ifdef __cplusplus
extern "C" {
#endif
-int badge_db_insert(const char *pkgname, const char *writable_pkg, const char *caller);
-int badge_db_delete(const char *pkgname, const char *caller_pkg);
-int badge_db_set_count(const char *pkgname, const char *caller_pkg, unsigned int count);
-int badge_db_get_count(const char *pkgname, unsigned int *count);
-int badge_db_set_display_option(const char *pkgname, const char *caller_pkg, unsigned int is_display);
-int badge_db_get_display_option(const char *pkgname, unsigned int *is_display);
+int badge_db_insert(const char *pkgname, const char *writable_pkg, const char *caller, uid_t uid);
+int badge_db_delete(const char *pkgname, const char *caller_pkg, uid_t uid);
+int badge_db_set_count(const char *pkgname, const char *caller_pkg, unsigned int count, uid_t uid);
+int badge_db_get_count(const char *pkgname, unsigned int *count, uid_t uid);
+int badge_db_set_display_option(const char *pkgname, unsigned int is_display, uid_t uid);
+int badge_db_get_display_option(const char *pkgname, unsigned int *is_display, uid_t uid);
int badge_db_exec(sqlite3 *db, const char *query, int *num_changes);
-int badge_db_get_list(GList **badge_list);
-int badge_db_is_existing(const char *pkgname, bool *existing);
+int badge_db_get_list(GList **badge_list, uid_t uid);
+int badge_db_is_existing(const char *pkgname, bool *existing, uid_t uid);
int badge_db_init();
#ifdef __cplusplus
#include <stdbool.h>
#include <stdarg.h>
#include <glib.h>
+#include <sys/types.h>
#include "badge_error.h"
#include "badge.h"
char *_badge_get_pkgname_by_pid(void);
-int _badge_is_existing(const char *pkgname, bool *existing);
+int _badge_is_existing(const char *pkgname, bool *existing, uid_t uid);
-int _badge_foreach_existed(badge_foreach_cb callback, void *data);
+int _badge_foreach_existed(badge_foreach_cb callback, void *data, uid_t uid);
-int _badge_get_list(GList **badge_list);
+int _badge_get_list(GList **badge_list, uid_t uid);
-int _badge_insert(badge_h *badge);
+int _badge_insert(badge_h *badge, uid_t uid);
-int _badge_remove(const char *caller, const char *pkgname);
+int _badge_remove(const char *caller, const char *pkgname, uid_t uid);
int _badge_set_count(const char *caller, const char *pkgname,
- unsigned int count);
+ unsigned int count, uid_t uid);
-int _badge_get_count(const char *pkgname, unsigned int *count);
+int _badge_get_count(const char *pkgname, unsigned int *count, uid_t uid);
-int _badge_set_display(const char *pkgname,
- unsigned int is_display);
+int _badge_set_display(const char *pkgname, unsigned int is_display, uid_t uid);
-int _badge_get_display(const char *pkgname, unsigned int *is_display);
+int _badge_get_display(const char *pkgname, unsigned int *is_display, uid_t uid);
-int _badge_register_changed_cb(badge_change_cb callback, void *data);
+int _badge_register_changed_cb(badge_change_cb callback, void *data, uid_t uid);
-int _badge_unregister_changed_cb(badge_change_cb callback);
+int _badge_unregister_changed_cb(badge_change_cb callback, uid_t uid);
int _badge_free(badge_h *badge);
const char *pkg1, va_list args);
void badge_changed_cb_call(unsigned int action, const char *pkgname,
- unsigned int count);
+ unsigned int count, uid_t uid);
/**
* @internal
*/
int badge_create(const char *pkgname, const char *writable_pkg);
+int badge_create_for_uid(const char *pkgname, const char *writable_pkg, uid_t uid);
+
+int badge_new_for_uid(const char *writable_app_id, uid_t uid);
+
+int badge_add_for_uid(const char *badge_app_id, uid_t uid);
+
+int badge_remove_for_uid(const char *app_id, uid_t uid);
+
+int badge_is_existing_for_uid(const char *app_id, bool *existing, uid_t uid);
+
+int badge_foreach_for_uid(badge_foreach_cb callback, void *user_data, uid_t uid);
+
+int badge_set_count_for_uid(const char *app_id, unsigned int count, uid_t uid);
+
+int badge_get_count_for_uid(const char *app_id, unsigned int *count, uid_t uid);
+
+int badge_set_display_for_uid(const char *app_id, unsigned int is_display, uid_t uid);
+
+int badge_get_display_for_uid(const char *app_id, unsigned int *is_display, uid_t uid);
+
+int badge_register_changed_cb_for_uid(badge_change_cb callback, void *data, uid_t uid);
+
+int badge_unregister_changed_cb_for_uid(badge_change_cb callback, uid_t uid);
+
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
#define __BADGE_IPC_H__
#include <badge.h>
+#include <sys/types.h>
#define BADGE_ADDR "/tmp/.badge.service"
struct packet;
-int badge_ipc_monitor_init(void);
+int badge_ipc_monitor_init(uid_t uid);
int badge_ipc_monitor_fini(void);
-int badge_ipc_request_insert(const char *pkgname, const char *writable_pkg, const char *caller);
-int badge_ipc_request_delete(const char *pkgname, const char *caller);
-int badge_ipc_request_set_count(const char *pkgname, const char *caller, int count);
-int badge_ipc_request_get_count(const char *pkgname, unsigned int *count);
-int badge_ipc_request_set_display(const char *pkgname, const char *caller, unsigned int display_option);
-int badge_ipc_request_get_display(const char *pkgname, unsigned int *is_display);
+int badge_ipc_request_insert(const char *pkgname, const char *writable_pkg, const char *caller, uid_t uid);
+int badge_ipc_request_delete(const char *pkgname, const char *caller, uid_t uid);
+int badge_ipc_request_set_count(const char *pkgname, const char *caller, int count, uid_t uid);
+int badge_ipc_request_get_count(const char *pkgname, unsigned int *count, uid_t uid);
+int badge_ipc_request_set_display(const char *pkgname, const char *caller, unsigned int display_option, uid_t uid);
+int badge_ipc_request_get_display(const char *pkgname, unsigned int *is_display, uid_t uid);
int badge_ipc_is_master_ready(void);
int badge_ipc_add_deferred_task(void (*badge_add_deferred_task)(void *data), void *user_data);
int badge_ipc_del_deferred_task(void (*badge_add_deferred_task)(void *data));
-int badge_ipc_setting_property_set(const char *pkgname, const char *property, const char *value);
-int badge_ipc_setting_property_get(const char *pkgname, const char *property, char **value);
+int badge_ipc_setting_property_set(const char *pkgname, const char *property, const char *value, uid_t uid);
+int badge_ipc_setting_property_get(const char *pkgname, const char *property, char **value, uid_t uid);
-int badge_ipc_request_get_list(badge_foreach_cb callback, void *data);
-int badge_ipc_request_is_existing(const char *pkgname, bool *existing);
+int badge_ipc_request_get_list(badge_foreach_cb callback, void *data, uid_t uid);
+int badge_ipc_request_is_existing(const char *pkgname, bool *existing, uid_t uid);
#ifdef __cplusplus
}
#define __BADGE_SETTING_H__
#include <stdbool.h>
+#include <sys/types.h>
#include <badge_error.h>
#ifdef __cplusplus
*/
int badge_setting_property_set(const char *pkgname, const char *property, const char *value);
+int badge_setting_property_set_for_uid(const char *pkgname, const char *property, const char *value, uid_t uid);
+
/**
* @brief This function gets badge property for designated package.
* @param[in] pkgname The name of designated package
*/
int badge_setting_property_get(const char *pkgname, const char *property, char **value);
+int badge_setting_property_get_for_uid(const char *pkgname, const char *property, char **value, uid_t uid);
#ifdef __cplusplus
}
#define __BADGE_SETTING_SERVICE_H__
#include <stdbool.h>
+#include <sys/types.h>
#include <badge_error.h>
#ifdef __cplusplus
extern "C" {
#endif
-int badge_setting_db_set(const char *pkgname, const char *property, const char *value);
-int badge_setting_db_get(const char *pkgname, const char *property, char **value);
+int badge_setting_db_set(const char *pkgname, const char *property, const char *value, uid_t uid);
+int badge_setting_db_get(const char *pkgname, const char *property, char **value, uid_t uid);
#ifdef __cplusplus
}
#include <stdlib.h>
#include <stdarg.h>
+#include <unistd.h>
#include <package_manager.h>
#include "badge.h"
EXPORT_API
int badge_create(const char *pkgname, const char *writable_pkg)
{
- char *caller = NULL;
- int err = BADGE_ERROR_NONE;
-
- if (pkgname == NULL)
- return BADGE_ERROR_INVALID_PARAMETER;
-
-
- caller = _badge_get_pkgname_by_pid();
- if (!caller) {
- ERR("fail to get caller pkgname");
- return BADGE_ERROR_PERMISSION_DENIED;
- }
-
- err = badge_ipc_request_insert(pkgname, writable_pkg, caller);
-
- free(caller);
- return err;
+ return badge_create_for_uid(pkgname, writable_pkg, getuid());
}
EXPORT_API
int badge_new(const char *writable_app_id)
{
- char *caller = NULL;
- int err = BADGE_ERROR_NONE;
-
- caller = _badge_get_pkgname_by_pid();
- if (!caller) {
- ERR("fail to get caller pkgname");
- return BADGE_ERROR_PERMISSION_DENIED;
- }
-
- err = badge_ipc_request_insert(caller, writable_app_id, caller);
-
- free(caller);
- return err;
+ return badge_new_for_uid(writable_app_id, getuid());
}
EXPORT_API
int badge_add(const char *badge_app_id)
{
- char *caller = NULL;
- int err = BADGE_ERROR_NONE;
-
- caller = _badge_get_pkgname_by_pid();
- if (!caller) {
- ERR("fail to get caller pkgname");
- return BADGE_ERROR_PERMISSION_DENIED;
- }
-
- if (badge_app_id == NULL) {
- badge_app_id = caller;
- } else {
- int pkgmgr_ret = PACKAGE_MANAGER_ERROR_NONE;
- package_manager_compare_result_type_e compare_result = PACKAGE_MANAGER_COMPARE_MISMATCH;
-
- pkgmgr_ret = package_manager_compare_app_cert_info(badge_app_id, caller, &compare_result);
-
- if (pkgmgr_ret != PACKAGE_MANAGER_ERROR_NONE || compare_result != PACKAGE_MANAGER_COMPARE_MATCH) {
- err = BADGE_ERROR_INVALID_PACKAGE;
- goto out;
- }
- }
-
- err = badge_ipc_request_insert(badge_app_id, caller, caller);
-
-out:
- if (caller)
- free(caller);
- return err;
+ return badge_add_for_uid(badge_app_id, getuid());
}
EXPORT_API
int badge_remove(const char *app_id)
{
- char *caller = NULL;
- int result = BADGE_ERROR_NONE;
-
- if (app_id == NULL)
- return BADGE_ERROR_INVALID_PARAMETER;
-
- caller = _badge_get_pkgname_by_pid();
- if (!caller) {
- ERR("fail to get caller pkgname");
- result = BADGE_ERROR_PERMISSION_DENIED;
- goto out;
- }
-
- result = badge_ipc_request_delete(app_id, caller);
-
-out:
- if (caller)
- free(caller);
- return result;
+ return badge_remove_for_uid(app_id, getuid());
}
EXPORT_API
int badge_is_existing(const char *app_id, bool *existing)
{
- return badge_ipc_request_is_existing(app_id, existing);
+ return badge_is_existing_for_uid(app_id, existing, getuid());
}
EXPORT_API
int badge_foreach(badge_foreach_cb callback, void *user_data)
{
- int result = BADGE_ERROR_NONE;
- result = badge_ipc_request_get_list(callback, user_data);
- if (result == BADGE_ERROR_IO_ERROR)
- result = BADGE_ERROR_FROM_DB;
- return result;
+ return badge_foreach_for_uid(callback, user_data, getuid());
}
EXPORT_API
int badge_set_count(const char *app_id, unsigned int count)
{
- char *caller = NULL;
- int result = BADGE_ERROR_NONE;
-
- if (app_id == NULL)
- return BADGE_ERROR_INVALID_PARAMETER;
-
- DBG("app_id %s, count %d", app_id, count);
-
- caller = _badge_get_pkgname_by_pid();
- if (!caller) {
- ERR("fail to get caller pkgname");
- result = BADGE_ERROR_PERMISSION_DENIED;
- goto out;
- }
-
- result = badge_ipc_request_set_count(app_id, caller, count);
-out:
- if (caller)
- free(caller);
- return result;
+ return badge_set_count_for_uid(app_id, count, getuid());
}
EXPORT_API
int badge_get_count(const char *app_id, unsigned int *count)
{
- int result = BADGE_ERROR_NONE;
- if (app_id == NULL || count == NULL)
- return BADGE_ERROR_INVALID_PARAMETER;
-
- result = badge_ipc_request_get_count(app_id, count);
- if (result == BADGE_ERROR_IO_ERROR)
- result = BADGE_ERROR_FROM_DB;
-
- return result;
+ return badge_get_count_for_uid(app_id, count, getuid());
}
EXPORT_API
int badge_set_display(const char *app_id, unsigned int is_display)
{
- char *caller = NULL;
- int result = BADGE_ERROR_NONE;
-
- if (app_id == NULL)
- return BADGE_ERROR_INVALID_PARAMETER;
-
- caller = _badge_get_pkgname_by_pid();
- if (!caller) {
- ERR("fail to get caller pkgname");
- result = BADGE_ERROR_PERMISSION_DENIED;
- goto out;
- }
-
- result = badge_ipc_request_set_display(app_id, caller, is_display);
-
-out:
- if (caller)
- free(caller);
- return result;
+ return badge_set_display_for_uid(app_id, is_display, getuid());
}
EXPORT_API
int badge_get_display(const char *app_id, unsigned int *is_display)
{
- int result = BADGE_ERROR_NONE;
- if (app_id == NULL || is_display == NULL)
- return BADGE_ERROR_INVALID_PARAMETER;
-
- result = badge_ipc_request_get_display(app_id, is_display);
- if (result == BADGE_ERROR_IO_ERROR)
- result = BADGE_ERROR_FROM_DB;
-
- return result;
+ return badge_get_display_for_uid(app_id, is_display, getuid());
}
EXPORT_API
int badge_register_changed_cb(badge_change_cb callback, void *data)
{
- if (callback == NULL)
- return BADGE_ERROR_INVALID_PARAMETER;
-
- return _badge_register_changed_cb(callback, data);
+ return badge_register_changed_cb_for_uid(callback, data, getuid());
}
EXPORT_API
int badge_unregister_changed_cb(badge_change_cb callback)
{
- if (callback == NULL)
- return BADGE_ERROR_INVALID_PARAMETER;
-
- return _badge_unregister_changed_cb(callback);
+ return badge_unregister_changed_cb_for_uid(callback, getuid());
}
EXPORT_API
#define BADGE_DB_NAME ".badge.db"
#define CREATE_BADGE_TABLE " \
PRAGMA journal_mode = PERSIST; \
+PRAGMA synchronous = FULL; \
create table if not exists badge_data ( \
+ uid INTEGER, \
pkgname TEXT NOT NULL, \
writable_pkgs TEXT, \
badge INTEGER default 0, \
rowid INTEGER PRIMARY KEY AUTOINCREMENT, \
- UNIQUE (pkgname) \
+ UNIQUE (uid, pkgname) \
); \
create table if not exists badge_option ( \
+ uid INTEGER, \
pkgname TEXT NOT NULL, \
display INTEGER default 1, \
- UNIQUE (pkgname) \
+ UNIQUE (uid, pkgname) \
); "
EXPORT_API
}
r = sqlite3_exec(db, CREATE_BADGE_TABLE, NULL, NULL, &errmsg);
+
if (r != SQLITE_OK) {
ERR("query error(%d)(%s)", r, errmsg);
sqlite3_free(errmsg);
}
EXPORT_API
-int badge_db_is_existing(const char *pkgname, bool *existing)
+int badge_db_is_existing(const char *pkgname, bool *existing, uid_t uid)
{
int result = BADGE_ERROR_NONE;
- result = _badge_is_existing(pkgname, existing);
+ result = _badge_is_existing(pkgname, existing, uid);
return result;
}
EXPORT_API
-int badge_db_get_list(GList **badge_list)
+int badge_db_get_list(GList **badge_list, uid_t uid)
{
int result = BADGE_ERROR_NONE;
- result = _badge_get_list(badge_list);
+ result = _badge_get_list(badge_list, uid);
return result;
}
EXPORT_API
-int badge_db_insert(const char *pkgname, const char *writable_pkg, const char *caller)
+int badge_db_insert(const char *pkgname, const char *writable_pkg, const char *caller, uid_t uid)
{
int err = BADGE_ERROR_NONE;
badge_h *badge = NULL;
}
free(pkgs);
- err = _badge_insert(badge);
+ err = _badge_insert(badge, uid);
if (err != BADGE_ERROR_NONE) {
ERR("fail to _badge_insert : %d", err);
_badge_free(badge);
}
EXPORT_API
-int badge_db_delete(const char *pkgname, const char *caller)
+int badge_db_delete(const char *pkgname, const char *caller, uid_t uid)
{
int result = BADGE_ERROR_NONE;
- result = _badge_remove(caller, pkgname);
+ result = _badge_remove(caller, pkgname, uid);
return result;
}
EXPORT_API
-int badge_db_set_count(const char *pkgname, const char *caller, unsigned int count)
+int badge_db_set_count(const char *pkgname, const char *caller, unsigned int count, uid_t uid)
{
int result = BADGE_ERROR_NONE;
- result = _badge_set_count(caller, pkgname, count);
+ result = _badge_set_count(caller, pkgname, count, uid);
return result;
}
EXPORT_API
-int badge_db_get_count(const char *pkgname, unsigned int *count)
+int badge_db_get_count(const char *pkgname, unsigned int *count, uid_t uid)
{
int result = BADGE_ERROR_NONE;
- result = _badge_get_count(pkgname, count);
+ result = _badge_get_count(pkgname, count, uid);
return result;
}
EXPORT_API
-int badge_db_set_display_option(const char *pkgname, const char *caller, unsigned int is_display)
+int badge_db_set_display_option(const char *pkgname, unsigned int is_display, uid_t uid)
{
int result = BADGE_ERROR_NONE;
- result = _badge_set_display(pkgname, is_display);
+ result = _badge_set_display(pkgname, is_display, uid);
return result;
}
EXPORT_API
-int badge_db_get_display_option(const char *pkgname, unsigned int *is_display)
+int badge_db_get_display_option(const char *pkgname, unsigned int *is_display, uid_t uid)
{
int result = BADGE_ERROR_NONE;
- result = _badge_get_display(pkgname, is_display);
+ result = _badge_get_display(pkgname, is_display, uid);
return result;
}
#include <fcntl.h>
#include <unistd.h>
#include <glib.h>
+#include <gio/gio.h>
#include <dbus/dbus.h>
#include <dbus/dbus-glib-lowlevel.h>
#include <aul.h>
void *data;
};
-static GList *g_badge_cb_list;
+static GHashTable *_badge_cb_hash = NULL;
static inline long _get_max_len(void)
{
}
static int _badge_check_data_inserted(const char *pkgname,
- sqlite3 *db)
+ sqlite3 *db, uid_t uid)
{
sqlite3_stmt *stmt = NULL;
int count = 0;
return BADGE_ERROR_INVALID_PARAMETER;
sqlbuf = sqlite3_mprintf("SELECT count(*) FROM %q WHERE " \
- "pkgname = %Q",
- BADGE_TABLE_NAME, pkgname);
+ "pkgname = %Q AND uid = %d",
+ BADGE_TABLE_NAME, pkgname, uid);
if (!sqlbuf) {
/* LCOV_EXCL_START */
}
static int _badge_check_option_inserted(const char *pkgname,
- sqlite3 *db)
+ sqlite3 *db, uid_t uid)
{
sqlite3_stmt *stmt = NULL;
int count = 0;
return BADGE_ERROR_INVALID_PARAMETER;
sqlbuf = sqlite3_mprintf("SELECT count(*) FROM %q WHERE " \
- "pkgname = %Q",
- BADGE_OPTION_TABLE_NAME, pkgname);
+ "pkgname = %Q AND uid = %d",
+ BADGE_OPTION_TABLE_NAME, pkgname, uid);
if (!sqlbuf) {
/* LCOV_EXCL_START */
}
static int _badge_check_writable(const char *caller,
- const char *pkgname, sqlite3 *db)
+ const char *pkgname, sqlite3 *db, uid_t uid)
{
sqlite3_stmt *stmt = NULL;
int count = 0;
return BADGE_ERROR_NONE;
sqlbuf = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE " \
- "pkgname = %Q AND writable_pkgs LIKE '%%%q%%'",
+ "pkgname = %Q AND writable_pkgs LIKE '%%%q%%'" \
+ "AND uid = %d",
BADGE_TABLE_NAME,
- pkgname, caller);
+ pkgname, caller, uid);
if (!sqlbuf) {
ERR("fail to alloc sql query");
return BADGE_ERROR_OUT_OF_MEMORY;
/* LCOV_EXCL_STOP */
}
-int _badge_is_existing(const char *pkgname, bool *existing)
+int _badge_is_existing(const char *pkgname, bool *existing, uid_t uid)
{
sqlite3 *db = NULL;
int sqlret;
/* LCOV_EXCL_STOP */
}
- result = _badge_check_data_inserted(pkgname, db);
+ result = _badge_check_data_inserted(pkgname, db, uid);
if (result == BADGE_ERROR_ALREADY_EXIST) {
*existing = TRUE;
result = BADGE_ERROR_NONE;
return result;
}
-int _badge_get_list(GList **badge_list)
+int _badge_get_list(GList **badge_list, uid_t uid)
{
sqlite3 *db = NULL;
int result = BADGE_ERROR_NONE;
/* LCOV_EXCL_STOP */
}
- sqlbuf = sqlite3_mprintf("SELECT pkgname, badge FROM %q",
- BADGE_TABLE_NAME);
+ sqlbuf = sqlite3_mprintf("SELECT pkgname, badge FROM %q WHERE uid = %d",
+ BADGE_TABLE_NAME, uid);
if (!sqlbuf) {
/* LCOV_EXCL_START */
ERR("fail to alloc sql query");
}
/* LCOV_EXCL_START */
-int _badge_foreach_existed(badge_foreach_cb callback, void *data)
+int _badge_foreach_existed(badge_foreach_cb callback, void *data, uid_t uid)
{
sqlite3 *db = NULL;
int result = BADGE_ERROR_NONE;
return BADGE_ERROR_FROM_DB;
}
- sqlbuf = sqlite3_mprintf("SELECT pkgname, badge FROM %q",
- BADGE_TABLE_NAME);
+ sqlbuf = sqlite3_mprintf("SELECT pkgname, badge FROM %q WHERE uid = %d",
+ BADGE_TABLE_NAME, uid);
if (!sqlbuf) {
ERR("fail to alloc sql query");
result = BADGE_ERROR_OUT_OF_MEMORY;
}
/* LCOV_EXCL_STOP */
-int _badge_insert(badge_h *badge)
+int _badge_insert(badge_h *badge, uid_t uid)
{
sqlite3 *db = NULL;
int sqlret;
}
/* Check pkgname & id */
- ret = _badge_check_data_inserted(badge->pkgname, db);
+ ret = _badge_check_data_inserted(badge->pkgname, db, uid);
if (ret != BADGE_ERROR_NOT_EXIST) {
/* LCOV_EXCL_START */
result = ret;
sqlbuf = sqlite3_mprintf("INSERT INTO %q " \
"(pkgname, " \
- "writable_pkgs) " \
- "VALUES "
- "(%Q, %Q);",
+ "writable_pkgs, " \
+ "uid) "\
+ "VALUES " \
+ "(%Q, %Q, %d);",
BADGE_TABLE_NAME,
- badge->pkgname, badge->writable_pkgs);
+ badge->pkgname, badge->writable_pkgs, uid);
if (!sqlbuf) {
/* LCOV_EXCL_START */
ERR("fail to alloc query");
}
/* inserting badge options */
- ret = _badge_check_option_inserted(badge->pkgname, db);
+ ret = _badge_check_option_inserted(badge->pkgname, db, uid);
if (ret != BADGE_ERROR_NOT_EXIST) {
result = ret;
goto return_close_db;
}
sqlbuf = sqlite3_mprintf("INSERT INTO %q " \
- "(pkgname) " \
+ "(pkgname, " \
+ "uid) " \
"VALUES "
- "(%Q);",
+ "(%Q, %d);",
BADGE_OPTION_TABLE_NAME,
- badge->pkgname);
+ badge->pkgname, uid);
if (!sqlbuf) {
/* LCOV_EXCL_START */
ERR("fail to alloc query");
return result;
}
-int _badge_remove(const char *caller, const char *pkgname)
+int _badge_remove(const char *caller, const char *pkgname, uid_t uid)
{
int ret = BADGE_ERROR_NONE;
int result = BADGE_ERROR_NONE;
/* LCOV_EXCL_STOP */
}
- ret = _badge_check_data_inserted(pkgname, db);
+ ret = _badge_check_data_inserted(pkgname, db, uid);
if (ret != BADGE_ERROR_ALREADY_EXIST) {
result = ret;
goto return_close_db;
}
- ret = _badge_check_writable(caller, pkgname, db);
+ ret = _badge_check_writable(caller, pkgname, db, uid);
if (ret != BADGE_ERROR_NONE) {
result = ret;
goto return_close_db;
}
- sqlbuf = sqlite3_mprintf("DELETE FROM %q WHERE pkgname = %Q",
- BADGE_TABLE_NAME, pkgname);
+ sqlbuf = sqlite3_mprintf("DELETE FROM %q WHERE pkgname = %Q AND uid = %d",
+ BADGE_TABLE_NAME, pkgname, uid);
if (!sqlbuf) {
/* LCOV_EXCL_START */
ERR("fail to alloc query");
}
/* treating option table */
- ret = _badge_check_option_inserted(pkgname, db);
+ ret = _badge_check_option_inserted(pkgname, db, uid);
if (ret != BADGE_ERROR_ALREADY_EXIST) {
result = ret;
goto return_close_db;
}
- sqlbuf = sqlite3_mprintf("DELETE FROM %q WHERE pkgname = %Q",
- BADGE_OPTION_TABLE_NAME, pkgname);
+ sqlbuf = sqlite3_mprintf("DELETE FROM %q WHERE pkgname = %Q AND uid = %d",
+ BADGE_OPTION_TABLE_NAME, pkgname, uid);
if (!sqlbuf) {
/* LCOV_EXCL_START */
ERR("fail to alloc query");
}
int _badge_set_count(const char *caller, const char *pkgname,
- unsigned int count)
+ unsigned int count, uid_t uid)
{
int ret = BADGE_ERROR_NONE;
int result = BADGE_ERROR_NONE;
/* LCOV_EXCL_STOP */
}
- ret = _badge_check_data_inserted(pkgname, db);
+ ret = _badge_check_data_inserted(pkgname, db, uid);
if (ret != BADGE_ERROR_ALREADY_EXIST) {
result = ret;
goto return_close_db;
}
- ret = _badge_check_writable(caller, pkgname, db);
+ ret = _badge_check_writable(caller, pkgname, db, uid);
if (ret != BADGE_ERROR_NONE) {
result = ret;
goto return_close_db;
}
sqlbuf = sqlite3_mprintf("UPDATE %q SET badge = %d " \
- "WHERE pkgname = %Q",
- BADGE_TABLE_NAME, count, pkgname);
+ "WHERE pkgname = %Q AND uid = %d",
+ BADGE_TABLE_NAME, count, pkgname, uid);
if (!sqlbuf) {
/* LCOV_EXCL_START */
ERR("fail to alloc query");
return result;
}
-int _badge_get_count(const char *pkgname, unsigned int *count)
+int _badge_get_count(const char *pkgname, unsigned int *count, uid_t uid)
{
int ret = BADGE_ERROR_NONE;
int result = BADGE_ERROR_NONE;
/* LCOV_EXCL_STOP */
}
- ret = _badge_check_data_inserted(pkgname, db);
+ ret = _badge_check_data_inserted(pkgname, db, uid);
if (ret != BADGE_ERROR_ALREADY_EXIST) {
result = ret;
goto return_close_db;
}
sqlbuf = sqlite3_mprintf("SELECT badge FROM %q " \
- "WHERE pkgname = %Q",
- BADGE_TABLE_NAME, pkgname);
+ "WHERE pkgname = %Q AND uid = %d",
+ BADGE_TABLE_NAME, pkgname, uid);
if (!sqlbuf) {
/* LCOV_EXCL_START */
ERR("fail to alloc query");
return result;
}
-int _badge_set_display(const char *pkgname,
- unsigned int is_display)
+int _badge_set_display(const char *pkgname, unsigned int is_display, uid_t uid)
{
int ret = BADGE_ERROR_NONE;
int result = BADGE_ERROR_NONE;
/* LCOV_EXCL_STOP */
}
- ret = _badge_check_data_inserted(pkgname, db);
+ ret = _badge_check_data_inserted(pkgname, db, uid);
if (ret != BADGE_ERROR_ALREADY_EXIST) {
result = ret;
goto return_close_db;
}
- ret = _badge_check_option_inserted(pkgname, db);
+ ret = _badge_check_option_inserted(pkgname, db, uid);
if (ret == BADGE_ERROR_ALREADY_EXIST) {
sqlbuf = sqlite3_mprintf("UPDATE %q SET display = %d " \
- "WHERE pkgname = %Q",
- BADGE_OPTION_TABLE_NAME, is_display, pkgname);
+ "WHERE pkgname = %Q AND uid = %d",
+ BADGE_OPTION_TABLE_NAME, is_display, pkgname, uid);
if (!sqlbuf) {
/* LCOV_EXCL_START */
ERR("fail to alloc query");
} else if (ret == BADGE_ERROR_NOT_EXIST) {
sqlbuf = sqlite3_mprintf("INSERT INTO %q " \
"(pkgname, " \
- "display) " \
+ "display, " \
+ "uid) " \
"VALUES "
- "(%Q, %d);",
+ "(%Q, %d, %d);",
BADGE_OPTION_TABLE_NAME,
- pkgname, is_display);
+ pkgname, is_display, uid);
if (!sqlbuf) {
/* LCOV_EXCL_START */
ERR("fail to alloc query");
return result;
}
-int _badge_get_display(const char *pkgname, unsigned int *is_display)
+int _badge_get_display(const char *pkgname, unsigned int *is_display, uid_t uid)
{
int ret = BADGE_ERROR_NONE;
int result = BADGE_ERROR_NONE;
/* LCOV_EXCL_STOP */
}
- ret = _badge_check_option_inserted(pkgname, db);
+ ret = _badge_check_option_inserted(pkgname, db, uid);
if (ret != BADGE_ERROR_ALREADY_EXIST) {
if (ret == BADGE_ERROR_NOT_EXIST)
*is_display = 1;
}
sqlbuf = sqlite3_mprintf("SELECT display FROM %q " \
- "WHERE pkgname = %Q",
- BADGE_OPTION_TABLE_NAME, pkgname);
+ "WHERE pkgname = %Q AND uid = %d",
+ BADGE_OPTION_TABLE_NAME, pkgname, uid);
if (!sqlbuf) {
/* LCOV_EXCL_START */
ERR("fail to alloc query");
}
void badge_changed_cb_call(unsigned int action, const char *pkgname,
- unsigned int count)
+ unsigned int count, uid_t uid)
{
- DBG("call badge_change_cb");
- GList *list = g_badge_cb_list;
+ GList *badge_cb_list = NULL;
struct _badge_cb_data *bd = NULL;
- while (list) {
- bd = g_list_nth_data(list, 0);
- if (!bd)
- continue;
- if (bd->callback) {
+ DBG("call badge_change_cb");
+
+ if (_badge_cb_hash == NULL)
+ return;
+
+ badge_cb_list = (GList *)g_hash_table_lookup(_badge_cb_hash, GUINT_TO_POINTER(uid));
+
+ if (badge_cb_list == NULL) {
+ ERR("invalid data");
+ return;
+ }
+
+ badge_cb_list = g_list_first(badge_cb_list);
+
+ for (; badge_cb_list != NULL; badge_cb_list = badge_cb_list->next) {
+ bd = badge_cb_list->data;
+
+ if (bd != NULL && bd->callback != NULL) {
DBG("call badge_change_cb : action %d, pkgname %s, count %d",
- action, pkgname, count);
+ action, pkgname, count);
bd->callback(action, pkgname, count, bd->data);
}
-
- list = g_list_next(list);
}
}
-static int _badge_changed_monitor_init()
+static int _badge_changed_monitor_init(uid_t uid)
{
- return badge_ipc_monitor_init();
+ return badge_ipc_monitor_init(uid);
}
static void _badge_chanaged_monitor_fini()
return 1;
}
-int _badge_register_changed_cb(badge_change_cb callback, void *data)
+int _badge_register_changed_cb(badge_change_cb callback, void *data, uid_t uid)
{
struct _badge_cb_data *bd = NULL;
- GList *found = NULL;
+ GList *badge_cb_list = NULL;
+ GList *badge_found_list = NULL;
int ret;
- if (!callback)
+ if (callback == NULL)
return BADGE_ERROR_INVALID_PARAMETER;
- found = g_list_find_custom(g_badge_cb_list, (gconstpointer)callback,
- _badge_data_compare);
+ if (_badge_cb_hash == NULL)
+ _badge_cb_hash = g_hash_table_new(g_direct_hash, g_direct_equal);
- if (found) {
- bd = g_list_nth_data(found, 0);
- bd->data = data;
- } else {
-
- bd = malloc(sizeof(struct _badge_cb_data));
- if (!bd)
- return BADGE_ERROR_OUT_OF_MEMORY;
+ bd = (struct _badge_cb_data *)malloc(sizeof(struct _badge_cb_data));
+ if (bd == NULL)
+ return BADGE_ERROR_OUT_OF_MEMORY;
+ bd->callback = callback;
+ bd->data = data;
- bd->callback = callback;
- bd->data = data;
+ badge_cb_list = (GList *)g_hash_table_lookup(_badge_cb_hash, GUINT_TO_POINTER(uid));
- g_badge_cb_list = g_list_append(g_badge_cb_list, bd);
+ if (badge_cb_list == NULL) {
+ badge_cb_list = g_list_append(badge_cb_list, bd);
+ g_hash_table_insert(_badge_cb_hash, GUINT_TO_POINTER(uid), badge_cb_list);
+ } else {
+ badge_found_list = g_list_find_custom(badge_cb_list, (gconstpointer)callback,
+ _badge_data_compare);
+ if (badge_found_list) {
+ bd = g_list_nth_data(badge_found_list, 0);
+ bd->data = data;
+ } else {
+ badge_cb_list = g_list_append(badge_cb_list, bd);
+ }
}
- ret = _badge_changed_monitor_init();
+ ret = _badge_changed_monitor_init(uid);
if (ret != BADGE_ERROR_NONE) {
/* LCOV_EXCL_START */
ERR("badge_ipc_monitor_init err : %d", ret);
- _badge_unregister_changed_cb(callback);
+ _badge_unregister_changed_cb(callback, uid);
return ret;
/* LCOV_EXCL_STOP */
}
return BADGE_ERROR_NONE;
}
-int _badge_unregister_changed_cb(badge_change_cb callback)
+int _badge_unregister_changed_cb(badge_change_cb callback, uid_t uid)
{
- GList *found = NULL;
+ GList *badge_cb_list = NULL;
+ GList *badge_delete_list = NULL;
struct _badge_cb_data *bd = NULL;
- if (!callback)
+ if (callback == NULL)
return BADGE_ERROR_INVALID_PARAMETER;
- found = g_list_find_custom(g_badge_cb_list, (gconstpointer)callback,
+ if (_badge_cb_hash == NULL)
+ return BADGE_ERROR_INVALID_PARAMETER;
+
+ badge_cb_list = (GList *)g_hash_table_lookup(_badge_cb_hash, GUINT_TO_POINTER(uid));
+
+ if (badge_cb_list == NULL)
+ return BADGE_ERROR_INVALID_PARAMETER;
+
+ badge_delete_list = g_list_find_custom(badge_cb_list, (gconstpointer)callback,
_badge_data_compare);
- if (found) {
- bd = g_list_nth_data(found, 0);
- g_badge_cb_list = g_list_delete_link(g_badge_cb_list, found);
+ if (badge_delete_list) {
+ bd = g_list_nth_data(badge_delete_list, 0);
+ badge_cb_list = g_list_delete_link(badge_cb_list, badge_delete_list);
free(bd);
+ } else {
+ return BADGE_ERROR_INVALID_PARAMETER;
}
- if (!g_badge_cb_list)
- _badge_chanaged_monitor_fini();
-
- if (found != NULL)
- return BADGE_ERROR_NONE;
+ if (badge_cb_list == NULL)
+ g_hash_table_steal(_badge_cb_hash, GUINT_TO_POINTER(uid));
else
- return BADGE_ERROR_INVALID_PARAMETER;
+ g_hash_table_replace(_badge_cb_hash, GUINT_TO_POINTER(uid), badge_cb_list);
+ if (g_hash_table_size(_badge_cb_hash) == 0)
+ _badge_chanaged_monitor_fini();
+
+ return BADGE_ERROR_NONE;
}
int _badge_free(badge_h *badge)
return result;
}
/* LCOV_EXCL_STOP */
+
+
+EXPORT_API
+int badge_create_for_uid(const char *pkgname, const char *writable_pkg, uid_t uid)
+{
+ char *caller = NULL;
+ int err = BADGE_ERROR_NONE;
+
+ if (pkgname == NULL)
+ return BADGE_ERROR_INVALID_PARAMETER;
+
+
+ caller = _badge_get_pkgname_by_pid();
+ if (!caller) {
+ ERR("fail to get caller pkgname");
+ return BADGE_ERROR_PERMISSION_DENIED;
+ }
+
+ err = badge_ipc_request_insert(pkgname, writable_pkg, caller, uid);
+
+ free(caller);
+ return err;
+}
+
+EXPORT_API
+int badge_new_for_uid(const char *writable_app_id, uid_t uid)
+{
+ char *caller = NULL;
+ int err = BADGE_ERROR_NONE;
+
+ caller = _badge_get_pkgname_by_pid();
+ if (!caller) {
+ ERR("fail to get caller pkgname");
+ return BADGE_ERROR_PERMISSION_DENIED;
+ }
+
+ err = badge_ipc_request_insert(caller, writable_app_id, caller, uid);
+
+ free(caller);
+ return err;
+}
+
+EXPORT_API
+int badge_add_for_uid(const char *badge_app_id, uid_t uid)
+{
+ char *caller = NULL;
+ int err = BADGE_ERROR_NONE;
+
+ caller = _badge_get_pkgname_by_pid();
+ if (!caller) {
+ ERR("fail to get caller pkgname");
+ return BADGE_ERROR_PERMISSION_DENIED;
+ }
+
+ if (badge_app_id == NULL) {
+ badge_app_id = caller;
+ } else {
+ int pkgmgr_ret = PACKAGE_MANAGER_ERROR_NONE;
+ package_manager_compare_result_type_e compare_result = PACKAGE_MANAGER_COMPARE_MISMATCH;
+
+ pkgmgr_ret = package_manager_compare_app_cert_info(badge_app_id, caller, &compare_result);
+
+ if (pkgmgr_ret != PACKAGE_MANAGER_ERROR_NONE || compare_result != PACKAGE_MANAGER_COMPARE_MATCH) {
+ err = BADGE_ERROR_INVALID_PACKAGE;
+ goto out;
+ }
+ }
+
+ err = badge_ipc_request_insert(badge_app_id, caller, caller, uid);
+
+out:
+ if (caller)
+ free(caller);
+ return err;
+}
+
+EXPORT_API
+int badge_remove_for_uid(const char *app_id, uid_t uid)
+{
+ char *caller = NULL;
+ int result = BADGE_ERROR_NONE;
+
+ if (app_id == NULL)
+ return BADGE_ERROR_INVALID_PARAMETER;
+
+ caller = _badge_get_pkgname_by_pid();
+ if (!caller) {
+ ERR("fail to get caller pkgname");
+ result = BADGE_ERROR_PERMISSION_DENIED;
+ goto out;
+ }
+
+ result = badge_ipc_request_delete(app_id, caller, uid);
+
+out:
+ if (caller)
+ free(caller);
+ return result;
+}
+
+EXPORT_API
+int badge_is_existing_for_uid(const char *app_id, bool *existing, uid_t uid)
+{
+ return badge_ipc_request_is_existing(app_id, existing, uid);
+}
+
+EXPORT_API
+int badge_foreach_for_uid(badge_foreach_cb callback, void *user_data, uid_t uid)
+{
+ int result = BADGE_ERROR_NONE;
+ result = badge_ipc_request_get_list(callback, user_data, uid);
+ if (result == BADGE_ERROR_IO_ERROR)
+ result = BADGE_ERROR_FROM_DB;
+ return result;
+}
+
+EXPORT_API
+int badge_set_count_for_uid(const char *app_id, unsigned int count, uid_t uid)
+{
+ char *caller = NULL;
+ int result = BADGE_ERROR_NONE;
+
+ if (app_id == NULL)
+ return BADGE_ERROR_INVALID_PARAMETER;
+
+ DBG("app_id %s, count %d", app_id, count);
+
+ caller = _badge_get_pkgname_by_pid();
+ if (!caller) {
+ ERR("fail to get caller pkgname");
+ result = BADGE_ERROR_PERMISSION_DENIED;
+ goto out;
+ }
+
+ result = badge_ipc_request_set_count(app_id, caller, count, uid);
+out:
+ if (caller)
+ free(caller);
+ return result;
+}
+
+EXPORT_API
+int badge_get_count_for_uid(const char *app_id, unsigned int *count, uid_t uid)
+{
+ int result = BADGE_ERROR_NONE;
+ if (app_id == NULL || count == NULL)
+ return BADGE_ERROR_INVALID_PARAMETER;
+
+ result = badge_ipc_request_get_count(app_id, count, uid);
+ if (result == BADGE_ERROR_IO_ERROR)
+ result = BADGE_ERROR_FROM_DB;
+
+ return result;
+}
+
+EXPORT_API
+int badge_set_display_for_uid(const char *app_id, unsigned int is_display, uid_t uid)
+{
+ char *caller = NULL;
+ int result = BADGE_ERROR_NONE;
+
+ if (app_id == NULL)
+ return BADGE_ERROR_INVALID_PARAMETER;
+
+ caller = _badge_get_pkgname_by_pid();
+ if (!caller) {
+ ERR("fail to get caller pkgname");
+ result = BADGE_ERROR_PERMISSION_DENIED;
+ goto out;
+ }
+
+ result = badge_ipc_request_set_display(app_id, caller, is_display, uid);
+
+out:
+ if (caller)
+ free(caller);
+ return result;
+}
+
+EXPORT_API
+int badge_get_display_for_uid(const char *app_id, unsigned int *is_display, uid_t uid)
+{
+ int result = BADGE_ERROR_NONE;
+ if (app_id == NULL || is_display == NULL)
+ return BADGE_ERROR_INVALID_PARAMETER;
+
+ result = badge_ipc_request_get_display(app_id, is_display, uid);
+ if (result == BADGE_ERROR_IO_ERROR)
+ result = BADGE_ERROR_FROM_DB;
+
+ return result;
+}
+
+EXPORT_API
+int badge_register_changed_cb_for_uid(badge_change_cb callback, void *data, uid_t uid)
+{
+ if (callback == NULL)
+ return BADGE_ERROR_INVALID_PARAMETER;
+
+ return _badge_register_changed_cb(callback, data, uid);
+}
+
+EXPORT_API
+int badge_unregister_changed_cb_for_uid(badge_change_cb callback, uid_t uid)
+{
+ if (callback == NULL)
+ return BADGE_ERROR_INVALID_PARAMETER;
+
+ return _badge_unregister_changed_cb(callback, uid);
+}
#include <stdlib.h>
#include <stdarg.h>
#include <gio/gio.h>
+#include <unistd.h>
#include <vconf.h>
static void _insert_badge_notify(GVariant *parameters)
{
char *pkgname = NULL;
+ uid_t uid;
- g_variant_get(parameters, "(&s)", &pkgname);
- badge_changed_cb_call(BADGE_ACTION_CREATE, pkgname, 0);
+ g_variant_get(parameters, "(&si)", &pkgname, &uid);
+ badge_changed_cb_call(BADGE_ACTION_CREATE, pkgname, 0, uid);
}
/* LCOV_EXCL_STOP */
static void _delete_badge_notify(GVariant *parameters)
{
char *pkgname = NULL;
+ uid_t uid;
- g_variant_get(parameters, "(&s)", &pkgname);
- badge_changed_cb_call(BADGE_ACTION_REMOVE, pkgname, 0);
+ g_variant_get(parameters, "(&si)", &pkgname, &uid);
+ badge_changed_cb_call(BADGE_ACTION_REMOVE, pkgname, 0, uid);
}
/* LCOV_EXCL_STOP */
{
char *pkgname = NULL;
int count = 0;
+ uid_t uid;
- g_variant_get(parameters, "(&si)", &pkgname, &count);
- badge_changed_cb_call(BADGE_ACTION_UPDATE, pkgname, count);
+ g_variant_get(parameters, "(&sii)", &pkgname, &count, &uid);
+ badge_changed_cb_call(BADGE_ACTION_UPDATE, pkgname, count, uid);
}
/* LCOV_EXCL_STOP */
{
char *pkgname = NULL;
int is_display = 0;
+ uid_t uid;
- g_variant_get(parameters, "(&si)", &pkgname, &is_display);
- badge_changed_cb_call(BADGE_ACTION_CHANGED_DISPLAY, pkgname, is_display);
+ g_variant_get(parameters, "(&sii)", &pkgname, &is_display, &uid);
+ badge_changed_cb_call(BADGE_ACTION_CHANGED_DISPLAY, pkgname, is_display, uid);
}
/* LCOV_EXCL_STOP */
}
-static int _send_service_register()
+static int _send_service_register(uid_t uid)
{
GDBusMessage *reply = NULL;
int result;
- result = _send_sync_badge(g_variant_new("(i)", getuid()), &reply, "badge_service_register");
+ result = _send_sync_badge(g_variant_new("(i)", uid), &reply, "badge_service_register");
if (reply)
g_object_unref(reply);
- badge_changed_cb_call(BADGE_ACTION_SERVICE_READY, NULL, 0);
+ badge_changed_cb_call(BADGE_ACTION_SERVICE_READY, NULL, 0, uid);
DBG("_send_service_register dones");
return result;
}
-static int _ipc_monitor_register(void)
+static int _ipc_monitor_register(uid_t uid)
{
DBG("register a service\n");
- return _send_service_register();
+ return _send_service_register(uid);
}
/* LCOV_EXCL_START */
{
DBG("name appeared : %s", name);
is_master_started = 1;
- _ipc_monitor_register();
+ _ipc_monitor_register(GPOINTER_TO_INT(user_data));
_do_deferred_task();
}
}
/* LCOV_EXCL_STOP */
-int badge_ipc_monitor_init(void)
+int badge_ipc_monitor_init(uid_t uid)
{
DBG("register a service\n");
int ret = BADGE_ERROR_NONE;
/* LCOV_EXCL_STOP */
}
- ret = _ipc_monitor_register();
+ ret = _ipc_monitor_register(uid);
if (ret != BADGE_ERROR_NONE) {
/* LCOV_EXCL_START */
ERR("Can't init ipc_monitor_register %d", ret);
G_BUS_NAME_WATCHER_FLAGS_NONE,
_on_name_appeared,
_on_name_vanished,
- NULL,
+ GINT_TO_POINTER((int)uid),
NULL);
if (provider_monitor_id == 0) {
return BADGE_ERROR_NONE;
}
-int badge_ipc_request_is_existing(const char *pkgname, bool *existing)
+int badge_ipc_request_is_existing(const char *pkgname, bool *existing, uid_t uid)
{
int result;
GDBusMessage *reply = NULL;
ERR("Can't init dbus %d", result);
return result;
}
- body = g_variant_new("(s)", pkgname);
+ body = g_variant_new("(si)", pkgname, uid);
result = _send_sync_badge(body, &reply, "get_badge_existing");
if (result == BADGE_ERROR_NONE) {
return result;
}
-int badge_ipc_request_get_list(badge_foreach_cb callback, void *data)
+int badge_ipc_request_get_list(badge_foreach_cb callback, void *data, uid_t uid)
{
GDBusMessage *reply = NULL;
int result;
GVariant *reply_body;
GVariant *iter_body;
+ GVariant *body;
GVariantIter *iter;
badge_info_s badge;
ERR("Can't init dbus %d", result);
return result;
}
- result = _send_sync_badge(NULL, &reply, "get_list");
+
+ body = g_variant_new("(i)", uid);
+ if (!body) {
+ ERR("Cannot create gvariant. Out of memory.");
+ return BADGE_ERROR_OUT_OF_MEMORY;
+ }
+
+ result = _send_sync_badge(body, &reply, "get_list");
if (result == BADGE_ERROR_NONE) {
reply_body = g_dbus_message_get_body(reply);
g_variant_get(reply_body, "(a(v))", &iter);
return result;
}
-int badge_ipc_request_insert(const char *pkgname, const char *writable_pkg, const char *caller)
+int badge_ipc_request_insert(const char *pkgname, const char *writable_pkg, const char *caller, uid_t uid)
{
int result;
GDBusMessage *reply = NULL;
return result;
}
- body = g_variant_new("(sss)", pkgname, writable_pkg, caller);
+ body = g_variant_new("(sssi)", pkgname, writable_pkg, caller, uid);
if (!body) {
ERR("Cannot create gvariant. Out of memory.");
return BADGE_ERROR_OUT_OF_MEMORY;
return result;
}
-int badge_ipc_request_delete(const char *pkgname, const char *caller)
+int badge_ipc_request_delete(const char *pkgname, const char *caller, uid_t uid)
{
int result;
GDBusMessage *reply = NULL;
ERR("Can't init dbus %d", result);
return result;
}
- body = g_variant_new("(ss)", pkgname, caller);
+
+ body = g_variant_new("(ssi)", pkgname, caller, uid);
+ if (!body) {
+ ERR("Cannot create gvariant. Out of memory.");
+ return BADGE_ERROR_OUT_OF_MEMORY;
+ }
result = _send_sync_badge(body, &reply, "delete_badge");
return result;
}
-int badge_ipc_request_set_count(const char *pkgname, const char *caller, int count)
+int badge_ipc_request_set_count(const char *pkgname, const char *caller, int count, uid_t uid)
{
int result;
GDBusMessage *reply = NULL;
ERR("Can't init dbus %d", result);
return result;
}
- body = g_variant_new("(ssi)", pkgname, caller, count);
+
+ body = g_variant_new("(ssii)", pkgname, caller, count, uid);
+ if (!body) {
+ ERR("Cannot create gvariant. Out of memory.");
+ return BADGE_ERROR_OUT_OF_MEMORY;
+ }
result = _send_sync_badge(body, &reply, "set_badge_count");
return result;
}
-int badge_ipc_request_get_count(const char *pkgname, unsigned int *count)
+int badge_ipc_request_get_count(const char *pkgname, unsigned int *count, uid_t uid)
{
int result;
GDBusMessage *reply = NULL;
ERR("Can't init dbus %d", result);
return result;
}
- body = g_variant_new("(s)", pkgname);
+
+ body = g_variant_new("(si)", pkgname, uid);
+ if (!body) {
+ ERR("Cannot create gvariant. Out of memory.");
+ return BADGE_ERROR_OUT_OF_MEMORY;
+ }
result = _send_sync_badge(body, &reply, "get_badge_count");
if (result == BADGE_ERROR_NONE) {
return result;
}
-int badge_ipc_request_set_display(const char *pkgname, const char *caller, unsigned int display_option)
+int badge_ipc_request_set_display(const char *pkgname, const char *caller,
+ unsigned int display_option, uid_t uid)
{
int result;
GDBusMessage *reply = NULL;
ERR("Can't init dbus %d", result);
return result;
}
- body = g_variant_new("(ssi)", pkgname, caller, display_option);
+ body = g_variant_new("(ssii)", pkgname, caller, display_option, uid);
+ if (!body) {
+ ERR("Cannot create gvariant. Out of memory.");
+ return BADGE_ERROR_OUT_OF_MEMORY;
+ }
result = _send_sync_badge(body, &reply, "set_disp_option");
if (reply)
return result;
}
-int badge_ipc_request_get_display(const char *pkgname, unsigned int *is_display)
+int badge_ipc_request_get_display(const char *pkgname, unsigned int *is_display, uid_t uid)
{
int result ;
GDBusMessage *reply = NULL;
ERR("Can't init dbus %d", result);
return result;
}
- body = g_variant_new("(s)", pkgname);
+
+ body = g_variant_new("(si)", pkgname, uid);
+ if (!body) {
+ ERR("Cannot create gvariant. Out of memory.");
+ return BADGE_ERROR_OUT_OF_MEMORY;
+ }
result = _send_sync_badge(body, &reply, "get_disp_option");
if (result == BADGE_ERROR_NONE) {
return result;
}
-int badge_ipc_setting_property_set(const char *pkgname, const char *property, const char *value)
+int badge_ipc_setting_property_set(const char *pkgname, const char *property, const char *value, uid_t uid)
{
int result;
GDBusMessage *reply = NULL;
ERR("Can't init dbus %d", result);
return result;
}
- body = g_variant_new("(sss)", pkgname, property, value);
+ body = g_variant_new("(sssi)", pkgname, property, value, uid);
result = _send_sync_badge(body, &reply, "set_noti_property");
if (reply)
return result;
}
-int badge_ipc_setting_property_get(const char *pkgname, const char *property, char **value)
+int badge_ipc_setting_property_get(const char *pkgname, const char *property, char **value, uid_t uid)
{
int result;
GDBusMessage *reply = NULL;
ERR("Can't init dbus %d", result);
return result;
}
- body = g_variant_new("(ss)", pkgname, property);
+ body = g_variant_new("(ssi)", pkgname, property, uid);
result = _send_sync_badge(body, &reply, "get_noti_property");
if (result == BADGE_ERROR_NONE) {
#include <stdlib.h>
#include <stdarg.h>
+#include <unistd.h>
#include <sqlite3.h>
#include <db-util.h>
#include <tzplatform_config.h>
return result;
}
-EXPORT_API int badge_setting_db_set(const char *pkgname, const char *property, const char *value)
+EXPORT_API int badge_setting_db_set(const char *pkgname, const char *property, const char *value, uid_t uid)
{
int ret = BADGE_ERROR_NONE;
int result = BADGE_ERROR_NONE;
return result;
}
-EXPORT_API int badge_setting_db_get(const char *pkgname, const char *property, char **value)
+EXPORT_API int badge_setting_db_get(const char *pkgname, const char *property, char **value, uid_t uid)
{
int ret = BADGE_ERROR_NONE;
int result = BADGE_ERROR_NONE;
return result;
}
-EXPORT_API int badge_setting_property_set(const char *pkgname, const char *property, const char *value)
+EXPORT_API int badge_setting_property_set_for_uid(const char *pkgname, const char *property, const char *value, uid_t uid)
{
int ret = 0;
if (!value)
return BADGE_ERROR_INVALID_PARAMETER;
- ret = badge_ipc_setting_property_set(pkgname, property, value);
+ ret = badge_ipc_setting_property_set(pkgname, property, value, uid);
if (ret != BADGE_ERROR_NONE)
return ret;
return BADGE_ERROR_NONE;
}
-EXPORT_API int badge_setting_property_get(const char *pkgname, const char *property, char **value)
+EXPORT_API int badge_setting_property_set(const char *pkgname, const char *property, const char *value)
+{
+ return badge_setting_property_set_for_uid(pkgname, property, value, getuid());
+}
+
+EXPORT_API int badge_setting_property_get_for_uid(const char *pkgname, const char *property, char **value, uid_t uid)
{
int ret = 0;
if (!value)
return BADGE_ERROR_INVALID_PARAMETER;
- ret = badge_ipc_setting_property_get(pkgname, property, value);
+ ret = badge_ipc_setting_property_get(pkgname, property, value, uid);
if (ret != BADGE_ERROR_NONE)
return ret;
return BADGE_ERROR_NONE;
}
+
+EXPORT_API int badge_setting_property_get(const char *pkgname, const char *property, char **value)
+{
+ return badge_setting_property_get_for_uid(pkgname, property, value, getuid());
+}