Create/Remove vconf for security settings
authorJihoon Chung <jihoon.chung@samsung.com>
Fri, 28 Dec 2012 00:21:49 +0000 (09:21 +0900)
committerGerrit Code Review <gerrit2@kim11>
Fri, 28 Dec 2012 07:33:57 +0000 (16:33 +0900)
[Issue#] N/A
[Problem] N/A
[Cause] N/A
[Solution] Implement create/remove vconf for security settings
[SCMRequest] N/A

Change-Id: I54c90d15cd9950fcf644033774f887c4de32e987

src/CMakeLists.txt
src/jobs/widget_install/task_database.cpp
src/jobs/widget_install/task_database.h
src/jobs/widget_install/widget_install_errors.h
src/jobs/widget_uninstall/task_remove_files.cpp
src/jobs/widget_uninstall/task_remove_files.h

index fe1d5d6..6da67e5 100644 (file)
@@ -141,6 +141,7 @@ PKG_CHECK_MODULES(SYS_INSTALLER_STATIC_DEP
     capi-appfw-app-manager
     drm-service-core-intel
     app2sd
+    vconf
     REQUIRED
 )
 
index 3054c08..8df7c1a 100644 (file)
 #include <ace_registration.h>
 #include <errno.h>
 #include <string.h>
+#include <vconf.h>
 
 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<TaskDatabase>(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<int>(WrtDB::SETTINGS_TYPE_ON));
+    // prevent permission error
+    vconf_unset(securityPopupUsageKey.c_str());
+    vconf_set_int(securityPopupUsageKey.c_str(),
+                  static_cast<int>(WrtDB::SETTINGS_TYPE_ON));
+    vconf_set_int(geolocationUsageKey.c_str(),
+                  static_cast<int>(WrtDB::SETTINGS_TYPE_ON));
+    vconf_set_int(webNotificationUsageKey.c_str(),
+                  static_cast<int>(WrtDB::SETTINGS_TYPE_ON));
+    vconf_set_int(webDatabaseUsageKey.c_str(),
+                  static_cast<int>(WrtDB::SETTINGS_TYPE_ON));
+    vconf_set_int(filesystemUsageKey.c_str(),
+                  static_cast<int>(WrtDB::SETTINGS_TYPE_ON));
+}
+
 void TaskDatabase::StepAbortDBInsert()
 {
     LogWarning("[DB Update Task] Aborting... (DB Clean)");
index 2d411b4..f2098bc 100644 (file)
@@ -48,6 +48,7 @@ class TaskDatabase:
     void StepWrtDBInsert();
     void StepAceDBInsert();
     void StepRemoveExternalFiles();
+    void StepCreateVconf();
 
     void StepAbortDBInsert();
 
index 30f260f..7c24dfa 100644 (file)
@@ -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)
 
index b7e49a3..2d814b4 100644 (file)
 #include <errno.h>
 #include <string.h>
 #include <widget_install_to_external.h>
+#include <vconf.h>
 
 namespace Jobs {
 namespace WidgetUninstall {
 
 using namespace WrtDB;
 
+namespace {
+const char * const VCONF_KEY_PREFIX = "file/private/";
+}
+
 TaskRemoveFiles::TaskRemoveFiles(UninstallerContext& context) :
     DPL::TaskDecl<TaskRemoveFiles>(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 {
index ebce154..0336443 100644 (file)
@@ -51,7 +51,7 @@ class TaskRemoveFiles :
     void StepRemoveDesktop();
     void StepRemoveManifest();
     void StepRemoveExternalLocations();
-
+    void StepRemoveVconf();
     void StepRemoveExternalWidget();
 
   public: