From: Jihoon Chung Date: Fri, 28 Dec 2012 00:21:49 +0000 (+0900) Subject: Create/Remove vconf for security settings X-Git-Tag: accepted/tizen_2.1/20130425.023916~20^2~24^2~16 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a8ba9385751df9c55ec5dace101d292d23252482;p=framework%2Fweb%2Fwrt-installer.git Create/Remove vconf for security settings [Issue#] N/A [Problem] N/A [Cause] N/A [Solution] Implement create/remove vconf for security settings [SCMRequest] N/A Change-Id: I54c90d15cd9950fcf644033774f887c4de32e987 --- diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fe1d5d6..6da67e5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -141,6 +141,7 @@ PKG_CHECK_MODULES(SYS_INSTALLER_STATIC_DEP capi-appfw-app-manager drm-service-core-intel app2sd + vconf REQUIRED ) diff --git a/src/jobs/widget_install/task_database.cpp b/src/jobs/widget_install/task_database.cpp index 3054c08..8df7c1a 100644 --- a/src/jobs/widget_install/task_database.cpp +++ b/src/jobs/widget_install/task_database.cpp @@ -37,11 +37,22 @@ #include #include #include +#include using namespace WrtDB; namespace Jobs { namespace WidgetInstall { + +namespace { +const char * const VCONF_KEY_PREFIX = "file/private/"; +const char * const VCONF_KEY_GROUP = "/security"; +const char * const VCONF_KEY_POPUP_USAGE = "/popup_usage"; +const char * const VCONF_KEY_GEOLOCATION_USAGE = "/geolocation_usage"; +const char * const VCONF_KEY_WEB_NOTIFICATION_USAGE = "/web_notification_usage"; +const char * const VCONF_KEY_WEB_DATABASE_USAGE = "/web_database_usage"; +const char * const VCONF_KEY_FILESYSTEM_USAGE = "/filesystem_usage"; +} TaskDatabase::TaskDatabase(InstallerContext& context) : DPL::TaskDecl(this), m_context(context), @@ -52,6 +63,7 @@ TaskDatabase::TaskDatabase(InstallerContext& context) : AddStep(&TaskDatabase::StepWrtDBInsert); AddStep(&TaskDatabase::StepAceDBInsert); AddStep(&TaskDatabase::StepRemoveExternalFiles); + AddStep(&TaskDatabase::StepCreateVconf); AddAbortStep(&TaskDatabase::StepAbortDBInsert); } @@ -184,6 +196,35 @@ void TaskDatabase::StepRemoveExternalFiles() } } +void TaskDatabase::StepCreateVconf() +{ + LogDebug("StepCreateVconf"); + std::string keyPrefix = + VCONF_KEY_PREFIX + + DPL::ToUTF8String(m_context.locations->getPkgname()) + + VCONF_KEY_GROUP; + std::string securityPopupUsageKey = keyPrefix + VCONF_KEY_POPUP_USAGE; + std::string geolocationUsageKey = keyPrefix + VCONF_KEY_GEOLOCATION_USAGE; + std::string webNotificationUsageKey = keyPrefix + VCONF_KEY_WEB_NOTIFICATION_USAGE; + std::string webDatabaseUsageKey = keyPrefix + VCONF_KEY_WEB_DATABASE_USAGE; + std::string filesystemUsageKey = keyPrefix + VCONF_KEY_FILESYSTEM_USAGE; + + vconf_set_int(securityPopupUsageKey.c_str(), + static_cast(WrtDB::SETTINGS_TYPE_ON)); + // prevent permission error + vconf_unset(securityPopupUsageKey.c_str()); + vconf_set_int(securityPopupUsageKey.c_str(), + static_cast(WrtDB::SETTINGS_TYPE_ON)); + vconf_set_int(geolocationUsageKey.c_str(), + static_cast(WrtDB::SETTINGS_TYPE_ON)); + vconf_set_int(webNotificationUsageKey.c_str(), + static_cast(WrtDB::SETTINGS_TYPE_ON)); + vconf_set_int(webDatabaseUsageKey.c_str(), + static_cast(WrtDB::SETTINGS_TYPE_ON)); + vconf_set_int(filesystemUsageKey.c_str(), + static_cast(WrtDB::SETTINGS_TYPE_ON)); +} + void TaskDatabase::StepAbortDBInsert() { LogWarning("[DB Update Task] Aborting... (DB Clean)"); diff --git a/src/jobs/widget_install/task_database.h b/src/jobs/widget_install/task_database.h index 2d411b4..f2098bc 100644 --- a/src/jobs/widget_install/task_database.h +++ b/src/jobs/widget_install/task_database.h @@ -48,6 +48,7 @@ class TaskDatabase: void StepWrtDBInsert(); void StepAceDBInsert(); void StepRemoveExternalFiles(); + void StepCreateVconf(); void StepAbortDBInsert(); diff --git a/src/jobs/widget_install/widget_install_errors.h b/src/jobs/widget_install/widget_install_errors.h index 30f260f..7c24dfa 100644 --- a/src/jobs/widget_install/widget_install_errors.h +++ b/src/jobs/widget_install/widget_install_errors.h @@ -47,6 +47,7 @@ enum Type ErrorDeferred, ///< Widget installation was deferred and will be continued when possible ErrorDatabaseFailure, ///< Failure in database ErrorRemovingFolderFailure, ///< Failure in removing existing widget folder + ErrorCreateVconfFailure, ///< Failure in creating vconf ErrorInstallOspServcie, ///< Failure in installing osp service ErrorUpdateWidget, ///< Failure in widget update. ErrorInstallToExt, ///< Failure in install to sdcard @@ -81,6 +82,7 @@ DECLARE_JOB_EXCEPTION(Base, AlreadyInstalled, ErrorAlreadyInstalled) DECLARE_JOB_EXCEPTION(Base, UnknownError, ErrorUnknown) DECLARE_JOB_EXCEPTION(Base, DatabaseFailure, ErrorDatabaseFailure) DECLARE_JOB_EXCEPTION(Base, RemovingFolderFailure, ErrorRemovingFolderFailure) +DECLARE_JOB_EXCEPTION(Base, CreateVconfFailure, ErrorCreateVconfFailure) DECLARE_JOB_EXCEPTION(Base, CopyIconFailed, ErrorUnknown) diff --git a/src/jobs/widget_uninstall/task_remove_files.cpp b/src/jobs/widget_uninstall/task_remove_files.cpp index b7e49a3..2d814b4 100644 --- a/src/jobs/widget_uninstall/task_remove_files.cpp +++ b/src/jobs/widget_uninstall/task_remove_files.cpp @@ -32,12 +32,17 @@ #include #include #include +#include namespace Jobs { namespace WidgetUninstall { using namespace WrtDB; +namespace { +const char * const VCONF_KEY_PREFIX = "file/private/"; +} + TaskRemoveFiles::TaskRemoveFiles(UninstallerContext& context) : DPL::TaskDecl(this), m_context(context) @@ -50,6 +55,7 @@ TaskRemoveFiles::TaskRemoveFiles(UninstallerContext& context) : //AddStep(&TaskRemoveFiles::StepRemoveDesktop); AddStep(&TaskRemoveFiles::StepRemoveManifest); AddStep(&TaskRemoveFiles::StepRemoveExternalLocations); + AddStep(&TaskRemoveFiles::StepRemoveVconf); AddStep(&TaskRemoveFiles::StepRemoveFinished); } @@ -169,6 +175,18 @@ void TaskRemoveFiles::StepRemoveExternalLocations() dao.unregisterAllExternalLocations(); } +void TaskRemoveFiles::StepRemoveVconf() +{ + std::string key = + VCONF_KEY_PREFIX + + DPL::ToUTF8String(m_context.locations->getPkgname()) ; + if(vconf_unset_recursive(key.c_str())) { + LogError("Fail to unset vconf file"); + } else { + LogDebug("vconf file is removed"); + } +} + void TaskRemoveFiles::StepRemoveExternalWidget() { Try { diff --git a/src/jobs/widget_uninstall/task_remove_files.h b/src/jobs/widget_uninstall/task_remove_files.h index ebce154..0336443 100644 --- a/src/jobs/widget_uninstall/task_remove_files.h +++ b/src/jobs/widget_uninstall/task_remove_files.h @@ -51,7 +51,7 @@ class TaskRemoveFiles : void StepRemoveDesktop(); void StepRemoveManifest(); void StepRemoveExternalLocations(); - + void StepRemoveVconf(); void StepRemoveExternalWidget(); public: