Create private tmp directory in skel 68/105468/4 accepted/tizen/3.0/common/20161221.180529 accepted/tizen/3.0/ivi/20161221.005137 accepted/tizen/3.0/mobile/20161221.005217 accepted/tizen/3.0/tv/20161221.004941 accepted/tizen/3.0/wearable/20161221.005038 submit/tizen_3.0/20161219.021225
authorPiotr Dabrowski <p.dabrowski2@samsung.com>
Mon, 19 Dec 2016 07:18:23 +0000 (08:18 +0100)
committerPiotr Dabrowski <p.dabrowski2@samsung.com>
Mon, 19 Dec 2016 07:18:23 +0000 (08:18 +0100)
Submit together:
https://review.tizen.org/gerrit/#/c/105467/
https://review.tizen.org/gerrit/#/c/105468/

Change-Id: I5556e12d01a66111b9ccfd86ee0b5c5b5d51af91

src/common/shared_dirs.cc
src/common/shared_dirs.h
src/common/step/filesystem/step_create_per_user_storage_directories.cc
src/common/step/filesystem/step_create_per_user_storage_directories.h

index 499df1d..d1e1398 100644 (file)
@@ -134,7 +134,8 @@ bool SetDirectoryOwnerAndPermissions(const bf::path& subpath, uid_t uid,
 }
 
 bool CreateDirectories(const bf::path& app_dir, const std::string& pkgid,
-                       uid_t uid, gid_t gid, const bool set_permissions) {
+                       uid_t uid, gid_t gid, const bool set_permissions,
+                       const std::vector<const char*> additional_dirs = std::vector<const char*>()) {
   bf::path base_dir = app_dir / pkgid;
   if (bf::exists(base_dir)) {
     LOG(DEBUG) << "Directory for user already exist: " << base_dir;
@@ -143,6 +144,7 @@ bool CreateDirectories(const bf::path& app_dir, const std::string& pkgid,
 
   bs::error_code error;
   std::vector<const char*> dirs(kEntries);
+  dirs.insert(dirs.end(), additional_dirs.begin(), additional_dirs.end());
   // always trusted
   dirs.push_back(kSharedTrustedDir);
   for (auto& entry : dirs) {
@@ -430,7 +432,8 @@ bool PerformExternalDirectoryDeletionForAllUsers(const std::string& pkgid) {
 
 bool CreateSkelDirectories(const std::string& pkgid,
                            const std::string& api_version,
-                           bool trusted, bool shareddata, bool is_readonly) {
+                           bool trusted, bool shareddata, bool is_readonly,
+                           const std::vector<const char*> additional_dirs) {
   bf::path path = bf::path(kSkelAppDir) / pkgid;
   LOG(DEBUG) << "Creating directories in: " << path;
 
@@ -444,6 +447,7 @@ bool CreateSkelDirectories(const std::string& pkgid,
   }
 
   std::vector<const char*> dirs(kEntries);
+  dirs.insert(dirs.end(), additional_dirs.begin(), additional_dirs.end());
   if (trusted)
     dirs.push_back(kSharedTrustedDir);
   if (api_ver < ver30 || shareddata) {
index 961be45..11081f0 100644 (file)
@@ -71,13 +71,15 @@ bool PerformExternalDirectoryDeletionForAllUsers(const std::string& pkgid);
  * \param trusted signed package flag
  * \param shareddata shared data privilege flag
  * \param is_readonly readonly flag
+ * \param additional_dirs additional directories vector
  *
  * \return bool true if succeed, false otherwise
  *
  */
 bool CreateSkelDirectories(const std::string& pkgid,
                            const std::string& api_version,
-                           bool trusted, bool shareddata, bool is_readonly);
+                           bool trusted, bool shareddata, bool is_readonly,
+                           const std::vector<const char*> additional_dirs = std::vector<const char*>());
 
 /**
  * \brief Performs deletion of directories
index 51abde8..e481d5c 100644 (file)
@@ -39,7 +39,8 @@ common_installer::Step::Status StepCreatePerUserStorageDirectories::process() {
   // Now, /etc/skel is RO mounted region, so we should skip the creation.
   if (!context_->partial_rw.get()) {
     if (!common_installer::CreateSkelDirectories(package_id,
-        str_ver, trusted, shareddata, context_->is_readonly_package.get())) {
+        str_ver, trusted, shareddata, context_->is_readonly_package.get(),
+        additional_shared_dirs_)) {
       LOG(ERROR) << "Failed to create skel dirs";
       return Status::APP_DIR_ERROR;
     }
index e136af2..cff93c3 100644 (file)
@@ -26,11 +26,21 @@ class StepCreatePerUserStorageDirectories : public common_installer::Step {
  public:
   using Step::Step;
 
+  StepCreatePerUserStorageDirectories(InstallerContext* context)
+      : Step(context), additional_shared_dirs_(std::vector<const char*>()) {}
+
+  StepCreatePerUserStorageDirectories(InstallerContext* context,
+      const std::vector<const char*> additional_shared_dirs)
+      : Step(context), additional_shared_dirs_(additional_shared_dirs) {}
+
   Status process() override;
   Status clean() override { return Status::OK; }
   Status undo() override { return Status::OK; }
   Status precheck() override { return Status::OK; }
 
+private:
+  const std::vector<const char*> additional_shared_dirs_;
+
   STEP_NAME(CreatePerUserStorageDirectories)
 };