summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSangyoon Jang <s89.jang@samsung.com>2015-07-10 16:04:28 +0900
committerSangyoon Jang <s89.jang@samsung.com>2015-07-13 13:25:38 +0900
commit8c76ba8a86e24a6fd3d4ece4322e8038790e50fd (patch)
tree0b5aeed3035f067226f29972fdd41f2564354998
parentdb50063eb5c60442aea2140840848f7023086b90 (diff)
downloadalarm-manager-8c76ba8a86e24a6fd3d4ece4322e8038790e50fd.tar.gz
alarm-manager-8c76ba8a86e24a6fd3d4ece4322e8038790e50fd.tar.bz2
alarm-manager-8c76ba8a86e24a6fd3d4ece4322e8038790e50fd.zip
each user can access own alarm only add uid column to alarmmgr db Change-Id: Ifaf117d56b2d93429001866c681610676dc828a4 Signed-off-by: Sangyoon Jang <s89.jang@samsung.com>
-rw-r--r--alarm-manager-registry.c53
-rw-r--r--alarm-manager-schedule.c9
-rw-r--r--alarm-manager.c185
-rw-r--r--include/alarm-internal.h4
4 files changed, 161 insertions, 90 deletions
diff --git a/alarm-manager-registry.c b/alarm-manager-registry.c
index 21c4c12..3465859 100644
--- a/alarm-manager-registry.c
+++ b/alarm-manager-registry.c
@@ -57,7 +57,7 @@ bool _save_alarms(__alarm_info_t *__alarm_info)
alarm_mode_t *mode = &alarm_info->mode;
char *query = sqlite3_mprintf("insert into alarmmgr( alarm_id, start,\
- end, pid, caller_pkgid, callee_pkgid, app_unique_name, app_service_name, app_service_name_mod, bundle, year,\
+ end, uid, pid, caller_pkgid, callee_pkgid, app_unique_name, app_service_name, app_service_name_mod, bundle, year,\
month, day, hour, min, sec, day_of_week, repeat,\
alarm_type, reserved_info, dst_service_name, dst_service_name_mod)\
values (%d,%d,%d,%d,%Q,%Q,%Q,%Q,%Q,%Q,%d,%d,%d,%d,%d,%d,%d,%d,\
@@ -65,6 +65,7 @@ bool _save_alarms(__alarm_info_t *__alarm_info)
__alarm_info->alarm_id,
(int)__alarm_info->start,
(int)__alarm_info->end,
+ __alarm_info->uid,
__alarm_info->pid,
(char *)g_quark_to_string(__alarm_info->quark_caller_pkgid),
(char *)g_quark_to_string(__alarm_info->quark_callee_pkgid),
@@ -110,13 +111,14 @@ bool _update_alarms(__alarm_info_t *__alarm_info)
alarm_mode_t *mode = &alarm_info->mode;
char *query = sqlite3_mprintf("update alarmmgr set start=%d, end=%d,\
- pid=%d, caller_pkgid=%Q, callee_pkgid=%Q, app_unique_name=%Q, app_service_name=%Q, app_service_name_mod=%Q,\
+ uid=%d, pid=%d, caller_pkgid=%Q, callee_pkgid=%Q, app_unique_name=%Q, app_service_name=%Q, app_service_name_mod=%Q,\
bundle=%Q, year=%d, month=%d, day=%d, hour=%d, min=%d, sec=%d,\
day_of_week=%d, repeat=%d, alarm_type=%d,\
reserved_info=%d, dst_service_name=%Q, dst_service_name_mod=%Q\
where alarm_id=%d",\
(int)__alarm_info->start,
(int)__alarm_info->end,
+ __alarm_info->uid,
__alarm_info->pid,
(char *)g_quark_to_string(__alarm_info->quark_caller_pkgid),
(char *)g_quark_to_string(__alarm_info->quark_callee_pkgid),
@@ -172,6 +174,7 @@ bool _delete_alarms(alarm_id_t alarm_id)
bool _load_alarms_from_registry()
{
int i = 0;
+ int col_idx;
char query[MAX_QUERY_LEN] = {0,};
sqlite3_stmt *stmt = NULL;
const char *tail = NULL;
@@ -196,6 +199,7 @@ bool _load_alarms_from_registry()
}
for (i = 0; SQLITE_ROW == sqlite3_step(stmt); i++) {
+ col_idx = 0;
__alarm_info = malloc(sizeof(__alarm_info_t));
if (G_UNLIKELY(__alarm_info == NULL)) {
@@ -206,36 +210,37 @@ bool _load_alarms_from_registry()
start = &alarm_info->start;
mode = &alarm_info->mode;
- __alarm_info->alarm_id = sqlite3_column_int(stmt, 0);
- __alarm_info->start = sqlite3_column_int(stmt, 1);
- __alarm_info->end = sqlite3_column_int(stmt, 2);
- __alarm_info->pid = sqlite3_column_int(stmt, 3);
+ __alarm_info->alarm_id = sqlite3_column_int(stmt, col_idx++);
+ __alarm_info->start = sqlite3_column_int(stmt, col_idx++);
+ __alarm_info->end = sqlite3_column_int(stmt, col_idx++);
+ __alarm_info->uid = sqlite3_column_int(stmt, col_idx++);
+ __alarm_info->pid = sqlite3_column_int(stmt, col_idx++);
- strncpy(caller_pkgid, (const char *)sqlite3_column_text(stmt, 4),
+ strncpy(caller_pkgid, (const char *)sqlite3_column_text(stmt, col_idx++),
MAX_PKG_ID_LEN - 1);
- strncpy(callee_pkgid, (const char *)sqlite3_column_text(stmt, 5),
+ strncpy(callee_pkgid, (const char *)sqlite3_column_text(stmt, col_idx++),
MAX_PKG_ID_LEN - 1);
- strncpy(app_unique_name, (const char *)sqlite3_column_text(stmt, 6),
+ strncpy(app_unique_name, (const char *)sqlite3_column_text(stmt, col_idx++),
MAX_SERVICE_NAME_LEN - 1);
- strncpy(app_service_name, (const char *)sqlite3_column_text(stmt, 7),
+ strncpy(app_service_name, (const char *)sqlite3_column_text(stmt, col_idx++),
MAX_SERVICE_NAME_LEN - 1);
- strncpy(app_service_name_mod, (const char *)sqlite3_column_text(stmt, 8),
+ strncpy(app_service_name_mod, (const char *)sqlite3_column_text(stmt, col_idx++),
MAX_SERVICE_NAME_LEN - 1);
- strncpy(bundle, (const char *)sqlite3_column_text(stmt, 9),
+ strncpy(bundle, (const char *)sqlite3_column_text(stmt, col_idx++),
MAX_BUNDLE_NAME_LEN - 1);
- start->year = sqlite3_column_int(stmt, 10);
- start->month = sqlite3_column_int(stmt, 11);
- start->day = sqlite3_column_int(stmt, 12);
- start->hour = sqlite3_column_int(stmt, 13);
- start->min = sqlite3_column_int(stmt, 14);
- start->sec = sqlite3_column_int(stmt, 15);
- mode->u_interval.day_of_week = sqlite3_column_int(stmt, 16);
- mode->repeat = sqlite3_column_int(stmt, 17);
- alarm_info->alarm_type = sqlite3_column_int(stmt, 18);
- alarm_info->reserved_info = sqlite3_column_int(stmt, 19);
- strncpy(dst_service_name, (const char *)sqlite3_column_text(stmt, 20),
+ start->year = sqlite3_column_int(stmt, col_idx++);
+ start->month = sqlite3_column_int(stmt, col_idx++);
+ start->day = sqlite3_column_int(stmt, col_idx++);
+ start->hour = sqlite3_column_int(stmt, col_idx++);
+ start->min = sqlite3_column_int(stmt, col_idx++);
+ start->sec = sqlite3_column_int(stmt, col_idx++);
+ mode->u_interval.day_of_week = sqlite3_column_int(stmt, col_idx++);
+ mode->repeat = sqlite3_column_int(stmt, col_idx++);
+ alarm_info->alarm_type = sqlite3_column_int(stmt, col_idx++);
+ alarm_info->reserved_info = sqlite3_column_int(stmt, col_idx++);
+ strncpy(dst_service_name, (const char *)sqlite3_column_text(stmt, col_idx++),
MAX_SERVICE_NAME_LEN - 1);
- strncpy(dst_service_name_mod, (const char *)sqlite3_column_text(stmt, 21),
+ strncpy(dst_service_name_mod, (const char *)sqlite3_column_text(stmt, col_idx++),
MAX_SERVICE_NAME_LEN - 1);
__alarm_info->quark_caller_pkgid = g_quark_from_string(caller_pkgid);
diff --git a/alarm-manager-schedule.c b/alarm-manager-schedule.c
index c000c31..e882051 100644
--- a/alarm-manager-schedule.c
+++ b/alarm-manager-schedule.c
@@ -87,11 +87,12 @@ bool _add_to_scheduled_alarm_list(__alarm_info_t *__alarm_info)
alarm->used = true;
alarm->alarm_id = __alarm_info->alarm_id;
+ alarm->uid = __alarm_info->uid;
alarm->pid = __alarm_info->pid;
alarm->__alarm_info = __alarm_info;
- SECURE_LOGD("%s :alarm->pid =%d, app_service_name=%s(%u)\n",
- __FUNCTION__, alarm->pid,
+ SECURE_LOGD("%s :alarm->uid =%d, alarm->pid =%d, app_service_name=%s(%u)\n",
+ __FUNCTION__, alarm->uid, alarm->pid,
g_quark_to_string(alarm->__alarm_info->quark_app_service_name),
alarm->__alarm_info->quark_app_service_name);
@@ -121,7 +122,7 @@ bool _add_to_scheduled_alarm_list(__alarm_info_t *__alarm_info)
return true;
}
-bool _remove_from_scheduled_alarm_list(int pid, alarm_id_t alarm_id)
+bool _remove_from_scheduled_alarm_list(uid_t uid, alarm_id_t alarm_id)
{
bool result = false;
GSList *iter = NULL;
@@ -129,7 +130,7 @@ bool _remove_from_scheduled_alarm_list(int pid, alarm_id_t alarm_id)
for (iter = g_scheduled_alarm_list; iter != NULL; iter = g_slist_next(iter)) {
alarm = iter->data;
- if (alarm->alarm_id == alarm_id) {
+ if (alarm->uid == uid && alarm->alarm_id == alarm_id) {
g_scheduled_alarm_list = g_slist_remove(g_scheduled_alarm_list, iter->data);
g_free(alarm);
result = true;
diff --git a/alarm-manager.c b/alarm-manager.c
index 1b3ded2..a4be97c 100644
--- a/alarm-manager.c
+++ b/alarm-manager.c
@@ -131,24 +131,23 @@ bool is_time_changed = false; // for calculating next duetime
static bool __alarm_add_to_list(__alarm_info_t *__alarm_info);
static void __alarm_generate_alarm_id(__alarm_info_t *__alarm_info, alarm_id_t *alarm_id);
-static bool __alarm_update_in_list(int pid, alarm_id_t alarm_id,
- __alarm_info_t *__alarm_info,
+static bool __alarm_update_in_list(__alarm_info_t *__alarm_info,
int *error_code);
-static bool __alarm_remove_from_list(int pid, alarm_id_t alarm_id,
+static bool __alarm_remove_from_list(uid_t uid, alarm_id_t alarm_id,
int *error_code);
static bool __alarm_set_start_and_end_time(alarm_info_t *alarm_info,
__alarm_info_t *__alarm_info);
static bool __alarm_update_due_time_of_all_items_in_list(double diff_time);
-static bool __alarm_create(alarm_info_t *alarm_info, alarm_id_t *alarm_id,
+static bool __alarm_create(alarm_info_t *alarm_info, alarm_id_t *alarm_id, uid_t uid,
int pid, periodic_method_e method, long requested_interval, int is_ref,
char *app_service_name, char *app_service_name_mod,
const char *dst_service_name, const char *dst_service_name_mod,
int *error_code);
static bool __alarm_create_appsvc(alarm_info_t *alarm_info, alarm_id_t *alarm_id,
- int pid, char *bundle_data, int *error_code);
+ uid_t uid, int pid, char *bundle_data, int *error_code);
-static bool __alarm_delete(int pid, alarm_id_t alarm_id, int *error_code);
-static bool __alarm_update(int pid, char *app_service_name, alarm_id_t alarm_id,
+static bool __alarm_delete(uid_t uid, alarm_id_t alarm_id, int *error_code);
+static bool __alarm_update(uid_t uid, int pid, char *app_service_name, alarm_id_t alarm_id,
alarm_info_t *alarm_info, int *error_code);
static void __alarm_send_noti_to_application(const char *app_service_name, alarm_id_t alarm_id);
static void __alarm_expired();
@@ -359,8 +358,7 @@ static bool __alarm_add_to_list(__alarm_info_t *__alarm_info)
return true;
}
-static bool __alarm_update_in_list(int pid, alarm_id_t alarm_id,
- __alarm_info_t *__alarm_info,
+static bool __alarm_update_in_list(__alarm_info_t *__alarm_info,
int *error_code)
{
bool found = false;
@@ -371,8 +369,8 @@ static bool __alarm_update_in_list(int pid, alarm_id_t alarm_id,
for (iter = alarm_context.alarms; iter != NULL;
iter = g_slist_next(iter)) {
entry = iter->data;
- if (entry->alarm_id == alarm_id) {
-
+ if (entry->uid == __alarm_info->uid &&
+ entry->alarm_id == __alarm_info->alarm_id) {
found = true;
__alarm_info->quark_app_unique_name =
entry->quark_app_unique_name;
@@ -399,7 +397,7 @@ static bool __alarm_update_in_list(int pid, alarm_id_t alarm_id,
return true;
}
-static bool __alarm_remove_from_list(int pid, alarm_id_t alarm_id,
+static bool __alarm_remove_from_list(uid_t uid, alarm_id_t alarm_id,
int *error_code)
{
bool found = false;
@@ -414,7 +412,7 @@ static bool __alarm_remove_from_list(int pid, alarm_id_t alarm_id,
for (iter = alarm_context.alarms; iter != NULL; iter = g_slist_next(iter)) {
entry = iter->data;
- if (entry->alarm_id == alarm_id) {
+ if (entry->uid == uid && entry->alarm_id == alarm_id) {
alarm_info = &entry->alarm_info;
ALARM_MGR_EXCEPTION_PRINT("[alarm-server]:Remove alarm id(%d)", entry->alarm_id);
@@ -654,7 +652,7 @@ static bool __alarm_update_due_time_of_all_items_in_list(double diff_time)
}
static bool __alarm_create_appsvc(alarm_info_t *alarm_info, alarm_id_t *alarm_id,
- int pid, char *bundle_data, int *error_code)
+ uid_t uid, int pid, char *bundle_data, int *error_code)
{
time_t current_time;
time_t due_time;
@@ -680,6 +678,7 @@ static bool __alarm_create_appsvc(alarm_info_t *alarm_info, alarm_id_t *alarm_id
return false;
}
+ __alarm_info->uid = uid;
__alarm_info->pid = pid;
__alarm_info->alarm_id = -1;
@@ -695,7 +694,7 @@ static bool __alarm_create_appsvc(alarm_info_t *alarm_info, alarm_id_t *alarm_id
__alarm_info->quark_caller_pkgid = g_quark_from_string("null");
if (aul_app_get_appid_bypid(pid, caller_appid, 256) == AUL_R_OK) {
- if (pkgmgrinfo_appinfo_get_appinfo(caller_appid, &caller_handle) == PMINFO_R_OK) {
+ if (pkgmgrinfo_appinfo_get_usr_appinfo(caller_appid, uid, &caller_handle) == PMINFO_R_OK) {
if (pkgmgrinfo_appinfo_get_pkgid(caller_handle, &caller_pkgid) == PMINFO_R_OK) {
if (caller_pkgid) {
__alarm_info->quark_caller_pkgid = g_quark_from_string(caller_pkgid);
@@ -710,7 +709,7 @@ static bool __alarm_create_appsvc(alarm_info_t *alarm_info, alarm_id_t *alarm_id
b = bundle_decode((bundle_raw *)bundle_data, strlen(bundle_data));
callee_appid = appsvc_get_appid(b);
- if (pkgmgrinfo_appinfo_get_appinfo(callee_appid, &callee_handle) == PMINFO_R_OK) {
+ if (pkgmgrinfo_appinfo_get_usr_appinfo(callee_appid, uid, &callee_handle) == PMINFO_R_OK) {
if (pkgmgrinfo_appinfo_get_pkgid(callee_handle, &callee_pkgid) == PMINFO_R_OK) {
if (callee_pkgid) {
__alarm_info->quark_callee_pkgid = g_quark_from_string(callee_pkgid);
@@ -790,7 +789,7 @@ static bool __alarm_create_appsvc(alarm_info_t *alarm_info, alarm_id_t *alarm_id
return true;
}
-static bool __alarm_create(alarm_info_t *alarm_info, alarm_id_t *alarm_id,
+static bool __alarm_create(alarm_info_t *alarm_info, alarm_id_t *alarm_id, uid_t uid,
int pid, periodic_method_e method, long requested_interval, int is_ref,
char *app_service_name, char *app_service_name_mod,
const char *dst_service_name, const char *dst_service_name_mod,
@@ -812,6 +811,7 @@ static bool __alarm_create(alarm_info_t *alarm_info, alarm_id_t *alarm_id,
*error_code = ERR_ALARM_SYSTEM_FAIL;
return false;
}
+ __alarm_info->uid = uid;
__alarm_info->pid = pid;
__alarm_info->alarm_id = -1;
__alarm_info->quark_caller_pkgid = g_quark_from_string("null");
@@ -821,7 +821,7 @@ static bool __alarm_create(alarm_info_t *alarm_info, alarm_id_t *alarm_id,
// Get caller_appid to get caller's package id. There is no callee.
if (aul_app_get_appid_bypid(pid, caller_appid, 256) == AUL_R_OK) {
- if (pkgmgrinfo_appinfo_get_appinfo(caller_appid, &caller_handle) == PMINFO_R_OK) {
+ if (pkgmgrinfo_appinfo_get_usr_appinfo(caller_appid, uid, &caller_handle) == PMINFO_R_OK) {
if (pkgmgrinfo_appinfo_get_pkgid(caller_handle, &caller_pkgid) == PMINFO_R_OK) {
if (caller_pkgid) {
__alarm_info->quark_caller_pkgid = g_quark_from_string(caller_pkgid);
@@ -907,7 +907,7 @@ static bool __alarm_create(alarm_info_t *alarm_info, alarm_id_t *alarm_id,
return true;
}
-static bool __alarm_update(int pid, char *app_service_name, alarm_id_t alarm_id,
+static bool __alarm_update(uid_t uid, int pid, char *app_service_name, alarm_id_t alarm_id,
alarm_info_t *alarm_info, int *error_code)
{
time_t current_time;
@@ -923,6 +923,7 @@ static bool __alarm_update(int pid, char *app_service_name, alarm_id_t alarm_id,
return false;
}
+ __alarm_info->uid = uid;
__alarm_info->pid = pid;
__alarm_info->alarm_id = alarm_id;
@@ -943,14 +944,14 @@ static bool __alarm_update(int pid, char *app_service_name, alarm_id_t alarm_id,
}
due_time = _alarm_next_duetime(__alarm_info);
- if (!__alarm_update_in_list(pid, alarm_id, __alarm_info, error_code)) {
+ if (!__alarm_update_in_list(__alarm_info, error_code)) {
free(__alarm_info);
ALARM_MGR_EXCEPTION_PRINT("[alarm-server]: requested alarm_id "
"(%d) does not exist. so this value is invalid id.", alarm_id);
return false;
}
- result = _remove_from_scheduled_alarm_list(pid, alarm_id);
+ result = _remove_from_scheduled_alarm_list(uid, alarm_id);
if (result == true && g_slist_length(g_scheduled_alarm_list) == 0) {
/*there is no scheduled alarm */
@@ -1014,18 +1015,18 @@ static bool __alarm_update(int pid, char *app_service_name, alarm_id_t alarm_id,
return true;
}
-static bool __alarm_delete(int pid, alarm_id_t alarm_id, int *error_code)
+static bool __alarm_delete(uid_t uid, alarm_id_t alarm_id, int *error_code)
{
bool result = false;
- SECURE_LOGD("[alarm-server]:delete alarm: alarm(%d) pid(%d)\n", alarm_id, pid);
- result = _remove_from_scheduled_alarm_list(pid, alarm_id);
+ SECURE_LOGD("[alarm-server]:delete alarm: alarm(%d) uid(%d)\n", alarm_id, uid);
+ result = _remove_from_scheduled_alarm_list(uid, alarm_id);
- if (!__alarm_remove_from_list(pid, alarm_id, error_code)) {
+ if (!__alarm_remove_from_list(uid, alarm_id, error_code)) {
SECURE_LOGE("[alarm-server]:delete alarm: "
- "alarm(%d) pid(%d) has failed with error_code(%d)\n",
- alarm_id, pid, *error_code);
+ "alarm(%d) uid(%d) has failed with error_code(%d)\n",
+ alarm_id, uid, *error_code);
return false;
}
@@ -1111,6 +1112,30 @@ static void __alarm_send_noti_to_application(const char *app_service_name, alarm
NULL);
}
+static uid_t __get_caller_uid(const char *name)
+{
+ guint uid;
+ GVariant *ret;
+ GError *error = NULL;
+
+ ret = g_dbus_connection_call_sync(
+ alarm_context.connection,
+ "org.freedesktop.DBus",
+ "/org/freedesktop/DBus",
+ "org.freedesktop.DBus",
+ "GetConnectionUnixUser",
+ g_variant_new("(s)", name),
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ NULL,
+ &error);
+ g_variant_get(ret, "(u)", &uid);
+ g_variant_unref(ret);
+
+ return uid;
+}
+
static int __get_caller_pid(const char *name)
{
guint pid;
@@ -1341,7 +1366,7 @@ static void __alarm_expired()
char alarm_id_str[32] = { 0, };
if (__alarm_info->alarm_info.alarm_type & ALARM_TYPE_WITHCB) {
- __alarm_remove_from_list(__alarm_info->pid, alarm_id, NULL);
+ __alarm_remove_from_list(__alarm_info->uid, alarm_id, NULL);
goto done;
}
@@ -1386,7 +1411,7 @@ static void __alarm_expired()
#endif
if (__alarm_info->alarm_info.mode.repeat == ALARM_REPEAT_MODE_ONCE) {
- __alarm_remove_from_list(__alarm_info->pid, alarm_id, NULL);
+ __alarm_remove_from_list(__alarm_info->uid, alarm_id, NULL);
} else {
_alarm_next_duetime(__alarm_info);
}
@@ -1520,7 +1545,7 @@ static int __on_app_uninstalled(uid_t target_uid, int req_id, const char *pkg_ty
if ((caller_pkgid && strncmp(pkgid, caller_pkgid, strlen(pkgid)) == 0) ||
(callee_pkgid && strncmp(pkgid, callee_pkgid, strlen(pkgid)) == 0))
{
- if (_remove_from_scheduled_alarm_list(entry->pid, entry->alarm_id))
+ if (_remove_from_scheduled_alarm_list(entry->uid, entry->alarm_id))
{
is_deleted = true;
}
@@ -2069,9 +2094,11 @@ gboolean alarm_manager_alarm_create_appsvc(AlarmManager *pObject, GDBusMethodInv
char log_message[ALARMMGR_LOG_MESSAGE_SIZE] = {0,};
#endif
bool ret = true;
+ uid_t uid;
int pid;
const char *name = g_dbus_method_invocation_get_sender(invoc);
+ uid = __get_caller_uid(name);
pid = __get_caller_pid(name);
alarm_info.start.year = start_year;
@@ -2091,7 +2118,7 @@ gboolean alarm_manager_alarm_create_appsvc(AlarmManager *pObject, GDBusMethodInv
alarm_info.alarm_type = alarm_type;
alarm_info.reserved_info = reserved_info;
- if (!__alarm_create_appsvc(&alarm_info, &alarm_id, pid, bundle_data, &return_code)) {
+ if (!__alarm_create_appsvc(&alarm_info, &alarm_id, uid, pid, bundle_data, &return_code)) {
ALARM_MGR_EXCEPTION_PRINT("Unable to create alarm! return_code[%d]", return_code);
#ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
strncpy(log_tag, "FAIL: CREATE", strlen("FAIL: CREATE"));
@@ -2107,8 +2134,8 @@ gboolean alarm_manager_alarm_create_appsvc(AlarmManager *pObject, GDBusMethodInv
g_dbus_method_invocation_return_value(invoc, g_variant_new("(ii)", alarm_id, return_code));
#ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
- sprintf(log_message, "alarmID: %d, pid: %d, duetime: %d-%d-%d %02d:%02d:%02d",
- alarm_id, pid, start_year, start_month, start_day, start_hour, start_min, start_sec);
+ sprintf(log_message, "alarmID: %d, uid: %d, pid: %d, duetime: %d-%d-%d %02d:%02d:%02d",
+ alarm_id, uid, pid, start_year, start_month, start_day, start_hour, start_min, start_sec);
__save_module_log(log_tag, log_message);
#endif
@@ -2135,10 +2162,12 @@ gboolean alarm_manager_alarm_create(AlarmManager *obj, GDBusMethodInvocation *in
char log_message[ALARMMGR_LOG_MESSAGE_SIZE] = {0,};
#endif
bool ret = true;
+ uid_t uid;
int pid;
const char *name = g_dbus_method_invocation_get_sender(invoc);
pid = __get_caller_pid(name);
+ uid = __get_caller_uid(name);
alarm_info.start.year = start_year;
alarm_info.start.month = start_month;
@@ -2157,7 +2186,7 @@ gboolean alarm_manager_alarm_create(AlarmManager *obj, GDBusMethodInvocation *in
alarm_info.alarm_type = alarm_type;
alarm_info.reserved_info = reserved_info;
- if (!__alarm_create(&alarm_info, &alarm_id, pid, 0, 0, 0, app_service_name,app_service_name_mod,
+ if (!__alarm_create(&alarm_info, &alarm_id, uid, pid, 0, 0, 0, app_service_name,app_service_name_mod,
reserved_service_name, reserved_service_name_mod, &return_code)) {
ALARM_MGR_EXCEPTION_PRINT("Unable to create alarm! return_code[%d]", return_code);
#ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
@@ -2174,8 +2203,8 @@ gboolean alarm_manager_alarm_create(AlarmManager *obj, GDBusMethodInvocation *in
g_dbus_method_invocation_return_value(invoc, g_variant_new("(ii)", alarm_id, return_code));
#ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
- sprintf(log_message, "alarmID: %d, pid: %d, duetime: %d-%d-%d %02d:%02d:%02d",
- alarm_id, pid, start_year, start_month, start_day, start_hour, start_min, start_sec);
+ sprintf(log_message, "alarmID: %d, uid: %d, pid: %d, duetime: %d-%d-%d %02d:%02d:%02d",
+ alarm_id, uid, pid, start_year, start_month, start_day, start_hour, start_min, start_sec);
__save_module_log(log_tag, log_message);
#endif
@@ -2193,9 +2222,11 @@ gboolean alarm_manager_alarm_create_periodic(AlarmManager *obj, GDBusMethodInvoc
char log_tag[ALARMMGR_LOG_TAG_SIZE] = {0,};
char log_message[ALARMMGR_LOG_MESSAGE_SIZE] = {0,};
bool ret = true;
+ uid_t uid;
int pid;
const char *name = g_dbus_method_invocation_get_sender(invoc);
+ uid = __get_caller_uid(name);
pid = __get_caller_pid(name);
if (retval != ALARMMGR_RESULT_SUCCESS) {
@@ -2203,12 +2234,13 @@ gboolean alarm_manager_alarm_create_periodic(AlarmManager *obj, GDBusMethodInvoc
g_dbus_method_invocation_return_value(invoc,
g_variant_new("(ii)", alarm_id, return_code));
#ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
+ /* TODO: fix the log message */
if (is_ref)
sprintf(log_message,
- "pid: %d, Smack denied (alarm-server::alarm-ref-periodic, w)", pid);
+ "uid: %d, pid: %d, Smack denied (alarm-server::alarm-ref-periodic, w)", uid, pid);
else
sprintf(log_message,
- "pid: %d, Smack denied (alarm-server::alarm-periodic, w)", pid);
+ "uid: %d, pid: %d, Smack denied (alarm-server::alarm-periodic, w)", uid, pid);
__save_module_log("FAIL: CREATE", log_message);
#endif
@@ -2243,7 +2275,7 @@ gboolean alarm_manager_alarm_create_periodic(AlarmManager *obj, GDBusMethodInvoc
alarm_info.mode.u_interval.interval = __get_proper_interval(interval * 60);
}
- if (!__alarm_create(&alarm_info, &alarm_id, pid, method, interval * 60, is_ref,
+ if (!__alarm_create(&alarm_info, &alarm_id, uid, pid, method, interval * 60, is_ref,
app_service_name, app_service_name_mod,
"null", "null", &return_code)) {
ALARM_MGR_EXCEPTION_PRINT("Unable to create alarm! return_code[%d]", return_code);
@@ -2261,8 +2293,8 @@ gboolean alarm_manager_alarm_create_periodic(AlarmManager *obj, GDBusMethodInvoc
g_dbus_method_invocation_return_value(invoc,
g_variant_new("(ii)", alarm_id, return_code));
#ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
- sprintf(log_message, "alarmID: %d, pid: %d, duetime: %d-%d-%d %02d:%02d:%02d",
- alarm_id, pid, alarm_info.start.year, alarm_info.start.month,
+ sprintf(log_message, "alarmID: %d, uid: %d, pid: %d, duetime: %d-%d-%d %02d:%02d:%02d",
+ alarm_id, uid, pid, alarm_info.start.year, alarm_info.start.month,
alarm_info.start.day, alarm_info.start.hour,
alarm_info.start.min, alarm_info.start.sec);
__save_module_log(log_tag, log_message);
@@ -2280,13 +2312,15 @@ gboolean alarm_manager_alarm_delete(AlarmManager *obj, GDBusMethodInvocation *in
char log_message[ALARMMGR_LOG_MESSAGE_SIZE] = {0,};
#endif
bool ret = true;
+ uid_t uid;
int pid;
const char *name = g_dbus_method_invocation_get_sender(invoc);
+ uid = __get_caller_uid(name);
pid = __get_caller_pid(name);
- if (!__alarm_delete(pid, alarm_id, &return_code)) {
+ if (!__alarm_delete(uid, alarm_id, &return_code)) {
ALARM_MGR_EXCEPTION_PRINT("Unable to delete the alarm! alarm_id[%d], return_code[%d]", alarm_id, return_code);
#ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
strncpy(log_tag, "FAIL: DELETE", strlen("FAIL: DELETE"));
@@ -2302,7 +2336,7 @@ gboolean alarm_manager_alarm_delete(AlarmManager *obj, GDBusMethodInvocation *in
g_dbus_method_invocation_return_value(invoc, g_variant_new("(i)", return_code));
#ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
- sprintf(log_message, "alarmID: %d, pid: %d", alarm_id, pid);
+ sprintf(log_message, "alarmID: %d, uid: %d, pid: %d", alarm_id, uid, pid);
__save_module_log(log_tag, log_message);
#endif
@@ -2322,9 +2356,11 @@ gboolean alarm_manager_alarm_delete_all(AlarmManager *obj, GDBusMethodInvocation
#ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
char log_message[ALARMMGR_LOG_MESSAGE_SIZE] = {0,};
#endif
+ uid_t uid;
int pid;
const char *name = g_dbus_method_invocation_get_sender(invoc);
+ uid = __get_caller_uid(name);
pid = __get_caller_pid(name);
if (!__get_caller_unique_name(pid, app_name)) {
@@ -2347,7 +2383,7 @@ gboolean alarm_manager_alarm_delete_all(AlarmManager *obj, GDBusMethodInvocation
SECURE_LOGD("Try to remove app_name[%s], alarm_id[%d]\n", tmp_appname, entry->alarm_id);
if (tmp_appname && strncmp(app_name, tmp_appname, strlen(tmp_appname)) == 0)
{
- if (_remove_from_scheduled_alarm_list(pid, entry->alarm_id))
+ if (_remove_from_scheduled_alarm_list(uid, entry->alarm_id))
{
is_deleted = true;
}
@@ -2381,7 +2417,7 @@ gboolean alarm_manager_alarm_delete_all(AlarmManager *obj, GDBusMethodInvocation
}
#ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
- sprintf(log_message, "pid: %d, unique_name: %s", pid, app_name);
+ sprintf(log_message, "uid: %d, pid: %d, unique_name: %s", uid, pid, app_name);
__save_module_log("DELETE ALL", log_message);
#endif
@@ -2407,9 +2443,11 @@ gboolean alarm_manager_alarm_update(AlarmManager *pObj, GDBusMethodInvocation *i
char log_tag[ALARMMGR_LOG_TAG_SIZE] = {0,};
char log_message[ALARMMGR_LOG_MESSAGE_SIZE] = {0,};
#endif
+ int uid;
int pid;
const char *name = g_dbus_method_invocation_get_sender(invoc);
+ uid = __get_caller_uid(name);
pid = __get_caller_pid(name);
alarm_info.start.year = start_year;
@@ -2429,7 +2467,7 @@ gboolean alarm_manager_alarm_update(AlarmManager *pObj, GDBusMethodInvocation *i
alarm_info.alarm_type = alarm_type;
alarm_info.reserved_info = reserved_info;
- if (!__alarm_update(pid, app_service_name, alarm_id, &alarm_info, &return_code)) {
+ if (!__alarm_update(uid, pid, app_service_name, alarm_id, &alarm_info, &return_code)) {
ALARM_MGR_EXCEPTION_PRINT("Unable to update the alarm! alarm_id[%d], return_code[%d]", alarm_id, return_code);
#ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
strncpy(log_tag, "FAIL: UPDATE", strlen("FAIL: UPDATE"));
@@ -2445,8 +2483,8 @@ gboolean alarm_manager_alarm_update(AlarmManager *pObj, GDBusMethodInvocation *i
g_dbus_method_invocation_return_value(invoc, g_variant_new("(i)", return_code));
#ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
- sprintf(log_message, "alarmID: %d, appname: %s, pid: %d, duetime: %d-%d-%d %02d:%02d:%02d",
- alarm_id, app_service_name, pid, start_year, start_month, start_day, start_hour, start_min, start_sec);
+ sprintf(log_message, "alarmID: %d, appname: %s, uid: %d, pid: %d, duetime: %d-%d-%d %02d:%02d:%02d",
+ alarm_id, app_service_name, uid, pid, start_year, start_month, start_day, start_hour, start_min, start_sec);
__save_module_log(log_tag, log_message);
#endif
@@ -2462,9 +2500,11 @@ gboolean alarm_manager_alarm_get_number_of_ids(AlarmManager *pObject, GDBusMetho
int retval = 0;
int num_of_ids = 0;
int return_code = ALARMMGR_RESULT_SUCCESS;
+ uid_t uid;
int pid;
const char *name = g_dbus_method_invocation_get_sender(invoc);
+ uid = __get_caller_uid(name);
pid = __get_caller_pid(name);
if (!__get_caller_unique_name(pid, app_name)) {
@@ -2473,18 +2513,19 @@ gboolean alarm_manager_alarm_get_number_of_ids(AlarmManager *pObject, GDBusMetho
return true;
}
- SECURE_LOGD("Called by process (pid:%d, unique_name:%s)", pid, app_name);
+ SECURE_LOGD("Called by process (uid:%d, pid:%d, unique_name:%s)", uid, pid, app_name);
for (gs_iter = alarm_context.alarms; gs_iter != NULL; gs_iter = g_slist_next(gs_iter)) {
entry = gs_iter->data;
SECURE_LOGD("app_name=%s, quark_app_unique_name=%s", app_name, g_quark_to_string(entry->quark_app_unique_name));
- if (strncmp(app_name, g_quark_to_string(entry->quark_app_unique_name), strlen(app_name)) == 0) {
+ if (entry->uid == uid &&
+ strncmp(app_name, g_quark_to_string(entry->quark_app_unique_name), strlen(app_name)) == 0) {
(num_of_ids)++;
- SECURE_LOGD("inc number of alarms of app (pid:%d, unique_name:%s) is %d.", pid, app_name, num_of_ids);
+ SECURE_LOGD("inc number of alarms of app (uid:%d, pid:%d, unique_name:%s) is %d.", uid, pid, app_name, num_of_ids);
}
}
- SECURE_LOGD("number of alarms of the process (pid:%d, unique_name:%s) is %d.", pid, app_name, num_of_ids);
+ SECURE_LOGD("number of alarms of the process (uid:%d, pid:%d, unique_name:%s) is %d.", uid, pid, app_name, num_of_ids);
g_dbus_method_invocation_return_value(invoc, g_variant_new("(ii)", num_of_ids, return_code));
return true;
}
@@ -2500,13 +2541,15 @@ gboolean alarm_manager_alarm_get_list_of_ids(AlarmManager *pObject, GDBusMethodI
GVariantBuilder* builder = NULL;
int num_of_ids = 0;
int return_code = ALARMMGR_RESULT_SUCCESS;
+ uid_t uid;
int pid;
const char *name = g_dbus_method_invocation_get_sender(invoc);
+ uid = __get_caller_uid(name);
pid = __get_caller_pid(name);
if (max_number_of_ids <= 0) {
- SECURE_LOGE("called for pid(%d), but max_number_of_ids(%d) is less than 0.", pid, max_number_of_ids);
+ SECURE_LOGE("called for uid(%d) pid(%d), but max_number_of_ids(%d) is less than 0.", uid, pid, max_number_of_ids);
g_dbus_method_invocation_return_value(invoc, g_variant_new("(@aiii)", g_variant_new("ai", NULL), num_of_ids, return_code));
return true;
}
@@ -2517,12 +2560,13 @@ gboolean alarm_manager_alarm_get_list_of_ids(AlarmManager *pObject, GDBusMethodI
return true;
}
- SECURE_LOGD("Called by process (pid:%d, unique_name=%s).", pid, app_name);
+ SECURE_LOGD("Called by process (uid: %d, pid:%d, unique_name=%s).", uid, pid, app_name);
builder = g_variant_builder_new(G_VARIANT_TYPE ("ai"));
for (gs_iter = alarm_context.alarms; gs_iter != NULL; gs_iter = g_slist_next(gs_iter)) {
entry = gs_iter->data;
- if (strncmp(app_name, g_quark_to_string(entry->quark_app_unique_name), strlen(app_name)) == 0) {
+ if (entry->uid == uid &&
+ strncmp(app_name, g_quark_to_string(entry->quark_app_unique_name), strlen(app_name)) == 0) {
g_variant_builder_add (builder, "i", entry->alarm_id);
index ++;
SECURE_LOGE("called for alarmid(%d), but max_number_of_ids(%d) index %d.", entry->alarm_id, max_number_of_ids, index);
@@ -2532,7 +2576,7 @@ gboolean alarm_manager_alarm_get_list_of_ids(AlarmManager *pObject, GDBusMethodI
arr = g_variant_new("ai", builder);
num_of_ids = index;
- SECURE_LOGE("Called by pid (%d), but max_number_of_ids(%d) return code %d.", pid, num_of_ids, return_code);
+ SECURE_LOGE("Called by uid (%d), pid (%d), but max_number_of_ids(%d) return code %d.", uid, pid, num_of_ids, return_code);
g_dbus_method_invocation_return_value(invoc, g_variant_new("(@aiii)", arr, num_of_ids, return_code));
g_variant_builder_unref(builder);
@@ -2548,12 +2592,16 @@ gboolean alarm_manager_alarm_get_appsvc_info(AlarmManager *pObject, GDBusMethodI
int retval = 0;
int return_code = ALARMMGR_RESULT_SUCCESS;
gchar *b_data = NULL;
+ uid_t uid;
+ const char *name = g_dbus_method_invocation_get_sender(invoc);
- SECURE_LOGD("called for alarm_id(%d)\n", alarm_id);
+ uid = __get_caller_uid(name);
+
+ SECURE_LOGD("called for uid(%d), alarm_id(%d)\n", uid, alarm_id);
for (gs_iter = alarm_context.alarms; gs_iter != NULL; gs_iter = g_slist_next(gs_iter)) {
entry = gs_iter->data;
- if (entry->alarm_id == alarm_id) {
+ if (entry->uid == uid && entry->alarm_id == alarm_id) {
found = true;
b_data = g_strdup(g_quark_to_string(entry->quark_bundle));
break;
@@ -2583,11 +2631,15 @@ gboolean alarm_manager_alarm_get_info(AlarmManager *pObject, GDBusMethodInvocati
alarm_info_t *alarm_info = NULL;
int retval = 0;
int return_code = ALARMMGR_RESULT_SUCCESS;
+ uid_t uid;
+ const char *name = g_dbus_method_invocation_get_sender(invoc);
- SECURE_LOGD("called for alarm_id(%d)\n", alarm_id);
+ uid = __get_caller_uid(name);
+
+ SECURE_LOGD("called for uid(%d), alarm_id(%d)\n", uid, alarm_id);
for (gs_iter = alarm_context.alarms; gs_iter != NULL; gs_iter = g_slist_next(gs_iter)) {
entry = gs_iter->data;
- if (entry->alarm_id == alarm_id) {
+ if (entry->uid == uid && entry->alarm_id == alarm_id) {
alarm_info = &(entry->alarm_info);
break;
}
@@ -2616,11 +2668,15 @@ gboolean alarm_manager_alarm_get_next_duetime(AlarmManager *pObject, GDBusMethod
int retval = 0;
int return_code = ALARMMGR_RESULT_SUCCESS;
time_t duetime = 0;
+ uid_t uid;
+ const char *name = g_dbus_method_invocation_get_sender(invoc);
+
+ uid = __get_caller_uid(name);
SECURE_LOGD("called for alarm_id(%d)\n", alarm_id);
for (gs_iter = alarm_context.alarms; gs_iter != NULL; gs_iter = g_slist_next(gs_iter)) {
entry = gs_iter->data;
- if (entry->alarm_id == alarm_id) {
+ if (entry->uid == uid && entry->alarm_id == alarm_id) {
find_item = entry;
break;
}
@@ -2667,6 +2723,10 @@ gboolean alarm_manager_alarm_get_all_info(AlarmManager *pObject, GDBusMethodInvo
GSList *gs_iter = NULL;
__alarm_info_t *entry = NULL;
char *error_message = NULL;
+ uid_t uid;
+ const char *name = g_dbus_method_invocation_get_sender(invoc);
+
+ uid = __get_caller_uid(name);
// Open a DB
time(&current_time);
@@ -2702,6 +2762,8 @@ gboolean alarm_manager_alarm_get_all_info(AlarmManager *pObject, GDBusMethodInvo
int index = 0;
for (gs_iter = alarm_context.alarms; gs_iter != NULL; gs_iter = g_slist_next(gs_iter)) {
entry = gs_iter->data;
+ if (entry->uid != uid)
+ continue;
++index;
SECURE_LOGD("#%d alarm id[%d] app_name[%s] duetime[%d]",
index, entry->alarm_id, g_quark_to_string(entry->quark_app_unique_name), entry->start);
@@ -2968,6 +3030,7 @@ static bool __initialize_dbus()
(alarm_id integer primary key,\
start integer,\
end integer,\
+ uid integer,\
pid integer,\
caller_pkgid text,\
callee_pkgid text,\
diff --git a/include/alarm-internal.h b/include/alarm-internal.h
index e0071a7..87b8d8b 100644
--- a/include/alarm-internal.h
+++ b/include/alarm-internal.h
@@ -131,7 +131,7 @@ bool _send_alarm_get_info(alarm_context_t context, alarm_id_t alarm_id, alarm_in
bool _send_alarm_get_next_duetime(alarm_context_t context, alarm_id_t alarm_id, time_t* duetime, int *error_code);
bool _send_alarm_get_all_info(alarm_context_t context, char ** db_path, int *error_code);
bool _send_alarm_reset(alarm_context_t context, int *error_code);
-bool _remove_from_scheduled_alarm_list(int pid, alarm_id_t alarm_id);
+bool _remove_from_scheduled_alarm_list(uid_t uid, alarm_id_t alarm_id);
bool _load_alarms_from_registry();
bundle *_send_alarm_get_appsvc_info(alarm_context_t context, alarm_id_t alarm_id, int *error_code);
bool _send_alarm_set_rtc_time(alarm_context_t context, alarm_date_t *time, int *error_code);
@@ -144,6 +144,7 @@ typedef struct {
time_t end;
alarm_id_t alarm_id;
+ uid_t uid;
int pid;
GQuark quark_caller_pkgid;
GQuark quark_callee_pkgid;
@@ -185,6 +186,7 @@ typedef struct {
typedef struct {
bool used;
alarm_id_t alarm_id;
+ uid_t uid;
int pid;
__alarm_info_t *__alarm_info;
} __scheduled_alarm_t;