[wrt-plugins-common] Ace Check API change.
[platform/framework/web/wrt-plugins-common.git] / src / Commons / WrtAccess / WrtAccess.cpp
index cfda0f1..128dbf5 100644 (file)
@@ -26,6 +26,7 @@
 #include <sys/types.h>
 
 #include <dpl/log/log.h>
+#include <dpl/log/secure_log.h>
 #include <dpl/scoped_array.h>
 #include <dpl/scoped_resource.h>
 #include <dpl/assert.h>
@@ -38,7 +39,6 @@
 IMPLEMENT_SAFE_SINGLETON(WrtDeviceApis::Commons::WrtAccess)
 
 namespace {
-
 /**
  * Helper class - single parameter and its value
  */
@@ -47,11 +47,11 @@ struct AceParam
     const char *name;
     const char *value;
 
-    AceParam():
+    AceParam() :
         name(NULL), value(NULL)
     {}
 
-    AceParam(const char *name, const char *value):
+    AceParam(const char *name, const char *value) :
         name(name), value(value)
     {}
 };
@@ -61,9 +61,9 @@ struct AceParam
  */
 struct AceParamList
 {
-    size_t    count;
+    size_t count;
     AceParam* param;
-    AceParamList():
+    AceParamList() :
         count(0),
         param(NULL)
     {}
@@ -92,10 +92,9 @@ class ScopedDeviceCapArray : public DPL::ScopedResource<DeviceCapParamPolicy>
 {
   public:
     explicit ScopedDeviceCapArray(AceParamList *ptr =
-                DeviceCapParamPolicy::NullValue()) :
+                                      DeviceCapParamPolicy::NullValue()) :
         DPL::ScopedResource<DeviceCapParamPolicy>(ptr)
-    {
-    }
+    {}
 
     AceParamList & operator [](std::ptrdiff_t k) const
     {
@@ -110,50 +109,47 @@ class ScopedDeviceCapArray : public DPL::ScopedResource<DeviceCapParamPolicy>
 
 namespace WrtDeviceApis {
 namespace Commons {
-
 WrtAccess::WrtAccess() :
-        m_sessionId(GenerateSessionId()),
-        m_pluginOwners(0)
-{
-}
+    m_sessionId(GenerateSessionId()),
+    m_pluginOwners(0)
+{}
 
 WrtAccess::~WrtAccess()
-{
-}
+{}
 
 WrtAccess::SessionId WrtAccess::GenerateSessionId()
 {
     const size_t SESSION_ID_LENGTH = 32;
 
     std::ostringstream pid;
-    pid << static_cast<int> (getpid());
+    pid << static_cast<int>(getpid());
 
     std::string session_id = pid.str();
 
     session_id.reserve(session_id.length() + SESSION_ID_LENGTH);
 
-    for (size_t i = 0; i < SESSION_ID_LENGTH; ++i)
-    {
+    for (size_t i = 0; i < SESSION_ID_LENGTH; ++i) {
         int c = random() % 16;
 
-        session_id +=  (c < 10 ?
-                        static_cast<char>('0' + c) :
-                        static_cast<char>('A' + c - 10));
+        session_id += (c < 10 ?
+                       static_cast<char>('0' + c) :
+                       static_cast<char>('A' + c - 10));
     }
     return session_id;
 }
 
 void WrtAccess::initialize(int widgetId)
 {
-    LogDebug("initialize");
-    if (widgetId < 0)
-    {
-        LogDebug("Invalid widget id");
+    _D("initialize");
+    if (widgetId < 0) {
+        _E("Invalid widget id");
         Throw(Exception);
     }
 
     if (!m_pluginOwners++) {
+        DPL::Log::LogSystemSingleton::Instance().SetTag("SECURITY_DAEMON");
         ace_return_t ret = ace_client_initialize(Wrt::Popup::run_popup);
+        DPL::Log::LogSystemSingleton::Instance().SetTag("WRT_PLUGINS");
         Assert(ACE_OK == ret);
         m_widgetId = widgetId;
     }
@@ -161,10 +157,12 @@ void WrtAccess::initialize(int widgetId)
 
 void WrtAccess::deinitialize(int /*widgetId*/)
 {
-    LogDebug("deinitialize");
+    _D("deinitialize");
 
     if (!--m_pluginOwners) {
+        DPL::Log::LogSystemSingleton::Instance().SetTag("SECURITY_DAEMON");
         ace_return_t ret = ace_client_shutdown();
+        DPL::Log::LogSystemSingleton::Instance().SetTag("WRT_PLUGINS");
         Assert(ACE_OK == ret);
     }
 }
@@ -174,10 +172,11 @@ int WrtAccess::getWidgetId() const
     return m_widgetId;
 }
 
-bool WrtAccess::checkAccessControl(const AceFunction& aceFunction) const
+WrtAccess::CheckAccessReturnType WrtAccess::checkAccessControl(const AceFunction& aceFunction) const
 {
-    Assert(m_pluginOwners && "WrtAccessSingleton needs to be initialized with"
-            "WidgetId during on_widget_start_callback in each plugin");
+    Assert(
+        m_pluginOwners && "WrtAccessSingleton needs to be initialized with"
+                          "WidgetId during on_widget_start_callback in each plugin");
     size_t deviceCount = aceFunction.deviceCapabilities.size();
 
     DPL::ScopedArray <const char *> deviceScopedArray;
@@ -219,13 +218,15 @@ bool WrtAccess::checkAccessControl(const AceFunction& aceFunction) const
         }
     }
 
-    LogDebug("constructing ACE request");
+    _D("constructing ACE request");
 
     ace_request_t aceRequest;
-    aceRequest.session_id = const_cast<const ace_session_id_t>(m_sessionId.c_str());
+    aceRequest.session_id =
+        const_cast<const ace_session_id_t>(m_sessionId.c_str());
     aceRequest.widget_handle = getWidgetId();
     aceRequest.feature_list.count = featuresCount;
-    aceRequest.feature_list.items = const_cast<ace_string_t*>(featureScopedArray.Get());
+    aceRequest.feature_list.items =
+        const_cast<ace_string_t*>(featureScopedArray.Get());
     aceRequest.dev_cap_list.count = deviceCount;
     aceRequest.dev_cap_list.items = new ace_dev_cap_t[deviceCount];
 
@@ -235,33 +236,44 @@ bool WrtAccess::checkAccessControl(const AceFunction& aceFunction) const
     unsigned int i;
     for (i = 0; i < deviceCount; ++i) {
         aceRequest.dev_cap_list.items[i].name =
-                const_cast<const ace_string_t>(devCapNames[i]);
+            const_cast<const ace_string_t>(devCapNames[i]);
         aceRequest.dev_cap_list.items[i].param_list.count = paramList[i].count;
         aceRequest.dev_cap_list.items[i].param_list.items =
-                new ace_param_t[paramList[i].count];
+            new ace_param_t[paramList[i].count];
         unsigned int j;
         for (j = 0; j < paramList[i].count; ++j) {
             aceRequest.dev_cap_list.items[i].param_list.items[j].name =
-                    const_cast<ace_string_t>(paramList[i].param[j].name);
+                const_cast<ace_string_t>(paramList[i].param[j].name);
             aceRequest.dev_cap_list.items[i].param_list.items[j].value =
-                    const_cast<ace_string_t>(paramList[i].param[j].value);
+                const_cast<ace_string_t>(paramList[i].param[j].value);
         }
     }
 
-    ace_bool_t aceCheckResult = ACE_FALSE;
-    ace_return_t ret = ace_check_access(&aceRequest, &aceCheckResult);
-
+    ace_check_result_t aceCheckResult = ACE_PRIVILEGE_DENIED;
+    DPL::Log::LogSystemSingleton::Instance().SetTag("SECURITY_DAEMON");
+    ace_return_t ret = ace_check_access_ex(&aceRequest, &aceCheckResult);
+    DPL::Log::LogSystemSingleton::Instance().SetTag("WRT_PLUGINS");
     for (i = 0; i < deviceCount; ++i) {
-        delete [] aceRequest.dev_cap_list.items[i].param_list.items;
+        delete[] aceRequest.dev_cap_list.items[i].param_list.items;
     }
-    delete [] aceRequest.dev_cap_list.items;
+    delete[] aceRequest.dev_cap_list.items;
 
     if (ACE_OK != ret) {
-        LogError("Error in ace check: " << static_cast<int>(ret));
-        return false;
+        _E("Error in ace check: %d", static_cast<int>(ret));
+        return CHECK_ACCESS_INTERNAL_ERROR;
     }
-    return ACE_TRUE == aceCheckResult;
-}
 
+    if (aceCheckResult == ACE_ACCESS_GRANTED) {
+        return CHECK_ACCESS_GRANTED;
+    }
+    else if (aceCheckResult == ACE_PRIVILEGE_DENIED) {
+        return CHECK_ACCESS_PRIVILEGE_DENIED;
+    }
+    else if (aceCheckResult == ACE_PRIVACY_DENIED) {
+        return CHECK_ACCESS_PRIVACY_DENIED;
+    }
+
+    return CHECK_ACCESS_INTERNAL_ERROR;
+}
 }
 } // WrtDeviceApisCommon