#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>
IMPLEMENT_SAFE_SINGLETON(WrtDeviceApis::Commons::WrtAccess)
namespace {
-
/**
* Helper class - single parameter and its value
*/
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)
{}
};
*/
struct AceParamList
{
- size_t count;
+ size_t count;
AceParam* param;
- AceParamList():
+ AceParamList() :
count(0),
param(NULL)
{}
{
public:
explicit ScopedDeviceCapArray(AceParamList *ptr =
- DeviceCapParamPolicy::NullValue()) :
+ DeviceCapParamPolicy::NullValue()) :
DPL::ScopedResource<DeviceCapParamPolicy>(ptr)
- {
- }
+ {}
AceParamList & operator [](std::ptrdiff_t k) const
{
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;
}
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);
}
}
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;
}
}
- 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];
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