From 22bab7c34dded30f03f921c22b62a7215f85d912 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Wed, 10 May 2017 22:20:27 +0900 Subject: [PATCH] sensord: add location privilege to location-related sensors Change-Id: Ib931902c518fd67e62fb7e7dc2d8cd6340d792b3 Signed-off-by: kibak.yoon --- src/server/sensor_handler.cpp | 11 +++++++++++ src/server/server_channel_handler.cpp | 5 ++--- src/shared/sensor_info.cpp | 8 ++++++++ src/shared/sensor_info.h | 1 + src/shared/sensor_types_private.h | 5 +++++ src/shared/sensor_utils.cpp | 4 +++- 6 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/server/sensor_handler.cpp b/src/server/sensor_handler.cpp index d72cfb8..2a2eb6a 100644 --- a/src/server/sensor_handler.cpp +++ b/src/server/sensor_handler.cpp @@ -22,6 +22,7 @@ #include #include #include +#include using namespace sensor; @@ -33,6 +34,16 @@ sensor_handler::sensor_handler(const sensor_info &info) sensor_type_t type = sensor::utils::get_type(m_info.get_uri()); m_info.set_type(type); + + /* TODO: temporary walkaround for sensors that require multiple privileges */ + switch (m_info.get_type()) { + case EXTERNAL_EXERCISE_SENSOR: + case EXERCISE_STANDALONE_SENSOR: + m_info.add_privilege(PRIVILEGE_LOCATION_URI); + break; + default: + break; + } } bool sensor_handler::has_observer(sensor_observer *ob) diff --git a/src/server/server_channel_handler.cpp b/src/server/server_channel_handler.cpp index 88c48e4..f20008c 100644 --- a/src/server/server_channel_handler.cpp +++ b/src/server/server_channel_handler.cpp @@ -23,13 +23,12 @@ #include #include #include +#include #include #include "permission_checker.h" #include "application_sensor_handler.h" -#define PRIV_DELIMINATOR ";" - using namespace sensor; using namespace ipc; @@ -397,7 +396,7 @@ bool server_channel_handler::has_privilege(int fd, std::string &priv) bool server_channel_handler::has_privileges(int fd, std::string priv) { std::vector privileges; - privileges = utils::tokenize(priv, PRIV_DELIMINATOR); + privileges = utils::tokenize(priv, PRIV_DELIMITER); for (auto it = privileges.begin(); it != privileges.end(); ++it) { if (!has_privilege(fd, *it)) diff --git a/src/shared/sensor_info.cpp b/src/shared/sensor_info.cpp index c2d95c3..e56be7e 100644 --- a/src/shared/sensor_info.cpp +++ b/src/shared/sensor_info.cpp @@ -20,6 +20,7 @@ #include "sensor_info.h" #include +#include #include #include #include @@ -207,6 +208,13 @@ void sensor_info::set_privilege(const char *privilege) m_privilege = privilege; } +void sensor_info::add_privilege(const char *privilege) +{ + if (!m_privilege.empty()) + m_privilege.append(PRIV_DELIMITER); + m_privilege.append(privilege); +} + void sensor_info::serialize(raw_data_t &data) { put(data, m_type); diff --git a/src/shared/sensor_info.h b/src/shared/sensor_info.h index 91b6ba8..d07b5b8 100644 --- a/src/shared/sensor_info.h +++ b/src/shared/sensor_info.h @@ -63,6 +63,7 @@ public: void set_max_batch_count(int max_batch_count); void set_wakeup_supported(bool supported); void set_privilege(const char *privilege); + void add_privilege(const char *privilege); void clear(void); diff --git a/src/shared/sensor_types_private.h b/src/shared/sensor_types_private.h index b1c49f3..d0ed9e2 100644 --- a/src/shared/sensor_types_private.h +++ b/src/shared/sensor_types_private.h @@ -25,10 +25,15 @@ #define PREDEFINED_TYPE_URI "http://tizen.org/sensor/" +#define PRIV_DELIMITER ";" #define URI_DELIMITER "/" + #define PRIVILEGE_HEALTHINFO_STR "healthinfo" #define PRIVILEGE_HEALTHINFO_URI "http://tizen.org/privilege/healthinfo" +#define PRIVILEGE_LOCATION_STR "location" +#define PRIVILEGE_LOCATION_URI "http://tizen.org/privilege/location" + #define URI_PRIV_INDEX 4 #define URI_SENSOR_TYPE_INDEX 5 diff --git a/src/shared/sensor_utils.cpp b/src/shared/sensor_utils.cpp index 21e13ea..16341cc 100644 --- a/src/shared/sensor_utils.cpp +++ b/src/shared/sensor_utils.cpp @@ -90,7 +90,7 @@ static std::map types = { {ACTIVITY_TRACKER_SENSOR, "http://tizen.org/sensor/general/activity_tracker"}, {ACTIVITY_LEVEL_MONITOR_SENSOR, "http://tizen.org/sensor/general/activity_level_monitor"}, - {GPS_BATCH_SENSOR, "http://tizen.org/sensor/general/gps_batch"}, + {GPS_BATCH_SENSOR, "http://tizen.org/sensor/location/gps_batch"}, {HRM_CTRL_SENSOR, "http://tizen.org/sensor/general/hrm_ctrl"}, @@ -151,6 +151,8 @@ const char *sensor::utils::get_privilege(std::string uri) if (uri.substr(start + 1, size) == PRIVILEGE_HEALTHINFO_STR) return PRIVILEGE_HEALTHINFO_URI; + else if (uri.substr(start + 1, size) == PRIVILEGE_LOCATION_STR) + return PRIVILEGE_LOCATION_URI; return ""; } -- 2.7.4