}
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;
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) {
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;
}
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) {
* \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
// 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;
}
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)
};