Add tests for installing apps by different users 97/24697/15
authorJan Cybulski <j.cybulski@samsung.com>
Fri, 18 Jul 2014 07:59:10 +0000 (09:59 +0200)
committerJan Cybulski <j.cybulski@samsung.com>
Wed, 6 Aug 2014 13:14:42 +0000 (15:14 +0200)
Change-Id: I65f78b92c974f5711f91a526593e4d222e1bd43b

packaging/security-tests.spec
tests/security-manager-tests/CMakeLists.txt
tests/security-manager-tests/security_manager_tests.cpp

index 7cb7426..b9b6d6d 100644 (file)
@@ -86,6 +86,7 @@ echo "security-tests postinst done ..."
 /usr/share/privilege-control/*
 /etc/smack/test_privilege_control_DIR/*
 /etc/smack/test_DIR/*
+/home/app/securitytests
 /usr/bin/test-app-efl
 /usr/bin/test-app-osp
 /usr/bin/test-app-wgt
index 854642c..066bfcb 100644 (file)
@@ -81,3 +81,8 @@ INSTALL(DIRECTORY
     ${PROJECT_SOURCE_DIR}/tests/security-manager-tests/test_DIR
     DESTINATION /etc/smack/
 )
+
+INSTALL(DIRECTORY
+    ${PROJECT_SOURCE_DIR}/tests/security-manager-tests/test_DIR
+    DESTINATION /home/app/securitytests/
+)
index 45c581d..0e505af 100644 (file)
@@ -25,6 +25,9 @@ static const char *const SM_PKG_ID1 = "sm_test_pkg_id_double";
 static const char *const SM_APP_ID2 = "sm_test_app_id_full";
 static const char *const SM_PKG_ID2 = "sm_test_pkg_id_full";
 
+static const char *const SM_APP_ID3 = "sm_test_app_id_uid";
+static const char *const SM_PKG_ID3 = "sm_test_pkg_id_uid";
+
 static const privileges_t SM_ALLOWED_PRIVILEGES = {
     "security_manager_test_rules2_r",
     "security_manager_test_rules2_no_r"
@@ -76,6 +79,7 @@ static const char *const SM_PRIVATE_PATH = "/etc/smack/test_DIR/app_dir";
 static const char *const SM_PUBLIC_PATH = "/etc/smack/test_DIR/app_dir_public";
 static const char *const SM_PUBLIC_RO_PATH = "/etc/smack/test_DIR/app_dir_public_ro";
 static const char *const SM_DENIED_PATH = "/etc/smack/test_DIR/non_app_dir";
+static const char *const SM_PRIVATE_PATH_FOR_USER_5000 = "/home/app/securitytests/test_DIR";
 
 
 static bool isLinkToExec(const char *fpath, const struct stat *sb)
@@ -532,6 +536,78 @@ RUNNER_CHILD_TEST_NOSMACK(security_manager_04_set_label_from_appid_nosmack)
     uninstall_app(app_id, pkg_id, true, true);
 }
 
+
+
+static void prepare_request(AppInstReqUniquePtr &request,
+              const char *const app_id,
+              const char *const pkg_id,
+              app_install_path_type pathType,
+              const char *const path)
+{
+    int result;
+    request.reset(do_app_inst_req_new());
+
+    result = security_manager_app_inst_req_set_app_id(request.get(), app_id);
+    RUNNER_ASSERT_MSG_BT((lib_retcode)result == SECURITY_MANAGER_SUCCESS,
+            "setting app id failed. Result: " << result);
+
+    result = security_manager_app_inst_req_set_pkg_id(request.get(), pkg_id);
+    RUNNER_ASSERT_MSG_BT((lib_retcode)result == SECURITY_MANAGER_SUCCESS,
+            "setting pkg id failed. Result: " << result);
+
+    result = security_manager_app_inst_req_add_path(request.get(), path, pathType);
+    RUNNER_ASSERT_MSG_BT((lib_retcode)result == SECURITY_MANAGER_SUCCESS,
+            "setting allowed path failed. Result: " << result);
+}
+
+
+
+RUNNER_CHILD_TEST(security_manager_05_app_install_uninstall_by_uid_5000)
+{
+    int result;
+    AppInstReqUniquePtr request;
+
+
+    //switch user to non-root
+    result = drop_root_privileges();
+    RUNNER_ASSERT_MSG_BT(result == 0, "drop_root_privileges failed");
+
+    //install app as non-root user and try to register public path (should fail)
+    prepare_request(request, SM_APP_ID3, SM_PKG_ID3, SECURITY_MANAGER_PATH_PUBLIC, SM_PRIVATE_PATH_FOR_USER_5000);
+
+    result = security_manager_app_install(request.get());
+    RUNNER_ASSERT_MSG_BT((lib_retcode)result == SECURITY_MANAGER_ERROR_AUTHENTICATION_FAILED,
+            "installing app not failed. Result: " << result);
+
+    //install app as non-root user
+    //should fail (non-root users may only register folders inside their home)
+    prepare_request(request, SM_APP_ID3, SM_PKG_ID3, SECURITY_MANAGER_PATH_PRIVATE, SM_PRIVATE_PATH);
+
+    result = security_manager_app_install(request.get());
+    RUNNER_ASSERT_MSG_BT((lib_retcode)result == SECURITY_MANAGER_ERROR_AUTHENTICATION_FAILED,
+            "installing app not failed. Result: " << result);
+
+    //install app as non-root user
+    //should succeed - this time i register folder inside user's home dir
+    prepare_request(request, SM_APP_ID3, SM_PKG_ID3, SECURITY_MANAGER_PATH_PRIVATE, SM_PRIVATE_PATH_FOR_USER_5000);
+
+    result = security_manager_app_install(request.get());
+    RUNNER_ASSERT_MSG_BT((lib_retcode)result == SECURITY_MANAGER_SUCCESS,
+            "installing app failed. Result: " << result);
+
+    //uninstall app as non-root user
+    request.reset(do_app_inst_req_new());
+
+    result = security_manager_app_inst_req_set_app_id(request.get(), SM_APP_ID3);
+    RUNNER_ASSERT_MSG_BT((lib_retcode)result == SECURITY_MANAGER_SUCCESS,
+            "setting app id failed. Result: " << result);
+
+    result = security_manager_app_uninstall(request.get());
+    RUNNER_ASSERT_MSG_BT((lib_retcode)result == SECURITY_MANAGER_SUCCESS,
+            "uninstalling app failed. Result: " << result);
+}
+
+
 int main(int argc, char *argv[])
 {
     SummaryCollector::Register();