From 0ceceda95fbadf651edb795cc3bcaf9f09484c80 Mon Sep 17 00:00:00 2001 From: Ilho Kim Date: Fri, 7 Feb 2020 12:32:09 +0900 Subject: [PATCH] Fix create shared data directory during update When updating from a package without privilege to a package with need to set owner and permission Change-Id: Ifa7732231f147723dfbee63f4739a35467cd1545 Signed-off-by: Ilho Kim --- src/common/shared_dirs.cc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/common/shared_dirs.cc b/src/common/shared_dirs.cc index 5e753e8..2aee1c7 100644 --- a/src/common/shared_dirs.cc +++ b/src/common/shared_dirs.cc @@ -881,12 +881,26 @@ bool CreatePerUserSharedDataDir(const std::string& pkgid) { ci::UserList list = ci::GetUserList(); for (auto l : list) { uid_t uid = std::get<0>(l); + uid_t gid = std::get<1>(l); LOG(DEBUG) << "Adding shareddata directory for uid: " << uid; bf::path apps_rw = ci::GetRootAppPath(false, uid); if (!CreateSharedDataDirectories(apps_rw, pkgid)) return false; + std::vector shared_dirs(kSharedDataEntries); + for (auto entry : shared_dirs) { + bf::path shared_dst = apps_rw / entry / pkgid; + if (!SetDirectoryOwnerAndPermissions(shared_dst, uid, gid)) + return false; + } + + for (bf::recursive_directory_iterator iter(apps_rw / pkgid); + iter != bf::recursive_directory_iterator(); ++iter) { + if (!SetSharedDirOwnerAndPermissions(iter->path(), uid)) + return false; + } + std::string error_message; if (!ci::RegisterSecurityContextForPath(pkgid, apps_rw / pkgid, uid, false, &error_message)) { -- 2.7.4