Change labelPaths logic for FOTA 94/118094/2
authorRadoslaw Bartosiak <r.bartosiak@samsung.com>
Wed, 8 Mar 2017 17:24:59 +0000 (18:24 +0100)
committerGerrit Code Review <gerrit@review.vlan103.tizen.org>
Fri, 31 Mar 2017 05:50:19 +0000 (22:50 -0700)
pkgBasePath is labeled only if there is at least one path argument for labelPaths
that points to pkgBasePath.

Change-Id: I81763a8a38aa89700e87daf708a5e85c37b6dd20
Signed-off-by: Radoslaw Bartosiak <r.bartosiak@samsung.com>
src/common/include/service_impl.h
src/common/service_impl.cpp

index 46c9f24..bc75e50 100644 (file)
@@ -256,6 +256,8 @@ private:
 
     static bool isSubDir(const std::string &parent, const std::string &subdir);
 
+    static bool containSubDir(const std::string &parent, const pkg_paths &paths);
+
     static bool getUserPkgDir(const uid_t &uid,
                               const std::string &pkgName,
                               app_install_type installType,
index 2681700..bec0060 100644 (file)
@@ -263,6 +263,16 @@ bool ServiceImpl::isSubDir(const std::string &parent, const std::string &subdir)
     return (*str2 == '/' || *str1 == *str2);
 }
 
+bool ServiceImpl::containSubDir(const std::string &parent, const pkg_paths &paths)
+{
+
+    for(auto path : paths) {
+        if (isSubDir(parent, path.first))
+            return true;
+    }
+    return false;
+}
+
 std::string ServiceImpl::realPath(const std::string &path)
 {
     auto real_pathPtr = makeUnique(realpath(path.c_str(), nullptr), free);
@@ -417,7 +427,7 @@ int ServiceImpl::labelPaths(const pkg_paths &paths,
         if (!pathsOK)
             return SECURITY_MANAGER_ERROR_AUTHENTICATION_FAILED;
 
-        if (!paths.empty())
+        if (containSubDir(pkgBasePath, paths))
             SmackLabels::setupPkgBasePath(pkgBasePath);
 
         // register paths