Set indirect request info 52/175852/1
authorHwankyu Jhun <h.jhun@samsung.com>
Fri, 13 Apr 2018 02:12:51 +0000 (11:12 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Fri, 13 Apr 2018 02:15:19 +0000 (11:15 +0900)
While creating bundle data, the alarm-manager sets "indirect-request" info for
the amd. And then, the amd checks whether the caller has privilege or
NOT when getting the request from the data-provider-master.

Requires:
 - https://review.tizen.org/gerrit/#/c/175262/
 - https://review.tizen.org/gerrit/#/c/175212/
 - https://review.tizen.org/gerrit/#/c/175419/
 - https://review.tizen.org/gerrit/#/c/175210/

Change-Id: Ie0ef7b2371183ea41746896fcc979c7ec1fe336f
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
include/notification_service.h
src/notification_service.c

index 312fc48..4d3fffd 100755 (executable)
 extern int notification_service_init(void);
 extern int notification_service_fini(void);
 
-int notification_add_noti(GVariant *parameters, GVariant **reply_body, const char *sender, uid_t uid);
-int notification_update_noti(GVariant *parameters, GVariant **reply_body, uid_t uid);
+int notification_add_noti(GVariant *parameters, GVariant **reply_body,
+               const char *sender, pid_t pid, uid_t uid);
+int notification_update_noti(GVariant *parameters, GVariant **reply_body,
+               pid_t pid, uid_t uid);
 int notification_refresh_noti(GVariant *parameters, GVariant **reply_body, uid_t uid);
 int notification_del_noti_single(GVariant *parameters, GVariant **reply_body, uid_t uid);
 int notification_del_noti_multiple(GVariant *parameters, GVariant **reply_body, uid_t uid);
index 3501f18..980d9c0 100755 (executable)
@@ -141,9 +141,9 @@ static void _noti_dbus_method_call_handler(GDBusConnection *conn,
                if (ret == NOTIFICATION_ERROR_NONE)
                        notification_add_private_sharing_target_id(pid, sender, uid);
        } else if (g_strcmp0(method_name, "update_noti") == 0) {
-               ret = notification_update_noti(parameters, &reply_body, uid);
+               ret = notification_update_noti(parameters, &reply_body, pid, uid);
        } else if (g_strcmp0(method_name, "add_noti") == 0) {
-               ret = notification_add_noti(parameters, &reply_body, sender, uid);
+               ret = notification_add_noti(parameters, &reply_body, sender, pid, uid);
        } else if (g_strcmp0(method_name, "refresh_noti") == 0) {
                ret = notification_refresh_noti(parameters, &reply_body, uid);
        } else if (g_strcmp0(method_name, "del_noti_single") == 0) {
@@ -676,7 +676,8 @@ static void __add_sender_info(int priv_id, const char *busname)
        }
 }
 
-int notification_add_noti(GVariant *parameters, GVariant **reply_body, const char *sender, uid_t uid)
+int notification_add_noti(GVariant *parameters, GVariant **reply_body,
+               const char *sender, pid_t pid, uid_t uid)
 {
        int ret;
        int priv_id;
@@ -691,6 +692,9 @@ int notification_add_noti(GVariant *parameters, GVariant **reply_body, const cha
                ret = notification_ipc_make_noti_from_gvariant(noti, body);
                g_variant_unref(body);
 
+               if (uid >= NORMAL_UID_BASE)
+                       notification_set_indirect_request(noti, pid, uid);
+
                ret = _validate_and_set_noti_with_uid(uid, noti, &noti_uid);
                if (ret != NOTIFICATION_ERROR_NONE)
                        goto out;
@@ -792,7 +796,8 @@ static int _update_noti(GVariant **reply_body, notification_h noti, uid_t uid)
        return ret;
 }
 
-int notification_update_noti(GVariant *parameters, GVariant **reply_body, uid_t uid)
+int notification_update_noti(GVariant *parameters, GVariant **reply_body,
+               pid_t pid, uid_t uid)
 {
        notification_h noti;
        int ret;
@@ -805,6 +810,9 @@ int notification_update_noti(GVariant *parameters, GVariant **reply_body, uid_t
                ret = notification_ipc_make_noti_from_gvariant(noti, body);
                g_variant_unref(body);
 
+               if (uid >= NORMAL_UID_BASE)
+                       notification_set_indirect_request(noti, pid, uid);
+
                ret = _validate_and_set_noti_with_uid(uid, noti, &noti_uid);
                if (ret != NOTIFICATION_ERROR_NONE)
                        goto out;