Modify the logic to support the virtual root
authorHyunbin Lee <hyunbin.lee@samsung.com>
Wed, 26 Jun 2013 12:59:07 +0000 (21:59 +0900)
committerHyunbin Lee <hyunbin.lee@samsung.com>
Fri, 28 Jun 2013 04:30:04 +0000 (13:30 +0900)
Change-Id: Ib12785be42801705ecdb8047cc08abb387a5073d
Signed-off-by: Hyunbin Lee <hyunbin.lee@samsung.com>
src/Manager/CompatibilityManager.cpp
src/Manager/CompatibilityManager.h
src/Step/UninstallStep.cpp

index e5026cd..521df03 100755 (executable)
@@ -126,7 +126,6 @@ CompatibilityManager::FinalizeDataCaging(const String& rootPath)
                { "./dev" },
                { "./etc" },
                { "./lib" },
-               { "./media" },
                { "./mnt" },
                { "./opt/usr" },
                { "./opt/var/kdb/db" },
@@ -319,7 +318,7 @@ CATCH:
 }
 
 bool
-CompatibilityManager::FinalizeVirtualRoot(const String& rootPath)
+CompatibilityManager::FinalizeVirtualRoot(const String& rootPath, const PackageId& packageId)
 {
        int res = 0;
        unsigned int i = 0;
@@ -330,22 +329,31 @@ CompatibilityManager::FinalizeVirtualRoot(const String& rootPath)
                        { "./cache" },
                        { "./csa" },
                        { "./data" },
+                       { "./dev/pts" },
+                       { "./dev/shm" },
                        { "./dev" },
                        { "./etc" },
+                       { "./lib/modules" },
                        { "./lib" },
                        { "./media" },
                        { "./mnt" },
-                       { "./opt" },
                        { "./proc" },
                        { "./run" },
                        { "./sbin" },
                        { "./smack" },
                        { "./srv" },
+                       { "./sys/fs/cgroup/systemd" },
+                       { "./sys/fs/cgroup" },
                        { "./sys" },
                        { "./system" },
                        { "./tmp" },
                        { "./usr" },
-                       { "./var" }
+                       { "./var/run" },
+                       { "./var" },
+                       { "./opt/usr" },
+                       //{ "./opt/var/run" },
+                       { "./opt/storage/sdcard" },
+                       { "./opt" },
        };
 
        std::unique_ptr<char[]> pVirtualRootPath(_StringConverter::CopyToCharArrayN(destPath));
@@ -360,6 +368,27 @@ CompatibilityManager::FinalizeVirtualRoot(const String& rootPath)
                TryReturn((res == 0) || (errno == EINVAL) || (errno == ENOENT), false, "umount2() failed. (%d, %s), path = [%s]", errno, strerror(errno), mountPath[i].destPath);
        }
 
+       std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
+       TryReturn(pPackageId, false, "The memory is insufficient.");
+
+       char mountFlag[PATH_MAX] = {0, };
+       sprintf(mountFlag, "/tmp/osp-compat/mount/internal/%s", pPackageId.get());
+       res = unlink(mountFlag);
+       if ((res == -1) && (errno != ENOENT))
+       {
+               AppLog("unlink(%s) failed, errno: %d (%s)", mountFlag, errno, strerror(errno));
+               return false;
+       }
+
+       memset(mountFlag, 0, PATH_MAX);
+       sprintf(mountFlag, "/tmp/osp-compat/mount/external/%s", pPackageId.get());
+       res = unlink(mountFlag);
+       if ((res == -1) && (errno != ENOENT))
+       {
+               AppLog("unlink(%s) failed, errno: %d (%s)", mountFlag, errno, strerror(errno));
+               return false;
+       }
+
        AppLog("[Tizen::Io] FinalizeVirtualRoot() succeeded, path: %ls", destPath.GetPointer());
        return true;
 }
@@ -383,13 +412,6 @@ CompatibilityManager::CreateOspInternalDirectories(const String& rootPath, const
                { "./Storagecard", 0705, false },
                { "./Storagecard/Media", 0000, false }, // mount from /opt/storage/sdcard
        };
-       struct _OspDir mediaDir[] =
-       {
-               { "/opt/usr/media/Images", 0777, false },
-               { "/opt/usr/media/Sounds", 0777, false },
-               { "/opt/usr/media/Videos", 0777, false },
-               { "/opt/usr/media/Others", 0777, false }
-       };
 
        String ospCompatSharedPath = _EnvironmentImpl::GetOspCompatSharedPath();
        String ospShareAppIdPath(L"share/");
@@ -462,19 +484,6 @@ CompatibilityManager::CreateOspInternalDirectories(const String& rootPath, const
                return false;
        }
 
-       for (i = 0; i < sizeof(mediaDir) / sizeof(struct _OspDir); ++i)
-       {
-               ret = mkdir(mediaDir[i].path, mediaDir[i].mode);
-               if (ret == -1 && errno != 17) // EEXIST
-               {
-                       AppLog("mkdir() failed (%s), path: %s, mode: 0%o", strerror(errno), mediaDir[i].path, mediaDir[i].mode);
-                       return false;
-               }
-
-               ret = chown(mediaDir[i].path, 5000, 5000);
-               TryReturn(ret == 0, false, "chown() failed (%d, %s), path: %s, uid: 5000, gid: 5000", errno, strerror(errno), mediaDir[i].path);
-       }
-
        String appSharedDataPath(rootPath);
        appSharedDataPath.Append(L"/shared/data");
 
index e31596e..2969359 100755 (executable)
@@ -45,7 +45,7 @@ public:
        static bool LinkOspSharePath(const Tizen::Base::String& rootPath, const Tizen::App::PackageId& packageId);
 
        static bool PrepareVirtualRoot(const Tizen::Base::String& rootPath, const Tizen::App::PackageId& packageId);
-       static bool FinalizeVirtualRoot(const Tizen::Base::String& rootPath);
+       static bool FinalizeVirtualRoot(const Tizen::Base::String& rootPath, const Tizen::App::PackageId& packageId);
 
 private:
        CompatibilityManager(const CompatibilityManager& value);
index 46d101d..b5d5a48 100755 (executable)
@@ -264,7 +264,7 @@ UninstallStep::OnStateRemoveDir(void)
        String virtualRoot = rootPath + DIR_VIRTUAL_ROOT;
        if (File::IsFileExist(virtualRoot) == true)
        {
-               res = CompatibilityManager::FinalizeVirtualRoot(rootPath);
+               res = CompatibilityManager::FinalizeVirtualRoot(rootPath, __pContext->__packageId);
                TryReturn(res == true, INSTALLER_ERROR_UNMOUNT_FAILED, "CompatibilityManager::FinalizeVirtualRoot(%ls) failed.", rootPath.GetPointer());
        }