SM : AppInstallHelper create install dir automatically 71/94171/6
authorZofia Abramowska <z.abramowska@samsung.com>
Fri, 21 Oct 2016 15:09:51 +0000 (17:09 +0200)
committerKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Tue, 29 Nov 2016 09:07:22 +0000 (10:07 +0100)
AppInstallHelper creates install dir when creation
of any other type of file/path is requested, so this
doesn't have to be done manually.

Change-Id: I0b9e80b737296c3a7e9d9bbfcdfc05ed4fd8b000

src/security-manager-tests/common/app_install_helper.cpp
src/security-manager-tests/common/app_install_helper.h
src/security-manager-tests/test_cases.cpp
src/security-manager-tests/test_cases_private_sharing.cpp
src/security-manager-tests/test_cases_public_sharing.cpp
src/security-manager-tests/test_cases_register_paths.cpp
src/security-manager-tests/test_cases_trusted_sharing.cpp

index 29ece2b..e88fd87 100644 (file)
@@ -97,6 +97,7 @@ int AppInstallHelper::getGID() const {
 
 void AppInstallHelper::createInstallDir() {
     create(mkdir, getInstallDir());
+    m_isInstallDirCreated = true;
 }
 
 void AppInstallHelper::createTrustedDir(int i) {
@@ -189,6 +190,7 @@ void AppInstallHelper::removePaths() {
     m_fileTypeMap.clear();
 
     rmdir(m_installDir.c_str());
+    m_isInstallDirCreated = false;
 }
 
 void AppInstallHelper::setInstallPath() {
@@ -199,6 +201,8 @@ void AppInstallHelper::setInstallPath() {
 }
 
 bool AppInstallHelper::create(std::function<int(const char*, mode_t)> &&creatFun, const std::string &path) {
+    if (!m_isInstallDirCreated && path != getInstallDir())
+        createInstallDir();
     if (creatFun(path.c_str(), 0751) == 0) {
        // Local paths need user change
        if (!m_isLocal || chown(path.c_str(), m_uidGid, m_uidGid) == 0)
index f45564e..478f60c 100644 (file)
@@ -34,7 +34,7 @@ struct AppInstallHelper {
                      uid_t uid,
                      std::string version = std::string())
       : m_appName(appNamePrefix), m_pkgName(pkgNamePrefix), m_isLocal(isLocal), m_uidGid(uid), m_version(version),
-        m_installType(SM_APP_INSTALL_NONE), m_isHybrid(false), m_creatorPid(getpid())
+        m_installType(SM_APP_INSTALL_NONE), m_isHybrid(false), m_isInstallDirCreated(false), m_creatorPid(getpid())
     {
         setInstallPath();
     }
@@ -121,6 +121,7 @@ protected:
     app_install_type m_installType;
     bool m_isHybrid;
     std::string m_installDir;
+    bool m_isInstallDirCreated;
     TypePathsMap m_dirTypeMap;
     TypePathsMap m_fileTypeMap;
     std::vector<std::string> m_privileges;
index 656d397..6daea32 100644 (file)
@@ -164,7 +164,6 @@ RUNNER_TEST(security_manager_02_app_install_uninstall_full)
     };
 
     AppInstallHelper app("sm_test_02");
-    app.createInstallDir();
     app.createPrivateDir();
     app.createPrivateRODir();
     app.createPublicDir();
@@ -416,7 +415,7 @@ RUNNER_TEST(security_manager_08_user_double_add_double_remove)
 
     // gumd
     testUser.remove();
-    
+
     // FIXME - whitebox - db
     check_app_after_uninstall(app.getAppId(), app.getPkgId(), true);
     check_app_permissions(app.getAppId(), app.getPkgId(), testUser.getUidString(), {}, somePrivs);
@@ -560,12 +559,10 @@ RUNNER_CHILD_TEST(security_manager_21_security_manager_admin_deny_user_priv)
     std::string childUidStr = normalUser.getUidString();
 
     AppInstallHelper adminApp("sm_test_21_admin", adminUser.getUid());
-    adminApp.createInstallDir();
     adminApp.addPrivileges(adminRequiredPrivs);
     ScopedInstaller adminAppInstall(adminApp);
 
     AppInstallHelper normalApp("sm_test_21_normal", normalUser.getUid());
-    normalApp.createInstallDir();
     normalApp.addPrivileges(manifestPrivs);
     ScopedInstaller normalAppInstall(normalApp);
 
@@ -769,7 +766,6 @@ RUNNER_CHILD_TEST(security_manager_25e_unprivileged_install_type_global)
     testUser.create();
 
     AppInstallHelper app("sm_test_25e");
-    app.createInstallDir();
 
     change_label("_");
     RUNNER_ASSERT_ERRNO_MSG(drop_root_privileges(testUser.getUid(), testUser.getGid()) == 0,
@@ -789,7 +785,6 @@ RUNNER_CHILD_TEST(security_manager_25f_unprivileged_install_type_preloaded)
     testUser.create();
 
     AppInstallHelper app("sm_test_25f");
-    app.createInstallDir();
 
     change_label("_");
     RUNNER_ASSERT_ERRNO_MSG(drop_root_privileges(testUser.getUid(), testUser.getGid()) == 0,
@@ -819,7 +814,6 @@ RUNNER_CHILD_TEST(security_manager_25g_local_user_set_install_type_local)
     testUser.create();
 
     AppInstallHelper app("sm_test_25g", testUser.getUid());
-    app.createInstallDir();
     app.createPrivateDir();
     app.setInstallType(SM_APP_INSTALL_LOCAL);
     app.addPrivileges(allowedPrivs);
@@ -843,7 +837,6 @@ RUNNER_CHILD_TEST(security_manager_25h_local_path_global_install)
     testUser.create();
 
     AppInstallHelper app("sm_test_25h", testUser.getUid());
-    app.createInstallDir();
     app.createPrivateDir();
 
     InstallRequest invalidReq;
@@ -860,7 +853,6 @@ RUNNER_CHILD_TEST(security_manager_25i_local_path_preloaded_install)
     testUser.create();
 
     AppInstallHelper app("sm_test_25i", testUser.getUid());
-    app.createInstallDir();
     app.createPrivateDir();
 
     InstallRequest invalidReq;
index 89328b9..f9f7a99 100644 (file)
@@ -161,7 +161,6 @@ RUNNER_TEST(security_manager_30e_unknown_target)
     // This test depends on order of checks in security-manager service implementation
     AppInstallHelper owner("installedApp");
     owner.revokeRules();
-    owner.createInstallDir();
     InstallRequest ownerInst;
     ownerInst.setAppId(owner.getAppId());
     ownerInst.setPkgId(owner.getPkgId());
@@ -182,13 +181,11 @@ RUNNER_TEST(security_manager_30f_bad_paths)
     // This test depends on order of checks in security-manager service implementation
     AppInstallHelper owner("installedApp");
     owner.revokeRules();
-    owner.createInstallDir();
     InstallRequest ownerInst = createInstallReq(owner);
     Api::install(ownerInst);
 
     AppInstallHelper target("secondInstalledApp");
     target.revokeRules();
-    target.createInstallDir();
     InstallRequest targetInst = createInstallReq(target);
     Api::install(targetInst);
 
@@ -214,7 +211,6 @@ RUNNER_TEST(security_manager_31_simple_share)
 
     for (auto &e : helper) {
         e.revokeRules();
-        e.createInstallDir();
     }
 
     owner.createPrivateDir();
@@ -263,7 +259,6 @@ RUNNER_TEST(security_manager_32_double_share)
     // cleanup
     for (auto &e : helper) {
         e.revokeRules();
-        e.createInstallDir();
     }
     owner.createPrivateDir();
     owner.createSharedFile();
@@ -323,7 +318,6 @@ RUNNER_TEST(security_manager_33_share_two_with_one)
     // cleanup
     for (auto &e : helper) {
         e.revokeRules();
-        e.createInstallDir();
     }
     owner.createPrivateDir();
     owner.createSharedFile(0);
@@ -406,7 +400,6 @@ RUNNER_TEST(security_manager_34_share_one_with_two)
     // cleanup
     for (auto &e : helper) {
         e.revokeRules();
-        e.createInstallDir();
     }
     owner.createPrivateDir();
     owner.createSharedFile();
@@ -480,7 +473,6 @@ RUNNER_TEST(security_manager_35_share_two_with_two)
     // cleanup
     for (auto &e : helper) {
         e.revokeRules();
-        e.createInstallDir();
     }
     owner.createPrivateDir();
     owner.createSharedFile(0);
@@ -570,7 +562,6 @@ RUNNER_TEST(security_manager_35_share_uninstall_target) {
 
     for (auto &e : helper) {
         e.revokeRules();
-        e.createInstallDir();
     }
 
     owner.createPrivateDir();
@@ -619,7 +610,6 @@ RUNNER_TEST(security_manager_35_share_uninstall_owner) {
 
     for (auto &e : helper) {
         e.revokeRules();
-        e.createInstallDir();
     }
 
     owner.createPrivateDir();
@@ -670,7 +660,6 @@ RUNNER_TEST(security_manager_36_share_pkg_owner_uninstall) {
 
     for (auto &e : helper) {
         e.revokeRules();
-        e.createInstallDir();
     }
 
     owner.createPrivateDir();
@@ -725,7 +714,6 @@ RUNNER_TEST(security_manager_36_share_pkg_owner_drop) {
 
     for (auto &e : helper) {
         e.revokeRules();
-        e.createInstallDir();
     }
 
     owner.createPrivateDir();
@@ -780,7 +768,6 @@ RUNNER_TEST(security_manager_36_share_pkg_target_uninstall) {
 
     for (auto &e : helper) {
         e.revokeRules();
-        e.createInstallDir();
     }
 
     owner.createPrivateDir();
@@ -836,7 +823,6 @@ RUNNER_TEST(security_manager_37_pkg_double_share_target_uninstall) {
 
     for (auto &e : helper) {
         e.revokeRules();
-        e.createInstallDir();
     }
 
     owner.createPrivateDir();
@@ -900,7 +886,6 @@ RUNNER_TEST(security_manager_37_pkg_double_share_owner_uninstall) {
 
     for (auto &e : helper) {
         e.revokeRules();
-        e.createInstallDir();
     }
 
     owner.createPrivateDir();
@@ -966,7 +951,6 @@ RUNNER_TEST(security_manager_38_share_one_with_two_uninstall_target)
     // cleanup
     for (auto &e : helper) {
         e.revokeRules();
-        e.createInstallDir();
     }
     owner.createPrivateDir();
     owner.createSharedFile();
@@ -1039,7 +1023,6 @@ RUNNER_TEST(security_manager_38_share_one_with_two_uninstall_owner)
     // cleanup
     for (auto &e : helper) {
         e.revokeRules();
-        e.createInstallDir();
     }
     owner.createPrivateDir();
     owner.createSharedFile();
index 474a956..afb36f7 100644 (file)
@@ -67,9 +67,6 @@ AppInstallHelper prepAIH(const std::string &appName,
     const uid_t OWNER_UID = 5001;
     bool appIsLocal = true;
     AppInstallHelper appInstallHelper(appName, pkgName, appIsLocal, OWNER_UID, version);
-
-    appInstallHelper.createInstallDir();
-
     if (isSharedRO)
         appInstallHelper.createSharedRODir();
 
index f7d247b..77e4052 100644 (file)
@@ -35,7 +35,6 @@ RUNNER_TEST(security_manager_54_path_req_no_pkg)
     user.create();
 
     AppInstallHelper app("sm_test_54", user.getUid());
-    app.createInstallDir();
     app.createPrivateDir();
 
     PathsRequest req;
@@ -51,7 +50,6 @@ RUNNER_TEST(security_manager_55_path_req_empty_pkg)
     TemporaryTestUser user("sm_test_55_user_name", GUM_USERTYPE_NORMAL, false);
     user.create();
     AppInstallHelper app("sm_test_55", user.getUid());
-    app.createInstallDir();
     app.createPrivateDir();
 
     PathsRequest req;
@@ -79,7 +77,6 @@ RUNNER_TEST(security_manager_57_path_req_wrong_uid)
     AppInstallHelper app("sm_test_57", user.getUid());
     ScopedInstaller appInstall(app);
 
-    app.createInstallDir();
     app.createPrivateDir();
     PathsRequest preq;
     preq.setPkgId(app.getPkgId());
@@ -110,7 +107,6 @@ RUNNER_TEST(security_manager_59_path_req_as_root_positive)
     AppInstallHelper app("sm_test_59", user.getUid());
     ScopedInstaller appInstall(app);
 
-    app.createInstallDir();
     app.createPrivateDir();
     PathsRequest preq;
     preq.setPkgId(app.getPkgId());
@@ -126,7 +122,6 @@ RUNNER_CHILD_TEST(security_manager_60_path_req_as_user_positive)
     user.create();
 
     AppInstallHelper app("sm_test_60", user.getUid());
-    app.createInstallDir();
     ScopedInstaller appInstall(app);
 
     RUNNER_ASSERT_ERRNO_MSG(drop_root_privileges(user.getUid(), user.getGid()) == 0,
@@ -150,7 +145,6 @@ RUNNER_CHILD_TEST(security_manager_61_path_req_different_user)
     AppInstallHelper app("sm_test_61", user2.getUid());
     ScopedInstaller appInstall(app);
 
-    app.createInstallDir();
     app.createPrivateDir();
 
     pid_t pid = fork();
@@ -206,7 +200,6 @@ RUNNER_CHILD_TEST(security_manager_63a_path_req_as_user)
     AppInstallHelper app("sm_test_63", user.getUid());
     ScopedInstaller appInstall(app);
 
-    app.createInstallDir();
     app.createPrivateDir();
 
     int result = drop_root_privileges(user.getUid(), user.getGid());
@@ -229,7 +222,6 @@ RUNNER_CHILD_TEST(security_manager_63b_path_req_preloaded_as_user)
     AppInstallHelper app("sm_test_63", user.getUid());
     ScopedInstaller appInstall(app);
 
-    app.createInstallDir();
     app.createPrivateDir();
 
     int result = drop_root_privileges(user.getUid(), user.getGid());
@@ -250,7 +242,6 @@ RUNNER_TEST(security_manager_64a_path_req_as_local_as_root)
     user.create();
 
     AppInstallHelper app("sm_test_64", user.getUid());
-    app.createInstallDir();
     ScopedInstaller appInstall(app);
 
     app.createPrivateDir();
@@ -270,7 +261,6 @@ RUNNER_CHILD_TEST(security_manager_64b_path_req_as_local_as_global_user)
     user.create();
 
     AppInstallHelper app("sm_test_64", user.getUid());
-    app.createInstallDir();
     ScopedInstaller appInstall(app);
 
     app.createPrivateDir();
@@ -294,7 +284,6 @@ RUNNER_TEST(security_manager_66_path_req_check_labels)
 
     ScopedInstaller appInstall(app);
 
-    app.createInstallDir();
     app.createPrivateDir();
     app.createPrivateRODir();
     app.createPublicDir();
@@ -323,7 +312,6 @@ RUNNER_TEST(security_manager_67_path_req_shared_ro_3_0)
     app.setVersion("3.0");
     ScopedInstaller appInstall(app);
 
-    app.createInstallDir();
     app.createSharedRODir();
 
     PathsRequest preq;
@@ -344,7 +332,6 @@ RUNNER_TEST(security_manager_68_path_req_shared_ro_2_X)
     app.setVersion("2.4");
     ScopedInstaller appInstall(app);
 
-    app.createInstallDir();
     app.createSharedRODir();
 
     PathsRequest preq;
@@ -364,7 +351,6 @@ RUNNER_TEST(security_manager_69_path_req_trusted_rw_no_author)
     AppInstallHelper app("sm_test_69", user.getUid());
     ScopedInstaller appInstall(app);
 
-    app.createInstallDir();
     app.createTrustedDir();
 
     PathsRequest preq;
@@ -384,7 +370,6 @@ RUNNER_TEST(security_manager_70_path_req_trusted_rw_positive)
     app.setAuthor("sm_test_70_author");
     ScopedInstaller appInstall(app);
 
-    app.createInstallDir();
     app.createTrustedDir();
 
     PathsRequest preq;
index 64253e7..531d9f2 100644 (file)
@@ -106,7 +106,6 @@ RUNNER_TEST(security_manager_43_app_install_with_trusted_path)
     // cleanup
     for (auto &e : helper) {
         e.revokeRules();
-        e.createInstallDir();
         e.createTrustedDir();
     }
 
@@ -181,7 +180,6 @@ RUNNER_TEST(security_manager_43_app_install_with_trusted_path)
 RUNNER_TEST(security_manager_44_app_install_with_trusted_path_no_author_id)
 {
     AppInstallHelper help("app44");
-    help.createInstallDir();
     help.createTrustedDir();
 
     // install app with shared/trusted dir but without authors id
@@ -205,7 +203,6 @@ RUNNER_TEST(security_manager_45_test_authorId_identificator_creation)
     // cleanup
     for (auto &e : helper) {
         e.revokeRules();
-        e.createInstallDir();
         e.createTrustedDir();
     }
 
@@ -248,7 +245,6 @@ void test_46_pkgId_deinstallation(bool isHybrid) {
 
     for (auto &e : helper) {
         e.revokeRules();
-        e.createInstallDir();
         e.createTrustedDir();
     }